@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
|
@@ -0,0 +1,392 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# chorus-api.sh — Lightweight REST API wrapper for Chorus session management
|
|
3
|
+
# Used by hook scripts to communicate with Chorus backend.
|
|
4
|
+
#
|
|
5
|
+
# Environment variables:
|
|
6
|
+
# CHORUS_URL — Chorus base URL (e.g., http://localhost:8637)
|
|
7
|
+
# CHORUS_API_KEY — Agent API key (cho_xxx)
|
|
8
|
+
# CHORUS_STATE_DIR — optional override for the session-state directory
|
|
9
|
+
#
|
|
10
|
+
# State file: $CHORUS_STATE_DIR/state.json (gitignored). Runtime-agnostic:
|
|
11
|
+
# under Kiro CLI (which does not set CLAUDE_PROJECT_DIR) state defaults to a
|
|
12
|
+
# stable per-user location (~/.kiro/.chorus) instead of the launch cwd, so a
|
|
13
|
+
# hook-triggered MCP call never litters a stray .chorus/ dir into whatever
|
|
14
|
+
# directory `kiro` happened to be started from.
|
|
15
|
+
|
|
16
|
+
set -euo pipefail
|
|
17
|
+
|
|
18
|
+
# ===== Configuration =====
|
|
19
|
+
|
|
20
|
+
CHORUS_URL="${CHORUS_URL:-}"
|
|
21
|
+
CHORUS_API_KEY="${CHORUS_API_KEY:-}"
|
|
22
|
+
STATE_DIR="${CHORUS_STATE_DIR:-${CLAUDE_PROJECT_DIR:-$HOME/.kiro}/.chorus}"
|
|
23
|
+
STATE_FILE="${STATE_DIR}/state.json"
|
|
24
|
+
|
|
25
|
+
# ===== Helpers =====
|
|
26
|
+
|
|
27
|
+
die() {
|
|
28
|
+
echo "ERROR: $*" >&2
|
|
29
|
+
exit 1
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
require_env() {
|
|
33
|
+
[ -n "$CHORUS_URL" ] || die "CHORUS_URL is not set"
|
|
34
|
+
[ -n "$CHORUS_API_KEY" ] || die "CHORUS_API_KEY is not set"
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
# Make an authenticated API request to Chorus
|
|
38
|
+
# Usage: api_call METHOD PATH [DATA]
|
|
39
|
+
api_call() {
|
|
40
|
+
local method="$1"
|
|
41
|
+
local path="$2"
|
|
42
|
+
local data="${3:-}"
|
|
43
|
+
|
|
44
|
+
local args=(
|
|
45
|
+
-s -S
|
|
46
|
+
-X "$method"
|
|
47
|
+
-H "Authorization: Bearer ${CHORUS_API_KEY}"
|
|
48
|
+
-H "Content-Type: application/json"
|
|
49
|
+
)
|
|
50
|
+
|
|
51
|
+
if [ -n "$data" ]; then
|
|
52
|
+
args+=(-d "$data")
|
|
53
|
+
fi
|
|
54
|
+
|
|
55
|
+
local response
|
|
56
|
+
response=$(curl "${args[@]}" "${CHORUS_URL}${path}" 2>&1) || {
|
|
57
|
+
echo "CURL_ERROR: Failed to reach ${CHORUS_URL}${path}" >&2
|
|
58
|
+
return 1
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
echo "$response"
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
# Ensure state directory and file exist
|
|
65
|
+
ensure_state() {
|
|
66
|
+
mkdir -p "$STATE_DIR"
|
|
67
|
+
if [ ! -f "$STATE_FILE" ]; then
|
|
68
|
+
echo '{}' > "$STATE_FILE"
|
|
69
|
+
fi
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
# ===== State Management =====
|
|
73
|
+
|
|
74
|
+
state_get() {
|
|
75
|
+
local key="$1"
|
|
76
|
+
ensure_state
|
|
77
|
+
if command -v jq &>/dev/null; then
|
|
78
|
+
jq -r --arg k "$key" '.[$k] // empty' "$STATE_FILE"
|
|
79
|
+
else
|
|
80
|
+
# Fallback: simple grep-based extraction
|
|
81
|
+
grep -o "\"${key}\":\"[^\"]*\"" "$STATE_FILE" 2>/dev/null | cut -d'"' -f4
|
|
82
|
+
fi
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
state_set() {
|
|
86
|
+
local key="$1"
|
|
87
|
+
local value="$2"
|
|
88
|
+
ensure_state
|
|
89
|
+
# Use flock to serialize concurrent state writes (multiple SubagentStart hooks
|
|
90
|
+
# may run in parallel, each calling state-set multiple times).
|
|
91
|
+
(
|
|
92
|
+
flock -w 5 200 || { echo "WARN: state_set flock timeout for key=$key" >&2; return 0; }
|
|
93
|
+
if command -v jq &>/dev/null; then
|
|
94
|
+
local tmp
|
|
95
|
+
tmp=$(mktemp)
|
|
96
|
+
jq --arg k "$key" --arg v "$value" '.[$k] = $v' "$STATE_FILE" > "$tmp" && mv "$tmp" "$STATE_FILE"
|
|
97
|
+
else
|
|
98
|
+
if grep -q "\"${key}\":" "$STATE_FILE" 2>/dev/null; then
|
|
99
|
+
sed -i "s|\"${key}\":\"[^\"]*\"|\"${key}\":\"${value}\"|" "$STATE_FILE"
|
|
100
|
+
else
|
|
101
|
+
local tmp
|
|
102
|
+
tmp=$(mktemp)
|
|
103
|
+
sed "s|}$|,\"${key}\":\"${value}\"}|" "$STATE_FILE" > "$tmp" && mv "$tmp" "$STATE_FILE"
|
|
104
|
+
fi
|
|
105
|
+
fi
|
|
106
|
+
) 200>"${STATE_FILE}.lock"
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
state_delete() {
|
|
110
|
+
local key="$1"
|
|
111
|
+
ensure_state
|
|
112
|
+
(
|
|
113
|
+
flock -w 5 200 || { echo "WARN: state_delete flock timeout for key=$key" >&2; return 0; }
|
|
114
|
+
if command -v jq &>/dev/null; then
|
|
115
|
+
local tmp
|
|
116
|
+
tmp=$(mktemp)
|
|
117
|
+
jq --arg k "$key" 'del(.[$k])' "$STATE_FILE" > "$tmp" && mv "$tmp" "$STATE_FILE"
|
|
118
|
+
fi
|
|
119
|
+
) 200>"${STATE_FILE}.lock"
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
# ===== Hook Output =====
|
|
123
|
+
# Produces JSON that Claude Code parses:
|
|
124
|
+
# systemMessage → shown to user as notification
|
|
125
|
+
# hookSpecificOutput.additionalContext → injected into Claude's context (LLM sees this)
|
|
126
|
+
# hookSpecificOutput.hookEventName → identifies which hook event produced this context
|
|
127
|
+
#
|
|
128
|
+
# Usage: hook_output "User-visible message" "Context for Claude LLM" ["HookEventName"]
|
|
129
|
+
hook_output() {
|
|
130
|
+
local system_message="$1"
|
|
131
|
+
local additional_context="${2:-}"
|
|
132
|
+
local hook_event_name="${3:-}"
|
|
133
|
+
local updated_input_json="${4:-}" # Optional: raw JSON object for updatedInput
|
|
134
|
+
if command -v jq &>/dev/null; then
|
|
135
|
+
if [ -n "$updated_input_json" ]; then
|
|
136
|
+
# Build output with updatedInput (for PreToolUse parameter modification)
|
|
137
|
+
jq -n \
|
|
138
|
+
--arg sm "$system_message" \
|
|
139
|
+
--arg ac "$additional_context" \
|
|
140
|
+
--arg hen "$hook_event_name" \
|
|
141
|
+
--argjson ui "$updated_input_json" \
|
|
142
|
+
'{systemMessage: $sm, hookSpecificOutput: {hookEventName: $hen, additionalContext: $ac, updatedInput: $ui}}'
|
|
143
|
+
elif [ -n "$additional_context" ]; then
|
|
144
|
+
jq -n \
|
|
145
|
+
--arg sm "$system_message" \
|
|
146
|
+
--arg ac "$additional_context" \
|
|
147
|
+
--arg hen "$hook_event_name" \
|
|
148
|
+
'{systemMessage: $sm, hookSpecificOutput: {hookEventName: $hen, additionalContext: $ac}}'
|
|
149
|
+
else
|
|
150
|
+
jq -n \
|
|
151
|
+
--arg sm "$system_message" \
|
|
152
|
+
'{systemMessage: $sm}'
|
|
153
|
+
fi
|
|
154
|
+
else
|
|
155
|
+
# Fallback: manual JSON — escape newlines and quotes
|
|
156
|
+
local sm_escaped="${system_message//\\/\\\\}"
|
|
157
|
+
sm_escaped="${sm_escaped//\"/\\\"}"
|
|
158
|
+
sm_escaped="${sm_escaped//$'\n'/\\n}"
|
|
159
|
+
if [ -n "$additional_context" ]; then
|
|
160
|
+
local ac_escaped="${additional_context//\\/\\\\}"
|
|
161
|
+
ac_escaped="${ac_escaped//\"/\\\"}"
|
|
162
|
+
ac_escaped="${ac_escaped//$'\n'/\\n}"
|
|
163
|
+
printf '{"systemMessage":"%s","hookSpecificOutput":{"hookEventName":"%s","additionalContext":"%s"}}\n' "$sm_escaped" "$hook_event_name" "$ac_escaped"
|
|
164
|
+
else
|
|
165
|
+
printf '{"systemMessage":"%s"}\n' "$sm_escaped"
|
|
166
|
+
fi
|
|
167
|
+
fi
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
# ===== Session File Management (Plan A) =====
|
|
171
|
+
|
|
172
|
+
SESSIONS_DIR="${STATE_DIR}/sessions"
|
|
173
|
+
|
|
174
|
+
# Read a session file by agent name
|
|
175
|
+
# Usage: session_file_read <agent_name>
|
|
176
|
+
session_file_read() {
|
|
177
|
+
local name="$1"
|
|
178
|
+
local file="${SESSIONS_DIR}/${name}.json"
|
|
179
|
+
if [ -f "$file" ]; then
|
|
180
|
+
cat "$file"
|
|
181
|
+
else
|
|
182
|
+
echo "" >&2
|
|
183
|
+
return 1
|
|
184
|
+
fi
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
# List all session files
|
|
188
|
+
session_file_list() {
|
|
189
|
+
if [ ! -d "$SESSIONS_DIR" ]; then
|
|
190
|
+
echo "[]"
|
|
191
|
+
return
|
|
192
|
+
fi
|
|
193
|
+
if command -v jq &>/dev/null; then
|
|
194
|
+
local result="["
|
|
195
|
+
local first=true
|
|
196
|
+
for f in "$SESSIONS_DIR"/*.json; do
|
|
197
|
+
[ -f "$f" ] || continue
|
|
198
|
+
if [ "$first" = true ]; then
|
|
199
|
+
first=false
|
|
200
|
+
else
|
|
201
|
+
result="${result},"
|
|
202
|
+
fi
|
|
203
|
+
result="${result}$(cat "$f")"
|
|
204
|
+
done
|
|
205
|
+
result="${result}]"
|
|
206
|
+
echo "$result" | jq '.'
|
|
207
|
+
else
|
|
208
|
+
ls "$SESSIONS_DIR"/*.json 2>/dev/null | while read -r f; do
|
|
209
|
+
basename "$f" .json
|
|
210
|
+
done
|
|
211
|
+
fi
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
# ===== Subcommands =====
|
|
215
|
+
|
|
216
|
+
cmd_checkin() {
|
|
217
|
+
require_env
|
|
218
|
+
api_call GET "/api/health"
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
# Call an MCP tool via JSON-RPC over HTTP Streamable Transport
|
|
222
|
+
# Usage: cmd_mcp_tool <tool_name> [arguments_json]
|
|
223
|
+
# Returns the text content from the tool result
|
|
224
|
+
cmd_mcp_tool() {
|
|
225
|
+
local tool_name="${1:-}"
|
|
226
|
+
local arguments="${2:-{\}}"
|
|
227
|
+
[ -n "$tool_name" ] || die "Usage: chorus-api.sh mcp-tool <tool_name> [arguments_json]"
|
|
228
|
+
require_env
|
|
229
|
+
ensure_state
|
|
230
|
+
|
|
231
|
+
local mcp_url="${CHORUS_URL}/api/mcp"
|
|
232
|
+
local auth_header="Authorization: Bearer ${CHORUS_API_KEY}"
|
|
233
|
+
local max_retries=3
|
|
234
|
+
local retry_count=0
|
|
235
|
+
local session_id=""
|
|
236
|
+
local tool_response=""
|
|
237
|
+
|
|
238
|
+
# Retry loop for auto-reconnection on 404 (session expired)
|
|
239
|
+
while [ $retry_count -le $max_retries ]; do
|
|
240
|
+
# Step 1: Initialize MCP session
|
|
241
|
+
local init_payload
|
|
242
|
+
init_payload=$(cat <<JSONEOF
|
|
243
|
+
{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"chorus-hook","version":"0.14.2"}}}
|
|
244
|
+
JSONEOF
|
|
245
|
+
)
|
|
246
|
+
|
|
247
|
+
# Use a unique temp file for headers to avoid concurrent hooks overwriting each other
|
|
248
|
+
local headers_file
|
|
249
|
+
headers_file=$(mktemp "${STATE_DIR}/.mcp_headers.XXXXXX")
|
|
250
|
+
|
|
251
|
+
local init_response
|
|
252
|
+
init_response=$(curl -s -S -X POST \
|
|
253
|
+
-H "$auth_header" \
|
|
254
|
+
-H "Content-Type: application/json" \
|
|
255
|
+
-H "Accept: application/json, text/event-stream" \
|
|
256
|
+
-D "$headers_file" \
|
|
257
|
+
-d "$init_payload" \
|
|
258
|
+
"$mcp_url" 2>/dev/null) || { rm -f "$headers_file"; die "MCP initialize failed"; }
|
|
259
|
+
|
|
260
|
+
# Extract session ID from response headers (optional — stateless servers don't return one)
|
|
261
|
+
session_id=$(grep -i "^mcp-session-id:" "$headers_file" 2>/dev/null | tr -d '\r' | awk '{print $2}') || true
|
|
262
|
+
rm -f "$headers_file"
|
|
263
|
+
|
|
264
|
+
# Build session header (empty string if stateless server returned no session ID)
|
|
265
|
+
local session_header=""
|
|
266
|
+
if [ -n "$session_id" ]; then
|
|
267
|
+
session_header="mcp-session-id: $session_id"
|
|
268
|
+
fi
|
|
269
|
+
|
|
270
|
+
# Step 2: Send initialized notification
|
|
271
|
+
local notif_payload='{"jsonrpc":"2.0","method":"notifications/initialized"}'
|
|
272
|
+
if [ -n "$session_header" ]; then
|
|
273
|
+
curl -s -S -X POST \
|
|
274
|
+
-H "$auth_header" \
|
|
275
|
+
-H "Content-Type: application/json" \
|
|
276
|
+
-H "Accept: application/json, text/event-stream" \
|
|
277
|
+
-H "$session_header" \
|
|
278
|
+
-d "$notif_payload" \
|
|
279
|
+
"$mcp_url" >/dev/null 2>&1 || true
|
|
280
|
+
else
|
|
281
|
+
curl -s -S -X POST \
|
|
282
|
+
-H "$auth_header" \
|
|
283
|
+
-H "Content-Type: application/json" \
|
|
284
|
+
-H "Accept: application/json, text/event-stream" \
|
|
285
|
+
-d "$notif_payload" \
|
|
286
|
+
"$mcp_url" >/dev/null 2>&1 || true
|
|
287
|
+
fi
|
|
288
|
+
|
|
289
|
+
# Step 3: Call the tool
|
|
290
|
+
local call_payload
|
|
291
|
+
call_payload=$(printf '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"%s","arguments":%s}}' "$tool_name" "$arguments")
|
|
292
|
+
|
|
293
|
+
# Capture HTTP status code and response separately
|
|
294
|
+
local http_code
|
|
295
|
+
local response_file
|
|
296
|
+
response_file=$(mktemp "${STATE_DIR}/.mcp_response.XXXXXX")
|
|
297
|
+
|
|
298
|
+
if [ -n "$session_header" ]; then
|
|
299
|
+
http_code=$(curl -s -S -X POST \
|
|
300
|
+
-H "$auth_header" \
|
|
301
|
+
-H "Content-Type: application/json" \
|
|
302
|
+
-H "Accept: application/json, text/event-stream" \
|
|
303
|
+
-H "$session_header" \
|
|
304
|
+
-d "$call_payload" \
|
|
305
|
+
-w "%{http_code}" \
|
|
306
|
+
-o "$response_file" \
|
|
307
|
+
"$mcp_url" 2>/dev/null) || http_code="000"
|
|
308
|
+
else
|
|
309
|
+
http_code=$(curl -s -S -X POST \
|
|
310
|
+
-H "$auth_header" \
|
|
311
|
+
-H "Content-Type: application/json" \
|
|
312
|
+
-H "Accept: application/json, text/event-stream" \
|
|
313
|
+
-d "$call_payload" \
|
|
314
|
+
-w "%{http_code}" \
|
|
315
|
+
-o "$response_file" \
|
|
316
|
+
"$mcp_url" 2>/dev/null) || http_code="000"
|
|
317
|
+
fi
|
|
318
|
+
|
|
319
|
+
# Check if session expired (404)
|
|
320
|
+
if [ "$http_code" = "404" ]; then
|
|
321
|
+
retry_count=$((retry_count + 1))
|
|
322
|
+
rm -f "$response_file"
|
|
323
|
+
|
|
324
|
+
if [ $retry_count -le $max_retries ]; then
|
|
325
|
+
# Session expired - retry with new session
|
|
326
|
+
continue
|
|
327
|
+
else
|
|
328
|
+
die "MCP session expired after retry. Please reinitialize."
|
|
329
|
+
fi
|
|
330
|
+
fi
|
|
331
|
+
|
|
332
|
+
# Read the response
|
|
333
|
+
tool_response=$(cat "$response_file")
|
|
334
|
+
rm -f "$response_file"
|
|
335
|
+
|
|
336
|
+
# Break the retry loop - request succeeded
|
|
337
|
+
break
|
|
338
|
+
done
|
|
339
|
+
|
|
340
|
+
# Step 4: Close session (best effort, only for stateful servers)
|
|
341
|
+
if [ -n "$session_id" ]; then
|
|
342
|
+
curl -s -S -X DELETE \
|
|
343
|
+
-H "$auth_header" \
|
|
344
|
+
-H "mcp-session-id: $session_id" \
|
|
345
|
+
"$mcp_url" >/dev/null 2>&1 || true
|
|
346
|
+
fi
|
|
347
|
+
|
|
348
|
+
# Response may be SSE format (event: message\ndata: {...}) or plain JSON
|
|
349
|
+
# Strip SSE framing to get the JSON payload
|
|
350
|
+
local json_response
|
|
351
|
+
if echo "$tool_response" | grep -q "^data: "; then
|
|
352
|
+
json_response=$(echo "$tool_response" | grep "^data: " | head -1 | sed 's/^data: //')
|
|
353
|
+
else
|
|
354
|
+
json_response="$tool_response"
|
|
355
|
+
fi
|
|
356
|
+
|
|
357
|
+
# Extract text content from result
|
|
358
|
+
if command -v jq &>/dev/null; then
|
|
359
|
+
echo "$json_response" | jq -r '.result.content[]? | select(.type=="text") | .text // empty' 2>/dev/null || echo "$json_response"
|
|
360
|
+
else
|
|
361
|
+
echo "$json_response"
|
|
362
|
+
fi
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
# ===== Main Dispatch =====
|
|
366
|
+
|
|
367
|
+
cmd="${1:-}"
|
|
368
|
+
shift || true
|
|
369
|
+
|
|
370
|
+
case "$cmd" in
|
|
371
|
+
checkin) cmd_checkin "$@" ;;
|
|
372
|
+
mcp-tool) cmd_mcp_tool "$@" ;;
|
|
373
|
+
state-get) state_get "${1:-}" ;;
|
|
374
|
+
state-set) state_set "${1:-}" "${2:-}" ;;
|
|
375
|
+
state-delete) state_delete "${1:-}" ;;
|
|
376
|
+
session-read) session_file_read "${1:-}" ;;
|
|
377
|
+
session-list) session_file_list ;;
|
|
378
|
+
hook-output) hook_output "${1:-}" "${2:-}" "${3:-}" "${4:-}" ;;
|
|
379
|
+
*)
|
|
380
|
+
echo "Usage: chorus-api.sh <command> [args...]"
|
|
381
|
+
echo ""
|
|
382
|
+
echo "Commands:"
|
|
383
|
+
echo " checkin Check connectivity with Chorus"
|
|
384
|
+
echo " mcp-tool <name> [args_json] Call an MCP tool via JSON-RPC"
|
|
385
|
+
echo " state-get <key> Read from state.json"
|
|
386
|
+
echo " state-set <key> <value> Write to state.json"
|
|
387
|
+
echo " state-delete <key> Delete key from state.json"
|
|
388
|
+
echo " session-read <name> Read session file for an agent"
|
|
389
|
+
echo " session-list List all pre-created session files"
|
|
390
|
+
exit 1
|
|
391
|
+
;;
|
|
392
|
+
esac
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# on-agent-spawn.sh — Kiro `agentSpawn` hook for the `chorus` main agent.
|
|
3
|
+
#
|
|
4
|
+
# Kiro contract (kiro.dev/docs/cli/hooks): the agentSpawn event delivers
|
|
5
|
+
# {hook_event_name, cwd, session_id} on STDIN, and on exit 0 the hook's
|
|
6
|
+
# STDOUT is added to the agent's context as PLAIN TEXT (there is no
|
|
7
|
+
# hookSpecificOutput/additionalContext JSON envelope the way Claude Code
|
|
8
|
+
# uses — that is the load-bearing difference from the CC on-session-start
|
|
9
|
+
# hook this is ported from).
|
|
10
|
+
#
|
|
11
|
+
# Behavior (parity with CC public/chorus-plugin/bin/on-session-start.sh):
|
|
12
|
+
# * If CHORUS_URL / CHORUS_API_KEY are unset -> print a "not configured"
|
|
13
|
+
# notice to STDOUT and exit 0. NEVER abort the spawn.
|
|
14
|
+
# * Otherwise call chorus_checkin over MCP and print the result (agent
|
|
15
|
+
# owner / permissions / idea tracker) as the startup context.
|
|
16
|
+
# * If Chorus is unreachable, print a warning and exit 0 (degrade
|
|
17
|
+
# gracefully — the spawn must not fail).
|
|
18
|
+
#
|
|
19
|
+
# Bash 3.2 compatible (CLAUDE.md pitfall #10): no ${VAR,,}/${VAR^^},
|
|
20
|
+
# no `declare -A`, no `readarray`/`mapfile`, no `&>>`, no `|&`.
|
|
21
|
+
|
|
22
|
+
set -euo pipefail
|
|
23
|
+
|
|
24
|
+
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
25
|
+
API="${SCRIPT_DIR}/chorus-api.sh"
|
|
26
|
+
|
|
27
|
+
# Drain the event JSON from STDIN if present (base fields only for
|
|
28
|
+
# agentSpawn; not needed for logic, but consume it so the pipe closes).
|
|
29
|
+
EVENT=""
|
|
30
|
+
if [ ! -t 0 ]; then
|
|
31
|
+
EVENT=$(cat)
|
|
32
|
+
fi
|
|
33
|
+
|
|
34
|
+
# Not configured -> plain-text notice, exit 0 (never abort spawn).
|
|
35
|
+
if [ -z "${CHORUS_URL:-}" ] || [ -z "${CHORUS_API_KEY:-}" ]; then
|
|
36
|
+
printf '%s\n' "Chorus plugin: not configured. Set CHORUS_URL and CHORUS_API_KEY to enable Chorus session automation (checkin, reviewer nudges, checkout)."
|
|
37
|
+
exit 0
|
|
38
|
+
fi
|
|
39
|
+
|
|
40
|
+
# Call chorus_checkin via MCP. On any failure, warn and exit 0.
|
|
41
|
+
CHECKIN_RESULT=$("$API" mcp-tool "chorus_checkin" '{}' 2>/dev/null) || {
|
|
42
|
+
printf '%s\n' "Chorus plugin: unable to reach Chorus at ${CHORUS_URL}. Session lifecycle hooks are inactive for this session."
|
|
43
|
+
exit 0
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
if [ -z "$CHECKIN_RESULT" ]; then
|
|
47
|
+
printf '%s\n' "Chorus plugin: checkin returned no data from ${CHORUS_URL}. Session lifecycle hooks may be degraded."
|
|
48
|
+
exit 0
|
|
49
|
+
fi
|
|
50
|
+
|
|
51
|
+
# Emit the startup context as plain text (Kiro adds STDOUT to context).
|
|
52
|
+
# The checkin payload carries agent owner, effective permissions, and the
|
|
53
|
+
# recent-idea tracker — surfaced verbatim, same as the CC hook.
|
|
54
|
+
CONTEXT="# Chorus Plugin — Active
|
|
55
|
+
|
|
56
|
+
Chorus is connected at ${CHORUS_URL}. Session lifecycle hooks are enabled (checkin on spawn, best-effort heartbeat/checkout on stop, reviewer nudges after workflow MCP calls).
|
|
57
|
+
|
|
58
|
+
## Checkin
|
|
59
|
+
|
|
60
|
+
${CHECKIN_RESULT}
|
|
61
|
+
|
|
62
|
+
## Quick Reference
|
|
63
|
+
|
|
64
|
+
- **Idea Tracker**: the checkin above lists up to 10 most recently updated ideas. Use chorus_get_ideas() for the full list.
|
|
65
|
+
- **Reviewers**: after chorus_pm_submit_proposal / chorus_submit_for_verify / chorus_admin_verify_task, a postToolUse hook will nudge you to spawn the matching read-only reviewer subagent (chorus-proposal-reviewer / chorus-task-reviewer / chorus-code-reviewer). See /chorus-review.
|
|
66
|
+
- **Notifications**: chorus_get_notifications() fetches and auto-marks read. See /chorus-develop.
|
|
67
|
+
- **Project Groups**: chorus_get_project_groups() before creating projects."
|
|
68
|
+
|
|
69
|
+
# Resume: if a Chorus session was cached by a prior swarm-mode flow,
|
|
70
|
+
# send a best-effort heartbeat and note it in context. No session cached
|
|
71
|
+
# in the common single-agent case -> nothing to resume (silent).
|
|
72
|
+
MAIN_SESSION=$("$API" state-get "main_session_uuid" 2>/dev/null) || true
|
|
73
|
+
if [ -n "$MAIN_SESSION" ]; then
|
|
74
|
+
CONTEXT="${CONTEXT}
|
|
75
|
+
|
|
76
|
+
Resuming with existing Chorus session: ${MAIN_SESSION}"
|
|
77
|
+
"$API" mcp-tool "chorus_session_heartbeat" "$(printf '{"sessionUuid":"%s"}' "$MAIN_SESSION")" >/dev/null 2>&1 || true
|
|
78
|
+
fi
|
|
79
|
+
|
|
80
|
+
printf '%s\n' "$CONTEXT"
|
|
81
|
+
exit 0
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# on-post-submit-for-verify.sh — Kiro `postToolUse` hook matched to
|
|
3
|
+
# @chorus/chorus_submit_for_verify.
|
|
4
|
+
#
|
|
5
|
+
# Kiro contract: postToolUse delivers {tool_name, tool_input,
|
|
6
|
+
# tool_response, ...} on STDIN; on exit 0 the hook's STDOUT is added to
|
|
7
|
+
# the agent's context as PLAIN TEXT (no additionalContext JSON envelope).
|
|
8
|
+
#
|
|
9
|
+
# Behavior: emit a nudge to spawn the read-only `chorus-task-reviewer`
|
|
10
|
+
# subagent before admin verification. If the event carries no parseable
|
|
11
|
+
# taskUuid -> exit 0 with NO output (no broken nudge).
|
|
12
|
+
#
|
|
13
|
+
# Bash 3.2 compatible (CLAUDE.md pitfall #10).
|
|
14
|
+
|
|
15
|
+
set -euo pipefail
|
|
16
|
+
|
|
17
|
+
# Config toggle — default enabled (Kiro analog of CC's ENABLETASKREVIEWER).
|
|
18
|
+
if [ "${CHORUS_ENABLE_TASK_REVIEWER:-true}" != "true" ]; then
|
|
19
|
+
exit 0
|
|
20
|
+
fi
|
|
21
|
+
|
|
22
|
+
EVENT=""
|
|
23
|
+
if [ ! -t 0 ]; then
|
|
24
|
+
EVENT=$(cat)
|
|
25
|
+
fi
|
|
26
|
+
if [ -z "$EVENT" ]; then
|
|
27
|
+
exit 0
|
|
28
|
+
fi
|
|
29
|
+
|
|
30
|
+
# Extract taskUuid from tool_input; silent exit if missing/unparseable.
|
|
31
|
+
TASK_UUID=""
|
|
32
|
+
if command -v jq >/dev/null 2>&1; then
|
|
33
|
+
TASK_UUID=$(printf '%s' "$EVENT" | jq -r '.tool_input.taskUuid // empty' 2>/dev/null) || true
|
|
34
|
+
fi
|
|
35
|
+
if [ -z "$TASK_UUID" ]; then
|
|
36
|
+
exit 0
|
|
37
|
+
fi
|
|
38
|
+
|
|
39
|
+
# Optional task title from tool_response.
|
|
40
|
+
TITLE_DISPLAY=""
|
|
41
|
+
if command -v jq >/dev/null 2>&1; then
|
|
42
|
+
TASK_TITLE=$(printf '%s' "$EVENT" | jq -r '.tool_response.title // empty' 2>/dev/null) || true
|
|
43
|
+
if [ -n "${TASK_TITLE:-}" ]; then
|
|
44
|
+
TITLE_DISPLAY=" '${TASK_TITLE}'"
|
|
45
|
+
fi
|
|
46
|
+
fi
|
|
47
|
+
|
|
48
|
+
# Max review rounds (0 = unlimited). Kiro analog of CC's
|
|
49
|
+
# CLAUDE_PLUGIN_OPTION_MAXTASKREVIEWROUNDS.
|
|
50
|
+
MAX_ROUNDS="${CHORUS_MAX_TASK_REVIEW_ROUNDS:-3}"
|
|
51
|
+
|
|
52
|
+
printf '%s\n' "[Chorus Plugin — Task Submitted for Verification]
|
|
53
|
+
Task${TITLE_DISPLAY} (UUID: ${TASK_UUID}) has been submitted for verification.
|
|
54
|
+
|
|
55
|
+
Max review rounds: ${MAX_ROUNDS} (0 = unlimited).
|
|
56
|
+
|
|
57
|
+
ACTION REQUIRED: spawn the read-only \`chorus-task-reviewer\` subagent to perform an independent review before admin verification.
|
|
58
|
+
|
|
59
|
+
In Kiro, hand the reviewer this task (auto-selected by its description; also invokable as /chorus-task-reviewer): \"Review task ${TASK_UUID}. Max review rounds: ${MAX_ROUNDS}. First, read existing comments to count previous VERDICTs and determine your round number. If max > 0 and your round exceeds max, skip the review and post a comment saying the limit was reached — human decision needed. Otherwise, proceed with the review and post your VERDICT as a comment on the task.\"
|
|
60
|
+
|
|
61
|
+
The reviewer is read-only (tools: read + @chorus) and posts its VERDICT as a comment on the task. After it completes, read comments and act on the most recent \`VERDICT:\` line:
|
|
62
|
+
- VERDICT: PASS — all AC verified, no issues. Proceed to mark AC and call chorus_admin_verify_task.
|
|
63
|
+
- VERDICT: PASS WITH NOTES — all AC verified, minor non-blocking notes. Still proceed to verify.
|
|
64
|
+
- VERDICT: FAIL — BLOCKERs found. Do NOT verify. Reopen the task (chorus_admin_reopen_task) and fix the BLOCKERs.
|
|
65
|
+
|
|
66
|
+
IMPORTANT: run the reviewer synchronously and wait for its VERDICT before proceeding."
|
|
67
|
+
|
|
68
|
+
exit 0
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# on-post-submit-proposal.sh — Kiro `postToolUse` hook matched to
|
|
3
|
+
# @chorus/chorus_pm_submit_proposal.
|
|
4
|
+
#
|
|
5
|
+
# Kiro contract (kiro.dev/docs/cli/hooks): postToolUse delivers
|
|
6
|
+
# {hook_event_name, tool_name, tool_input, tool_response, cwd, session_id}
|
|
7
|
+
# on STDIN, and on exit 0 the hook's STDOUT is added to the agent's
|
|
8
|
+
# context as PLAIN TEXT. (No hookSpecificOutput/additionalContext JSON
|
|
9
|
+
# envelope — that is the difference from the CC on-post-submit-proposal
|
|
10
|
+
# hook this is ported from.)
|
|
11
|
+
#
|
|
12
|
+
# Behavior: emit a nudge to spawn the read-only `chorus-proposal-reviewer`
|
|
13
|
+
# subagent before admin approval. If the event carries no parseable
|
|
14
|
+
# proposalUuid -> exit 0 with NO output (no broken nudge).
|
|
15
|
+
#
|
|
16
|
+
# Bash 3.2 compatible (CLAUDE.md pitfall #10).
|
|
17
|
+
|
|
18
|
+
set -euo pipefail
|
|
19
|
+
|
|
20
|
+
# Config toggle — default enabled. CHORUS_ENABLE_PROPOSAL_REVIEWER is the
|
|
21
|
+
# Kiro analog of CC's CLAUDE_PLUGIN_OPTION_ENABLEPROPOSALREVIEWER (Kiro has
|
|
22
|
+
# no userConfig plumbing, so we read a plain env var).
|
|
23
|
+
if [ "${CHORUS_ENABLE_PROPOSAL_REVIEWER:-true}" != "true" ]; then
|
|
24
|
+
exit 0
|
|
25
|
+
fi
|
|
26
|
+
|
|
27
|
+
# Read the event JSON from STDIN.
|
|
28
|
+
EVENT=""
|
|
29
|
+
if [ ! -t 0 ]; then
|
|
30
|
+
EVENT=$(cat)
|
|
31
|
+
fi
|
|
32
|
+
if [ -z "$EVENT" ]; then
|
|
33
|
+
exit 0
|
|
34
|
+
fi
|
|
35
|
+
|
|
36
|
+
# Extract proposalUuid from tool_input. printf (not echo) preserves
|
|
37
|
+
# multi-line JSON. If jq is unavailable or the field is empty -> silent
|
|
38
|
+
# exit 0 (no broken nudge).
|
|
39
|
+
PROPOSAL_UUID=""
|
|
40
|
+
if command -v jq >/dev/null 2>&1; then
|
|
41
|
+
PROPOSAL_UUID=$(printf '%s' "$EVENT" | jq -r '.tool_input.proposalUuid // empty' 2>/dev/null) || true
|
|
42
|
+
fi
|
|
43
|
+
if [ -z "$PROPOSAL_UUID" ]; then
|
|
44
|
+
exit 0
|
|
45
|
+
fi
|
|
46
|
+
|
|
47
|
+
# Optional proposal title from tool_response for a friendlier nudge.
|
|
48
|
+
TITLE_DISPLAY=""
|
|
49
|
+
if command -v jq >/dev/null 2>&1; then
|
|
50
|
+
PROPOSAL_TITLE=$(printf '%s' "$EVENT" | jq -r '.tool_response.title // empty' 2>/dev/null) || true
|
|
51
|
+
if [ -n "${PROPOSAL_TITLE:-}" ]; then
|
|
52
|
+
TITLE_DISPLAY=" '${PROPOSAL_TITLE}'"
|
|
53
|
+
fi
|
|
54
|
+
fi
|
|
55
|
+
|
|
56
|
+
# Max review rounds (0 = unlimited). Kiro analog of CC's
|
|
57
|
+
# CLAUDE_PLUGIN_OPTION_MAXPROPOSALREVIEWROUNDS.
|
|
58
|
+
MAX_ROUNDS="${CHORUS_MAX_PROPOSAL_REVIEW_ROUNDS:-3}"
|
|
59
|
+
|
|
60
|
+
printf '%s\n' "[Chorus Plugin — Proposal Submitted for Review]
|
|
61
|
+
Proposal${TITLE_DISPLAY} (UUID: ${PROPOSAL_UUID}) has been submitted.
|
|
62
|
+
|
|
63
|
+
Max review rounds: ${MAX_ROUNDS} (0 = unlimited).
|
|
64
|
+
|
|
65
|
+
ACTION REQUIRED: spawn the read-only \`chorus-proposal-reviewer\` subagent to perform an independent quality review before admin approval.
|
|
66
|
+
|
|
67
|
+
In Kiro, hand the reviewer this task (it is auto-selected by its description; you can also invoke it as /chorus-proposal-reviewer): \"Review proposal ${PROPOSAL_UUID}. Max review rounds: ${MAX_ROUNDS}. First, read existing comments to count previous VERDICTs and determine your round number. If max > 0 and your round exceeds max, skip the review and post a comment saying the limit was reached — human decision needed. Otherwise, proceed with the review and post your VERDICT as a comment on the proposal.\"
|
|
68
|
+
|
|
69
|
+
The reviewer is read-only (tools: read + @chorus) and posts its VERDICT as a comment on the proposal. After it completes, read comments and act on the most recent \`VERDICT:\` line:
|
|
70
|
+
- VERDICT: PASS — no issues. Proceed to approve (chorus_admin_approve_proposal).
|
|
71
|
+
- VERDICT: PASS WITH NOTES — minor non-blocking notes. Still proceed to approve.
|
|
72
|
+
- VERDICT: FAIL — BLOCKERs found. Do NOT approve. Reject (chorus_pm_reject_proposal), fix the BLOCKERs, and resubmit.
|
|
73
|
+
|
|
74
|
+
IMPORTANT: run the reviewer synchronously and wait for its VERDICT before proceeding."
|
|
75
|
+
|
|
76
|
+
exit 0
|