@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,58 @@
|
|
|
1
|
+
// cli/mcp-config.mjs
|
|
2
|
+
// Writes the --mcp-config JSON that wires the spawned headless Claude to THIS
|
|
3
|
+
// daemon's Chorus server (url + cho_ key), into the OS temp dir (never a
|
|
4
|
+
// hardcoded /tmp), and cleans it up. Plain ESM, zero deps.
|
|
5
|
+
|
|
6
|
+
import { mkdtempSync, rmSync, writeFileSync } from "node:fs";
|
|
7
|
+
import { tmpdir } from "node:os";
|
|
8
|
+
import { join } from "node:path";
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Build the MCP config object that exposes the Chorus server to the spawned
|
|
12
|
+
* Claude as a `chorus` MCP server over Streamable HTTP (mirrors the entry the
|
|
13
|
+
* OpenClaw plugin writes — see mcp-registration.ts).
|
|
14
|
+
* @param {{ url: string, apiKey: string }} creds
|
|
15
|
+
*/
|
|
16
|
+
export function buildMcpConfig({ url, apiKey }) {
|
|
17
|
+
return {
|
|
18
|
+
mcpServers: {
|
|
19
|
+
chorus: {
|
|
20
|
+
type: "http",
|
|
21
|
+
url: `${url.replace(/\/$/, "")}/api/mcp`,
|
|
22
|
+
headers: { Authorization: `Bearer ${apiKey}` },
|
|
23
|
+
},
|
|
24
|
+
},
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Write the MCP config to a fresh temp file under os.tmpdir() and return its
|
|
30
|
+
* path plus a cleanup function. The caller MUST call cleanup() when the wake
|
|
31
|
+
* completes (or register it for process exit).
|
|
32
|
+
*
|
|
33
|
+
* @param {{ url: string, apiKey: string }} creds
|
|
34
|
+
* @param {{ tmp?: string, mkdtemp?: typeof mkdtempSync, write?: typeof writeFileSync, rm?: typeof rmSync }} [deps]
|
|
35
|
+
* @returns {{ path: string, cleanup: () => void }}
|
|
36
|
+
*/
|
|
37
|
+
export function writeMcpConfig(creds, deps = {}) {
|
|
38
|
+
const tmp = deps.tmp ?? tmpdir();
|
|
39
|
+
const mkdtemp = deps.mkdtemp ?? mkdtempSync;
|
|
40
|
+
const write = deps.write ?? writeFileSync;
|
|
41
|
+
const rm = deps.rm ?? rmSync;
|
|
42
|
+
|
|
43
|
+
const dir = mkdtemp(join(tmp, "chorus-mcp-"));
|
|
44
|
+
const path = join(dir, "mcp.json");
|
|
45
|
+
write(path, JSON.stringify(buildMcpConfig(creds), null, 2), { mode: 0o600 });
|
|
46
|
+
|
|
47
|
+
let cleaned = false;
|
|
48
|
+
const cleanup = () => {
|
|
49
|
+
if (cleaned) return;
|
|
50
|
+
cleaned = true;
|
|
51
|
+
try {
|
|
52
|
+
rm(dir, { recursive: true, force: true });
|
|
53
|
+
} catch {
|
|
54
|
+
// best-effort; temp dir is reclaimed by the OS regardless
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
return { path, cleanup };
|
|
58
|
+
}
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
// cli/process-killer.mjs
|
|
2
|
+
// Two-stage, cross-platform process-tree killer for the daemon's reverse control
|
|
3
|
+
// channel (子3 — daemon-interrupt-resume, Tech Design "Killer contract"). When an
|
|
4
|
+
// authorized interrupt is verified, the daemon must STOP a running headless-Claude
|
|
5
|
+
// subprocess — first gracefully (SIGINT, so the model can flush in-progress work),
|
|
6
|
+
// then forcefully if it does not exit within a configurable window. Plain ESM, ZERO
|
|
7
|
+
// new npm deps (CLAUDE.md pitfall #9) and Bash-3.2-safe (no shell touched).
|
|
8
|
+
//
|
|
9
|
+
// Why a process TREE, not just the direct child:
|
|
10
|
+
// • POSIX: Claude may itself spawn children. Linux does NOT cascade a signal to a
|
|
11
|
+
// parent's children (Node docs: "On Linux, child processes of child processes
|
|
12
|
+
// will not be terminated when attempting to kill their parent"). So the daemon
|
|
13
|
+
// spawns the child `detached: true` — which makes it a PROCESS GROUP LEADER
|
|
14
|
+
// (its pgid === its pid) — and we signal the whole GROUP via the negative-pid
|
|
15
|
+
// form `process.kill(-pid, sig)`. That reaches every descendant in the group.
|
|
16
|
+
// • Windows: there is no per-tree signal. We escalate with the platform
|
|
17
|
+
// `taskkill /PID <pid> /T /F` command — `/T` ends the process AND its child
|
|
18
|
+
// processes (the tree), `/F` forces termination. Verified against Microsoft
|
|
19
|
+
// Learn's taskkill reference. The graceful stage is best-effort `child.kill()`
|
|
20
|
+
// on the direct process only (Node delivers SIGINT to the child on Windows; the
|
|
21
|
+
// signal cannot reach a tree there). The Windows path is NOT runtime-verifiable
|
|
22
|
+
// in this (POSIX) environment — re-verify on a real Windows host before claiming
|
|
23
|
+
// Windows support.
|
|
24
|
+
//
|
|
25
|
+
// Contract (Tech Design): killProcessTree(child, { sigintTimeoutMs, platform,
|
|
26
|
+
// logger, spawnImpl, nowKill }) → Promise<{ killed, escalated, signaled }>. It is
|
|
27
|
+
// pure-ish (platform + spawn injectable for tests), NEVER throws into the wake path
|
|
28
|
+
// (every signal/spawn is try/caught), and LOGS visibly (memory: no-silent-errors).
|
|
29
|
+
|
|
30
|
+
import { spawn as nodeSpawn } from "node:child_process";
|
|
31
|
+
|
|
32
|
+
const NOOP_LOGGER = { info() {}, warn() {}, error() {} };
|
|
33
|
+
|
|
34
|
+
/** Default escalation window before a forceful kill (Tech Design / spec: 10s). */
|
|
35
|
+
export const DEFAULT_SIGINT_TIMEOUT_MS = 10_000;
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Send SIGINT to a POSIX child's PROCESS GROUP (negative pid). The child must have
|
|
39
|
+
* been spawned `detached: true` so it leads its own group and the group kill reaches
|
|
40
|
+
* grandchildren. Returns true iff the signal was delivered without throwing.
|
|
41
|
+
* @param {number} pid
|
|
42
|
+
* @param {string} signal "SIGINT" | "SIGKILL"
|
|
43
|
+
* @param {(pid: number, signal: string) => void} killImpl injectable process.kill
|
|
44
|
+
* @param {{warn(m:string):void}} logger
|
|
45
|
+
* @returns {boolean}
|
|
46
|
+
*/
|
|
47
|
+
function signalGroup(pid, signal, killImpl, logger) {
|
|
48
|
+
try {
|
|
49
|
+
// Negative pid → signal the entire process group led by `pid`. This is the
|
|
50
|
+
// POSIX semantics process.kill(2) implements; Node forwards it verbatim.
|
|
51
|
+
killImpl(-pid, signal);
|
|
52
|
+
return true;
|
|
53
|
+
} catch (err) {
|
|
54
|
+
// ESRCH (already gone) is the common, benign case after a graceful exit; any
|
|
55
|
+
// other error (e.g. EPERM) is logged but never thrown — the wake path must not
|
|
56
|
+
// crash because a stop signal failed.
|
|
57
|
+
logger.warn(`[Chorus] kill(-${pid}, ${signal}) failed: ${err}`);
|
|
58
|
+
return false;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Two-stage stop of a running subprocess TREE. Never throws.
|
|
64
|
+
*
|
|
65
|
+
* Stage 1 (graceful): SIGINT.
|
|
66
|
+
* • POSIX: `process.kill(-pid, "SIGINT")` — the whole group.
|
|
67
|
+
* • Windows: best-effort `child.kill("SIGINT")` on the direct process (no tree
|
|
68
|
+
* signal exists; taskkill below is the tree-reaching escalation).
|
|
69
|
+
* Then wait up to `sigintTimeoutMs` for the child to exit (resolved via the child's
|
|
70
|
+
* own 'exit'/'close' — the caller observes that and aborts our timer by resolving
|
|
71
|
+
* early through `child.exitObserved`). If the child has not exited when the timer
|
|
72
|
+
* fires:
|
|
73
|
+
* Stage 2 (forceful):
|
|
74
|
+
* • POSIX: `process.kill(-pid, "SIGKILL")` — the whole group.
|
|
75
|
+
* • Windows: spawn `taskkill /PID <pid> /T /F`.
|
|
76
|
+
*
|
|
77
|
+
* @param {{ pid?: number, killed?: boolean, kill?: Function, once?: Function, on?: Function }} child
|
|
78
|
+
* The live ChildProcess (or a test double). `pid` MUST be present to target a tree.
|
|
79
|
+
* @param {{
|
|
80
|
+
* sigintTimeoutMs?: number,
|
|
81
|
+
* platform?: NodeJS.Platform,
|
|
82
|
+
* logger?: { info(m:string):void, warn(m:string):void, error(m:string):void },
|
|
83
|
+
* killImpl?: (pid: number, signal: string) => void, Injectable process.kill (POSIX group signal).
|
|
84
|
+
* spawnImpl?: typeof nodeSpawn, Injectable spawn (Windows taskkill).
|
|
85
|
+
* hasExited?: () => boolean, Probe: has the child already exited?
|
|
86
|
+
* waitForExit?: (ms: number) => Promise<boolean>, Resolve true if child exits within ms, else false.
|
|
87
|
+
* }} [opts]
|
|
88
|
+
* @returns {Promise<{ signaled: boolean, killed: boolean, escalated: boolean }>}
|
|
89
|
+
* signaled: the graceful SIGINT was delivered.
|
|
90
|
+
* escalated: a forceful kill was issued (child did not exit within the window).
|
|
91
|
+
* killed: a stop action (graceful or forceful) was issued at all.
|
|
92
|
+
*/
|
|
93
|
+
export async function killProcessTree(child, opts = {}) {
|
|
94
|
+
const platform = opts.platform ?? process.platform;
|
|
95
|
+
const logger = opts.logger ?? NOOP_LOGGER;
|
|
96
|
+
const killImpl = opts.killImpl ?? ((pid, signal) => process.kill(pid, signal));
|
|
97
|
+
const spawnImpl = opts.spawnImpl ?? nodeSpawn;
|
|
98
|
+
const sigintTimeoutMs = opts.sigintTimeoutMs ?? DEFAULT_SIGINT_TIMEOUT_MS;
|
|
99
|
+
const isWin = platform === "win32";
|
|
100
|
+
|
|
101
|
+
if (!child || typeof child.pid !== "number") {
|
|
102
|
+
// No live process to target — log and no-op (never throw into the wake path).
|
|
103
|
+
logger.warn("[Chorus] killProcessTree: no child pid to target; ignoring");
|
|
104
|
+
return { signaled: false, killed: false, escalated: false };
|
|
105
|
+
}
|
|
106
|
+
const pid = child.pid;
|
|
107
|
+
|
|
108
|
+
// --- Stage 1: graceful SIGINT ---
|
|
109
|
+
let signaled;
|
|
110
|
+
if (isWin) {
|
|
111
|
+
// Windows: deliver SIGINT to the direct child only (best-effort). Node maps
|
|
112
|
+
// SIGINT to a console-stop on Windows; it cannot reach a tree there.
|
|
113
|
+
try {
|
|
114
|
+
signaled = child.kill?.("SIGINT") ?? false;
|
|
115
|
+
} catch (err) {
|
|
116
|
+
logger.warn(`[Chorus] child.kill("SIGINT") failed: ${err}`);
|
|
117
|
+
signaled = false;
|
|
118
|
+
}
|
|
119
|
+
logger.info(`[Chorus] interrupt: sent SIGINT to pid ${pid} (windows, direct child)`);
|
|
120
|
+
} else {
|
|
121
|
+
signaled = signalGroup(pid, "SIGINT", killImpl, logger);
|
|
122
|
+
logger.info(`[Chorus] interrupt: sent SIGINT to process group -${pid} (posix)`);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
// --- Wait for graceful exit within the window ---
|
|
126
|
+
const exitedGracefully = await waitForChildExit(child, sigintTimeoutMs, opts, logger);
|
|
127
|
+
if (exitedGracefully) {
|
|
128
|
+
logger.info(`[Chorus] interrupt: pid ${pid} exited gracefully within ${sigintTimeoutMs}ms`);
|
|
129
|
+
return { signaled, killed: true, escalated: false };
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
// --- Stage 2: forceful tree kill ---
|
|
133
|
+
if (isWin) {
|
|
134
|
+
// taskkill /PID <pid> /T /F — /T ends the tree (child processes), /F forces it.
|
|
135
|
+
try {
|
|
136
|
+
const tk = spawnImpl("taskkill", ["/PID", String(pid), "/T", "/F"], {
|
|
137
|
+
stdio: "ignore",
|
|
138
|
+
windowsHide: true,
|
|
139
|
+
});
|
|
140
|
+
// taskkill failures are logged, never thrown.
|
|
141
|
+
tk?.on?.("error", (err) => logger.warn(`[Chorus] taskkill spawn error: ${err}`));
|
|
142
|
+
logger.info(`[Chorus] interrupt: escalated — taskkill /PID ${pid} /T /F (windows)`);
|
|
143
|
+
} catch (err) {
|
|
144
|
+
logger.warn(`[Chorus] taskkill escalation failed for pid ${pid}: ${err}`);
|
|
145
|
+
}
|
|
146
|
+
} else {
|
|
147
|
+
signalGroup(pid, "SIGKILL", killImpl, logger);
|
|
148
|
+
logger.info(`[Chorus] interrupt: escalated — SIGKILL to process group -${pid} (posix)`);
|
|
149
|
+
}
|
|
150
|
+
return { signaled, killed: true, escalated: true };
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* Resolve true if the child exits within `ms`, else false (timeout). Prefers an
|
|
155
|
+
* injected `waitForExit` (tests); otherwise races the child's own 'exit' event
|
|
156
|
+
* against a timer, with an immediate short-circuit if it has already exited.
|
|
157
|
+
* Never throws.
|
|
158
|
+
*/
|
|
159
|
+
async function waitForChildExit(child, ms, opts, logger) {
|
|
160
|
+
if (typeof opts.waitForExit === "function") {
|
|
161
|
+
try {
|
|
162
|
+
return await opts.waitForExit(ms);
|
|
163
|
+
} catch (err) {
|
|
164
|
+
logger.warn(`[Chorus] waitForExit probe failed: ${err}`);
|
|
165
|
+
return false;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
// Already exited? (Node sets child.killed after a delivered signal, but exitCode/
|
|
169
|
+
// signalCode is the authoritative "has terminated" probe.)
|
|
170
|
+
const hasExited =
|
|
171
|
+
typeof opts.hasExited === "function"
|
|
172
|
+
? safeBool(opts.hasExited, logger)
|
|
173
|
+
: child.exitCode !== null && child.exitCode !== undefined;
|
|
174
|
+
if (hasExited) return true;
|
|
175
|
+
|
|
176
|
+
return await new Promise((resolve) => {
|
|
177
|
+
let settled = false;
|
|
178
|
+
const finish = (value) => {
|
|
179
|
+
if (settled) return;
|
|
180
|
+
settled = true;
|
|
181
|
+
clearTimeout(timer);
|
|
182
|
+
resolve(value);
|
|
183
|
+
};
|
|
184
|
+
const timer = setTimeout(() => finish(false), ms);
|
|
185
|
+
// unref so a pending timer never keeps the daemon process alive on shutdown.
|
|
186
|
+
timer?.unref?.();
|
|
187
|
+
try {
|
|
188
|
+
child.once?.("exit", () => finish(true));
|
|
189
|
+
child.once?.("close", () => finish(true));
|
|
190
|
+
} catch (err) {
|
|
191
|
+
logger.warn(`[Chorus] failed to attach exit listener: ${err}`);
|
|
192
|
+
finish(false);
|
|
193
|
+
}
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
/** Run a boolean probe, treating a throw as false (never propagate). */
|
|
198
|
+
function safeBool(fn, logger) {
|
|
199
|
+
try {
|
|
200
|
+
return Boolean(fn());
|
|
201
|
+
} catch (err) {
|
|
202
|
+
logger.warn(`[Chorus] hasExited probe threw: ${err}`);
|
|
203
|
+
return false;
|
|
204
|
+
}
|
|
205
|
+
}
|
package/cli/prompts.mjs
ADDED
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
// cli/prompts.mjs
|
|
2
|
+
// Per-notification-action prompt builders. Ported from the OpenClaw plugin's
|
|
3
|
+
// event-router wake messages. The spawned Claude is headless and acts only
|
|
4
|
+
// through the chorus_* MCP tools — these prompts tell it what happened and
|
|
5
|
+
// which tools to use.
|
|
6
|
+
//
|
|
7
|
+
// HEADLESS GUARD (add-daemon-headless-interaction-guard): a daemon-woken session
|
|
8
|
+
// has NO human at the terminal, so it must never call AskUserQuestion or any
|
|
9
|
+
// blocking terminal prompt — that would hang or be silently dropped. buildPrompt
|
|
10
|
+
// prepends HEADLESS_PREAMBLE (below) to EVERY non-null wake body so the rule rides
|
|
11
|
+
// every turn, new or --resume (the daemon rebuilds the prompt on each wake, so a
|
|
12
|
+
// per-turn prefix persists across resumes without touching the spawn argv — there
|
|
13
|
+
// is deliberately no --append-system-prompt; see claude-spawner.mjs). The preamble
|
|
14
|
+
// also names the CHORUS_DAEMON_HEADLESS=1 env signal the spawner sets.
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* @typedef {Object} NotificationDetail
|
|
18
|
+
* @property {string} uuid
|
|
19
|
+
* @property {string} projectUuid
|
|
20
|
+
* @property {string} entityType
|
|
21
|
+
* @property {string} entityUuid
|
|
22
|
+
* @property {string} entityTitle
|
|
23
|
+
* @property {string} action
|
|
24
|
+
* @property {string} message
|
|
25
|
+
* @property {string} actorType
|
|
26
|
+
* @property {string} actorUuid
|
|
27
|
+
* @property {string} actorName
|
|
28
|
+
* @property {string} [instructionText] Free-text body of a `human_instruction` wake
|
|
29
|
+
* (子1 — daemon-session-conversation). The server denormalizes the canonical turn
|
|
30
|
+
* promptText onto the wake notification so the daemon reads it in the
|
|
31
|
+
* `chorus_get_notifications` call it already makes (zero extra fetch); the
|
|
32
|
+
* event-router threads it here. Present only for the `human_instruction` action.
|
|
33
|
+
*/
|
|
34
|
+
|
|
35
|
+
/** @param {NotificationDetail} n @param {string} entityType */
|
|
36
|
+
function mentionGuidance(n, entityType) {
|
|
37
|
+
return (
|
|
38
|
+
`After completing your work, post a comment on this ${entityType} using ` +
|
|
39
|
+
`chorus_add_comment with @mention: @[${n.actorName}](${n.actorType}:${n.actorUuid})`
|
|
40
|
+
);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Shared headless preamble prepended to EVERY wake prompt (add-daemon-headless-
|
|
45
|
+
* interaction-guard). A daemon-woken session is a headless `claude -p` run with no
|
|
46
|
+
* human at the terminal, so AskUserQuestion (and any blocking terminal prompt) reaches
|
|
47
|
+
* no one — it hangs or is dropped, stalling the agent or forcing a unilateral decision.
|
|
48
|
+
* This block tells the agent that fact and routes every human-decision point through
|
|
49
|
+
* Chorus's async channels instead.
|
|
50
|
+
*
|
|
51
|
+
* Wording note: the re-routing guidance names `chorus_add_comment` and describes the
|
|
52
|
+
* elaboration panel in prose ON PURPOSE — it must NOT embed the literal
|
|
53
|
+
* `chorus_pm_start_elaboration` / `chorus_pm_validate_elaboration` tool names, because
|
|
54
|
+
* this preamble rides EVERY wake including `elaboration_verified` (write-the-proposal),
|
|
55
|
+
* whose contract is that it never mentions the answer-questions tools. Keep it that way.
|
|
56
|
+
*
|
|
57
|
+
* Kept compact: it is paid on every wake, so each line costs tokens per wake.
|
|
58
|
+
*/
|
|
59
|
+
export const HEADLESS_PREAMBLE = [
|
|
60
|
+
"[Headless daemon session] You are a headless `claude -p` session woken by the Chorus",
|
|
61
|
+
"daemon. There is NO human at the terminal, and the environment variable",
|
|
62
|
+
"CHORUS_DAEMON_HEADLESS=1 is set.",
|
|
63
|
+
"",
|
|
64
|
+
"Do NOT call AskUserQuestion or any interactive / blocking terminal prompt — it reaches",
|
|
65
|
+
"no one and will hang or be silently dropped. Whenever you would ask the human something,",
|
|
66
|
+
"route it through Chorus instead: post a comment with chorus_add_comment and @mention the",
|
|
67
|
+
"requester, and/or open an elaboration round the human answers in the Chorus UI panel.",
|
|
68
|
+
"",
|
|
69
|
+
"A few examples (not exhaustive): when a skill says to present elaboration questions via",
|
|
70
|
+
"AskUserQuestion, open an elaboration round and @mention the requester in a comment so they",
|
|
71
|
+
"answer in the UI; when a skill says to ask permission before skipping a step, do not skip",
|
|
72
|
+
"silently — record the reason in a Chorus comment; when a skill offers to write a report,",
|
|
73
|
+
"create it directly or skip it, never prompt for it.",
|
|
74
|
+
"",
|
|
75
|
+
"After you post something that needs a human decision, END THE TURN and leave the work",
|
|
76
|
+
"pending — do not poll or wait for a synchronous reply. The human's later comment or",
|
|
77
|
+
"elaboration answer wakes a fresh turn that continues the work.",
|
|
78
|
+
].join("\n");
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Build the wake prompt for a notification, or null if the action has no
|
|
82
|
+
* wake (caller ignores those). Prepends HEADLESS_PREAMBLE to every non-null body
|
|
83
|
+
* (a null body — unknown action / empty human_instruction — stays null so the router
|
|
84
|
+
* still skips it and no contentless subprocess is spawned). The per-action body is
|
|
85
|
+
* produced by buildPromptBody below.
|
|
86
|
+
* @param {NotificationDetail} n
|
|
87
|
+
* @returns {string | null}
|
|
88
|
+
*/
|
|
89
|
+
export function buildPrompt(n) {
|
|
90
|
+
const body = buildPromptBody(n);
|
|
91
|
+
if (body == null) return null;
|
|
92
|
+
return `${HEADLESS_PREAMBLE}\n\n${body}`;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* The per-action wake body (without the headless preamble). Mirrors the OpenClaw
|
|
97
|
+
* event-router handlers; returns null for actions that have no wake.
|
|
98
|
+
* @param {NotificationDetail} n
|
|
99
|
+
* @returns {string | null}
|
|
100
|
+
*/
|
|
101
|
+
function buildPromptBody(n) {
|
|
102
|
+
switch (n.action) {
|
|
103
|
+
case "task_assigned":
|
|
104
|
+
return (
|
|
105
|
+
`[Chorus] Task assigned: ${n.entityTitle}. Task UUID: ${n.entityUuid}, ` +
|
|
106
|
+
`Project UUID: ${n.projectUuid}. Use chorus_get_task to review the task, ` +
|
|
107
|
+
`then chorus_claim_task to start work.\n${mentionGuidance(n, "task")}`
|
|
108
|
+
);
|
|
109
|
+
case "mentioned":
|
|
110
|
+
return (
|
|
111
|
+
`[Chorus] You were @mentioned in ${n.entityType} '${n.entityTitle}' ` +
|
|
112
|
+
`(entityType: ${n.entityType}, entityUuid: ${n.entityUuid}, projectUuid: ${n.projectUuid}): ${n.message}\n` +
|
|
113
|
+
`Review the ${n.entityType} and use chorus_get_comments (targetType: "${n.entityType}", ` +
|
|
114
|
+
`targetUuid: "${n.entityUuid}") to see the conversation, then respond.\n${mentionGuidance(n, n.entityType)}`
|
|
115
|
+
);
|
|
116
|
+
case "elaboration_requested":
|
|
117
|
+
return (
|
|
118
|
+
`[Chorus] Elaboration requested for idea '${n.entityTitle}' ` +
|
|
119
|
+
`(ideaUuid: ${n.entityUuid}, projectUuid: ${n.projectUuid}). ` +
|
|
120
|
+
`Use chorus_get_elaboration to review the questions.`
|
|
121
|
+
);
|
|
122
|
+
case "elaboration_answered":
|
|
123
|
+
return (
|
|
124
|
+
`[Chorus] Elaboration answers were submitted for idea '${n.entityTitle}' ` +
|
|
125
|
+
`(ideaUuid: ${n.entityUuid}, projectUuid: ${n.projectUuid}). Use chorus_get_elaboration to review the ` +
|
|
126
|
+
`answers, then either resolve the elaboration (chorus_pm_validate_elaboration) and proceed to a proposal, ` +
|
|
127
|
+
`or open another round (chorus_pm_start_elaboration) if gaps remain.\n${mentionGuidance(n, "idea")}`
|
|
128
|
+
);
|
|
129
|
+
case "elaboration_verified":
|
|
130
|
+
// A human clicked "Verify Elaborate" (add-elaboration-verify-wake). This is NOT a
|
|
131
|
+
// request to answer questions — the elaboration is DONE and the idea is now
|
|
132
|
+
// `elaborated`. The agent's job on this wake is to WRITE THE PROPOSAL via the
|
|
133
|
+
// existing proposal flow, anchored to the idea's same session that ran elaboration.
|
|
134
|
+
return (
|
|
135
|
+
`[Chorus] Elaboration for idea '${n.entityTitle}' was VERIFIED by a human ` +
|
|
136
|
+
`(ideaUuid: ${n.entityUuid}, projectUuid: ${n.projectUuid}). The idea is now elaborated — do NOT ` +
|
|
137
|
+
`answer elaboration questions. Proceed to WRITE THE PROPOSAL: gather context with chorus_get_idea and ` +
|
|
138
|
+
`chorus_get_elaboration, then author the proposal via the existing proposal flow ` +
|
|
139
|
+
`(chorus_pm_create_proposal / the proposal skill).\n${mentionGuidance(n, "idea")}`
|
|
140
|
+
);
|
|
141
|
+
case "proposal_rejected":
|
|
142
|
+
return (
|
|
143
|
+
`[Chorus] Proposal '${n.entityTitle}' was REJECTED (proposalUuid: ${n.entityUuid}, ` +
|
|
144
|
+
`projectUuid: ${n.projectUuid}). Review note: "${n.message}". Use chorus_get_proposal to review, ` +
|
|
145
|
+
`fix issues with chorus_pm_update_task_draft / chorus_pm_update_document_draft, then ` +
|
|
146
|
+
`chorus_pm_validate_proposal and chorus_pm_submit_proposal to resubmit.\n${mentionGuidance(n, "proposal")}`
|
|
147
|
+
);
|
|
148
|
+
case "proposal_approved":
|
|
149
|
+
return (
|
|
150
|
+
`[Chorus] Proposal '${n.entityTitle}' was APPROVED (proposalUuid: ${n.entityUuid}, ` +
|
|
151
|
+
`projectUuid: ${n.projectUuid}). Its documents and tasks have been created. Use ` +
|
|
152
|
+
`chorus_get_unblocked_tasks (projectUuid: "${n.projectUuid}") to find tasks ready to start.\n${mentionGuidance(n, "proposal")}`
|
|
153
|
+
);
|
|
154
|
+
case "idea_claimed":
|
|
155
|
+
return (
|
|
156
|
+
`[Chorus] Idea '${n.entityTitle}' was assigned to you (ideaUuid: ${n.entityUuid}, ` +
|
|
157
|
+
`projectUuid: ${n.projectUuid}). Use chorus_get_idea to review it, then claim it ` +
|
|
158
|
+
`(chorus_claim_idea) to begin elaboration.\n${mentionGuidance(n, "idea")}`
|
|
159
|
+
);
|
|
160
|
+
case "task_reopened":
|
|
161
|
+
return (
|
|
162
|
+
`[Chorus] Task '${n.entityTitle}' was reopened and needs rework (taskUuid: ${n.entityUuid}, ` +
|
|
163
|
+
`projectUuid: ${n.projectUuid}). Use chorus_get_task and chorus_get_comments to see the ` +
|
|
164
|
+
`verification feedback, then fix the issues.\n${mentionGuidance(n, "task")}`
|
|
165
|
+
);
|
|
166
|
+
case "resource_resumed":
|
|
167
|
+
// A user resumed a previously-interrupted wake (子3 — daemon-interrupt-resume).
|
|
168
|
+
// Resume is entity-generic (task / idea / proposal / document) and arrives as a
|
|
169
|
+
// synthetic dispatch off the reverse CONTROL channel — NOT a persisted
|
|
170
|
+
// notification — so it carries only entityType + entityUuid (no actor / title /
|
|
171
|
+
// project). Because the direct-idea transcript already exists on disk, the
|
|
172
|
+
// daemon's isNewSession probe selects `claude --resume <directIdeaUuid>`
|
|
173
|
+
// automatically, so the woken Claude continues the SAME session where it left
|
|
174
|
+
// off. It intentionally has no @mention (a self-resume has no actor to address).
|
|
175
|
+
return (
|
|
176
|
+
`[Chorus] Your work on this ${n.entityType} was RESUMED after an interrupt ` +
|
|
177
|
+
`(${n.entityType}Uuid: ${n.entityUuid}). Continue where you left off — re-check the ` +
|
|
178
|
+
`current state with the appropriate chorus_get_* tool (e.g. chorus_get_task / ` +
|
|
179
|
+
`chorus_get_idea) plus chorus_get_comments for any new feedback, then resume the work ` +
|
|
180
|
+
`you had started.`
|
|
181
|
+
);
|
|
182
|
+
case "task_verified":
|
|
183
|
+
return (
|
|
184
|
+
`[Chorus] Task '${n.entityTitle}' was verified and is now done (taskUuid: ${n.entityUuid}, ` +
|
|
185
|
+
`projectUuid: ${n.projectUuid}). Use chorus_get_unblocked_tasks (projectUuid: "${n.projectUuid}") ` +
|
|
186
|
+
`to see whether this unblocked any tasks that are now ready to start.`
|
|
187
|
+
);
|
|
188
|
+
case "human_instruction": {
|
|
189
|
+
// A human typed a free-text instruction for this daemon's session (子1 — the 子2
|
|
190
|
+
// UI send box, or a backfilled pending instruction). The canonical text lives on
|
|
191
|
+
// the server-side turn's promptText and is denormalized onto the wake
|
|
192
|
+
// notification as `instructionText`, so the daemon reads it WITHOUT an extra
|
|
193
|
+
// fetch and the event-router threads it here. The instruction is delivered on the
|
|
194
|
+
// session the daemon is already running (idea-anchored or the entity itself), so
|
|
195
|
+
// continuation is naturally `claude --resume` of that session. If the body is
|
|
196
|
+
// empty/missing there is nothing to act on — skip (no prompt) rather than spawn a
|
|
197
|
+
// contentless wake.
|
|
198
|
+
const instruction =
|
|
199
|
+
typeof n.instructionText === "string" ? n.instructionText.trim() : "";
|
|
200
|
+
if (!instruction) return null;
|
|
201
|
+
// Optional entity context: a human_instruction may be attached to an entity
|
|
202
|
+
// (task/idea/proposal/document) or be a bare session instruction. Include the
|
|
203
|
+
// entity hint only when present so the agent knows what it relates to.
|
|
204
|
+
const entityHint =
|
|
205
|
+
n.entityType && n.entityUuid
|
|
206
|
+
? ` (regarding ${n.entityType} ${n.entityUuid}` +
|
|
207
|
+
(n.projectUuid ? `, projectUuid: ${n.projectUuid}` : "") +
|
|
208
|
+
`)`
|
|
209
|
+
: "";
|
|
210
|
+
const actorHint =
|
|
211
|
+
n.actorName && n.actorType && n.actorUuid
|
|
212
|
+
? `\nWhen you have addressed it, reply with a comment @mentioning the requester: ` +
|
|
213
|
+
`@[${n.actorName}](${n.actorType}:${n.actorUuid})`
|
|
214
|
+
: "";
|
|
215
|
+
return (
|
|
216
|
+
`[Chorus] New instruction from a human${entityHint}:\n\n` +
|
|
217
|
+
`${instruction}\n\n` +
|
|
218
|
+
`Continue this session and act on the instruction above using the appropriate ` +
|
|
219
|
+
`chorus_* tools. Re-check the current state first (e.g. chorus_get_task / ` +
|
|
220
|
+
`chorus_get_idea / chorus_get_comments) if you need context.${actorHint}`
|
|
221
|
+
);
|
|
222
|
+
}
|
|
223
|
+
default:
|
|
224
|
+
return null;
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
/**
|
|
229
|
+
* Actions that produce a wake. Used by the router to decide whether to enqueue.
|
|
230
|
+
*
|
|
231
|
+
* Covers the notifications that imply the agent should act — an explicit
|
|
232
|
+
* @mention, assignment, lifecycle transitions it owns, and unblock signals.
|
|
233
|
+
* Deliberately NOT woken:
|
|
234
|
+
* - comment_added (fires for EVERY comment to the task's
|
|
235
|
+
* assignee+creator, not just ones directed at the
|
|
236
|
+
* agent — too noisy; an @mention is the real
|
|
237
|
+
* "I need you" signal and arrives as `mentioned`)
|
|
238
|
+
* - task_status_changed (high-frequency, usually a side effect of own work)
|
|
239
|
+
* - task_submitted_for_verify (reviewer/owner channel; verification is its own flow)
|
|
240
|
+
* - report_created (informational summary)
|
|
241
|
+
* The switch in buildPrompt is the source of truth — keep them in sync (a test
|
|
242
|
+
* asserts every WAKE_ACTIONS entry yields a non-null prompt).
|
|
243
|
+
*/
|
|
244
|
+
export const WAKE_ACTIONS = new Set([
|
|
245
|
+
"task_assigned",
|
|
246
|
+
"mentioned",
|
|
247
|
+
"elaboration_requested",
|
|
248
|
+
"elaboration_answered",
|
|
249
|
+
// add-elaboration-verify-wake: a human clicked "Verify Elaborate" — the elaboration is
|
|
250
|
+
// resolved and the idea is `elaborated`. This wakes the assigned daemon PM agent to WRITE
|
|
251
|
+
// THE PROPOSAL (distinct from elaboration_requested/answered, which mean "answer
|
|
252
|
+
// questions"). Arrives as a persisted notification (recipient = the idea's assigned agent),
|
|
253
|
+
// idea-rooted like the other elaboration wakes, so the session anchor/resume contract is
|
|
254
|
+
// unchanged. See buildPrompt's `elaboration_verified` case for the write-proposal prompt.
|
|
255
|
+
"elaboration_verified",
|
|
256
|
+
"proposal_rejected",
|
|
257
|
+
"proposal_approved",
|
|
258
|
+
"idea_claimed",
|
|
259
|
+
"task_reopened",
|
|
260
|
+
"task_verified",
|
|
261
|
+
// 子3 — daemon-interrupt-resume: a user-resumed wake re-dispatches through the
|
|
262
|
+
// wake path so the daemon continues the session via `--resume`. Entity-generic
|
|
263
|
+
// (task / idea / proposal / document); arrives via the reverse CONTROL channel as
|
|
264
|
+
// a synthetic dispatch, NOT a persisted notification.
|
|
265
|
+
"resource_resumed",
|
|
266
|
+
// 子1 — daemon-session-conversation: a human-typed instruction for the daemon's
|
|
267
|
+
// session. Arrives as a persisted notification (recipient = the daemon agent)
|
|
268
|
+
// carrying the free-text body in `instructionText`; the event-router threads that
|
|
269
|
+
// body into buildPrompt. NOTE: buildPrompt's human_instruction branch returns null
|
|
270
|
+
// when the body is empty/missing (nothing to act on) — so this action is a wake
|
|
271
|
+
// action only when it actually carries instruction text.
|
|
272
|
+
"human_instruction",
|
|
273
|
+
]);
|