@chorus-aidlc/chorus 0.14.4 → 0.14.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/standalone/.next/BUILD_ID +1 -1
- package/.next/standalone/.next/app-build-manifest.json +192 -192
- package/.next/standalone/.next/app-path-routes-manifest.json +32 -32
- package/.next/standalone/.next/build-manifest.json +2 -2
- package/.next/standalone/.next/prerender-manifest.json +27 -27
- package/.next/standalone/.next/server/app/(dashboard)/project-groups/[uuid]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/activity/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/[ideaUuid]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/page.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/graph/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/new/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/page.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/settings/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/_not-found.html +2 -2
- package/.next/standalone/.next/server/app/_not-found.rsc +1 -1
- package/.next/standalone/.next/server/app/admin/companies/[uuid]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/admin/companies/new/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/admin/companies/new.html +2 -2
- package/.next/standalone/.next/server/app/admin/companies/new.rsc +1 -1
- package/.next/standalone/.next/server/app/admin/companies/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/admin/companies.html +2 -2
- package/.next/standalone/.next/server/app/admin/companies.rsc +1 -1
- package/.next/standalone/.next/server/app/admin/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/admin.html +2 -2
- package/.next/standalone/.next/server/app/admin.rsc +1 -1
- package/.next/standalone/.next/server/app/api/admin/companies/[uuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/admin/companies/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/admin/login/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/admin/session/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/agent-connections/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/agents/[uuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/agents/[uuid]/sessions/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/agents/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/api-keys/[uuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/api-keys/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/callback/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/check-default/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/company-oidc/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/default-login/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/identify/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/me/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/sync-token/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/comments/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon/connection-heartbeat/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon/control/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon/execution-state/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon/executions/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon/pending-turns/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon/report-interrupt/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon/resume/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon/transcript/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon/turn-advance/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/instruction/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/repoint/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon-sessions/ad-hoc/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon-sessions/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/documents/[uuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/entities/[type]/[uuid]/root-idea/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/events/notifications/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/events/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/health/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/claim/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/preview/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/parent/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/release/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/wake-preview/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/conversational/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/mcp/route.js +5 -5
- package/.next/standalone/.next/server/app/api/mcp/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/mcp/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/me/assignments/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/mentionables/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/notifications/[uuid]/archive/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/notifications/[uuid]/read/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/notifications/preferences/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/notifications/read-all/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/notifications/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/notifications/unread-count/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/project-groups/[uuid]/dashboard/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/project-groups/[uuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/project-groups/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/project-visits/pin/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/project-visits/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/project-visits/visit/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/activity/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/available/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/documents/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/group/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/tracker/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/[proposalUuid]/validate/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/summary/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/resource-graph/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/stats/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/dependencies/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/proposals/[uuid]/approve/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/proposals/[uuid]/close/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/proposals/[uuid]/reject/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/proposals/[uuid]/revoke/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/proposals/[uuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/references/[uuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/references/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/search/route.js +1 -1
- package/.next/standalone/.next/server/app/api/search/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/search/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/session/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/sessions/[uuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/claim/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/[dependsOnUuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/release/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/sessions/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/index.html +2 -2
- package/.next/standalone/.next/server/app/index.rsc +1 -1
- package/.next/standalone/.next/server/app/login/admin/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/login/admin.html +2 -2
- package/.next/standalone/.next/server/app/login/admin.rsc +1 -1
- package/.next/standalone/.next/server/app/login/callback/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/login/callback.html +2 -2
- package/.next/standalone/.next/server/app/login/callback.rsc +1 -1
- package/.next/standalone/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/login/pick-workspace/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/login/pick-workspace.html +2 -2
- package/.next/standalone/.next/server/app/login/pick-workspace.rsc +1 -1
- package/.next/standalone/.next/server/app/login.html +2 -2
- package/.next/standalone/.next/server/app/login.rsc +1 -1
- package/.next/standalone/.next/server/app/onboarding/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/onboarding.html +2 -2
- package/.next/standalone/.next/server/app/onboarding.rsc +1 -1
- package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/projects.html +2 -2
- package/.next/standalone/.next/server/app/projects.rsc +1 -1
- package/.next/standalone/.next/server/app/settings.html +2 -2
- package/.next/standalone/.next/server/app/settings.rsc +1 -1
- package/.next/standalone/.next/server/app-paths-manifest.json +32 -32
- package/.next/standalone/.next/server/chunks/1114.js +1 -1
- package/.next/standalone/.next/server/chunks/3219.js +1 -1
- package/.next/standalone/.next/server/chunks/6515.js +2 -2
- package/.next/standalone/.next/server/chunks/6528.js +1 -0
- package/.next/standalone/.next/server/chunks/8454.js +1 -1
- package/.next/standalone/.next/server/middleware-manifest.json +1 -1
- package/.next/standalone/.next/server/pages/404.html +2 -2
- package/.next/standalone/.next/server/pages/500.html +1 -1
- package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/server-reference-manifest.json +1 -1
- package/.next/standalone/package.json +1 -1
- package/.next/standalone/public/chorus-plugin/.claude-plugin/plugin.json +1 -1
- package/.next/standalone/public/chorus-plugin/agents/code-reviewer.md +1 -1
- package/.next/standalone/public/chorus-plugin/bin/chorus-api.sh +18 -4
- package/.next/standalone/public/chorus-plugin/bin/chorus-paths.sh +69 -0
- package/.next/standalone/public/chorus-plugin/bin/on-post-verify-task.sh +7 -1
- package/.next/standalone/public/chorus-plugin/bin/on-pre-spawn-agent.sh +10 -2
- package/.next/standalone/public/chorus-plugin/bin/on-session-end.sh +36 -23
- package/.next/standalone/public/chorus-plugin/bin/on-session-start.sh +6 -0
- package/.next/standalone/public/chorus-plugin/bin/on-subagent-start.sh +15 -5
- package/.next/standalone/public/chorus-plugin/bin/on-subagent-stop.sh +10 -2
- package/.next/standalone/public/chorus-plugin/bin/on-task-completed.sh +6 -0
- package/.next/standalone/public/chorus-plugin/bin/on-teammate-idle.sh +6 -0
- package/.next/standalone/public/chorus-plugin/bin/on-user-prompt.sh +14 -2
- package/.next/standalone/public/chorus-plugin/bin/test-syntax.sh +65 -1
- package/.next/standalone/public/chorus-plugin/bin/tests/test-code-review-recovery-contract.sh +75 -0
- package/.next/standalone/public/chorus-plugin/bin/tests/test-quick-dev-verification-contract.sh +47 -0
- package/.next/standalone/public/chorus-plugin/skills/brainstorm/SKILL.md +1 -1
- package/.next/standalone/public/chorus-plugin/skills/chorus/SKILL.md +5 -3
- package/.next/standalone/public/chorus-plugin/skills/develop/SKILL.md +2 -2
- package/.next/standalone/public/chorus-plugin/skills/idea/SKILL.md +1 -1
- package/.next/standalone/public/chorus-plugin/skills/openspec-aware/SKILL.md +1 -1
- package/.next/standalone/public/chorus-plugin/skills/proposal/SKILL.md +1 -1
- package/.next/standalone/public/chorus-plugin/skills/quick-dev/SKILL.md +15 -11
- package/.next/standalone/public/chorus-plugin/skills/review/SKILL.md +2 -2
- package/.next/standalone/public/chorus-plugin/skills/yolo/SKILL.md +2 -2
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-brainstorm/SKILL.md +1 -1
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-develop/SKILL.md +2 -2
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-idea/SKILL.md +1 -1
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-openspec-aware/SKILL.md +1 -1
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-proposal/SKILL.md +1 -1
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-quick-dev/SKILL.md +15 -11
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-review/SKILL.md +2 -2
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-yolo/SKILL.md +2 -2
- package/.next/standalone/public/kiro-plugin/.kiro/steering/chorus.md +3 -1
- package/.next/standalone/public/kiro-plugin/bin/chorus-api.sh +1 -1
- package/.next/standalone/public/kiro-plugin/bin/on-post-verify-task.sh +2 -1
- package/.next/standalone/public/skill/brainstorm-chorus/SKILL.md +1 -1
- package/.next/standalone/public/skill/chorus/SKILL.md +5 -3
- package/.next/standalone/public/skill/code-reviewer-chorus/SKILL.md +2 -2
- package/.next/standalone/public/skill/develop-chorus/SKILL.md +2 -2
- package/.next/standalone/public/skill/idea-chorus/SKILL.md +1 -1
- package/.next/standalone/public/skill/package.json +1 -1
- package/.next/standalone/public/skill/proposal-chorus/SKILL.md +1 -1
- package/.next/standalone/public/skill/proposal-reviewer-chorus/SKILL.md +1 -1
- package/.next/standalone/public/skill/quick-dev-chorus/SKILL.md +15 -11
- package/.next/standalone/public/skill/review-chorus/SKILL.md +2 -2
- package/.next/standalone/public/skill/task-reviewer-chorus/SKILL.md +1 -1
- package/.next/standalone/public/skill/yolo-chorus/SKILL.md +2 -2
- package/README.ja.md +2 -0
- package/README.ko.md +2 -0
- package/README.md +2 -0
- package/README.zh.md +2 -0
- package/cli/claude-spawner.mjs +11 -8
- package/cli/codex-spawner.mjs +46 -11
- package/cli/kiro-spawner.mjs +8 -6
- package/cli/spawner-select.mjs +1 -6
- package/package.json +1 -1
- /package/.next/standalone/.next/static/{WVmgQzimrMNvGtHx6Cqm1 → t-ZaS6bNyv62NUlewVISp}/_buildManifest.js +0 -0
- /package/.next/standalone/.next/static/{WVmgQzimrMNvGtHx6Cqm1 → t-ZaS6bNyv62NUlewVISp}/_ssgManifest.js +0 -0
package/README.ja.md
CHANGED
|
@@ -394,6 +394,7 @@ PGlite はポート 5433 で組み込み PostgreSQL を実行します。デー
|
|
|
394
394
|
|--------|-------|
|
|
395
395
|
| Claude Code | [CONNECT_CLAUDE_CODE.md](docs/CONNECT_CLAUDE_CODE.md) |
|
|
396
396
|
| Codex CLI | [CONNECT_CODEX.md](docs/CONNECT_CODEX.md) |
|
|
397
|
+
| Pi coding agent | [CONNECT_PI.md](docs/CONNECT_PI.md) |
|
|
397
398
|
| Kiro CLI | [CONNECT_KIRO.md](docs/CONNECT_KIRO.md) |
|
|
398
399
|
| OpenCode † | [CONNECT_OPENCODE.md](docs/CONNECT_OPENCODE.md) |
|
|
399
400
|
| その他の MCP エージェント(Cursor、Continue、自作など) | [CONNECT_OTHER_AGENTS.md](docs/CONNECT_OTHER_AGENTS.md) |
|
|
@@ -412,6 +413,7 @@ API キーは Web UI の **Settings → Agents → Create API Key** から作成
|
|
|
412
413
|
|--------|----------|----------|
|
|
413
414
|
| **プラグイン同梱(Claude Code)** | `public/chorus-plugin/skills/` | Claude Code + Chorus プラグイン、自動化されたセッションとライフサイクルフック |
|
|
414
415
|
| **プラグイン同梱(Codex CLI)** | `plugins/chorus/skills/` | Codex CLI + Chorus プラグイン、`$` プレフィックスのスラッシュコマンドを持つ移植版スキル |
|
|
416
|
+
| **パッケージ同梱(Pi)** | `packages/chorus-pi/skills/` | Pi + Chorus パッケージ、自動化されたセッションとライフサイクルフック |
|
|
415
417
|
| **スタンドアロン** | `public/skill/`(`/skill/` で配信) | その他の MCP 対応エージェント(Cursor、Continue、自作)、手動のセッション管理 |
|
|
416
418
|
|
|
417
419
|
### OpenSpec モード(オプトイン、プラグイン 0.8.1+)
|
package/README.ko.md
CHANGED
|
@@ -394,6 +394,7 @@ PGlite는 포트 5433에서 내장 PostgreSQL을 실행합니다. 데이터는 `
|
|
|
394
394
|
|--------|-------|
|
|
395
395
|
| Claude Code | [CONNECT_CLAUDE_CODE.md](docs/CONNECT_CLAUDE_CODE.md) |
|
|
396
396
|
| Codex CLI | [CONNECT_CODEX.md](docs/CONNECT_CODEX.md) |
|
|
397
|
+
| Pi coding agent | [CONNECT_PI.md](docs/CONNECT_PI.md) |
|
|
397
398
|
| Kiro CLI | [CONNECT_KIRO.md](docs/CONNECT_KIRO.md) |
|
|
398
399
|
| OpenCode † | [CONNECT_OPENCODE.md](docs/CONNECT_OPENCODE.md) |
|
|
399
400
|
| 그 밖의 MCP 에이전트(Cursor, Continue, 커스텀 등) | [CONNECT_OTHER_AGENTS.md](docs/CONNECT_OTHER_AGENTS.md) |
|
|
@@ -412,6 +413,7 @@ API 키는 Web UI의 **Settings → Agents → Create API Key**에서 만듭니
|
|
|
412
413
|
|--------|----------|----------|
|
|
413
414
|
| **플러그인 내장(Claude Code)** | `public/chorus-plugin/skills/` | Claude Code + Chorus 플러그인, 자동화된 세션과 라이프사이클 훅 |
|
|
414
415
|
| **플러그인 내장(Codex CLI)** | `plugins/chorus/skills/` | Codex CLI + Chorus 플러그인, `$` 접두사 슬래시 명령을 갖춘 이식판 스킬 |
|
|
416
|
+
| **패키지 내장(Pi)** | `packages/chorus-pi/skills/` | Pi + Chorus 패키지, 자동화된 세션과 라이프사이클 훅 |
|
|
415
417
|
| **스탠드얼론** | `public/skill/`(`/skill/`에서 제공) | 그 밖의 MCP 지원 에이전트(Cursor, Continue, 커스텀), 수동 세션 관리 |
|
|
416
418
|
|
|
417
419
|
### OpenSpec 모드 (옵트인, 플러그인 0.8.1+)
|
package/README.md
CHANGED
|
@@ -396,6 +396,7 @@ If you'd rather read the full docs:
|
|
|
396
396
|
|--------|-------|
|
|
397
397
|
| Claude Code | [CONNECT_CLAUDE_CODE.md](docs/CONNECT_CLAUDE_CODE.md) |
|
|
398
398
|
| Codex CLI | [CONNECT_CODEX.md](docs/CONNECT_CODEX.md) |
|
|
399
|
+
| Pi coding agent | [CONNECT_PI.md](docs/CONNECT_PI.md) |
|
|
399
400
|
| Kiro CLI | [CONNECT_KIRO.md](docs/CONNECT_KIRO.md) |
|
|
400
401
|
| OpenCode † | [CONNECT_OPENCODE.md](docs/CONNECT_OPENCODE.md) |
|
|
401
402
|
| Other MCP agents (Cursor, Continue, custom, …) | [CONNECT_OTHER_AGENTS.md](docs/CONNECT_OTHER_AGENTS.md) |
|
|
@@ -414,6 +415,7 @@ Create API Keys in the Web UI under **Settings → Agents → Create API Key**.
|
|
|
414
415
|
|--------|----------|----------|
|
|
415
416
|
| **Plugin-embedded (Claude Code)** | `public/chorus-plugin/skills/` | Claude Code + Chorus plugin, automated Sessions and lifecycle hooks |
|
|
416
417
|
| **Plugin-embedded (Codex CLI)** | `plugins/chorus/skills/` | Codex CLI + Chorus plugin, ported skills with `$`-prefixed slash commands |
|
|
418
|
+
| **Package-embedded (Pi)** | `packages/chorus-pi/skills/` | Pi + Chorus package, automated Sessions and lifecycle hooks |
|
|
417
419
|
| **Standalone** | `public/skill/` (served at `/skill/`) | Any other MCP-capable Agent (Cursor, Continue, custom), manual Session management |
|
|
418
420
|
|
|
419
421
|
### OpenSpec mode (opt-in, plugin 0.8.1+)
|
package/README.zh.md
CHANGED
|
@@ -385,6 +385,7 @@ PGlite 在端口 5433 运行嵌入式 PostgreSQL。数据存储在 `.pglite/`,
|
|
|
385
385
|
|--------|---------|
|
|
386
386
|
| Claude Code | [CONNECT_CLAUDE_CODE.zh.md](docs/CONNECT_CLAUDE_CODE.zh.md) |
|
|
387
387
|
| Codex CLI | [CONNECT_CODEX.zh.md](docs/CONNECT_CODEX.zh.md) |
|
|
388
|
+
| Pi coding agent | [CONNECT_PI.md](docs/CONNECT_PI.md) |
|
|
388
389
|
| Kiro CLI | [CONNECT_KIRO.md](docs/CONNECT_KIRO.md) |
|
|
389
390
|
| OpenCode † | [CONNECT_OPENCODE.zh.md](docs/CONNECT_OPENCODE.zh.md) |
|
|
390
391
|
| 其他 MCP agent(Cursor / Continue / 自研等) | [CONNECT_OTHER_AGENTS.zh.md](docs/CONNECT_OTHER_AGENTS.zh.md) |
|
|
@@ -403,6 +404,7 @@ PGlite 在端口 5433 运行嵌入式 PostgreSQL。数据存储在 `.pglite/`,
|
|
|
403
404
|
|------|------|---------|
|
|
404
405
|
| **Plugin 内嵌(Claude Code)** | `public/chorus-plugin/skills/` | Claude Code + Chorus 插件,Session 自动化与生命周期 hook |
|
|
405
406
|
| **Plugin 内嵌(Codex CLI)** | `plugins/chorus/skills/` | Codex CLI + Chorus 插件,移植版技能(`$` 前缀斜杠命令)|
|
|
407
|
+
| **Package 内嵌(Pi)** | `packages/chorus-pi/skills/` | Pi + Chorus package,Session 自动化与生命周期 hook |
|
|
406
408
|
| **独立分发** | `public/skill/`(`/skill/` 路径静态托管)| 其他 MCP 客户端(Cursor / Continue / 自研),手动 Session 管理 |
|
|
407
409
|
|
|
408
410
|
---
|
package/cli/claude-spawner.mjs
CHANGED
|
@@ -241,6 +241,8 @@ export function parseNdjsonChunk(buffer, chunk, onObject, onWarn = () => {}) {
|
|
|
241
241
|
* @property {(o: object) => { stdin: any, stdout: any, stderr: any, on: Function, kill?: Function }} [spawnImpl]
|
|
242
242
|
* @property {{info(m:string):void,warn(m:string):void,error(m:string):void}} [logger]
|
|
243
243
|
* @property {PermissionMode} [permissionMode] How much the woken Claude may do (default "chorus").
|
|
244
|
+
* @property {{ url: string, apiKey: string }} [creds] Daemon credentials exported
|
|
245
|
+
* to the child for plugin hooks and shell-based Chorus tooling.
|
|
244
246
|
* @property {NodeJS.Platform} [platform] Injectable for tests; gates `detached` (POSIX-only).
|
|
245
247
|
*/
|
|
246
248
|
|
|
@@ -255,6 +257,7 @@ export class ClaudeSpawner {
|
|
|
255
257
|
this.spawnImpl = opts.spawnImpl ?? spawn;
|
|
256
258
|
this.logger = opts.logger ?? NOOP_LOGGER;
|
|
257
259
|
this.permissionMode = opts.permissionMode ?? "chorus";
|
|
260
|
+
this.creds = opts.creds ?? null;
|
|
258
261
|
// POSIX spawns `detached: true` (process-group leader) so the interrupt path
|
|
259
262
|
// can group-kill the tree; Windows does not. Injectable so a POSIX test host
|
|
260
263
|
// can exercise the Windows branch and vice versa.
|
|
@@ -318,6 +321,11 @@ export class ClaudeSpawner {
|
|
|
318
321
|
// stream and observe the exit. On Windows `detached` is NOT used: taskkill /T
|
|
319
322
|
// walks the tree by pid, and detached there only spawns a new console window.
|
|
320
323
|
const detached = (this.platform ?? process.platform) !== "win32";
|
|
324
|
+
const childEnv = { ...process.env, CHORUS_DAEMON_HEADLESS: "1" };
|
|
325
|
+
if (this.creds) {
|
|
326
|
+
if (this.creds.url) childEnv.CHORUS_URL = this.creds.url;
|
|
327
|
+
if (this.creds.apiKey) childEnv.CHORUS_API_KEY = this.creds.apiKey;
|
|
328
|
+
}
|
|
321
329
|
|
|
322
330
|
return new Promise((resolve) => {
|
|
323
331
|
let child;
|
|
@@ -325,14 +333,9 @@ export class ClaudeSpawner {
|
|
|
325
333
|
child = this.spawnImpl(command, argv, {
|
|
326
334
|
cwd: cwd ?? process.cwd(),
|
|
327
335
|
stdio: ["pipe", "pipe", "pipe"],
|
|
328
|
-
//
|
|
329
|
-
//
|
|
330
|
-
|
|
331
|
-
// added. It is a machine-checkable signal (the wake prompt also states it in
|
|
332
|
-
// text); this change only LAYS IT DOWN — no code here reads it back. Set
|
|
333
|
-
// unconditionally: the spawner only ever runs headless daemon wakes, so both
|
|
334
|
-
// "chorus" and "yolo" permission modes get it.
|
|
335
|
-
env: { ...process.env, CHORUS_DAEMON_HEADLESS: "1" },
|
|
336
|
+
// Preserve the inherited runtime environment while giving hooks and
|
|
337
|
+
// shell-based Chorus tooling the daemon's authoritative connection pair.
|
|
338
|
+
env: childEnv,
|
|
336
339
|
// No shell:true — command is either the real executable or cmd.exe
|
|
337
340
|
// with the script as an argv element. Avoids shell word-splitting /
|
|
338
341
|
// injection; .cmd is handled explicitly via cmd.exe above.
|
package/cli/codex-spawner.mjs
CHANGED
|
@@ -13,17 +13,18 @@
|
|
|
13
13
|
// it and persist anchor→thread_id (codex-session-map.mjs) so a later wake can
|
|
14
14
|
// `resume <thread_id>`. (serde: ThreadEvent tag="type", rename="thread.started";
|
|
15
15
|
// ThreadStartedEvent.thread_id: String — codex-rs/exec/src/exec_events.rs.)
|
|
16
|
-
// • No `--mcp-config`: MCP comes from the user's ~/.codex/config.toml
|
|
17
|
-
//
|
|
18
|
-
// CHORUS_API_KEY)
|
|
16
|
+
// • No `--mcp-config`: MCP comes from the user's ~/.codex/config.toml. The daemon
|
|
17
|
+
// exports its resolved URL for SessionStart hooks and its key for the configured
|
|
18
|
+
// bearer_token_env_var (default CHORUS_API_KEY) — never argv.
|
|
19
19
|
// • Permission is a SANDBOX mode, not a tool allowlist.
|
|
20
20
|
//
|
|
21
21
|
// Reuses claude-spawner's platform-neutral helpers: parseNdjsonChunk (NDJSON
|
|
22
22
|
// stream parse) and the PATH-walk shape of resolveClaudePath.
|
|
23
23
|
|
|
24
24
|
import { spawn } from "node:child_process";
|
|
25
|
-
import { statSync } from "node:fs";
|
|
26
|
-
import {
|
|
25
|
+
import { readFileSync, statSync } from "node:fs";
|
|
26
|
+
import { homedir } from "node:os";
|
|
27
|
+
import { join, win32 as pathWin32, posix as pathPosix } from "node:path";
|
|
27
28
|
import { parseNdjsonChunk } from "./claude-spawner.mjs";
|
|
28
29
|
import { getThreadId as defaultGetThreadId, setThreadId as defaultSetThreadId } from "./codex-session-map.mjs";
|
|
29
30
|
import {
|
|
@@ -34,6 +35,25 @@ import {
|
|
|
34
35
|
|
|
35
36
|
const NOOP_LOGGER = { info() {}, warn() {}, error() {} };
|
|
36
37
|
|
|
38
|
+
/**
|
|
39
|
+
* Check whether the user's Codex config declares the Chorus MCP server.
|
|
40
|
+
* This is diagnostic only: a missing or unreadable config must never block a wake.
|
|
41
|
+
* @param {{ env?: NodeJS.ProcessEnv, readFile?: typeof readFileSync, home?: string }} [deps]
|
|
42
|
+
* @returns {boolean}
|
|
43
|
+
*/
|
|
44
|
+
export function hasChorusMcpServer(deps = {}) {
|
|
45
|
+
const env = deps.env ?? process.env;
|
|
46
|
+
const readFile = deps.readFile ?? readFileSync;
|
|
47
|
+
const home = deps.home ?? homedir();
|
|
48
|
+
const configPath = join(env.CODEX_HOME || join(home, ".codex"), "config.toml");
|
|
49
|
+
try {
|
|
50
|
+
const config = readFile(configPath, "utf8");
|
|
51
|
+
return /^\s*\[mcp_servers\.chorus\]\s*(?:#.*)?$/m.test(config);
|
|
52
|
+
} catch {
|
|
53
|
+
return false;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
37
57
|
/**
|
|
38
58
|
* @typedef {Object} Spawner
|
|
39
59
|
* @property {(params: {
|
|
@@ -165,13 +185,14 @@ export function resolveSpawnCommand(codexPath, args, platform = process.platform
|
|
|
165
185
|
* @property {(o: object) => any} [spawnImpl] Injectable spawn (tests).
|
|
166
186
|
* @property {{info(m:string):void,warn(m:string):void,error(m:string):void}} [logger]
|
|
167
187
|
* @property {"chorus"|"yolo"} [permissionMode] Maps to a Codex sandbox posture.
|
|
168
|
-
* @property {{ url: string, apiKey: string }} [creds]
|
|
169
|
-
*
|
|
188
|
+
* @property {{ url: string, apiKey: string }} [creds] Daemon creds exported into
|
|
189
|
+
* the child env for SessionStart hooks and the user-configured MCP bearer token.
|
|
170
190
|
* @property {NodeJS.Platform} [platform] Injectable for tests; gates POSIX `detached`.
|
|
171
191
|
* @property {(anchor: string) => string|null} [getThreadIdFn] Injectable session-map read.
|
|
172
192
|
* @property {(anchor: string, threadId: string) => void} [setThreadIdFn] Injectable session-map write.
|
|
173
193
|
* @property {(anchor: string, threadId: string) => object|null} [getUsageSnapshotFn]
|
|
174
194
|
* @property {(anchor: string, threadId: string, usage: object) => void} [setUsageSnapshotFn]
|
|
195
|
+
* @property {() => boolean} [hasChorusMcpServerFn] Injectable config probe.
|
|
175
196
|
*/
|
|
176
197
|
|
|
177
198
|
export class CodexSpawner {
|
|
@@ -189,6 +210,8 @@ export class CodexSpawner {
|
|
|
189
210
|
this.getUsageSnapshotFn = opts.getUsageSnapshotFn ?? defaultGetUsageSnapshot;
|
|
190
211
|
this.setUsageSnapshotFn = opts.setUsageSnapshotFn ?? defaultSetUsageSnapshot;
|
|
191
212
|
this.resolveCodexPathFn = opts.resolveCodexPathFn ?? resolveCodexPath;
|
|
213
|
+
this.hasChorusMcpServerFn = opts.hasChorusMcpServerFn ?? hasChorusMcpServer;
|
|
214
|
+
this.mcpConfigChecked = false;
|
|
192
215
|
}
|
|
193
216
|
|
|
194
217
|
/**
|
|
@@ -225,6 +248,15 @@ export class CodexSpawner {
|
|
|
225
248
|
return { sessionId: anchor, exitCode: null, isNew };
|
|
226
249
|
}
|
|
227
250
|
|
|
251
|
+
if (!this.mcpConfigChecked) {
|
|
252
|
+
this.mcpConfigChecked = true;
|
|
253
|
+
if (!this.hasChorusMcpServerFn()) {
|
|
254
|
+
this.logger.warn(
|
|
255
|
+
"[Chorus] Codex config has no [mcp_servers.chorus] entry; wake will continue without Chorus MCP tools",
|
|
256
|
+
);
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
|
|
228
260
|
const args = buildCodexArgs({ isNew, threadId: knownThreadId, permissionMode: this.permissionMode });
|
|
229
261
|
const { command, argv } = resolveSpawnCommand(codexPath, args, this.platform);
|
|
230
262
|
|
|
@@ -233,11 +265,14 @@ export class CodexSpawner {
|
|
|
233
265
|
// stays piped — prompt over stdin + NDJSON stdout parse are unaffected.
|
|
234
266
|
const detached = this.platform !== "win32";
|
|
235
267
|
|
|
236
|
-
//
|
|
237
|
-
//
|
|
238
|
-
//
|
|
268
|
+
// Export the daemon's resolved connection pair for both Codex MCP auth and
|
|
269
|
+
// SessionStart hooks. Explicitly overwrite inherited values so the hook and
|
|
270
|
+
// daemon cannot disagree about which Chorus instance this wake belongs to.
|
|
239
271
|
const childEnv = { ...process.env, CHORUS_DAEMON_HEADLESS: "1" };
|
|
240
|
-
if (this.creds
|
|
272
|
+
if (this.creds) {
|
|
273
|
+
if (this.creds.url) childEnv.CHORUS_URL = this.creds.url;
|
|
274
|
+
if (this.creds.apiKey) childEnv.CHORUS_API_KEY = this.creds.apiKey;
|
|
275
|
+
}
|
|
241
276
|
|
|
242
277
|
return new Promise((resolve) => {
|
|
243
278
|
let child;
|
package/cli/kiro-spawner.mjs
CHANGED
|
@@ -209,8 +209,8 @@ export function pickNewSessionId(before, after) {
|
|
|
209
209
|
* @property {(o: object) => any} [spawnImpl] Injectable spawn (tests).
|
|
210
210
|
* @property {{info(m:string):void,warn(m:string):void,error(m:string):void}} [logger]
|
|
211
211
|
* @property {"chorus"|"yolo"} [permissionMode] Maps to a Kiro tool-trust posture.
|
|
212
|
-
* @property {{ url: string, apiKey: string }} [creds]
|
|
213
|
-
* into the child env
|
|
212
|
+
* @property {{ url: string, apiKey: string }} [creds] Daemon credentials exported
|
|
213
|
+
* into the child env for plugin hooks, shell tooling, and MCP authentication.
|
|
214
214
|
* @property {NodeJS.Platform} [platform] Injectable for tests; gates POSIX `detached`.
|
|
215
215
|
* @property {(anchor: string) => string|null} [getSessionIdFn] Injectable session-map read.
|
|
216
216
|
* @property {(anchor: string, id: string) => void} [setSessionIdFn] Injectable session-map write.
|
|
@@ -274,11 +274,13 @@ export class KiroSpawner {
|
|
|
274
274
|
// stays piped — prompt over stdin + stdout capture are unaffected.
|
|
275
275
|
const detached = this.platform !== "win32";
|
|
276
276
|
|
|
277
|
-
//
|
|
278
|
-
//
|
|
279
|
-
// Merged over the inherited env so PATH / model auth / KIRO_* survive.
|
|
277
|
+
// Export the daemon's authoritative connection pair. CHORUS_API_KEY is also
|
|
278
|
+
// referenced by the plugin's MCP config; neither value is placed in argv.
|
|
280
279
|
const childEnv = { ...process.env, CHORUS_DAEMON_HEADLESS: "1" };
|
|
281
|
-
if (this.creds
|
|
280
|
+
if (this.creds) {
|
|
281
|
+
if (this.creds.url) childEnv.CHORUS_URL = this.creds.url;
|
|
282
|
+
if (this.creds.apiKey) childEnv.CHORUS_API_KEY = this.creds.apiKey;
|
|
283
|
+
}
|
|
282
284
|
|
|
283
285
|
// Snapshot the session store BEFORE the run so we can identify the sessionId
|
|
284
286
|
// this run creates (Kiro has no id-bearing stream event). On resume we already
|
package/cli/spawner-select.mjs
CHANGED
|
@@ -25,12 +25,7 @@ export function selectSpawner(agentType, opts = {}) {
|
|
|
25
25
|
return new CodexSpawner({ logger, permissionMode, creds });
|
|
26
26
|
}
|
|
27
27
|
if (agentType === "kiro") {
|
|
28
|
-
// Kiro follows the Codex model — MCP from the user's plugin config, daemon key
|
|
29
|
-
// via env — so it takes the same { logger, permissionMode, creds } shape.
|
|
30
28
|
return new KiroSpawner({ logger, permissionMode, creds });
|
|
31
29
|
}
|
|
32
|
-
|
|
33
|
-
// (ClaudeSpawner takes only { logger, permissionMode } — creds are not used by
|
|
34
|
-
// the Claude backend, which gets its key via the --mcp-config file).
|
|
35
|
-
return new ClaudeSpawner({ logger, permissionMode });
|
|
30
|
+
return new ClaudeSpawner({ logger, permissionMode, creds });
|
|
36
31
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@chorus-aidlc/chorus",
|
|
3
|
-
"version": "0.14.
|
|
3
|
+
"version": "0.14.6",
|
|
4
4
|
"description": "The Agent Harness for AI-Human Collaboration — session lifecycle, task state, sub-agent orchestration, observability, and failure recovery",
|
|
5
5
|
"homepage": "https://github.com/Chorus-AIDLC/Chorus",
|
|
6
6
|
"repository": {
|
|
File without changes
|
|
File without changes
|