@chorus-aidlc/chorus 0.13.0 → 0.13.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 +410 -425
- package/.next/standalone/.next/app-path-routes-manifest.json +39 -41
- package/.next/standalone/.next/build-manifest.json +5 -5
- package/.next/standalone/.next/prerender-manifest.json +33 -57
- package/.next/standalone/.next/routes-manifest.json +0 -6
- 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 +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 +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/graph/page.js +2 -2
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/graph/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/graph/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page.js +2 -2
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/new/page.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/new/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/new/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/page.js +2 -2
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/page.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/page.js +1 -1
- 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 +1 -1
- 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 +1 -1
- 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 +1 -1
- 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 +1 -1
- package/.next/standalone/.next/server/app/admin.rsc +2 -2
- package/.next/standalone/.next/server/app/api/admin/companies/[uuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/admin/companies/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/admin/login/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/admin/session/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/agent-connections/route.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_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_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/api-keys/[uuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/api-keys/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/callback/route.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.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.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 -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/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-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 +4 -4
- 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 +6 -6
- 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/conversational/route.js +1 -0
- package/.next/standalone/.next/server/app/api/{auth/refresh → ideas/conversational}/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/ideas/conversational/route_client-reference-manifest.js +1 -0
- package/.next/standalone/.next/server/app/api/mcp/route.js +2 -2
- 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/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.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/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/search/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/session/route.js +1 -0
- package/.next/standalone/.next/server/app/api/session/route.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/api/session/route_client-reference-manifest.js +1 -0
- 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 +3 -3
- package/.next/standalone/.next/server/app/login/admin/page.js +2 -2
- package/.next/standalone/.next/server/app/login/admin/page.js.nft.json +1 -1
- 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 +2 -2
- 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 +3 -3
- package/.next/standalone/.next/server/app/login/page.js +2 -2
- package/.next/standalone/.next/server/app/login/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/login/pick-workspace/page.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 +3 -3
- package/.next/standalone/.next/server/app/login.html +1 -1
- package/.next/standalone/.next/server/app/login.rsc +3 -3
- 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 +3 -3
- package/.next/standalone/.next/server/app/page.js +2 -2
- package/.next/standalone/.next/server/app/page.js.nft.json +1 -1
- 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 +4 -4
- package/.next/standalone/.next/server/app/settings.html +1 -1
- package/.next/standalone/.next/server/app/settings.rsc +4 -4
- package/.next/standalone/.next/server/app-paths-manifest.json +39 -41
- package/.next/standalone/.next/server/chunks/1114.js +1 -0
- package/.next/standalone/.next/server/chunks/1559.js +2 -2
- package/.next/standalone/.next/server/chunks/{7258.js → 2516.js} +1 -1
- package/.next/standalone/.next/server/chunks/2618.js +1 -1
- package/.next/standalone/.next/server/chunks/2961.js +1 -1
- package/.next/standalone/.next/server/chunks/3219.js +1 -1
- package/.next/standalone/.next/server/chunks/3371.js +1 -0
- package/.next/standalone/.next/server/chunks/3373.js +1 -1
- package/.next/standalone/.next/server/chunks/3419.js +1 -1
- package/.next/standalone/.next/server/chunks/4827.js +1 -0
- package/.next/standalone/.next/server/chunks/4958.js +1 -0
- package/.next/standalone/.next/server/chunks/{9855.js → 5095.js} +2 -2
- package/.next/standalone/.next/server/chunks/5300.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/6496.js +1 -0
- package/.next/standalone/.next/server/chunks/679.js +1 -1
- package/.next/standalone/.next/server/chunks/6817.js +1 -0
- package/.next/standalone/.next/server/chunks/{178.js → 704.js} +3 -3
- package/.next/standalone/.next/server/chunks/7160.js +1 -1
- package/.next/standalone/.next/server/chunks/7364.js +1 -1
- package/.next/standalone/.next/server/chunks/7368.js +1 -1
- package/.next/standalone/.next/server/chunks/8448.js +1 -0
- package/.next/standalone/.next/server/chunks/{8267.js → 8481.js} +1 -1
- package/.next/standalone/.next/server/chunks/8497.js +1 -0
- package/.next/standalone/.next/server/chunks/8577.js +153 -0
- package/.next/standalone/.next/server/chunks/8895.js +1 -0
- package/.next/standalone/.next/server/chunks/920.js +1 -1
- package/.next/standalone/.next/server/chunks/9726.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/pages/404.html +1 -1
- 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/server/src/middleware.js +5 -5
- package/.next/standalone/.next/static/chunks/15653-31c406c41bf58048.js +1 -0
- package/.next/standalone/.next/static/chunks/1892-9c03d4d3560ff572.js +1 -0
- package/.next/standalone/.next/static/chunks/225-8a41a800021f3d11.js +1 -0
- package/.next/standalone/.next/static/chunks/24459-3bc9657d71c77b47.js +1 -0
- package/.next/standalone/.next/static/chunks/38296-316ba18af72385fb.js +1 -0
- package/.next/standalone/.next/static/chunks/46055-f786ace4b994dc40.js +1 -0
- package/.next/standalone/.next/static/chunks/{4860.c3c83713d1f163a5.js → 4860.7844c573cb3914f3.js} +1 -1
- package/.next/standalone/.next/static/chunks/{49965-fa11628d5ac8fbbe.js → 52064-74d81c8d682deb6b.js} +1 -1
- package/.next/standalone/.next/static/chunks/57362-9ece5cc290dab705.js +1 -0
- package/.next/standalone/.next/static/chunks/{14655-4f3bc7f3044c42c1.js → 58037-55d7422c6b808356.js} +1 -1
- package/.next/standalone/.next/static/chunks/58262-395c00e04f610a32.js +1 -0
- package/.next/standalone/.next/static/chunks/68255-05c42a26602c6b37.js +1 -0
- package/.next/standalone/.next/static/chunks/75752-cc8fafe132943baa.js +1 -0
- package/.next/standalone/.next/static/chunks/80350-8ac8d602965bb4df.js +1 -0
- package/.next/standalone/.next/static/chunks/84169-71a87d06871ec9df.js +1 -0
- package/.next/standalone/.next/static/chunks/94528-ed3f03485480f5e5.js +1 -0
- package/.next/standalone/.next/static/chunks/94743-aff8a51a7f7970a9.js +1 -0
- package/.next/standalone/.next/static/chunks/{36493-5326c14a7240edc8.js → 97306-8834e12cdbeed920.js} +1 -1
- package/.next/standalone/.next/static/chunks/{99373.2b68fce200cc323e.js → 99373.6f0ec031fb759d88.js} +1 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/layout-a3747bde1ddaba52.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/project-groups/[uuid]/page-87b79c98e46fbd04.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/dashboard/[ideaUuid]/page-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/dashboard/page-f72f17eb58614d2b.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page-0467d744b84aa2c2.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/{page-7ebb779f0db4c58b.js → page-7abff55f9bfebab3.js} +1 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/graph/page-3238e0b5474c60f6.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page-9f0ebba7e855b2f9.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/new/page-6dbfbe5d97855e42.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/page-b8fbcac7224342db.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page-0a04a31e1b383094.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/tasks/page-e2a69b645ec9ae13.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/{page-0bc22273214e522f.js → page-b760877bfcd12dff.js} +1 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/settings/page-111aed4d3319d64b.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/admin/companies/[uuid]/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/admin/companies/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/admin/login/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/admin/session/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/agent-connections/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/agents/[uuid]/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/agents/[uuid]/sessions/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/agents/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/api-keys/[uuid]/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/api-keys/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/auth/callback/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/auth/check-default/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/auth/company-oidc/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/auth/default-login/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/auth/identify/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/auth/logout/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/auth/me/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/auth/sync-token/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/comments/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/daemon/control/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/daemon/execution-state/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/daemon/executions/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/daemon/pending-turns/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/daemon/report-interrupt/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/daemon/resume/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/daemon/transcript/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/daemon/turn-advance/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/[sessionUuid]/instruction/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/[sessionUuid]/repoint/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/[sessionUuid]/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/ad-hoc/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/documents/[uuid]/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/entities/[type]/[uuid]/root-idea/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/events/notifications/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/events/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/health/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/claim/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/move/preview/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/move/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/parent/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/release/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/ideas/conversational/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/mcp/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/me/assignments/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/mentionables/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/notifications/[uuid]/archive/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/notifications/[uuid]/read/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/notifications/preferences/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/notifications/read-all/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/notifications/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/notifications/unread-count/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/project-groups/[uuid]/dashboard/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/project-groups/[uuid]/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/project-groups/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/activity/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/available/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/documents/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/group/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/ideas/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/ideas/tracker/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/proposals/[proposalUuid]/validate/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/proposals/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/proposals/summary/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/resource-graph/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/stats/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/tasks/dependencies/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/tasks/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/approve/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/close/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/reject/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/revoke/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/search/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/session/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/sessions/[uuid]/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/claim/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/dependencies/[dependsOnUuid]/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/dependencies/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/release/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/sessions/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/login/callback/page-39a43f6d0245f8ca.js +1 -0
- package/.next/standalone/.next/static/chunks/app/login/page-acda3a31dc6a8280.js +1 -0
- package/.next/standalone/.next/static/chunks/app/login/pick-workspace/page-10683852baf17426.js +1 -0
- package/.next/standalone/.next/static/chunks/app/onboarding/{page-500aded75bf11ed6.js → page-8e20c8aa8ff90326.js} +1 -1
- package/.next/standalone/.next/static/chunks/app/page-000b1349c8d5b652.js +1 -0
- package/.next/standalone/.next/static/chunks/{webpack-7483083a976ed3d7.js → webpack-fe12dfe2e0d0e4f3.js} +1 -1
- package/.next/standalone/.next/static/css/3f3ae2bdc9e55259.css +1 -0
- package/.next/standalone/.next/static/eORNzMShbzkJbNfQT8MbW/_buildManifest.js +1 -0
- package/.next/standalone/package.json +1 -1
- package/.next/standalone/public/chorus-plugin/skills/develop/SKILL.md +2 -0
- package/.next/standalone/public/chorus-plugin/skills/idea/SKILL.md +2 -0
- package/.next/standalone/public/skill/develop-chorus/SKILL.md +2 -0
- package/.next/standalone/public/skill/idea-chorus/SKILL.md +2 -0
- package/README.md +15 -2
- package/README.zh.md +15 -2
- package/cli/client-args.mjs +31 -9
- package/cli/control-handler.mjs +22 -5
- package/cli/daemon-lifecycle.mjs +192 -25
- package/cli/daemon-rest-client.mjs +6 -2
- package/cli/daemon-service.mjs +422 -0
- package/cli/daemon.mjs +181 -13
- package/cli/event-router.mjs +29 -10
- package/cli/prompts.mjs +61 -0
- package/cli/turn-reporter.mjs +26 -5
- package/cli/wake-queue.mjs +30 -0
- package/cli/waker.mjs +91 -22
- package/package.json +1 -1
- package/prisma/migrations/20260704023331_add_turn_interrupted_state/migration.sql +2 -0
- package/prisma/schema.prisma +9 -2
- package/.next/standalone/.next/server/app/api/auth/refresh/route.js +0 -1
- package/.next/standalone/.next/server/app/api/auth/refresh/route_client-reference-manifest.js +0 -1
- package/.next/standalone/.next/server/app/api/auth/session/route.js +0 -1
- package/.next/standalone/.next/server/app/api/auth/session/route.js.nft.json +0 -1
- package/.next/standalone/.next/server/app/api/auth/session/route_client-reference-manifest.js +0 -1
- package/.next/standalone/.next/server/app/api/keepalive/route.js +0 -1
- package/.next/standalone/.next/server/app/api/keepalive/route.js.nft.json +0 -1
- package/.next/standalone/.next/server/app/api/keepalive/route_client-reference-manifest.js +0 -1
- package/.next/standalone/.next/server/app/login/silent-refresh/page.js +0 -2
- package/.next/standalone/.next/server/app/login/silent-refresh/page.js.nft.json +0 -1
- package/.next/standalone/.next/server/app/login/silent-refresh/page_client-reference-manifest.js +0 -1
- package/.next/standalone/.next/server/app/login/silent-refresh.html +0 -1
- package/.next/standalone/.next/server/app/login/silent-refresh.meta +0 -7
- package/.next/standalone/.next/server/app/login/silent-refresh.rsc +0 -24
- package/.next/standalone/.next/server/chunks/1463.js +0 -1
- package/.next/standalone/.next/server/chunks/298.js +0 -1
- package/.next/standalone/.next/server/chunks/5011.js +0 -1
- package/.next/standalone/.next/server/chunks/6813.js +0 -1
- package/.next/standalone/.next/server/chunks/7421.js +0 -1
- package/.next/standalone/.next/server/chunks/7515.js +0 -1
- package/.next/standalone/.next/server/chunks/7912.js +0 -1
- package/.next/standalone/.next/server/chunks/8821.js +0 -1
- package/.next/standalone/.next/server/chunks/9273.js +0 -1
- package/.next/standalone/.next/server/chunks/937.js +0 -153
- package/.next/standalone/.next/static/W3KEB0tOAICVtfAUfR_M9/_buildManifest.js +0 -1
- package/.next/standalone/.next/static/chunks/10919-7f63b2801a92b8c6.js +0 -1
- package/.next/standalone/.next/static/chunks/1891-d4a9e756fefba3a9.js +0 -1
- package/.next/standalone/.next/static/chunks/20081-a2bf5c9f24d5d589.js +0 -1
- package/.next/standalone/.next/static/chunks/26394-4af487a51dd62832.js +0 -1
- package/.next/standalone/.next/static/chunks/2987-c15f09093b821b24.js +0 -1
- package/.next/standalone/.next/static/chunks/37784-95dee37276b1067b.js +0 -1
- package/.next/standalone/.next/static/chunks/43741-aeea04ab873ac4e9.js +0 -1
- package/.next/standalone/.next/static/chunks/49852-5337f139a2f87c46.js +0 -1
- package/.next/standalone/.next/static/chunks/56812-a6fe5225adc0b2ff.js +0 -1
- package/.next/standalone/.next/static/chunks/64894-71b047ae8ef2f3d8.js +0 -1
- package/.next/standalone/.next/static/chunks/8796-69e708cb8603d8b4.js +0 -1
- package/.next/standalone/.next/static/chunks/91666-3fd4f3512a53ff20.js +0 -1
- package/.next/standalone/.next/static/chunks/97263-018d631416efa5cd.js +0 -1
- package/.next/standalone/.next/static/chunks/97868-55f18a05fe483d85.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/layout-6061b60d52262d3c.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/project-groups/[uuid]/page-78ab05c72bcd04fd.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/dashboard/[ideaUuid]/page-31ae6abada6e6a64.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/dashboard/page-478cce81afbfc145.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page-494b80e61b485870.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/graph/page-bfbfc5005de2be13.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page-fbb4dd4124525f97.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/new/page-164fe175720b24a1.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/page-2742c745a90f843f.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page-f2313bf05387b39b.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/tasks/page-955e8fd8d7b0b7c8.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/settings/page-960ab78b5055780c.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/admin/companies/[uuid]/route-31ae6abada6e6a64.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/admin/companies/route-31ae6abada6e6a64.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/admin/login/route-31ae6abada6e6a64.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/admin/session/route-31ae6abada6e6a64.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/agent-connections/route-31ae6abada6e6a64.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/agents/[uuid]/route-31ae6abada6e6a64.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/agents/[uuid]/sessions/route-31ae6abada6e6a64.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/agents/route-31ae6abada6e6a64.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/api-keys/[uuid]/route-31ae6abada6e6a64.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/api-keys/route-31ae6abada6e6a64.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/auth/callback/route-31ae6abada6e6a64.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/auth/check-default/route-31ae6abada6e6a64.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/auth/company-oidc/route-31ae6abada6e6a64.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/auth/default-login/route-31ae6abada6e6a64.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/auth/identify/route-31ae6abada6e6a64.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/auth/logout/route-31ae6abada6e6a64.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/auth/me/route-31ae6abada6e6a64.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/auth/refresh/route-31ae6abada6e6a64.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/auth/session/route-31ae6abada6e6a64.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/auth/sync-token/route-31ae6abada6e6a64.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/comments/route-31ae6abada6e6a64.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/daemon/control/route-31ae6abada6e6a64.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/daemon/execution-state/route-31ae6abada6e6a64.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/daemon/executions/route-31ae6abada6e6a64.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/daemon/pending-turns/route-31ae6abada6e6a64.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/daemon/report-interrupt/route-31ae6abada6e6a64.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/daemon/resume/route-31ae6abada6e6a64.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/daemon/transcript/route-31ae6abada6e6a64.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/daemon/turn-advance/route-31ae6abada6e6a64.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/[sessionUuid]/instruction/route-31ae6abada6e6a64.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/[sessionUuid]/repoint/route-31ae6abada6e6a64.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/[sessionUuid]/route-31ae6abada6e6a64.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/ad-hoc/route-31ae6abada6e6a64.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/route-31ae6abada6e6a64.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/documents/[uuid]/route-31ae6abada6e6a64.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/entities/[type]/[uuid]/root-idea/route-31ae6abada6e6a64.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/events/notifications/route-31ae6abada6e6a64.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/events/route-31ae6abada6e6a64.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/health/route-31ae6abada6e6a64.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/claim/route-31ae6abada6e6a64.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/move/preview/route-31ae6abada6e6a64.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/move/route-31ae6abada6e6a64.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/parent/route-31ae6abada6e6a64.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/release/route-31ae6abada6e6a64.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/route-31ae6abada6e6a64.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/keepalive/route-31ae6abada6e6a64.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/mcp/route-31ae6abada6e6a64.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/me/assignments/route-31ae6abada6e6a64.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/mentionables/route-31ae6abada6e6a64.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/notifications/[uuid]/archive/route-31ae6abada6e6a64.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/notifications/[uuid]/read/route-31ae6abada6e6a64.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/notifications/preferences/route-31ae6abada6e6a64.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/notifications/read-all/route-31ae6abada6e6a64.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/notifications/route-31ae6abada6e6a64.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/notifications/unread-count/route-31ae6abada6e6a64.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/project-groups/[uuid]/dashboard/route-31ae6abada6e6a64.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/project-groups/[uuid]/route-31ae6abada6e6a64.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/project-groups/route-31ae6abada6e6a64.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/activity/route-31ae6abada6e6a64.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/available/route-31ae6abada6e6a64.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/documents/route-31ae6abada6e6a64.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/group/route-31ae6abada6e6a64.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/ideas/route-31ae6abada6e6a64.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/ideas/tracker/route-31ae6abada6e6a64.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/proposals/[proposalUuid]/validate/route-31ae6abada6e6a64.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/proposals/route-31ae6abada6e6a64.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/proposals/summary/route-31ae6abada6e6a64.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/resource-graph/route-31ae6abada6e6a64.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/route-31ae6abada6e6a64.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/stats/route-31ae6abada6e6a64.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/tasks/dependencies/route-31ae6abada6e6a64.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/tasks/route-31ae6abada6e6a64.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/projects/route-31ae6abada6e6a64.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/approve/route-31ae6abada6e6a64.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/close/route-31ae6abada6e6a64.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/reject/route-31ae6abada6e6a64.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/revoke/route-31ae6abada6e6a64.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/route-31ae6abada6e6a64.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/search/route-31ae6abada6e6a64.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/sessions/[uuid]/route-31ae6abada6e6a64.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/claim/route-31ae6abada6e6a64.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/dependencies/[dependsOnUuid]/route-31ae6abada6e6a64.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/dependencies/route-31ae6abada6e6a64.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/release/route-31ae6abada6e6a64.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/route-31ae6abada6e6a64.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/sessions/route-31ae6abada6e6a64.js +0 -1
- package/.next/standalone/.next/static/chunks/app/login/callback/page-6cad93f5c610b047.js +0 -1
- package/.next/standalone/.next/static/chunks/app/login/page-d2513f477211dd6f.js +0 -1
- package/.next/standalone/.next/static/chunks/app/login/pick-workspace/page-597e0f3377f18d29.js +0 -1
- package/.next/standalone/.next/static/chunks/app/login/silent-refresh/page-a26d1af61578c96e.js +0 -1
- package/.next/standalone/.next/static/chunks/app/page-075afd218994d377.js +0 -1
- package/.next/standalone/.next/static/css/ed6baccd62b81c4e.css +0 -1
- /package/.next/standalone/.next/static/{W3KEB0tOAICVtfAUfR_M9 → eORNzMShbzkJbNfQT8MbW}/_ssgManifest.js +0 -0
package/cli/event-router.mjs
CHANGED
|
@@ -14,12 +14,14 @@ const NOOP_LOGGER = { info() {}, warn() {}, error() {} };
|
|
|
14
14
|
// MIRROR of the server's NOTIFICATION_ACTION_TO_TURN_TRIGGER (src/services/notification-turn.ts).
|
|
15
15
|
// Used ONLY to match a re-read wake notification back to a DIRECTED autonomous pending turn
|
|
16
16
|
// (the deliver_turn re-dispatch rebuilds the prompt from the notification, T2). Kept narrow
|
|
17
|
-
// to the
|
|
18
|
-
// action collapses to the `task_assigned` trigger exactly as the server does, so a
|
|
17
|
+
// to the dedicated triggers a `deliver_turn` ping can carry for an autonomous wake; every
|
|
18
|
+
// other action collapses to the `task_assigned` trigger exactly as the server does, so a
|
|
19
19
|
// task_assigned turn matches its task_reopened/task_verified/idea_claimed/proposal_* origins.
|
|
20
20
|
const ACTION_TO_TURN_TRIGGER = {
|
|
21
21
|
mentioned: "mentioned",
|
|
22
22
|
elaboration_verified: "elaboration_verified",
|
|
23
|
+
start_development: "start_development",
|
|
24
|
+
yolo_requested: "yolo_requested",
|
|
23
25
|
elaboration_requested: "elaboration",
|
|
24
26
|
elaboration_answered: "elaboration",
|
|
25
27
|
human_instruction: "human_instruction",
|
|
@@ -219,7 +221,12 @@ export class EventRouter {
|
|
|
219
221
|
* per-direct-idea serialization holds and the spawner's on-disk transcript probe
|
|
220
222
|
* naturally selects `claude --resume <directIdeaUuid>` (the session already
|
|
221
223
|
* exists). Synchronous + non-throwing, mirroring `dispatch`.
|
|
222
|
-
*
|
|
224
|
+
*
|
|
225
|
+
* `resumeReason` (add-crash-execution-resume) is the interrupted row's prior
|
|
226
|
+
* reason ("user" | "crash") threaded from the control event; it is stamped on the
|
|
227
|
+
* synthetic notification as `resumedFrom` so the prompt builder can state a crash
|
|
228
|
+
* explicitly. Absent/unknown → not stamped → the user-resume prompt.
|
|
229
|
+
* @param {{ entityType?: string, entityUuid?: string, resumeReason?: string }} target
|
|
223
230
|
*/
|
|
224
231
|
dispatchResume(target) {
|
|
225
232
|
const entityType = target?.entityType;
|
|
@@ -228,7 +235,16 @@ export class EventRouter {
|
|
|
228
235
|
this.logger.warn("[Chorus] resume dispatch missing entityType/entityUuid, skipping");
|
|
229
236
|
return;
|
|
230
237
|
}
|
|
231
|
-
const
|
|
238
|
+
const resumedFrom =
|
|
239
|
+
target?.resumeReason === "user" || target?.resumeReason === "crash"
|
|
240
|
+
? target.resumeReason
|
|
241
|
+
: undefined;
|
|
242
|
+
const n = {
|
|
243
|
+
action: "resource_resumed",
|
|
244
|
+
entityType,
|
|
245
|
+
entityUuid,
|
|
246
|
+
...(resumedFrom ? { resumedFrom } : {}),
|
|
247
|
+
};
|
|
232
248
|
this.#resolveAndEnqueue(n, `resume:${entityType}:${entityUuid}`).catch((err) => {
|
|
233
249
|
this.logger.error(`[Chorus] failed to dispatch resume for ${entityType}:${entityUuid}: ${err}`);
|
|
234
250
|
});
|
|
@@ -278,15 +294,18 @@ export class EventRouter {
|
|
|
278
294
|
this.logger.warn(`[Chorus] pending-turn ${turnUuid} missing sessionId, skipping`);
|
|
279
295
|
return;
|
|
280
296
|
}
|
|
281
|
-
// A DIRECTED autonomous turn (mentioned / task_assigned / elaboration_verified
|
|
282
|
-
// delivered by the deliver_turn ping too (T2).
|
|
283
|
-
// notification (promptText is null), so it takes a
|
|
284
|
-
// elaboration are not delivered by deliver_turn (resume
|
|
285
|
-
// request/answer rides the notification broadcast), so they
|
|
297
|
+
// A DIRECTED autonomous turn (mentioned / task_assigned / elaboration_verified /
|
|
298
|
+
// start_development / yolo_requested) is delivered by the deliver_turn ping too (T2).
|
|
299
|
+
// Its prompt must be rebuilt from the notification (promptText is null), so it takes a
|
|
300
|
+
// separate async path. resume / elaboration are not delivered by deliver_turn (resume
|
|
301
|
+
// is synthetic; elaboration request/answer rides the notification broadcast), so they
|
|
302
|
+
// are not re-dispatched here.
|
|
286
303
|
if (
|
|
287
304
|
pending.trigger === "mentioned" ||
|
|
288
305
|
pending.trigger === "task_assigned" ||
|
|
289
|
-
pending.trigger === "elaboration_verified"
|
|
306
|
+
pending.trigger === "elaboration_verified" ||
|
|
307
|
+
pending.trigger === "start_development" ||
|
|
308
|
+
pending.trigger === "yolo_requested"
|
|
290
309
|
) {
|
|
291
310
|
// Shared dedup, marked BEFORE async work (mirrors the human_instruction path and
|
|
292
311
|
// `dispatch`) so concurrent deliveries collapse to one wake.
|
package/cli/prompts.mjs
CHANGED
|
@@ -138,6 +138,42 @@ function buildPromptBody(n) {
|
|
|
138
138
|
`chorus_get_elaboration, then author the proposal via the existing proposal flow ` +
|
|
139
139
|
`(chorus_pm_create_proposal / the proposal skill).\n${mentionGuidance(n, "idea")}`
|
|
140
140
|
);
|
|
141
|
+
case "start_development":
|
|
142
|
+
// A human clicked "Start Development" (add-stage-advance-start-development). The
|
|
143
|
+
// idea's proposal is approved and unfinished tasks remain. The agent's job on this
|
|
144
|
+
// wake is the WHOLE remaining execute stage — loop over every claimable task until
|
|
145
|
+
// none remain (elaboration decision Q1), never stopping after a single task.
|
|
146
|
+
return (
|
|
147
|
+
`[Chorus] A human started DEVELOPMENT for idea '${n.entityTitle}' ` +
|
|
148
|
+
`(ideaUuid: ${n.entityUuid}, projectUuid: ${n.projectUuid}). The idea's proposal is approved and ` +
|
|
149
|
+
`unfinished tasks remain. Claim and execute ALL remaining tasks of that proposal in dependency ` +
|
|
150
|
+
`order, following the develop workflow: repeatedly find claimable tasks (chorus_get_unblocked_tasks ` +
|
|
151
|
+
`with projectUuid: "${n.projectUuid}"), claim one (chorus_claim_task), implement it, self-check its ` +
|
|
152
|
+
`acceptance criteria (chorus_report_criteria_self_check), and submit it (chorus_submit_for_verify) — ` +
|
|
153
|
+
`then loop until NO claimable task remains. Do NOT stop after one task. Leave tasks already in ` +
|
|
154
|
+
`to_verify (awaiting human verification) and tasks claimed by other sessions untouched. If nothing ` +
|
|
155
|
+
`is claimable, post a brief status comment on the idea and end the turn.\n${mentionGuidance(n, "idea")}`
|
|
156
|
+
);
|
|
157
|
+
case "yolo_requested":
|
|
158
|
+
// A human clicked "Yolo" (add-stage-advance-yolo). Unlike start_development
|
|
159
|
+
// (always the execute stage), this wake can land at ANY incomplete stage, so the
|
|
160
|
+
// prompt must NOT hard-code a stage — it points the agent at the yolo skill and lets
|
|
161
|
+
// it self-select the entry phase from the idea's current state (no proposal yet →
|
|
162
|
+
// elaborate + write proposal; approved proposal with open tasks → execute; etc.).
|
|
163
|
+
// Honors the "yolo never merges" rule: drive through done + completion report, but
|
|
164
|
+
// never merge or push a PR without explicit human approval.
|
|
165
|
+
return (
|
|
166
|
+
`[Chorus] A human requested a YOLO run for idea '${n.entityTitle}' ` +
|
|
167
|
+
`(ideaUuid: ${n.entityUuid}, projectUuid: ${n.projectUuid}). Drive this idea all the ` +
|
|
168
|
+
`way to done following the yolo skill (the full-auto AI-DLC pipeline: Idea → ` +
|
|
169
|
+
`Elaboration → Proposal → Execute → Verify). First read the idea's current state with ` +
|
|
170
|
+
`chorus_get_idea (plus chorus_get_elaboration / chorus_get_proposals as needed) and ` +
|
|
171
|
+
`RESUME from whatever phase it is already in — do NOT assume a fixed stage: if ` +
|
|
172
|
+
`elaboration isn't resolved, self-elaborate then write the proposal; if a proposal is ` +
|
|
173
|
+
`approved with open tasks, execute them; and so on. Complete the pipeline through the ` +
|
|
174
|
+
`final done state and completion report, but do NOT merge or push a pull request ` +
|
|
175
|
+
`without explicit human approval.\n${mentionGuidance(n, "idea")}`
|
|
176
|
+
);
|
|
141
177
|
case "proposal_rejected":
|
|
142
178
|
return (
|
|
143
179
|
`[Chorus] Proposal '${n.entityTitle}' was REJECTED (proposalUuid: ${n.entityUuid}, ` +
|
|
@@ -172,6 +208,21 @@ function buildPromptBody(n) {
|
|
|
172
208
|
// daemon's isNewSession probe selects `claude --resume <directIdeaUuid>`
|
|
173
209
|
// automatically, so the woken Claude continues the SAME session where it left
|
|
174
210
|
// off. It intentionally has no @mention (a self-resume has no actor to address).
|
|
211
|
+
//
|
|
212
|
+
// `resumedFrom` (add-crash-execution-resume) distinguishes the resume kind:
|
|
213
|
+
// "crash" gets an explicit exited-abnormally instruction — the previous run may
|
|
214
|
+
// have died mid-edit, so the agent must verify state before continuing.
|
|
215
|
+
// "user" / absent / unknown (older server) keeps the original text unchanged.
|
|
216
|
+
if (n.resumedFrom === "crash") {
|
|
217
|
+
return (
|
|
218
|
+
`[Chorus] The previous run on this ${n.entityType} EXITED ABNORMALLY (crashed) ` +
|
|
219
|
+
`(${n.entityType}Uuid: ${n.entityUuid}), and a user asked to resume it. The crash may ` +
|
|
220
|
+
`have left work half-finished — first re-check the current state with the appropriate ` +
|
|
221
|
+
`chorus_get_* tool (e.g. chorus_get_task / chorus_get_idea) plus chorus_get_comments, ` +
|
|
222
|
+
`and inspect any partial local work (working tree, uncommitted changes, half-written ` +
|
|
223
|
+
`files). Then continue the unfinished work from where the crashed run left off.`
|
|
224
|
+
);
|
|
225
|
+
}
|
|
175
226
|
return (
|
|
176
227
|
`[Chorus] Your work on this ${n.entityType} was RESUMED after an interrupt ` +
|
|
177
228
|
`(${n.entityType}Uuid: ${n.entityUuid}). Continue where you left off — re-check the ` +
|
|
@@ -253,6 +304,16 @@ export const WAKE_ACTIONS = new Set([
|
|
|
253
304
|
// idea-rooted like the other elaboration wakes, so the session anchor/resume contract is
|
|
254
305
|
// unchanged. See buildPrompt's `elaboration_verified` case for the write-proposal prompt.
|
|
255
306
|
"elaboration_verified",
|
|
307
|
+
// add-stage-advance-start-development: a human clicked "Start Development" — the idea's
|
|
308
|
+
// proposal is approved and unfinished tasks remain. Wakes the assigned daemon agent to
|
|
309
|
+
// CLAIM AND EXECUTE ALL remaining tasks (dedicated trigger, session-origin-pinned like
|
|
310
|
+
// elaboration_verified). See buildPrompt's `start_development` case.
|
|
311
|
+
"start_development",
|
|
312
|
+
// add-stage-advance-yolo: a human clicked "Yolo" — wakes the assigned daemon agent to
|
|
313
|
+
// drive the WHOLE idea to done via the yolo skill (dedicated trigger, session-origin-
|
|
314
|
+
// pinned like start_development). Unlike start_development it is stage-adaptive — see
|
|
315
|
+
// buildPrompt's `yolo_requested` case.
|
|
316
|
+
"yolo_requested",
|
|
256
317
|
"proposal_rejected",
|
|
257
318
|
"proposal_approved",
|
|
258
319
|
"idea_claimed",
|
package/cli/turn-reporter.mjs
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
// persistent conversation; the server creates that turn (status `pending`) at the
|
|
5
5
|
// notification chokepoint, and the daemon advances it:
|
|
6
6
|
// • on spawn → pending → running
|
|
7
|
-
// • on subprocess exit → running → ended
|
|
7
|
+
// • on subprocess exit → running → ended (clean) | interrupted (user/crash/shutdown)
|
|
8
8
|
//
|
|
9
9
|
// The daemon does NOT know the server-side turn uuid. It identifies the turn the SAME
|
|
10
10
|
// way the transcript ingest does — by the session BUSINESS KEY (`sessionId` = the
|
|
@@ -27,7 +27,10 @@ import { createDaemonRestClient } from "./daemon-rest-client.mjs";
|
|
|
27
27
|
const NOOP_LOGGER = { info() {}, warn() {}, error() {} };
|
|
28
28
|
|
|
29
29
|
/** Turn lifecycle states the server's turn-advance endpoint accepts. */
|
|
30
|
-
export const TURN_STATUSES = new Set(["pending", "running", "ended"]);
|
|
30
|
+
export const TURN_STATUSES = new Set(["pending", "running", "ended", "interrupted"]);
|
|
31
|
+
|
|
32
|
+
/** Interrupt reasons a DAEMON may report (`offline` is server-reconcile-only). */
|
|
33
|
+
export const TURN_INTERRUPT_REASONS = new Set(["user", "crash", "shutdown"]);
|
|
31
34
|
|
|
32
35
|
/**
|
|
33
36
|
* Build an `advanceTurn(params)` function the waker invokes on a wake's spawn (→
|
|
@@ -43,7 +46,7 @@ export const TURN_STATUSES = new Set(["pending", "running", "ended"]);
|
|
|
43
46
|
* logger?: { info(m:string):void, warn(m:string):void, error(m:string):void },
|
|
44
47
|
* fetchImpl?: typeof fetch, Injectable for tests.
|
|
45
48
|
* }} opts
|
|
46
|
-
* @returns {(params: { sessionId: string, status: "running"|"ended", entityType?: string|null, entityUuid?: string|null }) => Promise<void>}
|
|
49
|
+
* @returns {(params: { sessionId: string, status: "running"|"ended"|"interrupted", entityType?: string|null, entityUuid?: string|null, interruptedReason?: "user"|"crash"|"shutdown"|null }) => Promise<void>}
|
|
47
50
|
*/
|
|
48
51
|
export function createTurnReporter(opts) {
|
|
49
52
|
const logger = opts.logger ?? NOOP_LOGGER;
|
|
@@ -58,18 +61,36 @@ export function createTurnReporter(opts) {
|
|
|
58
61
|
logger,
|
|
59
62
|
});
|
|
60
63
|
|
|
61
|
-
return async function advanceTurn({
|
|
64
|
+
return async function advanceTurn({
|
|
65
|
+
sessionId,
|
|
66
|
+
status,
|
|
67
|
+
entityType,
|
|
68
|
+
entityUuid,
|
|
69
|
+
interruptedReason,
|
|
70
|
+
}) {
|
|
62
71
|
if (typeof sessionId !== "string" || !sessionId || !TURN_STATUSES.has(status)) {
|
|
63
72
|
logger.warn(
|
|
64
73
|
`[Chorus] refusing to advance turn: bad sessionId/status (${sessionId}, ${status})`,
|
|
65
74
|
);
|
|
66
75
|
return;
|
|
67
76
|
}
|
|
77
|
+
// Domain guard mirroring the server's: a reason travels only with `interrupted`
|
|
78
|
+
// and only from the daemon-reportable vocabulary (`offline` is the server's own
|
|
79
|
+
// reconcile verdict). Refusing here keeps a bad caller visible in daemon logs
|
|
80
|
+
// instead of as a server 400.
|
|
81
|
+
if (interruptedReason != null) {
|
|
82
|
+
if (status !== "interrupted" || !TURN_INTERRUPT_REASONS.has(interruptedReason)) {
|
|
83
|
+
logger.warn(
|
|
84
|
+
`[Chorus] refusing to advance turn: bad interruptedReason (${interruptedReason}) for status ${status}`,
|
|
85
|
+
);
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
68
89
|
// The client resolves the connectionUuid lazily, validates it (logging
|
|
69
90
|
// "no connection uuid yet" when absent), POSTs the exact server payload — sending
|
|
70
91
|
// entityType/entityUuid only when both are present — and logs the failure cause on a
|
|
71
92
|
// network error / non-2xx. We swallow the structured result so a failed report can
|
|
72
93
|
// never crash the wake path.
|
|
73
|
-
await client.turnAdvance({ sessionId, status, entityType, entityUuid });
|
|
94
|
+
await client.turnAdvance({ sessionId, status, entityType, entityUuid, interruptedReason });
|
|
74
95
|
};
|
|
75
96
|
}
|
package/cli/wake-queue.mjs
CHANGED
|
@@ -30,6 +30,15 @@ export class WakeQueue {
|
|
|
30
30
|
/** @type {string[]} keys waiting for a global concurrency slot. */
|
|
31
31
|
this.readyKeys = [];
|
|
32
32
|
this.activeCount = 0;
|
|
33
|
+
// Graceful-shutdown latch: once set, #pump starts NOTHING new — in-flight tasks
|
|
34
|
+
// finish (drain observes them) but queued work stays queued and dies with the
|
|
35
|
+
// process. Never cleared; a stopping queue is on its way out.
|
|
36
|
+
this.stopped = false;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/** Stop starting new tasks (graceful shutdown). In-flight tasks are unaffected. */
|
|
40
|
+
stop() {
|
|
41
|
+
this.stopped = true;
|
|
33
42
|
}
|
|
34
43
|
|
|
35
44
|
/**
|
|
@@ -75,8 +84,29 @@ export class WakeQueue {
|
|
|
75
84
|
return [...this.pending.entries()].filter(([, q]) => q.length > 0).map(([k]) => k);
|
|
76
85
|
}
|
|
77
86
|
|
|
87
|
+
/**
|
|
88
|
+
* Wait (bounded) for every in-flight task to finish — the graceful-shutdown drain
|
|
89
|
+
* (fix-daemon-exit-orphan-running-turn). Resolves `true` when the queue went idle
|
|
90
|
+
* (no active task) within `timeoutMs`, `false` on timeout — the caller exits
|
|
91
|
+
* anyway and leaves the rest to the server-side reconcile backstop. Pending
|
|
92
|
+
* (not-yet-started) tasks are NOT waited for: a shutting-down daemon stops
|
|
93
|
+
* starting new work, so only the in-flight subprocesses (and their exit reports)
|
|
94
|
+
* matter. Polling (50ms) keeps this zero-dep and independent of task internals.
|
|
95
|
+
* @param {number} timeoutMs
|
|
96
|
+
* @returns {Promise<boolean>}
|
|
97
|
+
*/
|
|
98
|
+
async drain(timeoutMs) {
|
|
99
|
+
const deadline = Date.now() + Math.max(0, timeoutMs);
|
|
100
|
+
while (this.activeCount > 0) {
|
|
101
|
+
if (Date.now() >= deadline) return false;
|
|
102
|
+
await new Promise((r) => setTimeout(r, 50));
|
|
103
|
+
}
|
|
104
|
+
return true;
|
|
105
|
+
}
|
|
106
|
+
|
|
78
107
|
/** Try to start as many ready keys as the concurrency cap allows. */
|
|
79
108
|
#pump() {
|
|
109
|
+
if (this.stopped) return; // shutting down — start nothing new
|
|
80
110
|
while (this.activeCount < this.maxConcurrency && this.readyKeys.length > 0) {
|
|
81
111
|
const key = this.readyKeys.shift();
|
|
82
112
|
if (this.running.has(key)) continue; // already running under another slot
|
package/cli/waker.mjs
CHANGED
|
@@ -19,6 +19,7 @@
|
|
|
19
19
|
import { buildPrompt } from "./prompts.mjs";
|
|
20
20
|
import { writeMcpConfig } from "./mcp-config.mjs";
|
|
21
21
|
import { isNewSession } from "./claude-spawner.mjs";
|
|
22
|
+
import { killProcessTree, DEFAULT_SIGINT_TIMEOUT_MS } from "./process-killer.mjs";
|
|
22
23
|
|
|
23
24
|
const NOOP_LOGGER = { info() {}, warn() {}, error() {} };
|
|
24
25
|
|
|
@@ -37,13 +38,17 @@ export class Waker {
|
|
|
37
38
|
* Injectable interrupt reporter (子3). Called when a wake's subprocess exits in
|
|
38
39
|
* an interrupted (user) or crashed (non-zero, no interrupt flag) state. Defaults
|
|
39
40
|
* to a no-op that logs — the daemon wires the REST reporter (interrupt-reporter.mjs).
|
|
40
|
-
* advanceTurn?: (params: { sessionId: string, status: "running"|"ended", entityType?: string|null, entityUuid?: string|null }) => Promise<void>,
|
|
41
|
+
* advanceTurn?: (params: { sessionId: string, status: "running"|"ended"|"interrupted", entityType?: string|null, entityUuid?: string|null, interruptedReason?: "user"|"crash"|"shutdown" }) => Promise<void>,
|
|
41
42
|
* Injectable turn-lifecycle reporter (子1 — daemon-session-conversation). Called
|
|
42
|
-
* on spawn (→ running) and on subprocess exit (→ ended
|
|
43
|
+
* on spawn (→ running) and on subprocess exit (→ ended on a clean exit, or
|
|
44
|
+
* → interrupted with the classified reason otherwise) to advance the server-side
|
|
43
45
|
* DaemonSessionTurn the notification chokepoint created (status `pending`). The
|
|
44
46
|
* server resolves the turn by the session business key (`sessionId`) and stamps
|
|
45
47
|
* the weak executionUuid link from entityType/entityUuid. Defaults to a no-op that
|
|
46
48
|
* logs — the daemon wires the REST reporter (turn-reporter.mjs).
|
|
49
|
+
* killer?: (child: any, opts: any) => Promise<any>, Injectable kill escalation for
|
|
50
|
+
* interruptAll(); defaults to process-killer.killProcessTree (cross-platform).
|
|
51
|
+
* sigintTimeoutMs?: number, Escalation window interruptAll passes the killer.
|
|
47
52
|
* }} opts
|
|
48
53
|
*/
|
|
49
54
|
constructor(opts) {
|
|
@@ -91,6 +96,17 @@ export class Waker {
|
|
|
91
96
|
// wake's exit path reads + clears it to decide reason=user vs reason=crash.
|
|
92
97
|
/** @type {Set<string>} */
|
|
93
98
|
this.interrupting = new Set();
|
|
99
|
+
// Daemon graceful-shutdown flag (fix-daemon-exit-orphan-running-turn). Set once
|
|
100
|
+
// by interruptAll() and never cleared — a shutting-down Waker is on its way out.
|
|
101
|
+
// The wake exit path reads it to report the TURN as interrupted(shutdown), and to
|
|
102
|
+
// SUPPRESS the execution interrupt report (a shutdown-kill would otherwise read as
|
|
103
|
+
// a dirty exit → sticky interrupted(crash) execution row that reconcileOffline
|
|
104
|
+
// deliberately skips — stranded in the UI on every Ctrl-C).
|
|
105
|
+
this.shuttingDown = false;
|
|
106
|
+
// Injectable killer for interruptAll (defaults to the shared cross-platform
|
|
107
|
+
// escalation; tests inject a spy). Kill logic itself stays in process-killer.mjs.
|
|
108
|
+
this.killer = opts.killer ?? killProcessTree;
|
|
109
|
+
this.sigintTimeoutMs = opts.sigintTimeoutMs ?? DEFAULT_SIGINT_TIMEOUT_MS;
|
|
94
110
|
|
|
95
111
|
// Per-resource execution registry — the source of truth for the execution
|
|
96
112
|
// snapshot uploaded to the server. Keyed by `${entityType}:${entityUuid}`
|
|
@@ -140,6 +156,35 @@ export class Waker {
|
|
|
140
156
|
this.interrupting.add(this.#execKey(entityType, entityUuid));
|
|
141
157
|
}
|
|
142
158
|
|
|
159
|
+
/**
|
|
160
|
+
* Daemon graceful shutdown (fix-daemon-exit-orphan-running-turn): mark this Waker
|
|
161
|
+
* SHUTTING DOWN and kill every live wake subprocess via the shared graceful
|
|
162
|
+
* escalation (SIGINT → SIGKILL after `sigintTimeoutMs`). The in-flight wake()
|
|
163
|
+
* promises then run their normal exit path, which — seeing `shuttingDown` —
|
|
164
|
+
* reports each turn `interrupted(shutdown)` and suppresses the execution
|
|
165
|
+
* interrupt report. Idempotent; never throws (a failed kill is logged and left
|
|
166
|
+
* to the server-side offline reconcile as the backstop).
|
|
167
|
+
*
|
|
168
|
+
* Returns after the kill signals are DISPATCHED — completion of the subprocesses
|
|
169
|
+
* (and their turn reports) is observed by awaiting the wake promises, which the
|
|
170
|
+
* daemon's stop() does with a bounded cap.
|
|
171
|
+
*/
|
|
172
|
+
interruptAll() {
|
|
173
|
+
this.shuttingDown = true;
|
|
174
|
+
for (const [key, entry] of this.executions) {
|
|
175
|
+
if (entry.status !== "running" || !entry.child) continue;
|
|
176
|
+
try {
|
|
177
|
+
Promise.resolve(
|
|
178
|
+
this.killer(entry.child, { sigintTimeoutMs: this.sigintTimeoutMs, logger: this.logger }),
|
|
179
|
+
).catch((err) => {
|
|
180
|
+
this.logger.warn(`[Chorus] shutdown: killProcessTree rejected for ${key}: ${err}`);
|
|
181
|
+
});
|
|
182
|
+
} catch (err) {
|
|
183
|
+
this.logger.warn(`[Chorus] shutdown: kill dispatch failed for ${key}: ${err}`);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
|
|
143
188
|
/** Recognized wake-triggering resource kinds the server's DaemonExecution accepts. */
|
|
144
189
|
// `daemon_session` is the ad-hoc conversation's own execution entity (子3 follow-up):
|
|
145
190
|
// an ad-hoc human_instruction wake has no task/idea/proposal/document behind it, so
|
|
@@ -397,30 +442,51 @@ export class Waker {
|
|
|
397
442
|
);
|
|
398
443
|
}
|
|
399
444
|
|
|
400
|
-
//
|
|
401
|
-
//
|
|
402
|
-
//
|
|
403
|
-
//
|
|
404
|
-
//
|
|
445
|
+
// Outcome classification for the exit reports below. Read the flags ONCE so the
|
|
446
|
+
// turn report and the execution report can never disagree on the outcome:
|
|
447
|
+
// • clean exit (code 0) → turn ended (unchanged)
|
|
448
|
+
// • interrupting flag (user) → turn interrupted(user)
|
|
449
|
+
// • shuttingDown (daemon SIGINT/TERM) → turn interrupted(shutdown)
|
|
450
|
+
// • dirty exit otherwise → turn interrupted(crash)
|
|
451
|
+
// User-interrupt outranks shutdown: the flag was set by an explicit authorized
|
|
452
|
+
// interrupt before the shutdown began, and its execution-row semantics (sticky,
|
|
453
|
+
// resumable) must be preserved.
|
|
454
|
+
const wasInterrupting = entity && execKey ? this.interrupting.has(execKey) : false;
|
|
455
|
+
const cleanExit = result && result.exitCode === 0;
|
|
456
|
+
|
|
457
|
+
// Turn lifecycle: the subprocess has exited — advance the server turn from
|
|
458
|
+
// `running` to its OUTCOME-AWARE terminal state (fix-daemon-exit-orphan-running-
|
|
459
|
+
// turn): `ended` on a clean exit, `interrupted` with the classified reason
|
|
460
|
+
// otherwise — mirroring what the execution row records, so the conversation
|
|
461
|
+
// history says WHY a turn stopped. Only when it actually reached `running` (a
|
|
462
|
+
// never-spawned wake left the turn `pending`; a pending→<terminal> skip is
|
|
463
|
+
// rejected server-side as invalid_transition). Swallow-safe; never throws.
|
|
405
464
|
if (sessionId && turnAdvancedToRunning) {
|
|
406
|
-
|
|
465
|
+
if (cleanExit) {
|
|
466
|
+
await this.#advanceTurn(sessionId, "ended", entity);
|
|
467
|
+
} else {
|
|
468
|
+
const reason = wasInterrupting ? "user" : this.shuttingDown ? "shutdown" : "crash";
|
|
469
|
+
await this.#advanceTurn(sessionId, "interrupted", entity, reason);
|
|
470
|
+
}
|
|
407
471
|
}
|
|
408
472
|
|
|
409
|
-
// Interrupt-vs-crash reporting (子3, Tech Design "Interrupt vs crash
|
|
410
|
-
// reporting"). Decide from the
|
|
411
|
-
// handler may have set while the subprocess was running:
|
|
473
|
+
// Interrupt-vs-crash EXECUTION reporting (子3, Tech Design "Interrupt vs crash
|
|
474
|
+
// reporting"). Decide from the same flags as the turn report above:
|
|
412
475
|
// • interrupting flag set → interrupted(reason="user")
|
|
413
476
|
// • no flag AND non-zero/null exit → interrupted(reason="crash")
|
|
414
477
|
// • clean exit (code 0) → nothing (unchanged)
|
|
415
|
-
//
|
|
416
|
-
//
|
|
417
|
-
//
|
|
478
|
+
// EXCEPT during shutdown (fix-daemon-exit-orphan-running-turn, review blocker
|
|
479
|
+
// 2): a shutdown-killed subprocess exits dirty with no user flag, which would
|
|
480
|
+
// record the STICKY execution state interrupted(crash) — a state the execution
|
|
481
|
+
// offline-reconcile deliberately SKIPS and the read gate keeps showing, so
|
|
482
|
+
// every Ctrl-C would strand a crash-interrupted row in the UI. During shutdown
|
|
483
|
+
// report NO execution interrupt (user-interrupt still reports — its sticky
|
|
484
|
+
// resumability is the point); the row is left for reconcileOffline to flip
|
|
485
|
+
// `ended` when this connection's stream drops.
|
|
418
486
|
if (entity && execKey) {
|
|
419
|
-
const wasInterrupting = this.interrupting.has(execKey);
|
|
420
|
-
const cleanExit = result && result.exitCode === 0;
|
|
421
487
|
if (wasInterrupting) {
|
|
422
488
|
await this.#report(entity, "user");
|
|
423
|
-
} else if (!cleanExit) {
|
|
489
|
+
} else if (!cleanExit && !this.shuttingDown) {
|
|
424
490
|
// No interrupt requested but the subprocess did not exit cleanly (non-zero
|
|
425
491
|
// code, or null from a spawn/transport failure) → treat as a crash.
|
|
426
492
|
await this.#report(entity, "crash");
|
|
@@ -480,19 +546,22 @@ export class Waker {
|
|
|
480
546
|
* Advance the server-side DaemonSessionTurn for this wake (子1) via the injected
|
|
481
547
|
* reporter. Identified server-side by the session business key (`sessionId`); the
|
|
482
548
|
* optional `entity` ({ entityType, entityUuid }) lets the server stamp the weak
|
|
483
|
-
* executionUuid link from the live execution row.
|
|
484
|
-
*
|
|
485
|
-
*
|
|
486
|
-
*
|
|
549
|
+
* executionUuid link from the live execution row. An `interrupted` status carries
|
|
550
|
+
* its classified `interruptedReason` (user/crash/shutdown). Never throws into the
|
|
551
|
+
* wake path — a reporter failure is logged and swallowed (the REST reporter
|
|
552
|
+
* already swallows; this is belt-and-braces, matching #report).
|
|
553
|
+
* @param {string} sessionId @param {"running"|"ended"|"interrupted"} status
|
|
487
554
|
* @param {{ entityType: string, entityUuid: string }|null} entity
|
|
555
|
+
* @param {"user"|"crash"|"shutdown"|null} [interruptedReason]
|
|
488
556
|
*/
|
|
489
|
-
async #advanceTurn(sessionId, status, entity) {
|
|
557
|
+
async #advanceTurn(sessionId, status, entity, interruptedReason = null) {
|
|
490
558
|
try {
|
|
491
559
|
await this.advanceTurn({
|
|
492
560
|
sessionId,
|
|
493
561
|
status,
|
|
494
562
|
entityType: entity?.entityType ?? null,
|
|
495
563
|
entityUuid: entity?.entityUuid ?? null,
|
|
564
|
+
...(status === "interrupted" && interruptedReason ? { interruptedReason } : {}),
|
|
496
565
|
});
|
|
497
566
|
} catch (err) {
|
|
498
567
|
this.logger.warn(
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@chorus-aidlc/chorus",
|
|
3
|
-
"version": "0.13.
|
|
3
|
+
"version": "0.13.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": {
|
package/prisma/schema.prisma
CHANGED
|
@@ -593,9 +593,16 @@ model DaemonSessionTurn {
|
|
|
593
593
|
sessionUuid String
|
|
594
594
|
session DaemonSession @relation(fields: [sessionUuid], references: [uuid], onDelete: Cascade)
|
|
595
595
|
seq Int // monotonic per session
|
|
596
|
-
trigger String // task_assigned | mentioned | elaboration | elaboration_verified | resume | human_instruction
|
|
596
|
+
trigger String // task_assigned | mentioned | elaboration | elaboration_verified | start_development | yolo_requested | resume | human_instruction
|
|
597
597
|
promptText String? // free-text body for human_instruction; null otherwise (canonical source)
|
|
598
|
-
status String @default("pending") // pending | running | ended
|
|
598
|
+
status String @default("pending") // pending | running | ended | interrupted
|
|
599
|
+
// Discriminator for the `interrupted` status: `user` = user-requested interrupt,
|
|
600
|
+
// `crash` = subprocess exited dirty, `shutdown` = daemon graceful shutdown killed
|
|
601
|
+
// the wake, `offline` = server-side reconcile of a turn whose origin connection
|
|
602
|
+
// went stale. Non-null iff status == interrupted. Unlike DaemonExecution's sticky
|
|
603
|
+
// `interrupted` (resumable), a turn's `interrupted` is TERMINAL — it is durable
|
|
604
|
+
// conversation history, never resumed or auto-retried.
|
|
605
|
+
interruptedReason String?
|
|
599
606
|
// Weak ref to the live DaemonExecution row this turn corresponds to (no DB FK;
|
|
600
607
|
// execution rows are reconciled/transient).
|
|
601
608
|
executionUuid String?
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(()=>{var a={};a.id=1244,a.ids=[1244],a.modules={261:a=>{"use strict";a.exports=require("next/dist/shared/lib/router/utils/app-paths")},3295:a=>{"use strict";a.exports=require("next/dist/server/app-render/after-task-async-storage.external.js")},4573:a=>{"use strict";a.exports=require("node:buffer")},7046:(a,b,c)=>{"use strict";c.d(b,{kX:()=>e,od:()=>f,sO:()=>j});var d=c(70936);function e(a,b){return d.NextResponse.json({success:!0,data:a,meta:b})}function f(a,b,c,e){return d.NextResponse.json({success:!0,data:a,meta:{page:b,pageSize:c,total:e}})}let g={BAD_REQUEST:"BAD_REQUEST",UNAUTHORIZED:"UNAUTHORIZED",FORBIDDEN:"FORBIDDEN",NOT_FOUND:"NOT_FOUND",CONFLICT:"CONFLICT",VALIDATION_ERROR:"VALIDATION_ERROR",ALREADY_CLAIMED:"ALREADY_CLAIMED",NOT_CLAIMED:"NOT_CLAIMED",INVALID_STATUS_TRANSITION:"INVALID_STATUS_TRANSITION",PERMISSION_DENIED:"PERMISSION_DENIED",INTERNAL_ERROR:"INTERNAL_ERROR",DATABASE_ERROR:"DATABASE_ERROR"},h={[g.BAD_REQUEST]:400,[g.UNAUTHORIZED]:401,[g.FORBIDDEN]:403,[g.NOT_FOUND]:404,[g.CONFLICT]:409,[g.VALIDATION_ERROR]:422,[g.ALREADY_CLAIMED]:409,[g.NOT_CLAIMED]:400,[g.INVALID_STATUS_TRANSITION]:400,[g.PERMISSION_DENIED]:403,[g.INTERNAL_ERROR]:500,[g.DATABASE_ERROR]:500};function i(a,b,c){let e=h[a]||500;return d.NextResponse.json({success:!1,error:{code:a,message:b,details:c}},{status:e})}let j={badRequest:(a,b)=>i(g.BAD_REQUEST,a,b),unauthorized:(a="Authentication required")=>i(g.UNAUTHORIZED,a),forbidden:(a="Access denied")=>i(g.FORBIDDEN,a),notFound:(a="Resource")=>i(g.NOT_FOUND,`${a} not found`),conflict:a=>i(g.CONFLICT,a),validationError:a=>i(g.VALIDATION_ERROR,"Validation failed",a),alreadyClaimed:()=>i(g.ALREADY_CLAIMED,"Resource is already claimed"),notClaimed:()=>i(g.NOT_CLAIMED,"Resource is not claimed"),invalidStatusTransition:(a,b)=>i(g.INVALID_STATUS_TRANSITION,`Invalid status transition from ${a} to ${b}`),permissionDenied:a=>i(g.PERMISSION_DENIED,`Permission denied: ${a}`),internal:(a="Internal server error")=>i(g.INTERNAL_ERROR,a),database:(a="Database error")=>i(g.DATABASE_ERROR,a)}},10846:a=>{"use strict";a.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},11716:(a,b,c)=>{"use strict";c.d(b,{HW:()=>f,dc:()=>e,f1:()=>g,yo:()=>d});let d=2592e3;function e(a){return"number"==typeof a&&Number.isFinite(a)&&a>0?Math.floor(a):d}function f(a,b=3600){try{let c=a.split(".");if(3!==c.length)return b;let d=JSON.parse(Buffer.from(c[1],"base64url").toString("utf-8"));if("number"==typeof d.exp){let a=d.exp-Math.floor(Date.now()/1e3);return Math.max(a+60,0)}return b}catch{return b}}function g(a){return{httpOnly:!0,secure:"false"!==process.env.COOKIE_SECURE,sameSite:"lax",path:"/",maxAge:a}}},14360:(a,b,c)=>{"use strict";Object.defineProperty(b,"I",{enumerable:!0,get:function(){return g}});let d=c(90800),e=c(82145),f=c(37442);async function g(a,b,c,g){if((0,d.isNodeNextResponse)(b)){var h;b.statusCode=c.status,b.statusMessage=c.statusText;let d=["set-cookie","www-authenticate","proxy-authenticate","vary"];null==(h=c.headers)||h.forEach((a,c)=>{if("x-middleware-set-cookie"!==c.toLowerCase())if("set-cookie"===c.toLowerCase())for(let d of(0,f.splitCookiesString)(a))b.appendHeader(c,d);else{let e=void 0!==b.getHeader(c);(d.includes(c.toLowerCase())||!e)&&b.appendHeader(c,a)}});let{originalResponse:i}=b;c.body&&"HEAD"!==a.method?await (0,e.pipeToNodeResponse)(c.body,i,g):i.end()}}},15264:(a,b,c)=>{"use strict";c.d(b,{$Y:()=>l,Bz:()=>o,En:()=>m,Iu:()=>p,NE:()=>j,VM:()=>n,ev:()=>k,wL:()=>q});var d=c(73365),e=c(3548),f=c(11716);let g="user_session",h="user_refresh";function i(){let a=process.env.NEXTAUTH_SECRET;if(!a)throw Error("NEXTAUTH_SECRET is not set");return new TextEncoder().encode(a)}async function j(a,b="1h"){return new d.P({...a,tokenType:"access"}).setProtectedHeader({alg:"HS256"}).setIssuedAt().setExpirationTime(b).sign(i())}async function k(a){return new d.P({userUuid:a.userUuid,companyUuid:a.companyUuid,tokenType:"refresh"}).setProtectedHeader({alg:"HS256"}).setIssuedAt().setExpirationTime("7d").sign(i())}async function l(a){try{let{payload:b}=await (0,e.V)(a,i());if("user"===b.type&&"access"===b.tokenType)return{type:"user",userUuid:b.userUuid,companyUuid:b.companyUuid,email:b.email,name:b.name,oidcSub:b.oidcSub,oidcAccessToken:b.oidcAccessToken,oidcRefreshToken:b.oidcRefreshToken,oidcExpiresAt:b.oidcExpiresAt};return null}catch{return null}}async function m(a){try{let{payload:b}=await (0,e.V)(a,i());if("refresh"===b.tokenType)return{userUuid:b.userUuid,companyUuid:b.companyUuid};return null}catch{return null}}async function n(a){let b=function(a){if(!a)return null;let b=a.match(/^Bearer\s+(.+)$/i);return b?b[1]:null}(a.headers.get("authorization"));if(b){let a=await l(b);if(a)return{type:"user",companyUuid:a.companyUuid,actorUuid:a.userUuid,email:a.email,name:a.name}}let c=a.cookies.get(g)?.value;if(!c)return null;let d=await l(c);return d?{type:"user",companyUuid:d.companyUuid,actorUuid:d.userUuid,email:d.email,name:d.name}:null}function o(a,b,c,d=3600){a.cookies.set(g,b,(0,f.f1)(d)),a.cookies.set(h,c,(0,f.f1)(604800))}function p(a){a.cookies.set(g,"",(0,f.f1)(0)),a.cookies.set(h,"",(0,f.f1)(0))}function q(a){return a.cookies.get(h)?.value||null}},19121:a=>{"use strict";a.exports=require("next/dist/server/app-render/action-async-storage.external.js")},22779:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{GE:()=>j,LY:()=>h,gH:()=>g,yx:()=>i});var e=c(52618),f=a([e]);async function g(a){let{oidcSub:b,email:c,name:d,companyUuid:f}=a,g=await e.z.user.findFirst({where:{oidcSub:b,companyUuid:f},select:{id:!0,uuid:!0,email:!0,name:!0,oidcSub:!0,companyUuid:!0,company:{select:{uuid:!0,name:!0}}}});if(g)return(g.email!==c||g.name!==d)&&(g=await e.z.user.update({where:{id:g.id},data:{email:c,name:d},select:{id:!0,uuid:!0,email:!0,name:!0,oidcSub:!0,companyUuid:!0,company:{select:{uuid:!0,name:!0}}}})),g;let h=await e.z.user.findFirst({where:{email:c,companyUuid:f}});return h?e.z.user.update({where:{id:h.id},data:{oidcSub:b,name:d},select:{id:!0,uuid:!0,email:!0,name:!0,oidcSub:!0,companyUuid:!0,company:{select:{uuid:!0,name:!0}}}}):e.z.user.create({data:{email:c,name:d,oidcSub:b,companyUuid:f},select:{id:!0,uuid:!0,email:!0,name:!0,oidcSub:!0,companyUuid:!0,company:{select:{uuid:!0,name:!0}}}})}async function h(a){let b=a.split("@")[1]?.toLowerCase();if(!b)throw Error("Invalid email: no domain");let c=await e.z.company.findFirst({where:{emailDomains:{has:b}},select:{id:!0,uuid:!0,name:!0}});c||(c=await e.z.company.create({data:{name:b,emailDomains:[b],oidcEnabled:!1},select:{id:!0,uuid:!0,name:!0}}));let d=`default_${a.toLowerCase()}`;return await e.z.user.upsert({where:{companyUuid_oidcSub:{companyUuid:c.uuid,oidcSub:d}},update:{email:a},create:{email:a,name:a.split("@")[0],oidcSub:d,companyUuid:c.uuid},select:{id:!0,uuid:!0,email:!0,name:!0,oidcSub:!0,companyUuid:!0,company:{select:{uuid:!0,name:!0}}}})}async function i(a){return e.z.user.findUnique({where:{uuid:a},select:{id:!0,uuid:!0,email:!0,name:!0,oidcSub:!0,companyUuid:!0,company:{select:{uuid:!0,name:!0,oidcIssuer:!0,oidcClientId:!0}}}})}async function j(a){return e.z.company.findFirst({where:{uuid:a},select:{id:!0,uuid:!0,name:!0,oidcIssuer:!0,oidcClientId:!0,oidcEnabled:!0}})}e=(f.then?(await f)():f)[0],d()}catch(a){d(a)}})},26849:a=>{"use strict";a.exports=require("@prisma/client/runtime/client")},29294:a=>{"use strict";a.exports=require("next/dist/server/app-render/work-async-storage.external.js")},44865:a=>{"use strict";a.exports=import("@prisma/client/runtime/query_compiler_fast_bg.postgresql.wasm-base64.mjs")},44870:a=>{"use strict";a.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},46809:(a,b,c)=>{"use strict";a.exports=c(44870)},63033:a=>{"use strict";a.exports=require("next/dist/server/app-render/work-unit-async-storage.external.js")},64939:a=>{"use strict";a.exports=import("pg")},66371:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.r(b),c.d(b,{POST:()=>k});var e=c(70936),f=c(7046),g=c(15264),h=c(22779),i=c(65582),j=a([h]);async function k(a){try{let b=(0,g.wL)(a);if(!b)return f.sO.unauthorized("No refresh token");let c=await (0,g.En)(b);if(!c)return f.sO.unauthorized("Invalid refresh token");let d=await (0,h.yx)(c.userUuid);if(!d)return f.sO.unauthorized("User not found");let i={type:"user",userUuid:d.uuid,companyUuid:d.companyUuid,email:d.email||"",name:d.name||void 0,oidcSub:d.oidcSub||""},[j,k]=await Promise.all([(0,g.NE)(i),(0,g.ev)(i)]),l=e.NextResponse.json((0,f.kX)({user:{uuid:d.uuid,email:d.email,name:d.name},company:{uuid:d.company.uuid,name:d.company.name},refreshed:!0}));return(0,g.Bz)(l,j,k),l}catch(a){return i.default.error({err:a},"Token refresh error"),f.sO.internal("Failed to refresh token")}}h=(j.then?(await j)():j)[0],d()}catch(a){d(a)}})},73136:a=>{"use strict";a.exports=require("node:url")},73365:(a,b,c)=>{"use strict";c.d(b,{P:()=>r});var d=c(64331),e=c(45483),f=c(81572),g=c(26084);async function h(a,b,c){let d=await (0,g.j)(a,b,"sign");return(0,f.O)(a,d),new Uint8Array(await crypto.subtle.sign((0,e.B)(a,d.algorithm),d,c))}var i=c(50600),j=c(4927),k=c(55865),l=c(32020),m=c(25546),n=c(34602);class o{#a;#b;#c;constructor(a){if(!(a instanceof Uint8Array))throw TypeError("payload must be an instance of Uint8Array");this.#a=a}setProtectedHeader(a){if(this.#b)throw TypeError("setProtectedHeader can only be called once");return this.#b=a,this}setUnprotectedHeader(a){if(this.#c)throw TypeError("setUnprotectedHeader can only be called once");return this.#c=a,this}async sign(a,b){let c,e,f,g;if(!this.#b&&!this.#c)throw new j.Ye("either setProtectedHeader or setUnprotectedHeader must be called before #sign()");if(!(0,i.f)(this.#b,this.#c))throw new j.Ye("JWS Protected and JWS Unprotected Header Parameter names must be disjoint");let o={...this.#b,...this.#c},p=(0,m.n)(j.Ye,new Map([["b64",!0]]),b?.crit,this.#b,o),q=!0;if(p.has("b64")&&"boolean"!=typeof(q=this.#b.b64))throw new j.Ye('The "b64" (base64url-encode payload) Header Parameter must be a boolean');let{alg:r}=o;if("string"!=typeof r||!r)throw new j.Ye('JWS "alg" (Algorithm) Header Parameter missing or invalid');(0,l.y)(r,a,"sign"),q?(c=(0,d.l)(this.#a),e=(0,k.lF)(c)):(e=this.#a,c=""),this.#b?(f=(0,d.l)(JSON.stringify(this.#b)),g=(0,k.lF)(f)):(f="",g=new Uint8Array);let s=(0,k.xW)(g,(0,k.lF)("."),e),t=await (0,n.l)(a,r),u=await h(r,t,s),v={signature:(0,d.l)(u),payload:c};return this.#c&&(v.header=this.#c),this.#b&&(v.protected=f),v}}class p{#d;constructor(a){this.#d=new o(a)}setProtectedHeader(a){return this.#d.setProtectedHeader(a),this}async sign(a,b){let c=await this.#d.sign(a,b);if(void 0===c.payload)throw TypeError("use the flattened module for creating JWS with b64: false");return`${c.protected}.${c.payload}.${c.signature}`}}var q=c(40201);class r{#b;#e;constructor(a={}){this.#e=new q.cE(a)}setIssuer(a){return this.#e.iss=a,this}setSubject(a){return this.#e.sub=a,this}setAudience(a){return this.#e.aud=a,this}setJti(a){return this.#e.jti=a,this}setNotBefore(a){return this.#e.nbf=a,this}setExpirationTime(a){return this.#e.exp=a,this}setIssuedAt(a){return this.#e.iat=a,this}setProtectedHeader(a){return this.#b=a,this}async sign(a,b){let c=new p(this.#e.data());if(c.setProtectedHeader(this.#b),Array.isArray(this.#b?.crit)&&this.#b.crit.includes("b64")&&!1===this.#b.b64)throw new j.Dp("JWTs MUST NOT use unencoded payload");return c.sign(a,b)}}},74552:a=>{"use strict";a.exports=require("pino")},75811:a=>{"use strict";a.exports=import("@prisma/client/runtime/query_compiler_fast_bg.postgresql.mjs")},76760:a=>{"use strict";a.exports=require("node:path")},81180:()=>{},86439:a=>{"use strict";a.exports=require("next/dist/shared/lib/no-fallback-error.external")},88081:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.r(b),c.d(b,{handler:()=>x,patchFetch:()=>w,routeModule:()=>y,serverHooks:()=>B,workAsyncStorage:()=>z,workUnitAsyncStorage:()=>A});var e=c(46809),f=c(30630),g=c(81405),h=c(8877),i=c(91959),j=c(261),k=c(80605),l=c(64339),m=c(57717),n=c(59862),o=c(14360),p=c(37442),q=c(24640),r=c(68249),s=c(86439),t=c(39959),u=c(66371),v=a([u]);u=(v.then?(await v)():v)[0];let y=new e.AppRouteRouteModule({definition:{kind:f.RouteKind.APP_ROUTE,page:"/api/auth/refresh/route",pathname:"/api/auth/refresh",filename:"route",bundlePath:"app/api/auth/refresh/route"},distDir:".next",relativeProjectDir:"",resolvedPagePath:"/home/ubuntu/dev/ai-pm/src/app/api/auth/refresh/route.ts",nextConfigOutput:"standalone",userland:u}),{workAsyncStorage:z,workUnitAsyncStorage:A,serverHooks:B}=y;function w(){return(0,g.patchFetch)({workAsyncStorage:z,workUnitAsyncStorage:A})}async function x(a,b,c){var d;let e="/api/auth/refresh/route";"/index"===e&&(e="/");let g=await y.prepare(a,b,{srcPage:e,multiZoneDraftMode:!1});if(!g)return b.statusCode=400,b.end("Bad Request"),null==c.waitUntil||c.waitUntil.call(c,Promise.resolve()),null;let{buildId:u,params:v,nextConfig:w,isDraftMode:x,prerenderManifest:z,routerServerContext:A,isOnDemandRevalidate:B,revalidateOnlyGenerated:C,resolvedPathname:D}=g,E=(0,j.normalizeAppPath)(e),F=!!(z.dynamicRoutes[E]||z.routes[D]);if(F&&!x){let a=!!z.routes[D],b=z.dynamicRoutes[E];if(b&&!1===b.fallback&&!a)throw new s.NoFallbackError}let G=null;!F||y.isDev||x||(G=D,G="/index"===G?"/":G);let H=!0===y.isDev||!F,I=F&&!H,J=a.method||"GET",K=(0,i.getTracer)(),L=K.getActiveScopeSpan(),M={params:v,prerenderManifest:z,renderOpts:{experimental:{cacheComponents:!!w.experimental.cacheComponents,authInterrupts:!!w.experimental.authInterrupts},supportsDynamicResponse:H,incrementalCache:(0,h.getRequestMeta)(a,"incrementalCache"),cacheLifeProfiles:null==(d=w.experimental)?void 0:d.cacheLife,isRevalidate:I,waitUntil:c.waitUntil,onClose:a=>{b.on("close",a)},onAfterTaskError:void 0,onInstrumentationRequestError:(b,c,d)=>y.onRequestError(a,b,d,A)},sharedContext:{buildId:u}},N=new k.NodeNextRequest(a),O=new k.NodeNextResponse(b),P=l.NextRequestAdapter.fromNodeNextRequest(N,(0,l.signalFromNodeResponse)(b));try{let d=async c=>y.handle(P,M).finally(()=>{if(!c)return;c.setAttributes({"http.status_code":b.statusCode,"next.rsc":!1});let d=K.getRootSpanAttributes();if(!d)return;if(d.get("next.span_type")!==m.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${d.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let e=d.get("next.route");if(e){let a=`${J} ${e}`;c.setAttributes({"next.route":e,"http.route":e,"next.span_name":a}),c.updateName(a)}else c.updateName(`${J} ${a.url}`)}),g=async g=>{var i,j;let k=async({previousCacheEntry:f})=>{try{if(!(0,h.getRequestMeta)(a,"minimalMode")&&B&&C&&!f)return b.statusCode=404,b.setHeader("x-nextjs-cache","REVALIDATED"),b.end("This page could not be found"),null;let e=await d(g);a.fetchMetrics=M.renderOpts.fetchMetrics;let i=M.renderOpts.pendingWaitUntil;i&&c.waitUntil&&(c.waitUntil(i),i=void 0);let j=M.renderOpts.collectedTags;if(!F)return await (0,o.I)(N,O,e,M.renderOpts.pendingWaitUntil),null;{let a=await e.blob(),b=(0,p.toNodeOutgoingHttpHeaders)(e.headers);j&&(b[r.NEXT_CACHE_TAGS_HEADER]=j),!b["content-type"]&&a.type&&(b["content-type"]=a.type);let c=void 0!==M.renderOpts.collectedRevalidate&&!(M.renderOpts.collectedRevalidate>=r.INFINITE_CACHE)&&M.renderOpts.collectedRevalidate,d=void 0===M.renderOpts.collectedExpire||M.renderOpts.collectedExpire>=r.INFINITE_CACHE?void 0:M.renderOpts.collectedExpire;return{value:{kind:t.CachedRouteKind.APP_ROUTE,status:e.status,body:Buffer.from(await a.arrayBuffer()),headers:b},cacheControl:{revalidate:c,expire:d}}}}catch(b){throw(null==f?void 0:f.isStale)&&await y.onRequestError(a,b,{routerKind:"App Router",routePath:e,routeType:"route",revalidateReason:(0,n.c)({isRevalidate:I,isOnDemandRevalidate:B})},A),b}},l=await y.handleResponse({req:a,nextConfig:w,cacheKey:G,routeKind:f.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:z,isRoutePPREnabled:!1,isOnDemandRevalidate:B,revalidateOnlyGenerated:C,responseGenerator:k,waitUntil:c.waitUntil});if(!F)return null;if((null==l||null==(i=l.value)?void 0:i.kind)!==t.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==l||null==(j=l.value)?void 0:j.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});(0,h.getRequestMeta)(a,"minimalMode")||b.setHeader("x-nextjs-cache",B?"REVALIDATED":l.isMiss?"MISS":l.isStale?"STALE":"HIT"),x&&b.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let m=(0,p.fromNodeOutgoingHttpHeaders)(l.value.headers);return(0,h.getRequestMeta)(a,"minimalMode")&&F||m.delete(r.NEXT_CACHE_TAGS_HEADER),!l.cacheControl||b.getHeader("Cache-Control")||m.get("Cache-Control")||m.set("Cache-Control",(0,q.getCacheControlHeader)(l.cacheControl)),await (0,o.I)(N,O,new Response(l.value.body,{headers:m,status:l.value.status||200})),null};L?await g(L):await K.withPropagatedContext(a.headers,()=>K.trace(m.BaseServerSpan.handleRequest,{spanName:`${J} ${a.url}`,kind:i.SpanKind.SERVER,attributes:{"http.method":J,"http.target":a.url}},g))}catch(b){if(b instanceof s.NoFallbackError||await y.onRequestError(a,b,{routerKind:"App Router",routePath:E,routeType:"route",revalidateReason:(0,n.c)({isRevalidate:I,isOnDemandRevalidate:B})}),F)throw b;return await (0,o.I)(N,O,new Response(null,{status:500})),null}}d()}catch(a){d(a)}})},90908:()=>{}};var b=require("../../../../webpack-runtime.js");b.C(a);var c=b.X(0,[8843,936,9833,3548,2618],()=>b(b.s=88081));module.exports=c})();
|