@chorus-aidlc/chorus 0.9.2 → 0.9.4
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 +321 -302
- package/.next/standalone/.next/app-path-routes-manifest.json +31 -31
- package/.next/standalone/.next/build-manifest.json +5 -5
- package/.next/standalone/.next/prerender-manifest.json +24 -24
- 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_client-reference-manifest.js +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 +1 -1
- 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 +1 -1
- 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]/ideas/[ideaUuid]/page.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/ideas/[ideaUuid]/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/ideas/[ideaUuid]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/ideas/page.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/ideas/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/ideas/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_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/settings/page.js +3 -3
- package/.next/standalone/.next/server/app/(dashboard)/settings/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/settings/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/_not-found.html +1 -1
- package/.next/standalone/.next/server/app/_not-found.rsc +2 -2
- package/.next/standalone/.next/server/app/admin/companies/[uuid]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/admin/companies/new/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/admin/companies/new.html +1 -1
- package/.next/standalone/.next/server/app/admin/companies/new.rsc +2 -2
- package/.next/standalone/.next/server/app/admin/companies/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/admin/companies.html +1 -1
- package/.next/standalone/.next/server/app/admin/companies.rsc +2 -2
- package/.next/standalone/.next/server/app/admin/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/admin.html +1 -1
- package/.next/standalone/.next/server/app/admin.rsc +2 -2
- package/.next/standalone/.next/server/app/api/admin/companies/[uuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/admin/companies/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/admin/login/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/admin/session/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/agents/[uuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/agents/[uuid]/sessions/route.js +1 -1
- package/.next/standalone/.next/server/app/api/agents/[uuid]/sessions/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/agents/[uuid]/sessions/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/agents/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/api-keys/[uuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/api-keys/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/callback/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/check-default/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/company-oidc/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/default-login/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/identify/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/me/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/refresh/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/session/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/sync-token/route_client-reference-manifest.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/documents/[uuid]/route_client-reference-manifest.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_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/health/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/claim/route.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/claim/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/claim/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/preview/route.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/preview/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/preview/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/route.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/release/route.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/release/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/release/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/route.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/mcp/route.js +3 -3
- package/.next/standalone/.next/server/app/api/mcp/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/mcp/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/me/assignments/route.js +1 -1
- package/.next/standalone/.next/server/app/api/me/assignments/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/me/assignments/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/mentionables/route_client-reference-manifest.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_client-reference-manifest.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_client-reference-manifest.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_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/projects/[uuid]/activity/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/available/route.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/available/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/available/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/documents/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/group/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/route.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/tracker/route.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/tracker/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/tracker/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/[proposalUuid]/validate/route.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/[proposalUuid]/validate/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/route.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/summary/route.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/summary/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/stats/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/dependencies/route.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/dependencies/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/dependencies/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/route.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/proposals/[uuid]/approve/route.js +1 -1
- package/.next/standalone/.next/server/app/api/proposals/[uuid]/approve/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/proposals/[uuid]/close/route.js +1 -1
- package/.next/standalone/.next/server/app/api/proposals/[uuid]/close/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/proposals/[uuid]/reject/route.js +1 -1
- package/.next/standalone/.next/server/app/api/proposals/[uuid]/reject/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/proposals/[uuid]/revoke/route.js +1 -1
- package/.next/standalone/.next/server/app/api/proposals/[uuid]/revoke/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/proposals/[uuid]/route.js +1 -1
- package/.next/standalone/.next/server/app/api/proposals/[uuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/search/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/sessions/[uuid]/route.js +1 -1
- package/.next/standalone/.next/server/app/api/sessions/[uuid]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/sessions/[uuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/claim/route.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/claim/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/claim/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/[dependsOnUuid]/route.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/[dependsOnUuid]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/[dependsOnUuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/route.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/release/route.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/release/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/release/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/route.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/sessions/route.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/sessions/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/sessions/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/index.html +1 -1
- package/.next/standalone/.next/server/app/index.rsc +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 +1 -1
- 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 +1 -1
- 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 +1 -1
- package/.next/standalone/.next/server/app/login/pick-workspace.rsc +2 -2
- package/.next/standalone/.next/server/app/login/silent-refresh/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/login/silent-refresh.html +1 -1
- package/.next/standalone/.next/server/app/login/silent-refresh.rsc +2 -2
- package/.next/standalone/.next/server/app/login.html +1 -1
- package/.next/standalone/.next/server/app/login.rsc +2 -2
- package/.next/standalone/.next/server/app/onboarding/page.js +2 -32
- package/.next/standalone/.next/server/app/onboarding/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/onboarding/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/onboarding.html +1 -1
- package/.next/standalone/.next/server/app/onboarding.rsc +3 -3
- package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/projects.html +1 -1
- package/.next/standalone/.next/server/app/projects.rsc +3 -3
- package/.next/standalone/.next/server/app/settings.html +1 -1
- package/.next/standalone/.next/server/app/settings.rsc +4 -4
- package/.next/standalone/.next/server/app-paths-manifest.json +31 -31
- package/.next/standalone/.next/server/chunks/1165.js +1 -1
- package/.next/standalone/.next/server/chunks/1615.js +31 -0
- package/.next/standalone/.next/server/chunks/1871.js +1 -1
- package/.next/standalone/.next/server/chunks/2618.js +1 -1
- package/.next/standalone/.next/server/chunks/2961.js +1 -1
- package/.next/standalone/.next/server/chunks/2990.js +1 -1
- package/.next/standalone/.next/server/chunks/5491.js +1 -1
- package/.next/standalone/.next/server/chunks/5561.js +7 -0
- package/.next/standalone/.next/server/chunks/6113.js +1 -1
- package/.next/standalone/.next/server/chunks/{6320.js → 7063.js} +1 -1
- package/.next/standalone/.next/server/chunks/7228.js +2 -2
- package/.next/standalone/.next/server/chunks/7368.js +1 -1
- package/.next/standalone/.next/server/chunks/7578.js +2 -2
- package/.next/standalone/.next/server/chunks/896.js +1 -0
- package/.next/standalone/.next/server/chunks/920.js +1 -1
- package/.next/standalone/.next/server/chunks/937.js +1 -1
- package/.next/standalone/.next/server/chunks/9508.js +2 -2
- 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 +1 -1
- package/.next/standalone/.next/server/pages/500.html +1 -1
- package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/server-reference-manifest.json +1 -1
- package/.next/standalone/.next/static/chunks/16984-8ab5580b8e63a200.js +1 -0
- package/.next/standalone/.next/static/chunks/19898-2a3d83a3996794cd.js +1 -0
- package/.next/standalone/.next/static/chunks/20051-d9233fd4578d66cc.js +1 -0
- package/.next/standalone/.next/static/chunks/35486-592daa5c9fdf701d.js +1 -0
- package/.next/standalone/.next/static/chunks/{4860.60152a625f2a714f.js → 4860.1bebb2a898b170f6.js} +1 -1
- package/.next/standalone/.next/static/chunks/52206-6048525f57a21502.js +1 -0
- package/.next/standalone/.next/static/chunks/55469-ed5ff019ff71ef59.js +1 -0
- package/.next/standalone/.next/static/chunks/59296-4fa84fe82e2c7789.js +1 -0
- package/.next/standalone/.next/static/chunks/66205-8d7eae6a0f0a032d.js +1 -0
- package/.next/standalone/.next/static/chunks/{86944-95f8c67fb7a51911.js → 70093-0ff6fd59445b5cb9.js} +1 -1
- package/.next/standalone/.next/static/chunks/94655-1c75e0590a66215e.js +1 -0
- package/.next/standalone/.next/static/chunks/95627-8d9f6d2d88f7a641.js +1 -0
- package/.next/standalone/.next/static/chunks/{99373.4d93aaaf56fe7819.js → 99373.13c8ac5da1ddabe9.js} +1 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/{layout-dd7eb66bb4ffd252.js → layout-b55a8d6d9bd27276.js} +1 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/dashboard/{page-6d92b9867caf0fe1.js → page-fd10bca891f0f73a.js} +1 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/{page-f8f17f58cf779d37.js → page-2e000a7010d1e9ea.js} +1 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/page-75e42d130404ca2b.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/ideas/[ideaUuid]/page-6a38c21b164cdc07.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/ideas/page-48c840cb3011bf97.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page-7ec535fac7bbc75d.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/page-8f91ed174c14d5f0.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page-f6814f25bbacdbea.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/tasks/page-92e8980da0d98d48.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/settings/{page-db79d84fa8ca8cbf.js → page-ab87cbb18d0ee538.js} +1 -1
- package/.next/standalone/.next/static/chunks/app/onboarding/page-922a196db6eb2385.js +1 -0
- package/.next/standalone/.next/static/chunks/{webpack-8e0df5e10bc6b98f.js → webpack-4a8c75a0d40c2106.js} +1 -1
- package/.next/standalone/.next/static/css/bfe962487ee66da7.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/skills/brainstorm/SKILL.md +7 -7
- package/.next/standalone/public/chorus-plugin/skills/chorus/SKILL.md +1 -1
- package/.next/standalone/public/chorus-plugin/skills/develop/SKILL.md +1 -1
- package/.next/standalone/public/chorus-plugin/skills/idea/SKILL.md +32 -33
- package/.next/standalone/public/chorus-plugin/skills/openspec-aware/SKILL.md +1 -1
- package/.next/standalone/public/chorus-plugin/skills/proposal/SKILL.md +13 -4
- package/.next/standalone/public/chorus-plugin/skills/quick-dev/SKILL.md +9 -4
- package/.next/standalone/public/chorus-plugin/skills/review/SKILL.md +1 -1
- package/.next/standalone/public/chorus-plugin/skills/yolo/SKILL.md +9 -6
- package/.next/standalone/public/install-codex.sh +200 -90
- package/.next/standalone/public/skill/brainstorm-chorus/SKILL.md +7 -7
- package/.next/standalone/public/skill/chorus/SKILL.md +55 -3
- package/.next/standalone/public/skill/develop-chorus/SKILL.md +2 -2
- package/.next/standalone/public/skill/idea-chorus/SKILL.md +32 -33
- package/.next/standalone/public/skill/package.json +21 -5
- package/.next/standalone/public/skill/proposal-chorus/SKILL.md +13 -4
- package/.next/standalone/public/skill/proposal-reviewer-chorus/SKILL.md +198 -0
- package/.next/standalone/public/skill/quick-dev-chorus/SKILL.md +9 -4
- package/.next/standalone/public/skill/review-chorus/SKILL.md +13 -3
- package/.next/standalone/public/skill/task-reviewer-chorus/SKILL.md +219 -0
- package/.next/standalone/public/skill/yolo-chorus/SKILL.md +531 -0
- package/.next/standalone/public/test-install-codex.sh +4 -0
- package/package.json +1 -1
- package/prisma/migrations/20260604130604_add_elaboration_round_is_appended/migration.sql +2 -0
- package/prisma/schema.prisma +2 -1
- package/.next/standalone/.next/server/chunks/1002.js +0 -1
- package/.next/standalone/.next/server/chunks/1854.js +0 -7
- package/.next/standalone/.next/server/chunks/6878.js +0 -1
- package/.next/standalone/.next/static/chunks/19898-7e07c69b635e3662.js +0 -1
- package/.next/standalone/.next/static/chunks/29660-edf78f7a4c65f416.js +0 -1
- package/.next/standalone/.next/static/chunks/34775-387b9a9967a35ccb.js +0 -1
- package/.next/standalone/.next/static/chunks/35486-1978488574385a45.js +0 -1
- package/.next/standalone/.next/static/chunks/4457-b86052b2e954e357.js +0 -1
- package/.next/standalone/.next/static/chunks/52206-51a89715ca643e44.js +0 -1
- package/.next/standalone/.next/static/chunks/53298-82b9c818cd70686d.js +0 -1
- package/.next/standalone/.next/static/chunks/65642-e75efce9967747bc.js +0 -1
- package/.next/standalone/.next/static/chunks/75444-976ac95fd66e7988.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/page-83e2e42b27132b41.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/ideas/[ideaUuid]/page-55148db4b28ee5f5.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/ideas/page-556c181809c9e4f6.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page-656797940b35b23c.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/page-af88aeaedc3f4ae5.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page-6524ab00e6cdf59a.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/tasks/page-7b0bb5f037cd320b.js +0 -1
- package/.next/standalone/.next/static/chunks/app/onboarding/page-7a00689ba561c111.js +0 -1
- package/.next/standalone/.next/static/css/ea3f196c7951f8d6.css +0 -1
- /package/.next/standalone/.next/static/{-kClYg0a7zvFcgkw_LnG7 → YJZurE1onX9K-RDNIplc5}/_buildManifest.js +0 -0
- /package/.next/standalone/.next/static/{-kClYg0a7zvFcgkw_LnG7 → YJZurE1onX9K-RDNIplc5}/_ssgManifest.js +0 -0
|
@@ -4,7 +4,7 @@ description: Full-auto AI-DLC pipeline — from prompt to done. Automates the en
|
|
|
4
4
|
license: AGPL-3.0
|
|
5
5
|
metadata:
|
|
6
6
|
author: chorus
|
|
7
|
-
version: "0.9.
|
|
7
|
+
version: "0.9.4"
|
|
8
8
|
category: project-management
|
|
9
9
|
mcp_server: chorus
|
|
10
10
|
---
|
|
@@ -138,6 +138,8 @@ chorus_claim_idea({ ideaUuid: "<idea-uuid>" })
|
|
|
138
138
|
|
|
139
139
|
In /yolo mode, the agent generates elaboration questions and answers them itself -- no `AskUserQuestion` calls. This preserves an audit trail without interrupting the user.
|
|
140
140
|
|
|
141
|
+
> **Self-elaboration is still a loop.** If answering your own questions surfaces a **new question, contradiction, or gap**, loop back to `chorus_pm_start_elaboration` for another self-answered round before resolving — don't force a resolve over unresolved ambiguity. There is no human gate in YOLO, so the loop exits on **your** judgment that nothing material is left open (round cap 10). Steps 1–2 are one round; repeat them as needed, then resolve once in Step 3.
|
|
142
|
+
|
|
141
143
|
1. **Generate and submit questions:**
|
|
142
144
|
```
|
|
143
145
|
chorus_pm_start_elaboration({
|
|
@@ -170,15 +172,16 @@ In /yolo mode, the agent generates elaboration questions and answers them itself
|
|
|
170
172
|
})
|
|
171
173
|
```
|
|
172
174
|
|
|
173
|
-
3. **
|
|
175
|
+
3. **Resolve** — in YOLO mode the agent resolves elaboration **autonomously, with no human-confirmation gate** (the human-confirmation requirement that applies to the interactive `/idea` flow is explicitly waived under `/yolo` automation):
|
|
176
|
+
|
|
174
177
|
```
|
|
175
178
|
chorus_pm_validate_elaboration({
|
|
176
|
-
ideaUuid: "<idea-uuid>"
|
|
177
|
-
roundUuid: "<round-uuid>",
|
|
178
|
-
issues: []
|
|
179
|
+
ideaUuid: "<idea-uuid>"
|
|
179
180
|
})
|
|
180
181
|
```
|
|
181
182
|
|
|
183
|
+
> `chorus_pm_validate_elaboration` requires `idea:admin`. `/yolo` already mandates an Admin-preset key in Prerequisites, so this is satisfied. To open another self-elaboration round instead of resolving, just call `chorus_pm_start_elaboration` again.
|
|
184
|
+
|
|
182
185
|
#### Step 1.4: Create Proposal
|
|
183
186
|
|
|
184
187
|
1. **Detect OpenSpec mode.** Load the `openspec-aware` skill at `.claude/skills/openspec-aware/SKILL.md` and run its §1 detection contract. The result determines how the rest of this step authors documents:
|
|
@@ -224,7 +227,7 @@ In /yolo mode, the agent generates elaboration questions and answers them itself
|
|
|
224
227
|
})
|
|
225
228
|
```
|
|
226
229
|
|
|
227
|
-
3. **Add task drafts incrementally** (use returned `draftUuid` for dependency chaining):
|
|
230
|
+
3. **Add task drafts incrementally** (use returned `draftUuid` for dependency chaining). `acceptanceCriteriaItems` is **required** on every draft — at least one non-blank criterion, or the call is rejected:
|
|
228
231
|
```
|
|
229
232
|
# First task
|
|
230
233
|
result1 = chorus_pm_add_task_draft({
|
|
@@ -14,8 +14,8 @@
|
|
|
14
14
|
# [plugins."chorus@chorus-plugins"] enabled = true into ~/.codex/config.toml,
|
|
15
15
|
# so Codex auto-enables the plugin on first launch (falls back to one-click
|
|
16
16
|
# `/plugins → Install` if auto-install does not fire).
|
|
17
|
-
# 4.
|
|
18
|
-
#
|
|
17
|
+
# 4. Enables Codex lifecycle hooks. Chorus hook scripts are bundled in the
|
|
18
|
+
# plugin manifest and loaded by Codex after the plugin is installed/enabled.
|
|
19
19
|
|
|
20
20
|
set -euo pipefail
|
|
21
21
|
|
|
@@ -35,6 +35,158 @@ CONFIG_TOML="$CODEX_HOME/config.toml"
|
|
|
35
35
|
|
|
36
36
|
is_tty() { [ -t 0 ] && [ -t 1 ]; }
|
|
37
37
|
|
|
38
|
+
clean_legacy_chorus_hooks_json() {
|
|
39
|
+
local hooks_json="$1"
|
|
40
|
+
local tmp backup removed
|
|
41
|
+
|
|
42
|
+
tmp="$(mktemp "${TMPDIR:-/tmp}/chorus-hooks.XXXXXX")"
|
|
43
|
+
backup="${hooks_json}.chorus-legacy-bak"
|
|
44
|
+
cp "$hooks_json" "$backup"
|
|
45
|
+
|
|
46
|
+
if command -v node >/dev/null 2>&1; then
|
|
47
|
+
removed="$(node - "$hooks_json" "$tmp" <<'NODE'
|
|
48
|
+
const fs = require("fs");
|
|
49
|
+
const input = process.argv[2];
|
|
50
|
+
const output = process.argv[3];
|
|
51
|
+
let removed = 0;
|
|
52
|
+
|
|
53
|
+
function isLegacyCommand(value) {
|
|
54
|
+
return typeof value === "string" && value.indexOf("hooks/chorus/run-hook.sh") !== -1;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
function clean(value, parentKey) {
|
|
58
|
+
if (Array.isArray(value)) {
|
|
59
|
+
return value
|
|
60
|
+
.map((item) => clean(item, parentKey))
|
|
61
|
+
.filter((item) => item !== undefined);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
if (value && typeof value === "object") {
|
|
65
|
+
if (isLegacyCommand(value.command)) {
|
|
66
|
+
removed += 1;
|
|
67
|
+
return undefined;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
const hadHooksArray = Array.isArray(value.hooks);
|
|
71
|
+
const out = {};
|
|
72
|
+
for (const [key, child] of Object.entries(value)) {
|
|
73
|
+
const cleaned = clean(child, key);
|
|
74
|
+
if (cleaned === undefined) continue;
|
|
75
|
+
if (Array.isArray(cleaned) && cleaned.length === 0 && (key === "hooks" || parentKey === "hooks")) continue;
|
|
76
|
+
out[key] = cleaned;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
if (hadHooksArray && (!Array.isArray(out.hooks) || out.hooks.length === 0)) {
|
|
80
|
+
return undefined;
|
|
81
|
+
}
|
|
82
|
+
return out;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
return value;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
let data = JSON.parse(fs.readFileSync(input, "utf8"));
|
|
89
|
+
data = clean(data, "") || {};
|
|
90
|
+
if (data.hooks && typeof data.hooks === "object" && !Array.isArray(data.hooks)) {
|
|
91
|
+
for (const key of Object.keys(data.hooks)) {
|
|
92
|
+
if (Array.isArray(data.hooks[key]) && data.hooks[key].length === 0) {
|
|
93
|
+
delete data.hooks[key];
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
if (Object.keys(data.hooks).length === 0) {
|
|
97
|
+
delete data.hooks;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
fs.writeFileSync(output, JSON.stringify(data, null, 2) + "\n");
|
|
101
|
+
process.stdout.write(String(removed));
|
|
102
|
+
NODE
|
|
103
|
+
)" || {
|
|
104
|
+
rm -f "$tmp"
|
|
105
|
+
warn "Could not parse $hooks_json with node; leaving legacy hooks unchanged."
|
|
106
|
+
warn "Backup created at $backup"
|
|
107
|
+
return 1
|
|
108
|
+
}
|
|
109
|
+
elif command -v python3 >/dev/null 2>&1; then
|
|
110
|
+
removed="$(python3 - "$hooks_json" "$tmp" <<'PY'
|
|
111
|
+
import json
|
|
112
|
+
import sys
|
|
113
|
+
|
|
114
|
+
input_path = sys.argv[1]
|
|
115
|
+
output_path = sys.argv[2]
|
|
116
|
+
removed = 0
|
|
117
|
+
|
|
118
|
+
def is_legacy_command(value):
|
|
119
|
+
return isinstance(value, str) and "hooks/chorus/run-hook.sh" in value
|
|
120
|
+
|
|
121
|
+
def clean(value, parent_key=""):
|
|
122
|
+
global removed
|
|
123
|
+
if isinstance(value, list):
|
|
124
|
+
return [item for item in (clean(child, parent_key) for child in value) if item is not None]
|
|
125
|
+
if isinstance(value, dict):
|
|
126
|
+
if is_legacy_command(value.get("command")):
|
|
127
|
+
removed += 1
|
|
128
|
+
return None
|
|
129
|
+
had_hooks_array = isinstance(value.get("hooks"), list)
|
|
130
|
+
out = {}
|
|
131
|
+
for key, child in value.items():
|
|
132
|
+
cleaned = clean(child, key)
|
|
133
|
+
if cleaned is None:
|
|
134
|
+
continue
|
|
135
|
+
if isinstance(cleaned, list) and not cleaned and (key == "hooks" or parent_key == "hooks"):
|
|
136
|
+
continue
|
|
137
|
+
out[key] = cleaned
|
|
138
|
+
if had_hooks_array and (not isinstance(out.get("hooks"), list) or not out["hooks"]):
|
|
139
|
+
return None
|
|
140
|
+
return out
|
|
141
|
+
return value
|
|
142
|
+
|
|
143
|
+
with open(input_path, "r", encoding="utf-8") as f:
|
|
144
|
+
data = json.load(f)
|
|
145
|
+
|
|
146
|
+
data = clean(data) or {}
|
|
147
|
+
if isinstance(data.get("hooks"), dict):
|
|
148
|
+
for key in list(data["hooks"].keys()):
|
|
149
|
+
if isinstance(data["hooks"][key], list) and not data["hooks"][key]:
|
|
150
|
+
del data["hooks"][key]
|
|
151
|
+
if not data["hooks"]:
|
|
152
|
+
del data["hooks"]
|
|
153
|
+
|
|
154
|
+
with open(output_path, "w", encoding="utf-8") as f:
|
|
155
|
+
json.dump(data, f, indent=2)
|
|
156
|
+
f.write("\n")
|
|
157
|
+
|
|
158
|
+
print(removed, end="")
|
|
159
|
+
PY
|
|
160
|
+
)" || {
|
|
161
|
+
rm -f "$tmp"
|
|
162
|
+
warn "Could not parse $hooks_json with python3; leaving legacy hooks unchanged."
|
|
163
|
+
warn "Backup created at $backup"
|
|
164
|
+
return 1
|
|
165
|
+
}
|
|
166
|
+
else
|
|
167
|
+
rm -f "$tmp"
|
|
168
|
+
warn "Cannot auto-clean $hooks_json because neither node nor python3 is available."
|
|
169
|
+
warn "Backup created at $backup"
|
|
170
|
+
return 1
|
|
171
|
+
fi
|
|
172
|
+
|
|
173
|
+
if [ "${removed:-0}" = "0" ]; then
|
|
174
|
+
rm -f "$tmp"
|
|
175
|
+
warn "No legacy Chorus hook entries were removed from $hooks_json."
|
|
176
|
+
warn "Backup created at $backup"
|
|
177
|
+
return 1
|
|
178
|
+
fi
|
|
179
|
+
|
|
180
|
+
if grep -q '[^[:space:]{}]' "$tmp" 2>/dev/null; then
|
|
181
|
+
mv "$tmp" "$hooks_json"
|
|
182
|
+
ok "Removed $removed legacy Chorus hook entr$( [ "$removed" = "1" ] && printf 'y' || printf 'ies' ) from $hooks_json"
|
|
183
|
+
else
|
|
184
|
+
rm -f "$tmp" "$hooks_json"
|
|
185
|
+
ok "Removed $removed legacy Chorus hook entr$( [ "$removed" = "1" ] && printf 'y' || printf 'ies' ) and deleted now-empty $hooks_json"
|
|
186
|
+
fi
|
|
187
|
+
ok "Backup saved at $backup"
|
|
188
|
+
}
|
|
189
|
+
|
|
38
190
|
# If piped through `curl | bash`, stdin is the script body. Re-open from /dev/tty
|
|
39
191
|
# so interactive prompts still work — but only if a real TTY is available AND we
|
|
40
192
|
# actually need to prompt for input. Both CHORUS_URL and CHORUS_API_KEY being set
|
|
@@ -181,104 +333,61 @@ TOML
|
|
|
181
333
|
|
|
182
334
|
ok "Wrote [mcp_servers.chorus] and [plugins.\"chorus@chorus-plugins\"] → ${CONFIG_TOML}"
|
|
183
335
|
|
|
184
|
-
# ---------- step 5:
|
|
185
|
-
hdr "5/5
|
|
336
|
+
# ---------- step 5: enable hooks ----------
|
|
337
|
+
hdr "5/5 Enabling Codex lifecycle hooks"
|
|
186
338
|
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
CODEX_HOME_RESOLVED="${CODEX_HOME:-$HOME/.codex}"
|
|
206
|
-
PLUGIN_ROOT="$CODEX_HOME_RESOLVED/plugins/cache/chorus-plugins/chorus"
|
|
207
|
-
if [ ! -d "$PLUGIN_ROOT" ]; then
|
|
208
|
-
echo '{}' ; exit 0
|
|
209
|
-
fi
|
|
210
|
-
VER="$(ls -1 "$PLUGIN_ROOT" 2>/dev/null | sort -V | tail -1)"
|
|
211
|
-
if [ -z "$VER" ]; then
|
|
212
|
-
echo '{}' ; exit 0
|
|
213
|
-
fi
|
|
214
|
-
SCRIPT="$PLUGIN_ROOT/$VER/hooks/$HOOK_NAME"
|
|
215
|
-
if [ ! -x "$SCRIPT" ]; then
|
|
216
|
-
if [ -f "$SCRIPT" ]; then
|
|
217
|
-
chmod +x "$SCRIPT" 2>/dev/null || true
|
|
339
|
+
HOOKS_JSON="$CODEX_HOME/hooks.json"
|
|
340
|
+
if [ -f "$HOOKS_JSON" ] && grep -q "hooks/chorus/run-hook.sh" "$HOOKS_JSON" 2>/dev/null; then
|
|
341
|
+
warn "Found legacy copied Chorus hook entries in $HOOKS_JSON."
|
|
342
|
+
warn "These can duplicate the plugin-bundled Chorus hooks now loaded by Codex."
|
|
343
|
+
warn "Legacy entries:"
|
|
344
|
+
grep -n "hooks/chorus/run-hook.sh" "$HOOKS_JSON" 2>/dev/null | sed 's/^/ /' >&2 || true
|
|
345
|
+
|
|
346
|
+
if [ -r /dev/tty ] && [ -w /dev/tty ]; then
|
|
347
|
+
printf " Clean legacy Chorus entries from %s now? [y/N]: " "$HOOKS_JSON" > /dev/tty
|
|
348
|
+
read -r clean_legacy_hooks_answer < /dev/tty
|
|
349
|
+
case "$clean_legacy_hooks_answer" in
|
|
350
|
+
y|Y|yes|YES|Yes)
|
|
351
|
+
clean_legacy_chorus_hooks_json "$HOOKS_JSON" || true
|
|
352
|
+
;;
|
|
353
|
+
*)
|
|
354
|
+
warn "Keeping legacy hooks unchanged. Use /hooks to disable them or remove matching entries manually to avoid duplicates."
|
|
355
|
+
;;
|
|
356
|
+
esac
|
|
218
357
|
else
|
|
219
|
-
|
|
358
|
+
warn "No interactive TTY available; keeping legacy hooks unchanged."
|
|
359
|
+
warn "Re-run this installer in a terminal to auto-clean them, or remove matching entries manually."
|
|
220
360
|
fi
|
|
221
361
|
fi
|
|
222
|
-
exec "$SCRIPT" "$@"
|
|
223
|
-
WRAP
|
|
224
|
-
chmod +x "$WRAPPER"
|
|
225
|
-
ok "Installed hook wrapper → $WRAPPER"
|
|
226
362
|
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
warn " Add Chorus hook entries manually (command = $WRAPPER on-session-start.sh | on-post-submit-proposal.sh | on-post-submit-for-verify.sh)."
|
|
231
|
-
else
|
|
232
|
-
cat > "$HOOKS_JSON" <<HJSON
|
|
233
|
-
{
|
|
234
|
-
"hooks": {
|
|
235
|
-
"SessionStart": [
|
|
236
|
-
{
|
|
237
|
-
"matcher": "startup|resume|clear",
|
|
238
|
-
"hooks": [
|
|
239
|
-
{ "type": "command", "command": "$WRAPPER on-session-start.sh", "timeout": 20, "statusMessage": "Chorus: checkin" }
|
|
240
|
-
]
|
|
241
|
-
}
|
|
242
|
-
],
|
|
243
|
-
"PostToolUse": [
|
|
244
|
-
{
|
|
245
|
-
"matcher": ".*chorus_pm_submit_proposal",
|
|
246
|
-
"hooks": [
|
|
247
|
-
{ "type": "command", "command": "$WRAPPER on-post-submit-proposal.sh", "timeout": 10 }
|
|
248
|
-
]
|
|
249
|
-
},
|
|
250
|
-
{
|
|
251
|
-
"matcher": ".*chorus_submit_for_verify",
|
|
252
|
-
"hooks": [
|
|
253
|
-
{ "type": "command", "command": "$WRAPPER on-post-submit-for-verify.sh", "timeout": 10 }
|
|
254
|
-
]
|
|
255
|
-
}
|
|
256
|
-
]
|
|
257
|
-
}
|
|
258
|
-
}
|
|
259
|
-
HJSON
|
|
260
|
-
ok "Wrote $HOOKS_JSON (routing through $WRAPPER)"
|
|
261
|
-
fi
|
|
262
|
-
|
|
263
|
-
# Enable the codex_hooks feature flag in config.toml (idempotent).
|
|
363
|
+
# Keep the current canonical feature key. `codex_hooks` is a deprecated alias;
|
|
364
|
+
# remove any old hook feature setting from [features] before writing `hooks = true`
|
|
365
|
+
# so reruns do not create duplicate TOML keys.
|
|
264
366
|
if grep -qE "^\[features\]" "$CONFIG_TOML"; then
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
367
|
+
tmp="$(mktemp "${TMPDIR:-/tmp}/chorus-features.XXXXXX")"
|
|
368
|
+
awk '
|
|
369
|
+
/^\[features\][[:space:]]*$/ {
|
|
370
|
+
in_features = 1
|
|
371
|
+
print
|
|
372
|
+
print "hooks = true"
|
|
373
|
+
next
|
|
374
|
+
}
|
|
375
|
+
/^\[/ {
|
|
376
|
+
in_features = 0
|
|
377
|
+
}
|
|
378
|
+
in_features && /^[[:space:]]*(hooks|codex_hooks)[[:space:]]*=/ {
|
|
379
|
+
next
|
|
380
|
+
}
|
|
381
|
+
{ print }
|
|
382
|
+
' "$CONFIG_TOML" > "$tmp" && mv "$tmp" "$CONFIG_TOML"
|
|
383
|
+
ok "Set [features] hooks = true"
|
|
275
384
|
else
|
|
276
385
|
cat >> "$CONFIG_TOML" <<'TFEAT'
|
|
277
386
|
|
|
278
387
|
[features]
|
|
279
|
-
|
|
388
|
+
hooks = true
|
|
280
389
|
TFEAT
|
|
281
|
-
ok "Appended [features]
|
|
390
|
+
ok "Appended [features] hooks = true"
|
|
282
391
|
fi
|
|
283
392
|
|
|
284
393
|
# ---------- epilogue ----------
|
|
@@ -296,7 +405,8 @@ so one manual click is the fallback path).
|
|
|
296
405
|
|
|
297
406
|
Verify anytime:
|
|
298
407
|
${BOLD}codex mcp list${RESET} # 'chorus' row, Auth = 'Bearer token'
|
|
299
|
-
${BOLD}codex features list${RESET} #
|
|
408
|
+
${BOLD}codex features list${RESET} # hooks + plugins both true
|
|
409
|
+
${BOLD}/hooks${RESET} # review/trust bundled Chorus hooks after launch
|
|
300
410
|
|
|
301
411
|
Then in Codex type ${BOLD}\$chorus${RESET} (or \$develop, \$review, \$proposal, …) to
|
|
302
412
|
activate a skill. To change your API key later, just re-run this installer.
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: brainstorm-chorus
|
|
3
|
-
description: Optional divergent-then-convergent dialogue for fuzzy ideas. Invoked from the idea skill as a prelude to structured elaboration; produces one ElaborationRound of decision-point Q&A and returns control. Never writes files, never posts comments, never
|
|
3
|
+
description: Optional divergent-then-convergent dialogue for fuzzy ideas. Invoked from the idea skill as a prelude to structured elaboration; produces one ElaborationRound of decision-point Q&A and returns control. Never writes files, never posts comments, never resolves elaboration.
|
|
4
4
|
license: AGPL-3.0
|
|
5
5
|
metadata:
|
|
6
6
|
author: chorus
|
|
7
|
-
version: "0.
|
|
7
|
+
version: "0.9.4"
|
|
8
8
|
category: project-management
|
|
9
9
|
mcp_server: chorus
|
|
10
10
|
---
|
|
@@ -13,7 +13,7 @@ metadata:
|
|
|
13
13
|
|
|
14
14
|
A divergent-then-convergent dialogue cadence for ideas whose direction is still being formed. Compresses the conversation into one `ElaborationRound` of decision-point Q&A — same shape as a structured elaboration round, but the questions, options and answers are synthesized at the end of the conversation rather than asked up front.
|
|
15
15
|
|
|
16
|
-
This skill is a **producer** of one elaboration round; the **scheduler** decision (
|
|
16
|
+
This skill is a **producer** of one elaboration round; the **scheduler** decision (resolve vs. follow-up) belongs to the calling idea skill.
|
|
17
17
|
|
|
18
18
|
---
|
|
19
19
|
|
|
@@ -32,7 +32,7 @@ Only as a sub-step of the idea skill, only after the user has explicitly opted i
|
|
|
32
32
|
5. **No files written.** Do NOT write any markdown, design doc, scratch file, or any other file to disk. The conversation produces an `ElaborationRound` and nothing else on disk.
|
|
33
33
|
6. **No comments posted.** Do NOT call `chorus_add_comment` from this skill. Comments belong to the idea skill or the user, not to the brainstorm step.
|
|
34
34
|
7. **No design-doc handoff.** Do NOT invoke `writing-plans`, `writing-skills`, or any skill whose purpose is to produce a design document. The brainstorm output is the synthesized round — there is no separate doc.
|
|
35
|
-
8. **No `validate_elaboration` call.** Do NOT call `chorus_pm_validate_elaboration` from this skill. Whether to
|
|
35
|
+
8. **No `validate_elaboration` call.** Do NOT call `chorus_pm_validate_elaboration` from this skill. Whether to resolve the elaboration or open a follow-up round (`chorus_pm_start_elaboration` again) is the calling idea skill's decision, not this skill's.
|
|
36
36
|
|
|
37
37
|
---
|
|
38
38
|
|
|
@@ -126,8 +126,8 @@ chorus_answer_elaboration({
|
|
|
126
126
|
|
|
127
127
|
Stop here. Do **NOT** call `chorus_pm_validate_elaboration`. The idea skill's caller now decides:
|
|
128
128
|
|
|
129
|
-
- If the synthesized round answers cover everything → caller
|
|
130
|
-
- If gaps remain → caller
|
|
129
|
+
- If the synthesized round answers cover everything → caller obtains human confirmation, then resolves with `chorus_pm_validate_elaboration`.
|
|
130
|
+
- If gaps remain → caller opens a structured Round 2 by calling `chorus_pm_start_elaboration` again.
|
|
131
131
|
|
|
132
132
|
The depth of any follow-up round is the caller's call, not yours.
|
|
133
133
|
|
|
@@ -160,7 +160,7 @@ Do not do any of the following. Each has a specific failure mode that this skill
|
|
|
160
160
|
- **Single-summary `customText` blob.** Compressing the entire conversation into one ElaborationQuestion with a long markdown summary in `customText`. The schema is multi-question for a reason — preserve the decision granularity.
|
|
161
161
|
- **Transcript-as-comment.** Posting the raw conversation log as a comment on the idea (or anywhere). The synthesized round IS the artifact. Raw transcripts pollute the audit trail with noise.
|
|
162
162
|
- **File writes.** Writing any markdown, design doc, plan, or scratch file to disk. There is no design doc in this flow. This is a deliberate divergence from the upstream `superpowers/brainstorming` cadence — read the design.md if confused.
|
|
163
|
-
- **`validate_elaboration` calls.** Closing the elaboration phase from this skill. The lifecycle decision belongs to the idea skill. Calling
|
|
163
|
+
- **`validate_elaboration` calls.** Closing the elaboration phase from this skill. The lifecycle decision belongs to the idea skill. Calling it here strips the caller of its scheduler role.
|
|
164
164
|
- **`writing-plans` / design-doc handoff.** Invoking any skill that produces an implementation plan or design document. The Chorus pipeline already has Proposal → Document Drafts → Task Drafts for that — the brainstorm output feeds them through ElaborationRound, not through external doc skills.
|
|
165
165
|
- **Length-2 binary "yes / no" framings.** Reducing every decision to "do this thing — yes / no". Almost always the genuine alternatives are 3+ approaches with meaningfully different tradeoffs. Length-2 framings often mean the divergent phase ended too early.
|
|
166
166
|
- **Asking multiple questions in one `AskUserQuestion`.** The cadence is one question per turn during divergence, then one final convergence question with 2-3 options. Combining unrelated questions is a sign you are rushing.
|
|
@@ -4,7 +4,7 @@ description: Chorus AI Agent collaboration platform — overview, common tools,
|
|
|
4
4
|
license: AGPL-3.0
|
|
5
5
|
metadata:
|
|
6
6
|
author: chorus
|
|
7
|
-
version: "0.3
|
|
7
|
+
version: "0.9.3"
|
|
8
8
|
category: project-management
|
|
9
9
|
mcp_server: chorus
|
|
10
10
|
---
|
|
@@ -30,18 +30,28 @@ Skill files are hosted under the `<BASE_URL>/skill/` path.
|
|
|
30
30
|
| **proposal-chorus** | Proposal creation, drafts, DAG, submission | `/skill/proposal-chorus/SKILL.md` |
|
|
31
31
|
| **develop-chorus** | Task execution workflow | `/skill/develop-chorus/SKILL.md` |
|
|
32
32
|
| **review-chorus** | Proposal approval, task verification, governance | `/skill/review-chorus/SKILL.md` |
|
|
33
|
+
| **quick-dev-chorus** | Lightweight direct-to-task workflow (skips Idea→Proposal) | `/skill/quick-dev-chorus/SKILL.md` |
|
|
34
|
+
| **brainstorm-chorus** | Optional divergent→convergent dialogue, prelude to elaboration | `/skill/brainstorm-chorus/SKILL.md` |
|
|
35
|
+
| **proposal-reviewer-chorus** | Read-only adversarial proposal reviewer (posts VERDICT) | `/skill/proposal-reviewer-chorus/SKILL.md` |
|
|
36
|
+
| **task-reviewer-chorus** | Read-only adversarial task reviewer (posts VERDICT) | `/skill/task-reviewer-chorus/SKILL.md` |
|
|
37
|
+
| **yolo-chorus** | Full-auto AI-DLC pipeline — prompt to done | `/skill/yolo-chorus/SKILL.md` |
|
|
33
38
|
| **package.json** | Version & download metadata | `/skill/package.json` |
|
|
34
39
|
|
|
35
40
|
### Install (Claude Code, project-level)
|
|
36
41
|
|
|
37
42
|
```bash
|
|
38
43
|
BASE_URL="<BASE_URL>"
|
|
39
|
-
mkdir -p .claude/skills/chorus .claude/skills/idea-chorus .claude/skills/proposal-chorus .claude/skills/develop-chorus .claude/skills/review-chorus
|
|
44
|
+
mkdir -p .claude/skills/chorus .claude/skills/idea-chorus .claude/skills/proposal-chorus .claude/skills/develop-chorus .claude/skills/review-chorus .claude/skills/quick-dev-chorus .claude/skills/brainstorm-chorus .claude/skills/proposal-reviewer-chorus .claude/skills/task-reviewer-chorus .claude/skills/yolo-chorus
|
|
40
45
|
curl -s $BASE_URL/skill/chorus/SKILL.md > .claude/skills/chorus/SKILL.md
|
|
41
46
|
curl -s $BASE_URL/skill/idea-chorus/SKILL.md > .claude/skills/idea-chorus/SKILL.md
|
|
42
47
|
curl -s $BASE_URL/skill/proposal-chorus/SKILL.md > .claude/skills/proposal-chorus/SKILL.md
|
|
43
48
|
curl -s $BASE_URL/skill/develop-chorus/SKILL.md > .claude/skills/develop-chorus/SKILL.md
|
|
44
49
|
curl -s $BASE_URL/skill/review-chorus/SKILL.md > .claude/skills/review-chorus/SKILL.md
|
|
50
|
+
curl -s $BASE_URL/skill/quick-dev-chorus/SKILL.md > .claude/skills/quick-dev-chorus/SKILL.md
|
|
51
|
+
curl -s $BASE_URL/skill/brainstorm-chorus/SKILL.md > .claude/skills/brainstorm-chorus/SKILL.md
|
|
52
|
+
curl -s $BASE_URL/skill/proposal-reviewer-chorus/SKILL.md > .claude/skills/proposal-reviewer-chorus/SKILL.md
|
|
53
|
+
curl -s $BASE_URL/skill/task-reviewer-chorus/SKILL.md > .claude/skills/task-reviewer-chorus/SKILL.md
|
|
54
|
+
curl -s $BASE_URL/skill/yolo-chorus/SKILL.md > .claude/skills/yolo-chorus/SKILL.md
|
|
45
55
|
curl -s $BASE_URL/skill/package.json > .claude/skills/chorus/package.json
|
|
46
56
|
```
|
|
47
57
|
|
|
@@ -49,12 +59,17 @@ curl -s $BASE_URL/skill/package.json > .claude/skills/chorus/package.json
|
|
|
49
59
|
|
|
50
60
|
```bash
|
|
51
61
|
BASE_URL="<BASE_URL>"
|
|
52
|
-
mkdir -p ~/.moltbot/skills/chorus ~/.moltbot/skills/idea-chorus ~/.moltbot/skills/proposal-chorus ~/.moltbot/skills/develop-chorus ~/.moltbot/skills/review-chorus
|
|
62
|
+
mkdir -p ~/.moltbot/skills/chorus ~/.moltbot/skills/idea-chorus ~/.moltbot/skills/proposal-chorus ~/.moltbot/skills/develop-chorus ~/.moltbot/skills/review-chorus ~/.moltbot/skills/quick-dev-chorus ~/.moltbot/skills/brainstorm-chorus ~/.moltbot/skills/proposal-reviewer-chorus ~/.moltbot/skills/task-reviewer-chorus ~/.moltbot/skills/yolo-chorus
|
|
53
63
|
curl -s $BASE_URL/skill/chorus/SKILL.md > ~/.moltbot/skills/chorus/SKILL.md
|
|
54
64
|
curl -s $BASE_URL/skill/idea-chorus/SKILL.md > ~/.moltbot/skills/idea-chorus/SKILL.md
|
|
55
65
|
curl -s $BASE_URL/skill/proposal-chorus/SKILL.md > ~/.moltbot/skills/proposal-chorus/SKILL.md
|
|
56
66
|
curl -s $BASE_URL/skill/develop-chorus/SKILL.md > ~/.moltbot/skills/develop-chorus/SKILL.md
|
|
57
67
|
curl -s $BASE_URL/skill/review-chorus/SKILL.md > ~/.moltbot/skills/review-chorus/SKILL.md
|
|
68
|
+
curl -s $BASE_URL/skill/quick-dev-chorus/SKILL.md > ~/.moltbot/skills/quick-dev-chorus/SKILL.md
|
|
69
|
+
curl -s $BASE_URL/skill/brainstorm-chorus/SKILL.md > ~/.moltbot/skills/brainstorm-chorus/SKILL.md
|
|
70
|
+
curl -s $BASE_URL/skill/proposal-reviewer-chorus/SKILL.md > ~/.moltbot/skills/proposal-reviewer-chorus/SKILL.md
|
|
71
|
+
curl -s $BASE_URL/skill/task-reviewer-chorus/SKILL.md > ~/.moltbot/skills/task-reviewer-chorus/SKILL.md
|
|
72
|
+
curl -s $BASE_URL/skill/yolo-chorus/SKILL.md > ~/.moltbot/skills/yolo-chorus/SKILL.md
|
|
58
73
|
curl -s $BASE_URL/skill/package.json > ~/.moltbot/skills/chorus/package.json
|
|
59
74
|
```
|
|
60
75
|
|
|
@@ -385,17 +400,54 @@ approved --> draft (via revoke — cascade-closes tasks, deletes documents)
|
|
|
385
400
|
|
|
386
401
|
---
|
|
387
402
|
|
|
403
|
+
## Independent Review
|
|
404
|
+
|
|
405
|
+
Chorus uses **independent, read-only adversarial reviewers** at two gates: before a proposal is approved, and before a task is verified. The reviewer's job is to find what is wrong — not to rubber-stamp. Its output is **advisory**: it informs the admin's decision but does not by itself approve, reject, verify, or reopen anything.
|
|
406
|
+
|
|
407
|
+
This is the **single canonical description** of the reviewer pattern. The `develop-chorus`, `review-chorus`, and `yolo-chorus` skills all point back here rather than redefining it.
|
|
408
|
+
|
|
409
|
+
### The Pattern
|
|
410
|
+
|
|
411
|
+
1. **Spawn a read-only sub-agent** that loads one of the two reviewer skills:
|
|
412
|
+
- `proposal-reviewer-chorus` (`<BASE_URL>/skill/proposal-reviewer-chorus/SKILL.md`) — for reviewing a **proposal** before approval. Pass it the `proposalUuid`.
|
|
413
|
+
- `task-reviewer-chorus` (`<BASE_URL>/skill/task-reviewer-chorus/SKILL.md`) — for reviewing a **task** before verification. Pass it the `taskUuid`.
|
|
414
|
+
2. **The reviewer audits independently** and posts exactly **one** structured `VERDICT` comment on the proposal/task via `chorus_add_comment`. The comment ends with one literal verdict string: `VERDICT: PASS`, `VERDICT: PASS WITH NOTES`, or `VERDICT: FAIL`.
|
|
415
|
+
3. **Read the verdict and act.** Fetch the comment with `chorus_get_comments({ targetType, targetUuid })`, read the BLOCKER / NOTE findings, then make the call:
|
|
416
|
+
- `PASS` / `PASS WITH NOTES` → proceed (approve the proposal / verify the task), addressing NOTEs at your discretion.
|
|
417
|
+
- `FAIL` → do **not** proceed; route the BLOCKERs back for a fix (reject/revise the proposal, or reopen/rework the task), then re-review.
|
|
418
|
+
|
|
419
|
+
> The verdict is advisory: even a `FAIL` does not block the admin, and a `PASS` does not auto-approve. A human/admin makes the final decision.
|
|
420
|
+
|
|
421
|
+
### Spawn Mechanism Is Harness-Specific
|
|
422
|
+
|
|
423
|
+
How you spawn the read-only sub-agent depends on your agent harness — give it the reviewer skill plus the target UUID and instruct it to post a single VERDICT comment. Concrete examples:
|
|
424
|
+
|
|
425
|
+
- **Claude Code** — use the Task / Agent tool to launch a sub-agent that loads `task-reviewer-chorus` (or `proposal-reviewer-chorus`) and pass the `taskUuid` / `proposalUuid`.
|
|
426
|
+
- **Codex** — use `spawn_agent` with the reviewer skill and the target UUID.
|
|
427
|
+
- Other harnesses: use whatever sub-agent / sub-task primitive they expose.
|
|
428
|
+
|
|
429
|
+
### Inline Self-Review Fallback
|
|
430
|
+
|
|
431
|
+
When sub-agents are **not** available in your harness, run the review inline yourself: load the relevant reviewer skill's procedure (`proposal-reviewer-chorus` or `task-reviewer-chorus`), audit the proposal/task against its checklist with the same adversarial posture, and post the single `VERDICT` comment yourself before acting on it. A same-agent self-review is weaker than a fresh independent reviewer, but it is far better than skipping the gate.
|
|
432
|
+
|
|
433
|
+
---
|
|
434
|
+
|
|
388
435
|
## Skill Routing
|
|
389
436
|
|
|
390
437
|
This is the core overview skill. For stage-specific workflows, download and read the appropriate skill:
|
|
391
438
|
|
|
392
439
|
| Stage | Skill | Path |
|
|
393
440
|
|-------|-------|------|
|
|
441
|
+
| **Overview** (this file) | `chorus` | `<BASE_URL>/skill/chorus/SKILL.md` |
|
|
394
442
|
| **Quick Dev** | `quick-dev-chorus` | `<BASE_URL>/skill/quick-dev-chorus/SKILL.md` |
|
|
443
|
+
| **Brainstorm** | `brainstorm-chorus` | `<BASE_URL>/skill/brainstorm-chorus/SKILL.md` |
|
|
395
444
|
| **Ideation** | `idea-chorus` | `<BASE_URL>/skill/idea-chorus/SKILL.md` |
|
|
396
445
|
| **Planning** | `proposal-chorus` | `<BASE_URL>/skill/proposal-chorus/SKILL.md` |
|
|
397
446
|
| **Development** | `develop-chorus` | `<BASE_URL>/skill/develop-chorus/SKILL.md` |
|
|
398
447
|
| **Review** | `review-chorus` | `<BASE_URL>/skill/review-chorus/SKILL.md` |
|
|
448
|
+
| **Proposal Review** | `proposal-reviewer-chorus` | `<BASE_URL>/skill/proposal-reviewer-chorus/SKILL.md` |
|
|
449
|
+
| **Task Review** | `task-reviewer-chorus` | `<BASE_URL>/skill/task-reviewer-chorus/SKILL.md` |
|
|
450
|
+
| **Full-Auto** | `yolo-chorus` | `<BASE_URL>/skill/yolo-chorus/SKILL.md` |
|
|
399
451
|
|
|
400
452
|
### Getting Started
|
|
401
453
|
|
|
@@ -4,7 +4,7 @@ description: Chorus Development workflow — claim tasks, report work, self-chec
|
|
|
4
4
|
license: AGPL-3.0
|
|
5
5
|
metadata:
|
|
6
6
|
author: chorus
|
|
7
|
-
version: "0.3
|
|
7
|
+
version: "0.9.3"
|
|
8
8
|
category: project-management
|
|
9
9
|
mcp_server: chorus
|
|
10
10
|
---
|
|
@@ -182,7 +182,7 @@ chorus_submit_for_verify({
|
|
|
182
182
|
|
|
183
183
|
> `to_verify` does NOT unblock downstream tasks — only `done` (after admin verification) does.
|
|
184
184
|
|
|
185
|
-
> **Review
|
|
185
|
+
> **Independent Review:** After `chorus_submit_for_verify`, run an independent review of the task before it is verified. Spawn a read-only sub-agent that loads the `task-reviewer-chorus` skill (`<BASE_URL>/skill/task-reviewer-chorus/SKILL.md`), pass it the `taskUuid`, and let it post a single `VERDICT` comment (PASS / PASS WITH NOTES / FAIL) on the task; then read it with `chorus_get_comments` and act. The verdict is **advisory** (it does not block verification). The spawn mechanism is harness-specific, and an inline self-review fallback exists when sub-agents are unavailable — see the canonical **Independent Review** section in the `chorus` skill (`<BASE_URL>/skill/chorus/SKILL.md`) for the full pattern.
|
|
186
186
|
|
|
187
187
|
### Step 9: Handle Review Feedback
|
|
188
188
|
|