Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
34 changes: 34 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -49,3 +49,37 @@ jobs:
python-version: "3.12"
- run: pip install ruff
- run: ruff check src/ tests/

desktop:
# Exercises the real PySide6 stack (the main `test` job runs the stubbed
# smokes only) on both Linux (offscreen) and Windows.
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, windows-latest]
env:
QT_QPA_PLATFORM: offscreen
steps:
- uses: actions/checkout@v4

- uses: actions/setup-python@v5
with:
python-version: "3.12"

- name: Install Qt offscreen runtime deps (Linux)
if: runner.os == 'Linux'
run: |
sudo apt-get update
sudo apt-get install -y \
libegl1 libgl1 libxkbcommon0 libdbus-1-3 \
libxcb-cursor0 libxcb-icccm4 libxcb-keysyms1 \
libxcb-shape0 libxcb-xinerama0

- name: Install package with desktop extras
run: |
python -m pip install --upgrade pip
python -m pip install -e ".[dev,desktop]"

- name: Desktop import + construct + launch smoke (real Qt)
run: python -m pytest tests/test_desktop_smoke.py -v --tb=short
84 changes: 83 additions & 1 deletion .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -112,9 +112,88 @@ jobs:
name: ${{ matrix.artifact }}
path: dist/${{ matrix.artifact }}${{ matrix.ext }}

# 4b. Build the PySide6 desktop app (onedir) + Windows installer
desktop:
needs: test
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
include:
- os: windows-latest
artifact: parallel-agents-desktop-windows-x86_64
- os: ubuntu-latest
artifact: parallel-agents-desktop-linux-x86_64
- os: macos-latest
artifact: parallel-agents-desktop-macos-arm64
env:
QT_QPA_PLATFORM: offscreen
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.12"

- name: Install Qt offscreen runtime deps (Linux)
if: runner.os == 'Linux'
run: |
sudo apt-get update
sudo apt-get install -y \
libegl1 libgl1 libxkbcommon0 libdbus-1-3 \
libxcb-cursor0 libxcb-icccm4 libxcb-keysyms1 \
libxcb-shape0 libxcb-xinerama0

- name: Install package with desktop extras
run: |
python -m pip install --upgrade pip
pip install -e ".[desktop]"
pip install pyinstaller

- name: Build desktop onedir bundle
run: pyinstaller --noconfirm parallel-agents-desktop.spec

- name: Smoke-execute the built binary (Windows)
if: runner.os == 'Windows'
run: dist\parallel-agents-desktop\parallel-agents-desktop.exe --smoke

- name: Smoke-execute the built binary (Linux)
if: runner.os == 'Linux'
run: ./dist/parallel-agents-desktop/parallel-agents-desktop --smoke

- name: Smoke-execute the built binary (macOS)
if: runner.os == 'macOS'
run: ./dist/parallel-agents-desktop/parallel-agents-desktop --smoke

