Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
d5e1f3c
Add Playwright e2e test suite (#276)
vinnybod May 2, 2026
b3c7408
Bump actions/cache from 4 to 5 (#278)
dependabot[bot] May 15, 2026
4dfe2aa
Bump actions/upload-artifact from 4 to 7 (#277)
dependabot[bot] May 15, 2026
77465ee
Convert global mixins to composables (#281)
vinnybod May 21, 2026
4df1ccf
Replace deprecated moment with dayjs (#284)
vinnybod May 21, 2026
d782a7a
Vue quick-win modernization (dead config, jsconfig, engines, emits, s…
vinnybod May 21, 2026
9c1dd17
Migrate ESLint to v9 flat config on the official Vue stack (#286)
vinnybod May 21, 2026
7166390
Extract ANSI helpers and auto-refresh polling into shared code (#285)
vinnybod May 21, 2026
65cc87a
Add Vitest unit-test harness + first batch of data-layer tests (#282)
vinnybod May 21, 2026
af058be
Upgrade build/state stack to latest: Vite 8, Pinia 3, persistedstate …
vinnybod May 21, 2026
129d201
Fix socket handler + timer leaks in Chat via useSocketHandlers compos…
vinnybod May 21, 2026
951d7d9
Replace axios with native fetch (#288)
vinnybod May 31, 2026
7a7e359
Prune lightly-used deps: drop semver + table (#291)
vinnybod May 31, 2026
0259358
Refactor GeneralForm into composables + add server-side validation fe…
vinnybod Jun 1, 2026
27fc30e
Tidy unreleased changelog entries and add missing #290 entry
vinnybod Jun 1, 2026
dd037f7
Bump actions/checkout from 6 to 7 (#296)
dependabot[bot] Jul 1, 2026
f0255b1
Bump actions/cache from 5 to 6 (#299)
dependabot[bot] Jul 1, 2026
08eb99d
Prepare release 3.6.0 private
web-flow Jul 6, 2026
057218a
Merge pull request #313 from BC-SECURITY/release/3.6.0-private
vinnybod Jul 6, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
75 changes: 0 additions & 75 deletions .eslintrc.js

This file was deleted.

39 changes: 37 additions & 2 deletions .github/workflows/lint-and-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,10 @@ jobs:
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- uses: actions/checkout@v6
- uses: actions/checkout@v7
- uses: actions/setup-node@v6
with:
node-version: 20
node-version: 22
cache: "yarn"
- name: Get app version
run: |
Expand All @@ -28,3 +28,38 @@ jobs:
run: yarn lint
- name: Run Prettier
run: yarn format:check

test:
needs: lint
runs-on: ubuntu-latest
timeout-minutes: 25
steps:
- uses: actions/checkout@v7
- uses: actions/setup-node@v6
with:
node-version: 22
cache: "yarn"
- name: Install modules
run: yarn

- name: Cache Playwright browsers
uses: actions/cache@v6
with:
path: ~/.cache/ms-playwright
key: playwright-${{ runner.os }}-${{ hashFiles('**/node_modules/@playwright/test/package.json') }}
restore-keys: |
playwright-${{ runner.os }}-

- name: Install Playwright browsers
run: yarn playwright install chromium --with-deps

- name: Run Playwright tests
run: yarn test:e2e

- name: Upload Playwright report
if: failure()
uses: actions/upload-artifact@v7
with:
name: playwright-report
path: playwright-report/
retention-days: 7
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Check out code
uses: actions/checkout@v6
uses: actions/checkout@v7
with:
submodules: "recursive"
ref: private-main
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/release-private-start.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ jobs:
- name: Set target branch
run: echo "TARGET_BRANCH=private-main" >> $GITHUB_ENV
- name: Check out code
uses: actions/checkout@v6
uses: actions/checkout@v7
with:
ref: ${{ env.TARGET_BRANCH }}
submodules: "recursive"
Expand All @@ -36,7 +36,7 @@ jobs:
git config user.email noreply@github.com
- uses: actions/setup-node@v6
with:
node-version: 20
node-version: 22
- name: Change version number
run: |
if [ -n "${{ github.event.inputs.overrideVersion }}" ]; then
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/release-private-tag.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Check out code
uses: actions/checkout@v6
uses: actions/checkout@v7
with:
ref: ${{ github.base_ref }}
fetch-depth: 0
Expand All @@ -23,7 +23,7 @@ jobs:
git config user.email noreply@github.com
- uses: actions/setup-node@v6
with:
node-version: 20
node-version: 22
- name: Set application version as variable
run: |
echo "APP_VERSION=$(npm pkg get version | sed 's/"//g')" >> $GITHUB_ENV
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/release-public-start.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Check out sponsor repo
uses: actions/checkout@v6
uses: actions/checkout@v7
with:
repository: "BC-Security/Starkiller-Sponsors"
ref: ${{ inputs.sponsorTag }}
Expand All @@ -31,7 +31,7 @@ jobs:
git config user.email noreply@github.com
- uses: actions/setup-node@v6
with:
node-version: 20
node-version: 22
- name: Get app version
run: |
echo "APP_VERSION=$(npm pkg get version | sed 's/"//g')" >> $GITHUB_ENV
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/release-public-tag.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Check out code
uses: actions/checkout@v6
uses: actions/checkout@v7
with:
fetch-depth: 0
- name: Initialize mandatory git config
Expand All @@ -27,7 +27,7 @@ jobs:
echo "LATEST_TAG=$latest_tag" >> $GITHUB_ENV
- uses: actions/setup-node@v6
with:
node-version: 20
node-version: 22
cache: "yarn"
- name: Set application version as variable
run: |
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/release-sponsor-kali-start.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ jobs:
run: |
echo "TARGET_BRANCH=sponsors-main" >> $GITHUB_ENV
- name: Check out code
uses: actions/checkout@v6
uses: actions/checkout@v7
with:
ref: sponsors-main
fetch-depth: 0
Expand All @@ -23,7 +23,7 @@ jobs:
git config user.email noreply@github.com
- uses: actions/setup-node@v6
with:
node-version: 20
node-version: 22
- name: Get app version
run: |
echo "APP_VERSION=$(npm pkg get version | sed 's/"//g')" >> $GITHUB_ENV
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/release-sponsor-kali-tag.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ jobs:
run: |
echo "TAG_NAME=$(echo ${{ github.head_ref }} | sed 's/release\///')" >> $GITHUB_ENV
- name: Check out code
uses: actions/checkout@v6
uses: actions/checkout@v7
with:
ref: ${{ github.base_ref }}
token: ${{ secrets.RELEASE_TOKEN }}
Expand All @@ -25,7 +25,7 @@ jobs:
git config user.email noreply@github.com
- uses: actions/setup-node@v6
with:
node-version: 20
node-version: 22
cache: "yarn"
- name: Set application version as variable
run: |
Expand Down
5 changes: 5 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -27,3 +27,8 @@ yarn-error.log*

#Electron-builder output
/dist_electron

/test-results/
/playwright-report/
/playwright/.cache/
.claude/
38 changes: 37 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,40 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

## [3.6.0] - 2026-07-06

### Added

- Added server-side validation error feedback to dynamic forms
- Added Playwright end-to-end test suite, run as a CI job on every PR
- Added Vitest unit-test harness with initial store and utility tests
- Added `jsconfig.json` for editor path-alias resolution

### Changed

- Refactored GeneralForm into reusable form composables
- Replaced axios with the native Fetch API
- Replaced moment with dayjs
- Converted global mixins to composables
- Extracted shared ANSI-to-HTML and auto-refresh helpers
- Migrated ESLint to v9 flat config
- Upgraded the build and state stack to latest majors (Vite 8, Pinia 3, persistedstate 4, Vitest 4)
- Bumped CI workflows to Node 22

### Removed

- Removed unused `vue.config.js`
- Removed unused dependencies (uuid, axios, qs, semver, table)

### Fixed

- Fixed module execution posting to an undefined agent when selected from autocomplete
- Fixed Vue Router "Missing required param" error after module execution
- Fixed socket and timer leaks in the chat widget causing duplicate messages and inflated unread counts
- Fixed unstable list keys on chat messages and notifications
- Fixed file upload not auto-selecting the uploaded file in module execution and obfuscation forms
- Removed leftover debug logging from API modules

## [3.5.0] - 2026-04-26

### Changed
Expand Down Expand Up @@ -477,7 +511,9 @@ Including but not limited to:

- Initial Release

[Unreleased]: https://github.com/BC-SECURITY/Starkiller-Sponsors/compare/v3.5.0...HEAD
[Unreleased]: https://github.com/BC-SECURITY/Starkiller-Sponsors/compare/v3.6.0...HEAD

[3.6.0]: https://github.com/BC-SECURITY/Starkiller-Sponsors/compare/v3.5.0...v3.6.0

[3.5.0]: https://github.com/BC-SECURITY/Starkiller-Sponsors/compare/v3.4.0...v3.5.0

Expand Down
27 changes: 27 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,3 +34,30 @@ The more information you provide in a Github issue the easier it will be for us
## Use a Consistent Coding Style

We use Airbnb's and Vue's recommended ESLint configs. To make your life easier, consider installing an ESLint plugin in your editor of choice. You can also run `yarn lint`.

## Running tests

End-to-end tests live in `e2e/` and use [Playwright](https://playwright.dev/).

```bash
yarn test:e2e # headless
yarn test:e2e:ui # interactive UI mode
yarn test:e2e e2e/agents-list.spec.js # single spec
```

The dev server is auto-started by Playwright on port 5173. If you already have `yarn dev` running locally, it's reused.

### Adding a spec

1. Add or extend a fixture in `e2e/fixtures/<resource>.js`.
2. Add or extend a mock helper in `e2e/helpers/api/<resource>.js`.
3. Add a spec at `e2e/<feature>.spec.js`. Use `setFakeAuth(page)` (and `blockSockets`, `mockEmpireBootstrap`) in `beforeEach`.
4. Run it: `yarn test:e2e e2e/<feature>.spec.js`.

### Selectors and conventions

- Routes are hash-based — use `/#/agents` style paths in `goto`. URL assertions use regex like `/#\/agents$/`.
- Prefer locators by role/label/text. Add `data-testid` only when ambiguous.
- Vuetify dialogs and menus portal to `document.body`. Use `page.getByRole("dialog")` rather than scoped queries inside parents.
- Never call `page.waitForTimeout`. Use `expect(...).toBeVisible()` and `expect.poll(...)` for retry semantics.
- Don't commit `.only` — CI will fail (`forbidOnly`).
8 changes: 8 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,14 @@ yarn dev
yarn build
```

### Run end-to-end tests

```
yarn test:e2e
```

See [CONTRIBUTING.md](CONTRIBUTING.md#running-tests) for the testing workflow.

## Changelog

Detailed changes for each release are documented in the [changelog](./CHANGELOG.md).
Expand Down
Loading
Loading