@chorus-aidlc/chorus 0.17.3 → 0.18.0
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 +327 -325
- package/.next/standalone/.next/app-path-routes-manifest.json +37 -37
- package/.next/standalone/.next/build-manifest.json +5 -5
- package/.next/standalone/.next/prerender-manifest.json +27 -27
- package/.next/standalone/.next/server/app/(dashboard)/project-groups/[uuid]/page.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/project-groups/[uuid]/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/project-groups/[uuid]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/activity/page.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/activity/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/activity/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/[ideaUuid]/page.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/[ideaUuid]/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/[ideaUuid]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/page.js +2 -2
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page.js +2 -2
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/page.js +2 -2
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/graph/page.js +2 -2
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/graph/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/graph/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page.js +2 -2
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/new/page.js +2 -2
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/new/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/new/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/page.js +1 -1
- 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 +2 -2
- package/.next/standalone/.next/server/app/_not-found.rsc +2 -2
- package/.next/standalone/.next/server/app/admin/companies/[uuid]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/admin/companies/new/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/admin/companies/new.html +2 -2
- package/.next/standalone/.next/server/app/admin/companies/new.rsc +2 -2
- package/.next/standalone/.next/server/app/admin/companies/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/admin/companies.html +2 -2
- package/.next/standalone/.next/server/app/admin/companies.rsc +2 -2
- package/.next/standalone/.next/server/app/admin/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/admin.html +2 -2
- package/.next/standalone/.next/server/app/admin.rsc +2 -2
- package/.next/standalone/.next/server/app/api/admin/companies/[uuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/admin/companies/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/admin/login/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/admin/session/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/agent-connections/route.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_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/check-default/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/company-oidc/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/default-login/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/identify/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/me/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/sync-token/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/comments/route.js +1 -1
- package/.next/standalone/.next/server/app/api/comments/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/comments/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon/connection-heartbeat/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/daemon/connection-heartbeat/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon/control/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon/directory-request/report/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/daemon/directory-request/report/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon/execution-state/route.js.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.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.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/daemon/report-interrupt/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon/resume/route.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon/resume/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/daemon/resume/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon/transcript/route.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon/transcript/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/daemon/transcript/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon/turn-advance/route.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon/turn-advance/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/daemon/turn-advance/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon-directory-requests/[uuid]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/daemon-directory-requests/[uuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon-directory-requests/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/daemon-directory-requests/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/instruction/route.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/instruction/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/instruction/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/repoint/route.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/repoint/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/repoint/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/route.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon-sessions/ad-hoc/route.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon-sessions/ad-hoc/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/daemon-sessions/ad-hoc/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon-sessions/route.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon-sessions/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/daemon-sessions/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/documents/[uuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/entities/[type]/[uuid]/root-idea/route.js +1 -1
- package/.next/standalone/.next/server/app/api/entities/[type]/[uuid]/root-idea/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/entities/[type]/[uuid]/root-idea/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/events/notifications/route.js +1 -1
- package/.next/standalone/.next/server/app/api/events/notifications/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/events/notifications/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/events/route.js +1 -1
- package/.next/standalone/.next/server/app/api/events/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/events/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/health/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/claim/route.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/claim/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/claim/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/preview/route.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/preview/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/preview/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/route.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/parent/route.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/parent/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/parent/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/release/route.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/release/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/release/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/route.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/wake-preview/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/wake-preview/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/conversational/route.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/conversational/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/ideas/conversational/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/mcp/route.js +1 -1
- package/.next/standalone/.next/server/app/api/mcp/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/mcp/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/me/assignments/route.js +1 -1
- package/.next/standalone/.next/server/app/api/me/assignments/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/me/assignments/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/mentionables/route.js +1 -1
- package/.next/standalone/.next/server/app/api/mentionables/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/mentionables/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/notifications/[uuid]/archive/route.js +1 -1
- package/.next/standalone/.next/server/app/api/notifications/[uuid]/archive/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/notifications/[uuid]/archive/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/notifications/[uuid]/read/route.js +1 -1
- package/.next/standalone/.next/server/app/api/notifications/[uuid]/read/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/notifications/[uuid]/read/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/notifications/preferences/route.js +1 -1
- package/.next/standalone/.next/server/app/api/notifications/preferences/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/notifications/preferences/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/notifications/read-all/route.js +1 -1
- package/.next/standalone/.next/server/app/api/notifications/read-all/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/notifications/read-all/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/notifications/route.js +1 -1
- package/.next/standalone/.next/server/app/api/notifications/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/notifications/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/notifications/unread-count/route.js +1 -1
- package/.next/standalone/.next/server/app/api/notifications/unread-count/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/notifications/unread-count/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/project-groups/[uuid]/dashboard/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/project-groups/[uuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/project-groups/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/project-visits/pin/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/project-visits/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/project-visits/visit/route_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]/agent-cwds/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/agent-cwds/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/available/route.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/available/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/available/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/documents/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/group/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/route.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/route.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_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/summary/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/resource-graph/route.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/resource-graph/route.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_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/stats/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/dependencies/route.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/dependencies/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/dependencies/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/route.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/agent-cwd-options/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/projects/agent-cwd-options/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/projects/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/proposals/[uuid]/approve/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/proposals/[uuid]/close/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/proposals/[uuid]/reject/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/proposals/[uuid]/revoke/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/proposals/[uuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/references/[uuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/references/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/search/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/session/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/sessions/[uuid]/route.js +1 -1
- package/.next/standalone/.next/server/app/api/sessions/[uuid]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/sessions/[uuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/claim/route.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/claim/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/claim/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/[dependsOnUuid]/route.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/[dependsOnUuid]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/[dependsOnUuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/route.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/release/route.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/release/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/release/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/route.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/sessions/route.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/sessions/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/sessions/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/index.html +2 -2
- package/.next/standalone/.next/server/app/index.rsc +2 -2
- package/.next/standalone/.next/server/app/login/admin/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/login/admin.html +2 -2
- package/.next/standalone/.next/server/app/login/admin.rsc +2 -2
- package/.next/standalone/.next/server/app/login/callback/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/login/callback.html +2 -2
- package/.next/standalone/.next/server/app/login/callback.rsc +2 -2
- package/.next/standalone/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/login/pick-workspace/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/login/pick-workspace.html +2 -2
- package/.next/standalone/.next/server/app/login/pick-workspace.rsc +2 -2
- package/.next/standalone/.next/server/app/login.html +2 -2
- package/.next/standalone/.next/server/app/login.rsc +2 -2
- package/.next/standalone/.next/server/app/onboarding/page.js +2 -2
- package/.next/standalone/.next/server/app/onboarding/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/onboarding/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/onboarding.html +2 -2
- package/.next/standalone/.next/server/app/onboarding.rsc +3 -3
- package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/projects.html +2 -2
- package/.next/standalone/.next/server/app/projects.rsc +3 -3
- package/.next/standalone/.next/server/app/settings.html +2 -2
- package/.next/standalone/.next/server/app/settings.rsc +4 -4
- package/.next/standalone/.next/server/app-paths-manifest.json +37 -37
- package/.next/standalone/.next/server/chunks/109.js +1 -0
- package/.next/standalone/.next/server/chunks/1318.js +1 -1
- package/.next/standalone/.next/server/chunks/1496.js +1 -0
- package/.next/standalone/.next/server/chunks/1559.js +2 -2
- package/.next/standalone/.next/server/chunks/2572.js +1 -1
- package/.next/standalone/.next/server/chunks/2961.js +1 -1
- package/.next/standalone/.next/server/chunks/3112.js +1 -1
- package/.next/standalone/.next/server/chunks/{1201.js → 3619.js} +2 -2
- package/.next/standalone/.next/server/chunks/{3630.js → 4810.js} +1 -1
- package/.next/standalone/.next/server/chunks/4827.js +1 -1
- package/.next/standalone/.next/server/chunks/5245.js +1 -1
- package/.next/standalone/.next/server/chunks/6113.js +1 -1
- package/.next/standalone/.next/server/chunks/6506.js +2 -2
- package/.next/standalone/.next/server/chunks/6737.js +1 -0
- package/.next/standalone/.next/server/chunks/6753.js +3 -3
- package/.next/standalone/.next/server/chunks/679.js +1 -1
- package/.next/standalone/.next/server/chunks/731.js +1 -0
- package/.next/standalone/.next/server/chunks/7368.js +1 -1
- package/.next/standalone/.next/server/chunks/7530.js +1 -1
- package/.next/standalone/.next/server/chunks/7857.js +1 -0
- package/.next/standalone/.next/server/chunks/920.js +1 -1
- package/.next/standalone/.next/server/chunks/9213.js +1 -1
- package/.next/standalone/.next/server/chunks/9378.js +1 -1
- package/.next/standalone/.next/server/chunks/9931.js +1 -1
- package/.next/standalone/.next/server/middleware-build-manifest.js +1 -1
- package/.next/standalone/.next/server/middleware-manifest.json +5 -5
- package/.next/standalone/.next/server/pages/404.html +2 -2
- package/.next/standalone/.next/server/pages/500.html +1 -1
- package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/server-reference-manifest.json +1 -1
- package/.next/standalone/.next/static/chunks/11595.0afa1a540f681fb4.js +1 -0
- package/.next/standalone/.next/static/chunks/22705-324a191727ae45b7.js +1 -0
- package/.next/standalone/.next/static/chunks/33456.4a5f4712a7e78d8f.js +1 -0
- package/.next/standalone/.next/static/chunks/44216-3876e84f5b02d355.js +1 -0
- package/.next/standalone/.next/static/chunks/4860.5719e32b95be2d93.js +1 -0
- package/.next/standalone/.next/static/chunks/6528-a8a562ef7d26bb43.js +1 -0
- package/.next/standalone/.next/static/chunks/67439-7b339b28ed0ecfc6.js +1 -0
- package/.next/standalone/.next/static/chunks/79919-ae8bd8d8ec1e38ce.js +1 -0
- package/.next/standalone/.next/static/chunks/{46021-f5d072b0cbcb7fac.js → 82203-4ce5926624df7ed0.js} +1 -1
- package/.next/standalone/.next/static/chunks/94643-37ac7b8ef8ea5e75.js +1 -0
- package/.next/standalone/.next/static/chunks/99373.6c1509bfaf599741.js +1 -0
- package/.next/standalone/.next/static/chunks/99775-697e82ee04eac6b1.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/layout-2fda722cdace8147.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/dashboard/{page-77b175e52a85f3cb.js → page-b45c42c536eff64b.js} +1 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page-792aba7fd6b6daa3.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/page-800a979f12b73f27.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/graph/{page-69d3162667f85677.js → page-34de35f75aa71f6d.js} +1 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page-a16002aa2a911619.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/new/{page-a3f83031dfbafc81.js → page-e8030824994edf35.js} +1 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/page-4f7f1ddbaf79be8f.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/{page-3c7ff3a40a4615ac.js → page-349b0977f3c6209a.js} +1 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/tasks/{page-7b8e11fdc5b596d0.js → page-be43cb06112fce12.js} +1 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/settings/page-6916e1abab42a6e6.js +1 -0
- package/.next/standalone/.next/static/chunks/app/onboarding/{page-0ce33b9327fe3d8c.js → page-c0090caae202eae5.js} +1 -1
- package/.next/standalone/.next/static/chunks/{webpack-dffb97a4feb8faba.js → webpack-cfb63dd1b416c92e.js} +1 -1
- package/.next/standalone/.next/static/css/75c761a5428611fa.css +1 -0
- package/.next/standalone/package.json +1 -1
- package/.next/standalone/public/chorus-plugin/.claude-plugin/plugin.json +2 -2
- package/.next/standalone/public/chorus-plugin/agents/code-reviewer.md +1 -0
- package/.next/standalone/public/chorus-plugin/agents/proposal-reviewer.md +12 -3
- package/.next/standalone/public/chorus-plugin/agents/task-reviewer.md +4 -0
- package/.next/standalone/public/chorus-plugin/bin/chorus-api.sh +1 -1
- package/.next/standalone/public/chorus-plugin/bin/on-post-submit-for-verify.sh +3 -3
- package/.next/standalone/public/chorus-plugin/bin/on-post-submit-proposal.sh +3 -3
- package/.next/standalone/public/chorus-plugin/bin/on-post-verify-task.sh +2 -2
- package/.next/standalone/public/chorus-plugin/bin/on-session-start.sh +39 -64
- package/.next/standalone/public/chorus-plugin/bin/resolve-spec-mode.sh +107 -0
- package/.next/standalone/public/chorus-plugin/bin/tests/test-resolver-drift.sh +46 -0
- package/.next/standalone/public/chorus-plugin/bin/tests/test-skill-harness-fidelity-negative.sh +328 -0
- package/.next/standalone/public/chorus-plugin/bin/tests/test-skill-harness-fidelity.sh +372 -0
- package/.next/standalone/public/chorus-plugin/bin/tests/test-spec-mode-resolution.sh +83 -0
- package/.next/standalone/public/chorus-plugin/skills/brainstorm/SKILL.md +1 -1
- package/.next/standalone/public/chorus-plugin/skills/chorus/SKILL.md +11 -6
- package/.next/standalone/public/chorus-plugin/skills/chorus-cli/SKILL.md +1 -1
- package/.next/standalone/public/chorus-plugin/skills/develop/SKILL.md +14 -9
- package/.next/standalone/public/chorus-plugin/skills/docs/SKILL.md +1 -1
- package/.next/standalone/public/chorus-plugin/skills/idea/SKILL.md +1 -1
- package/.next/standalone/public/chorus-plugin/skills/openspec-aware/SKILL.md +27 -31
- package/.next/standalone/public/chorus-plugin/skills/orchestrate/SKILL.md +11 -1
- package/.next/standalone/public/chorus-plugin/skills/proposal/SKILL.md +14 -7
- package/.next/standalone/public/chorus-plugin/skills/quick-dev/SKILL.md +6 -4
- package/.next/standalone/public/chorus-plugin/skills/review/SKILL.md +10 -8
- package/.next/standalone/public/chorus-plugin/skills/spec-lite/SKILL.md +147 -0
- package/.next/standalone/public/chorus-plugin/skills/yolo/SKILL.md +49 -34
- package/.next/standalone/public/kiro-plugin/.kiro/agents/chorus-code-reviewer.json +1 -1
- package/.next/standalone/public/kiro-plugin/.kiro/agents/chorus-proposal-reviewer.json +2 -1
- package/.next/standalone/public/kiro-plugin/.kiro/agents/chorus-task-reviewer.json +1 -1
- package/.next/standalone/public/kiro-plugin/.kiro/agents/chorus.md +1 -1
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-brainstorm/SKILL.md +1 -1
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-cli/SKILL.md +1 -1
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-develop/SKILL.md +9 -7
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-docs/SKILL.md +1 -1
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-idea/SKILL.md +1 -1
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-openspec-aware/SKILL.md +35 -27
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-orchestrate/SKILL.md +9 -1
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-proposal/SKILL.md +14 -7
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-quick-dev/SKILL.md +2 -2
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-review/SKILL.md +8 -8
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-spec-lite/SKILL.md +147 -0
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-yolo/SKILL.md +39 -25
- package/.next/standalone/public/kiro-plugin/.kiro/steering/chorus.md +11 -6
- package/.next/standalone/public/kiro-plugin/bin/chorus-api.sh +1 -1
- package/.next/standalone/public/kiro-plugin/bin/on-agent-spawn.sh +41 -0
- package/.next/standalone/public/kiro-plugin/bin/on-post-submit-for-verify.sh +3 -3
- package/.next/standalone/public/kiro-plugin/bin/on-post-submit-proposal.sh +3 -3
- package/.next/standalone/public/kiro-plugin/bin/on-post-verify-task.sh +2 -2
- package/.next/standalone/public/kiro-plugin/bin/resolve-spec-mode.sh +107 -0
- package/.next/standalone/public/kiro-plugin/manifest.txt +2 -0
- package/.next/standalone/public/skill/chorus/SKILL.md +11 -1
- package/.next/standalone/public/skill/code-reviewer-chorus/SKILL.md +1 -0
- package/.next/standalone/public/skill/develop-chorus/SKILL.md +1 -1
- package/.next/standalone/public/skill/orchestrate-chorus/SKILL.md +11 -1
- package/.next/standalone/public/skill/proposal-reviewer-chorus/SKILL.md +5 -2
- package/.next/standalone/public/skill/quick-dev-chorus/SKILL.md +1 -1
- package/.next/standalone/public/skill/review-chorus/SKILL.md +5 -3
- package/.next/standalone/public/skill/task-reviewer-chorus/SKILL.md +4 -0
- package/.next/standalone/public/skill/yolo-chorus/SKILL.md +23 -7
- package/README.ja.md +3 -3
- package/README.ko.md +3 -3
- package/README.md +3 -3
- package/README.zh.md +3 -3
- package/cli/agent-cli-config.mjs +323 -0
- package/cli/agent-launcher.mjs +44 -16
- package/cli/claude-spawner.mjs +22 -13
- package/cli/codex-spawner.mjs +23 -15
- package/cli/credentials.mjs +7 -0
- package/cli/daemon-config.mjs +14 -0
- package/cli/daemon.mjs +32 -6
- package/cli/dsh-managed-config.mjs +26 -28
- package/cli/dsh-spawner.mjs +23 -15
- package/cli/init/steps/credential-seed.mjs +1 -1
- package/cli/kiro-spawner.mjs +22 -15
- package/cli/launch-diagnostics.mjs +67 -0
- package/cli/login.mjs +17 -1
- package/cli/pi-spawner.mjs +19 -12
- package/cli/prompts.mjs +52 -2
- package/cli/spawner-select.mjs +6 -11
- package/package.json +1 -1
- package/.next/standalone/.next/server/chunks/1114.js +0 -1
- package/.next/standalone/.next/server/chunks/1155.js +0 -1
- package/.next/standalone/.next/server/chunks/6465.js +0 -1
- package/.next/standalone/.next/server/chunks/8105.js +0 -1
- package/.next/standalone/.next/server/chunks/8232.js +0 -1
- package/.next/standalone/.next/static/chunks/11595.f7c3ef5cd7fc8feb.js +0 -1
- package/.next/standalone/.next/static/chunks/33456.c81079032acc2966.js +0 -1
- package/.next/standalone/.next/static/chunks/45262-38b332523f00a223.js +0 -1
- package/.next/standalone/.next/static/chunks/4860.f0cfb1201191ae88.js +0 -1
- package/.next/standalone/.next/static/chunks/66609-64a01d5cb415465b.js +0 -1
- package/.next/standalone/.next/static/chunks/79919-c5a2a3fd8f5f9204.js +0 -1
- package/.next/standalone/.next/static/chunks/94394-38194b81b489275c.js +0 -1
- package/.next/standalone/.next/static/chunks/94643-f1bdf37fb3bb6adb.js +0 -1
- package/.next/standalone/.next/static/chunks/95225-96b44da3ebd6ddad.js +0 -1
- package/.next/standalone/.next/static/chunks/96482-2b3bdb2544d72e5a.js +0 -1
- package/.next/standalone/.next/static/chunks/99373.3c23ac2efbd4db02.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/layout-66328332f62c7371.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page-87ceae13c4950fc9.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/page-45e95154e546460e.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page-b7b2017e5be69564.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/page-8b06834ca0f663bb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/settings/page-efe5326c47aca9ca.js +0 -1
- package/.next/standalone/.next/static/css/1d9cf83f50b6db00.css +0 -1
- /package/.next/standalone/.next/static/{wuqYN129vOIGymh_NEdZe → IxKVu5zkFPTjSKAUR99yH}/_buildManifest.js +0 -0
- /package/.next/standalone/.next/static/{wuqYN129vOIGymh_NEdZe → IxKVu5zkFPTjSKAUR99yH}/_ssgManifest.js +0 -0
package/cli/kiro-spawner.mjs
CHANGED
|
@@ -28,6 +28,8 @@
|
|
|
28
28
|
// no-op here (this task owns spawn/resume/trust/interrupt + sessionId capture).
|
|
29
29
|
|
|
30
30
|
import { spawn } from "node:child_process";
|
|
31
|
+
import { safeSpawnError } from "./launch-diagnostics.mjs";
|
|
32
|
+
import { validateAgentCliConfig, overlayAgentEnv, getAgentEnv, assertConfiguredShimArgs } from "./agent-cli-config.mjs";
|
|
31
33
|
import { readdirSync, readFileSync, statSync } from "node:fs";
|
|
32
34
|
import { homedir } from "node:os";
|
|
33
35
|
import { win32 as pathWin32, posix as pathPosix, join } from "node:path";
|
|
@@ -37,8 +39,8 @@ import { reconstructTranscript as defaultReconstructTranscript } from "./kiro-tr
|
|
|
37
39
|
const NOOP_LOGGER = { info() {}, warn() {}, error() {} };
|
|
38
40
|
|
|
39
41
|
/** Directory Kiro persists its CLI session store under (per-cwd conversations). */
|
|
40
|
-
export function kiroSessionsDir() {
|
|
41
|
-
return join(homedir(), ".kiro", "sessions", "cli");
|
|
42
|
+
export function kiroSessionsDir(env = process.env, platform = process.platform) {
|
|
43
|
+
return join(getAgentEnv(env, "HOME", platform) || getAgentEnv(env, "USERPROFILE", platform) || homedir(), ".kiro", "sessions", "cli");
|
|
42
44
|
}
|
|
43
45
|
|
|
44
46
|
/**
|
|
@@ -96,14 +98,15 @@ export function resolveKiroPath(deps = {}) {
|
|
|
96
98
|
}
|
|
97
99
|
});
|
|
98
100
|
|
|
99
|
-
|
|
100
|
-
|
|
101
|
+
const override = getAgentEnv(env, "CHORUS_KIRO_PATH", platform);
|
|
102
|
+
if (override && isFile(override)) {
|
|
103
|
+
return override;
|
|
101
104
|
}
|
|
102
105
|
|
|
103
106
|
const isWin = platform === "win32";
|
|
104
107
|
const p = isWin ? pathWin32 : pathPosix;
|
|
105
108
|
const names = isWin ? ["kiro-cli.cmd", "kiro-cli.exe", "kiro-cli"] : ["kiro-cli"];
|
|
106
|
-
const pathVar = env
|
|
109
|
+
const pathVar = getAgentEnv(env, "PATH", platform) || env.Path || "";
|
|
107
110
|
const dirs = pathVar.split(p.delimiter).filter(Boolean);
|
|
108
111
|
for (const dir of dirs) {
|
|
109
112
|
for (const name of names) {
|
|
@@ -126,7 +129,7 @@ export function resolveSpawnCommand(kiroPath, args, platform = process.platform,
|
|
|
126
129
|
const isWin = platform === "win32";
|
|
127
130
|
const lower = kiroPath.toLowerCase();
|
|
128
131
|
if (isWin && (lower.endsWith(".cmd") || lower.endsWith(".bat"))) {
|
|
129
|
-
const comspec = env
|
|
132
|
+
const comspec = getAgentEnv(env, "COMSPEC", platform) || "cmd.exe";
|
|
130
133
|
return { command: comspec, argv: ["/d", "/s", "/c", kiroPath, ...args] };
|
|
131
134
|
}
|
|
132
135
|
return { command: kiroPath, argv: args };
|
|
@@ -229,6 +232,8 @@ export class KiroSpawner {
|
|
|
229
232
|
this.permissionMode = opts.permissionMode ?? "chorus";
|
|
230
233
|
this.creds = opts.creds ?? null;
|
|
231
234
|
this.platform = opts.platform ?? process.platform;
|
|
235
|
+
this.cliConfig = validateAgentCliConfig(opts.cliConfig, "kiro", opts.label);
|
|
236
|
+
this.env = overlayAgentEnv(opts.env ?? process.env, this.cliConfig.env, this.platform);
|
|
232
237
|
this.getSessionIdFn = opts.getSessionIdFn ?? defaultGetSessionId;
|
|
233
238
|
this.setSessionIdFn = opts.setSessionIdFn ?? defaultSetSessionId;
|
|
234
239
|
this.resolveKiroPathFn = opts.resolveKiroPathFn ?? resolveKiroPath;
|
|
@@ -260,15 +265,16 @@ export class KiroSpawner {
|
|
|
260
265
|
const knownSessionId = anchor ? this.getSessionIdFn(anchor) : null;
|
|
261
266
|
const isNew = !knownSessionId;
|
|
262
267
|
|
|
263
|
-
const kiroPath = this.kiroPath ?? this.resolveKiroPathFn();
|
|
268
|
+
const kiroPath = this.kiroPath ?? this.resolveKiroPathFn({ env: this.env, platform: this.platform });
|
|
264
269
|
if (!kiroPath) {
|
|
265
270
|
// No crash — surface visibly and resolve with a failure result.
|
|
266
271
|
this.logger.error("[Chorus] cannot locate the `kiro-cli` executable on PATH; skipping wake");
|
|
267
272
|
return { sessionId: anchor, exitCode: null, isNew };
|
|
268
273
|
}
|
|
269
274
|
|
|
270
|
-
|
|
271
|
-
const {
|
|
275
|
+
assertConfiguredShimArgs(kiroPath, this.cliConfig.args, this.platform);
|
|
276
|
+
const args = [...buildKiroArgs({ isNew, sessionId: knownSessionId, permissionMode: this.permissionMode }), ...this.cliConfig.args];
|
|
277
|
+
const { command, argv } = resolveSpawnCommand(kiroPath, args, this.platform, this.env);
|
|
272
278
|
|
|
273
279
|
// POSIX: detached process group so the interrupt path can group-kill the tree
|
|
274
280
|
// (kiro-cli forks child shells for tools). Windows uses taskkill /T. stdio
|
|
@@ -277,7 +283,7 @@ export class KiroSpawner {
|
|
|
277
283
|
|
|
278
284
|
// Export the daemon's authoritative connection pair. CHORUS_API_KEY is also
|
|
279
285
|
// referenced by the plugin's MCP config; neither value is placed in argv.
|
|
280
|
-
const childEnv = { ...
|
|
286
|
+
const childEnv = { ...this.env, CHORUS_DAEMON_HEADLESS: "1" };
|
|
281
287
|
if (this.creds) {
|
|
282
288
|
if (this.creds.url) childEnv.CHORUS_URL = this.creds.url;
|
|
283
289
|
if (this.creds.apiKey) childEnv.CHORUS_API_KEY = this.creds.apiKey;
|
|
@@ -303,8 +309,8 @@ export class KiroSpawner {
|
|
|
303
309
|
detached,
|
|
304
310
|
windowsHide: true,
|
|
305
311
|
});
|
|
306
|
-
} catch (
|
|
307
|
-
this.logger.error(`[Chorus] failed to spawn kiro-cli: ${
|
|
312
|
+
} catch (error) {
|
|
313
|
+
this.logger.error(`[Chorus] failed to spawn kiro-cli: ${safeSpawnError(error)}`);
|
|
308
314
|
resolve({ sessionId: anchor, exitCode: null, isNew });
|
|
309
315
|
return;
|
|
310
316
|
}
|
|
@@ -332,8 +338,8 @@ export class KiroSpawner {
|
|
|
332
338
|
if (text) this.logger.warn(`[Chorus] kiro-cli stderr: ${text}`);
|
|
333
339
|
});
|
|
334
340
|
|
|
335
|
-
child.on("error", (
|
|
336
|
-
this.logger.error(`[Chorus] kiro-cli process error: ${
|
|
341
|
+
child.on("error", (error) => {
|
|
342
|
+
this.logger.error(`[Chorus] kiro-cli process error: ${safeSpawnError(error)}`);
|
|
337
343
|
resolve({ sessionId: knownSessionId || anchor, exitCode: null, isNew });
|
|
338
344
|
});
|
|
339
345
|
|
|
@@ -376,6 +382,7 @@ export class KiroSpawner {
|
|
|
376
382
|
this.reconstructTranscript({
|
|
377
383
|
sessionId: observedSessionId ?? "",
|
|
378
384
|
cwd: runCwd,
|
|
385
|
+
dir: kiroSessionsDir(this.env, this.platform),
|
|
379
386
|
onMessage,
|
|
380
387
|
stdout: stdoutBuf,
|
|
381
388
|
logger: this.logger,
|
|
@@ -407,7 +414,7 @@ export class KiroSpawner {
|
|
|
407
414
|
/** Snapshot the store, swallowing any failure (best-effort id capture). */
|
|
408
415
|
#safeSnapshot(cwd) {
|
|
409
416
|
try {
|
|
410
|
-
return this.snapshotSessionsFn(cwd, { logger: this.logger });
|
|
417
|
+
return this.snapshotSessionsFn(cwd, { logger: this.logger, dir: kiroSessionsDir(this.env, this.platform) });
|
|
411
418
|
} catch (err) {
|
|
412
419
|
this.logger.warn(`[Chorus] kiro session snapshot failed (${err}) — id capture degraded`);
|
|
413
420
|
return new Map();
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
// Child-process error messages, paths, argv, code and syscall are untrusted.
|
|
2
|
+
// Only emit known classifications for spawn failures; never echo raw fields.
|
|
3
|
+
const SPAWN_CODES = new Map([
|
|
4
|
+
["ENOENT", "executable or working directory not found; check PATH and cwd"],
|
|
5
|
+
["EACCES", "permission denied; check executable and directory permissions"],
|
|
6
|
+
["EPERM", "operation not permitted; check process permissions"],
|
|
7
|
+
["ENOEXEC", "invalid executable format; check the installed binary"],
|
|
8
|
+
["ENOTDIR", "path component is not a directory; check executable path and cwd"],
|
|
9
|
+
["EINVAL", "invalid process options; check executable and launch configuration"],
|
|
10
|
+
["E2BIG", "argument/environment size limit exceeded; reduce configuration size"],
|
|
11
|
+
["ENOMEM", "insufficient memory to start process"],
|
|
12
|
+
["EAGAIN", "process resource limit reached; retry or check system limits"],
|
|
13
|
+
["EMFILE", "process file descriptor limit reached"],
|
|
14
|
+
["ENFILE", "system file descriptor limit reached"],
|
|
15
|
+
["ETIMEDOUT", "process startup timed out"],
|
|
16
|
+
]);
|
|
17
|
+
|
|
18
|
+
export function safeSpawnError(error) {
|
|
19
|
+
const code = error?.code;
|
|
20
|
+
return typeof code === "string" && SPAWN_CODES.has(code)
|
|
21
|
+
? `${code}: ${SPAWN_CODES.get(code)}`
|
|
22
|
+
: "unclassified startup failure; check executable installation, PATH, cwd and permissions";
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
// Setup stderr can embed arbitrary argv/env in JSON, escaped nested errors,
|
|
26
|
+
// URLs, or encodings we cannot enumerate. Substring replacement is NOT a safe
|
|
27
|
+
// output boundary. Classify known problems, but render only these fixed strings
|
|
28
|
+
// (never captures, original text, paths, codes, or even a "redacted" remainder).
|
|
29
|
+
// Keep the patterns recognizable in our own output: setup and spawner both call
|
|
30
|
+
// this helper, and the second boundary must retain the first one's useful hints.
|
|
31
|
+
const SETUP_HINTS = [
|
|
32
|
+
[/version mismatch/i, "version mismatch; check dsh runtime and Chorus bundle compatibility"],
|
|
33
|
+
[/no adapter registered/i, "no adapter registered; check that the selected provider adapter is installed"],
|
|
34
|
+
[/invalid plugin graph/i, "invalid plugin graph; rebuild the sdk profile and check plugin compatibility"],
|
|
35
|
+
[/bad key|unauthorized|authentication failed/i, "authentication failed; check provider and Chorus credentials"],
|
|
36
|
+
[/ERR_PNPM.*offline|package registry unavailable/i, "package registry unavailable; check network access and pnpm registry configuration"],
|
|
37
|
+
[/bundle version/i, "bundle version required; check the installed Chorus version"],
|
|
38
|
+
[/requires the dsh CLI|dsh CLI was not found|dsh CLI required/i, "dsh CLI required; install dsh or set CHORUS_DSH_PATH"],
|
|
39
|
+
[/missing.*bundle layer/i, "missing Chorus bundle layer; rebuild the managed sdk profile"],
|
|
40
|
+
[/did not install|Chorus bundle not installed/i, "Chorus bundle not installed; check package installation and rebuild the managed sdk profile"],
|
|
41
|
+
[/did not complete JSON-RPC initialization/i, "did not complete JSON-RPC initialization; check the dsh sdk profile and runtime compatibility"],
|
|
42
|
+
[/unexpected server identity/i, "unexpected server identity; check that the sdk profile loads the expected dsh runtime"],
|
|
43
|
+
];
|
|
44
|
+
const SETUP_CODES = new Map([
|
|
45
|
+
...SPAWN_CODES,
|
|
46
|
+
["ENOSPC", "disk full; free space for the managed profile"],
|
|
47
|
+
["EROFS", "read-only filesystem; use a writable managed profile home"],
|
|
48
|
+
]);
|
|
49
|
+
const SETUP_FALLBACK = "unclassified setup failure; check dsh installation, sdk profile, provider adapter, package registry and filesystem permissions (raw details withheld)";
|
|
50
|
+
|
|
51
|
+
export function redactedSetupError(error) {
|
|
52
|
+
const text = error instanceof Error ? error.message : typeof error === "string" ? error : "";
|
|
53
|
+
const stages = [];
|
|
54
|
+
if (/profile installation failed/i.test(text)) stages.push("dsh managed profile installation failed");
|
|
55
|
+
if (/composition validation failed/i.test(text)) stages.push("dsh managed composition validation failed");
|
|
56
|
+
if (/non-default provider/i.test(text)) {
|
|
57
|
+
stages.push("a non-default provider is configured; the managed sdk profile mounts only the deepseek-official adapter; pre-compose its adapter and point CHORUS_DSH_HOME at your own sdk profile");
|
|
58
|
+
}
|
|
59
|
+
const hints = [];
|
|
60
|
+
for (const [code, hint] of SETUP_CODES) {
|
|
61
|
+
if (error?.code === code || new RegExp(`\\b${code}\\b`).test(text)) hints.push(`${code}: ${hint}`);
|
|
62
|
+
}
|
|
63
|
+
for (const [pattern, hint] of SETUP_HINTS) {
|
|
64
|
+
if (pattern.test(text)) hints.push(hint);
|
|
65
|
+
}
|
|
66
|
+
return [...stages, hints.length ? hints.join("; ") : SETUP_FALLBACK].join(": ");
|
|
67
|
+
}
|
package/cli/login.mjs
CHANGED
|
@@ -10,6 +10,7 @@ import { createInterface } from "node:readline";
|
|
|
10
10
|
import { loginFilePath } from "./credentials.mjs";
|
|
11
11
|
import { validateAndFetchIdentity } from "./chorus-client.mjs";
|
|
12
12
|
import { promptAgentBackend } from "./agent-backend-prompt.mjs";
|
|
13
|
+
import { rejectSharedCliConfig } from "./agent-cli-config.mjs";
|
|
13
14
|
|
|
14
15
|
/**
|
|
15
16
|
* Prompt for a line of input. When `mask` is true, typed characters are not
|
|
@@ -177,9 +178,12 @@ export function appendAgentConfig(agentObj, deps = {}) {
|
|
|
177
178
|
// treat as empty
|
|
178
179
|
}
|
|
179
180
|
|
|
181
|
+
// Refuse already-misplaced customization before any write (even duplicates).
|
|
182
|
+
rejectSharedCliConfig(current);
|
|
180
183
|
const existingAgents =
|
|
181
184
|
Array.isArray(current.agents) ? current.agents.filter((a) => a && typeof a === "object") : [];
|
|
182
185
|
|
|
186
|
+
let migratedFlat = false;
|
|
183
187
|
/** @type {object[]} */
|
|
184
188
|
let agents;
|
|
185
189
|
if (existingAgents.length > 0) {
|
|
@@ -192,6 +196,12 @@ export function appendAgentConfig(agentObj, deps = {}) {
|
|
|
192
196
|
if (Array.isArray(current.cwds)) flat.cwds = current.cwds;
|
|
193
197
|
if (nonEmpty(current.agentName)) flat.agentName = current.agentName;
|
|
194
198
|
if (nonEmpty(current.agentUuid)) flat.agentUuid = current.agentUuid;
|
|
199
|
+
// Move by presence, not validity: later validation must attribute malformed
|
|
200
|
+
// values to the original agent rather than lose them or leave shared keys.
|
|
201
|
+
for (const field of ["args", "env"]) {
|
|
202
|
+
if (Object.hasOwn(current, field)) flat[field] = current[field];
|
|
203
|
+
}
|
|
204
|
+
migratedFlat = true;
|
|
195
205
|
agents = [flat];
|
|
196
206
|
} else {
|
|
197
207
|
agents = [];
|
|
@@ -206,7 +216,13 @@ export function appendAgentConfig(agentObj, deps = {}) {
|
|
|
206
216
|
}
|
|
207
217
|
|
|
208
218
|
agents.push(agentObj);
|
|
209
|
-
|
|
219
|
+
// JSON serialization omits undefined keys; the existing temp-file rename
|
|
220
|
+
// commits the fold and top-level removal together in one atomic write.
|
|
221
|
+
const update = { agents, ...(migratedFlat ? { args: undefined, env: undefined } : {}) };
|
|
222
|
+
// A flat file without a key cannot be folded into an original agent. Do not
|
|
223
|
+
// turn that partial config into an invalid shared file by adding an agent.
|
|
224
|
+
if (!migratedFlat) rejectSharedCliConfig({ ...current, agents });
|
|
225
|
+
const writtenPath = updateDaemonConfig(update, deps);
|
|
210
226
|
return { ok: true, path: writtenPath, agents, index: agents.length - 1 };
|
|
211
227
|
}
|
|
212
228
|
|
package/cli/pi-spawner.mjs
CHANGED
|
@@ -38,6 +38,8 @@
|
|
|
38
38
|
// PATH-walk / .cmd-shim shape of the other spawners' path resolution.
|
|
39
39
|
|
|
40
40
|
import { spawn } from "node:child_process";
|
|
41
|
+
import { safeSpawnError } from "./launch-diagnostics.mjs";
|
|
42
|
+
import { validateAgentCliConfig, overlayAgentEnv, getAgentEnv, assertConfiguredShimArgs } from "./agent-cli-config.mjs";
|
|
41
43
|
import { statSync } from "node:fs";
|
|
42
44
|
import { win32 as pathWin32, posix as pathPosix } from "node:path";
|
|
43
45
|
import { parseNdjsonChunk } from "./claude-spawner.mjs";
|
|
@@ -83,14 +85,15 @@ export function resolvePiPath(deps = {}) {
|
|
|
83
85
|
}
|
|
84
86
|
});
|
|
85
87
|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
+
const override = getAgentEnv(env, "CHORUS_PI_PATH", platform);
|
|
89
|
+
if (override && isFile(override)) {
|
|
90
|
+
return override;
|
|
88
91
|
}
|
|
89
92
|
|
|
90
93
|
const isWin = platform === "win32";
|
|
91
94
|
const p = isWin ? pathWin32 : pathPosix;
|
|
92
95
|
const names = isWin ? ["pi.cmd", "pi.exe", "pi"] : ["pi"];
|
|
93
|
-
const pathVar = env
|
|
96
|
+
const pathVar = getAgentEnv(env, "PATH", platform) || env.Path || "";
|
|
94
97
|
const dirs = pathVar.split(p.delimiter).filter(Boolean);
|
|
95
98
|
for (const dir of dirs) {
|
|
96
99
|
for (const name of names) {
|
|
@@ -113,7 +116,7 @@ export function resolveSpawnCommand(piPath, args, platform = process.platform, e
|
|
|
113
116
|
const isWin = platform === "win32";
|
|
114
117
|
const lower = piPath.toLowerCase();
|
|
115
118
|
if (isWin && (lower.endsWith(".cmd") || lower.endsWith(".bat"))) {
|
|
116
|
-
const comspec = env
|
|
119
|
+
const comspec = getAgentEnv(env, "COMSPEC", platform) || "cmd.exe";
|
|
117
120
|
return { command: comspec, argv: ["/d", "/s", "/c", piPath, ...args] };
|
|
118
121
|
}
|
|
119
122
|
return { command: piPath, argv: args };
|
|
@@ -150,6 +153,8 @@ export class PiSpawner {
|
|
|
150
153
|
this.permissionMode = opts.permissionMode ?? "chorus";
|
|
151
154
|
this.creds = opts.creds ?? null;
|
|
152
155
|
this.platform = opts.platform ?? process.platform;
|
|
156
|
+
this.cliConfig = validateAgentCliConfig(opts.cliConfig, "pi", opts.label);
|
|
157
|
+
this.env = overlayAgentEnv(opts.env ?? process.env, this.cliConfig.env, this.platform);
|
|
153
158
|
this.resolvePiPathFn = opts.resolvePiPathFn ?? resolvePiPath;
|
|
154
159
|
}
|
|
155
160
|
|
|
@@ -174,7 +179,7 @@ export class PiSpawner {
|
|
|
174
179
|
const anchor = typeof sessionId === "string" ? sessionId : "";
|
|
175
180
|
const isNewFlag = Boolean(isNew);
|
|
176
181
|
|
|
177
|
-
const piPath = this.piPath ?? this.resolvePiPathFn();
|
|
182
|
+
const piPath = this.piPath ?? this.resolvePiPathFn({ env: this.env, platform: this.platform });
|
|
178
183
|
if (!piPath) {
|
|
179
184
|
// No crash — surface visibly and resolve with a failure result (matches the
|
|
180
185
|
// other spawners' "skipping wake" convention: exitCode null, no throw).
|
|
@@ -182,8 +187,10 @@ export class PiSpawner {
|
|
|
182
187
|
return { sessionId: anchor, backendSessionId: null, exitCode: null, isNew: isNewFlag };
|
|
183
188
|
}
|
|
184
189
|
|
|
185
|
-
|
|
186
|
-
const
|
|
190
|
+
assertConfiguredShimArgs(piPath, this.cliConfig.args, this.platform);
|
|
191
|
+
const fixed = buildPiArgs({ sessionId: anchor });
|
|
192
|
+
const args = [...fixed.slice(0, -1), ...this.cliConfig.args, fixed.at(-1)];
|
|
193
|
+
const { command, argv } = resolveSpawnCommand(piPath, args, this.platform, this.env);
|
|
187
194
|
|
|
188
195
|
// POSIX: detached process group so the interrupt path can group-kill the tree
|
|
189
196
|
// (pi may fork child shells / subagents). Windows uses taskkill /T. stdio stays
|
|
@@ -193,7 +200,7 @@ export class PiSpawner {
|
|
|
193
200
|
// Export the daemon's resolved connection pair for the chorus-pi extension's
|
|
194
201
|
// Chorus tooling. Explicitly overwrite inherited values so the extension and the
|
|
195
202
|
// daemon cannot disagree about which Chorus instance this wake belongs to.
|
|
196
|
-
const childEnv = { ...
|
|
203
|
+
const childEnv = { ...this.env, CHORUS_DAEMON_HEADLESS: "1" };
|
|
197
204
|
if (this.creds) {
|
|
198
205
|
if (this.creds.url) childEnv.CHORUS_URL = this.creds.url;
|
|
199
206
|
if (this.creds.apiKey) childEnv.CHORUS_API_KEY = this.creds.apiKey;
|
|
@@ -214,8 +221,8 @@ export class PiSpawner {
|
|
|
214
221
|
detached,
|
|
215
222
|
windowsHide: true,
|
|
216
223
|
});
|
|
217
|
-
} catch (
|
|
218
|
-
this.logger.error(`[Chorus] failed to spawn pi: ${
|
|
224
|
+
} catch (error) {
|
|
225
|
+
this.logger.error(`[Chorus] failed to spawn pi: ${safeSpawnError(error)}`);
|
|
219
226
|
resolve({ sessionId: anchor, backendSessionId: null, exitCode: null, isNew: isNewFlag });
|
|
220
227
|
return;
|
|
221
228
|
}
|
|
@@ -256,8 +263,8 @@ export class PiSpawner {
|
|
|
256
263
|
if (text) this.logger.warn(`[Chorus] pi stderr: ${text}`);
|
|
257
264
|
});
|
|
258
265
|
|
|
259
|
-
child.on("error", (
|
|
260
|
-
this.logger.error(`[Chorus] pi process error: ${
|
|
266
|
+
child.on("error", (error) => {
|
|
267
|
+
this.logger.error(`[Chorus] pi process error: ${safeSpawnError(error)}`);
|
|
261
268
|
resolve({ sessionId: anchor, backendSessionId: anchor || null, exitCode: null, isNew: isNewFlag });
|
|
262
269
|
});
|
|
263
270
|
|
package/cli/prompts.mjs
CHANGED
|
@@ -26,6 +26,13 @@
|
|
|
26
26
|
* @property {string} actorUuid
|
|
27
27
|
* @property {string} actorName
|
|
28
28
|
* @property {{type: string, uuid: string, name: string} | null} [orchestrator]
|
|
29
|
+
* @property {{agentUuid: string, agentName: string, ideaUuid: string} | null} [wakerSession]
|
|
30
|
+
* Derived, NON-persisted waker-session anchor (wake-carry-waker-session-anchor, T1). Present
|
|
31
|
+
* only for an agent-caused wake on an idea/task-anchored resource whose waking agent has a
|
|
32
|
+
* live, ONLINE-origin session for that idea — it tells the woken peer that replying on this
|
|
33
|
+
* resource reaches the waker's existing live session. A SIBLING of `orchestrator`
|
|
34
|
+
* (actor-scoped vs assignment-scoped): either, both, or neither may be present. The server
|
|
35
|
+
* supplies it on the `chorus_get_notifications` projection; the router threads it here.
|
|
29
36
|
* @property {string} [instructionText] Free-text body of a `human_instruction` wake
|
|
30
37
|
* (子1 — daemon-session-conversation). The server denormalizes the canonical turn
|
|
31
38
|
* promptText onto the wake notification so the daemon reads it in the
|
|
@@ -64,6 +71,37 @@ function orchestratorGuidance(n) {
|
|
|
64
71
|
);
|
|
65
72
|
}
|
|
66
73
|
|
|
74
|
+
/**
|
|
75
|
+
* Waker-session advisory, appended to a wake body whenever the notification carries a
|
|
76
|
+
* `wakerSession` anchor (wake-carry-waker-session-anchor, T2). It tells the woken peer WHERE
|
|
77
|
+
* the waking agent's live conversation is: replying by commenting on THIS resource lands the
|
|
78
|
+
* reply back in that agent's existing idea-anchored session, keeping the exchange on one
|
|
79
|
+
* thread instead of scattering into a fresh one.
|
|
80
|
+
*
|
|
81
|
+
* It is deliberately ADVISORY, not routing — the server surfaces the anchor only when it
|
|
82
|
+
* resolved a live, ONLINE-origin waker session (an offline/missing waker degrades to
|
|
83
|
+
* notify-only and the field is null); there is no automatic subscription and nothing is
|
|
84
|
+
* force-delivered. The wording must NOT promise a guaranteed channel.
|
|
85
|
+
*
|
|
86
|
+
* A SIBLING of `orchestratorGuidance`: independent, appended alongside it in buildPrompt, so
|
|
87
|
+
* either/both/neither may render on one wake and they may name different agents. Its OpenClaw
|
|
88
|
+
* twin is `buildWakerSessionGuidance` in packages/openclaw-plugin/src/event-router.ts —
|
|
89
|
+
* KEEP THE TWO WORDINGS IN SYNC.
|
|
90
|
+
* @param {NotificationDetail} n
|
|
91
|
+
*/
|
|
92
|
+
function wakerSessionGuidance(n) {
|
|
93
|
+
if (!n.wakerSession) return null;
|
|
94
|
+
const { agentName, agentUuid } = n.wakerSession;
|
|
95
|
+
return (
|
|
96
|
+
`@[${agentName}](agent:${agentUuid}) woke you and has a live session open on this ` +
|
|
97
|
+
`resource. If you reply by commenting on this same resource, your reply reaches that ` +
|
|
98
|
+
`agent's live session, keeping the exchange on one thread. This is advisory, not an ` +
|
|
99
|
+
`enforced server route — there is no automatic subscription and nothing is force-delivered; ` +
|
|
100
|
+
`replying here is simply where a reply lands via the normal return path. Prefer replying ` +
|
|
101
|
+
`on this resource over opening a new session.`
|
|
102
|
+
);
|
|
103
|
+
}
|
|
104
|
+
|
|
67
105
|
/**
|
|
68
106
|
* Shared headless preamble prepended to EVERY wake prompt (add-daemon-headless-
|
|
69
107
|
* interaction-guard). A daemon-woken session is a headless `claude -p` run with no
|
|
@@ -121,7 +159,12 @@ export function buildPrompt(n) {
|
|
|
121
159
|
const body = buildPromptBody(n);
|
|
122
160
|
if (body == null) return null;
|
|
123
161
|
const handoff = orchestratorGuidance(n);
|
|
124
|
-
|
|
162
|
+
const anchor = wakerSessionGuidance(n);
|
|
163
|
+
return (
|
|
164
|
+
`${HEADLESS_PREAMBLE}\n\n${body}` +
|
|
165
|
+
(handoff ? `\n\n${handoff}` : "") +
|
|
166
|
+
(anchor ? `\n\n${anchor}` : "")
|
|
167
|
+
);
|
|
125
168
|
}
|
|
126
169
|
|
|
127
170
|
/**
|
|
@@ -208,7 +251,14 @@ export function buildBatchPrompt(notifications) {
|
|
|
208
251
|
? `\n(${g.count} ${n.action} events on this ${entityType} arrived — showing the newest ` +
|
|
209
252
|
`below; earlier ones are re-derivable via the entity's own chorus_get_* tools.)`
|
|
210
253
|
: "";
|
|
211
|
-
|
|
254
|
+
// Per-wake waker-session advisory (wake-carry-waker-session-anchor, T2). The anchor is
|
|
255
|
+
// ACTOR-scoped, so it belongs to each event individually — different queued wakes may
|
|
256
|
+
// carry different (or no) waker sessions. Appending it only in buildPrompt would silently
|
|
257
|
+
// drop it in this coalesced busy-worker batch, the feature's core scenario; so surface it
|
|
258
|
+
// per block here too, keyed off the collapsed group's newest notification.
|
|
259
|
+
const anchor = wakerSessionGuidance(n);
|
|
260
|
+
const anchorBlock = anchor ? `\n\n${anchor}` : "";
|
|
261
|
+
return `${header}${collapseNote}\n\n${g.body}${anchorBlock}`;
|
|
212
262
|
});
|
|
213
263
|
|
|
214
264
|
return [HEADLESS_PREAMBLE, backlogPreamble, ...rendered].join("\n\n");
|
package/cli/spawner-select.mjs
CHANGED
|
@@ -59,7 +59,7 @@ export class OfflineSpawner {
|
|
|
59
59
|
* @returns {import("./codex-spawner.mjs").Spawner}
|
|
60
60
|
*/
|
|
61
61
|
export function selectSpawner(agentType, opts = {}) {
|
|
62
|
-
const { logger
|
|
62
|
+
const { logger } = opts;
|
|
63
63
|
if (agentType === "offline") {
|
|
64
64
|
// Fail-closed: an offline agent has no local backend. Return the no-op spawner
|
|
65
65
|
// explicitly so we NEVER fall through to the claude-code default below and wake
|
|
@@ -67,23 +67,18 @@ export function selectSpawner(agentType, opts = {}) {
|
|
|
67
67
|
return new OfflineSpawner({ logger });
|
|
68
68
|
}
|
|
69
69
|
if (agentType === "codex") {
|
|
70
|
-
return new CodexSpawner(
|
|
70
|
+
return new CodexSpawner(opts);
|
|
71
71
|
}
|
|
72
72
|
if (agentType === "kiro") {
|
|
73
|
-
return new KiroSpawner(
|
|
73
|
+
return new KiroSpawner(opts);
|
|
74
74
|
}
|
|
75
75
|
if (agentType === "dsh") {
|
|
76
|
-
return new DshSpawner(
|
|
77
|
-
logger,
|
|
78
|
-
creds,
|
|
79
|
-
bundleVersion: opts.bundleVersion,
|
|
80
|
-
prepareManagedConfigFn: opts.prepareManagedConfigFn,
|
|
81
|
-
});
|
|
76
|
+
return new DshSpawner(opts);
|
|
82
77
|
}
|
|
83
78
|
if (agentType === "pi") {
|
|
84
79
|
// pi is a first-class wakeable backend — an explicit branch so it NEVER falls
|
|
85
80
|
// through to the claude-code default below (nor is treated as offline).
|
|
86
|
-
return new PiSpawner(
|
|
81
|
+
return new PiSpawner(opts);
|
|
87
82
|
}
|
|
88
|
-
return new ClaudeSpawner(
|
|
83
|
+
return new ClaudeSpawner(opts);
|
|
89
84
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@chorus-aidlc/chorus",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.18.0",
|
|
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": {
|