- name: Build Windows installer (Inno Setup)
if: runner.os == 'Windows'
run: |
choco install innosetup --no-progress -y
# Derive a numeric version from a vX.Y.Z tag; fall back for dispatch runs.
$ref = "${{ github.ref_name }}"
$version = $ref -replace '^v', ''
if ($version -notmatch '^\d+\.\d+\.\d+') { $version = '0.0.0' }
& "${env:ProgramFiles(x86)}\Inno Setup 6\ISCC.exe" `
"/DMyAppVersion=$version" installer\parallel-agents-desktop.iss
shell: pwsh

- name: Package onedir bundle (non-Windows)
if: runner.os != 'Windows'
run: |
cd dist
tar -czf "${{ matrix.artifact }}.tar.gz" parallel-agents-desktop

- name: Upload desktop bundle
uses: actions/upload-artifact@v4
with:
name: ${{ matrix.artifact }}
path: |
dist/${{ matrix.artifact }}.tar.gz
installer/Output/*.exe
if-no-files-found: ignore

# 5. Create GitHub Release with binaries
release:
needs: [binaries, pypi, npm]
needs: [binaries, desktop, pypi, npm]
runs-on: ubuntu-latest
permissions:
contents: write
Expand All @@ -134,3 +213,6 @@ jobs:
artifacts/parallel-agents-linux-x86_64/parallel-agents-linux-x86_64
artifacts/parallel-agents-macos-arm64/parallel-agents-macos-arm64
artifacts/parallel-agents-windows-x86_64/parallel-agents-windows-x86_64.exe
artifacts/parallel-agents-desktop-windows-x86_64/**/*.exe
artifacts/parallel-agents-desktop-linux-x86_64/*.tar.gz
artifacts/parallel-agents-desktop-macos-arm64/*.tar.gz
8 changes: 8 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,9 @@ build/
.venv/
venv/
env/
.uv-python/
.uv-cache/
uv.lock

# IDE
.vscode/
Expand Down Expand Up @@ -38,6 +41,11 @@ npm-wrapper/node_modules/

# pytest
.pytest_cache/
.coverage
htmlcov/

# local assistant workspace
.claude/

# local connector/gateway scratch
tmp-slack-test/
16 changes: 15 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,10 @@ The format is based on Keep a Changelog and this project follows Semantic Versio
- Added expanded benchmark fixture: `examples/public_benchmark_v2.json`.
- Added `parallel-agents eval publish` for shareable public benchmark JSON/Markdown snapshots.
- Desktop office improvements:
- first-run onboarding action shared with `parallel-agents office onboard`
- project-scoped local gateway start/stop/status controls
- runs page can route real pipeline execution through the local gateway control plane with fallback
- worker tiles now prefer structured pipeline trace events over status-string inference
- project-home summary with recent project picker
- runs page now executes real pipeline runs
- live run activity stream and worker status updates during execution
Expand All @@ -39,8 +43,18 @@ The format is based on Keep a Changelog and this project follows Semantic Versio
- approvals queue bulk approve/reject actions (selected and visible rows)
- approvals artifact preview with previous-run diff
- approvals audit-event drilldown for run/approval history
- GitHub PR creation flow from desktop with run-linked PR summary artifact
- GitHub PR creation flow from desktop with run-linked PR summary artifact, branch suggestions, and generated-patch approval gate
- desktop company flow `gh auth status` check for preflight GitHub readiness
- Gateway now supports core planner/worker/judge execution through `POST /runs/pipeline`, including persistent status/trace events and a `final-output` artifact.
- Gateway now exposes a local channel-adapter pairing boundary:
- `POST /channels/slack/events` with Slack signature verification and URL verification
- `POST /channels/inbound`
- `POST /channels/pairing/approve`
- `GET /channels/peers`
- `parallel-agents gateway channel inbound/approve/peers`
- unknown senders receive pairing codes and are not processed until approved
- `.gitignore` now excludes local `uv` caches/lockfiles, coverage output, and gateway connector scratch directories.
- Added `parallel-agents office onboard` for local workspace setup, model-readiness reporting, GitHub-readiness reporting, and suggested next actions.
- Workspace knowledge layer v1:
- `parallel-agents office memory add/list/search/policies`
- project workspace memory store under `.parallel-agents/memory/`
Expand Down
24 changes: 20 additions & 4 deletions PROJECT_STATUS.md
Original file line number Diff line number Diff line change
Expand Up @@ -49,9 +49,13 @@ The current release line is focused on local, reviewable workflows and a project
- workspace memory endpoints (`/memory/entries`, `/memory/search`, `/memory/policies`)
- in-process queued execution with persistent run/job states
- run listing plus per-run job inspection
- core pipeline run endpoint (`POST /runs/pipeline`) with persistent events and `final-output` artifacts
- cancel and retry controls
- optional API-key protection for non-local exposure
- optional JWT HS256 auth with issuer/audience validation
- channel adapter endpoints with default pairing/allowlist behavior for unknown inbound senders
- signed Slack Events endpoint with URL verification, bot-message ignore rules, and local pairing enforcement
- CLI commands for channel inbound simulation, pairing approval, and approved peer listing
- MCP product-surface foundation:
- `tool_discovery` output with read/write access classes
- approval-required metadata for write tools
Expand All @@ -64,16 +68,19 @@ The current release line is focused on local, reviewable workflows and a project
- Local desktop/project office foundation:
- `.parallel-agents/` workspace inside a project folder
- `office init`, `office status`, and `office home` commands
- `office onboard` command for first-run setup, model readiness, GitHub readiness, and next actions
- `office doctor` diagnostics command for local readiness checks
- `office fix-setup` CLI fallback for safe local setup remediation
- `office artifacts` for run-linked artifact inspection
- workspace directories for runs, artifacts, approvals, audit, and metrics
- workspace memory files for decisions, lessons, and policies
- `office memory add/list/search/policies` for local knowledge capture
- desktop project-home summary with recent project picker
- desktop onboarding action for setup/model/GitHub readiness
- desktop project actions for `Run Doctor` and `Fix Setup`
- desktop Runs page wired to execute real pipeline runs
- live run activity stream and per-worker status updates in desktop UI
- desktop project-scoped gateway start/stop/status controls
- desktop Runs page wired to execute real pipeline runs, using the local gateway when available
- live run activity stream and event-native per-worker status updates in desktop UI
- artifact compare view against previous runs (inline unified diff)
- artifact browser search/filter/sort controls by run and artifact type
- artifact quick actions (open file, reveal folder, export copy)
Expand All @@ -86,8 +93,8 @@ The current release line is focused on local, reviewable workflows and a project
- comparison drill-down sections for workflow/project/case-level change drivers
- case-row evidence navigation links (score/gate/breakdown/results and run artifacts)
- desktop approvals queue filters and one-click approved issue-plan apply
- desktop GitHub PR creation flow with run-linked PR summary artifact
- PyInstaller spec support for the project-office module
- desktop GitHub PR creation flow with run-linked PR summary artifact, branch suggestions, and generated-patch approval gate
- PyInstaller spec support for the project-office, onboarding, and gateway modules

## Experimental

Expand All @@ -109,6 +116,7 @@ parallel-agents company apply --run-id run-123
```

