@chorus-aidlc/chorus 0.14.0 → 0.14.2
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 +459 -424
- package/.next/standalone/.next/app-path-routes-manifest.json +49 -45
- package/.next/standalone/.next/build-manifest.json +5 -5
- package/.next/standalone/.next/prerender-manifest.json +33 -33
- package/.next/standalone/.next/routes-manifest.json +8 -0
- 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 +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 +2 -2
- package/.next/standalone/.next/server/app/(dashboard)/projects/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/settings/page.js +2 -2
- package/.next/standalone/.next/server/app/(dashboard)/settings/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/settings/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/_not-found.html +2 -2
- package/.next/standalone/.next/server/app/_not-found.rsc +2 -2
- package/.next/standalone/.next/server/app/admin/companies/[uuid]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/admin/companies/new/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/admin/companies/new.html +2 -2
- package/.next/standalone/.next/server/app/admin/companies/new.rsc +2 -2
- package/.next/standalone/.next/server/app/admin/companies/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/admin/companies.html +2 -2
- package/.next/standalone/.next/server/app/admin/companies.rsc +2 -2
- package/.next/standalone/.next/server/app/admin/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/admin.html +2 -2
- package/.next/standalone/.next/server/app/admin.rsc +2 -2
- package/.next/standalone/.next/server/app/api/admin/companies/[uuid]/route_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_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_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_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/execution-state/route.js +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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/wake-preview/route.js +1 -0
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/wake-preview/route.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/wake-preview/route_client-reference-manifest.js +1 -0
- package/.next/standalone/.next/server/app/api/ideas/conversational/route.js +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 +4 -4
- 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_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_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_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_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_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_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_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_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.js +1 -0
- package/.next/standalone/.next/server/app/api/project-visits/pin/route.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/api/project-visits/pin/route_client-reference-manifest.js +1 -0
- package/.next/standalone/.next/server/app/api/project-visits/route.js +1 -0
- package/.next/standalone/.next/server/app/api/project-visits/route.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/api/project-visits/route_client-reference-manifest.js +1 -0
- package/.next/standalone/.next/server/app/api/project-visits/visit/route.js +1 -0
- package/.next/standalone/.next/server/app/api/project-visits/visit/route.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/api/project-visits/visit/route_client-reference-manifest.js +1 -0
- 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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/onboarding.html +2 -2
- package/.next/standalone/.next/server/app/onboarding.rsc +3 -3
- package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/projects.html +2 -2
- package/.next/standalone/.next/server/app/projects.rsc +4 -4
- package/.next/standalone/.next/server/app/settings.html +2 -2
- package/.next/standalone/.next/server/app/settings.rsc +4 -4
- package/.next/standalone/.next/server/app-paths-manifest.json +49 -45
- package/.next/standalone/.next/server/chunks/1114.js +1 -1
- package/.next/standalone/.next/server/chunks/1173.js +1 -1
- package/.next/standalone/.next/server/chunks/1286.js +3 -2
- package/.next/standalone/.next/server/chunks/1318.js +1 -0
- package/.next/standalone/.next/server/chunks/1559.js +2 -2
- package/.next/standalone/.next/server/chunks/2463.js +1 -0
- package/.next/standalone/.next/server/chunks/2618.js +1 -1
- package/.next/standalone/.next/server/chunks/2961.js +1 -1
- package/.next/standalone/.next/server/chunks/3219.js +1 -1
- package/.next/standalone/.next/server/chunks/3407.js +1 -0
- package/.next/standalone/.next/server/chunks/3419.js +1 -1
- package/.next/standalone/.next/server/chunks/457.js +1 -0
- package/.next/standalone/.next/server/chunks/4827.js +1 -1
- package/.next/standalone/.next/server/chunks/{1343.js → 5201.js} +2 -2
- package/.next/standalone/.next/server/chunks/5245.js +1 -1
- package/.next/standalone/.next/server/chunks/595.js +1 -0
- 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/6449.js +1 -0
- package/.next/standalone/.next/server/chunks/{8577.js → 6506.js} +3 -3
- package/.next/standalone/.next/server/chunks/6515.js +6 -0
- 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/7530.js +1 -1
- package/.next/standalone/.next/server/chunks/7762.js +1 -1
- package/.next/standalone/.next/server/chunks/8454.js +1 -1
- package/.next/standalone/.next/server/chunks/920.js +1 -1
- package/.next/standalone/.next/server/chunks/9213.js +1 -1
- package/.next/standalone/.next/server/chunks/9378.js +1 -1
- package/.next/standalone/.next/server/chunks/951.js +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 +1 -1
- 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/XTQkt8fOQEK4mZkZTFQ_E/_buildManifest.js +1 -0
- package/.next/standalone/.next/static/chunks/11595.fbbfc784ff9ee566.js +1 -0
- package/.next/standalone/.next/static/chunks/13867-a95a4555fcb7b13b.js +1 -0
- package/.next/standalone/.next/static/chunks/24537-7d71bf10329d1be1.js +1 -0
- package/.next/standalone/.next/static/chunks/27030-19cd50b9d47b3be6.js +1 -0
- package/.next/standalone/.next/static/chunks/28680-f9c5e04f67982cb6.js +1 -0
- package/.next/standalone/.next/static/chunks/31308-bb4a97b3f39c22dd.js +1 -0
- package/.next/standalone/.next/static/chunks/32331-87ae9bc7517c7947.js +1 -0
- package/.next/standalone/.next/static/chunks/33277-9926b461045318b3.js +10 -0
- package/.next/standalone/.next/static/chunks/33456.b67f1146831e9f2b.js +1 -0
- package/.next/standalone/.next/static/chunks/37035-514bbb31cd13bda1.js +1 -0
- package/.next/standalone/.next/static/chunks/38526-7ffc4b7351c15bc4.js +1 -0
- package/.next/standalone/.next/static/chunks/{42605-029b5426175cdee9.js → 39479-5af3460208d8cc56.js} +1 -1
- package/.next/standalone/.next/static/chunks/4860.3491d748fdde968e.js +1 -0
- package/.next/standalone/.next/static/chunks/51603-7fa00971493ae223.js +1 -0
- package/.next/standalone/.next/static/chunks/73510-c338cef00ca3cfaf.js +1 -0
- package/.next/standalone/.next/static/chunks/78917-a297b76c6daa9f5d.js +1 -0
- package/.next/standalone/.next/static/chunks/84219-09970ab1b85c61f0.js +1 -0
- package/.next/standalone/.next/static/chunks/86155-c9b7c2c08d3fa80e.js +1 -0
- package/.next/standalone/.next/static/chunks/99373.827383575665ce2f.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/layout-12d81eedb519461c.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/project-groups/[uuid]/page-2af5f2f159c8e32b.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/dashboard/[ideaUuid]/page-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/dashboard/page-996b8a87b4b986f1.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page-77771ef395e19922.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/page-c231207c3674aa54.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/graph/{page-2b13a2224c3b6d6d.js → page-c62c7d7cf9833060.js} +1 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page-d098269dcaa06de7.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/page-7948aa8db4813091.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page-8eea1e0cea60758f.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/tasks/page-658f31ac6a28ec82.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/page-6df01fa989cca27b.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/settings/page-7fbf5bc58d3dd5b0.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/admin/companies/[uuid]/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/admin/companies/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/admin/login/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/admin/session/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/agent-connections/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/agents/[uuid]/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/agents/[uuid]/sessions/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/agents/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/api-keys/[uuid]/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/api-keys/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/auth/callback/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/auth/check-default/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/auth/company-oidc/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/auth/default-login/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/auth/identify/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/auth/logout/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/auth/me/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/auth/sync-token/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/comments/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/daemon/control/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/daemon/execution-state/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/daemon/executions/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/daemon/pending-turns/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/daemon/report-interrupt/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/daemon/resume/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/daemon/transcript/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/daemon/turn-advance/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/[sessionUuid]/instruction/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/[sessionUuid]/repoint/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/[sessionUuid]/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/ad-hoc/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/documents/[uuid]/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/entities/[type]/[uuid]/root-idea/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/events/notifications/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/events/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/health/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/claim/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/move/preview/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/move/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/parent/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/release/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/wake-preview/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/ideas/conversational/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/mcp/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/me/assignments/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/mentionables/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/notifications/[uuid]/archive/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/notifications/[uuid]/read/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/notifications/preferences/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/notifications/read-all/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/notifications/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/notifications/unread-count/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/project-groups/[uuid]/dashboard/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/project-groups/[uuid]/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/project-groups/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/project-visits/pin/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/project-visits/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/project-visits/visit/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/activity/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/available/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/documents/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/group/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/ideas/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/ideas/tracker/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/proposals/[proposalUuid]/validate/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/proposals/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/proposals/summary/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/resource-graph/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/stats/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/tasks/dependencies/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/tasks/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/approve/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/close/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/reject/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/revoke/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/references/[uuid]/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/references/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/search/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/session/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/sessions/[uuid]/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/claim/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/dependencies/[dependsOnUuid]/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/dependencies/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/release/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/sessions/route-d1c49cfe592deeb8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/onboarding/page-b178eb3215360d91.js +1 -0
- package/.next/standalone/.next/static/chunks/{webpack-9dda6192665a5c8d.js → webpack-567d9ffe31a0a5ee.js} +1 -1
- package/.next/standalone/.next/static/css/617133917710c831.css +1 -0
- package/.next/standalone/package.json +1 -1
- package/.next/standalone/public/chorus-plugin/.claude-plugin/plugin.json +1 -1
- package/.next/standalone/public/chorus-plugin/bin/on-post-verify-task.sh +1 -1
- package/.next/standalone/public/chorus-plugin/bin/on-session-start.sh +29 -5
- package/.next/standalone/public/chorus-plugin/skills/brainstorm/SKILL.md +1 -1
- package/.next/standalone/public/chorus-plugin/skills/chorus/SKILL.md +23 -2
- package/.next/standalone/public/chorus-plugin/skills/develop/SKILL.md +2 -2
- package/.next/standalone/public/chorus-plugin/skills/idea/SKILL.md +32 -1
- package/.next/standalone/public/chorus-plugin/skills/openspec-aware/SKILL.md +1 -1
- package/.next/standalone/public/chorus-plugin/skills/proposal/SKILL.md +1 -1
- package/.next/standalone/public/chorus-plugin/skills/quick-dev/SKILL.md +1 -1
- package/.next/standalone/public/chorus-plugin/skills/review/SKILL.md +1 -1
- package/.next/standalone/public/chorus-plugin/skills/yolo/SKILL.md +2 -2
- package/.next/standalone/public/install-kiro.sh +350 -0
- package/.next/standalone/public/kiro-plugin/.kiro/agents/chorus-code-reviewer.json +10 -0
- package/.next/standalone/public/kiro-plugin/.kiro/agents/chorus-proposal-reviewer.json +10 -0
- package/.next/standalone/public/kiro-plugin/.kiro/agents/chorus-task-reviewer.json +10 -0
- package/.next/standalone/public/kiro-plugin/.kiro/agents/chorus.json +50 -0
- package/.next/standalone/public/kiro-plugin/.kiro/agents/chorus.md +62 -0
- package/.next/standalone/public/kiro-plugin/.kiro/settings/mcp.json +12 -0
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-brainstorm/SKILL.md +158 -0
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-develop/SKILL.md +421 -0
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-idea/SKILL.md +332 -0
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-openspec-aware/SKILL.md +434 -0
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-proposal/SKILL.md +386 -0
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-quick-dev/SKILL.md +193 -0
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-review/SKILL.md +360 -0
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-yolo/SKILL.md +547 -0
- package/.next/standalone/public/kiro-plugin/.kiro/steering/chorus.md +404 -0
- package/.next/standalone/public/kiro-plugin/bin/chorus-api.sh +392 -0
- package/.next/standalone/public/kiro-plugin/bin/on-agent-spawn.sh +81 -0
- package/.next/standalone/public/kiro-plugin/bin/on-post-submit-for-verify.sh +68 -0
- package/.next/standalone/public/kiro-plugin/bin/on-post-submit-proposal.sh +76 -0
- package/.next/standalone/public/kiro-plugin/bin/on-post-verify-task.sh +119 -0
- package/.next/standalone/public/kiro-plugin/bin/on-stop.sh +45 -0
- package/.next/standalone/public/kiro-plugin/bin/test-syntax.sh +108 -0
- package/.next/standalone/public/skill/brainstorm-chorus/SKILL.md +1 -1
- package/.next/standalone/public/skill/chorus/SKILL.md +8 -2
- package/.next/standalone/public/skill/code-reviewer-chorus/SKILL.md +1 -1
- package/.next/standalone/public/skill/develop-chorus/SKILL.md +2 -2
- package/.next/standalone/public/skill/idea-chorus/SKILL.md +32 -1
- package/.next/standalone/public/skill/package.json +1 -1
- package/.next/standalone/public/skill/proposal-chorus/SKILL.md +1 -1
- package/.next/standalone/public/skill/proposal-reviewer-chorus/SKILL.md +1 -1
- package/.next/standalone/public/skill/quick-dev-chorus/SKILL.md +1 -1
- package/.next/standalone/public/skill/review-chorus/SKILL.md +1 -1
- package/.next/standalone/public/skill/task-reviewer-chorus/SKILL.md +1 -1
- package/.next/standalone/public/skill/yolo-chorus/SKILL.md +3 -3
- package/README.ja.md +14 -11
- package/README.ko.md +14 -11
- package/README.md +14 -11
- package/README.zh.md +14 -11
- package/chorus.mjs +4 -0
- package/cli/client-args.mjs +19 -8
- package/cli/codex-session-map.mjs +9 -79
- package/cli/daemon-agent.mjs +12 -7
- package/cli/daemon-config.mjs +2 -2
- package/cli/daemon-install-config.mjs +213 -0
- package/cli/daemon-service.mjs +12 -7
- package/cli/daemon.mjs +68 -9
- package/cli/kiro-session-map.mjs +49 -0
- package/cli/kiro-spawner.mjs +409 -0
- package/cli/kiro-transcript.mjs +262 -0
- package/cli/lineage.mjs +20 -0
- package/cli/prompts.mjs +19 -2
- package/cli/session-map.mjs +126 -0
- package/cli/spawner-select.mjs +7 -1
- package/cli/waker.mjs +18 -3
- package/package.json +1 -1
- package/prisma/migrations/20260714091007_add_daemon_execution_direct_idea/migration.sql +2 -0
- package/prisma/migrations/20260718062756_add_project_visit/migration.sql +29 -0
- package/prisma/schema.prisma +30 -0
- package/.next/standalone/.next/server/chunks/1388.js +0 -1
- package/.next/standalone/.next/server/chunks/2382.js +0 -1
- package/.next/standalone/.next/server/chunks/3373.js +0 -1
- package/.next/standalone/.next/server/chunks/4797.js +0 -1
- package/.next/standalone/.next/server/chunks/5011.js +0 -1
- package/.next/standalone/.next/server/chunks/5891.js +0 -1
- package/.next/standalone/.next/server/chunks/7131.js +0 -6
- package/.next/standalone/.next/static/chunks/11595.c932231a36943893.js +0 -1
- package/.next/standalone/.next/static/chunks/20081-a2bf5c9f24d5d589.js +0 -1
- package/.next/standalone/.next/static/chunks/24537-7988a894f20f8dae.js +0 -1
- package/.next/standalone/.next/static/chunks/2709-8f25369aeb5701a4.js +0 -1
- package/.next/standalone/.next/static/chunks/33456.f1c7b6bd0a6a65e4.js +0 -1
- package/.next/standalone/.next/static/chunks/43111-7a4e08dc82bb3022.js +0 -1
- package/.next/standalone/.next/static/chunks/4860.9313590c6c8c8f56.js +0 -1
- package/.next/standalone/.next/static/chunks/4939-ff22e2b42ad57f7f.js +0 -1
- package/.next/standalone/.next/static/chunks/55963-b2804d30cfbbe669.js +0 -1
- package/.next/standalone/.next/static/chunks/56608-92ab6704b364eb17.js +0 -1
- package/.next/standalone/.next/static/chunks/75252-29e0e25cb5a94f7f.js +0 -10
- package/.next/standalone/.next/static/chunks/80350-0d34e756f4aebdfc.js +0 -1
- package/.next/standalone/.next/static/chunks/84169-affac07755ace386.js +0 -1
- package/.next/standalone/.next/static/chunks/9178-182934f9127eed4e.js +0 -1
- package/.next/standalone/.next/static/chunks/93346-1d4cd71b8713a8a6.js +0 -1
- package/.next/standalone/.next/static/chunks/96752-ad15cc38599f12e2.js +0 -1
- package/.next/standalone/.next/static/chunks/99373.9756d8f45fee79a7.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/layout-00ff2f6753bb4603.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/project-groups/[uuid]/page-5824e6affe244f83.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/dashboard/[ideaUuid]/page-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/dashboard/page-21571e747883b956.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page-f763dec99ba41f1c.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/page-f13281a5806b6b4b.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page-6c577e521c61f718.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/page-078f21255acdf752.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page-d37d5adabc60a16c.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/tasks/page-8212e69e806cab35.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/page-85665683f67eebc7.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/settings/page-2ab18a236a0c7f7b.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/admin/companies/[uuid]/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/admin/companies/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/admin/login/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/admin/session/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/agent-connections/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/agents/[uuid]/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/agents/[uuid]/sessions/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/agents/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/api-keys/[uuid]/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/api-keys/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/auth/callback/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/auth/check-default/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/auth/company-oidc/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/auth/default-login/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/auth/identify/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/auth/logout/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/auth/me/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/auth/sync-token/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/comments/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/daemon/control/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/daemon/execution-state/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/daemon/executions/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/daemon/pending-turns/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/daemon/report-interrupt/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/daemon/resume/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/daemon/transcript/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/daemon/turn-advance/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/[sessionUuid]/instruction/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/[sessionUuid]/repoint/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/[sessionUuid]/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/ad-hoc/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/documents/[uuid]/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/entities/[type]/[uuid]/root-idea/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/events/notifications/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/events/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/health/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/claim/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/move/preview/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/move/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/parent/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/release/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/ideas/conversational/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/mcp/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/me/assignments/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/mentionables/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/notifications/[uuid]/archive/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/notifications/[uuid]/read/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/notifications/preferences/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/notifications/read-all/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/notifications/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/notifications/unread-count/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/project-groups/[uuid]/dashboard/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/project-groups/[uuid]/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/project-groups/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/activity/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/available/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/documents/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/group/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/ideas/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/ideas/tracker/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/proposals/[proposalUuid]/validate/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/proposals/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/proposals/summary/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/resource-graph/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/stats/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/tasks/dependencies/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/tasks/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/projects/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/approve/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/close/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/reject/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/revoke/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/references/[uuid]/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/references/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/search/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/session/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/sessions/[uuid]/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/claim/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/dependencies/[dependsOnUuid]/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/dependencies/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/release/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/sessions/route-9cc7c62013897acb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/onboarding/page-455d693daccb65df.js +0 -1
- package/.next/standalone/.next/static/css/5f09fa856a63632f.css +0 -1
- package/.next/standalone/.next/static/sOwBl2wYTfQ3B0DrB18aB/_buildManifest.js +0 -1
- /package/.next/standalone/.next/static/{sOwBl2wYTfQ3B0DrB18aB → XTQkt8fOQEK4mZkZTFQ_E}/_ssgManifest.js +0 -0
package/cli/lineage.mjs
CHANGED
|
@@ -146,6 +146,26 @@ export class LineageResolver {
|
|
|
146
146
|
`[Chorus] lineage: non-string directIdeaUuid for ${entityType}:${entityUuid}`
|
|
147
147
|
);
|
|
148
148
|
}
|
|
149
|
+
// A non-null ROOT idea with a null/absent DIRECT idea is a lineage gap: the wake will
|
|
150
|
+
// anchor the execution on the entity (task/proposal), never on the idea conversation,
|
|
151
|
+
// so its run shows no running indicator / Interrupt on the idea chat — permanently, for
|
|
152
|
+
// this class of wake. The overwhelmingly likely cause is a Chorus server that predates
|
|
153
|
+
// the `directIdeaUuid` field on the /root-idea endpoint. Surface it as a visible WARN
|
|
154
|
+
// rather than folding it into the generic success `info` below (where it is
|
|
155
|
+
// indistinguishable from the legitimate "no idea ancestor" outcome, root=direct=null).
|
|
156
|
+
// Diagnostic ONLY — we do NOT substitute the root for the missing direct idea: for a
|
|
157
|
+
// DERIVED child idea root ≠ direct, so falling back to root would light the PARENT
|
|
158
|
+
// conversation and leave the child (which owns the woken session) idle. The correct fix
|
|
159
|
+
// is server-side; this warn points the operator straight at it.
|
|
160
|
+
if (root !== null && direct === null) {
|
|
161
|
+
this.logger.warn(
|
|
162
|
+
`[Chorus] lineage: ${entityType}:${entityUuid} resolved a root idea (${root}) but NO ` +
|
|
163
|
+
`directIdeaUuid — this wake will anchor on the entity, not the idea conversation, ` +
|
|
164
|
+
`so its run will not show a running indicator / Interrupt on the idea chat. Most ` +
|
|
165
|
+
`likely the Chorus server predates the directIdeaUuid field on /root-idea; upgrade ` +
|
|
166
|
+
`the server to restore child-wake → idea-conversation matching.`
|
|
167
|
+
);
|
|
168
|
+
}
|
|
149
169
|
this.logger.info(
|
|
150
170
|
`[Chorus] lineage: ${entityType}:${entityUuid} → root ${root ?? "none"}, direct ${direct ?? "none"}` +
|
|
151
171
|
(typeof data.resolvedVia === "string" ? ` (${data.resolvedVia})` : "")
|
package/cli/prompts.mjs
CHANGED
|
@@ -53,6 +53,8 @@ function mentionGuidance(n, entityType) {
|
|
|
53
53
|
* `chorus_pm_start_elaboration` / `chorus_pm_validate_elaboration` tool names, because
|
|
54
54
|
* this preamble rides EVERY wake including `elaboration_verified` (write-the-proposal),
|
|
55
55
|
* whose contract is that it never mentions the answer-questions tools. Keep it that way.
|
|
56
|
+
* The reference-attachment nudge (strengthen-reference-association) names `references[]` /
|
|
57
|
+
* `chorus_add_reference` only — never the elaboration tools — so it is safe on every wake.
|
|
56
58
|
*
|
|
57
59
|
* Kept compact: it is paid on every wake, so each line costs tokens per wake.
|
|
58
60
|
*/
|
|
@@ -72,6 +74,11 @@ export const HEADLESS_PREAMBLE = [
|
|
|
72
74
|
"silently — record the reason in a Chorus comment; when a skill offers to write a report,",
|
|
73
75
|
"create it directly or skip it, never prompt for it.",
|
|
74
76
|
"",
|
|
77
|
+
"When working an idea/proposal/task, if you come across an external link that is evidence",
|
|
78
|
+
"(a precedent issue/PR, a reference implementation, official docs, a paper/blog), attach it",
|
|
79
|
+
"via references — prefer the inline references[] param at creation time over a post-hoc",
|
|
80
|
+
"chorus_add_reference. Make it a reflex, not an afterthought.",
|
|
81
|
+
"",
|
|
75
82
|
"After you post something that needs a human decision, END THE TURN and leave the work",
|
|
76
83
|
"pending — do not poll or wait for a synchronous reply. The human's later comment or",
|
|
77
84
|
"elaboration answer wakes a fresh turn that continues the work.",
|
|
@@ -181,12 +188,22 @@ function buildPromptBody(n) {
|
|
|
181
188
|
`fix issues with chorus_pm_update_task_draft / chorus_pm_update_document_draft, then ` +
|
|
182
189
|
`chorus_pm_validate_proposal and chorus_pm_submit_proposal to resubmit.\n${mentionGuidance(n, "proposal")}`
|
|
183
190
|
);
|
|
184
|
-
case "proposal_approved":
|
|
191
|
+
case "proposal_approved": {
|
|
192
|
+
// Surface the approver's note inline, symmetric with proposal_rejected — so the
|
|
193
|
+
// daemon knows the reviewer's opinion without a follow-up chorus_get_proposal
|
|
194
|
+
// fetch. The server bakes the note into n.message as "... approved. Note: <note>"
|
|
195
|
+
// (buildMessage in notification-listener.ts); an approve WITHOUT a note has no
|
|
196
|
+
// "Note: " marker, so reviewInfo stays empty and the prompt reads cleanly. This
|
|
197
|
+
// mirrors the OpenClaw plugin's proposal_approved handler (event-router.ts).
|
|
198
|
+
const reviewInfo = n.message?.includes("Note: ")
|
|
199
|
+
? ` Review note: "${n.message.split("Note: ").pop()}".`
|
|
200
|
+
: "";
|
|
185
201
|
return (
|
|
186
202
|
`[Chorus] Proposal '${n.entityTitle}' was APPROVED (proposalUuid: ${n.entityUuid}, ` +
|
|
187
|
-
`projectUuid: ${n.projectUuid})
|
|
203
|
+
`projectUuid: ${n.projectUuid}).${reviewInfo} Its documents and tasks have been created. Use ` +
|
|
188
204
|
`chorus_get_unblocked_tasks (projectUuid: "${n.projectUuid}") to find tasks ready to start.\n${mentionGuidance(n, "proposal")}`
|
|
189
205
|
);
|
|
206
|
+
}
|
|
190
207
|
case "idea_claimed":
|
|
191
208
|
return (
|
|
192
209
|
`[Chorus] Idea '${n.entityTitle}' was assigned to you (ideaUuid: ${n.entityUuid}, ` +
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
// cli/session-map.mjs
|
|
2
|
+
// Generic daemon-local persistence of an `anchor → session-handle` map, shared by
|
|
3
|
+
// the backends whose CLI GENERATES its own conversation id (Codex thread_id, Kiro
|
|
4
|
+
// sessionId) rather than accepting a client-supplied one. To make such a wake
|
|
5
|
+
// resumable across daemon restarts we record the generated handle keyed by the
|
|
6
|
+
// Chorus session anchor (direct idea uuid, or the entity uuid for an ad-hoc
|
|
7
|
+
// session) and pass it back to the CLI's resume flag on the next wake.
|
|
8
|
+
//
|
|
9
|
+
// The store is a single JSON object `{ "<anchor>": "<handle>" }` at
|
|
10
|
+
// ~/.chorus/<filename> (same dir family as daemon.json). The anchor is a
|
|
11
|
+
// globally-unique Chorus uuid, so one flat file is safe across the daemon's
|
|
12
|
+
// multiple path-connections.
|
|
13
|
+
//
|
|
14
|
+
// CONTRACT: this is best-effort and MUST NEVER throw into the wake path. Any
|
|
15
|
+
// read/parse/write/rename failure degrades to "no mapping → next wake starts
|
|
16
|
+
// fresh" with a visible log (no-silent-errors). IO is injectable for tests.
|
|
17
|
+
//
|
|
18
|
+
// Backends wrap this factory with their own filename + semantic export names:
|
|
19
|
+
// codex-session-map.mjs → codex-sessions.json, getThreadId/setThreadId
|
|
20
|
+
// kiro-session-map.mjs → kiro-sessions.json, getSessionId/setSessionId
|
|
21
|
+
|
|
22
|
+
import { mkdirSync, readFileSync, renameSync, writeFileSync } from "node:fs";
|
|
23
|
+
import { homedir } from "node:os";
|
|
24
|
+
import { dirname, join } from "node:path";
|
|
25
|
+
|
|
26
|
+
const NOOP_LOGGER = { info() {}, warn() {}, error() {} };
|
|
27
|
+
|
|
28
|
+
/** A non-empty trimmed string, or null. */
|
|
29
|
+
function nonEmpty(value) {
|
|
30
|
+
return typeof value === "string" && value.trim().length > 0 ? value : null;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Read the whole map as a plain object. Missing / unreadable / malformed file →
|
|
35
|
+
* `{}` (never throws). A non-object JSON value (array / scalar) is also treated
|
|
36
|
+
* as empty.
|
|
37
|
+
* @param {string} path @param {(p: string) => string} read
|
|
38
|
+
* @param {{warn(m:string):void}} logger @param {string} logPrefix
|
|
39
|
+
* @returns {Record<string, unknown>}
|
|
40
|
+
*/
|
|
41
|
+
function readMap(path, read, logger, logPrefix) {
|
|
42
|
+
let raw;
|
|
43
|
+
try {
|
|
44
|
+
raw = read(path);
|
|
45
|
+
} catch (err) {
|
|
46
|
+
// ENOENT is the normal "no map yet" case — silent. Other read errors warn.
|
|
47
|
+
if (!(err && err.code === "ENOENT")) {
|
|
48
|
+
logger.warn(`[Chorus] ${logPrefix}: read failed (${err}) — treating as empty`);
|
|
49
|
+
}
|
|
50
|
+
return {};
|
|
51
|
+
}
|
|
52
|
+
try {
|
|
53
|
+
const parsed = JSON.parse(raw);
|
|
54
|
+
if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) return parsed;
|
|
55
|
+
logger.warn(`[Chorus] ${logPrefix}: file is not a JSON object — treating as empty`);
|
|
56
|
+
return {};
|
|
57
|
+
} catch (err) {
|
|
58
|
+
logger.warn(`[Chorus] ${logPrefix}: corrupt JSON (${err}) — treating as empty`);
|
|
59
|
+
return {};
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Build a backend-specific session map bound to a `~/.chorus/<filename>` store and
|
|
65
|
+
* a `logPrefix` for its warnings. Returns `{ mapPath, get, set }` — the get/set
|
|
66
|
+
* signatures and their injectable-IO deps are identical to the original
|
|
67
|
+
* codex-session-map so its tests pass unchanged.
|
|
68
|
+
*
|
|
69
|
+
* @param {{ filename: string, logPrefix: string }} config
|
|
70
|
+
* @returns {{
|
|
71
|
+
* mapPath: () => string,
|
|
72
|
+
* get: (anchor: string, deps?: object) => string | null,
|
|
73
|
+
* set: (anchor: string, handle: string, deps?: object) => void,
|
|
74
|
+
* }}
|
|
75
|
+
*/
|
|
76
|
+
export function createSessionMap({ filename, logPrefix }) {
|
|
77
|
+
/** Absolute path to this backend's session-id map, alongside ~/.chorus/daemon.json. */
|
|
78
|
+
const mapPath = () => join(homedir(), ".chorus", filename);
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Look up the handle recorded for `anchor`, or null when there is none (no file,
|
|
82
|
+
* no entry, or a non-string entry). Never throws.
|
|
83
|
+
*/
|
|
84
|
+
const get = (anchor, deps = {}) => {
|
|
85
|
+
const a = nonEmpty(anchor);
|
|
86
|
+
if (!a) return null;
|
|
87
|
+
const path = deps.path ?? mapPath();
|
|
88
|
+
const read = deps.read ?? ((p) => readFileSync(p, "utf8"));
|
|
89
|
+
const logger = deps.logger ?? NOOP_LOGGER;
|
|
90
|
+
const map = readMap(path, read, logger, logPrefix);
|
|
91
|
+
return nonEmpty(map[a]);
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Record `anchor → handle`, preserving every other entry. Atomic (temp file +
|
|
96
|
+
* rename). Best-effort: a blank anchor/handle is ignored (no write), and any IO
|
|
97
|
+
* failure is logged and swallowed — it never throws into the wake path.
|
|
98
|
+
*/
|
|
99
|
+
const set = (anchor, handle, deps = {}) => {
|
|
100
|
+
const a = nonEmpty(anchor);
|
|
101
|
+
const h = nonEmpty(handle);
|
|
102
|
+
if (!a || !h) return; // nothing meaningful to persist
|
|
103
|
+
const path = deps.path ?? mapPath();
|
|
104
|
+
const read = deps.read ?? ((p) => readFileSync(p, "utf8"));
|
|
105
|
+
const write = deps.write ?? writeFileSync;
|
|
106
|
+
const mkdir = deps.mkdir ?? mkdirSync;
|
|
107
|
+
const rename = deps.rename ?? renameSync;
|
|
108
|
+
const logger = deps.logger ?? NOOP_LOGGER;
|
|
109
|
+
|
|
110
|
+
try {
|
|
111
|
+
const map = readMap(path, read, logger, logPrefix);
|
|
112
|
+
map[a] = h;
|
|
113
|
+
mkdir(dirname(path), { recursive: true });
|
|
114
|
+
// Atomic write: temp file (0600) in the same dir, then rename over target,
|
|
115
|
+
// so a crash mid-write never truncates the live map.
|
|
116
|
+
const tmp = `${path}.tmp`;
|
|
117
|
+
write(tmp, JSON.stringify(map, null, 2) + "\n", { mode: 0o600 });
|
|
118
|
+
rename(tmp, path);
|
|
119
|
+
} catch (err) {
|
|
120
|
+
// Best-effort: a failed persist just means the next wake starts fresh.
|
|
121
|
+
logger.warn(`[Chorus] ${logPrefix}: failed to persist ${a}→${h} (${err}) — wake will start fresh next time`);
|
|
122
|
+
}
|
|
123
|
+
};
|
|
124
|
+
|
|
125
|
+
return { mapPath, get, set };
|
|
126
|
+
}
|
package/cli/spawner-select.mjs
CHANGED
|
@@ -11,10 +11,11 @@
|
|
|
11
11
|
|
|
12
12
|
import { ClaudeSpawner } from "./claude-spawner.mjs";
|
|
13
13
|
import { CodexSpawner } from "./codex-spawner.mjs";
|
|
14
|
+
import { KiroSpawner } from "./kiro-spawner.mjs";
|
|
14
15
|
|
|
15
16
|
/**
|
|
16
17
|
* Construct the spawner backend for `agentType`.
|
|
17
|
-
* @param {string} agentType "claude-code" | "codex" (already validated upstream).
|
|
18
|
+
* @param {string} agentType "claude-code" | "codex" | "kiro" (already validated upstream).
|
|
18
19
|
* @param {{ logger?: any, permissionMode?: "chorus"|"yolo", creds?: { url: string, apiKey: string } }} [opts]
|
|
19
20
|
* @returns {import("./codex-spawner.mjs").Spawner}
|
|
20
21
|
*/
|
|
@@ -23,6 +24,11 @@ export function selectSpawner(agentType, opts = {}) {
|
|
|
23
24
|
if (agentType === "codex") {
|
|
24
25
|
return new CodexSpawner({ logger, permissionMode, creds });
|
|
25
26
|
}
|
|
27
|
+
if (agentType === "kiro") {
|
|
28
|
+
// Kiro follows the Codex model — MCP from the user's plugin config, daemon key
|
|
29
|
+
// via env — so it takes the same { logger, permissionMode, creds } shape.
|
|
30
|
+
return new KiroSpawner({ logger, permissionMode, creds });
|
|
31
|
+
}
|
|
26
32
|
// Default / "claude-code": construction byte-identical to the prior daemon
|
|
27
33
|
// (ClaudeSpawner takes only { logger, permissionMode } — creds are not used by
|
|
28
34
|
// the Claude backend, which gets its key via the --mcp-config file).
|
package/cli/waker.mjs
CHANGED
|
@@ -121,7 +121,12 @@ export class Waker {
|
|
|
121
121
|
// control handler can target it for an interrupt. `child` is null while queued.
|
|
122
122
|
// buildExecutionSnapshot() maps ONLY the serializable fields and NEVER emits
|
|
123
123
|
// `child` — the handle stays daemon-local and never leaks onto the wire.
|
|
124
|
-
|
|
124
|
+
// The entry also carries the `directIdeaUuid` the waker ALREADY resolved (the
|
|
125
|
+
// entity's directly-attached idea — the same value used as the session anchor)
|
|
126
|
+
// so the UI can match a conversation's execution by the DIRECT idea rather than
|
|
127
|
+
// the root — surfacing a child idea's wake on the child conversation, not its
|
|
128
|
+
// parent.
|
|
129
|
+
/** @type {Map<string, { entityType: string, entityUuid: string, rootIdeaUuid: string|null, directIdeaUuid: string|null, status: "running"|"queued", startedAt: string|null, child: import("node:child_process").ChildProcess|null }>} */
|
|
125
130
|
this.executions = new Map();
|
|
126
131
|
}
|
|
127
132
|
|
|
@@ -231,13 +236,14 @@ export class Waker {
|
|
|
231
236
|
* resource (running or queued), carrying entityType/entityUuid, the reused
|
|
232
237
|
* rootIdeaUuid, and the daemon-side status/startedAt. Returns a fresh array each
|
|
233
238
|
* call so the caller can't mutate internal state. Never throws.
|
|
234
|
-
* @returns {Array<{ entityType: string, entityUuid: string, rootIdeaUuid: string|null, status: "running"|"queued", startedAt: string|null }>}
|
|
239
|
+
* @returns {Array<{ entityType: string, entityUuid: string, rootIdeaUuid: string|null, directIdeaUuid: string|null, status: "running"|"queued", startedAt: string|null }>}
|
|
235
240
|
*/
|
|
236
241
|
buildExecutionSnapshot() {
|
|
237
242
|
return [...this.executions.values()].map((e) => ({
|
|
238
243
|
entityType: e.entityType,
|
|
239
244
|
entityUuid: e.entityUuid,
|
|
240
245
|
rootIdeaUuid: e.rootIdeaUuid,
|
|
246
|
+
directIdeaUuid: e.directIdeaUuid,
|
|
241
247
|
status: e.status,
|
|
242
248
|
startedAt: e.startedAt,
|
|
243
249
|
}));
|
|
@@ -253,13 +259,20 @@ export class Waker {
|
|
|
253
259
|
* task/idea/proposal/document set) is ignored. Never throws.
|
|
254
260
|
* @param {{ entityType?: string, entityUuid?: string }} notification
|
|
255
261
|
* @param {string} key The serialization key from keyFor (idea:<direct> | entity:…).
|
|
256
|
-
* @param {{ rootIdeaUuid?: string|null }} [attribution]
|
|
262
|
+
* @param {{ rootIdeaUuid?: string|null, directIdeaUuid?: string|null }} [attribution]
|
|
263
|
+
* Server-resolved ids: `rootIdeaUuid` → execution snapshot grouping; `directIdeaUuid`
|
|
264
|
+
* → the session anchor the UI matches a conversation's execution by. Both threaded
|
|
265
|
+
* from `attribution`, NEVER sliced from `key`.
|
|
257
266
|
*/
|
|
258
267
|
markQueued(notification, key, attribution) {
|
|
259
268
|
const entity = this.#entityOf(notification);
|
|
260
269
|
if (!entity) return;
|
|
261
270
|
const execKey = this.#execKey(entity.entityType, entity.entityUuid);
|
|
262
271
|
const rootIdeaUuid = attribution?.rootIdeaUuid ?? null;
|
|
272
|
+
// The DIRECT idea (session anchor) the UI matches a conversation's execution by
|
|
273
|
+
// — carried from the SAME server-resolved attribution as rootIdeaUuid, never
|
|
274
|
+
// sliced from the key.
|
|
275
|
+
const directIdeaUuid = attribution?.directIdeaUuid ?? null;
|
|
263
276
|
const existing = this.executions.get(execKey);
|
|
264
277
|
// Don't downgrade a running resource to queued if a duplicate dispatch
|
|
265
278
|
// arrives while it's mid-wake; only (re)mark queued when not already running.
|
|
@@ -268,6 +281,7 @@ export class Waker {
|
|
|
268
281
|
entityType: entity.entityType,
|
|
269
282
|
entityUuid: entity.entityUuid,
|
|
270
283
|
rootIdeaUuid,
|
|
284
|
+
directIdeaUuid,
|
|
271
285
|
status: "queued",
|
|
272
286
|
startedAt: existing?.startedAt ?? null,
|
|
273
287
|
// Queued entries hold no live child yet — only the running entry does (子3).
|
|
@@ -346,6 +360,7 @@ export class Waker {
|
|
|
346
360
|
entityType: entity.entityType,
|
|
347
361
|
entityUuid: entity.entityUuid,
|
|
348
362
|
rootIdeaUuid,
|
|
363
|
+
directIdeaUuid,
|
|
349
364
|
status: "running",
|
|
350
365
|
startedAt: new Date().toISOString(),
|
|
351
366
|
child: null,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@chorus-aidlc/chorus",
|
|
3
|
-
"version": "0.14.
|
|
3
|
+
"version": "0.14.2",
|
|
4
4
|
"description": "The Agent Harness for AI-Human Collaboration — session lifecycle, task state, sub-agent orchestration, observability, and failure recovery",
|
|
5
5
|
"homepage": "https://github.com/Chorus-AIDLC/Chorus",
|
|
6
6
|
"repository": {
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
-- CreateTable
|
|
2
|
+
CREATE TABLE "ProjectVisit" (
|
|
3
|
+
"id" SERIAL NOT NULL,
|
|
4
|
+
"uuid" TEXT NOT NULL,
|
|
5
|
+
"companyUuid" TEXT NOT NULL,
|
|
6
|
+
"userUuid" TEXT NOT NULL,
|
|
7
|
+
"projectUuid" TEXT NOT NULL,
|
|
8
|
+
"lastVisitedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
9
|
+
"pinnedAt" TIMESTAMP(3),
|
|
10
|
+
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
11
|
+
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
12
|
+
|
|
13
|
+
CONSTRAINT "ProjectVisit_pkey" PRIMARY KEY ("id")
|
|
14
|
+
);
|
|
15
|
+
|
|
16
|
+
-- CreateIndex
|
|
17
|
+
CREATE UNIQUE INDEX "ProjectVisit_uuid_key" ON "ProjectVisit"("uuid");
|
|
18
|
+
|
|
19
|
+
-- CreateIndex
|
|
20
|
+
CREATE INDEX "ProjectVisit_companyUuid_idx" ON "ProjectVisit"("companyUuid");
|
|
21
|
+
|
|
22
|
+
-- CreateIndex
|
|
23
|
+
CREATE INDEX "ProjectVisit_userUuid_pinnedAt_idx" ON "ProjectVisit"("userUuid", "pinnedAt");
|
|
24
|
+
|
|
25
|
+
-- CreateIndex
|
|
26
|
+
CREATE INDEX "ProjectVisit_userUuid_lastVisitedAt_idx" ON "ProjectVisit"("userUuid", "lastVisitedAt");
|
|
27
|
+
|
|
28
|
+
-- CreateIndex
|
|
29
|
+
CREATE UNIQUE INDEX "ProjectVisit_userUuid_projectUuid_key" ON "ProjectVisit"("userUuid", "projectUuid");
|
package/prisma/schema.prisma
CHANGED
|
@@ -546,6 +546,14 @@ model DaemonExecution {
|
|
|
546
546
|
// → Idea.uuid; the root-idea lineage anchor for grouping/labeling. Null when
|
|
547
547
|
// the wake has no idea ancestor (e.g. a standalone/quick task).
|
|
548
548
|
rootIdeaUuid String?
|
|
549
|
+
// → Idea.uuid; the DIRECT idea (the entity's directly-attached idea — the same
|
|
550
|
+
// value the daemon anchors its Claude session on). For a top-level idea this
|
|
551
|
+
// equals rootIdeaUuid; for a derived (child) idea it is the child while
|
|
552
|
+
// rootIdeaUuid is the topmost ancestor. The chat UI matches a conversation's
|
|
553
|
+
// running/interruptible execution by this DIRECT idea, so a child idea's wake
|
|
554
|
+
// surfaces on the child conversation, not its parent. Null when the wake has
|
|
555
|
+
// no idea ancestor. Weak ref, no DB FK.
|
|
556
|
+
directIdeaUuid String?
|
|
549
557
|
|
|
550
558
|
// running | queued | ended | interrupted
|
|
551
559
|
// `interrupted` is a STICKY status: when a wake's subprocess is stopped (by a
|
|
@@ -722,6 +730,28 @@ model NotificationPreference {
|
|
|
722
730
|
@@index([companyUuid])
|
|
723
731
|
}
|
|
724
732
|
|
|
733
|
+
// Per-user project quick-access state: recency + pin. One row per (user, project).
|
|
734
|
+
// User-only surface (agents never render the sidebar), so keyed on userUuid rather
|
|
735
|
+
// than the polymorphic ownerType/ownerUuid pair NotificationPreference uses.
|
|
736
|
+
// Mirrors the NotificationPreference convention: scalar companyUuid only, no
|
|
737
|
+
// `company Company @relation` field (relationMode = "prisma", app-level scoping).
|
|
738
|
+
model ProjectVisit {
|
|
739
|
+
id Int @id @default(autoincrement())
|
|
740
|
+
uuid String @unique @default(uuid())
|
|
741
|
+
companyUuid String
|
|
742
|
+
userUuid String
|
|
743
|
+
projectUuid String
|
|
744
|
+
lastVisitedAt DateTime @default(now()) // updated on every project-page entry
|
|
745
|
+
pinnedAt DateTime? // non-null = pinned; ordering key for the pinned list
|
|
746
|
+
createdAt DateTime @default(now())
|
|
747
|
+
updatedAt DateTime @updatedAt
|
|
748
|
+
|
|
749
|
+
@@unique([userUuid, projectUuid])
|
|
750
|
+
@@index([companyUuid])
|
|
751
|
+
@@index([userUuid, pinnedAt])
|
|
752
|
+
@@index([userUuid, lastVisitedAt])
|
|
753
|
+
}
|
|
754
|
+
|
|
725
755
|
// Mention (tracks @mentions in comments, tasks, ideas)
|
|
726
756
|
model Mention {
|
|
727
757
|
id Int @id @default(autoincrement())
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
exports.id=1388,exports.ids=[1388],exports.modules={5514:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{y:()=>C});var e=c(10837),f=c(21968),g=c(9222),h=c(44787),i=c(22727),j=c(24383),k=c(55775),l=c(27936),m=c(68797),n=c(24879),o=c(31009),p=c(45148),q=c(35198),r=c(49599),s=c(42424),t=c(11568),u=c(36566),v=c(29227),w=c(24181),x=c(54722),y=c(86104),z=c(25493),A=c(76172),B=a([m,y]);[m,y]=B.then?(await B)():B;let D={open:"bg-[#FFF3E0] dark:bg-[#3a2a12] text-[#E65100] dark:text-[#F0A050]",assigned:"bg-[#E3F2FD] dark:bg-[#13253a] text-[#1976D2] dark:text-[#5AA9F0]",in_progress:"bg-[#E8F5E9] dark:bg-[#14281a] text-[#5A9E6F] dark:text-[#6FD19A]",to_verify:"bg-[#F3E5F5] dark:bg-[#281630] text-[#7B1FA2] dark:text-[#C98FE0]",done:"bg-[#E0F2F1] dark:bg-[#12292a] text-[#00796B] dark:text-[#4FD1C0]",closed:"bg-[#F5F5F5] dark:bg-[#1e1e20] text-[#9A9A9A]"},E={open:"open",assigned:"assigned",in_progress:"inProgress",to_verify:"toVerify",done:"done",closed:"closed"},F={in_progress:"bg-[#FFF3E0] dark:bg-[#3a2a12] text-[#E65100] dark:text-[#F0A050]",assigned:"bg-[#E8F5E9] dark:bg-[#14281a] text-[#2E7D32] dark:text-[#5FD07E]",open:"bg-[#F5F5F5] dark:bg-[#1e1e20] text-muted-foreground",to_verify:"bg-[#E3F2FD] dark:bg-[#13253a] text-[#1565C0] dark:text-[#5AA9F0]"},G=[{id:"todo",labelKey:"todo",statuses:["open","assigned"]},{id:"in_progress",labelKey:"inProgress",statuses:["in_progress"]},{id:"to_verify",labelKey:"toVerify",statuses:["to_verify"]},{id:"done",labelKey:"done",statuses:["done","closed"]}];function C({projectUuid:a,initialTasks:b,currentUserUuid:c,selectedTaskUuid:d,onTaskSelect:B,onPanelClose:C,proposalUuidFilter:H}){let I=(0,g.c)(),[J,K]=(0,f.useState)(b),[L,M]=(0,f.useState)({}),[N,O]=(0,f.useState)(!1),[P,Q]=(0,f.useState)(null),[R,S]=(0,f.useState)([]),[T,U]=(0,f.useState)(!1),[V,W]=(0,f.useState)([]),[X,Y]=(0,f.useState)(!1),[Z,$]=(0,f.useState)(!1),_=(0,f.useCallback)(async()=>{let b=await (0,u.p)(a);if(b.success){let a=H?b.data.filter(a=>a.proposalUuid&&H.has(a.proposalUuid)):b.data;K(a);let c=await (0,z.h)(a.map(a=>a.uuid));c.success&&c.data&&M(c.data)}},[a,H]);(0,A.eV)("task",_),(0,f.useRef)(H);let aa=(0,f.useMemo)(()=>d?J.find(a=>a.uuid===d)??null:null,[d,J]),ab=a=>J.filter(b=>a.includes(b.status)),ac=a=>ab(a).reduce((a,b)=>a+(b.storyPoints||0),0),ad=async b=>{let c;$(!1);let{destination:d,source:e,draggableId:f}=b;if(!d||d.droppableId===e.droppableId&&d.index===e.index)return;let g=d.droppableId;e.droppableId;let h=J.find(a=>a.uuid===f);if(!h)return;if(G.find(a=>a.id===g),"todo"===g)c="assigned"===h.status?"assigned":"open";else if("in_progress"===g)c="in_progress";else if("to_verify"===g)c="to_verify";else{if("done"!==g)return;c="to_verify"===h.status?"done":"to_verify"}K(a=>a.map(a=>a.uuid===f?{...a,status:c}:a));let i=await (0,v.y)(f,g,a);if(i.success)_();else{if("blocked"in i&&i.blocked&&"blockers"in i){K(a=>a.map(a=>a.uuid===f?{...a,status:h.status}:a)),Q(h),S(i.blockers),O(!0);return}if(K(a=>a.map(a=>a.uuid===f?{...a,status:h.status}:a)),"gateBlocked"in i&&i.gateBlocked){let a="unresolvedCriteria"in i&&Array.isArray(i.unresolvedCriteria)?i.unresolvedCriteria:[];W(a),U(!0)}}},ae=async()=>{if(P){Y(!0);try{let a=await (0,w.H)(P.uuid,"in_progress");a.success?(O(!1),Q(null),S([]),_()):x.q.error("Failed to force move task:",a.error)}finally{Y(!1)}}},af=()=>{O(!1),Q(null),S([])};return(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)(h.JY,{onDragStart:()=>{$(!0)},onDragEnd:ad,children:(0,e.jsx)(n.o,{children:(0,e.jsx)("div",{className:"flex flex-1 gap-4 overflow-x-auto pb-4",children:G.map(a=>{let b=ab(a.statuses);return(0,e.jsxs)("div",{className:"flex w-[300px] flex-shrink-0 flex-col rounded-xl bg-secondary p-4",children:[(0,e.jsxs)("div",{className:"mb-4 flex items-center justify-between",children:[(0,e.jsxs)("div",{className:"flex items-center gap-2",children:[(0,e.jsx)("h3",{className:"font-medium text-foreground",children:I(`status.${a.labelKey}`)}),(0,e.jsx)("span",{className:"rounded-full bg-card px-2 py-0.5 text-xs font-medium text-muted-foreground",children:b.length})]}),ac(a.statuses)>0&&(0,e.jsxs)("span",{className:"flex items-center gap-1 text-xs text-[#9A9A9A]",children:[(0,e.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:"h-3 w-3",children:[(0,e.jsx)("circle",{cx:"12",cy:"12",r:"10"}),(0,e.jsx)("polyline",{points:"12 6 12 12 16 14"})]}),ac(a.statuses),"h"]})]}),(0,e.jsx)(h.gL,{droppableId:a.id,children:(a,c)=>(0,e.jsxs)("div",{ref:a.innerRef,...a.droppableProps,className:`flex-1 space-y-3 overflow-y-auto min-h-[100px] rounded-lg pt-3 pr-3 transition-colors ${c.isDraggingOver?"bg-border":""}`,children:[0!==b.length||c.isDraggingOver?b.map((a,b)=>{let c=!!a.dependsOn&&0!==a.dependsOn.length&&a.dependsOn.some(a=>"done"!==a.status&&"closed"!==a.status),d=(c?!a.dependsOn?[]:a.dependsOn.filter(a=>"done"!==a.status&&"closed"!==a.status):[]).map(a=>a.title).join(", ");return(0,e.jsx)(h.sx,{draggableId:a.uuid,index:b,children:(b,f)=>(0,e.jsx)("div",{ref:b.innerRef,...b.draggableProps,...b.dragHandleProps,onClick:()=>{f.isDragging||B(a.uuid)},style:b.draggableProps.style,children:(0,e.jsxs)(o.P.div,{className:"relative",layoutId:Z?void 0:`task-card-${a.uuid}`,transition:p.Yv.spring,children:[L[a.uuid]>0&&(0,e.jsx)("div",{className:"absolute -top-3 -right-3 z-10 flex h-11 w-11 items-center justify-center rounded-full border-2 border-green-400 bg-card shadow-sm",children:(0,e.jsx)("img",{src:"/typing-animation.gif",alt:"",className:"h-8 w-8"})}),(0,e.jsx)(i.D,{entityType:"task",entityUuid:a.uuid,children:(0,e.jsxs)(q.Zp,{className:`cursor-pointer p-4 transition-all ${c?"border-dashed border-[#D1D1D1] dark:border-[#3a3a40] opacity-60":"border-border hover:border-primary"} bg-card hover:shadow-sm ${f.isDragging?"shadow-lg rotate-2":""}`,children:[(0,e.jsxs)("div",{className:"mb-2 flex items-start justify-between",children:[(0,e.jsx)(r.E,{className:D[a.status]||"",children:I(`status.${E[a.status]||a.status}`)}),(0,e.jsx)("div",{className:"flex items-center gap-1.5",children:a.storyPoints&&(0,e.jsxs)("span",{className:"flex items-center gap-1 rounded bg-[#FFF3E0] dark:bg-[#3a2a12] px-2 py-0.5 text-xs font-medium text-[#E65100] dark:text-[#F0A050]",children:[(0,e.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:"h-3 w-3",children:[(0,e.jsx)("circle",{cx:"12",cy:"12",r:"10"}),(0,e.jsx)("polyline",{points:"12 6 12 12 16 14"})]}),a.storyPoints,"h"]})})]}),(0,e.jsx)("h4",{className:"mb-1 font-medium text-foreground",children:a.title}),a.description&&(0,e.jsx)("p",{className:"mb-2 line-clamp-2 text-sm text-muted-foreground",children:a.description}),c&&(0,e.jsxs)("div",{className:"mb-2 flex items-center gap-1.5 rounded-md bg-[#FFF3E0] dark:bg-[#3a2a12] px-2 py-1",children:[(0,e.jsx)(j.A,{className:"h-3 w-3 shrink-0 text-[#E65100] dark:text-[#F0A050]"}),(0,e.jsx)("span",{className:"text-[9px] font-medium leading-tight text-[#E65100] dark:text-[#F0A050] line-clamp-1",children:I("tasks.blockedBy",{tasks:d})})]}),(0,e.jsxs)("div",{className:"flex items-start justify-between gap-2 text-xs text-[#9A9A9A]",children:[a.assignee?(0,e.jsxs)("span",{className:"flex min-w-0 flex-col gap-0.5",children:[(0,e.jsxs)("span",{className:"flex items-center gap-1",children:[(0,e.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:"h-3 w-3 shrink-0",children:[(0,e.jsx)("path",{d:"M12 8V4H8"}),(0,e.jsx)("rect",{width:"16",height:"12",x:"4",y:"8",rx:"2"})]}),(0,e.jsx)("span",{className:"truncate",children:a.assignee.name})]}),"agent_instance"===a.assignee.type&&a.assignee.instance&&(0,e.jsx)(m.jQ,{cwd:a.assignee.instance.cwd,host:a.assignee.instance.host,showHost:!1,className:"pl-4"})]}):"open"===a.status?(0,e.jsx)("span",{className:"text-primary",children:I("common.assign")}):(0,e.jsx)("span",{children:I("common.unassigned")}),(0,e.jsxs)("span",{className:"flex items-center gap-1",children:[L[a.uuid]>0&&(0,e.jsxs)(r.E,{variant:"outline",className:"h-4 gap-1 border-green-300 dark:border-[#2a4a34] px-1.5 text-[10px] text-green-700 dark:text-[#6FD19A]",children:[(0,e.jsx)("span",{className:"inline-block h-1.5 w-1.5 rounded-full bg-green-500"}),I("sessions.workerCount",{count:L[a.uuid]})]}),a.acceptanceSummary&&a.acceptanceSummary.total>0&&(()=>{let b=a.acceptanceSummary,c="to_verify"===a.status,d=b.requiredPassed===b.required&&b.required>0,f=b.requiredFailed>0,g="bg-secondary text-muted-foreground";return c&&(g=d?"bg-green-50 text-green-700 dark:bg-[#14281a] dark:text-[#6FD19A]":f?"bg-red-50 text-[#C4574C] dark:bg-[#331619] dark:text-[#F0897E]":"bg-amber-50 text-[#D97706] dark:bg-[#332a12] dark:text-[#E0B44E]"),(0,e.jsxs)(r.E,{className:`h-4 gap-1 border-0 px-1.5 text-[9px] ${g}`,children:[(0,e.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:"h-2.5 w-2.5",children:[(0,e.jsx)("path",{d:"M9 11l3 3L22 4"}),(0,e.jsx)("path",{d:"M21 12v7a2 2 0 01-2 2H5a2 2 0 01-2-2V5a2 2 0 012-2h11"})]}),b.passed,"/",b.total]})})()]})]})]})})]})})},a.uuid)}):(0,e.jsx)("div",{className:"flex h-24 items-center justify-center rounded-lg border-2 border-dashed border-border text-sm text-[#9A9A9A]",children:I("tasks.noTasks")}),a.placeholder]})})]},a.id)})})})}),aa&&(0,e.jsx)(y.v,{task:aa,projectUuid:a,currentUserUuid:c,onClose:C}),(0,e.jsx)(t.lG,{open:N,onOpenChange:a=>{a||af()},children:(0,e.jsxs)(t.Cf,{className:"max-w-md rounded-2xl",children:[(0,e.jsxs)(t.c7,{children:[(0,e.jsxs)(t.L3,{className:"flex items-center gap-2",children:[(0,e.jsx)(k.A,{className:"h-5 w-5 text-[#E65100] dark:text-[#F0A050]"}),I("tasks.dependencyBlocked")]}),(0,e.jsx)(t.rr,{children:I("tasks.dependencyBlockedDescription")})]}),(0,e.jsxs)("div",{className:"rounded-lg bg-background p-3",children:[(0,e.jsx)("p",{className:"mb-2 text-xs font-medium text-muted-foreground",children:I("tasks.blockerList")}),(0,e.jsx)("div",{className:"space-y-2",children:R.map(a=>(0,e.jsxs)("div",{className:"flex items-center justify-between rounded-lg border border-border bg-card p-3",children:[(0,e.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,e.jsx)("p",{className:"truncate text-sm font-medium text-foreground",children:a.title}),(0,e.jsxs)("div",{className:"mt-1 flex items-center gap-2",children:[a.assignee&&(0,e.jsx)("span",{className:"text-xs text-muted-foreground",children:a.assignee.name}),a.sessionCheckin&&(0,e.jsxs)("span",{className:"flex items-center gap-1 text-xs text-muted-foreground",children:[(0,e.jsx)(l.A,{className:"h-3 w-3"}),a.sessionCheckin.sessionName]})]})]}),(0,e.jsx)(r.E,{className:`shrink-0 ${F[a.status]||"bg-[#F5F5F5] dark:bg-[#1e1e20] text-muted-foreground"}`,children:I(`status.${E[a.status]||a.status}`)})]},a.uuid))})]}),(0,e.jsxs)(t.Es,{className:"gap-2 sm:gap-0",children:[(0,e.jsx)(s.$,{variant:"outline",onClick:af,children:I("common.cancel")}),(0,e.jsx)(s.$,{className:"bg-[#E65100] hover:bg-[#BF4400] text-white",onClick:ae,disabled:X,children:X?I("common.processing"):I("tasks.forceMove")})]})]})}),(0,e.jsx)(t.lG,{open:T,onOpenChange:U,children:(0,e.jsxs)(t.Cf,{className:"max-w-[520px] rounded-2xl p-0 gap-0",children:[(0,e.jsxs)(t.c7,{className:"px-6 pt-6 pb-4",children:[(0,e.jsxs)(t.L3,{className:"flex items-center gap-2.5",children:[(0,e.jsx)(k.A,{className:"h-5 w-5 text-[#C4574C] dark:text-[#F0897E]"}),I("acceptanceCriteria.title")]}),(0,e.jsx)(t.rr,{className:"text-[13px] leading-relaxed text-muted-foreground",children:I("acceptanceCriteria.gateBlocked",{count:V.filter(a=>a.required&&"passed"!==a.status).length})})]}),(0,e.jsxs)("div",{className:"px-6 pb-4 space-y-3",children:[(0,e.jsx)("p",{className:"text-[11px] font-semibold text-[#9A9A9A] uppercase tracking-wide",children:I("acceptanceCriteria.title")}),V.map(a=>(0,e.jsxs)("div",{className:`rounded-lg border p-3 space-y-2 ${"failed"===a.status?"border-red-200 dark:border-[#5a2a2e] bg-card":"border-border bg-card"}`,children:[(0,e.jsxs)("div",{className:"flex items-center gap-2",children:[(0,e.jsx)("div",{className:`h-2 w-2 rounded-full shrink-0 ${"failed"===a.status?"bg-[#C4574C]":"bg-[#F59E0B]"}`}),(0,e.jsx)("span",{className:"text-xs font-semibold text-foreground",children:a.description})]}),(0,e.jsxs)("div",{className:"flex items-center gap-2 pl-4",children:[(0,e.jsx)(r.E,{className:`text-[10px] border-0 ${"failed"===a.status?"bg-red-50 text-[#C4574C] dark:bg-[#331619] dark:text-[#F0897E]":"bg-amber-50 text-[#D97706] dark:bg-[#332a12] dark:text-[#E0B44E]"}`,children:I(`acceptanceCriteria.status.${a.status}`)}),(0,e.jsx)(r.E,{className:"text-[10px] border-0 bg-background text-muted-foreground",children:a.required?I("acceptanceCriteria.required"):I("acceptanceCriteria.optional")}),!a.evidence&&(0,e.jsx)("span",{className:"text-[10px] italic text-muted-foreground",children:I("acceptanceCriteria.noEvidence")})]}),a.evidence&&(0,e.jsxs)("div",{className:"rounded-md bg-red-50 dark:bg-[#331619] p-2 ml-4",children:[(0,e.jsx)("span",{className:"text-[10px] font-medium text-muted-foreground",children:I("acceptanceCriteria.verifyEvidence")}),(0,e.jsx)("p",{className:"text-[11px] text-foreground mt-0.5",children:a.evidence})]})]},a.uuid))]}),(0,e.jsx)(t.Es,{className:"border-t border-[#E5E2DC] dark:border-[#2a2a2e] px-6 py-4",children:(0,e.jsx)(s.$,{className:"rounded-lg bg-[#C4574C] hover:bg-[#A3433A] text-white",onClick:()=>U(!1),children:I("acceptanceCriteria.dismiss")})})]})})]})}d()}catch(a){d(a)}})},7046:(a,b,c)=>{"use strict";c.d(b,{O4:()=>g,kX:()=>e,od:()=>f,sO:()=>j,z3:()=>i});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)}},15107:(a,b,c)=>{Promise.resolve().then(c.bind(c,29334))},19520:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{Hd:()=>n,nk:()=>p,pw:()=>o,yq:()=>m});var e=c(2613);c(50785);var f=c(5562),g=c(9259),h=c(50530),i=c(67738),j=c(97307),k=c(12217),l=a([g,h,i]);[g,h,i]=l.then?(await l)():l;let q={todo:"open",in_progress:"in_progress",to_verify:"to_verify",done:"done"};async function m(a,b,c){let d=await (0,g.d)();if(!d)return{success:!1,error:"Unauthorized"};try{let e=await (0,h.K4)(d.companyUuid,a);if(!e)return{success:!1,error:"Task not found"};let g=q[b];if(!g)return{success:!1,error:"Invalid column"};if("in_progress"===g){let b=await (0,h.IM)(a);if(!b.resolved)return{success:!1,error:"Dependencies not resolved",blocked:!0,blockers:b.blockers}}if("done"===g&&"to_verify"!==e.status)await (0,h.lC)(a,{status:"to_verify"});else if("done"===g&&"to_verify"===e.status){let b=await (0,h.Ew)(a);if(!b.allowed)return{success:!1,error:b.reason||"Not all required acceptance criteria are passed",gateBlocked:!0,unresolvedCriteria:b.unresolvedCriteria||[]};await (0,h.lC)(a,{status:"done"})}else await (0,h.lC)(a,{status:g});return(0,f.revalidatePath)(`/projects/${c}/tasks`),{success:!0}}catch(a){return j.default.error({err:a},"Failed to move task"),{success:!1,error:"Failed to move task"}}}async function n(a,b){let c=await (0,g.d)();if(!c)return{success:!1,error:"Unauthorized"};try{let d=await (0,h.K4)(c.companyUuid,a);if(!d)return{success:!1,error:"Task not found"};return await (0,h.lC)(a,{status:b}),await (0,i.createActivity)({companyUuid:c.companyUuid,projectUuid:d.projectUuid,targetType:"task",targetUuid:d.uuid,actorType:c.type,actorUuid:c.actorUuid,action:"force_status_change",value:JSON.stringify({from:d.status,to:b})}),{success:!0}}catch(a){return j.default.error({err:a},"Failed to force move task"),{success:!1,error:"Failed to force move task"}}}async function o(a){let b=await (0,g.d)();if(!b)return{success:!1,error:"Unauthorized"};try{let{tasks:c}=await (0,h.Vk)({companyUuid:b.companyUuid,projectUuid:a,skip:0,take:1e3});return{success:!0,data:c}}catch(a){return j.default.error({err:a},"Failed to fetch tasks"),{success:!1,error:"Failed to fetch tasks"}}}async function p(a){let b=await (0,g.d)();if(!b)return{nodes:[],edges:[]};try{return await (0,h.Cm)(b.companyUuid,a)}catch(a){return j.default.error({err:a},"Failed to get project dependencies"),{nodes:[],edges:[]}}}(0,k.D)([m,n,o,p]),(0,e.A)(m,"7067292139285010417cf50b0605fca147ffe494a4",null),(0,e.A)(n,"60aa8d4bae20b000bc59ffc2ab1c862084323ccbd8",null),(0,e.A)(o,"407b7e04766037fe71af88f209e76445dd4e7b65ef",null),(0,e.A)(p,"40849562ebbe7e000608c51fee043961cea91b6979",null),d()}catch(a){d(a)}})},24181:(a,b,c)=>{"use strict";c.d(b,{H:()=>e});var d=c(42377);let e=(0,d.createServerReference)("60aa8d4bae20b000bc59ffc2ab1c862084323ccbd8",d.callServer,void 0,d.findSourceMapURL,"forceMoveTaskToColumnAction")},24879:(a,b,c)=>{"use strict";c.d(b,{o:()=>k});var d=c(10837),e=c(21968),f=c(46005);let g=(0,e.createContext)(null);var h=c(46801),i=c(72443);let j=a=>!a.isLayoutDirty&&a.willUpdate(!1),k=({children:a,id:b,inherit:c=!0})=>{let k=(0,e.useContext)(f.L),l=(0,e.useContext)(g),[m,n]=function(){let a=function(){let a=(0,e.useRef)(!1);return(0,i.E)(()=>(a.current=!0,()=>{a.current=!1}),[]),a}(),[b,c]=(0,e.useState)(0),d=(0,e.useCallback)(()=>{a.current&&c(b+1)},[b]);return[(0,e.useCallback)(()=>h.Gt.postRender(d),[d]),b]}(),o=(0,e.useRef)(null),p=k.id||l;null===o.current&&((a=>!0==(!0===a)||"id"===a)(c)&&p&&(b=b?p+"-"+b:p),o.current={id:b,group:!0===c&&k.group||function(){let a=new Set,b=new WeakMap,c=()=>a.forEach(j);return{add:d=>{a.add(d),b.set(d,d.addEventListener("willUpdate",c))},remove:d=>{a.delete(d);let e=b.get(d);e&&(e(),b.delete(d)),c()},dirty:c}}()});let q=(0,e.useMemo)(()=>({...o.current,forceRender:m}),[n]);return(0,d.jsx)(f.L.Provider,{value:q,children:a})}},26761:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.r(b),c.d(b,{"00b55ac412724660fcc2944f0732e86675d07d87e4":()=>g.vq,"40259bf65be47c0f51c8118d69cdbce667d6f92856":()=>g.Yw,"403d50db0a6210a79345aec08dcd7d0778f5afb4c9":()=>e.v5,"40437b7a932280e774aa74a05bf1adb8ccbdeeb213":()=>j.Y9,"404a62707a781921fafbd2a52756250160b5bc1806":()=>j.bv,"404be917517e841a3841dc2268f537f86751f7e542":()=>e.Dv,"404d88ba836ceedbda17e933b4b245b934df09d5a8":()=>g.iY,"407b7e04766037fe71af88f209e76445dd4e7b65ef":()=>f.pw,"40849562ebbe7e000608c51fee043961cea91b6979":()=>f.nk,"408a0b29e2af71ac59260f979c248d43b1c80addf7":()=>g.A0,"4092a0b3c286d003873de674b9aa38c6a6614dc86e":()=>g.p2,"409d5956f55ffeb4dbafef35cff17a8c49682002e0":()=>l.F,"40a3be0e8df8105be8e95ce2817f37df569258c449":()=>j.t1,"40a52493cf6eb5ad91d6a02abdaca60c7b9d8feb65":()=>m.kq,"40aa5a92f5c6504ccf6022cb405ba298b31f79e274":()=>m.xo,"40adc2ce26530fef2d53b454c50fe58d7ae4e58c4f":()=>g.G3,"40b20945b30054e0e4ce9c051749fe4eec44325a15":()=>n.J,"40be0491115f9089132b1204390dc0f49807d942c9":()=>g.hR,"40c45bb325d7a4ff92af8656e043759509d797907e":()=>k.f,"40cba7eba476ad3a06b79101da704c4c548dabd0df":()=>n.h,"601c59aec6d769bbe486f5ea1ccd3fd4270033fd73":()=>g.TV,"602b91eddcac452b0cba2b94325626135f9c8cb952":()=>e.Tg,"604ce86807d55a87dcb46df6e4fe6ad5a9a342be2c":()=>h.Nq,"606641c25b08d35b0964503b3aee10dceb401824a7":()=>h.IY,"60714d4c7afb225477da48a465b621805b27b81d9f":()=>m.wG,"607522a12b1c20d12bc0fb698e687b2cc0c8bf7baf":()=>g.y9,"60895b7198b1fe2decacbac5ea137868c30e5c3f3d":()=>m.TK,"60aa8d4bae20b000bc59ffc2ab1c862084323ccbd8":()=>f.Hd,"60c39d15d7d5e2a58ed94b8c9b19f8724d4c47c3ee":()=>h.hD,"60dd52a056e2bdad62e763211054323f494029bbc2":()=>g.bd,"60ee00e0f81186986ceb2159c1e052bd817d18cb2a":()=>j.jD,"70478b99cf48ad4cc4d144cdbdc40c521341ef04ae":()=>i.d,"705499136b14c392624997b6e1a7cda58014b837e6":()=>i.s,"7067292139285010417cf50b0605fca147ffe494a4":()=>f.yq,"70ead25f38c4f3d34218e47c0febad4caaa9b8748e":()=>g.qb});var e=c(22299),f=c(19520),g=c(73393),h=c(71353),i=c(98581),j=c(52178),k=c(64029),l=c(72189),m=c(22293),n=c(81751),o=a([e,f,g,h,i,j,k,l,m,n]);[e,f,g,h,i,j,k,l,m,n]=o.then?(await o)():o,d()}catch(a){d(a)}})},29179:(a,b,c)=>{Promise.resolve().then(c.bind(c,90436))},29227:(a,b,c)=>{"use strict";c.d(b,{y:()=>e});var d=c(42377);let e=(0,d.createServerReference)("7067292139285010417cf50b0605fca147ffe494a4",d.callServer,void 0,d.findSourceMapURL,"moveTaskToColumnAction")},29334:(a,b,c)=>{"use strict";c.d(b,{TaskViewToggle:()=>d});let d=(0,c(37143).registerClientReference)(function(){throw Error("Attempted to call TaskViewToggle() from the server but TaskViewToggle is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/home/ubuntu/dev/ai-pm/src/app/(dashboard)/projects/[uuid]/tasks/task-view-toggle.tsx","TaskViewToggle")},36566:(a,b,c)=>{"use strict";c.d(b,{p:()=>e});var d=c(42377);let e=(0,d.createServerReference)("407b7e04766037fe71af88f209e76445dd4e7b65ef",d.callServer,void 0,d.findSourceMapURL,"fetchTasksAction")},37066:(a,b,c)=>{"use strict";c.d(b,{A:()=>g});var d=c(77592),e=c(50117);let f=["en","zh","ko","ja"],g=(0,d.A)(async()=>{let a=await (0,e.UL)(),b=a.get("chorus-locale")?.value,d=b&&f.includes(b)?b:"en";return{locale:d,messages:(await c(76565)(`./${d}.json`)).default}})},39268:(a,b,c)=>{"use strict";c.d(b,{T:()=>r});var d=c(10837),e=c(21968),f=c(1007),g=c(68884),h=c(9222),i=c(65956),j=c(56149),k=c(9810),l=c(10694),m=c(96307),n=c(42424),o=c(49599),p=c(74113),q=c(10297);function r({projectUuid:a}){let b=(0,h.c)("tasks"),c=(0,g.r)(),r=(0,f.usePathname)(),s=(0,f.useSearchParams)(),[t,u]=(0,e.useState)(!1),[v,w]=(0,e.useState)([]),[x,y]=(0,e.useState)(new Set),z=(0,e.useCallback)(a=>{let b=new URLSearchParams(s.toString());a.size>0?b.set("proposalUuids",Array.from(a).join(",")):b.delete("proposalUuids");let d=b.toString();c.replace(`${r}${d?`?${d}`:""}`,{scroll:!1})},[c,r,s]),A=(0,e.useCallback)(a=>{y(b=>{let c=new Set(b);return c.has(a)?c.delete(a):c.add(a),z(c),c})},[z]),B=(0,e.useCallback)(()=>{y(new Set),z(new Set)},[z]),C=x.size>0;return(0,d.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,d.jsxs)("div",{className:"flex items-center gap-1.5 text-sm text-muted-foreground shrink-0",children:[(0,d.jsx)(i.A,{className:"size-4"}),(0,d.jsxs)("span",{children:[b("proposalFilter.label"),":"]})]}),(0,d.jsxs)(p.AM,{open:t,onOpenChange:u,children:[(0,d.jsx)(p.Wv,{asChild:!0,children:(0,d.jsxs)(n.$,{variant:"outline",size:"sm",role:"combobox","aria-expanded":t,className:(0,m.cn)("justify-between gap-1 min-w-[120px] max-w-[200px] md:min-w-[160px] md:max-w-none",C&&"border-primary bg-[#FFF8F4] dark:bg-[#2a2016]"),children:[(0,d.jsx)("span",{className:"truncate",children:C?b("proposalFilter.filtered",{filtered:x.size,total:v.length}):b("proposalFilter.allProposals")}),(0,d.jsx)(j.A,{className:"size-4 shrink-0 opacity-50"})]})}),(0,d.jsx)(p.hl,{className:"w-[300px] p-0",align:"start",children:(0,d.jsxs)(q.uB,{children:[(0,d.jsx)(q.G7,{placeholder:b("proposalFilter.search")}),(0,d.jsxs)(q.oI,{children:[(0,d.jsx)(q.xL,{children:b("proposalFilter.noResults")}),(0,d.jsx)(q.L$,{children:v.map(a=>{let c=x.has(a.uuid);return(0,d.jsxs)(q.h_,{value:a.title,onSelect:()=>A(a.uuid),className:"flex items-center justify-between",children:[(0,d.jsxs)("div",{className:"flex items-center gap-2 min-w-0",children:[(0,d.jsx)("div",{className:(0,m.cn)("flex size-4 shrink-0 items-center justify-center rounded-sm border",c?"border-primary bg-primary text-white":"border-muted-foreground/30"),children:c&&(0,d.jsx)(k.A,{className:"size-3"})}),(0,d.jsx)("span",{className:"truncate",children:a.title})]}),(0,d.jsx)(o.E,{variant:"secondary",className:"ml-2 shrink-0",children:b("proposalFilter.taskCount",{count:a.taskCount})})]},a.uuid)})})]})]})})]}),C&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)("div",{className:"flex flex-wrap gap-1 max-w-full",children:v.filter(a=>x.has(a.uuid)).map(a=>(0,d.jsxs)(o.E,{variant:"outline",className:"gap-1 border-primary bg-[#FFF8F4] dark:bg-[#2a2016] text-primary",children:[a.title,(0,d.jsx)("button",{type:"button",className:"ml-0.5 rounded-full hover:bg-primary/20",onClick:()=>A(a.uuid),children:(0,d.jsx)(l.A,{className:"size-3"})})]},a.uuid))}),(0,d.jsx)(n.$,{variant:"ghost",size:"xs",onClick:B,className:"text-muted-foreground",children:b("proposalFilter.clear")})]})]})}},45519:(a,b,c)=>{"use strict";c.d(b,{A:()=>d});let d=(0,c(56556).A)("layout-grid",[["rect",{width:"7",height:"7",x:"3",y:"3",rx:"1",key:"1g98yp"}],["rect",{width:"7",height:"7",x:"14",y:"3",rx:"1",key:"6d4xhi"}],["rect",{width:"7",height:"7",x:"14",y:"14",rx:"1",key:"nxv5o0"}],["rect",{width:"7",height:"7",x:"3",y:"14",rx:"1",key:"1bb6yr"}]])},63748:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{X:()=>n});var e=c(10023),f=c(66530),g=c(26555),h=c(82858),i=c(29662),j=c(71165),k=c(61413),l=c(29334),m=a([i,j,k]);async function n({projectUuid:a,initialSelectedTaskUuid:b}){let c=await (0,i.d)();c||(0,f.redirect)("/login");let d=await (0,g.A)();await (0,k.Yi)(c.companyUuid,a)||(0,f.redirect)("/projects");let{tasks:m}=await (0,j.Vk)({companyUuid:c.companyUuid,projectUuid:a,skip:0,take:1e3}),n=m.reduce((a,b)=>a+(b.storyPoints||0),0);return(0,e.jsxs)("div",{className:"flex h-full flex-col p-4 md:p-8",children:[(0,e.jsx)("div",{className:"mb-6 flex items-center justify-between",children:(0,e.jsxs)("div",{children:[(0,e.jsx)("h1",{className:"text-2xl font-semibold text-foreground",children:d("tasks.title")}),(0,e.jsxs)("div",{className:"mt-1 flex items-center gap-4",children:[(0,e.jsx)("p",{className:"text-sm text-muted-foreground",children:d("tasks.subtitle")}),n>0&&(0,e.jsxs)("div",{className:"flex items-center gap-1.5 rounded-full bg-secondary px-3 py-1",children:[(0,e.jsx)(h.A,{className:"h-3.5 w-3.5 text-primary"}),(0,e.jsxs)("span",{className:"text-xs font-medium text-muted-foreground",children:[(0,e.jsx)("span",{className:"text-foreground",children:n.toFixed(1)})," ",d("tasks.agentHours")]})]})]})]})}),(0,e.jsx)(l.TaskViewToggle,{projectUuid:a,initialTasks:m,currentUserUuid:c.actorUuid,initialSelectedTaskUuid:b})]})}[i,j,k]=m.then?(await m)():m,d()}catch(a){d(a)}})},76565:(a,b,c)=>{var d={"./en.json":[87368,7368],"./ja.json":[49378,9378],"./ko.json":[35245,5245],"./zh.json":[72961,2961]};function e(a){if(!c.o(d,a))return Promise.resolve().then(()=>{var b=Error("Cannot find module '"+a+"'");throw b.code="MODULE_NOT_FOUND",b});var b=d[a],e=b[0];return c.e(b[1]).then(()=>c.t(e,19))}e.keys=()=>Object.keys(d),e.id=76565,a.exports=e},82858:(a,b,c)=>{"use strict";c.d(b,{A:()=>d});let d=(0,c(91533).A)("clock",[["path",{d:"M12 6v6l4 2",key:"mmk7yg"}],["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}]])},86255:(a,b,c)=>{"use strict";c.d(b,{i:()=>q});var d=c(10837),e=c(21968),f=c(47797);c(63410);var g=c(9222),h=c(1007),i=c(86460),j=c(10694),k=c(42424),l=c(74798),m=c(60265),n=c(42377);let o=(0,n.createServerReference)("40849562ebbe7e000608c51fee043961cea91b6979",n.callServer,void 0,n.findSourceMapURL,"getProjectDependenciesAction");var p=c(36039);function q({projectUuid:a,onTaskSelect:b,refreshKey:c}){let n=(0,g.c)(),q=(0,l.W)(),r=(0,h.useSearchParams)(),[s,t,u]=(0,f.ck)([]),[v,w,x]=(0,f.fM)([]),[y,z]=(0,e.useState)(!0),[A,B]=(0,e.useState)(null),C=(0,e.useMemo)(()=>{let a=r.get("proposalUuids");if(!a)return null;let b=a.split(",").filter(Boolean);return b.length>0?new Set(b):null},[r]),D=(0,e.useCallback)(async()=>{z(!0);let b=await o(a),c=b.nodes,d=b.edges;if(C){let a=new Set((c=b.nodes.filter(a=>null!==a.proposalUuid&&C.has(a.proposalUuid))).map(a=>a.uuid));d=b.edges.filter(b=>a.has(b.from)&&a.has(b.to))}let e=c.map(a=>({id:a.uuid,type:"taskNode",position:{x:0,y:0},data:{title:a.title,status:a.status,priority:a.priority,proposalUuid:a.proposalUuid}})),f=d.map((a,b)=>({id:`e-${b}`,source:a.to,target:a.from,...m.qK})),{nodes:g,edges:h}=(0,m.nF)(e,f);t(g),w(h),z(!1)},[a,C,t,w]),E=(0,e.useCallback)(async a=>{if(!a.source||!a.target)return;B(null);let b=a.target,c=a.source,d=await (0,p.w)(b,c);if(!d.success)return void B(d.error||n("tasks.failedToAddDep"));await D()},[D]),F=(0,e.useCallback)((a,c)=>{b(c.id)},[b]);return y?(0,d.jsx)("div",{className:"flex flex-1 items-center justify-center",children:(0,d.jsx)(i.A,{className:"h-6 w-6 animate-spin text-muted-foreground"})}):0===s.length?(0,d.jsx)("div",{className:"flex flex-1 items-center justify-center text-sm text-muted-foreground",children:n("tasks.noTasksToDisplay")}):(0,d.jsxs)("div",{className:"flex-1 rounded-xl border border-border bg-[#FAFAF8] dark:bg-[#1e1e1c] relative",children:[A&&(0,d.jsxs)("div",{className:"absolute top-3 left-1/2 -translate-x-1/2 z-10 rounded-lg bg-red-50 dark:bg-[#331619] border border-red-200 dark:border-[#5a2a2e] px-4 py-2 text-xs text-red-700 dark:text-[#F08078] shadow-sm",children:[A,(0,d.jsx)(k.$,{variant:"ghost",size:"icon",className:"ml-2 h-5 w-5 font-medium hover:text-red-900 dark:hover:text-[#F0A0A0]",onClick:()=>B(null),children:(0,d.jsx)(j.A,{className:"h-3 w-3"})})]}),(0,d.jsxs)(f.Gc,{colorMode:q?"dark":"light",nodes:s,edges:v,onNodesChange:u,onEdgesChange:x,onConnect:E,onNodeClick:F,nodeTypes:m.c_,fitView:!0,fitViewOptions:{padding:.2},minZoom:.3,maxZoom:1.5,proOptions:{hideAttribution:!0},zoomOnScroll:!0,zoomOnPinch:!0,panOnDrag:!0,children:[(0,d.jsx)(f.VS,{color:q?"#40392f":"#E5E0D8",gap:20}),(0,d.jsx)(f.H2,{className:"[&>button]:border-border [&>button]:bg-card [&>button]:text-foreground [&>button:hover]:bg-background"})]})]})}},90436:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{TaskViewToggle:()=>x});var e=c(10837),f=c(21968),g=c(1007),h=c(9222),i=c(32552),j=c(45519),k=c(33407),l=c(92900),m=c(42424),n=c(49599),o=c(35198),p=c(96013),q=c(98625),r=c(39268),s=c(5514),t=c(86255),u=c(86104),v=c(31009),w=a([s,u]);[s,u]=w.then?(await w)():w;let y={open:"bg-[#FFF3E0] dark:bg-[#3a2a12] text-[#E65100] dark:text-[#F0A050]",assigned:"bg-[#E3F2FD] dark:bg-[#13253a] text-[#1976D2] dark:text-[#5AA9F0]",in_progress:"bg-[#E8F5E9] dark:bg-[#14281a] text-[#5A9E6F] dark:text-[#6FD19A]",to_verify:"bg-[#F3E5F5] dark:bg-[#281630] text-[#7B1FA2] dark:text-[#C98FE0]",done:"bg-[#E0F2F1] dark:bg-[#12292a] text-[#00796B] dark:text-[#4FD1C0]",closed:"bg-[#F5F5F5] dark:bg-[#1e1e20] text-[#9A9A9A]"},z={open:"open",assigned:"assigned",in_progress:"inProgress",to_verify:"toVerify",done:"done",closed:"closed"},A=[{id:"all",labelKey:"allStatuses",statuses:[]},{id:"todo",labelKey:"todo",statuses:["open","assigned"]},{id:"in_progress",labelKey:"inProgress",statuses:["in_progress"]},{id:"to_verify",labelKey:"toVerify",statuses:["to_verify"]},{id:"done",labelKey:"done",statuses:["done","closed"]}],B={high:"bg-red-100 text-red-700",medium:"bg-yellow-100 text-yellow-700",low:"bg-blue-100 text-blue-700"};function x({projectUuid:a,initialTasks:b,currentUserUuid:c,initialSelectedTaskUuid:d}){let w=(0,h.c)(),x=(0,p.a)(),C=(0,g.useSearchParams)(),[D,E]=(0,f.useState)("kanban"),F=`/projects/${a}/tasks`,{selectedId:G,openPanel:H,closePanel:I}=(0,q.T)(F,d),J=(0,f.useMemo)(()=>{let a=C.get("proposalUuids");if(!a)return null;let b=a.split(",").filter(Boolean);return b.length>0?new Set(b):null},[C]),[K,L]=(0,f.useState)(!1),[M,N]=(0,f.useState)(0),[O,P]=(0,f.useState)("all"),Q=(0,f.useMemo)(()=>G?b.find(a=>a.uuid===G)??null:null,[G,b]),R=(0,f.useCallback)(()=>{N(a=>a+1)},[]),S=(0,f.useMemo)(()=>J?b.filter(a=>a.proposalUuid&&J.has(a.proposalUuid)):b,[b,J]),T=(0,f.useMemo)(()=>{let a=A.find(a=>a.id===O);return a&&0!==a.statuses.length?S.filter(b=>a.statuses.includes(b.status)):S},[S,O]);return(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)("div",{className:"mb-4 overflow-x-auto",children:(0,e.jsx)(r.T,{projectUuid:a})}),(0,e.jsxs)("div",{className:"mb-4 flex items-center justify-between",children:[(0,e.jsxs)("div",{className:"flex items-center gap-1 rounded-lg bg-secondary p-1 w-fit",children:[x&&(0,e.jsxs)(m.$,{variant:"ghost",size:"sm",className:`h-8 gap-1.5 rounded-md px-3 text-xs ${"list"===D?"bg-card text-foreground shadow-sm":"text-muted-foreground hover:text-foreground"}`,onClick:()=>E("list"),children:[(0,e.jsx)(i.A,{className:"h-3.5 w-3.5"}),w("tasks.listView")]}),!x&&(0,e.jsxs)(m.$,{variant:"ghost",size:"sm",className:`h-8 gap-1.5 rounded-md px-3 text-xs ${"kanban"===D?"bg-card text-foreground shadow-sm":"text-muted-foreground hover:text-foreground"}`,onClick:()=>E("kanban"),children:[(0,e.jsx)(j.A,{className:"h-3.5 w-3.5"}),w("tasks.kanbanView")]}),(0,e.jsxs)(m.$,{variant:"ghost",size:"sm",className:`h-8 gap-1.5 rounded-md px-3 text-xs ${"dag"===D?"bg-card text-foreground shadow-sm":"text-muted-foreground hover:text-foreground"}`,onClick:()=>E("dag"),children:[(0,e.jsx)(k.A,{className:"h-3.5 w-3.5"}),w("tasks.dagView")]})]}),(0,e.jsxs)(m.$,{className:"bg-primary hover:bg-[#B56A42] text-white",onClick:()=>{I(),L(!0)},children:[(0,e.jsx)(l.A,{className:"mr-2 h-4 w-4"}),w("tasks.newTask")]})]}),"list"===D?(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)("div",{className:"mb-4 flex gap-1 overflow-x-auto border-b border-border pb-2",children:A.map(a=>{let b=0===a.statuses.length?S.length:S.filter(b=>a.statuses.includes(b.status)).length;return(0,e.jsxs)(m.$,{variant:"ghost",size:"sm",className:`h-8 shrink-0 rounded-md px-3 text-xs ${O===a.id?"bg-secondary text-foreground font-medium":"text-muted-foreground hover:text-foreground"}`,onClick:()=>P(a.id),children:["all"===a.id?w(`tasks.${a.labelKey}`):w(`status.${a.labelKey}`),(0,e.jsx)("span",{className:"ml-1.5 rounded-full bg-card px-1.5 py-0.5 text-[10px] font-medium text-muted-foreground",children:b})]},a.id)})}),(0,e.jsx)("div",{className:"flex-1 space-y-2 overflow-y-auto",children:0===T.length?(0,e.jsx)(v.P.div,{initial:{opacity:0,scale:.98},animate:{opacity:1,scale:1},transition:{duration:.2,ease:[0,0,.2,1]},className:"flex h-24 items-center justify-center rounded-lg border-2 border-dashed border-border text-sm text-[#9A9A9A]",children:w("tasks.noTasks")}):T.map(a=>(0,e.jsxs)(o.Zp,{className:"cursor-pointer border-border bg-card p-4 transition-all hover:border-primary hover:shadow-sm",onClick:()=>H(a.uuid),children:[(0,e.jsxs)("div",{className:"flex items-start justify-between gap-3",children:[(0,e.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,e.jsx)("h4",{className:"font-medium text-foreground truncate",children:a.title}),a.description&&(0,e.jsx)("p",{className:"mt-1 line-clamp-1 text-sm text-muted-foreground",children:a.description})]}),(0,e.jsxs)("div",{className:"flex shrink-0 items-center gap-2",children:[null!=a.storyPoints&&a.storyPoints>0&&(0,e.jsxs)("span",{className:"rounded bg-[#FFF3E0] dark:bg-[#3a2a12] px-2 py-0.5 text-xs font-medium text-[#E65100] dark:text-[#F0A050]",children:[a.storyPoints,"h"]}),(0,e.jsx)(n.E,{className:B[a.priority]||"",children:w(`priority.${a.priority}`)}),(0,e.jsx)(n.E,{className:y[a.status]||"",children:w(`status.${z[a.status]||a.status}`)})]})]}),a.assignee&&(0,e.jsx)("div",{className:"mt-2 flex items-center gap-1.5 text-xs text-[#9A9A9A]",children:(0,e.jsx)("span",{className:"truncate",children:a.assignee.name})})]},a.uuid))}),Q&&(0,e.jsx)(u.v,{task:Q,projectUuid:a,currentUserUuid:c,onClose:I,onDependencyChange:R})]}):"kanban"===D?(0,e.jsx)(s.y,{projectUuid:a,initialTasks:S,currentUserUuid:c,selectedTaskUuid:G,onTaskSelect:H,onPanelClose:I,proposalUuidFilter:J}):(0,e.jsxs)("div",{className:"flex flex-1 flex-col",children:[(0,e.jsx)(t.i,{projectUuid:a,onTaskSelect:a=>H(a),refreshKey:M}),Q&&(0,e.jsx)(u.v,{task:Q,projectUuid:a,currentUserUuid:c,onClose:I,onDependencyChange:R})]}),K&&!Q&&(0,e.jsx)(u.v,{task:null,projectUuid:a,currentUserUuid:c,onClose:()=>L(!1),onCreated:()=>L(!1)})]})}d()}catch(a){d(a)}})},91533:(a,b,c)=>{"use strict";c.d(b,{A:()=>i});var d=c(73426);let e=(...a)=>a.filter((a,b,c)=>!!a&&""!==a.trim()&&c.indexOf(a)===b).join(" ").trim(),f=a=>{let b=a.replace(/^([A-Z])|[\s-_]+(\w)/g,(a,b,c)=>c?c.toUpperCase():b.toLowerCase());return b.charAt(0).toUpperCase()+b.slice(1)};var g={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};let h=(0,d.forwardRef)(({color:a="currentColor",size:b=24,strokeWidth:c=2,absoluteStrokeWidth:f,className:h="",children:i,iconNode:j,...k},l)=>(0,d.createElement)("svg",{ref:l,...g,width:b,height:b,stroke:a,strokeWidth:f?24*Number(c)/Number(b):c,className:e("lucide",h),...!i&&!(a=>{for(let b in a)if(b.startsWith("aria-")||"role"===b||"title"===b)return!0;return!1})(k)&&{"aria-hidden":"true"},...k},[...j.map(([a,b])=>(0,d.createElement)(a,b)),...Array.isArray(i)?i:[i]])),i=(a,b)=>{let c=(0,d.forwardRef)(({className:c,...g},i)=>(0,d.createElement)(h,{ref:i,iconNode:b,className:e(`lucide-${f(a).replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase()}`,`lucide-${a}`,c),...g}));return c.displayName=f(a),c}},96013:(a,b,c)=>{"use strict";c.d(b,{a:()=>e});var d=c(21968);function e(){let[a,b]=(0,d.useState)(!1);return a}}};
|