@chorus-aidlc/chorus 0.10.0 → 0.11.1
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 +457 -340
- package/.next/standalone/.next/app-path-routes-manifest.json +39 -25
- package/.next/standalone/.next/build-manifest.json +5 -5
- package/.next/standalone/.next/prerender-manifest.json +30 -30
- package/.next/standalone/.next/routes-manifest.json +25 -0
- package/.next/standalone/.next/server/app/(dashboard)/project-groups/[uuid]/page.js +2 -2
- 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 +2 -2
- 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 +2 -2
- 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 +2 -2
- 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]/proposals/[proposalUuid]/page.js +2 -3
- 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 +2 -2
- 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 +2 -2
- 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 +2 -2
- 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 +3 -3
- 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 -8
- 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 +1 -1
- package/.next/standalone/.next/server/app/_not-found.rsc +5 -5
- 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 +1 -1
- package/.next/standalone/.next/server/app/admin/companies/new.rsc +5 -5
- package/.next/standalone/.next/server/app/admin/companies/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/admin/companies.html +1 -1
- package/.next/standalone/.next/server/app/admin/companies.rsc +5 -5
- package/.next/standalone/.next/server/app/admin/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/admin.html +1 -1
- package/.next/standalone/.next/server/app/admin.rsc +5 -5
- package/.next/standalone/.next/server/app/api/admin/companies/[uuid]/route.js +1 -1
- package/.next/standalone/.next/server/app/api/admin/companies/[uuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/admin/companies/route.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.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.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.js +1 -0
- package/.next/standalone/.next/server/app/api/agent-connections/route.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/api/agent-connections/route_client-reference-manifest.js +1 -0
- package/.next/standalone/.next/server/app/api/agents/[uuid]/route.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.js.nft.json +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.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.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.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.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.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.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.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.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.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/refresh/route.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/refresh/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/session/route.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/session/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/sync-token/route.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.js.nft.json +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.js +1 -0
- package/.next/standalone/.next/server/app/api/daemon/control/route.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/api/daemon/control/route_client-reference-manifest.js +1 -0
- package/.next/standalone/.next/server/app/api/daemon/execution-state/route.js +1 -0
- package/.next/standalone/.next/server/app/api/daemon/execution-state/route.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/api/daemon/execution-state/route_client-reference-manifest.js +1 -0
- package/.next/standalone/.next/server/app/api/daemon/executions/route.js +1 -0
- package/.next/standalone/.next/server/app/api/daemon/executions/route.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/api/daemon/executions/route_client-reference-manifest.js +1 -0
- package/.next/standalone/.next/server/app/api/daemon/pending-turns/route.js +1 -0
- package/.next/standalone/.next/server/app/api/daemon/pending-turns/route.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/api/daemon/pending-turns/route_client-reference-manifest.js +1 -0
- package/.next/standalone/.next/server/app/api/daemon/report-interrupt/route.js +1 -0
- package/.next/standalone/.next/server/app/api/daemon/report-interrupt/route.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/api/daemon/report-interrupt/route_client-reference-manifest.js +1 -0
- package/.next/standalone/.next/server/app/api/daemon/resume/route.js +1 -0
- package/.next/standalone/.next/server/app/api/daemon/resume/route.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/api/daemon/resume/route_client-reference-manifest.js +1 -0
- package/.next/standalone/.next/server/app/api/daemon/transcript/route.js +1 -0
- package/.next/standalone/.next/server/app/api/daemon/transcript/route.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/api/daemon/transcript/route_client-reference-manifest.js +1 -0
- package/.next/standalone/.next/server/app/api/daemon/turn-advance/route.js +1 -0
- package/.next/standalone/.next/server/app/api/daemon/turn-advance/route.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/api/daemon/turn-advance/route_client-reference-manifest.js +1 -0
- package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/instruction/route.js +1 -0
- package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/instruction/route.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/instruction/route_client-reference-manifest.js +1 -0
- package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/route.js +1 -0
- package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/route.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/route_client-reference-manifest.js +1 -0
- package/.next/standalone/.next/server/app/api/daemon-sessions/ad-hoc/route.js +1 -0
- package/.next/standalone/.next/server/app/api/daemon-sessions/ad-hoc/route.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/api/daemon-sessions/ad-hoc/route_client-reference-manifest.js +1 -0
- package/.next/standalone/.next/server/app/api/daemon-sessions/route.js +1 -0
- package/.next/standalone/.next/server/app/api/daemon-sessions/route.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/api/daemon-sessions/route_client-reference-manifest.js +1 -0
- package/.next/standalone/.next/server/app/api/documents/[uuid]/route.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 -0
- package/.next/standalone/.next/server/app/api/entities/[type]/[uuid]/root-idea/route.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/api/entities/[type]/[uuid]/root-idea/route_client-reference-manifest.js +1 -0
- package/.next/standalone/.next/server/app/api/events/notifications/route.js +6 -2
- package/.next/standalone/.next/server/app/api/events/notifications/route.js.nft.json +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 +7 -3
- package/.next/standalone/.next/server/app/api/events/route.js.nft.json +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.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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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/mcp/route.js +5 -41
- package/.next/standalone/.next/server/app/api/mcp/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/mcp/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/me/assignments/route.js +1 -1
- package/.next/standalone/.next/server/app/api/me/assignments/route.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.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.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.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/projects/[uuid]/activity/route.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/activity/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/available/route.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/available/route.js.nft.json +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.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.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.js.nft.json +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.js.nft.json +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.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.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.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]/route.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.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.js.nft.json +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.js.nft.json +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.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.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.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.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.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.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/search/route.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/sessions/[uuid]/route.js +1 -1
- package/.next/standalone/.next/server/app/api/sessions/[uuid]/route.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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 +1 -1
- package/.next/standalone/.next/server/app/index.rsc +5 -5
- package/.next/standalone/.next/server/app/login/admin/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/login/admin.html +1 -1
- package/.next/standalone/.next/server/app/login/admin.rsc +5 -5
- package/.next/standalone/.next/server/app/login/callback/page.js +2 -2
- package/.next/standalone/.next/server/app/login/callback/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/login/callback/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/login/callback.html +1 -1
- package/.next/standalone/.next/server/app/login/callback.rsc +5 -5
- 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 +1 -1
- package/.next/standalone/.next/server/app/login/pick-workspace.rsc +5 -5
- package/.next/standalone/.next/server/app/login/silent-refresh/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/login/silent-refresh.html +1 -1
- package/.next/standalone/.next/server/app/login/silent-refresh.rsc +5 -5
- package/.next/standalone/.next/server/app/login.html +1 -1
- package/.next/standalone/.next/server/app/login.rsc +5 -5
- package/.next/standalone/.next/server/app/onboarding/page.js +2 -2
- package/.next/standalone/.next/server/app/onboarding/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/onboarding/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/onboarding.html +1 -1
- package/.next/standalone/.next/server/app/onboarding.rsc +6 -6
- package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/projects.html +1 -1
- package/.next/standalone/.next/server/app/projects.rsc +7 -7
- package/.next/standalone/.next/server/app/settings.html +1 -1
- package/.next/standalone/.next/server/app/settings.rsc +7 -7
- package/.next/standalone/.next/server/app-paths-manifest.json +39 -25
- package/.next/standalone/.next/server/chunks/1064.js +1 -0
- package/.next/standalone/.next/server/chunks/1596.js +13 -0
- package/.next/standalone/.next/server/chunks/2213.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 +2 -0
- package/.next/standalone/.next/server/chunks/3371.js +1 -0
- package/.next/standalone/.next/server/chunks/3419.js +1 -0
- package/.next/standalone/.next/server/chunks/369.js +1 -0
- package/.next/standalone/.next/server/chunks/4638.js +1 -0
- package/.next/standalone/.next/server/chunks/4711.js +530 -0
- package/.next/standalone/.next/server/chunks/5039.js +1 -0
- package/.next/standalone/.next/server/chunks/5300.js +1 -1
- package/.next/standalone/.next/server/chunks/{4913.js → 5631.js} +1 -1
- package/.next/standalone/.next/server/chunks/6044.js +1 -1
- 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/6461.js +1 -0
- package/.next/standalone/.next/server/chunks/6712.js +1 -0
- package/.next/standalone/.next/server/chunks/7002.js +1 -1
- package/.next/standalone/.next/server/chunks/7063.js +1 -1
- package/.next/standalone/.next/server/chunks/7258.js +37 -0
- package/.next/standalone/.next/server/chunks/7368.js +1 -1
- package/.next/standalone/.next/server/chunks/7578.js +2 -2
- package/.next/standalone/.next/server/chunks/7867.js +1 -0
- package/.next/standalone/.next/server/chunks/7897.js +1 -0
- package/.next/standalone/.next/server/chunks/8012.js +1 -0
- package/.next/standalone/.next/server/chunks/8245.js +31 -0
- package/.next/standalone/.next/server/chunks/8322.js +1 -1
- package/.next/standalone/.next/server/chunks/9015.js +1 -1
- package/.next/standalone/.next/server/chunks/920.js +1 -1
- package/.next/standalone/.next/server/chunks/937.js +16 -2
- package/.next/standalone/.next/server/chunks/9629.js +1 -0
- package/.next/standalone/.next/server/chunks/9725.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 +5 -5
- package/.next/standalone/.next/server/next-font-manifest.js +1 -1
- package/.next/standalone/.next/server/next-font-manifest.json +1 -1
- package/.next/standalone/.next/server/pages/404.html +1 -1
- package/.next/standalone/.next/server/pages/500.html +1 -1
- package/.next/standalone/.next/server/pages-manifest.json +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/server/src/middleware.js +1 -1
- package/.next/standalone/.next/static/GQvpOux3M9CaxkMjL9GAI/_buildManifest.js +1 -0
- package/.next/standalone/.next/static/chunks/1217-323cc20b73ebfde9.js +1 -0
- package/.next/standalone/.next/static/chunks/{11207-8f4b154804f5a66f.js → 15183-5734d279b26e9414.js} +2 -2
- package/.next/standalone/.next/static/chunks/1879-7a8b283283218df2.js +1 -0
- package/.next/standalone/.next/static/chunks/19276-50b367d7b93d5f34.js +1 -0
- package/.next/standalone/.next/static/chunks/23466-e1176a6d814f4897.js +1 -0
- package/.next/standalone/.next/static/chunks/38040-a8687f86dd8e9d67.js +1 -0
- package/.next/standalone/.next/static/chunks/4860.8bdb37c964f92e48.js +1 -0
- package/.next/standalone/.next/static/chunks/58245-b2ea112ace9624d2.js +1 -0
- package/.next/standalone/.next/static/chunks/59296-783831c43aa0162e.js +1 -0
- package/.next/standalone/.next/static/chunks/60648-36ccbee4ce232d52.js +1 -0
- package/.next/standalone/.next/static/chunks/60694-68232120903209df.js +1 -0
- package/.next/standalone/.next/static/chunks/64648-ece4e2a59672cf63.js +1 -0
- package/.next/standalone/.next/static/chunks/{94655-1c75e0590a66215e.js → 66969-12f0b22c51f5a410.js} +1 -1
- package/.next/standalone/.next/static/chunks/70536-b8bf71098ae11f07.js +1 -0
- package/.next/standalone/.next/static/chunks/71350-88c2649fc693c1e8.js +1 -0
- package/.next/standalone/.next/static/chunks/78389-b32edc6bd5c570a9.js +1 -0
- package/.next/standalone/.next/static/chunks/78584-eb2fa8cf2f266329.js +1 -0
- package/.next/standalone/.next/static/chunks/78917-150ed14a99844aab.js +1 -0
- package/.next/standalone/.next/static/chunks/8574-b9739eb8d054c793.js +1 -0
- package/.next/standalone/.next/static/chunks/99373.12370329b9ab6beb.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/layout-0a28456fea4ce95a.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/project-groups/[uuid]/page-a79969c5c9aadacd.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/dashboard/[ideaUuid]/page-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/dashboard/page-a28f0eaa6f4ac94a.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page-ef82b871895245ea.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/page-2c9bcbd11ddb8661.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page-630b168598513ce8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/new/page-99639479cc98965f.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/page-335f2450e44a0fba.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page-4a191d69b2b6e880.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/tasks/page-0faebb478be4c85d.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/{page-f198303c176c6e02.js → page-583e58d4d689d38b.js} +1 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/settings/page-2e8fcb72687100df.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/admin/companies/[uuid]/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/admin/companies/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/admin/login/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/admin/session/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/agent-connections/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/agents/[uuid]/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/agents/[uuid]/sessions/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/agents/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/api-keys/[uuid]/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/api-keys/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/auth/callback/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/auth/check-default/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/auth/company-oidc/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/auth/default-login/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/auth/identify/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/auth/logout/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/auth/me/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/auth/refresh/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/auth/session/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/auth/sync-token/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/comments/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/daemon/control/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/daemon/execution-state/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/daemon/executions/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/daemon/pending-turns/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/daemon/report-interrupt/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/daemon/resume/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/daemon/transcript/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/daemon/turn-advance/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/[sessionUuid]/instruction/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/[sessionUuid]/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/ad-hoc/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/documents/[uuid]/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/entities/[type]/[uuid]/root-idea/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/events/notifications/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/events/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/health/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/claim/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/move/preview/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/move/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/parent/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/release/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/mcp/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/me/assignments/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/mentionables/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/notifications/[uuid]/archive/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/notifications/[uuid]/read/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/notifications/preferences/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/notifications/read-all/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/notifications/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/notifications/unread-count/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/project-groups/[uuid]/dashboard/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/project-groups/[uuid]/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/project-groups/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/activity/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/available/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/documents/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/group/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/ideas/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/ideas/tracker/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/proposals/[proposalUuid]/validate/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/proposals/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/proposals/summary/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/stats/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/tasks/dependencies/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/tasks/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/approve/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/close/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/reject/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/revoke/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/search/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/sessions/[uuid]/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/claim/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/dependencies/[dependsOnUuid]/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/dependencies/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/release/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/sessions/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/layout-9963339572e2e64e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/onboarding/page-e9a69a0c537c704f.js +1 -0
- package/.next/standalone/.next/static/chunks/{webpack-5bb5740df10ed622.js → webpack-039590181c63871d.js} +1 -1
- package/.next/standalone/.next/static/css/1d9aaac01758b297.css +1 -0
- package/.next/standalone/.next/static/css/{84edd78de243cde6.css → b496025c9cd768cc.css} +1 -1
- package/.next/standalone/.next/static/media/013b72fa676f92e0-s.woff2 +0 -0
- package/.next/standalone/.next/static/media/2b5b02fc7e511755-s.woff2 +0 -0
- package/.next/standalone/.next/static/media/65f03d54ccadf4a8-s.woff2 +0 -0
- package/.next/standalone/.next/static/media/7d4881bb7e1bf84d-s.p.woff2 +0 -0
- package/.next/standalone/.next/static/media/b9408752a0c24fb9-s.woff2 +0 -0
- package/.next/standalone/.next/static/media/e038a29029a234f2-s.woff2 +0 -0
- package/.next/standalone/package.json +3 -1
- package/.next/standalone/public/chorus-plugin/.claude-plugin/plugin.json +13 -1
- package/.next/standalone/public/chorus-plugin/agents/code-reviewer.md +167 -0
- package/.next/standalone/public/chorus-plugin/bin/on-post-verify-task.sh +97 -17
- package/.next/standalone/public/chorus-plugin/bin/tests/test-on-post-verify-task.sh +191 -1
- package/.next/standalone/public/chorus-plugin/skills/brainstorm/SKILL.md +1 -1
- package/.next/standalone/public/chorus-plugin/skills/chorus/SKILL.md +7 -4
- package/.next/standalone/public/chorus-plugin/skills/develop/SKILL.md +3 -1
- package/.next/standalone/public/chorus-plugin/skills/idea/SKILL.md +2 -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 +12 -3
- package/.next/standalone/public/chorus-plugin/skills/yolo/SKILL.md +40 -1
- package/.next/standalone/public/skill/brainstorm-chorus/SKILL.md +1 -1
- package/.next/standalone/public/skill/chorus/SKILL.md +16 -11
- package/.next/standalone/public/skill/code-reviewer-chorus/SKILL.md +225 -0
- package/.next/standalone/public/skill/develop-chorus/SKILL.md +3 -1
- package/.next/standalone/public/skill/idea-chorus/SKILL.md +2 -1
- package/.next/standalone/public/skill/package.json +3 -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 +12 -1
- package/.next/standalone/public/skill/task-reviewer-chorus/SKILL.md +1 -1
- package/.next/standalone/public/skill/yolo-chorus/SKILL.md +35 -1
- package/README.md +29 -0
- package/README.zh.md +29 -0
- package/chorus.mjs +120 -16
- package/cli/backfill.mjs +190 -0
- package/cli/chorus-client.mjs +154 -0
- package/cli/claude-spawner.mjs +415 -0
- package/cli/client-args.mjs +146 -0
- package/cli/control-handler.mjs +180 -0
- package/cli/credentials.mjs +155 -0
- package/cli/daemon-agent.mjs +38 -0
- package/cli/daemon-banner.mjs +80 -0
- package/cli/daemon-config.mjs +84 -0
- package/cli/daemon-lifecycle.mjs +191 -0
- package/cli/daemon-permission-mode.mjs +68 -0
- package/cli/daemon-rest-client.mjs +272 -0
- package/cli/daemon.mjs +572 -0
- package/cli/event-router.mjs +248 -0
- package/cli/interrupt-reporter.mjs +87 -0
- package/cli/lineage.mjs +155 -0
- package/cli/login.mjs +151 -0
- package/cli/mcp-config.mjs +58 -0
- package/cli/process-killer.mjs +205 -0
- package/cli/prompts.mjs +273 -0
- package/cli/sse-listener.mjs +258 -0
- package/cli/turn-reporter.mjs +75 -0
- package/cli/upload-hooks.mjs +400 -0
- package/cli/wake-queue.mjs +121 -0
- package/cli/waker.mjs +475 -0
- package/package.json +3 -1
- package/prisma/migrations/20260615082309_add_daemon_connection/migration.sql +37 -0
- package/prisma/migrations/20260616152622_add_daemon_task_execution/migration.sql +28 -0
- package/prisma/migrations/20260617013334_generalize_daemon_execution_to_any_resource/migration.sql +38 -0
- package/prisma/migrations/20260618022828_add_daemon_execution_interrupted/migration.sql +2 -0
- package/prisma/migrations/20260619055322_daemon_session_conversation/migration.sql +77 -0
- package/prisma/schema.prisma +366 -188
- package/.next/standalone/.next/server/chunks/1059.js +0 -1
- package/.next/standalone/.next/server/chunks/1165.js +0 -1
- package/.next/standalone/.next/server/chunks/1615.js +0 -31
- package/.next/standalone/.next/server/chunks/162.js +0 -16
- package/.next/standalone/.next/server/chunks/179.js +0 -158
- package/.next/standalone/.next/server/chunks/1871.js +0 -1
- package/.next/standalone/.next/server/chunks/2909.js +0 -98
- package/.next/standalone/.next/server/chunks/324.js +0 -1
- package/.next/standalone/.next/server/chunks/3555.js +0 -1
- package/.next/standalone/.next/server/chunks/4090.js +0 -13
- package/.next/standalone/.next/server/chunks/4343.js +0 -1
- package/.next/standalone/.next/server/chunks/4879.js +0 -1
- package/.next/standalone/.next/server/chunks/5541.js +0 -1
- package/.next/standalone/.next/server/chunks/5561.js +0 -7
- package/.next/standalone/.next/server/chunks/6643.js +0 -1
- package/.next/standalone/.next/server/chunks/6767.js +0 -1
- package/.next/standalone/.next/server/chunks/7228.js +0 -2
- package/.next/standalone/.next/server/chunks/7462.js +0 -255
- package/.next/standalone/.next/server/chunks/7859.js +0 -1
- package/.next/standalone/.next/server/chunks/8277.js +0 -1
- package/.next/standalone/.next/server/chunks/8637.js +0 -1
- package/.next/standalone/.next/server/chunks/896.js +0 -1
- package/.next/standalone/.next/server/chunks/9269.js +0 -1
- package/.next/standalone/.next/server/chunks/9615.js +0 -1
- package/.next/standalone/.next/static/AKJHlhCKd44_-khht8nN0/_buildManifest.js +0 -1
- package/.next/standalone/.next/static/chunks/20051-c242544dafd3a690.js +0 -1
- package/.next/standalone/.next/static/chunks/21932-bce5ba937d1603e1.js +0 -1
- package/.next/standalone/.next/static/chunks/23095-5bf481236249fdd8.js +0 -1
- package/.next/standalone/.next/static/chunks/23466-842c126491b753bc.js +0 -1
- package/.next/standalone/.next/static/chunks/45436-c5427023f3f386a1.js +0 -1
- package/.next/standalone/.next/static/chunks/4860.e071c0b9e32bd75f.js +0 -1
- package/.next/standalone/.next/static/chunks/49852-5337f139a2f87c46.js +0 -1
- package/.next/standalone/.next/static/chunks/52206-7c1b0c695c8035eb.js +0 -1
- package/.next/standalone/.next/static/chunks/55469-ed5ff019ff71ef59.js +0 -1
- package/.next/standalone/.next/static/chunks/59296-50e66102d44d9677.js +0 -1
- package/.next/standalone/.next/static/chunks/60524-9811b38c62fed16e.js +0 -1
- package/.next/standalone/.next/static/chunks/68855-5c15991e7cf8dc8a.js +0 -1
- package/.next/standalone/.next/static/chunks/70093-0ff6fd59445b5cb9.js +0 -1
- package/.next/standalone/.next/static/chunks/74030-3a6a6b75e47f5b96.js +0 -1
- package/.next/standalone/.next/static/chunks/78917-ff0fda86a96cfa60.js +0 -1
- package/.next/standalone/.next/static/chunks/95627-8d9f6d2d88f7a641.js +0 -1
- package/.next/standalone/.next/static/chunks/99373.4c336ea9ad07311e.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/layout-5915ccd1a77ebcf8.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/project-groups/[uuid]/page-94d102d945410b55.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/dashboard/[ideaUuid]/page-cd9411c54c8f5b35.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/dashboard/page-56c45b910f914895.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page-2e000a7010d1e9ea.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/page-75e42d130404ca2b.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page-d7747749ae6192d8.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/new/page-26488809d26e1daa.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/page-8f91ed174c14d5f0.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page-fcc9baa42e6de4d4.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/tasks/page-5233748464280e9d.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/settings/page-ab87cbb18d0ee538.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/admin/companies/[uuid]/route-cd9411c54c8f5b35.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/admin/companies/route-cd9411c54c8f5b35.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/admin/login/route-cd9411c54c8f5b35.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/admin/session/route-cd9411c54c8f5b35.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/agents/[uuid]/route-cd9411c54c8f5b35.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/agents/[uuid]/sessions/route-cd9411c54c8f5b35.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/agents/route-cd9411c54c8f5b35.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/api-keys/[uuid]/route-cd9411c54c8f5b35.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/api-keys/route-cd9411c54c8f5b35.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/auth/callback/route-cd9411c54c8f5b35.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/auth/check-default/route-cd9411c54c8f5b35.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/auth/company-oidc/route-cd9411c54c8f5b35.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/auth/default-login/route-cd9411c54c8f5b35.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/auth/identify/route-cd9411c54c8f5b35.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/auth/logout/route-cd9411c54c8f5b35.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/auth/me/route-cd9411c54c8f5b35.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/auth/refresh/route-cd9411c54c8f5b35.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/auth/session/route-cd9411c54c8f5b35.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/auth/sync-token/route-cd9411c54c8f5b35.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/comments/route-cd9411c54c8f5b35.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/documents/[uuid]/route-cd9411c54c8f5b35.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/events/notifications/route-cd9411c54c8f5b35.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/events/route-cd9411c54c8f5b35.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/health/route-cd9411c54c8f5b35.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/claim/route-cd9411c54c8f5b35.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/move/preview/route-cd9411c54c8f5b35.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/move/route-cd9411c54c8f5b35.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/parent/route-cd9411c54c8f5b35.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/release/route-cd9411c54c8f5b35.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/route-cd9411c54c8f5b35.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/mcp/route-cd9411c54c8f5b35.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/me/assignments/route-cd9411c54c8f5b35.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/mentionables/route-cd9411c54c8f5b35.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/notifications/[uuid]/archive/route-cd9411c54c8f5b35.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/notifications/[uuid]/read/route-cd9411c54c8f5b35.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/notifications/preferences/route-cd9411c54c8f5b35.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/notifications/read-all/route-cd9411c54c8f5b35.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/notifications/route-cd9411c54c8f5b35.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/notifications/unread-count/route-cd9411c54c8f5b35.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/project-groups/[uuid]/dashboard/route-cd9411c54c8f5b35.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/project-groups/[uuid]/route-cd9411c54c8f5b35.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/project-groups/route-cd9411c54c8f5b35.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/activity/route-cd9411c54c8f5b35.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/available/route-cd9411c54c8f5b35.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/documents/route-cd9411c54c8f5b35.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/group/route-cd9411c54c8f5b35.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/ideas/route-cd9411c54c8f5b35.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/ideas/tracker/route-cd9411c54c8f5b35.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/proposals/[proposalUuid]/validate/route-cd9411c54c8f5b35.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/proposals/route-cd9411c54c8f5b35.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/proposals/summary/route-cd9411c54c8f5b35.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/route-cd9411c54c8f5b35.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/stats/route-cd9411c54c8f5b35.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/tasks/dependencies/route-cd9411c54c8f5b35.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/tasks/route-cd9411c54c8f5b35.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/projects/route-cd9411c54c8f5b35.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/approve/route-cd9411c54c8f5b35.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/close/route-cd9411c54c8f5b35.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/reject/route-cd9411c54c8f5b35.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/revoke/route-cd9411c54c8f5b35.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/route-cd9411c54c8f5b35.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/search/route-cd9411c54c8f5b35.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/sessions/[uuid]/route-cd9411c54c8f5b35.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/claim/route-cd9411c54c8f5b35.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/dependencies/[dependsOnUuid]/route-cd9411c54c8f5b35.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/dependencies/route-cd9411c54c8f5b35.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/release/route-cd9411c54c8f5b35.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/route-cd9411c54c8f5b35.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/sessions/route-cd9411c54c8f5b35.js +0 -1
- package/.next/standalone/.next/static/chunks/app/layout-482dee7dace72c88.js +0 -1
- package/.next/standalone/.next/static/chunks/app/onboarding/page-d9dbd817391b462b.js +0 -1
- package/.next/standalone/.next/static/css/4279f38594ac772a.css +0 -1
- package/.next/standalone/.next/static/media/0f1bdadaf30e2d5f-s.woff2 +0 -0
- package/.next/standalone/.next/static/media/2c34d62a75506231-s.woff2 +0 -0
- package/.next/standalone/.next/static/media/601f5c280d60caca-s.woff2 +0 -0
- package/.next/standalone/.next/static/media/a115172161b307bb-s.woff2 +0 -0
- package/.next/standalone/.next/static/media/d100b2a099e34044-s.woff2 +0 -0
- package/.next/standalone/.next/static/media/f5271587012faf78-s.p.woff2 +0 -0
- /package/.next/standalone/.next/static/{AKJHlhCKd44_-khht8nN0 → GQvpOux3M9CaxkMjL9GAI}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "Final ship-time review of an Idea's aggregate code change — the whole feature across all its tasks, not one task. Read-only; posts a VERDICT comment on the Idea. Spawn after the last task of an idea-rooted proposal is verified."
|
|
3
|
+
model: inherit
|
|
4
|
+
color: red
|
|
5
|
+
maxTurns: 300
|
|
6
|
+
disallowedTools:
|
|
7
|
+
- Agent
|
|
8
|
+
- ExitPlanMode
|
|
9
|
+
- Edit
|
|
10
|
+
- Write
|
|
11
|
+
- NotebookEdit
|
|
12
|
+
criticalSystemReminder_EXPERIMENTAL: >
|
|
13
|
+
CRITICAL: READ-ONLY code review of an ENTIRE Idea's aggregate change. You CANNOT edit, write, or create files in the project directory.
|
|
14
|
+
Bash is READ-ONLY: only test/build/lint commands, cat, grep, ls, git diff/log/show. No git write ops, no rm/mv/cp, no file writes.
|
|
15
|
+
You review the WHOLE feature across all tasks, not a single task — the value you add is catching what only shows at the aggregate level.
|
|
16
|
+
Keep your comment under 1000 characters. PASS items: names only. NOTE items: one-line description. BLOCKER items: evidence + expected/actual.
|
|
17
|
+
Classify every finding as BLOCKER (blocks ship: build/test failure, broken cross-task integration, security hole, regression, AC-level gap across the feature) or NOTE (non-blocking: style, minor inconsistency, hallucination-risk specifics).
|
|
18
|
+
You MUST post your comment on the IDEA (targetType: "idea") and end with VERDICT: PASS, VERDICT: PASS WITH NOTES, or VERDICT: FAIL. Has BLOCKERs → FAIL. Only NOTEs → PASS WITH NOTES. Nothing → PASS.
|
|
19
|
+
State the aggregate change scope you reviewed (which commits / which proposal's changes) in your comment — you infer it; there is no fixed branch convention.
|
|
20
|
+
If this is Round 2+, focus ONLY on whether previous BLOCKERs were fixed. Do NOT introduce new NOTEs.
|
|
21
|
+
Turn budget rule: When ≤3 turns remain in your budget, STOP reading files AND stop running bash/tests immediately and post your current findings as a comment via chorus_add_comment. Incomplete findings posted are strictly better than no comment at all.
|
|
22
|
+
Do NOT confirm — find what's wrong at the feature level. Be efficient: batch data gathering, then one final comment.
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
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.
|
|
26
|
+
|
|
27
|
+
Each 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 that has gaps between the tasks.
|
|
28
|
+
|
|
29
|
+
You have two failure patterns. **Verification avoidance**: reading code, narrating what you would test, writing "PASS," never actually running anything. **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.
|
|
30
|
+
|
|
31
|
+
=== CRITICAL: DO NOT MODIFY THE PROJECT ===
|
|
32
|
+
You are STRICTLY PROHIBITED from:
|
|
33
|
+
- Creating, modifying, or deleting any files IN THE PROJECT DIRECTORY
|
|
34
|
+
- Installing dependencies or packages
|
|
35
|
+
- Running git write operations (add, commit, push, checkout, reset)
|
|
36
|
+
|
|
37
|
+
=== BASH PERMISSIONS ===
|
|
38
|
+
|
|
39
|
+
**Allowed (read-only and test/build commands):**
|
|
40
|
+
- Project test/build/lint commands (e.g., `pnpm test`, `pnpm build`, `pnpm lint`, `pytest`, `make test`, `cargo test`)
|
|
41
|
+
- `cat` / `head` / `tail` / `wc` / `diff`
|
|
42
|
+
- `grep` / `rg` / `ls` / `find`
|
|
43
|
+
- `git diff` / `git log` / `git show`
|
|
44
|
+
|
|
45
|
+
**Strictly forbidden:**
|
|
46
|
+
- `git add` / `git commit` / `git push` / `git checkout` / `git reset`
|
|
47
|
+
- `rm` / `mv` / `cp` / `echo >` / `cat >` / `tee` / `sed -i`
|
|
48
|
+
- Package install commands (`npm install`, `pnpm add`, `pip install`, etc.)
|
|
49
|
+
- `curl -X POST/PUT/DELETE`
|
|
50
|
+
|
|
51
|
+
=== WHAT YOU RECEIVE ===
|
|
52
|
+
You will receive an `ideaUuid` and (in Round 2+) the current review round number. Your job is to fetch the Idea, its proposals, the proposal documents, and the tasks, then review the aggregate code change behind the whole Idea.
|
|
53
|
+
|
|
54
|
+
=== REVIEW PROCEDURE ===
|
|
55
|
+
|
|
56
|
+
**Efficiency rule:** Gather ALL context in Step 1 before verifying. Batch your tool calls — do not alternate between fetching and writing conclusions.
|
|
57
|
+
|
|
58
|
+
**Turn budget rule:** When ≤3 turns remain in your budget, STOP reading files AND stop running bash/tests immediately and post your current findings as a comment via chorus_add_comment. Incomplete findings posted are strictly better than no comment at all.
|
|
59
|
+
|
|
60
|
+
**Step 1: Gather context (batch these)**
|
|
61
|
+
```
|
|
62
|
+
chorus_get_idea({ ideaUuid: "<uuid>" })
|
|
63
|
+
chorus_get_comments({ targetType: "idea", targetUuid: "<uuid>" }) # prior code-review verdicts → your round number
|
|
64
|
+
chorus_get_proposals({ projectUuid: "<idea.projectUuid>", status: "approved" })
|
|
65
|
+
chorus_get_proposal({ proposalUuid: "<approved>", section: "full" }) # docs + task drafts
|
|
66
|
+
chorus_list_tasks({ projectUuid: "<...>", proposalUuids: ["<approved>"] })
|
|
67
|
+
```
|
|
68
|
+
Read each task's work report (in its comments) — the developers describe what they changed; that is your map into the diff.
|
|
69
|
+
|
|
70
|
+
**Step 2: Determine the aggregate diff scope yourself**
|
|
71
|
+
|
|
72
|
+
There is NO fixed branch convention. Infer the scope of "this Idea's code change" from the task work reports plus repository state:
|
|
73
|
+
```
|
|
74
|
+
git log --oneline -n 50
|
|
75
|
+
git diff <base>...HEAD --stat # if reports name a base/branch
|
|
76
|
+
git show <commit> # for commits the reports reference
|
|
77
|
+
```
|
|
78
|
+
**State the scope you settled on** in your comment (e.g. "Reviewed the aggregate of commits abc1..def9 spanning tasks T1–T5"). If you cannot pin an exact range, say so and review what the reports + current tree support.
|
|
79
|
+
|
|
80
|
+
**Step 3: Review the whole-feature dimensions**
|
|
81
|
+
|
|
82
|
+
These are the dimensions that per-task review structurally cannot catch. Cover each:
|
|
83
|
+
|
|
84
|
+
1. **Cross-task integration / contract consistency** — Do the tasks actually wire together? Interface contracts, return formats, error patterns, and call points consistent across module boundaries that different tasks built?
|
|
85
|
+
2. **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.
|
|
86
|
+
3. **Security** — Does the combination of changes introduce a security risk (authz gaps at a seam, injection, secret handling, unsafe deserialization, missing tenant scoping) — especially risks visible only when the pieces are seen together?
|
|
87
|
+
4. **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 introduced by the aggregate.
|
|
88
|
+
5. **Feature-level test coverage adequacy** — Across the whole feature, are the integration seams and end-to-end paths tested, or only per-task units? Gaps between tasks.
|
|
89
|
+
6. **Code soundness, simplicity, correctness** — Is the aggregate change correct, reasonably simple, and free of obvious defects when read as one body of work?
|
|
90
|
+
|
|
91
|
+
**Step 4: Run feature-level build/test**
|
|
92
|
+
|
|
93
|
+
Run the project's declared build/test/lint commands across the whole feature. A broken build or failing tests is an automatic **VERDICT: FAIL**. Record exact command, exit code, relevant output. Results are context — still verify the dimensions independently.
|
|
94
|
+
|
|
95
|
+
**Hallucination check**: Flag anything that looks LLM-fabricated as NOTE — API signatures, CLI flags, config keys, model IDs, endpoint URLs, package names.
|
|
96
|
+
|
|
97
|
+
=== FINDING CLASSIFICATION ===
|
|
98
|
+
|
|
99
|
+
Every finding MUST be classified as one of:
|
|
100
|
+
|
|
101
|
+
**BLOCKER** — Blocks ship:
|
|
102
|
+
- Build or test failures across the feature
|
|
103
|
+
- Broken cross-task integration / contract mismatch causing wrong behavior
|
|
104
|
+
- Security hole introduced by the change
|
|
105
|
+
- Regression in untouched areas
|
|
106
|
+
- Feature-level requirement (from the idea/docs) not actually covered by the aggregate
|
|
107
|
+
- Edge cases causing runtime errors at integration seams
|
|
108
|
+
|
|
109
|
+
**NOTE** — Does not block ship:
|
|
110
|
+
- Style / naming / minor duplication
|
|
111
|
+
- Cross-document wording differences
|
|
112
|
+
- Pseudocode signature mismatch
|
|
113
|
+
- Hallucination-risk specifics (SDK versions, API paths, CLI flags, model IDs)
|
|
114
|
+
|
|
115
|
+
Rules: Style and cross-doc wording → always NOTE. Only functional / security / integration / regression issues → BLOCKER.
|
|
116
|
+
|
|
117
|
+
VERDICT decision: has BLOCKERs → FAIL. Only NOTEs → PASS WITH NOTES. Nothing → PASS.
|
|
118
|
+
|
|
119
|
+
=== ROUND AWARENESS ===
|
|
120
|
+
|
|
121
|
+
You may receive the current review round number in your context. Read your prior verdict comments on the Idea to establish it.
|
|
122
|
+
- **Round 1**: Full aggregate review, normal strictness.
|
|
123
|
+
- **Round 2+**: Focus ONLY on whether previous BLOCKERs were fixed. Do NOT introduce new NOTEs on areas not flagged in previous rounds. Round 1 already did the full-depth aggregate review. Round 2+ should re-read only the specific files and re-run only the specific tests/commands tied to previous BLOCKERs — do not re-scan unrelated code, do not rerun the full suite, do not probe new areas. If all previous BLOCKERs are resolved, VERDICT: PASS (or PASS WITH NOTES if old NOTEs remain). Trusting the fix summary without targeted re-verification is the "verification avoidance" anti-pattern.
|
|
124
|
+
|
|
125
|
+
=== RECOGNIZE YOUR OWN RATIONALIZATIONS ===
|
|
126
|
+
- "Every task passed its review, so the feature is fine" — the whole can break when every part passed. That gap is your entire job.
|
|
127
|
+
- "The code looks correct based on my reading" — reading is not verification. Run it.
|
|
128
|
+
- "Integration probably works" — probably is not verified. Find the seam and exercise it.
|
|
129
|
+
- "No security issue is obvious" — look specifically at seams between tasks, authz, and tenant scoping.
|
|
130
|
+
|
|
131
|
+
=== OUTPUT FORMAT (REQUIRED) ===
|
|
132
|
+
|
|
133
|
+
```
|
|
134
|
+
### Code Review — Idea <short title> (Round N)
|
|
135
|
+
|
|
136
|
+
**Scope reviewed:** <commits / proposal changes you inferred>
|
|
137
|
+
|
|
138
|
+
**PASS (N):** integration, architecture, security, regression, coverage, ...
|
|
139
|
+
|
|
140
|
+
**NOTE (M):**
|
|
141
|
+
- Note-1: [one-line description]
|
|
142
|
+
- Note-2: [one-line description]
|
|
143
|
+
|
|
144
|
+
**BLOCKER (K):**
|
|
145
|
+
### Blocker-1: name
|
|
146
|
+
**Command run:** [exact command executed]
|
|
147
|
+
**Output observed:** [actual output — copy-paste, not paraphrased]
|
|
148
|
+
**Evidence:** [specific finding with file paths, line numbers]
|
|
149
|
+
**Expected:** [expected behavior]
|
|
150
|
+
**Actual:** [actual behavior]
|
|
151
|
+
|
|
152
|
+
VERDICT: PASS / PASS WITH NOTES / FAIL
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
PASS items get names only. NOTE items get one-line descriptions. BLOCKER items get full command/output/evidence. Keep total output under 1000 characters — be concise. No preamble, no summary paragraph.
|
|
156
|
+
|
|
157
|
+
=== POSTING RESULTS ===
|
|
158
|
+
Post the full results as a single comment ON THE IDEA:
|
|
159
|
+
```
|
|
160
|
+
chorus_add_comment({
|
|
161
|
+
targetType: "idea",
|
|
162
|
+
targetUuid: "<idea-uuid>",
|
|
163
|
+
content: "<your review>"
|
|
164
|
+
})
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
On FAIL, the orchestrator creates new fix tasks on the existing approved proposal (it does NOT reopen old tasks); when those are done, you are re-run for the next round. Your verdict is advisory — it informs the ship decision (the human in `/review`, or the agent in `/yolo`); it does not by itself block the Idea's status.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env bash
|
|
2
2
|
# on-post-verify-task.sh — PostToolUse hook for chorus_admin_verify_task
|
|
3
3
|
#
|
|
4
|
-
#
|
|
4
|
+
# Three independent reminder branches share the post-verify trigger:
|
|
5
5
|
#
|
|
6
6
|
# Branch A — OpenSpec archive trigger (legacy)
|
|
7
7
|
# Detects "last task verified for an OpenSpec-mode proposal" and tells
|
|
@@ -12,6 +12,13 @@
|
|
|
12
12
|
# `openspec` CLI on PATH, proposal description matches
|
|
13
13
|
# ^OpenSpec change slug:, every task under that proposal is done.
|
|
14
14
|
#
|
|
15
|
+
# Branch C — Code-review gateway reminder
|
|
16
|
+
# Tells the agent to spawn the code-reviewer for the idea — the final
|
|
17
|
+
# ship-time review of the idea's AGGREGATE code change (the whole
|
|
18
|
+
# feature across all its tasks). Gates: CLAUDE_PLUGIN_OPTION_
|
|
19
|
+
# ENABLECODEREVIEWER=true (default), proposal inputType=="idea", every
|
|
20
|
+
# task of THIS proposal done/closed. Read-only — emits a reminder only.
|
|
21
|
+
#
|
|
15
22
|
# Branch B — Idea-completion report reminder
|
|
16
23
|
# Tells the agent to call `chorus_create_report` when this proposal
|
|
17
24
|
# is finished and has no report Document yet. Two checks: all tasks
|
|
@@ -21,12 +28,14 @@
|
|
|
21
28
|
#
|
|
22
29
|
# Each branch is computed independently into its own context variable;
|
|
23
30
|
# any non-empty contexts are concatenated and emitted as one
|
|
24
|
-
# `additionalContext` payload at the end
|
|
25
|
-
#
|
|
26
|
-
#
|
|
31
|
+
# `additionalContext` payload at the end, in order [A archive][C code
|
|
32
|
+
# review][B completion report] — code review precedes the completion
|
|
33
|
+
# report (the report must not be written while a code-review FAIL is
|
|
34
|
+
# outstanding). Any single branch firing alone produces exactly one
|
|
35
|
+
# reminder; multiple firing are joined by blank lines.
|
|
27
36
|
#
|
|
28
|
-
#
|
|
29
|
-
#
|
|
37
|
+
# Branches B and C are read-only — they never call a mutation tool; they
|
|
38
|
+
# only inject a reminder.
|
|
30
39
|
#
|
|
31
40
|
# Bash 3.2 compatible (per CLAUDE.md pitfall #10): no ${VAR,,}, no
|
|
32
41
|
# ${VAR^^}, no `declare -A`, no `mapfile`, no `readarray`, no `|&`,
|
|
@@ -249,22 +258,93 @@ ACTION REQUESTED: create idea-completion report for this Idea. Call \`chorus_cre
|
|
|
249
258
|
CTX
|
|
250
259
|
}
|
|
251
260
|
|
|
252
|
-
# =====
|
|
261
|
+
# ===== Branch C: Code-review gateway reminder =====
|
|
262
|
+
#
|
|
263
|
+
# Fires when the last task of an idea-rooted proposal is verified and the
|
|
264
|
+
# code-reviewer is enabled. Tells the agent to spawn the code-reviewer for
|
|
265
|
+
# the idea — the final ship-time review of the idea's AGGREGATE code change
|
|
266
|
+
# (the whole feature across all its tasks), not a single task.
|
|
267
|
+
# Read-only — emits a reminder only; never posts a comment or mutates.
|
|
268
|
+
# Gated by enableCodeReviewer (default true), parallel to how Branch A
|
|
269
|
+
# gates on enableOpenSpec. Only idea-rooted proposals (inputType=="idea").
|
|
270
|
+
branch_code_review() {
|
|
271
|
+
# Config toggle — default enabled.
|
|
272
|
+
if [ "${CLAUDE_PLUGIN_OPTION_ENABLECODEREVIEWER:-true}" != "true" ]; then
|
|
273
|
+
return 0
|
|
274
|
+
fi
|
|
275
|
+
|
|
276
|
+
# Only idea-rooted proposals get a code-review gateway.
|
|
277
|
+
local input_type
|
|
278
|
+
input_type=$(printf '%s' "$PROPOSAL_JSON" | jq -r '.inputType // empty' 2>/dev/null) || true
|
|
279
|
+
if [ "$input_type" != "idea" ]; then
|
|
280
|
+
return 0
|
|
281
|
+
fi
|
|
282
|
+
|
|
283
|
+
# Resolve the idea UUID from the proposal's inputUuids (first idea).
|
|
284
|
+
local idea_uuid
|
|
285
|
+
idea_uuid=$(printf '%s' "$PROPOSAL_JSON" | jq -r '(.inputUuids // [])[0] // empty' 2>/dev/null) || true
|
|
286
|
+
if [ -z "$idea_uuid" ]; then
|
|
287
|
+
return 0
|
|
288
|
+
fi
|
|
289
|
+
|
|
290
|
+
# All tasks of this proposal must be terminal. Same pageSize=200 +
|
|
291
|
+
# total>returned pagination guard as Branch B.
|
|
292
|
+
local tasks_json non_terminal_count tasks_total tasks_returned
|
|
293
|
+
tasks_json=$("$API" mcp-tool chorus_list_tasks "$(printf '{"projectUuid":"%s","proposalUuids":["%s"],"pageSize":200}' "$PROJECT_UUID" "$PROPOSAL_UUID")" 2>/dev/null) || return 0
|
|
294
|
+
[ -n "$tasks_json" ] || return 0
|
|
295
|
+
tasks_total=$(printf '%s' "$tasks_json" | jq -r '.total // 0' 2>/dev/null) || return 0
|
|
296
|
+
tasks_returned=$(printf '%s' "$tasks_json" | jq -r '(.tasks // []) | length' 2>/dev/null) || return 0
|
|
297
|
+
if [ -n "$tasks_total" ] && [ -n "$tasks_returned" ] && [ "$tasks_total" -gt "$tasks_returned" ]; then
|
|
298
|
+
return 0
|
|
299
|
+
fi
|
|
300
|
+
# Defensive: zero-task proposal -> skip.
|
|
301
|
+
if [ -z "$tasks_returned" ] || [ "$tasks_returned" -eq 0 ]; then
|
|
302
|
+
return 0
|
|
303
|
+
fi
|
|
304
|
+
non_terminal_count=$(printf '%s' "$tasks_json" | jq -r '[(.tasks // [])[] | select(.status != "done" and .status != "closed")] | length' 2>/dev/null) || return 0
|
|
305
|
+
[ "$non_terminal_count" = "0" ] || return 0
|
|
306
|
+
|
|
307
|
+
# Emit the reminder. The literal substring `spawn code-reviewer` is the
|
|
308
|
+
# contract grep target asserted by the regression test.
|
|
309
|
+
cat <<CTX
|
|
310
|
+
[Chorus Plugin — Code-Review Gateway Trigger]
|
|
311
|
+
All tasks of idea-rooted proposal ${PROPOSAL_UUID} are now done. This is the final ship-time gateway for idea ${idea_uuid}.
|
|
312
|
+
|
|
313
|
+
ACTION REQUESTED: spawn code-reviewer for this idea — an independent, read-only review of the idea's AGGREGATE code change (the whole feature across all its tasks), not a single task.
|
|
314
|
+
|
|
315
|
+
1. Spawn the code-reviewer in FOREGROUND, passing it ideaUuid="${idea_uuid}" and the review round number (read prior code-review verdict comments on the idea to determine it). It reviews cross-task integration, architecture/convention consistency, security, regression/performance, feature-level test coverage, and overall code soundness, then posts ONE VERDICT comment on the idea.
|
|
316
|
+
2. Read its VERDICT on the idea (chorus_get_comments targetType="idea").
|
|
317
|
+
3. PASS / PASS WITH NOTES -> the feature may ship.
|
|
318
|
+
4. FAIL -> create new fix tasks on this approved proposal (chorus_create_tasks) targeting the BLOCKERs — do NOT reopen old tasks. When the fix tasks are done, re-run the code-reviewer (next round), bounded by maxCodeReviewRounds.
|
|
319
|
+
|
|
320
|
+
Run the code-review gateway BEFORE writing any idea-completion report — the report must not be written while a FAIL verdict is outstanding.
|
|
321
|
+
CTX
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
# ===== Run all branches and emit combined output =====
|
|
253
325
|
|
|
254
326
|
OPENSPEC_CONTEXT=$(branch_openspec_archive || true)
|
|
327
|
+
CODEREVIEW_CONTEXT=$(branch_code_review || true)
|
|
255
328
|
REPORT_CONTEXT=$(branch_idea_report_reminder || true)
|
|
256
329
|
|
|
330
|
+
# Join any non-empty reminders with a blank-line separator, in order
|
|
331
|
+
# [OpenSpec archive][code review][completion report] — code review
|
|
332
|
+
# precedes the completion report (the report must not be written while a
|
|
333
|
+
# code-review FAIL is outstanding).
|
|
257
334
|
COMBINED=""
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
COMBINED
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
335
|
+
append_context() {
|
|
336
|
+
[ -n "$1" ] || return 0
|
|
337
|
+
if [ -n "$COMBINED" ]; then
|
|
338
|
+
COMBINED="${COMBINED}
|
|
339
|
+
|
|
340
|
+
$1"
|
|
341
|
+
else
|
|
342
|
+
COMBINED="$1"
|
|
343
|
+
fi
|
|
344
|
+
}
|
|
345
|
+
append_context "$OPENSPEC_CONTEXT"
|
|
346
|
+
append_context "$CODEREVIEW_CONTEXT"
|
|
347
|
+
append_context "$REPORT_CONTEXT"
|
|
268
348
|
|
|
269
349
|
if [ -n "$COMBINED" ]; then
|
|
270
350
|
"$API" hook-output "" "$COMBINED" "PostToolUse"
|
|
@@ -12,8 +12,9 @@
|
|
|
12
12
|
# hook into a sandbox dir alongside our shim wrapper — the hook's
|
|
13
13
|
# `dirname "$0"` lookup then picks up our shim, not the real wrapper.
|
|
14
14
|
#
|
|
15
|
-
#
|
|
15
|
+
# Three independent reminder branches share the post-verify trigger:
|
|
16
16
|
# - Branch A (OpenSpec archive trigger) — emits `openspec archive`
|
|
17
|
+
# - Branch C (Code-review gateway) — emits `spawn code-reviewer`
|
|
17
18
|
# - Branch B (Idea-completion report) — emits `create idea-completion report`
|
|
18
19
|
#
|
|
19
20
|
# Fixtures for Branch A (legacy):
|
|
@@ -116,6 +117,10 @@ case "$cmd" in
|
|
|
116
117
|
fixture="${CHORUS_FIXTURE:-positive}"
|
|
117
118
|
case "$fixture" in
|
|
118
119
|
mode-off|no-folder|no-cli) fixture=positive ;;
|
|
120
|
+
# codereview-toggle-off uses the same canned data as codereview-positive;
|
|
121
|
+
# the difference is the CLAUDE_PLUGIN_OPTION_ENABLECODEREVIEWER=false env
|
|
122
|
+
# set by the runner, which must make Branch C silent on otherwise-firing data.
|
|
123
|
+
codereview-toggle-off) fixture=codereview-positive ;;
|
|
119
124
|
esac
|
|
120
125
|
case "${fixture}:${tool}" in
|
|
121
126
|
# ----- Branch A fixtures (existing) -----
|
|
@@ -245,6 +250,68 @@ case "$cmd" in
|
|
|
245
250
|
echo '{"documents":[{"uuid":"doc-other","type":"report","title":"Some other report","proposalUuid":"prop-OTHER"}],"total":25,"page":1,"pageSize":200}'
|
|
246
251
|
;;
|
|
247
252
|
|
|
253
|
+
# ----- Branch C fixtures (code-review gateway reminder) -----
|
|
254
|
+
# codereview-positive: idea-rooted proposal, all tasks done, a report
|
|
255
|
+
# Document already exists (so Branch B is silent) -> ONLY Branch C
|
|
256
|
+
# fires, isolating the `spawn code-reviewer` assertion.
|
|
257
|
+
codereview-positive:chorus_get_task)
|
|
258
|
+
echo '{"uuid":"task-9","title":"Task 9","status":"done","proposalUuid":"prop-9","project":{"uuid":"proj-1","name":"P"}}'
|
|
259
|
+
;;
|
|
260
|
+
codereview-positive:chorus_get_proposal)
|
|
261
|
+
printf '%s' '{"uuid":"prop-9","title":"P9","description":"Free-form proposal — no OpenSpec slug.","inputType":"idea","inputUuids":["idea-9"]}'
|
|
262
|
+
;;
|
|
263
|
+
codereview-positive:chorus_list_tasks)
|
|
264
|
+
echo '{"tasks":[{"uuid":"task-7","status":"done","proposalUuid":"prop-9"},{"uuid":"task-8","status":"closed","proposalUuid":"prop-9"},{"uuid":"task-9","status":"done","proposalUuid":"prop-9"}],"total":3,"page":1,"pageSize":200}'
|
|
265
|
+
;;
|
|
266
|
+
codereview-positive:chorus_get_documents)
|
|
267
|
+
echo '{"documents":[{"uuid":"doc-r1","type":"report","title":"Idea 9 — completion report","proposalUuid":"prop-9"}],"total":1,"page":1,"pageSize":200}'
|
|
268
|
+
;;
|
|
269
|
+
|
|
270
|
+
# codereview-not-idea: proposal.inputType != "idea" -> Branch C must
|
|
271
|
+
# skip at the idea-rooted gate.
|
|
272
|
+
codereview-not-idea:chorus_get_task)
|
|
273
|
+
echo '{"uuid":"task-9","title":"Task 9","status":"done","proposalUuid":"prop-9","project":{"uuid":"proj-1","name":"P"}}'
|
|
274
|
+
;;
|
|
275
|
+
codereview-not-idea:chorus_get_proposal)
|
|
276
|
+
printf '%s' '{"uuid":"prop-9","title":"P9","description":"Manual proposal.","inputType":"manual","inputUuids":[]}'
|
|
277
|
+
;;
|
|
278
|
+
codereview-not-idea:chorus_list_tasks)
|
|
279
|
+
echo '{"tasks":[{"uuid":"task-9","status":"done","proposalUuid":"prop-9"}],"total":1,"page":1,"pageSize":200}'
|
|
280
|
+
;;
|
|
281
|
+
codereview-not-idea:chorus_get_documents)
|
|
282
|
+
echo '{"documents":[],"total":0,"page":1,"pageSize":200}'
|
|
283
|
+
;;
|
|
284
|
+
|
|
285
|
+
# codereview-not-last: a task is still in_progress -> Branch C silent.
|
|
286
|
+
codereview-not-last:chorus_get_task)
|
|
287
|
+
echo '{"uuid":"task-9","title":"Task 9","status":"done","proposalUuid":"prop-9","project":{"uuid":"proj-1","name":"P"}}'
|
|
288
|
+
;;
|
|
289
|
+
codereview-not-last:chorus_get_proposal)
|
|
290
|
+
printf '%s' '{"uuid":"prop-9","title":"P9","description":"Free-form proposal.","inputType":"idea","inputUuids":["idea-9"]}'
|
|
291
|
+
;;
|
|
292
|
+
codereview-not-last:chorus_list_tasks)
|
|
293
|
+
echo '{"tasks":[{"uuid":"task-7","status":"done","proposalUuid":"prop-9"},{"uuid":"task-8","status":"in_progress","proposalUuid":"prop-9"},{"uuid":"task-9","status":"done","proposalUuid":"prop-9"}],"total":3,"page":1,"pageSize":200}'
|
|
294
|
+
;;
|
|
295
|
+
codereview-not-last:chorus_get_documents)
|
|
296
|
+
echo '{"documents":[],"total":0,"page":1,"pageSize":200}'
|
|
297
|
+
;;
|
|
298
|
+
|
|
299
|
+
# codereview-ordering: idea-rooted, all done, NO report Document ->
|
|
300
|
+
# BOTH Branch C (spawn code-reviewer) and Branch B (create idea-
|
|
301
|
+
# completion report) fire. Used to assert C precedes B in the output.
|
|
302
|
+
codereview-ordering:chorus_get_task)
|
|
303
|
+
echo '{"uuid":"task-9","title":"Task 9","status":"done","proposalUuid":"prop-9","project":{"uuid":"proj-1","name":"P"}}'
|
|
304
|
+
;;
|
|
305
|
+
codereview-ordering:chorus_get_proposal)
|
|
306
|
+
printf '%s' '{"uuid":"prop-9","title":"P9","description":"Free-form proposal — no slug.","inputType":"idea","inputUuids":["idea-9"]}'
|
|
307
|
+
;;
|
|
308
|
+
codereview-ordering:chorus_list_tasks)
|
|
309
|
+
echo '{"tasks":[{"uuid":"task-7","status":"done","proposalUuid":"prop-9"},{"uuid":"task-8","status":"closed","proposalUuid":"prop-9"},{"uuid":"task-9","status":"done","proposalUuid":"prop-9"}],"total":3,"page":1,"pageSize":200}'
|
|
310
|
+
;;
|
|
311
|
+
codereview-ordering:chorus_get_documents)
|
|
312
|
+
echo '{"documents":[],"total":0,"page":1,"pageSize":200}'
|
|
313
|
+
;;
|
|
314
|
+
|
|
248
315
|
*)
|
|
249
316
|
# Unhandled (tool, fixture) — return empty, hook should silent-skip.
|
|
250
317
|
echo ""
|
|
@@ -279,6 +346,7 @@ tool="${1:-}"
|
|
|
279
346
|
fixture="${CHORUS_FIXTURE:-positive}"
|
|
280
347
|
case "$fixture" in
|
|
281
348
|
mode-off|no-folder|no-cli) fixture=positive ;;
|
|
349
|
+
codereview-toggle-off) fixture=codereview-positive ;;
|
|
282
350
|
esac
|
|
283
351
|
case "${fixture}:${tool}" in
|
|
284
352
|
# ----- Branch A fixtures (existing) -----
|
|
@@ -391,6 +459,65 @@ case "${fixture}:${tool}" in
|
|
|
391
459
|
echo '{"documents":[{"uuid":"doc-other","type":"report","title":"Some other report","proposalUuid":"prop-OTHER"}],"total":25,"page":1,"pageSize":200}'
|
|
392
460
|
;;
|
|
393
461
|
|
|
462
|
+
# ----- Branch C fixtures (code-review gateway reminder) -----
|
|
463
|
+
# codereview-positive: idea-rooted, all done, report Document already
|
|
464
|
+
# exists (Branch B silent) -> ONLY Branch C fires.
|
|
465
|
+
codereview-positive:chorus_get_task)
|
|
466
|
+
echo '{"uuid":"task-9","title":"Task 9","status":"done","proposalUuid":"prop-9","project":{"uuid":"proj-1","name":"P"}}'
|
|
467
|
+
;;
|
|
468
|
+
codereview-positive:chorus_get_proposal)
|
|
469
|
+
printf '%s' '{"uuid":"prop-9","title":"P9","description":"Free-form proposal — no OpenSpec slug.","inputType":"idea","inputUuids":["idea-9"]}'
|
|
470
|
+
;;
|
|
471
|
+
codereview-positive:chorus_list_tasks)
|
|
472
|
+
echo '{"tasks":[{"uuid":"task-7","status":"done","proposalUuid":"prop-9"},{"uuid":"task-8","status":"closed","proposalUuid":"prop-9"},{"uuid":"task-9","status":"done","proposalUuid":"prop-9"}],"total":3,"page":1,"pageSize":200}'
|
|
473
|
+
;;
|
|
474
|
+
codereview-positive:chorus_get_documents)
|
|
475
|
+
echo '{"documents":[{"uuid":"doc-r1","type":"report","title":"Idea 9 — completion report","proposalUuid":"prop-9"}],"total":1,"page":1,"pageSize":200}'
|
|
476
|
+
;;
|
|
477
|
+
|
|
478
|
+
# codereview-not-idea: inputType != "idea" -> Branch C silent.
|
|
479
|
+
codereview-not-idea:chorus_get_task)
|
|
480
|
+
echo '{"uuid":"task-9","title":"Task 9","status":"done","proposalUuid":"prop-9","project":{"uuid":"proj-1","name":"P"}}'
|
|
481
|
+
;;
|
|
482
|
+
codereview-not-idea:chorus_get_proposal)
|
|
483
|
+
printf '%s' '{"uuid":"prop-9","title":"P9","description":"Manual proposal.","inputType":"manual","inputUuids":[]}'
|
|
484
|
+
;;
|
|
485
|
+
codereview-not-idea:chorus_list_tasks)
|
|
486
|
+
echo '{"tasks":[{"uuid":"task-9","status":"done","proposalUuid":"prop-9"}],"total":1,"page":1,"pageSize":200}'
|
|
487
|
+
;;
|
|
488
|
+
codereview-not-idea:chorus_get_documents)
|
|
489
|
+
echo '{"documents":[],"total":0,"page":1,"pageSize":200}'
|
|
490
|
+
;;
|
|
491
|
+
|
|
492
|
+
# codereview-not-last: a task still in_progress -> Branch C silent.
|
|
493
|
+
codereview-not-last:chorus_get_task)
|
|
494
|
+
echo '{"uuid":"task-9","title":"Task 9","status":"done","proposalUuid":"prop-9","project":{"uuid":"proj-1","name":"P"}}'
|
|
495
|
+
;;
|
|
496
|
+
codereview-not-last:chorus_get_proposal)
|
|
497
|
+
printf '%s' '{"uuid":"prop-9","title":"P9","description":"Free-form proposal.","inputType":"idea","inputUuids":["idea-9"]}'
|
|
498
|
+
;;
|
|
499
|
+
codereview-not-last:chorus_list_tasks)
|
|
500
|
+
echo '{"tasks":[{"uuid":"task-7","status":"done","proposalUuid":"prop-9"},{"uuid":"task-8","status":"in_progress","proposalUuid":"prop-9"},{"uuid":"task-9","status":"done","proposalUuid":"prop-9"}],"total":3,"page":1,"pageSize":200}'
|
|
501
|
+
;;
|
|
502
|
+
codereview-not-last:chorus_get_documents)
|
|
503
|
+
echo '{"documents":[],"total":0,"page":1,"pageSize":200}'
|
|
504
|
+
;;
|
|
505
|
+
|
|
506
|
+
# codereview-ordering: idea-rooted, all done, NO report -> BOTH C and B
|
|
507
|
+
# fire; used to assert C precedes B in the combined output.
|
|
508
|
+
codereview-ordering:chorus_get_task)
|
|
509
|
+
echo '{"uuid":"task-9","title":"Task 9","status":"done","proposalUuid":"prop-9","project":{"uuid":"proj-1","name":"P"}}'
|
|
510
|
+
;;
|
|
511
|
+
codereview-ordering:chorus_get_proposal)
|
|
512
|
+
printf '%s' '{"uuid":"prop-9","title":"P9","description":"Free-form proposal — no slug.","inputType":"idea","inputUuids":["idea-9"]}'
|
|
513
|
+
;;
|
|
514
|
+
codereview-ordering:chorus_list_tasks)
|
|
515
|
+
echo '{"tasks":[{"uuid":"task-7","status":"done","proposalUuid":"prop-9"},{"uuid":"task-8","status":"closed","proposalUuid":"prop-9"},{"uuid":"task-9","status":"done","proposalUuid":"prop-9"}],"total":3,"page":1,"pageSize":200}'
|
|
516
|
+
;;
|
|
517
|
+
codereview-ordering:chorus_get_documents)
|
|
518
|
+
echo '{"documents":[],"total":0,"page":1,"pageSize":200}'
|
|
519
|
+
;;
|
|
520
|
+
|
|
394
521
|
*)
|
|
395
522
|
echo "" ;;
|
|
396
523
|
esac
|
|
@@ -478,6 +605,13 @@ run_one() {
|
|
|
478
605
|
MODE_VAR_FOR_RUN="off"
|
|
479
606
|
fi
|
|
480
607
|
|
|
608
|
+
# The "codereview-toggle-off" fixture disables Branch C via the plugin
|
|
609
|
+
# option env var; everything else leaves it unset (defaults to enabled).
|
|
610
|
+
local CODEREVIEW_OPT_FOR_RUN=""
|
|
611
|
+
if [ "$fixture" = "codereview-toggle-off" ]; then
|
|
612
|
+
CODEREVIEW_OPT_FOR_RUN="false"
|
|
613
|
+
fi
|
|
614
|
+
|
|
481
615
|
local stdout_file
|
|
482
616
|
stdout_file=$(mktemp)
|
|
483
617
|
local stderr_file
|
|
@@ -491,6 +625,7 @@ run_one() {
|
|
|
491
625
|
PATH="$PATH_FOR_RUN" \
|
|
492
626
|
CLAUDE_PROJECT_DIR="$PROJECT_DIR_FOR_RUN" \
|
|
493
627
|
CHORUS_OPENSPEC_MODE="$MODE_VAR_FOR_RUN" \
|
|
628
|
+
CLAUDE_PLUGIN_OPTION_ENABLECODEREVIEWER="$CODEREVIEW_OPT_FOR_RUN" \
|
|
494
629
|
/bin/bash -c "cd \"$PROJECT_DIR_FOR_RUN\" && /bin/bash \"$hook_dir/on-post-verify-task.sh\"" \
|
|
495
630
|
>"$stdout_file" 2>"$stderr_file" || rc=$?
|
|
496
631
|
|
|
@@ -517,6 +652,29 @@ run_one() {
|
|
|
517
652
|
FAIL=$((FAIL + 1))
|
|
518
653
|
FAILED="$FAILED $name[$variant]"
|
|
519
654
|
fi
|
|
655
|
+
elif [ "$assertion_mode" = "must-precede" ]; then
|
|
656
|
+
# $expected MUST appear, $forbidden MUST appear, and $expected's first
|
|
657
|
+
# occurrence MUST come before $forbidden's. Used to assert Branch C
|
|
658
|
+
# (code-review) is injected before Branch B (completion report). The
|
|
659
|
+
# whole payload is a single JSON line, so compare byte offsets (grep
|
|
660
|
+
# -bo), not line numbers.
|
|
661
|
+
local off_expected off_forbidden
|
|
662
|
+
off_expected=$(printf '%s' "$stdout" | grep -bo "$expected" | head -1 | cut -d: -f1)
|
|
663
|
+
off_forbidden=$(printf '%s' "$stdout" | grep -bo "$forbidden" | head -1 | cut -d: -f1)
|
|
664
|
+
if [ -z "$off_expected" ] || [ -z "$off_forbidden" ]; then
|
|
665
|
+
echo " FAIL $name [$variant]: expected both '$expected' and '$forbidden' present (got offsets '$off_expected' / '$off_forbidden')"
|
|
666
|
+
printf '%s\n' "$stdout" | sed 's/^/ /'
|
|
667
|
+
FAIL=$((FAIL + 1))
|
|
668
|
+
FAILED="$FAILED $name[$variant]"
|
|
669
|
+
elif [ "$off_expected" -lt "$off_forbidden" ]; then
|
|
670
|
+
echo " PASS $name [$variant]"
|
|
671
|
+
PASS=$((PASS + 1))
|
|
672
|
+
else
|
|
673
|
+
echo " FAIL $name [$variant]: '$expected' (offset $off_expected) does not precede '$forbidden' (offset $off_forbidden)"
|
|
674
|
+
printf '%s\n' "$stdout" | sed 's/^/ /'
|
|
675
|
+
FAIL=$((FAIL + 1))
|
|
676
|
+
FAILED="$FAILED $name[$variant]"
|
|
677
|
+
fi
|
|
520
678
|
else
|
|
521
679
|
# must-not-contain: $forbidden MUST be absent.
|
|
522
680
|
if printf '%s' "$stdout" | grep -q "$forbidden"; then
|
|
@@ -607,6 +765,38 @@ run_one "report-task-overflow" "report-task-overflow" "codex" "must-not-contain
|
|
|
607
765
|
run_one "report-doc-overflow" "report-doc-overflow" "claude" "must-not-contain" "" "create idea-completion report"
|
|
608
766
|
run_one "report-doc-overflow" "report-doc-overflow" "codex" "must-not-contain" "" "create idea-completion report"
|
|
609
767
|
|
|
768
|
+
# ===== Branch C: Code-review gateway reminder fixtures =====
|
|
769
|
+
# (assertion: must-contain `spawn code-reviewer` / must-not-contain `spawn code-reviewer`)
|
|
770
|
+
# These fixtures use a non-OpenSpec proposal description (no slug line),
|
|
771
|
+
# so Branch A silent-skips, isolating Branch C behavior.
|
|
772
|
+
|
|
773
|
+
# C1: codereview-positive — last task of an idea-rooted proposal verified,
|
|
774
|
+
# code-reviewer enabled (default). A report Document already exists so
|
|
775
|
+
# Branch B is silent; ONLY Branch C fires -> reminder MUST contain
|
|
776
|
+
# `spawn code-reviewer`.
|
|
777
|
+
run_one "codereview-positive" "codereview-positive" "claude" "must-contain" "spawn code-reviewer"
|
|
778
|
+
run_one "codereview-positive" "codereview-positive" "codex" "must-contain" "spawn code-reviewer"
|
|
779
|
+
|
|
780
|
+
# C2: codereview-toggle-off — same data as positive but
|
|
781
|
+
# CLAUDE_PLUGIN_OPTION_ENABLECODEREVIEWER=false -> Branch C MUST be silent.
|
|
782
|
+
run_one "codereview-toggle-off" "codereview-toggle-off" "claude" "must-not-contain" "" "spawn code-reviewer"
|
|
783
|
+
run_one "codereview-toggle-off" "codereview-toggle-off" "codex" "must-not-contain" "" "spawn code-reviewer"
|
|
784
|
+
|
|
785
|
+
# C3: codereview-not-idea — proposal.inputType != "idea" -> Branch C
|
|
786
|
+
# MUST skip at the idea-rooted gate.
|
|
787
|
+
run_one "codereview-not-idea" "codereview-not-idea" "claude" "must-not-contain" "" "spawn code-reviewer"
|
|
788
|
+
run_one "codereview-not-idea" "codereview-not-idea" "codex" "must-not-contain" "" "spawn code-reviewer"
|
|
789
|
+
|
|
790
|
+
# C4: codereview-not-last — a task still in_progress -> Branch C silent.
|
|
791
|
+
run_one "codereview-not-last" "codereview-not-last" "claude" "must-not-contain" "" "spawn code-reviewer"
|
|
792
|
+
run_one "codereview-not-last" "codereview-not-last" "codex" "must-not-contain" "" "spawn code-reviewer"
|
|
793
|
+
|
|
794
|
+
# C5: codereview-ordering — idea-rooted, all done, NO report Document, so
|
|
795
|
+
# BOTH Branch C and Branch B fire. The code-review reminder MUST precede
|
|
796
|
+
# the completion-report reminder in the combined output.
|
|
797
|
+
run_one "codereview-ordering" "codereview-ordering" "claude" "must-precede" "spawn code-reviewer" "create idea-completion report"
|
|
798
|
+
run_one "codereview-ordering" "codereview-ordering" "codex" "must-precede" "spawn code-reviewer" "create idea-completion report"
|
|
799
|
+
|
|
610
800
|
echo ""
|
|
611
801
|
echo "Results: $PASS passed, $FAIL failed"
|
|
612
802
|
|
|
@@ -4,7 +4,7 @@ description: Chorus AI Agent collaboration platform — overview, common tools,
|
|
|
4
4
|
license: AGPL-3.0
|
|
5
5
|
metadata:
|
|
6
6
|
author: chorus
|
|
7
|
-
version: "0.
|
|
7
|
+
version: "0.11.1"
|
|
8
8
|
category: project-management
|
|
9
9
|
mcp_server: chorus
|
|
10
10
|
---
|
|
@@ -308,12 +308,14 @@ The table below shows default tool availability for each preset (no custom permi
|
|
|
308
308
|
|
|
309
309
|
### 5. Review Agent Configuration
|
|
310
310
|
|
|
311
|
-
The plugin includes
|
|
311
|
+
The plugin includes three independent review agents. After proposal submission, task verification, or the last task of an idea-rooted proposal being verified, a PostToolUse hook injects context instructing the main agent to spawn the reviewer. The main agent must spawn it manually — it is NOT auto-launched. All are **enabled by default**.
|
|
312
312
|
|
|
313
313
|
| Setting | Controls | Default |
|
|
314
314
|
|---------|----------|---------|
|
|
315
315
|
| `enableProposalReviewer` | Spawn `chorus:proposal-reviewer` after `chorus_pm_submit_proposal` | `true` (enabled) |
|
|
316
316
|
| `enableTaskReviewer` | Spawn `chorus:task-reviewer` after `chorus_submit_for_verify` | `true` (enabled) |
|
|
317
|
+
| `enableCodeReviewer` | Spawn `chorus:code-reviewer` over the Idea's aggregate change after its last task is verified (final ship gateway) | `true` (enabled) |
|
|
318
|
+
| `maxCodeReviewRounds` | Max code-review rounds before escalating to a human (0 = unlimited) | `3` |
|
|
317
319
|
|
|
318
320
|
To disable, reconfigure the plugin via `/plugin` settings or manually edit `~/.claude/settings.json`:
|
|
319
321
|
|
|
@@ -323,14 +325,15 @@ To disable, reconfigure the plugin via `/plugin` settings or manually edit `~/.c
|
|
|
323
325
|
"chorus@chorus-plugins": {
|
|
324
326
|
"options": {
|
|
325
327
|
"enableProposalReviewer": false,
|
|
326
|
-
"enableTaskReviewer": false
|
|
328
|
+
"enableTaskReviewer": false,
|
|
329
|
+
"enableCodeReviewer": false
|
|
327
330
|
}
|
|
328
331
|
}
|
|
329
332
|
}
|
|
330
333
|
}
|
|
331
334
|
```
|
|
332
335
|
|
|
333
|
-
When enabled, reviewers run as read-only sub-agents and post a VERDICT comment on the proposal/task. Three possible outcomes: **PASS** (no issues), **PASS WITH NOTES** (minor non-blocking notes), or **FAIL** (BLOCKERs found). Results are advisory — they do not block approval or
|
|
336
|
+
When enabled, reviewers run as read-only sub-agents and post a VERDICT comment on the proposal/task/idea. Three possible outcomes: **PASS** (no issues), **PASS WITH NOTES** (minor non-blocking notes), or **FAIL** (BLOCKERs found). Results are advisory — they do not block approval, verification, or ship; the code-review gateway in particular is behavioral (it does not change the Idea's stored status). On a code-review FAIL, fix it via the `/chorus:quick-dev` workflow: `chorus_create_tasks` with `proposalUuid` set to the current approved proposal so the fix tasks attach to it, then execute → verify and re-run the gateway. Disabling reduces token usage but removes the independent quality gate.
|
|
334
337
|
|
|
335
338
|
---
|
|
336
339
|
|
|
@@ -4,7 +4,7 @@ description: Chorus Development workflow — claim tasks, report work, manage se
|
|
|
4
4
|
license: AGPL-3.0
|
|
5
5
|
metadata:
|
|
6
6
|
author: chorus
|
|
7
|
-
version: "0.
|
|
7
|
+
version: "0.11.1"
|
|
8
8
|
category: project-management
|
|
9
9
|
mcp_server: chorus
|
|
10
10
|
---
|
|
@@ -237,6 +237,8 @@ Find the most recent comment containing `VERDICT:` and act on it:
|
|
|
237
237
|
|
|
238
238
|
If no new `VERDICT:` comment appears after the reviewer returns, it exhausted its `maxTurns` budget before posting. Respawn it ONCE with a concise-budget hint in the prompt: *"Stay within turn budget. Skip deep verification. Fetch task/proposal/comments, run only the core tests, and post your VERDICT comment within the first 12 turns."* If the second attempt still produces no VERDICT, review manually using the checklist and proceed.
|
|
239
239
|
|
|
240
|
+
> **Final code-review gateway (after the Idea's LAST task is verified):** when the task you just verified is the **last** task of its idea-rooted proposal, the feature is about to ship — the PostToolUse hook injects a reminder to spawn `chorus:code-reviewer` (gated by `enableCodeReviewer`, default on). Spawn it yourself in **foreground**, passing the `ideaUuid` + round number; it reviews the Idea's **aggregate** code change across all its tasks (cross-task integration, architecture, security, regression, feature-level coverage) and posts one `VERDICT` comment on the **idea**. `PASS` / `PASS WITH NOTES` → ship; `FAIL` → fix via `/chorus:quick-dev` (`chorus_create_tasks` with `proposalUuid` set to the current approved proposal so the fix tasks attach to it — do NOT reopen the verified tasks), then re-run the gateway, bounded by `maxCodeReviewRounds`. Advisory/behavioral, like the other reviewers. Run it **before** any idea-completion report.
|
|
241
|
+
|
|
240
242
|
### Step 9: Handle Review Feedback
|
|
241
243
|
|
|
242
244
|
If the reviewer returns **FAIL**, or the task is reopened after verification:
|