```bash
parallel-agents office onboard --project . --name "Project Name"
parallel-agents office init --project . --name "Project Name"
parallel-agents office status --project .
parallel-agents office doctor --project .
Expand All @@ -120,6 +128,11 @@ parallel-agents office artifacts --project .
```bash
parallel-agents gateway start --host 127.0.0.1 --port 8733

# enqueue a real planner/worker/judge run through the local job API
curl -X POST http://127.0.0.1:8733/runs/pipeline ^
-H "Content-Type: application/json" ^
-d "{\"run_id\":\"run-123\",\"task\":\"Review this repository\",\"repo_path\":\".\"}"

# optional auth for non-local use (API key)
set PA_GATEWAY_API_KEY=my-secret
parallel-agents gateway start --host 0.0.0.0 --port 8733
Expand All @@ -134,6 +147,8 @@ parallel-agents gateway start --host 0.0.0.0 --port 8733
## Known Limitations

- Desktop GUI is available but still maturing (single-user local workflow focus).
- Desktop gateway lifecycle is session-owned by the UI; OS daemon/tray install and auto-restart are not implemented yet.
- Slack is the only real external channel connector; Telegram and Discord remain planned connectors on top of the pairing adapter.
- No hosted MCP endpoint or OAuth yet.
- No distributed/remote worker execution beyond the current local in-process queue.
- No hosted-grade OAuth/session model yet (local API key/JWT + gateway policy toggles are available).
Expand All @@ -149,3 +164,4 @@ Expand the local desktop office into a full `.exe` product surface:
- GitHub connect + repository integration
- PR creation and review actions from the local office
- richer release and productivity views
- OS daemon/tray gateway lifecycle plus Telegram and Discord channel connectors
27 changes: 24 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,7 @@ parallel-agents company apply --run-id run-123
parallel-agents company apply --run-id run-123 --policy-file company/apply-policy.json

# Initialize a project-folder office workspace
parallel-agents office onboard --project ./my-project --name "My Project"
parallel-agents office init --project ./my-project --name "My Project"
parallel-agents office status --project ./my-project
parallel-agents office doctor --project ./my-project
Expand Down Expand Up @@ -156,6 +157,15 @@ parallel-agents gateway start --jwt-secret replace-with-shared-secret --jwt-issu
# Optional remote MCP write enablement over gateway /mcp endpoints
set PA_GATEWAY_ALLOW_REMOTE_WRITE_TOOLS=1
parallel-agents gateway start --allow-remote-write-tools

