@chorus-aidlc/chorus 0.19.0 → 0.19.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 +382 -383
- package/.next/standalone/.next/app-path-routes-manifest.json +37 -37
- package/.next/standalone/.next/build-manifest.json +5 -5
- package/.next/standalone/.next/prerender-manifest.json +30 -30
- package/.next/standalone/.next/server/app/(dashboard)/project-groups/[uuid]/page.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/project-groups/[uuid]/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/project-groups/[uuid]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/activity/page.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/activity/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/activity/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/[ideaUuid]/page.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/[ideaUuid]/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/[ideaUuid]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/page.js +2 -2
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page.js +2 -2
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/page.js +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]/graph/page.js +2 -2
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/graph/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/graph/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page.js +2 -2
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/new/page.js +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 +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/page.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/page.js +2 -2
- package/.next/standalone/.next/server/app/(dashboard)/projects/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/settings/page.js +2 -2
- package/.next/standalone/.next/server/app/(dashboard)/settings/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/settings/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/_not-found.html +2 -2
- package/.next/standalone/.next/server/app/_not-found.rsc +2 -2
- package/.next/standalone/.next/server/app/admin/companies/[uuid]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/admin/companies/new/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/admin/companies/new.html +2 -2
- package/.next/standalone/.next/server/app/admin/companies/new.rsc +2 -2
- package/.next/standalone/.next/server/app/admin/companies/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/admin/companies.html +2 -2
- package/.next/standalone/.next/server/app/admin/companies.rsc +2 -2
- package/.next/standalone/.next/server/app/admin/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/admin.html +2 -2
- package/.next/standalone/.next/server/app/admin.rsc +2 -2
- package/.next/standalone/.next/server/app/api/admin/companies/[uuid]/route.js +1 -1
- package/.next/standalone/.next/server/app/api/admin/companies/[uuid]/route.js.nft.json +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.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/admin/companies/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/admin/login/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/admin/session/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/agent-connections/route.js +1 -1
- package/.next/standalone/.next/server/app/api/agent-connections/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/agent-connections/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/agents/[uuid]/route.js +1 -1
- package/.next/standalone/.next/server/app/api/agents/[uuid]/route.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/api-keys/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/callback/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/check-default/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/company-oidc/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/default-login/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/identify/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/me/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/sync-token/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/comments/route.js +1 -1
- package/.next/standalone/.next/server/app/api/comments/route.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/connection-heartbeat/route.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon/connection-heartbeat/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/daemon/connection-heartbeat/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon/control/route.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon/control/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/daemon/control/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon/directory-request/report/route.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon/directory-request/report/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/daemon/directory-request/report/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon/execution-state/route.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon/execution-state/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/daemon/execution-state/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon/executions/route.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon/executions/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/daemon/executions/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon/pending-turns/route.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon/pending-turns/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/daemon/pending-turns/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon/report-interrupt/route.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon/report-interrupt/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/daemon/report-interrupt/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon/resume/route.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon/resume/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/daemon/resume/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon/transcript/route.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon/transcript/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/daemon/transcript/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon/turn-advance/route.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon/turn-advance/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/daemon/turn-advance/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon-directory-requests/[uuid]/route.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon-directory-requests/[uuid]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/daemon-directory-requests/[uuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon-directory-requests/route.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon-directory-requests/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/daemon-directory-requests/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/instruction/route.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/instruction/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/instruction/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/repoint/route.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/repoint/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/repoint/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/route.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon-sessions/ad-hoc/route.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon-sessions/ad-hoc/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/daemon-sessions/ad-hoc/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon-sessions/route.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon-sessions/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/daemon-sessions/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/documents/[uuid]/route.js +1 -1
- package/.next/standalone/.next/server/app/api/documents/[uuid]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/documents/[uuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/entities/[type]/[uuid]/root-idea/route.js +1 -1
- package/.next/standalone/.next/server/app/api/entities/[type]/[uuid]/root-idea/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/entities/[type]/[uuid]/root-idea/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/events/notifications/route.js +1 -1
- package/.next/standalone/.next/server/app/api/events/notifications/route.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 +2 -2
- 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_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/ideas/[uuid]/wake-preview/route.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/wake-preview/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/wake-preview/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/conversational/route.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/conversational/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/ideas/conversational/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/mcp/route.js +1 -1
- 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.js.nft.json +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.js.nft.json +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.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/project-groups/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/project-visits/pin/route.js +1 -1
- package/.next/standalone/.next/server/app/api/project-visits/pin/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/project-visits/pin/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/project-visits/route.js +1 -1
- package/.next/standalone/.next/server/app/api/project-visits/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/project-visits/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/project-visits/visit/route.js +1 -1
- package/.next/standalone/.next/server/app/api/project-visits/visit/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/project-visits/visit/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/activity/route.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/activity/route.js.nft.json +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]/agent-cwds/route.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/agent-cwds/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/agent-cwds/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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/summary/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/resource-graph/route.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/resource-graph/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/resource-graph/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/route.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/route.js.nft.json +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.js.nft.json +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/agent-cwd-options/route.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/agent-cwd-options/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/projects/agent-cwd-options/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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/proposals/[uuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/references/[uuid]/route.js +1 -1
- package/.next/standalone/.next/server/app/api/references/[uuid]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/references/[uuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/references/route.js +1 -1
- package/.next/standalone/.next/server/app/api/references/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/references/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/search/route.js +1 -1
- package/.next/standalone/.next/server/app/api/search/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/search/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/session/route.js +1 -1
- package/.next/standalone/.next/server/app/api/session/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/session/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/sessions/[uuid]/route.js +1 -1
- package/.next/standalone/.next/server/app/api/sessions/[uuid]/route.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 +2 -2
- package/.next/standalone/.next/server/app/index.rsc +2 -2
- package/.next/standalone/.next/server/app/login/admin/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/login/admin.html +2 -2
- package/.next/standalone/.next/server/app/login/admin.rsc +2 -2
- package/.next/standalone/.next/server/app/login/callback/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/login/callback.html +2 -2
- package/.next/standalone/.next/server/app/login/callback.rsc +2 -2
- package/.next/standalone/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/login/pick-workspace/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/login/pick-workspace.html +2 -2
- package/.next/standalone/.next/server/app/login/pick-workspace.rsc +2 -2
- package/.next/standalone/.next/server/app/login.html +2 -2
- package/.next/standalone/.next/server/app/login.rsc +2 -2
- package/.next/standalone/.next/server/app/onboarding/page.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 +2 -2
- package/.next/standalone/.next/server/app/onboarding.rsc +3 -3
- package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/projects.html +2 -2
- package/.next/standalone/.next/server/app/projects.rsc +4 -4
- package/.next/standalone/.next/server/app/settings.html +2 -2
- package/.next/standalone/.next/server/app/settings.rsc +4 -4
- package/.next/standalone/.next/server/app-paths-manifest.json +37 -37
- package/.next/standalone/.next/server/chunks/1559.js +2 -2
- package/.next/standalone/.next/server/chunks/2572.js +2 -2
- 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/{7400.js → 3420.js} +1 -1
- package/.next/standalone/.next/server/chunks/{9848.js → 38.js} +3 -3
- package/.next/standalone/.next/server/chunks/4672.js +6 -0
- package/.next/standalone/.next/server/chunks/4827.js +1 -1
- package/.next/standalone/.next/server/chunks/5245.js +1 -1
- package/.next/standalone/.next/server/chunks/5576.js +1 -0
- package/.next/standalone/.next/server/chunks/6113.js +1 -1
- package/.next/standalone/.next/server/chunks/{6607.js → 6125.js} +1 -1
- package/.next/standalone/.next/server/chunks/6506.js +39 -3
- package/.next/standalone/.next/server/chunks/6509.js +1 -0
- package/.next/standalone/.next/server/chunks/6515.js +2 -2
- package/.next/standalone/.next/server/chunks/657.js +1 -0
- package/.next/standalone/.next/server/chunks/{5489.js → 661.js} +44 -8
- package/.next/standalone/.next/server/chunks/6654.js +1 -0
- package/.next/standalone/.next/server/chunks/6737.js +1 -1
- package/.next/standalone/.next/server/chunks/679.js +1 -1
- package/.next/standalone/.next/server/chunks/{2516.js → 7258.js} +1 -1
- package/.next/standalone/.next/server/chunks/7368.js +1 -1
- package/.next/standalone/.next/server/chunks/7530.js +1 -1
- package/.next/standalone/.next/server/chunks/7578.js +1 -1
- package/.next/standalone/.next/server/chunks/8017.js +1 -0
- package/.next/standalone/.next/server/chunks/8437.js +1 -0
- package/.next/standalone/.next/server/chunks/{6449.js → 8566.js} +1 -1
- package/.next/standalone/.next/server/chunks/920.js +1 -1
- package/.next/standalone/.next/server/chunks/9213.js +1 -1
- package/.next/standalone/.next/server/chunks/9378.js +1 -1
- package/.next/standalone/.next/server/chunks/951.js +88 -1
- package/.next/standalone/.next/server/chunks/9670.js +1 -0
- package/.next/standalone/.next/server/chunks/9931.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/pages/404.html +2 -2
- package/.next/standalone/.next/server/pages/500.html +1 -1
- package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/server-reference-manifest.json +1 -1
- package/.next/standalone/.next/static/chunks/{15183-3f43af926186f7ef.js → 10488-d518e8ce8ae45724.js} +6 -6
- package/.next/standalone/.next/static/chunks/11595.b2b74d1d1d0ae9d9.js +1 -0
- package/.next/standalone/.next/static/chunks/17081-63e2cad8c15da2fb.js +1 -0
- package/.next/standalone/.next/static/chunks/2069-68d93343e4ca252e.js +1 -0
- package/.next/standalone/.next/static/chunks/27370-f998ed24dd4fa975.js +1 -0
- package/.next/standalone/.next/static/chunks/33456.978e5f47d1c8eb93.js +1 -0
- package/.next/standalone/.next/static/chunks/46437-88abf056c31c7e4e.js +1 -0
- package/.next/standalone/.next/static/chunks/48365-13b8e43016ba16a4.js +1 -0
- package/.next/standalone/.next/static/chunks/4860.79d6eefc2861716f.js +1 -0
- package/.next/standalone/.next/static/chunks/56863-a2cc92f9ca49f0f8.js +1 -0
- package/.next/standalone/.next/static/chunks/69398-c2f73fe154aaee76.js +1 -0
- package/.next/standalone/.next/static/chunks/{26020-7b4756ba0aa906cf.js → 71522-de2b2a9d8e5059e1.js} +1 -1
- package/.next/standalone/.next/static/chunks/71890-e6c13ce1debd87c2.js +1 -0
- package/.next/standalone/.next/static/chunks/71921-f6754331cd35fa5a.js +1 -0
- package/.next/standalone/.next/static/chunks/7777-18527b954e3c5557.js +1 -0
- package/.next/standalone/.next/static/chunks/79919-d423af700ae83862.js +1 -0
- package/.next/standalone/.next/static/chunks/83749-f797272bf30fc2f4.js +10 -0
- package/.next/standalone/.next/static/chunks/91796-d235607f577fbaeb.js +1 -0
- package/.next/standalone/.next/static/chunks/91907-a4182d1a3c870d0f.js +1 -0
- package/.next/standalone/.next/static/chunks/99373.e659954ff5148796.js +1 -0
- package/.next/standalone/.next/static/chunks/99540-99af558190f96511.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/layout-adf9dbdf339e9038.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/project-groups/[uuid]/{page-82e90e222d6bc547.js → page-cf8ff072a8bc7409.js} +1 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/dashboard/page-00d18e26961cee2f.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page-9ed4d7d4f5897de0.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/page-9d6d86299f2fadd9.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/graph/page-487d071317ae5e6d.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page-b18a2aba2c4f4f1c.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/new/page-32149a823e7abf42.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/page-0ac33f9146fc53c5.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/{page-301f21a3ae52e318.js → page-7cb8a91f6ca34ba8.js} +1 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/tasks/{page-dd123990c14e9768.js → page-6466141ca355d9a4.js} +1 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/{page-069c9738e516436b.js → page-793285a6cf214896.js} +1 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/settings/page-ba19aec7fde5086c.js +1 -0
- package/.next/standalone/.next/static/chunks/app/onboarding/{page-5914ff3d878a3c34.js → page-323e1d93218758c5.js} +1 -1
- package/.next/standalone/.next/static/chunks/{webpack-de8a36d232a91d6b.js → webpack-ec441a05567c82b0.js} +1 -1
- package/.next/standalone/.next/static/css/652fcc1f1ab231c8.css +1 -0
- package/.next/standalone/package.json +1 -1
- package/.next/standalone/public/chorus-plugin/.claude-plugin/plugin.json +1 -1
- package/.next/standalone/public/chorus-plugin/bin/chorus-api.sh +1 -1
- package/.next/standalone/public/chorus-plugin/skills/brainstorm/SKILL.md +5 -1
- package/.next/standalone/public/chorus-plugin/skills/chorus/SKILL.md +16 -1
- package/.next/standalone/public/chorus-plugin/skills/chorus-cli/SKILL.md +1 -1
- package/.next/standalone/public/chorus-plugin/skills/develop/SKILL.md +1 -1
- package/.next/standalone/public/chorus-plugin/skills/docs/SKILL.md +1 -1
- package/.next/standalone/public/chorus-plugin/skills/idea/SKILL.md +13 -1
- package/.next/standalone/public/chorus-plugin/skills/openspec-aware/SKILL.md +1 -1
- package/.next/standalone/public/chorus-plugin/skills/orchestrate/SKILL.md +1 -1
- package/.next/standalone/public/chorus-plugin/skills/proposal/SKILL.md +9 -1
- package/.next/standalone/public/chorus-plugin/skills/quick-dev/SKILL.md +1 -1
- package/.next/standalone/public/chorus-plugin/skills/research/SKILL.md +51 -0
- package/.next/standalone/public/chorus-plugin/skills/review/SKILL.md +1 -1
- package/.next/standalone/public/chorus-plugin/skills/spec-lite/SKILL.md +1 -1
- package/.next/standalone/public/chorus-plugin/skills/yolo/SKILL.md +5 -1
- package/.next/standalone/public/kiro-plugin/.kiro/agents/chorus.json +1 -0
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-brainstorm/SKILL.md +5 -1
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-cli/SKILL.md +1 -1
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-develop/SKILL.md +1 -1
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-docs/SKILL.md +1 -1
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-idea/SKILL.md +13 -1
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-openspec-aware/SKILL.md +1 -1
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-orchestrate/SKILL.md +1 -1
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-proposal/SKILL.md +9 -1
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-quick-dev/SKILL.md +1 -1
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-research/SKILL.md +51 -0
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-review/SKILL.md +1 -1
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-spec-lite/SKILL.md +1 -1
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-yolo/SKILL.md +5 -1
- package/.next/standalone/public/kiro-plugin/.kiro/steering/chorus.md +16 -1
- package/.next/standalone/public/kiro-plugin/bin/chorus-api.sh +1 -1
- package/.next/standalone/public/kiro-plugin/manifest.txt +1 -0
- package/.next/standalone/public/skill/brainstorm-chorus/SKILL.md +4 -0
- package/.next/standalone/public/skill/chorus/SKILL.md +20 -2
- package/.next/standalone/public/skill/idea-chorus/SKILL.md +12 -0
- package/.next/standalone/public/skill/package.json +1 -0
- package/.next/standalone/public/skill/proposal-chorus/SKILL.md +8 -0
- package/.next/standalone/public/skill/research-chorus/SKILL.md +51 -0
- package/.next/standalone/public/skill/yolo-chorus/SKILL.md +4 -0
- package/README.ja.md +3 -11
- package/README.ko.md +3 -11
- package/README.md +3 -11
- package/README.zh.md +3 -11
- package/cli/control-handler.mjs +20 -0
- package/cli/daemon-rest-client.mjs +7 -4
- package/cli/event-router.mjs +65 -3
- package/cli/operation-contract.mjs +3 -0
- package/cli/operation-prompts.mjs +99 -0
- package/cli/operation.mjs +46 -0
- package/cli/prompts.mjs +7 -0
- package/cli/wake-queue.mjs +5 -1
- package/cli/waker.mjs +127 -4
- package/package.json +1 -1
- package/prisma/migrations/20260927073000_add_daemon_operation_payload/migration.sql +1 -0
- package/prisma/schema.prisma +3 -2
- package/.next/standalone/.next/server/chunks/1318.js +0 -1
- package/.next/standalone/.next/server/chunks/1416.js +0 -88
- package/.next/standalone/.next/server/chunks/1683.js +0 -1
- package/.next/standalone/.next/server/chunks/3341.js +0 -1
- package/.next/standalone/.next/server/chunks/457.js +0 -1
- package/.next/standalone/.next/server/chunks/5300.js +0 -1
- package/.next/standalone/.next/server/chunks/8044.js +0 -1
- package/.next/standalone/.next/server/chunks/8185.js +0 -1
- package/.next/standalone/.next/server/chunks/8454.js +0 -1
- package/.next/standalone/.next/static/chunks/11595.f080a1d100972212.js +0 -1
- package/.next/standalone/.next/static/chunks/17099-936da9caf4c119b8.js +0 -1
- package/.next/standalone/.next/static/chunks/17562-56f932146e9e6c94.js +0 -10
- package/.next/standalone/.next/static/chunks/18751-3616e33050e9611e.js +0 -1
- package/.next/standalone/.next/static/chunks/27370-c056dee2016c9124.js +0 -1
- package/.next/standalone/.next/static/chunks/31308-bb4a97b3f39c22dd.js +0 -1
- package/.next/standalone/.next/static/chunks/33456.20313bd67a5c41cc.js +0 -1
- package/.next/standalone/.next/static/chunks/35432-5c245212c7595169.js +0 -1
- package/.next/standalone/.next/static/chunks/44437-d13183f50281116f.js +0 -1
- package/.next/standalone/.next/static/chunks/45024-eb7c062d13d9fe08.js +0 -1
- package/.next/standalone/.next/static/chunks/4860.3b555a398cdffb19.js +0 -1
- package/.next/standalone/.next/static/chunks/59713-426f81b6576173d8.js +0 -1
- package/.next/standalone/.next/static/chunks/60351-bdef539874e5027e.js +0 -1
- package/.next/standalone/.next/static/chunks/67580-8733964ab2c7fc0e.js +0 -1
- package/.next/standalone/.next/static/chunks/7777-8b1b6681256e1534.js +0 -1
- package/.next/standalone/.next/static/chunks/78155-db70d9684a1e77a2.js +0 -1
- package/.next/standalone/.next/static/chunks/79919-1e7e294a06f2c4a0.js +0 -1
- package/.next/standalone/.next/static/chunks/94643-e54eff17e941a93b.js +0 -1
- package/.next/standalone/.next/static/chunks/99373.b8a95d1bec5ad4e7.js +0 -1
- package/.next/standalone/.next/static/chunks/99733-5a2e39f57fbda32d.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/layout-072a6b8f0a48b1b6.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/dashboard/page-198a3ff89ae871b9.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page-a506de82e8997714.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/page-dc54fafa22d21863.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/graph/page-6eb5d3cb036a78e0.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page-69c6f0190623e19b.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/new/page-2a52f747e6fac5a7.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/page-22cce567a85ea291.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/settings/page-548231f8c9856489.js +0 -1
- package/.next/standalone/.next/static/css/44f13b43a3de716d.css +0 -1
- /package/.next/standalone/.next/static/{Pmji9kEq8T2lM6AKQkZji → AWk31w7ryFKaxOnUlIeo2}/_buildManifest.js +0 -0
- /package/.next/standalone/.next/static/{Pmji9kEq8T2lM6AKQkZji → AWk31w7ryFKaxOnUlIeo2}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
// Shared by the server compatibility snapshot and payload-driven CLI execution.
|
|
2
|
+
// Keep historical entry prefixes: older clients use the Research prefix for isolation.
|
|
3
|
+
import { RESEARCH_INSTRUCTION_PREFIX } from "./operation-contract.mjs";
|
|
4
|
+
|
|
5
|
+
const PROJECT_INSTRUCTION_LABEL_MAX_CHARS = 200;
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Compose the conversational-idea wake instruction (template v2 — the REVIEWED CONTRACT
|
|
9
|
+
* between the conversational create-idea entry and the woken daemon agent, superseding
|
|
10
|
+
* the client-side create→claim template of add-conversational-idea-entry).
|
|
11
|
+
*
|
|
12
|
+
* The idea is PRE-CREATED and already instance-assigned + elaborating, so both templates
|
|
13
|
+
* direct EDIT (never create, never claim — a claim would fail on the existing assignee).
|
|
14
|
+
* - `elaborate` (default): edit → optional research → elaboration → panel guidance → end turn.
|
|
15
|
+
* - `decompose`: edit the CONTAINER → keep isContainer → one lightweight scope-clarifying
|
|
16
|
+
* elaboration → propose candidate CHILDREN as a structured elaboration round (one
|
|
17
|
+
* single-select question per child, ≤15/round, never a multi-select) → end turn → on the
|
|
18
|
+
* confirm re-wake create each accepted child via chorus_pm_create_idea with
|
|
19
|
+
* parentUuid=<container>, children starting `open`, no auto-elaboration; the container's
|
|
20
|
+
* own status stays `elaborated`. The confirm re-wake rides the EXISTING
|
|
21
|
+
* `elaboration_answered` wake — no new wake/notification action is introduced.
|
|
22
|
+
*
|
|
23
|
+
* English (agent-facing, matching cli/prompts.mjs precedent); the user's description
|
|
24
|
+
* passes through VERBATIM under the delimiter. Exported for unit tests: the template's
|
|
25
|
+
* wording is code, and any change is a review-visible diff.
|
|
26
|
+
* @param {{ideaUuid: string, projectUuid: string, projectName?: string|null,
|
|
27
|
+
* descriptionText: string, mode?: 'elaborate'|'decompose', researchFirst?: boolean}} params
|
|
28
|
+
*/
|
|
29
|
+
export function composeConversationalIdeaInstruction(params) {
|
|
30
|
+
// Name is display sugar; bound this user-controlled metadata independently of
|
|
31
|
+
// the description. The complete UUID remains the authoritative machine anchor.
|
|
32
|
+
const projectName = params.projectName?.trim();
|
|
33
|
+
const displayName = projectName && projectName.length > PROJECT_INSTRUCTION_LABEL_MAX_CHARS
|
|
34
|
+
? `${projectName.slice(0, PROJECT_INSTRUCTION_LABEL_MAX_CHARS - 1)}…`
|
|
35
|
+
: projectName;
|
|
36
|
+
const projectLabel = displayName
|
|
37
|
+
? `"${displayName}" (projectUuid: ${params.projectUuid})`
|
|
38
|
+
: `projectUuid: ${params.projectUuid}`;
|
|
39
|
+
|
|
40
|
+
const researchInstruction = [
|
|
41
|
+
params.researchFirst
|
|
42
|
+
? "The user explicitly requested lightweight research before clarification."
|
|
43
|
+
: "Research is optional: use automatic judgment for a concrete, externally verifiable factual gap.",
|
|
44
|
+
"An explicit request to skip research in the user's instructions takes precedence.",
|
|
45
|
+
"Follow the shared research skill before the first formal elaboration: one bounded pass, approximately 2–5 minutes, at most 5 deeply read relevant sources; reuse existing evidence.",
|
|
46
|
+
"Save useful findings in the existing Idea content, preserving the user's meaning, and attach evidence with real ref:UUID citations. Do not create or claim this already-created Idea.",
|
|
47
|
+
"If tools are unavailable, results are empty, or the budget is exhausted, record the limitation and continue the normal steps in this turn. Do not research user preferences; ask through the elaboration panel when needed.",
|
|
48
|
+
"This initialization request applies once, not on every later wake or stage re-entry.",
|
|
49
|
+
].join(" ");
|
|
50
|
+
|
|
51
|
+
if (params.mode === "decompose") {
|
|
52
|
+
return [
|
|
53
|
+
`[Chorus container-decompose entry] A new CONTAINER idea has been PRE-CREATED for project ${projectLabel} from the user's description below, and it is already assigned to you (status: elaborating, isContainer: true).`,
|
|
54
|
+
` ideaUuid: ${params.ideaUuid}`,
|
|
55
|
+
``,
|
|
56
|
+
`This conversation IS that container idea's root session. The user wants help DECOMPOSING it into child ideas. Do the following, in order:`,
|
|
57
|
+
`1. Edit the container via chorus_edit_idea: derive a concise title from the description and polish the content (keep the user's meaning). The current title is a placeholder.`,
|
|
58
|
+
`2. Ensure it stays a container: it was pre-created with isContainer=true — do NOT clear that flag (a container groups its child ideas and MUST NOT get a proposal of its own).`,
|
|
59
|
+
`Before step 3: ${researchInstruction}`,
|
|
60
|
+
`3. Run ONE lightweight elaboration round (chorus_pm_start_elaboration) to clarify the decomposition scope/dimension — how to slice the work into children. Keep it short; you may self-answer in headless or ask the user, then continue.`,
|
|
61
|
+
`4. Propose the candidate child ideas AS A STRUCTURED ELABORATION ROUND (chorus_pm_start_elaboration) for the user to review/edit/confirm — use ONE elaboration question PER proposed child (the child's title as the question text, a short rationale as its description), single-select. Elaboration questions are single-select and a round is capped at 15 questions, so propose at most 15 candidates per round and NEVER a single multi-select question; if you need more children, propose them across additional rounds. Do NOT create any child ideas yet — this round is the preview the user accepts/edits/declines per child.`,
|
|
62
|
+
`5. End the turn. The user's answers in the idea's elaboration panel will wake this same conversation (the existing elaboration-answered wake).`,
|
|
63
|
+
`6. On that re-wake, create each ACCEPTED child via chorus_pm_create_idea with parentUuid=${params.ideaUuid}. Each child starts in the "open" state — do NOT auto-elaborate them. The container's OWN status stays "elaborated"; creating children does not advance or alter it.`,
|
|
64
|
+
``,
|
|
65
|
+
`Reference reflex: whenever an external link is evidence for this work (a precedent issue/PR, a reference implementation, official docs, a paper/blog), attach it via references — prefer the inline references[] param at creation time over a post-hoc chorus_add_reference.`,
|
|
66
|
+
``,
|
|
67
|
+
`--- User's idea description ---`,
|
|
68
|
+
params.descriptionText,
|
|
69
|
+
].join("\n");
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
return [
|
|
73
|
+
`[Chorus conversational idea entry] A new idea has been PRE-CREATED for project ${projectLabel} from the user's description below, and it is already assigned to you (status: elaborating).`,
|
|
74
|
+
` ideaUuid: ${params.ideaUuid}`,
|
|
75
|
+
``,
|
|
76
|
+
`This conversation IS that idea's root session — its elaboration and lifecycle wakes will continue here. Do the following, in order:`,
|
|
77
|
+
`1. Edit the idea via chorus_edit_idea: derive a concise title from the description and polish the content (keep the user's meaning; you may restructure). The current title is a placeholder.`,
|
|
78
|
+
`2. ${researchInstruction}`,
|
|
79
|
+
`3. After that optional step, start elaboration on the idea (chorus_pm_start_elaboration), following the idea skill — do NOT wait for another wake. Post a short summary of your questions in this conversation and direct the user to answer in the idea's elaboration panel.`,
|
|
80
|
+
`4. End the turn. The user's panel answers will wake this same conversation.`,
|
|
81
|
+
``,
|
|
82
|
+
`Reference reflex: whenever an external link is evidence for this idea (a precedent issue/PR, a reference implementation, official docs, a paper/blog), attach it via references — prefer the inline references[] param at creation time over a post-hoc chorus_add_reference.`,
|
|
83
|
+
``,
|
|
84
|
+
`--- User's idea description ---`,
|
|
85
|
+
params.descriptionText,
|
|
86
|
+
].join("\n");
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/** @param {string} ideaUuid */
|
|
90
|
+
export function composeResearchInstruction(ideaUuid) {
|
|
91
|
+
return [
|
|
92
|
+
`${RESEARCH_INSTRUCTION_PREFIX} Explicit, one-time research request for ideaUuid: ${ideaUuid}.`,
|
|
93
|
+
"This is the existing Idea's root conversation. Before research and again before saving, re-read the Idea, ALL related proposals/tasks and execution history including theme descendants. If development has begun, report that the stage changed and STOP without research or edits.",
|
|
94
|
+
"Invoke the shared research skill for ONE bounded pass (approximately 2–5 minutes, at most 5 deeply read sources). Reuse existing evidence. An explicit user instruction to skip research takes precedence. Tools unavailable, empty results, or exhausted budget: record the limitation and stop.",
|
|
95
|
+
"Attach useful sources through existing references and obtain real UUIDs. Read the latest Idea content immediately before saving and MERGE concise findings, source citations using ref:UUID, implications, unknowns, and the stopping reason; preserve user text and existing evidence.",
|
|
96
|
+
"Preserve all elaboration rounds, questions, answers and resolved state. Do not create or claim an Idea, start elaboration, submit or modify a Proposal, change task status, or start development. If findings affect an approved proposal, only record the impact and revision needs in the Idea.",
|
|
97
|
+
"Report the findings and END this turn. This menu invocation does not resume the Idea or Proposal workflow. A later explicit Research request may run another bounded pass.",
|
|
98
|
+
].join("\n");
|
|
99
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { CONVERSATIONAL_IDEA_DESCRIPTION_MAX_CHARS, RESEARCH_INSTRUCTION_PREFIX } from "./operation-contract.mjs";
|
|
2
|
+
import { composeConversationalIdeaInstruction, composeResearchInstruction } from "./operation-prompts.mjs";
|
|
3
|
+
|
|
4
|
+
// Canonical operations are identified by their trigger, never by prompt text.
|
|
5
|
+
export const OPERATION_ACTIONS = new Set(["idea_creation_requested", "research_requested"]);
|
|
6
|
+
|
|
7
|
+
const identity = (value) => typeof value === "string" && value.length > 0 && value.length <= 100;
|
|
8
|
+
|
|
9
|
+
/** Validate before dedup/admission. Routing authority always comes from the session. */
|
|
10
|
+
export function validateOperation(trigger, payload, { sessionId, directIdeaUuid, projectUuid }) {
|
|
11
|
+
const creation = trigger === "idea_creation_requested";
|
|
12
|
+
const fields = creation
|
|
13
|
+
? ["version", "kind", "ideaUuid", "projectUuid", "mode", "researchFirst", "descriptionText"]
|
|
14
|
+
: ["version", "kind", "ideaUuid"];
|
|
15
|
+
if (!OPERATION_ACTIONS.has(trigger) ||
|
|
16
|
+
!payload || typeof payload !== "object" || Array.isArray(payload) ||
|
|
17
|
+
Object.keys(payload).length !== fields.length ||
|
|
18
|
+
fields.some((field) => !Object.hasOwn(payload, field)) ||
|
|
19
|
+
payload.version !== 1 || payload.kind !== (creation ? "idea_creation" : "research") ||
|
|
20
|
+
!identity(payload.ideaUuid) || payload.ideaUuid !== directIdeaUuid ||
|
|
21
|
+
sessionId !== directIdeaUuid ||
|
|
22
|
+
(creation && (!identity(payload.projectUuid) ||
|
|
23
|
+
(projectUuid !== undefined && payload.projectUuid !== projectUuid) ||
|
|
24
|
+
!["elaborate", "decompose"].includes(payload.mode) ||
|
|
25
|
+
typeof payload.researchFirst !== "boolean" ||
|
|
26
|
+
typeof payload.descriptionText !== "string" || !payload.descriptionText.trim() ||
|
|
27
|
+
payload.descriptionText.length > CONVERSATIONAL_IDEA_DESCRIPTION_MAX_CHARS))) {
|
|
28
|
+
throw new Error("Operation protocol error: invalid payload or session/Idea identity mismatch");
|
|
29
|
+
}
|
|
30
|
+
return payload;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export function isExactOperation(n) {
|
|
34
|
+
return OPERATION_ACTIONS.has(n?.action) ||
|
|
35
|
+
(n?.action === "human_instruction" &&
|
|
36
|
+
n.instructionText?.startsWith(RESEARCH_INSTRUCTION_PREFIX));
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export function buildOperationPrompt(n) {
|
|
40
|
+
const p = validateOperation(n.action, n.operationPayload, {
|
|
41
|
+
sessionId: n.sessionId, directIdeaUuid: n.directIdeaUuid, projectUuid: n.projectUuid,
|
|
42
|
+
});
|
|
43
|
+
return p.kind === "research"
|
|
44
|
+
? composeResearchInstruction(p.ideaUuid)
|
|
45
|
+
: composeConversationalIdeaInstruction(p);
|
|
46
|
+
}
|
package/cli/prompts.mjs
CHANGED
|
@@ -13,6 +13,8 @@
|
|
|
13
13
|
// is deliberately no --append-system-prompt; see claude-spawner.mjs). The preamble
|
|
14
14
|
// also names the CHORUS_DAEMON_HEADLESS=1 env signal the spawner sets.
|
|
15
15
|
|
|
16
|
+
import { buildOperationPrompt } from "./operation.mjs";
|
|
17
|
+
|
|
16
18
|
/**
|
|
17
19
|
* @typedef {Object} NotificationDetail
|
|
18
20
|
* @property {string} uuid
|
|
@@ -463,6 +465,9 @@ function buildPromptBody(n) {
|
|
|
463
465
|
`chorus_get_idea / chorus_get_comments) if you need context.${actorHint}`
|
|
464
466
|
);
|
|
465
467
|
}
|
|
468
|
+
case "idea_creation_requested":
|
|
469
|
+
case "research_requested":
|
|
470
|
+
return buildOperationPrompt(n);
|
|
466
471
|
default:
|
|
467
472
|
return null;
|
|
468
473
|
}
|
|
@@ -523,4 +528,6 @@ export const WAKE_ACTIONS = new Set([
|
|
|
523
528
|
// when the body is empty/missing (nothing to act on) — so this action is a wake
|
|
524
529
|
// action only when it actually carries instruction text.
|
|
525
530
|
"human_instruction",
|
|
531
|
+
"idea_creation_requested",
|
|
532
|
+
"research_requested",
|
|
526
533
|
]);
|
package/cli/wake-queue.mjs
CHANGED
|
@@ -144,7 +144,11 @@ export class WakeQueue {
|
|
|
144
144
|
}
|
|
145
145
|
// Coalesce: take everything pending for this key right now as one batch.
|
|
146
146
|
// Items that arrive after this splice accumulate for the NEXT batch.
|
|
147
|
-
|
|
147
|
+
// An isolated instruction (Research) keeps the same serial lane but cannot
|
|
148
|
+
// merge with lifecycle wakes before or after it.
|
|
149
|
+
const boundary = queue.findIndex((item) => item?.isolated === true);
|
|
150
|
+
const count = boundary === 0 ? 1 : boundary > 0 ? boundary : queue.length;
|
|
151
|
+
const items = queue.splice(0, count);
|
|
148
152
|
this.running.add(key);
|
|
149
153
|
this.activeCount++;
|
|
150
154
|
|
package/cli/waker.mjs
CHANGED
|
@@ -19,6 +19,7 @@
|
|
|
19
19
|
// wake. A failure is logged and swallowed — it must never crash the daemon
|
|
20
20
|
// (no-silent-errors: visible log, no throw).
|
|
21
21
|
|
|
22
|
+
import { OPERATION_ACTIONS, isExactOperation, validateOperation } from "./operation.mjs";
|
|
22
23
|
import { buildBatchPrompt } from "./prompts.mjs";
|
|
23
24
|
import { writeMcpConfig } from "./mcp-config.mjs";
|
|
24
25
|
import { isNewSession, SESSION_CONFLICT_FAILURE } from "./claude-spawner.mjs";
|
|
@@ -108,6 +109,9 @@ export class Waker {
|
|
|
108
109
|
// (including daemon restart) starts with an empty guard.
|
|
109
110
|
/** @type {Set<string>} */
|
|
110
111
|
this.deterministicConflictGuards = new Set();
|
|
112
|
+
// Retry exact launch-abort reports after a network outage. These timers carry
|
|
113
|
+
// delivery cleanup only; the existing server turn remains the lifecycle authority.
|
|
114
|
+
this.operationRecoveryTimers = new Set();
|
|
111
115
|
// Daemon graceful-shutdown flag (fix-daemon-exit-orphan-running-turn). Set once
|
|
112
116
|
// by interruptAll() and never cleared — a shutting-down Waker is on its way out.
|
|
113
117
|
// The wake exit path reads it to report the TURN as interrupted(shutdown), and to
|
|
@@ -188,6 +192,8 @@ export class Waker {
|
|
|
188
192
|
*/
|
|
189
193
|
interruptAll() {
|
|
190
194
|
this.shuttingDown = true;
|
|
195
|
+
for (const timer of this.operationRecoveryTimers) clearTimeout(timer);
|
|
196
|
+
this.operationRecoveryTimers.clear();
|
|
191
197
|
for (const [key, entry] of this.executions) {
|
|
192
198
|
if (entry.status !== "running" || !entry.child) continue;
|
|
193
199
|
try {
|
|
@@ -366,9 +372,27 @@ export class Waker {
|
|
|
366
372
|
*/
|
|
367
373
|
async wakeBatch(notifications, key, attribution) {
|
|
368
374
|
let cfg;
|
|
375
|
+
let operationTurnUuid = null;
|
|
369
376
|
const receivedList = Array.isArray(notifications) ? notifications : [];
|
|
377
|
+
// Defense in depth for callers bypassing the router: malformed operations
|
|
378
|
+
// never clear a conflict guard, request admission or settle a pending turn.
|
|
379
|
+
try {
|
|
380
|
+
for (const n of receivedList.filter((n) => OPERATION_ACTIONS.has(n?.action))) {
|
|
381
|
+
validateOperation(n.action, n.operationPayload, {
|
|
382
|
+
sessionId: n.sessionId, directIdeaUuid: attribution?.directIdeaUuid,
|
|
383
|
+
projectUuid: n.projectUuid,
|
|
384
|
+
});
|
|
385
|
+
if (n.entityUuid !== n.directIdeaUuid || n.entityType !== "idea" ||
|
|
386
|
+
n.directIdeaUuid !== attribution?.directIdeaUuid) {
|
|
387
|
+
throw new Error("Operation protocol error: execution identity mismatch");
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
} catch (err) {
|
|
391
|
+
this.logger.warn(`[Chorus] operation remains pending and retryable: ${err}`);
|
|
392
|
+
return;
|
|
393
|
+
}
|
|
370
394
|
const hasFreshHumanInstruction = receivedList.some(
|
|
371
|
-
(n) => n?.action === "human_instruction",
|
|
395
|
+
(n) => n?.action === "human_instruction" || OPERATION_ACTIONS.has(n?.action),
|
|
372
396
|
);
|
|
373
397
|
if (hasFreshHumanInstruction && this.deterministicConflictGuards.delete(key)) {
|
|
374
398
|
this.logger.info(
|
|
@@ -437,6 +461,8 @@ export class Waker {
|
|
|
437
461
|
const startMs = Date.now();
|
|
438
462
|
const target = entity ? `${entity.entityType}:${entity.entityUuid}` : key;
|
|
439
463
|
const sessionId = directIdeaUuid ?? first?.entityUuid ?? null;
|
|
464
|
+
const operations = list.filter(isExactOperation);
|
|
465
|
+
const operationRequestUuid = batchSize === 1 && operations.length ? first.turnUuid : null;
|
|
440
466
|
const requestedRuntimeCwd =
|
|
441
467
|
typeof first?.runtimeCwd === "string" && first.runtimeCwd
|
|
442
468
|
? first.runtimeCwd
|
|
@@ -447,6 +473,10 @@ export class Waker {
|
|
|
447
473
|
const arrivalAction =
|
|
448
474
|
batchSize > 1 ? `coalesced batch of ${batchSize}` : first?.action;
|
|
449
475
|
try {
|
|
476
|
+
if (operations.length && (!operationRequestUuid || !sessionId || batchSize !== 1)) {
|
|
477
|
+
this.logger.warn(`[Chorus] Operation requires an isolated, exact pending turn — skipping ${key}`);
|
|
478
|
+
return;
|
|
479
|
+
}
|
|
450
480
|
const prompt = buildBatchPrompt(list);
|
|
451
481
|
if (!prompt) {
|
|
452
482
|
this.logger.info(`[Chorus] no wake prompt for ${arrivalAction} on ${key} — skipping`);
|
|
@@ -475,6 +505,7 @@ export class Waker {
|
|
|
475
505
|
status: "running",
|
|
476
506
|
startedAt: new Date().toISOString(),
|
|
477
507
|
child: null,
|
|
508
|
+
...(operationRequestUuid ? { operationTurnUuid: operationRequestUuid } : {}),
|
|
478
509
|
});
|
|
479
510
|
this.#emitExecutionChange();
|
|
480
511
|
}
|
|
@@ -523,6 +554,39 @@ export class Waker {
|
|
|
523
554
|
this.logger.info(`[Chorus] cwd=${cwd} action=${arrivalAction} root=${rootIdeaUuid ?? "(none)"}`);
|
|
524
555
|
}
|
|
525
556
|
|
|
557
|
+
// The server's atomic pending->running edge rechecks Research eligibility
|
|
558
|
+
// under the same lock as development acceptance. Await admission BEFORE any
|
|
559
|
+
// backend can spawn; an offline/rejected/missing reporter must fail closed.
|
|
560
|
+
if (operations.length) {
|
|
561
|
+
if (execKey && this.interrupting.has(execKey)) {
|
|
562
|
+
await this.#retireUnstartedOperation({
|
|
563
|
+
sessionId, turnUuid: operationRequestUuid, status: "interrupted",
|
|
564
|
+
interruptedReason: "user",
|
|
565
|
+
});
|
|
566
|
+
return;
|
|
567
|
+
}
|
|
568
|
+
const admission = await this.advanceTurn({
|
|
569
|
+
sessionId, turnUuid: first.turnUuid, status: "running", coalescedCount: 1,
|
|
570
|
+
entityType: entity?.entityType ?? null,
|
|
571
|
+
entityUuid: entity?.entityUuid ?? null,
|
|
572
|
+
});
|
|
573
|
+
if (!admission?.ok || admission.data?.turnUuid !== first.turnUuid) {
|
|
574
|
+
this.logger.warn(`[Chorus] Operation admission rejected or unavailable for ${key} — no subprocess started`);
|
|
575
|
+
// A conflict may belong to an already-running consumer; never abort it.
|
|
576
|
+
// Otherwise the response may have been lost AFTER admission committed.
|
|
577
|
+
// Retire this exact unstarted request whether it is pending or running.
|
|
578
|
+
if ((execKey && this.interrupting.has(execKey)) || ![404, 409].includes(admission?.status)) {
|
|
579
|
+
await this.#retireUnstartedOperation({
|
|
580
|
+
sessionId, turnUuid: operationRequestUuid, status: "interrupted",
|
|
581
|
+
interruptedReason: execKey && this.interrupting.has(execKey) ? "user" : "crash",
|
|
582
|
+
transcriptRelayError: "Operation launch admission unavailable; no subprocess started",
|
|
583
|
+
});
|
|
584
|
+
}
|
|
585
|
+
return;
|
|
586
|
+
}
|
|
587
|
+
operationTurnUuid = first.turnUuid;
|
|
588
|
+
}
|
|
589
|
+
|
|
526
590
|
cfg = this.writeMcpConfigFn(this.creds);
|
|
527
591
|
|
|
528
592
|
await this.hooks?.onSessionStart?.({ rootIdeaKey: key, sessionId: sessionId ?? "", isNew });
|
|
@@ -536,16 +600,29 @@ export class Waker {
|
|
|
536
600
|
// a spawn that never started (onChild never fired) does not attempt an illegal
|
|
537
601
|
// pending→ended transition. There is no separate turn registry — the turn is
|
|
538
602
|
// identified server-side by `sessionId`, which the waker already has here.
|
|
539
|
-
let turnAdvancedToRunning =
|
|
540
|
-
let runningTurnUuidPromise = Promise.resolve(
|
|
603
|
+
let turnAdvancedToRunning = operationTurnUuid !== null;
|
|
604
|
+
let runningTurnUuidPromise = Promise.resolve(operationTurnUuid);
|
|
605
|
+
let childStarted = false;
|
|
541
606
|
|
|
542
607
|
// Track the session id the stream reports so the transcript hook can use
|
|
543
608
|
// it even before spawner.wake() returns. (Do NOT reference the awaited
|
|
544
609
|
// `result` inside onMessage — it's in the temporal dead zone there.)
|
|
545
610
|
let observedSessionId = sessionId ?? "";
|
|
546
611
|
const onChild = (child) => {
|
|
612
|
+
childStarted = true;
|
|
547
613
|
const entry = execKey ? this.executions.get(execKey) : null;
|
|
548
614
|
if (entry && entry.status === "running") entry.child = child;
|
|
615
|
+
if (operationTurnUuid && (this.shuttingDown || (execKey && this.interrupting.has(execKey)))) {
|
|
616
|
+
// Some backends await binary discovery before onChild. A stop during
|
|
617
|
+
// that interval must still terminate the child as soon as it exists.
|
|
618
|
+
try {
|
|
619
|
+
Promise.resolve(this.killer(child, {
|
|
620
|
+
sigintTimeoutMs: this.sigintTimeoutMs, logger: this.logger,
|
|
621
|
+
})).catch((err) => this.logger.warn(`[Chorus] cancelled operation child kill failed: ${err}`));
|
|
622
|
+
} catch (err) {
|
|
623
|
+
this.logger.warn(`[Chorus] cancelled operation child kill failed: ${err}`);
|
|
624
|
+
}
|
|
625
|
+
}
|
|
549
626
|
if (sessionId && !turnAdvancedToRunning) {
|
|
550
627
|
turnAdvancedToRunning = true;
|
|
551
628
|
// Fire-and-forget; #advanceTurn swallows + logs its own failures so a
|
|
@@ -589,6 +666,14 @@ export class Waker {
|
|
|
589
666
|
onChild,
|
|
590
667
|
onMessage,
|
|
591
668
|
};
|
|
669
|
+
if (operationTurnUuid && (this.shuttingDown || (execKey && this.interrupting.has(execKey)))) {
|
|
670
|
+
await this.#retireUnstartedOperation({
|
|
671
|
+
sessionId, turnUuid: operationTurnUuid, status: "interrupted",
|
|
672
|
+
interruptedReason: execKey && this.interrupting.has(execKey) ? "user" : "shutdown",
|
|
673
|
+
transcriptRelayError: "Operation cancelled before subprocess launch",
|
|
674
|
+
});
|
|
675
|
+
return;
|
|
676
|
+
}
|
|
592
677
|
let result = await this.spawner.wake(wakeParams);
|
|
593
678
|
|
|
594
679
|
// Claude can still reject a new-session launch when its durable session exists
|
|
@@ -597,6 +682,7 @@ export class Waker {
|
|
|
597
682
|
// child for interrupt handling; onChild's gate keeps pending→running exactly once.
|
|
598
683
|
if (
|
|
599
684
|
isNew &&
|
|
685
|
+
!(operationTurnUuid && (this.shuttingDown || (execKey && this.interrupting.has(execKey)))) &&
|
|
600
686
|
result?.failureClassification === SESSION_CONFLICT_FAILURE
|
|
601
687
|
) {
|
|
602
688
|
this.logger.warn(
|
|
@@ -611,6 +697,15 @@ export class Waker {
|
|
|
611
697
|
}
|
|
612
698
|
}
|
|
613
699
|
|
|
700
|
+
if (operationTurnUuid && !childStarted) {
|
|
701
|
+
await this.#retireUnstartedOperation({
|
|
702
|
+
sessionId, turnUuid: operationTurnUuid, status: "interrupted",
|
|
703
|
+
interruptedReason: execKey && this.interrupting.has(execKey) ? "user" : "crash",
|
|
704
|
+
transcriptRelayError: "Operation subprocess did not start",
|
|
705
|
+
});
|
|
706
|
+
return;
|
|
707
|
+
}
|
|
708
|
+
|
|
614
709
|
if (result && !probeIsAuthoritative) {
|
|
615
710
|
this.logger.info(
|
|
616
711
|
`[Chorus] backend ${result.isNew ? "started new" : "resumed"} session ${result.sessionId ?? sessionId ?? "(none)"}`
|
|
@@ -746,7 +841,16 @@ export class Waker {
|
|
|
746
841
|
}
|
|
747
842
|
} catch (err) {
|
|
748
843
|
this.logger.warn(`[Chorus] wake failed for ${key}: ${err}`);
|
|
749
|
-
if (
|
|
844
|
+
if (operationRequestUuid && sessionId) {
|
|
845
|
+
// Admission succeeded but setup/spawn threw: retire this exact turn so a
|
|
846
|
+
// failed launch cannot leave an indefinitely running operation.
|
|
847
|
+
await this.#retireUnstartedOperation({
|
|
848
|
+
sessionId, turnUuid: operationRequestUuid, status: "interrupted",
|
|
849
|
+
interruptedReason: execKey && this.interrupting.has(execKey) ? "user"
|
|
850
|
+
: requestedRuntimeCwd && typeof err?.code === "string" ? "invalid_path" : "crash",
|
|
851
|
+
transcriptRelayError: String(err?.message ?? err).slice(0, 500),
|
|
852
|
+
});
|
|
853
|
+
} else if (sessionId && requestedRuntimeCwd && typeof err?.code === "string") {
|
|
750
854
|
const invalidPathTurnUuid = await this.#advanceTurn(sessionId, "running", entity);
|
|
751
855
|
await this.#advanceTurn(
|
|
752
856
|
sessionId,
|
|
@@ -785,6 +889,25 @@ export class Waker {
|
|
|
785
889
|
}
|
|
786
890
|
}
|
|
787
891
|
|
|
892
|
+
async #retireUnstartedOperation(report) {
|
|
893
|
+
try {
|
|
894
|
+
const result = await this.advanceTurn(report);
|
|
895
|
+
// Terminal retries are idempotent. A 404/409 means this exact row is gone
|
|
896
|
+
// or already settled differently; no other turn is selected or changed.
|
|
897
|
+
if (result?.ok || [404, 409].includes(result?.status)) return;
|
|
898
|
+
} catch (err) {
|
|
899
|
+
this.logger.warn(`[Chorus] Operation launch cleanup failed for ${report.turnUuid}: ${err}`);
|
|
900
|
+
}
|
|
901
|
+
if (this.shuttingDown) return; // offline reconcile / pending backfill owns restart
|
|
902
|
+
this.logger.warn(`[Chorus] Operation launch cleanup deferred for ${report.turnUuid}; retrying in 30s`);
|
|
903
|
+
const timer = setTimeout(() => {
|
|
904
|
+
this.operationRecoveryTimers.delete(timer);
|
|
905
|
+
void this.#retireUnstartedOperation(report);
|
|
906
|
+
}, 30_000);
|
|
907
|
+
timer.unref?.();
|
|
908
|
+
this.operationRecoveryTimers.add(timer);
|
|
909
|
+
}
|
|
910
|
+
|
|
788
911
|
/**
|
|
789
912
|
* Report an interrupted/crashed outcome via the injected reporter. Never throws
|
|
790
913
|
* into the wake path — a reporter failure is logged and swallowed (the reporter
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@chorus-aidlc/chorus",
|
|
3
|
-
"version": "0.19.
|
|
3
|
+
"version": "0.19.1",
|
|
4
4
|
"description": "The Agent Harness for AI-Human Collaboration — session lifecycle, task state, sub-agent orchestration, observability, and failure recovery",
|
|
5
5
|
"homepage": "https://github.com/Chorus-AIDLC/Chorus",
|
|
6
6
|
"repository": {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
ALTER TABLE "DaemonSessionTurn" ADD COLUMN "operationPayload" JSONB;
|
package/prisma/schema.prisma
CHANGED
|
@@ -719,8 +719,9 @@ model DaemonSessionTurn {
|
|
|
719
719
|
// immutable first-wake compatibility anchor.
|
|
720
720
|
backendSessionId String?
|
|
721
721
|
seq Int // monotonic per session
|
|
722
|
-
trigger String // task_assigned | mentioned | elaboration | elaboration_verified | start_development | yolo_requested | resume | human_instruction
|
|
723
|
-
promptText String? //
|
|
722
|
+
trigger String // task_assigned | mentioned | elaboration | elaboration_verified | start_development | yolo_requested | resume | human_instruction | idea_creation_requested | research_requested
|
|
723
|
+
promptText String? // human instruction body or server-composed operation compatibility snapshot
|
|
724
|
+
operationPayload Json? // versioned dedicated operation; historical rows remain null
|
|
724
725
|
status String @default("pending") // pending | running | ended | interrupted
|
|
725
726
|
// Discriminator for the `interrupted` status: `user` = user-requested interrupt,
|
|
726
727
|
// `crash` = subprocess exited dirty, `shutdown` = daemon graceful shutdown killed
|