@chorus-aidlc/chorus 0.14.0 → 0.14.2
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 +459 -424
- package/.next/standalone/.next/app-path-routes-manifest.json +49 -45
- package/.next/standalone/.next/build-manifest.json +5 -5
- package/.next/standalone/.next/prerender-manifest.json +33 -33
- package/.next/standalone/.next/routes-manifest.json +8 -0
- package/.next/standalone/.next/server/app/(dashboard)/project-groups/[uuid]/page.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/project-groups/[uuid]/page.js.nft.json +1 -1
- 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.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/activity/page.js.nft.json +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.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/[ideaUuid]/page.js.nft.json +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.js +2 -2
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/page.js.nft.json +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 +2 -2
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page.js.nft.json +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.js.nft.json +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.js +2 -2
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/graph/page.js.nft.json +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 +2 -2
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page.js.nft.json +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.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/new/page.js.nft.json +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 +2 -2
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/page.js.nft.json +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.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page.js.nft.json +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.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/page.js.nft.json +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.js +2 -2
- package/.next/standalone/.next/server/app/(dashboard)/projects/page.js.nft.json +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.js +2 -2
- package/.next/standalone/.next/server/app/(dashboard)/settings/page.js.nft.json +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 +2 -2
- 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 +2 -2
- 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 +2 -2
- 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 +2 -2
- 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.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.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/control/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon/execution-state/route.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.js +1 -0
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/wake-preview/route.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/wake-preview/route_client-reference-manifest.js +1 -0
- package/.next/standalone/.next/server/app/api/ideas/conversational/route.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 +4 -4
- 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.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.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.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.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.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.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.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.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.js +1 -0
- package/.next/standalone/.next/server/app/api/project-visits/pin/route.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/api/project-visits/pin/route_client-reference-manifest.js +1 -0
- package/.next/standalone/.next/server/app/api/project-visits/route.js +1 -0
- package/.next/standalone/.next/server/app/api/project-visits/route.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/api/project-visits/route_client-reference-manifest.js +1 -0
- package/.next/standalone/.next/server/app/api/project-visits/visit/route.js +1 -0
- package/.next/standalone/.next/server/app/api/project-visits/visit/route.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/api/project-visits/visit/route_client-reference-manifest.js +1 -0
- 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.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.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.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.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.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.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_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.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.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.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.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.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.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.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 +2 -2
- 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 +2 -2
- 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 +2 -2
- 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 +2 -2
- package/.next/standalone/.next/server/app/login.html +2 -2
- package/.next/standalone/.next/server/app/login.rsc +2 -2
- 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 +3 -3
- 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 +4 -4
- package/.next/standalone/.next/server/app/settings.html +2 -2
- package/.next/standalone/.next/server/app/settings.rsc +4 -4
- package/.next/standalone/.next/server/app-paths-manifest.json +49 -45
- package/.next/standalone/.next/server/chunks/1114.js +1 -1
- package/.next/standalone/.next/server/chunks/1173.js +1 -1
- package/.next/standalone/.next/server/chunks/1286.js +3 -2
- package/.next/standalone/.next/server/chunks/1318.js +1 -0
- package/.next/standalone/.next/server/chunks/1559.js +2 -2
- package/.next/standalone/.next/server/chunks/2463.js +1 -0
- package/.next/standalone/.next/server/chunks/2618.js +1 -1
- package/.next/standalone/.next/server/chunks/2961.js +1 -1
- package/.next/standalone/.next/server/chunks/3219.js +1 -1
- package/.next/standalone/.next/server/chunks/3407.js +1 -0
- package/.next/standalone/.next/server/chunks/3419.js +1 -1
- package/.next/standalone/.next/server/chunks/457.js +1 -0
- package/.next/standalone/.next/server/chunks/4827.js +1 -1
- package/.next/standalone/.next/server/chunks/{1343.js → 5201.js} +2 -2
- package/.next/standalone/.next/server/chunks/5245.js +1 -1
- package/.next/standalone/.next/server/chunks/595.js +1 -0
- package/.next/standalone/.next/server/chunks/6113.js +1 -1
- package/.next/standalone/.next/server/chunks/6207.js +1 -1
- package/.next/standalone/.next/server/chunks/6449.js +1 -0
- package/.next/standalone/.next/server/chunks/{8577.js → 6506.js} +3 -3
- package/.next/standalone/.next/server/chunks/6515.js +6 -0
- package/.next/standalone/.next/server/chunks/7364.js +1 -1
- package/.next/standalone/.next/server/chunks/7368.js +1 -1
- package/.next/standalone/.next/server/chunks/7530.js +1 -1
- package/.next/standalone/.next/server/chunks/7762.js +1 -1
- package/.next/standalone/.next/server/chunks/8454.js +1 -1
- package/.next/standalone/.next/server/chunks/920.js +1 -1
- package/.next/standalone/.next/server/chunks/9213.js +1 -1
- package/.next/standalone/.next/server/chunks/9378.js +1 -1
- package/.next/standalone/.next/server/chunks/951.js +1 -0
- package/.next/standalone/.next/server/instrumentation.js +1 -1
- package/.next/standalone/.next/server/middleware-build-manifest.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/.next/static/XTQkt8fOQEK4mZkZTFQ_E/_buildManifest.js +1 -0
- package/.next/standalone/.next/static/chunks/11595.fbbfc784ff9ee566.js +1 -0
- package/.next/standalone/.next/static/chunks/13867-a95a4555fcb7b13b.js +1 -0
- package/.next/standalone/.next/static/chunks/24537-7d71bf10329d1be1.js +1 -0
- package/.next/standalone/.next/static/chunks/27030-19cd50b9d47b3be6.js +1 -0
- package/.next/standalone/.next/static/chunks/28680-f9c5e04f67982cb6.js +1 -0
- package/.next/standalone/.next/static/chunks/31308-bb4a97b3f39c22dd.js +1 -0
- package/.next/standalone/.next/static/chunks/32331-87ae9bc7517c7947.js +1 -0
- package/.next/standalone/.next/static/chunks/33277-9926b461045318b3.js +10 -0
- package/.next/standalone/.next/static/chunks/33456.b67f1146831e9f2b.js +1 -0
- package/.next/standalone/.next/static/chunks/37035-514bbb31cd13bda1.js +1 -0
- package/.next/standalone/.next/static/chunks/38526-7ffc4b7351c15bc4.js +1 -0
- package/.next/standalone/.next/static/chunks/{42605-029b5426175cdee9.js → 39479-5af3460208d8cc56.js} +1 -1
- package/.next/standalone/.next/static/chunks/4860.3491d748fdde968e.js +1 -0
- package/.next/standalone/.next/static/chunks/51603-7fa00971493ae223.js +1 -0
- package/.next/standalone/.next/static/chunks/73510-c338cef00ca3cfaf.js +1 -0
- package/.next/standalone/.next/static/chunks/78917-a297b76c6daa9f5d.js +1 -0
- package/.next/standalone/.next/static/chunks/84219-09970ab1b85c61f0.js +1 -0
- package/.next/standalone/.next/static/chunks/86155-c9b7c2c08d3fa80e.js +1 -0
- package/.next/standalone/.next/static/chunks/99373.827383575665ce2f.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/layout-12d81eedb519461c.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/project-groups/[uuid]/page-2af5f2f159c8e32b.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/dashboard/[ideaUuid]/page-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/dashboard/page-996b8a87b4b986f1.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page-77771ef395e19922.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/page-c231207c3674aa54.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/graph/{page-2b13a2224c3b6d6d.js → page-c62c7d7cf9833060.js} +1 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page-d098269dcaa06de7.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/page-7948aa8db4813091.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page-8eea1e0cea60758f.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/tasks/page-658f31ac6a28ec82.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/page-6df01fa989cca27b.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/settings/page-7fbf5bc58d3dd5b0.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/admin/companies/[uuid]/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/admin/companies/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/admin/login/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/admin/session/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/agent-connections/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/agents/[uuid]/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/agents/[uuid]/sessions/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/agents/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/api-keys/[uuid]/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/api-keys/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/auth/callback/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/auth/check-default/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/auth/company-oidc/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/auth/default-login/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/auth/identify/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/auth/logout/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/auth/me/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/auth/sync-token/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/comments/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/daemon/control/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/daemon/execution-state/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/daemon/executions/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/daemon/pending-turns/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/daemon/report-interrupt/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/daemon/resume/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/daemon/transcript/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/daemon/turn-advance/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/[sessionUuid]/instruction/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/[sessionUuid]/repoint/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/[sessionUuid]/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/ad-hoc/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/documents/[uuid]/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/entities/[type]/[uuid]/root-idea/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/events/notifications/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/events/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/health/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/claim/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/move/preview/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/move/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/parent/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/release/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/wake-preview/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/ideas/conversational/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/mcp/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/me/assignments/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/mentionables/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/notifications/[uuid]/archive/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/notifications/[uuid]/read/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/notifications/preferences/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/notifications/read-all/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/notifications/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/notifications/unread-count/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/project-groups/[uuid]/dashboard/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/project-groups/[uuid]/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/project-groups/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/project-visits/pin/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/project-visits/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/project-visits/visit/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/activity/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/available/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/documents/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/group/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/ideas/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/ideas/tracker/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/proposals/[proposalUuid]/validate/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/proposals/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/proposals/summary/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/resource-graph/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/stats/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/tasks/dependencies/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/tasks/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/approve/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/close/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/reject/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/revoke/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/references/[uuid]/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/references/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/search/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/session/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/sessions/[uuid]/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/claim/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/dependencies/[dependsOnUuid]/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/dependencies/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/release/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/sessions/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/onboarding/page-b178eb3215360d91.js +1 -0
- package/.next/standalone/.next/static/chunks/{webpack-9dda6192665a5c8d.js → webpack-567d9ffe31a0a5ee.js} +1 -1
- package/.next/standalone/.next/static/css/617133917710c831.css +1 -0
- 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/bin/on-post-verify-task.sh +1 -1
- package/.next/standalone/public/chorus-plugin/bin/on-session-start.sh +29 -5
- package/.next/standalone/public/chorus-plugin/skills/brainstorm/SKILL.md +1 -1
- package/.next/standalone/public/chorus-plugin/skills/chorus/SKILL.md +23 -2
- package/.next/standalone/public/chorus-plugin/skills/develop/SKILL.md +2 -2
- package/.next/standalone/public/chorus-plugin/skills/idea/SKILL.md +32 -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 +1 -1
- package/.next/standalone/public/chorus-plugin/skills/review/SKILL.md +1 -1
- package/.next/standalone/public/chorus-plugin/skills/yolo/SKILL.md +2 -2
- package/.next/standalone/public/install-kiro.sh +350 -0
- package/.next/standalone/public/kiro-plugin/.kiro/agents/chorus-code-reviewer.json +10 -0
- package/.next/standalone/public/kiro-plugin/.kiro/agents/chorus-proposal-reviewer.json +10 -0
- package/.next/standalone/public/kiro-plugin/.kiro/agents/chorus-task-reviewer.json +10 -0
- package/.next/standalone/public/kiro-plugin/.kiro/agents/chorus.json +50 -0
- package/.next/standalone/public/kiro-plugin/.kiro/agents/chorus.md +62 -0
- package/.next/standalone/public/kiro-plugin/.kiro/settings/mcp.json +12 -0
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-brainstorm/SKILL.md +158 -0
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-develop/SKILL.md +421 -0
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-idea/SKILL.md +332 -0
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-openspec-aware/SKILL.md +434 -0
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-proposal/SKILL.md +386 -0
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-quick-dev/SKILL.md +193 -0
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-review/SKILL.md +360 -0
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-yolo/SKILL.md +547 -0
- package/.next/standalone/public/kiro-plugin/.kiro/steering/chorus.md +404 -0
- package/.next/standalone/public/kiro-plugin/bin/chorus-api.sh +392 -0
- package/.next/standalone/public/kiro-plugin/bin/on-agent-spawn.sh +81 -0
- package/.next/standalone/public/kiro-plugin/bin/on-post-submit-for-verify.sh +68 -0
- package/.next/standalone/public/kiro-plugin/bin/on-post-submit-proposal.sh +76 -0
- package/.next/standalone/public/kiro-plugin/bin/on-post-verify-task.sh +119 -0
- package/.next/standalone/public/kiro-plugin/bin/on-stop.sh +45 -0
- package/.next/standalone/public/kiro-plugin/bin/test-syntax.sh +108 -0
- package/.next/standalone/public/skill/brainstorm-chorus/SKILL.md +1 -1
- package/.next/standalone/public/skill/chorus/SKILL.md +8 -2
- package/.next/standalone/public/skill/code-reviewer-chorus/SKILL.md +1 -1
- package/.next/standalone/public/skill/develop-chorus/SKILL.md +2 -2
- package/.next/standalone/public/skill/idea-chorus/SKILL.md +32 -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 +1 -1
- package/.next/standalone/public/skill/review-chorus/SKILL.md +1 -1
- package/.next/standalone/public/skill/task-reviewer-chorus/SKILL.md +1 -1
- package/.next/standalone/public/skill/yolo-chorus/SKILL.md +3 -3
- package/README.ja.md +14 -11
- package/README.ko.md +14 -11
- package/README.md +14 -11
- package/README.zh.md +14 -11
- package/chorus.mjs +4 -0
- package/cli/client-args.mjs +19 -8
- package/cli/codex-session-map.mjs +9 -79
- package/cli/daemon-agent.mjs +12 -7
- package/cli/daemon-config.mjs +2 -2
- package/cli/daemon-install-config.mjs +213 -0
- package/cli/daemon-service.mjs +12 -7
- package/cli/daemon.mjs +68 -9
- package/cli/kiro-session-map.mjs +49 -0
- package/cli/kiro-spawner.mjs +409 -0
- package/cli/kiro-transcript.mjs +262 -0
- package/cli/lineage.mjs +20 -0
- package/cli/prompts.mjs +19 -2
- package/cli/session-map.mjs +126 -0
- package/cli/spawner-select.mjs +7 -1
- package/cli/waker.mjs +18 -3
- package/package.json +1 -1
- package/prisma/migrations/20260714091007_add_daemon_execution_direct_idea/migration.sql +2 -0
- package/prisma/migrations/20260718062756_add_project_visit/migration.sql +29 -0
- package/prisma/schema.prisma +30 -0
- package/.next/standalone/.next/server/chunks/1388.js +0 -1
- package/.next/standalone/.next/server/chunks/2382.js +0 -1
- package/.next/standalone/.next/server/chunks/3373.js +0 -1
- package/.next/standalone/.next/server/chunks/4797.js +0 -1
- package/.next/standalone/.next/server/chunks/5011.js +0 -1
- package/.next/standalone/.next/server/chunks/5891.js +0 -1
- package/.next/standalone/.next/server/chunks/7131.js +0 -6
- package/.next/standalone/.next/static/chunks/11595.c932231a36943893.js +0 -1
- package/.next/standalone/.next/static/chunks/20081-a2bf5c9f24d5d589.js +0 -1
- package/.next/standalone/.next/static/chunks/24537-7988a894f20f8dae.js +0 -1
- package/.next/standalone/.next/static/chunks/2709-8f25369aeb5701a4.js +0 -1
- package/.next/standalone/.next/static/chunks/33456.f1c7b6bd0a6a65e4.js +0 -1
- package/.next/standalone/.next/static/chunks/43111-7a4e08dc82bb3022.js +0 -1
- package/.next/standalone/.next/static/chunks/4860.9313590c6c8c8f56.js +0 -1
- package/.next/standalone/.next/static/chunks/4939-ff22e2b42ad57f7f.js +0 -1
- package/.next/standalone/.next/static/chunks/55963-b2804d30cfbbe669.js +0 -1
- package/.next/standalone/.next/static/chunks/56608-92ab6704b364eb17.js +0 -1
- package/.next/standalone/.next/static/chunks/75252-29e0e25cb5a94f7f.js +0 -10
- package/.next/standalone/.next/static/chunks/80350-0d34e756f4aebdfc.js +0 -1
- package/.next/standalone/.next/static/chunks/84169-affac07755ace386.js +0 -1
- package/.next/standalone/.next/static/chunks/9178-182934f9127eed4e.js +0 -1
- package/.next/standalone/.next/static/chunks/93346-1d4cd71b8713a8a6.js +0 -1
- package/.next/standalone/.next/static/chunks/96752-ad15cc38599f12e2.js +0 -1
- package/.next/standalone/.next/static/chunks/99373.9756d8f45fee79a7.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/layout-00ff2f6753bb4603.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/project-groups/[uuid]/page-5824e6affe244f83.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/dashboard/[ideaUuid]/page-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/dashboard/page-21571e747883b956.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page-f763dec99ba41f1c.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/page-f13281a5806b6b4b.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page-6c577e521c61f718.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/page-078f21255acdf752.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page-d37d5adabc60a16c.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/tasks/page-8212e69e806cab35.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/page-85665683f67eebc7.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/settings/page-2ab18a236a0c7f7b.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/admin/companies/[uuid]/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/admin/companies/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/admin/login/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/admin/session/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/agent-connections/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/agents/[uuid]/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/agents/[uuid]/sessions/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/agents/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/api-keys/[uuid]/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/api-keys/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/auth/callback/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/auth/check-default/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/auth/company-oidc/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/auth/default-login/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/auth/identify/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/auth/logout/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/auth/me/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/auth/sync-token/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/comments/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/daemon/control/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/daemon/execution-state/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/daemon/executions/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/daemon/pending-turns/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/daemon/report-interrupt/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/daemon/resume/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/daemon/transcript/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/daemon/turn-advance/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/[sessionUuid]/instruction/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/[sessionUuid]/repoint/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/[sessionUuid]/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/ad-hoc/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/documents/[uuid]/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/entities/[type]/[uuid]/root-idea/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/events/notifications/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/events/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/health/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/claim/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/move/preview/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/move/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/parent/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/release/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/ideas/conversational/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/mcp/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/me/assignments/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/mentionables/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/notifications/[uuid]/archive/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/notifications/[uuid]/read/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/notifications/preferences/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/notifications/read-all/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/notifications/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/notifications/unread-count/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/project-groups/[uuid]/dashboard/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/project-groups/[uuid]/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/project-groups/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/activity/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/available/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/documents/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/group/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/ideas/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/ideas/tracker/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/proposals/[proposalUuid]/validate/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/proposals/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/proposals/summary/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/resource-graph/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/stats/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/tasks/dependencies/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/tasks/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/projects/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/approve/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/close/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/reject/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/revoke/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/references/[uuid]/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/references/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/search/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/session/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/sessions/[uuid]/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/claim/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/dependencies/[dependsOnUuid]/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/dependencies/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/release/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/sessions/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/onboarding/page-455d693daccb65df.js +0 -1
- package/.next/standalone/.next/static/css/5f09fa856a63632f.css +0 -1
- package/.next/standalone/.next/static/sOwBl2wYTfQ3B0DrB18aB/_buildManifest.js +0 -1
- /package/.next/standalone/.next/static/{sOwBl2wYTfQ3B0DrB18aB → XTQkt8fOQEK4mZkZTFQ_E}/_ssgManifest.js +0 -0
|
@@ -4,7 +4,7 @@ description: Full-auto AI-DLC pipeline — from prompt to done. Automates the en
|
|
|
4
4
|
license: AGPL-3.0
|
|
5
5
|
metadata:
|
|
6
6
|
author: chorus
|
|
7
|
-
version: "0.14.
|
|
7
|
+
version: "0.14.2"
|
|
8
8
|
category: project-management
|
|
9
9
|
mcp_server: chorus
|
|
10
10
|
---
|
|
@@ -508,7 +508,7 @@ After all waves complete, output a markdown summary:
|
|
|
508
508
|
|
|
509
509
|
### Phase 5b: Idea Completion Report (mandatory)
|
|
510
510
|
|
|
511
|
-
A successful `/yolo` run always finishes the Idea — call `chorus_create_report` once with `proposalUuid` set to the last verified proposal. The
|
|
511
|
+
A successful `/yolo` run always finishes the Idea — call `chorus_create_report` once with `proposalUuid` set to the last verified proposal. The `content` parameter's description carries the section template; follow it. Surface the returned `documentUuid` in the Phase 5 summary. Skipping is a protocol violation.
|
|
512
512
|
|
|
513
513
|
> **Order:** the completion report is written only **after** the Phase 4.5 code-review gateway returns PASS / PASS WITH NOTES. Never write it while a code-review FAIL is outstanding — the report is a ship-time summary, and the gateway is what clears the feature to ship.
|
|
514
514
|
|
|
@@ -0,0 +1,350 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Chorus + Kiro CLI one-shot installer
|
|
3
|
+
#
|
|
4
|
+
# Usage:
|
|
5
|
+
# curl -fsSL "$CHORUS_URL/install-kiro.sh" | bash
|
|
6
|
+
# # or non-interactive:
|
|
7
|
+
# CHORUS_URL=https://... CHORUS_API_KEY=cho_... \
|
|
8
|
+
# bash <(curl -fsSL https://chorus.example.com/install-kiro.sh)
|
|
9
|
+
# # workspace-local (writes <cwd>/.kiro/ instead of ~/.kiro/):
|
|
10
|
+
# bash <(curl -fsSL "$CHORUS_URL/install-kiro.sh") --workspace
|
|
11
|
+
#
|
|
12
|
+
# What this does (idempotent, safe to re-run):
|
|
13
|
+
# 1. Verifies a Kiro CLI (`kiro-cli` or `kiro`) is installed.
|
|
14
|
+
# 2. Collects CHORUS_URL + CHORUS_API_KEY (env or TTY prompt) and
|
|
15
|
+
# normalizes the URL to end in exactly one /api/mcp.
|
|
16
|
+
# 3. Installs the Chorus `.kiro/` template — the chorus-* skills, the
|
|
17
|
+
# `chorus` main agent + 3 read-only reviewer subagents, and the Chorus
|
|
18
|
+
# steering doc — into ~/.kiro/ (global, default) or <cwd>/.kiro/
|
|
19
|
+
# (--workspace).
|
|
20
|
+
# 4. Copies the session-automation hook scripts (+ chorus-api.sh) into
|
|
21
|
+
# <KIRO_DIR>/chorus-bin/, chmod +x, and substitutes the __CHORUS_BIN__
|
|
22
|
+
# placeholder in the installed agents/chorus.json hook commands with
|
|
23
|
+
# the resolved ABSOLUTE chorus-bin path.
|
|
24
|
+
# 5. MERGES the `chorus` MCP server into <KIRO_DIR>/settings/mcp.json,
|
|
25
|
+
# preserving any pre-existing user servers, backing the original up to
|
|
26
|
+
# mcp.json.chorus-bak first.
|
|
27
|
+
#
|
|
28
|
+
# Bash 3.2 compatible (CLAUDE.md pitfall #10): no ${VAR,,}/${VAR^^},
|
|
29
|
+
# no `declare -A`, no `readarray`/`mapfile`, no `&>>`, no `|&`.
|
|
30
|
+
|
|
31
|
+
set -euo pipefail
|
|
32
|
+
|
|
33
|
+
# ---------- cosmetics ----------
|
|
34
|
+
BOLD=$'\033[1m'; DIM=$'\033[2m'; GREEN=$'\033[32m'; YELLOW=$'\033[33m'; RED=$'\033[31m'; RESET=$'\033[0m'
|
|
35
|
+
ok() { printf "${GREEN}\xe2\x9c\x93${RESET} %s\n" "$*"; }
|
|
36
|
+
warn() { printf "${YELLOW}!${RESET} %s\n" "$*" >&2; }
|
|
37
|
+
die() { printf "${RED}\xe2\x9c\x97${RESET} %s\n" "$*" >&2; exit 1; }
|
|
38
|
+
hdr() { printf "\n${BOLD}%s${RESET}\n" "$*"; }
|
|
39
|
+
|
|
40
|
+
is_tty() { [ -t 0 ] && [ -t 1 ]; }
|
|
41
|
+
|
|
42
|
+
# ---------- config: the artifact manifest (single source of truth) ----------
|
|
43
|
+
# These lists drive BOTH the local copy and the remote download, so the two
|
|
44
|
+
# source modes can never diverge.
|
|
45
|
+
SKILLS="chorus-idea chorus-proposal chorus-develop chorus-yolo chorus-review chorus-quick-dev chorus-brainstorm chorus-openspec-aware"
|
|
46
|
+
REVIEWER_AGENTS="chorus-code-reviewer chorus-proposal-reviewer chorus-task-reviewer"
|
|
47
|
+
HOOK_SCRIPTS="on-agent-spawn.sh on-stop.sh on-post-submit-proposal.sh on-post-submit-for-verify.sh on-post-verify-task.sh chorus-api.sh test-syntax.sh"
|
|
48
|
+
|
|
49
|
+
CHORUS_URL_DEFAULT="${CHORUS_URL_DEFAULT:-http://localhost:8637/api/mcp}"
|
|
50
|
+
|
|
51
|
+
# ---------- argument parsing ----------
|
|
52
|
+
SCOPE="global"
|
|
53
|
+
for arg in "$@"; do
|
|
54
|
+
case "$arg" in
|
|
55
|
+
--workspace) SCOPE="workspace" ;;
|
|
56
|
+
--global) SCOPE="global" ;;
|
|
57
|
+
-h|--help)
|
|
58
|
+
cat <<'USAGE'
|
|
59
|
+
install-kiro.sh — install the Chorus plugin for Kiro CLI.
|
|
60
|
+
|
|
61
|
+
Options:
|
|
62
|
+
--workspace Write to <cwd>/.kiro/ (project-local) instead of ~/.kiro/.
|
|
63
|
+
--global Write to ~/.kiro/ (default).
|
|
64
|
+
-h, --help Show this help.
|
|
65
|
+
|
|
66
|
+
Environment:
|
|
67
|
+
CHORUS_URL Chorus base URL (e.g. https://chorus.example.com). Normalized
|
|
68
|
+
to end in /api/mcp. Prompted on a TTY if unset.
|
|
69
|
+
CHORUS_API_KEY Chorus agent API key (starts with cho_). Prompted (echo off)
|
|
70
|
+
on a TTY if unset; required — no TTY + unset is a hard error.
|
|
71
|
+
USAGE
|
|
72
|
+
exit 0
|
|
73
|
+
;;
|
|
74
|
+
*) die "Unknown argument: $arg (try --help)" ;;
|
|
75
|
+
esac
|
|
76
|
+
done
|
|
77
|
+
|
|
78
|
+
# If piped through `curl | bash`, stdin is the script body. Re-open from
|
|
79
|
+
# /dev/tty so interactive prompts still work — but only when a real TTY is
|
|
80
|
+
# available AND we actually need to prompt (the key is unset). Both CHORUS_URL
|
|
81
|
+
# and CHORUS_API_KEY being set lets us run fully non-interactively (CI /
|
|
82
|
+
# sandboxed / unified-exec environments).
|
|
83
|
+
if [ -z "${CHORUS_API_KEY:-}" ] && ! is_tty; then
|
|
84
|
+
# Probe that /dev/tty is actually openable before exec'ing onto it. In a
|
|
85
|
+
# detached/headless environment (CI, daemon-spawned) /dev/tty can pass the
|
|
86
|
+
# -r/-w file-mode test yet fail to open ("No such device or address"), and a
|
|
87
|
+
# bare `exec < /dev/tty` would abort the shell with that raw error instead of
|
|
88
|
+
# reaching the explanatory die below. The subshell open-test runs inside an
|
|
89
|
+
# `if` so its failure never trips set -e.
|
|
90
|
+
if ( : < /dev/tty ) >/dev/null 2>&1; then
|
|
91
|
+
exec < /dev/tty
|
|
92
|
+
fi
|
|
93
|
+
fi
|
|
94
|
+
|
|
95
|
+
# ---------- step 1: check Kiro CLI ----------
|
|
96
|
+
hdr "1/5 Checking Kiro CLI"
|
|
97
|
+
KIRO_BIN=""
|
|
98
|
+
if command -v kiro-cli >/dev/null 2>&1; then
|
|
99
|
+
KIRO_BIN="kiro-cli"
|
|
100
|
+
elif command -v kiro >/dev/null 2>&1; then
|
|
101
|
+
KIRO_BIN="kiro"
|
|
102
|
+
fi
|
|
103
|
+
[ -n "$KIRO_BIN" ] || die "No Kiro CLI found in PATH (looked for 'kiro-cli' and 'kiro'). Install it first: https://kiro.dev/docs/cli"
|
|
104
|
+
ok "Found $($KIRO_BIN --version 2>/dev/null | head -1 || echo "$KIRO_BIN")"
|
|
105
|
+
|
|
106
|
+
# ---------- step 2: collect Chorus URL + API key ----------
|
|
107
|
+
hdr "2/5 Configuring the Chorus connection"
|
|
108
|
+
|
|
109
|
+
# URL
|
|
110
|
+
if [ -n "${CHORUS_URL:-}" ]; then
|
|
111
|
+
url="$CHORUS_URL"
|
|
112
|
+
ok "Using CHORUS_URL from env: $url"
|
|
113
|
+
elif [ -t 0 ]; then
|
|
114
|
+
printf " Chorus URL ${DIM}[default: $CHORUS_URL_DEFAULT]${RESET}: "
|
|
115
|
+
read -r url
|
|
116
|
+
url="${url:-$CHORUS_URL_DEFAULT}"
|
|
117
|
+
else
|
|
118
|
+
url="$CHORUS_URL_DEFAULT"
|
|
119
|
+
warn "No TTY and CHORUS_URL unset — using default: $url"
|
|
120
|
+
fi
|
|
121
|
+
|
|
122
|
+
# API key
|
|
123
|
+
if [ -n "${CHORUS_API_KEY:-}" ]; then
|
|
124
|
+
apikey="$CHORUS_API_KEY"
|
|
125
|
+
ok "Using CHORUS_API_KEY from env"
|
|
126
|
+
elif [ -t 0 ]; then
|
|
127
|
+
printf " Chorus API key (starts with cho_): "
|
|
128
|
+
stty -echo 2>/dev/null || true
|
|
129
|
+
read -r apikey
|
|
130
|
+
stty echo 2>/dev/null || true
|
|
131
|
+
printf "\n"
|
|
132
|
+
[ -n "$apikey" ] || die "API key is required"
|
|
133
|
+
else
|
|
134
|
+
die "No TTY and CHORUS_API_KEY unset — cannot continue. Export CHORUS_API_KEY (create one under Settings -> Agents in the Chorus UI) and re-run."
|
|
135
|
+
fi
|
|
136
|
+
|
|
137
|
+
# Must be http(s).
|
|
138
|
+
case "$url" in
|
|
139
|
+
http://*|https://*) ;;
|
|
140
|
+
*) die "URL must start with http:// or https:// — got: $url" ;;
|
|
141
|
+
esac
|
|
142
|
+
|
|
143
|
+
# Normalize: the Chorus MCP endpoint lives under /api/mcp. If the user gave us
|
|
144
|
+
# just a host (or a host with trailing slash, or any path that doesn't already
|
|
145
|
+
# end in /api/mcp), append it so the MCP handshake hits the right route.
|
|
146
|
+
case "$url" in
|
|
147
|
+
*/api/mcp) ;;
|
|
148
|
+
*/api/mcp/) url="${url%/}" ;;
|
|
149
|
+
*/) url="${url}api/mcp" ;;
|
|
150
|
+
*) url="${url}/api/mcp" ;;
|
|
151
|
+
esac
|
|
152
|
+
ok "MCP endpoint: $url"
|
|
153
|
+
|
|
154
|
+
# The base for fetching static plugin assets is the same origin minus /api/mcp
|
|
155
|
+
# (public/ is served at web root, so public/kiro-plugin/... => <base>/kiro-plugin/...).
|
|
156
|
+
ASSET_BASE="${url%/api/mcp}"
|
|
157
|
+
|
|
158
|
+
# ---------- step 3: locate the template source ----------
|
|
159
|
+
hdr "3/5 Locating the Chorus .kiro/ template"
|
|
160
|
+
|
|
161
|
+
# Resolve the directory of this script (only meaningful when run from a file,
|
|
162
|
+
# not via `curl | bash`).
|
|
163
|
+
SCRIPT_SRC="${BASH_SOURCE:-$0}"
|
|
164
|
+
SCRIPT_DIR=""
|
|
165
|
+
if [ -f "$SCRIPT_SRC" ]; then
|
|
166
|
+
SCRIPT_DIR="$(cd "$(dirname "$SCRIPT_SRC")" >/dev/null 2>&1 && pwd)"
|
|
167
|
+
fi
|
|
168
|
+
|
|
169
|
+
# Candidate local template roots (script lives in public/, or repo root).
|
|
170
|
+
SRC_ROOT=""
|
|
171
|
+
if [ -n "$SCRIPT_DIR" ]; then
|
|
172
|
+
for cand in "$SCRIPT_DIR/kiro-plugin" "$SCRIPT_DIR/public/kiro-plugin" "$SCRIPT_DIR/../public/kiro-plugin"; do
|
|
173
|
+
if [ -f "$cand/.kiro/settings/mcp.json" ] && [ -f "$cand/.kiro/agents/chorus.json" ]; then
|
|
174
|
+
SRC_ROOT="$(cd "$cand" >/dev/null 2>&1 && pwd)"
|
|
175
|
+
break
|
|
176
|
+
fi
|
|
177
|
+
done
|
|
178
|
+
fi
|
|
179
|
+
|
|
180
|
+
CLEANUP_SRC=""
|
|
181
|
+
if [ -n "$SRC_ROOT" ]; then
|
|
182
|
+
ok "Using local template: $SRC_ROOT"
|
|
183
|
+
else
|
|
184
|
+
# Remote mode: download the manifest from the Chorus instance's static assets.
|
|
185
|
+
command -v curl >/dev/null 2>&1 || die "No local template found and 'curl' is unavailable — cannot download the plugin. Run this from a Chorus checkout, or install curl."
|
|
186
|
+
SRC_ROOT="$(mktemp -d "${TMPDIR:-/tmp}/chorus-kiro.XXXXXX")"
|
|
187
|
+
CLEANUP_SRC="$SRC_ROOT"
|
|
188
|
+
ok "Downloading template from ${ASSET_BASE}/kiro-plugin/"
|
|
189
|
+
|
|
190
|
+
fetch() {
|
|
191
|
+
# fetch <relpath-under-kiro-plugin> <dest-abs-path>
|
|
192
|
+
local rel="$1" dest="$2"
|
|
193
|
+
mkdir -p "$(dirname "$dest")"
|
|
194
|
+
curl -fsSL "${ASSET_BASE}/kiro-plugin/${rel}" -o "$dest" \
|
|
195
|
+
|| die "Failed to download kiro-plugin/${rel} from ${ASSET_BASE}. Is CHORUS_URL correct and reachable?"
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
fetch ".kiro/settings/mcp.json" "$SRC_ROOT/.kiro/settings/mcp.json"
|
|
199
|
+
fetch ".kiro/steering/chorus.md" "$SRC_ROOT/.kiro/steering/chorus.md"
|
|
200
|
+
fetch ".kiro/agents/chorus.json" "$SRC_ROOT/.kiro/agents/chorus.json"
|
|
201
|
+
fetch ".kiro/agents/chorus.md" "$SRC_ROOT/.kiro/agents/chorus.md"
|
|
202
|
+
for a in $REVIEWER_AGENTS; do
|
|
203
|
+
fetch ".kiro/agents/${a}.json" "$SRC_ROOT/.kiro/agents/${a}.json"
|
|
204
|
+
done
|
|
205
|
+
for s in $SKILLS; do
|
|
206
|
+
fetch ".kiro/skills/${s}/SKILL.md" "$SRC_ROOT/.kiro/skills/${s}/SKILL.md"
|
|
207
|
+
done
|
|
208
|
+
for b in $HOOK_SCRIPTS; do
|
|
209
|
+
fetch "bin/${b}" "$SRC_ROOT/bin/${b}"
|
|
210
|
+
done
|
|
211
|
+
fi
|
|
212
|
+
|
|
213
|
+
# Clean up any downloaded temp on exit (no-op for local mode).
|
|
214
|
+
cleanup() { [ -n "$CLEANUP_SRC" ] && rm -rf "$CLEANUP_SRC" 2>/dev/null || true; }
|
|
215
|
+
trap cleanup EXIT
|
|
216
|
+
|
|
217
|
+
# ---------- step 4: determine KIRO_DIR + write skills / agents / steering / hooks ----------
|
|
218
|
+
if [ "$SCOPE" = "workspace" ]; then
|
|
219
|
+
KIRO_DIR="$(pwd)/.kiro"
|
|
220
|
+
else
|
|
221
|
+
KIRO_DIR="$HOME/.kiro"
|
|
222
|
+
fi
|
|
223
|
+
CHORUS_BIN_ABS="$KIRO_DIR/chorus-bin"
|
|
224
|
+
|
|
225
|
+
hdr "4/5 Installing into $KIRO_DIR (scope: $SCOPE)"
|
|
226
|
+
mkdir -p "$KIRO_DIR/skills" "$KIRO_DIR/agents" "$KIRO_DIR/steering" "$KIRO_DIR/chorus-bin" "$KIRO_DIR/settings"
|
|
227
|
+
|
|
228
|
+
# Skills (chorus-* only — never touches a user's own skills).
|
|
229
|
+
for s in $SKILLS; do
|
|
230
|
+
mkdir -p "$KIRO_DIR/skills/$s"
|
|
231
|
+
cp "$SRC_ROOT/.kiro/skills/$s/SKILL.md" "$KIRO_DIR/skills/$s/SKILL.md"
|
|
232
|
+
done
|
|
233
|
+
ok "Installed skills: $SKILLS"
|
|
234
|
+
|
|
235
|
+
# Reviewer subagents (raw copy) + the main-agent prompt sidecar.
|
|
236
|
+
for a in $REVIEWER_AGENTS; do
|
|
237
|
+
cp "$SRC_ROOT/.kiro/agents/$a.json" "$KIRO_DIR/agents/$a.json"
|
|
238
|
+
done
|
|
239
|
+
cp "$SRC_ROOT/.kiro/agents/chorus.md" "$KIRO_DIR/agents/chorus.md"
|
|
240
|
+
ok "Installed agents: chorus (main) + $REVIEWER_AGENTS"
|
|
241
|
+
|
|
242
|
+
# Steering (Chorus platform-overview / AI-DLC context).
|
|
243
|
+
cp "$SRC_ROOT/.kiro/steering/chorus.md" "$KIRO_DIR/steering/chorus.md"
|
|
244
|
+
ok "Installed steering: chorus.md"
|
|
245
|
+
|
|
246
|
+
# Hook scripts -> chorus-bin/ (executable). Copying them INTO the Kiro dir keeps
|
|
247
|
+
# the install self-contained and removable.
|
|
248
|
+
for b in $HOOK_SCRIPTS; do
|
|
249
|
+
cp "$SRC_ROOT/bin/$b" "$CHORUS_BIN_ABS/$b"
|
|
250
|
+
chmod +x "$CHORUS_BIN_ABS/$b"
|
|
251
|
+
done
|
|
252
|
+
ok "Installed hook scripts -> $CHORUS_BIN_ABS/ (chmod +x)"
|
|
253
|
+
|
|
254
|
+
# Main agent: substitute the __CHORUS_BIN__ placeholder in the hook `command`
|
|
255
|
+
# strings with the resolved ABSOLUTE chorus-bin path. The repo copy keeps the
|
|
256
|
+
# placeholder; only this installed copy is concretized. Absolute paths are
|
|
257
|
+
# scope-independent and survive Kiro being launched from any cwd.
|
|
258
|
+
# (Use '|' as the sed delimiter since the replacement is a filesystem path.)
|
|
259
|
+
sed "s|__CHORUS_BIN__|$CHORUS_BIN_ABS|g" \
|
|
260
|
+
"$SRC_ROOT/.kiro/agents/chorus.json" > "$KIRO_DIR/agents/chorus.json"
|
|
261
|
+
|
|
262
|
+
# Fail loudly if the placeholder survived (it must not).
|
|
263
|
+
if grep -q '__CHORUS_BIN__' "$KIRO_DIR/agents/chorus.json" 2>/dev/null; then
|
|
264
|
+
die "Internal error: __CHORUS_BIN__ placeholder was not fully substituted in agents/chorus.json"
|
|
265
|
+
fi
|
|
266
|
+
ok "Wrote agents/chorus.json (hook commands -> $CHORUS_BIN_ABS)"
|
|
267
|
+
|
|
268
|
+
# ---------- step 5: merge the chorus MCP server into settings/mcp.json ----------
|
|
269
|
+
hdr "5/5 Wiring the Chorus MCP server into settings/mcp.json"
|
|
270
|
+
|
|
271
|
+
MCP_JSON="$KIRO_DIR/settings/mcp.json"
|
|
272
|
+
# Seed a valid empty document if the file is missing so the merge has a target.
|
|
273
|
+
if [ ! -f "$MCP_JSON" ]; then
|
|
274
|
+
printf '%s\n' '{"mcpServers":{}}' > "$MCP_JSON"
|
|
275
|
+
fi
|
|
276
|
+
|
|
277
|
+
# Back up ONCE (idempotent — a second run keeps the single original backup).
|
|
278
|
+
if [ ! -f "$MCP_JSON.chorus-bak" ]; then
|
|
279
|
+
cp "$MCP_JSON" "$MCP_JSON.chorus-bak"
|
|
280
|
+
ok "Backed up original to ${MCP_JSON}.chorus-bak"
|
|
281
|
+
fi
|
|
282
|
+
|
|
283
|
+
# The chorus server object. The URL is concretized (non-secret, set once); the
|
|
284
|
+
# API key stays an ${env:CHORUS_API_KEY} reference so the secret is NOT written
|
|
285
|
+
# to disk — Kiro CLI interpolates ${env:VAR} at runtime. Single-quote the auth
|
|
286
|
+
# string so the shell never expands ${env:...}.
|
|
287
|
+
AUTH_REF='Bearer ${env:CHORUS_API_KEY}'
|
|
288
|
+
|
|
289
|
+
merged=""
|
|
290
|
+
if command -v jq >/dev/null 2>&1; then
|
|
291
|
+
# Build the server object, then set only .mcpServers.chorus (in place if it
|
|
292
|
+
# already exists — preserving position and every other user server).
|
|
293
|
+
server_json="$(jq -n --arg url "$url" --arg auth "$AUTH_REF" \
|
|
294
|
+
'{type:"http", url:$url, headers:{Authorization:$auth}, disabled:false}')"
|
|
295
|
+
merged="$(jq --argjson srv "$server_json" \
|
|
296
|
+
'(.mcpServers // {}) as $m | .mcpServers = ($m + {chorus:$srv})' "$MCP_JSON")" \
|
|
297
|
+
|| die "Failed to merge mcp.json with jq (is $MCP_JSON valid JSON?)"
|
|
298
|
+
elif command -v node >/dev/null 2>&1; then
|
|
299
|
+
merged="$(CHORUS_MCP_URL="$url" CHORUS_MCP_AUTH="$AUTH_REF" node - "$MCP_JSON" <<'NODE'
|
|
300
|
+
const fs = require("fs");
|
|
301
|
+
const file = process.argv[2];
|
|
302
|
+
let data = {};
|
|
303
|
+
try { data = JSON.parse(fs.readFileSync(file, "utf8")) || {}; }
|
|
304
|
+
catch (e) { console.error("mcp.json is not valid JSON: " + e.message); process.exit(1); }
|
|
305
|
+
if (typeof data !== "object" || Array.isArray(data)) data = {};
|
|
306
|
+
if (typeof data.mcpServers !== "object" || data.mcpServers === null || Array.isArray(data.mcpServers)) data.mcpServers = {};
|
|
307
|
+
data.mcpServers.chorus = {
|
|
308
|
+
type: "http",
|
|
309
|
+
url: process.env.CHORUS_MCP_URL,
|
|
310
|
+
headers: { Authorization: process.env.CHORUS_MCP_AUTH },
|
|
311
|
+
disabled: false,
|
|
312
|
+
};
|
|
313
|
+
process.stdout.write(JSON.stringify(data, null, 2) + "\n");
|
|
314
|
+
NODE
|
|
315
|
+
)" || die "Failed to merge mcp.json with node (is $MCP_JSON valid JSON?)"
|
|
316
|
+
else
|
|
317
|
+
die "Cannot merge mcp.json safely: neither jq nor node is available. Install one (e.g. 'brew install jq') and re-run."
|
|
318
|
+
fi
|
|
319
|
+
|
|
320
|
+
printf '%s\n' "$merged" > "$MCP_JSON"
|
|
321
|
+
ok "Merged the 'chorus' server into $MCP_JSON (other servers preserved)"
|
|
322
|
+
|
|
323
|
+
# ---------- epilogue ----------
|
|
324
|
+
hdr "Done."
|
|
325
|
+
if [ "$SCOPE" = "workspace" ]; then
|
|
326
|
+
scope_note="this project ($KIRO_DIR)"
|
|
327
|
+
else
|
|
328
|
+
scope_note="every directory (global $KIRO_DIR)"
|
|
329
|
+
fi
|
|
330
|
+
cat <<NEXT
|
|
331
|
+
|
|
332
|
+
The Chorus plugin is installed for ${scope_note}.
|
|
333
|
+
|
|
334
|
+
Make sure CHORUS_URL and CHORUS_API_KEY stay exported in your shell (Kiro
|
|
335
|
+
reads \${env:CHORUS_API_KEY} at runtime — add them to ~/.bashrc / ~/.zshrc):
|
|
336
|
+
|
|
337
|
+
${BOLD}export CHORUS_URL="${ASSET_BASE}"${RESET}
|
|
338
|
+
${BOLD}export CHORUS_API_KEY="cho_..."${RESET}
|
|
339
|
+
|
|
340
|
+
Then, in ${BOLD}${KIRO_BIN}${RESET}:
|
|
341
|
+
|
|
342
|
+
* Type ${BOLD}/chorus-idea${RESET} (or /chorus-proposal, /chorus-develop, /chorus-yolo,
|
|
343
|
+
/chorus-review, /chorus-quick-dev, ...) to activate a workflow skill.
|
|
344
|
+
* Launch the full-automation main agent with session hooks + reviewer
|
|
345
|
+
subagents: ${BOLD}${KIRO_BIN} --agent chorus${RESET}
|
|
346
|
+
|
|
347
|
+
Live in-Kiro activation is your manual verification step — see docs/CONNECT_KIRO.md.
|
|
348
|
+
To change your API key or URL later, just re-run this installer.
|
|
349
|
+
|
|
350
|
+
NEXT
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "chorus-code-reviewer",
|
|
3
|
+
"description": "Final ship-time review of an Idea's aggregate code change — the whole feature across all its tasks, not one task. Spawn after the last task of an idea-rooted proposal is verified. Read-only; posts a VERDICT comment on the idea.",
|
|
4
|
+
"tools": [
|
|
5
|
+
"read",
|
|
6
|
+
"@chorus"
|
|
7
|
+
],
|
|
8
|
+
"includeMcpJson": true,
|
|
9
|
+
"prompt": "You are the final code-review gateway before a feature ships. Your job is not to confirm the feature works — it is to find the defects that only surface when the whole Idea's code is seen together, after every individual task has already passed its own task-level review.\n\n=== CRITICAL: READ-ONLY ===\nYou have only `read` and `@chorus` (Chorus MCP) tools — no `write`, no `shell`. You CANNOT edit/create/delete files in the project, run git, install packages, or execute build/test commands. You review by reading the aggregate diff and the task work reports and by reasoning across them; where you would normally run the feature's build/test, instead require the developers' run evidence (build/test output quoted in their work reports) and treat a broken/failing build reported there — or the absence of any run evidence for a risky change — accordingly (see classification). Your entire output is one comment posted via chorus_add_comment on the IDEA.\n\nEach task was implemented and verified in isolation by an LLM. Per-task review already happened. Your distinct value is the AGGREGATE view: tasks that each pass alone but don't integrate, an architecture that drifted as tasks accreted, a security hole opened by the combination, a regression in code no single task \"owned,\" or feature-level test-coverage gaps between the tasks.\n\nTwo failure patterns to avoid. **Verification avoidance**: reading code, narrating what you would test, writing \"PASS.\" **Being seduced by green per-task reviews**: assuming that because every task passed, the feature is sound — the whole can be broken even when every part passed. That gap is your entire job.\n\n=== WHAT YOU RECEIVE ===\nYou will receive an ideaUuid and (in Round 2+) the current review round number. Fetch the Idea, its proposals, the proposal documents, and the tasks, then review the aggregate code change behind the whole Idea.\n\n=== REVIEW PROCEDURE ===\nEfficiency rule: gather ALL context first, then review. Batch tool calls.\nTurn budget rule: when your budget is nearly spent, STOP reading and post your current findings via chorus_add_comment immediately.\n\nStep 1 — Gather context (batch these):\n chorus_get_idea({ ideaUuid })\n chorus_get_comments({ targetType: \"idea\", targetUuid: ideaUuid }) // prior code-review verdicts -> your round number\n chorus_get_proposals({ projectUuid, status: \"approved\" })\n chorus_get_proposal({ proposalUuid, section: \"full\" }) // docs + task drafts\n chorus_list_tasks({ projectUuid, proposalUuids: [approved] })\nRead each task's work report (in its comments) — the developers describe what they changed and quote their run evidence; that is your map into the diff.\n\nStep 2 — Determine the aggregate change scope yourself. There is NO fixed branch convention. Infer the scope of \"this Idea's code change\" from the task work reports (files/commits/PRs they name) plus the current tree you can read. STATE the scope you settled on in your comment (e.g. \"Reviewed the aggregate of tasks T1-T5 touching src/services/*, per their work reports\"). If you cannot pin an exact range, say so and review what the reports + readable tree support.\n\nStep 3 — Review the whole-feature dimensions (per-task review structurally cannot catch these; cover each):\n1. Cross-task integration / contract consistency — do the tasks actually wire together? interface contracts, return formats, error patterns, call points consistent across module boundaries different tasks built?\n2. Architecture & convention consistency (no drift) — does the aggregate conform to the project's patterns, or did tasks each invent their own approach? duplicated logic, divergent naming, inconsistent layering.\n3. Security — does the COMBINATION introduce a risk (authz gap at a seam, injection, secret handling, unsafe deserialization, missing tenant scoping) visible only when the pieces are seen together?\n4. Regression risk / impact on untouched areas / performance — does the change break or degrade code no single task owned? N+1s, hot-path cost, shared-state contention.\n5. Feature-level test-coverage adequacy — across the whole feature, are integration seams and end-to-end paths covered, or only per-task units? gaps between tasks.\n6. Code soundness, simplicity, correctness — is the aggregate change correct, reasonably simple, and free of obvious defects read as one body of work?\n\nStep 4 — Use the developers' build/test evidence. You cannot run the suite. Rely on the run evidence quoted in the task work reports. A reported broken build or failing test across the feature is an automatic FAIL. If a risky aggregate change has no run evidence anywhere, flag it as a NOTE (or BLOCKER if it plainly breaks an integration seam).\n\nHallucination check: flag anything LLM-fabricated as NOTE — API signatures, CLI flags, config keys, model IDs, endpoint URLs, package names.\n\n=== FINDING CLASSIFICATION ===\nBLOCKER (blocks ship): build/test failure reported across the feature; broken cross-task integration / contract mismatch causing wrong behavior; security hole introduced by the change; regression in untouched areas; feature-level requirement (from idea/docs) not covered by the aggregate; edge cases causing runtime errors at integration seams.\nNOTE (does not block): style/naming/minor duplication; cross-document wording differences; pseudocode signature mismatch; hallucination-risk specifics; missing run evidence on a low-risk change.\nRules: style and cross-doc wording -> always NOTE. Only functional/security/integration/regression issues -> BLOCKER.\nVERDICT: has BLOCKERs -> FAIL. Only NOTEs -> PASS WITH NOTES. Nothing -> PASS.\n\n=== ROUND AWARENESS ===\nRead prior code-review VERDICT comments on the idea to establish your round number.\n- Round 1: full aggregate review, normal strictness.\n- Round 2+: focus ONLY on whether previous BLOCKERs were fixed. Do NOT introduce new NOTEs on areas not flagged before. Re-read only the specific files tied to previous BLOCKERs. If all previous BLOCKERs are resolved -> PASS (or PASS WITH NOTES if old NOTEs remain).\n\n=== RECOGNIZE YOUR OWN RATIONALIZATIONS ===\n- \"Every task passed its review, so the feature is fine\" — the whole can break when every part passed.\n- \"The code looks correct based on my reading\" — reading is a start; demand the developers' run evidence.\n- \"Integration probably works\" — probably is not verified. Find the seam and trace it in the code.\n- \"No security issue is obvious\" — look specifically at seams between tasks, authz, and tenant scoping.\n\n=== OUTPUT FORMAT (REQUIRED) ===\n### Code Review — Idea <short title> (Round N)\n\n**Scope reviewed:** <tasks / files / commits you inferred>\n\n**PASS (N):** integration, architecture, security, regression, coverage, ...\n\n**NOTE (M):**\n- Note-1: [one-line description]\n\n**BLOCKER (K):**\n### Blocker-1: name\n**Evidence:** [specific finding with file paths, line numbers]\n**Expected:** [expected behavior]\n**Actual:** [actual behavior]\n\nVERDICT: PASS / PASS WITH NOTES / FAIL\n\nPASS items get names only. NOTE items get one-line descriptions. BLOCKER items get full evidence. Keep total output under 1000 characters — be concise. No preamble, no summary paragraph.\n\n=== POSTING RESULTS ===\nPost the full results as a single comment ON THE IDEA:\n chorus_add_comment({ targetType: \"idea\", targetUuid: ideaUuid, content: \"<your review>\" })\nYou MUST end the comment with VERDICT: PASS, VERDICT: PASS WITH NOTES, or VERDICT: FAIL. Your verdict is advisory — it informs the ship decision (the human in /chorus-review, or the agent in /chorus-yolo); it does not by itself change the Idea's stored status."
|
|
10
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "chorus-proposal-reviewer",
|
|
3
|
+
"description": "Review a submitted Chorus proposal for quality — check document completeness, task granularity, AC alignment, and cross-task dependencies. Spawn after chorus_pm_submit_proposal. Read-only; posts a VERDICT comment on the proposal.",
|
|
4
|
+
"tools": [
|
|
5
|
+
"read",
|
|
6
|
+
"@chorus"
|
|
7
|
+
],
|
|
8
|
+
"includeMcpJson": true,
|
|
9
|
+
"prompt": "You are a Chorus proposal review specialist. Your job is not to confirm the proposal is good — it is to find what's wrong with it.\n\n=== CRITICAL: READ-ONLY ===\nYou are STRICTLY READ-ONLY. You have only `read` and `@chorus` (Chorus MCP) tools — no `write`, no `shell`. You CANNOT edit, create, or delete files, and you CANNOT run shell commands. Your entire output is one comment posted via `chorus_add_comment`.\n\nYou have two failure patterns. **Rubber-stamping**: skimming the proposal and writing \"PASS\" without checking substance. **Surface-level approval**: seeing a well-structured PRD and assuming tasks match, missing requirements gaps, vague AC, or wrong dependencies. The PM who wrote this is an LLM — it produces plausible-looking proposals with systematic blind spots.\n\n=== WHAT YOU RECEIVE ===\nYou will receive a proposalUuid. Fetch and review the full proposal.\n\n=== REVIEW PROCEDURE ===\nEfficiency rule: batch all data gathering first, then produce one final comment. Do not alternate between fetching and writing conclusions.\nTurn budget rule: when your budget is nearly spent, STOP reading and post your current findings via chorus_add_comment immediately. Incomplete findings posted are strictly better than no comment.\n\nStep 1 — Gather context (batch these):\n chorus_get_proposal({ proposalUuid, section: \"full\" })\n chorus_get_comments({ targetType: \"proposal\", targetUuid: proposalUuid })\n chorus_get_idea({ ideaUuid })\n chorus_get_elaboration({ ideaUuid })\n(chorus_get_proposal defaults to section:\"basic\" — a lightweight index with no bodies. A real review needs the bodies, so pass section:\"full\".)\n\nStep 2 — Review documents. For each document draft check: Completeness (functional + non-functional + error/edge cases), Specificity (testable requirements — \"handle errors gracefully\" is not testable), Tech feasibility (missing auth, race conditions, no error handling), Module contracts (shared interfaces: return formats, error patterns, call points), Hallucination risk (flag any specific external detail — API signatures, model IDs, SDK versions, CLI flags, config keys, endpoint paths — that looks LLM-fabricated, as NOTE).\n\nStep 3 — Review task drafts. For each: Granularity (cohesive, independently testable; 2-10 AC is the sweet spot), AC quality (each criterion objectively verifiable by a different agent — \"Shows details\" is BAD, \"Displays order ID, customer name, and status badge\" is GOOD), Coverage (cross-reference task AC against document requirements — any requirement with NO AC?), Dependencies (is the DAG correct? can each task start once its deps are done?), Integration checkpoints (for DAGs with 4+ tasks at least one integration-checkpoint task whose AC requires end-to-end execution of preceding modules together — if missing, BLOCKER), Hallucination risk (as NOTE).\n\nStep 4 — Cross-check: do tasks cover ALL document requirements? scope additions not in the idea? contradictions between docs and tasks?\n\n=== FINDING CLASSIFICATION ===\nBLOCKER (blocks implementation correctness): missing critical AC/NFR coverage; functional scope contradiction between documents; interface design flaw causing runtime errors; incorrect task dependencies.\nNOTE (does not block): pseudocode signature mismatch; wording differences between PRD and tech design; style/naming; non-semantic inconsistencies.\nRules: pseudocode inconsistencies -> always NOTE. Cross-document wording differences -> always NOTE. Only semantic contradictions -> BLOCKER.\nVERDICT: has BLOCKERs -> FAIL. Only NOTEs -> PASS WITH NOTES. Nothing -> PASS.\n\n=== ROUND AWARENESS ===\nYou may receive the current review round number. Read prior VERDICT comments to establish it.\n- Round 1: full review, normal strictness.\n- Round 2+: focus ONLY on whether previous BLOCKERs were fixed. Do NOT introduce new NOTEs on areas not flagged before. Fetch chorus_get_proposal({ section:\"full\" }) + chorus_get_comments, diff against the previous round, and stop. If all previous BLOCKERs are resolved -> PASS (or PASS WITH NOTES if old NOTEs remain).\n\n=== RECOGNIZE YOUR OWN RATIONALIZATIONS ===\n- \"The proposal looks well-structured\" — structure is not substance.\n- \"The PM probably considered this\" — the PM is an LLM. Check it yourself.\n- \"There are enough tasks\" — count is not coverage. Map requirements to tasks.\n\n=== OUTPUT FORMAT (REQUIRED) ===\n### Review Summary\n\n**PASS (N):** Check-1 name, Check-2 name, ...\n\n**NOTE (M):**\n- Note-1: [one-line description]\n\n**BLOCKER (K):**\n### Blocker-1: name\n**Evidence:** [specific finding]\n**Expected:** [what should be there]\n**Actual:** [what is there or what is missing]\n\nVERDICT: PASS / PASS WITH NOTES / FAIL\n\nPASS items get names only. NOTE items get one-line descriptions. BLOCKER items get full evidence. Keep total output under 800 characters — be concise. No preamble, no summary paragraph.\n\n=== POSTING RESULTS ===\nPost the full results as a single comment:\n chorus_add_comment({ targetType: \"proposal\", targetUuid: proposalUuid, content: \"<your review>\" })\nYou MUST end the comment with VERDICT: PASS, VERDICT: PASS WITH NOTES, or VERDICT: FAIL."
|
|
10
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "chorus-task-reviewer",
|
|
3
|
+
"description": "Review a submitted Chorus task — verify the implementation against its acceptance criteria and the proposal documents. Spawn after chorus_submit_for_verify. Read-only; posts a VERDICT comment on the task.",
|
|
4
|
+
"tools": [
|
|
5
|
+
"read",
|
|
6
|
+
"@chorus"
|
|
7
|
+
],
|
|
8
|
+
"includeMcpJson": true,
|
|
9
|
+
"prompt": "You are a Chorus task review specialist. Your job is not to confirm the implementation works — it is to find where it doesn't match the requirements.\n\n=== CRITICAL: READ-ONLY ===\nYou have only `read` and `@chorus` (Chorus MCP) tools — no `write`, no `shell`. You CANNOT edit, create, or delete files in the project and you CANNOT run shell commands (no test/build execution, no git). You verify by reading the code and the AC and by reasoning about them; where you would normally run a command, instead demand the developer's run evidence (test/build output in their work report) and treat its absence as a NOTE. Your entire output is one comment posted via chorus_add_comment.\n\nYou have two failure patterns. **Verification avoidance**: reading code, narrating what you would test, writing \"PASS,\" never actually checking. **Being seduced by the first 80%**: seeing clean code and assuming AC are met, not noticing the implementation diverges from the proposal documents or that edge cases silently fail. The developer is an LLM — its self-tests may be circular (testing mocks, not behavior).\n\n=== WHAT YOU RECEIVE ===\nYou will receive a taskUuid. Fetch the task, its AC, and the proposal documents, then independently verify the implementation.\n\n=== REVIEW PROCEDURE ===\nEfficiency rule: batch context gathering first, then produce one final comment.\nTurn budget rule: when your budget is nearly spent, STOP and post your current findings via chorus_add_comment immediately.\n\nStep 1 — Gather context (batch these):\n chorus_get_task({ taskUuid })\n chorus_get_comments({ targetType: \"task\", targetUuid: taskUuid })\n chorus_get_proposal({ proposalUuid, section: \"documents\" })\n chorus_get_document({ documentUuid })\n\nStep 2 — Read the code. Use your read tool to open the relevant files. Do NOT rely on the developer's summary — read the code yourself and locate the exact lines that implement each AC.\n\nStep 3 — Verify each AC independently. For EACH acceptance criterion: read what it requires literally, word by word; find the code that implements it; determine PASS or FAIL with file/line evidence. Do NOT batch AC as \"all look good\" — check each one.\n\nStep 4 — Cross-reference with proposal documents. Does the PRD mention fields, behaviors, or error scenarios not covered by any AC? Does the tech design specify contracts the code doesn't follow?\n\nStep 5 — Demand test evidence. You cannot run tests (no shell). Require the developer's run logs / test output in the work report as execution evidence. If a task involves external API/SDK calls and the developer provides no run evidence, flag as NOTE.\n\nHallucination check: flag anything that looks LLM-fabricated as NOTE — API signatures, CLI flags, config keys, model IDs, endpoint URLs, package names.\n\n=== FINDING CLASSIFICATION ===\nBLOCKER (blocks correctness): AC not actually implemented; build/test failure evidenced in the report; implementation diverges from proposal documents (semantic contradiction); edge cases causing runtime errors; missing error handling for required scenarios.\nNOTE (does not block): pseudocode signature mismatch; wording differences; style/naming; non-semantic inconsistencies; missing run evidence on external calls.\nRules: pseudocode inconsistencies -> always NOTE. Cross-document wording differences -> always NOTE. Only functional/behavioral issues -> BLOCKER.\nVERDICT: has BLOCKERs -> FAIL. Only NOTEs -> PASS WITH NOTES. Nothing -> PASS.\n\n=== ROUND AWARENESS ===\nYou may receive the current review round number. Read prior VERDICT comments to establish it.\n- Round 1: full review, normal strictness.\n- Round 2+: focus ONLY on whether previous BLOCKERs were fixed. Do NOT introduce new NOTEs on areas not flagged before. Re-read only the specific files tied to previous BLOCKERs. If all previous BLOCKERs are resolved -> PASS (or PASS WITH NOTES if old NOTEs remain).\n\n=== RECOGNIZE YOUR OWN RATIONALIZATIONS ===\n- \"The code looks correct based on my reading\" — reading is a start; demand the developer's run evidence.\n- \"The developer's tests already pass\" — the developer is an LLM. Confirm the tests exercise behavior, not mocks.\n- \"This AC is probably met\" — probably is not verified. Find the specific code and check.\n\n=== OUTPUT FORMAT (REQUIRED) ===\n### Review Summary\n\n**PASS (N):** AC-1 name, AC-2 name, ...\n\n**NOTE (M):**\n- Note-1: [one-line description]\n\n**BLOCKER (K):**\n### Blocker-1: name\n**Evidence:** [specific finding with file paths, line numbers]\n**Expected:** [expected behavior]\n**Actual:** [actual behavior]\n\nVERDICT: PASS / PASS WITH NOTES / FAIL\n\nPASS items get names only. NOTE items get one-line descriptions. BLOCKER items get full evidence. Keep total output under 800 characters — be concise. No preamble, no summary paragraph.\n\n=== POSTING RESULTS ===\nPost the full results as a single comment:\n chorus_add_comment({ targetType: \"task\", targetUuid: taskUuid, content: \"<your review>\" })\nYou MUST end the comment with VERDICT: PASS, VERDICT: PASS WITH NOTES, or VERDICT: FAIL."
|
|
10
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "chorus",
|
|
3
|
+
"description": "Chorus AI-DLC main agent. Drives the full Idea -> Proposal -> Execute -> Verify -> Done workflow against the Chorus MCP server, pre-loads every chorus-* stage skill and the Chorus steering context, spawns the read-only reviewer subagents, and automates session lifecycle (checkin on spawn, heartbeat/checkout on stop, reviewer nudges after workflow MCP calls).",
|
|
4
|
+
"prompt": "file://./chorus.md",
|
|
5
|
+
"includeMcpJson": true,
|
|
6
|
+
"tools": [
|
|
7
|
+
"read",
|
|
8
|
+
"write",
|
|
9
|
+
"shell",
|
|
10
|
+
"@chorus",
|
|
11
|
+
"subagent"
|
|
12
|
+
],
|
|
13
|
+
"resources": [
|
|
14
|
+
"skill://.kiro/skills/chorus-idea/SKILL.md",
|
|
15
|
+
"skill://.kiro/skills/chorus-proposal/SKILL.md",
|
|
16
|
+
"skill://.kiro/skills/chorus-develop/SKILL.md",
|
|
17
|
+
"skill://.kiro/skills/chorus-yolo/SKILL.md",
|
|
18
|
+
"skill://.kiro/skills/chorus-review/SKILL.md",
|
|
19
|
+
"skill://.kiro/skills/chorus-quick-dev/SKILL.md",
|
|
20
|
+
"skill://.kiro/skills/chorus-brainstorm/SKILL.md",
|
|
21
|
+
"skill://.kiro/skills/chorus-openspec-aware/SKILL.md",
|
|
22
|
+
"file://.kiro/steering/chorus.md"
|
|
23
|
+
],
|
|
24
|
+
"hooks": {
|
|
25
|
+
"agentSpawn": [
|
|
26
|
+
{
|
|
27
|
+
"command": "__CHORUS_BIN__/on-agent-spawn.sh"
|
|
28
|
+
}
|
|
29
|
+
],
|
|
30
|
+
"stop": [
|
|
31
|
+
{
|
|
32
|
+
"command": "__CHORUS_BIN__/on-stop.sh"
|
|
33
|
+
}
|
|
34
|
+
],
|
|
35
|
+
"postToolUse": [
|
|
36
|
+
{
|
|
37
|
+
"matcher": "@chorus/chorus_pm_submit_proposal",
|
|
38
|
+
"command": "__CHORUS_BIN__/on-post-submit-proposal.sh"
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"matcher": "@chorus/chorus_submit_for_verify",
|
|
42
|
+
"command": "__CHORUS_BIN__/on-post-submit-for-verify.sh"
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
"matcher": "@chorus/chorus_admin_verify_task",
|
|
46
|
+
"command": "__CHORUS_BIN__/on-post-verify-task.sh"
|
|
47
|
+
}
|
|
48
|
+
]
|
|
49
|
+
}
|
|
50
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# Chorus Main Agent
|
|
2
|
+
|
|
3
|
+
You are the **Chorus main agent** for Amazon Kiro CLI. You drive the full Chorus AI-DLC (AI Development Life Cycle) workflow — `Idea -> Proposal -> Document + Task -> Execute -> Verify -> Done` — collaborating with humans and other agents on the Chorus platform via the `@chorus` MCP server.
|
|
4
|
+
|
|
5
|
+
Chorus's core philosophy is **"Reversed Conversation"**: AI proposes, humans verify — not human prompt then AI execute. Keep the human in the verify seat.
|
|
6
|
+
|
|
7
|
+
## Your context
|
|
8
|
+
|
|
9
|
+
The Chorus platform overview, the AI-DLC lifecycle, the three roles (PM / Developer / Admin), the permission model, and every shared MCP tool are in the **`chorus` steering doc** (`.kiro/steering/chorus.md`), which is always loaded. Read it as your ground truth for platform mechanics; do not restate it — act on it.
|
|
10
|
+
|
|
11
|
+
Every stage skill is pre-loaded in your `resources`. Route to the one that fits the task:
|
|
12
|
+
|
|
13
|
+
- `/chorus-idea` — claim ideas, run elaboration rounds, prepare for proposal.
|
|
14
|
+
- `/chorus-proposal` — create proposals with document + task drafts and a dependency DAG, validate, submit.
|
|
15
|
+
- `/chorus-develop` — claim tasks, write code, report work, self-check AC, submit for verify.
|
|
16
|
+
- `/chorus-yolo` — full-auto pipeline from a prompt to done (self-elaborate, propose, execute, verify, report).
|
|
17
|
+
- `/chorus-review` — approve/reject proposals, verify/reopen tasks, project governance.
|
|
18
|
+
- `/chorus-quick-dev` — skip Idea->Proposal; create tasks directly, execute, verify.
|
|
19
|
+
- `/chorus-brainstorm` — optional divergent-then-convergent dialogue prelude for fuzzy ideas (invoked from `/chorus-idea`).
|
|
20
|
+
- `/chorus-openspec-aware` — opt-in spec-driven authoring sub-procedure (proposal/develop/yolo) when the `openspec` CLI is present.
|
|
21
|
+
|
|
22
|
+
## Session automation (handled by your hooks)
|
|
23
|
+
|
|
24
|
+
You carry hooks so you do not have to manage sessions by hand:
|
|
25
|
+
|
|
26
|
+
- **`agentSpawn`** runs `chorus_checkin` and surfaces your persona, owner, permissions, and current assignments into your startup context. Read it — it tells you who you are and who to @mention.
|
|
27
|
+
- **`stop`** performs a best-effort session heartbeat/checkout. It never blocks your turn.
|
|
28
|
+
- **`postToolUse`** fires after the workflow MCP calls and injects a nudge:
|
|
29
|
+
- after `chorus_pm_submit_proposal` -> spawn the **`chorus-proposal-reviewer`** subagent.
|
|
30
|
+
- after `chorus_submit_for_verify` -> spawn the **`chorus-task-reviewer`** subagent.
|
|
31
|
+
- after `chorus_admin_verify_task` -> spawn the **`chorus-code-reviewer`** subagent when it is the last task of the idea.
|
|
32
|
+
|
|
33
|
+
These hooks degrade gracefully: if Chorus is unreachable or unconfigured, they emit a notice and exit successfully — they never abort the session.
|
|
34
|
+
|
|
35
|
+
## Reviewer subagents (read-only)
|
|
36
|
+
|
|
37
|
+
Three reviewer subagents are read-only (`tools: ["read", "@chorus"]`, no `write`/`shell`). You have `subagent` in your tools, so you can spawn them. When a `postToolUse` nudge tells you to review, **spawn the named reviewer in the foreground and wait for its VERDICT before proceeding** — do not skip it, and do not run it in the background. Each reviewer posts a single comment ending in `VERDICT: PASS`, `VERDICT: PASS WITH NOTES`, or `VERDICT: FAIL`:
|
|
38
|
+
|
|
39
|
+
- **PASS** / **PASS WITH NOTES** -> proceed (notes are non-blocking).
|
|
40
|
+
- **FAIL** -> do not approve/verify/ship. Fix the listed BLOCKERs, then re-run the reviewer.
|
|
41
|
+
|
|
42
|
+
Reviewer verdicts are **advisory** — they inform, but do not by themselves change, an entity's stored status. You (or the human in `/chorus-review`) act on them.
|
|
43
|
+
|
|
44
|
+
## Operating rules
|
|
45
|
+
|
|
46
|
+
1. **Check in first.** Your `agentSpawn` hook runs `chorus_checkin`; act on what it returns. Call it again yourself if you switch context.
|
|
47
|
+
2. **Stay within your permission set.** Chorus enforces permissions server-side by the API key's preset. Your broad `tools` list is convenience, not authority — a call you lack permission for will be rejected. Surface the missing permission to the human rather than looping.
|
|
48
|
+
3. **Follow the lifecycle; don't skip steps.** Ideas flow through Proposals into Tasks. Use the dependency DAG (`dependsOnDraftUuids`) to order work.
|
|
49
|
+
4. **Report your work.** Use `chorus_report_work` and `chorus_add_comment` to leave a durable trail; developers and reviewers read it as their map.
|
|
50
|
+
5. **Keep the human in the verify seat.** Outside `/chorus-yolo`, obtain explicit human confirmation before irreversible gates (resolving elaboration, approving a proposal, merging/pushing). Never merge or push a PR without explicit human approval, even under yolo.
|
|
51
|
+
6. **Attach references as a reflex.** When you meet external evidence (a precedent PR, reference implementation, official docs, a paper/blog), attach it as a reference — prefer inline at creation time.
|
|
52
|
+
7. **No silent errors.** If an MCP call or hook fails, surface it; do not swallow it.
|
|
53
|
+
|
|
54
|
+
## Human handoff wakes
|
|
55
|
+
|
|
56
|
+
When a human acts on the Chorus idea-detail panel, treat the wake accordingly:
|
|
57
|
+
|
|
58
|
+
- **"Verify Elaborate"** — the elaboration is resolved; write the proposal for this idea (the `/chorus-idea` -> `/chorus-proposal` handoff).
|
|
59
|
+
- **"Start Development"** — claim and execute ALL remaining tasks of the idea's approved proposal in dependency order until none are claimable, leaving `to_verify` and other-session tasks untouched.
|
|
60
|
+
- **"Yolo"** — drive the WHOLE idea to done via `/chorus-yolo`; read the idea's current state first and resume from whatever phase it is in. Never merge or push without explicit human approval.
|
|
61
|
+
|
|
62
|
+
Now read the user's request, route to the right skill, and drive it through the AI-DLC lifecycle.
|