# Optional Slack Events connector
set PA_GATEWAY_SLACK_SIGNING_SECRET=xox-signing-secret
parallel-agents gateway start --slack-signing-secret xox-signing-secret

# Channel pairing adapter
parallel-agents gateway channel inbound --channel slack --peer-id U123 --message "Review this repo" --execute
parallel-agents gateway channel approve --code ABC123 --approved-by operator
parallel-agents gateway channel peers --channel slack
```

## CLI Commands
Expand All @@ -172,6 +182,7 @@ parallel-agents gateway start --allow-remote-write-tools
| `parallel-agents eval run/annotate/sync-pr/sync-ci/score/compare/breakdown/publish/gate` | Run, annotate, auto-sync PR acceptance and CI regressions, score, compare, break down cost/time, publish benchmark snapshots, and quality-gate productivity/effectiveness benchmarks |
| `parallel-agents release verify` | Run consolidated release checklist checks (lint/tests/build/help/mcp/npm/version parity) |
| `parallel-agents gateway start` | Start the local project/run/job API |
| `parallel-agents gateway channel inbound/approve/peers` | Exercise local inbound-channel pairing and peer allowlist workflows |

## Local Project Office

Expand All @@ -192,6 +203,7 @@ my-project/
Initialize it with:

```bash
parallel-agents office onboard --project ./my-project --name "My Project"
parallel-agents office init --project ./my-project --name "My Project"
parallel-agents office status --project ./my-project
parallel-agents office doctor --project ./my-project --strict
Expand All @@ -203,7 +215,10 @@ parallel-agents office artifacts --project ./my-project
Desktop Office (`parallel-agents-desktop`) now includes:
- project home summary with recent project picker
- workspace doctor status signal (healthy/attention + warning/failure counts)
- live pipeline run execution with activity streaming and worker status tiles
- first-run onboarding action for workspace setup, model readiness, and GitHub readiness
- desktop-owned local gateway controls for start/stop/status
- live pipeline run execution through the local gateway when available, with in-process fallback
- event-native worker status updates from structured pipeline traces, with text-status fallback
- artifact compare against previous runs (inline unified diff)
- artifact browser search/filter/sort controls by run and artifact type
- artifact quick actions (open file, reveal folder, export copy)
Expand All @@ -217,10 +232,11 @@ Desktop Office (`parallel-agents-desktop`) now includes:
- case-row evidence links to underlying score/gate/breakdown/results/run artifacts
- approvals queue with status filters, bulk approve/reject, artifact diff preview, and audit-event drilldown
- company workflow steps through issue-plan apply
- GitHub PR creation from run context with generated PR summary markdown
- GitHub PR creation from run context with suggested branch names and generated PR summary markdown
- generated patches require approval of the exact `final-output` artifact before PR creation
- built-in `gh auth status` check from the Company flow before live GitHub writes

The gateway remains an internal job API for local automation and future desktop shells. It is not the primary product UI.
The gateway remains an internal job API for local automation and desktop shells. It is not the primary product UI. The desktop can start/stop a project-scoped gateway for the current session. Set `PA_DESKTOP_GATEWAY_URL` or leave `PA_DESKTOP_USE_GATEWAY=auto` to let the desktop use `http://127.0.0.1:8733` when it is running; set `PA_DESKTOP_GATEWAY_REQUIRED=1` to fail instead of falling back to in-process runs.

## Gateway API

Expand All @@ -236,6 +252,11 @@ The local gateway exposes a persistent API for projects, runs, jobs, artifacts,
- `GET /memory/search`
- `GET /memory/policies`
- `PUT /memory/policies`
- `POST /runs/pipeline`
- `POST /channels/slack/events`
- `POST /channels/inbound`
- `POST /channels/pairing/approve`
- `GET /channels/peers`
- `POST /runs/company/idea`
- `POST /runs/company/roadmap`
- `POST /runs/company/plan`
Expand Down
Loading
Loading