@chorus-aidlc/chorus 0.17.3 → 0.18.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/standalone/.next/BUILD_ID +1 -1
- package/.next/standalone/.next/app-build-manifest.json +345 -341
- package/.next/standalone/.next/app-path-routes-manifest.json +35 -35
- package/.next/standalone/.next/build-manifest.json +5 -5
- package/.next/standalone/.next/prerender-manifest.json +27 -27
- package/.next/standalone/.next/server/app/(dashboard)/project-groups/[uuid]/page.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/project-groups/[uuid]/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/project-groups/[uuid]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/activity/page.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/activity/page_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_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/page.js +2 -2
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page.js +2 -2
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/page.js +2 -2
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/graph/page.js +2 -2
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/graph/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/graph/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page.js +2 -2
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/new/page.js +2 -2
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/new/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/new/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/page.js +2 -2
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/page.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/page.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/settings/page.js +2 -2
- package/.next/standalone/.next/server/app/(dashboard)/settings/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/settings/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/_not-found.html +2 -2
- package/.next/standalone/.next/server/app/_not-found.rsc +2 -2
- package/.next/standalone/.next/server/app/admin/companies/[uuid]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/admin/companies/new/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/admin/companies/new.html +2 -2
- package/.next/standalone/.next/server/app/admin/companies/new.rsc +2 -2
- package/.next/standalone/.next/server/app/admin/companies/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/admin/companies.html +2 -2
- package/.next/standalone/.next/server/app/admin/companies.rsc +2 -2
- package/.next/standalone/.next/server/app/admin/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/admin.html +2 -2
- package/.next/standalone/.next/server/app/admin.rsc +2 -2
- package/.next/standalone/.next/server/app/api/admin/companies/[uuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/admin/companies/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/admin/login/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/admin/session/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/agent-connections/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/agent-connections/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/agents/[uuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/agents/[uuid]/sessions/route.js +1 -1
- package/.next/standalone/.next/server/app/api/agents/[uuid]/sessions/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/agents/[uuid]/sessions/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/agents/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/api-keys/[uuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/api-keys/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/callback/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/check-default/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/company-oidc/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/default-login/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/identify/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/me/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/sync-token/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/comments/route.js +1 -1
- package/.next/standalone/.next/server/app/api/comments/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/comments/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon/connection-heartbeat/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/daemon/connection-heartbeat/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon/control/route.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon/control/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/daemon/control/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon/directory-request/report/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/daemon/directory-request/report/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon/execution-state/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/daemon/execution-state/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon/executions/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/daemon/executions/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon/pending-turns/route.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon/pending-turns/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/daemon/pending-turns/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon/report-interrupt/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/daemon/report-interrupt/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon/resume/route.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon/resume/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/daemon/resume/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon/transcript/route.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon/transcript/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/daemon/transcript/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon/turn-advance/route.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon/turn-advance/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/daemon/turn-advance/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon-directory-requests/[uuid]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/daemon-directory-requests/[uuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon-directory-requests/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/daemon-directory-requests/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/instruction/route.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/instruction/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/instruction/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/repoint/route.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/repoint/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/repoint/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/route.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon-sessions/ad-hoc/route.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon-sessions/ad-hoc/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/daemon-sessions/ad-hoc/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon-sessions/route.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon-sessions/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/daemon-sessions/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/documents/[uuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/entities/[type]/[uuid]/root-idea/route.js +1 -1
- package/.next/standalone/.next/server/app/api/entities/[type]/[uuid]/root-idea/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/entities/[type]/[uuid]/root-idea/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/events/notifications/route.js +1 -1
- package/.next/standalone/.next/server/app/api/events/notifications/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/events/notifications/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/events/route.js +1 -1
- package/.next/standalone/.next/server/app/api/events/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/events/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/health/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/claim/route.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/claim/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/claim/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/preview/route.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/preview/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/preview/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/route.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/parent/route.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/parent/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/parent/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/release/route.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/release/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/release/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/route.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/wake-preview/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/wake-preview/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/conversational/route.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/conversational/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/ideas/conversational/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/mcp/route.js +1 -1
- package/.next/standalone/.next/server/app/api/mcp/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/mcp/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/me/assignments/route.js +1 -1
- package/.next/standalone/.next/server/app/api/me/assignments/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/me/assignments/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/mentionables/route.js +1 -1
- package/.next/standalone/.next/server/app/api/mentionables/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/mentionables/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/notifications/[uuid]/archive/route.js +1 -1
- package/.next/standalone/.next/server/app/api/notifications/[uuid]/archive/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/notifications/[uuid]/archive/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/notifications/[uuid]/read/route.js +1 -1
- package/.next/standalone/.next/server/app/api/notifications/[uuid]/read/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/notifications/[uuid]/read/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/notifications/preferences/route.js +1 -1
- package/.next/standalone/.next/server/app/api/notifications/preferences/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/notifications/preferences/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/notifications/read-all/route.js +1 -1
- package/.next/standalone/.next/server/app/api/notifications/read-all/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/notifications/read-all/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/notifications/route.js +1 -1
- package/.next/standalone/.next/server/app/api/notifications/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/notifications/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/notifications/unread-count/route.js +1 -1
- package/.next/standalone/.next/server/app/api/notifications/unread-count/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/notifications/unread-count/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/project-groups/[uuid]/dashboard/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/project-groups/[uuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/project-groups/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/project-visits/pin/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/project-visits/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/project-visits/visit/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/activity/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/agent-cwds/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/agent-cwds/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/available/route.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/available/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/available/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/documents/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/group/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/route.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/tracker/route.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/tracker/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/tracker/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/[proposalUuid]/validate/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/summary/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/resource-graph/route.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/resource-graph/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/resource-graph/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/stats/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/dependencies/route.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/dependencies/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/dependencies/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/route.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/agent-cwd-options/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/projects/agent-cwd-options/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/projects/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/proposals/[uuid]/approve/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/proposals/[uuid]/close/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/proposals/[uuid]/reject/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/proposals/[uuid]/revoke/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/proposals/[uuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/references/[uuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/references/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/search/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/session/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/sessions/[uuid]/route.js +1 -1
- package/.next/standalone/.next/server/app/api/sessions/[uuid]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/sessions/[uuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/claim/route.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/claim/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/claim/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/[dependsOnUuid]/route.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/[dependsOnUuid]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/[dependsOnUuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/route.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/release/route.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/release/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/release/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/route.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/sessions/route.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/sessions/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/sessions/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/index.html +2 -2
- package/.next/standalone/.next/server/app/index.rsc +2 -2
- package/.next/standalone/.next/server/app/login/admin/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/login/admin.html +2 -2
- package/.next/standalone/.next/server/app/login/admin.rsc +2 -2
- package/.next/standalone/.next/server/app/login/callback/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/login/callback.html +2 -2
- package/.next/standalone/.next/server/app/login/callback.rsc +2 -2
- package/.next/standalone/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/login/pick-workspace/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/login/pick-workspace.html +2 -2
- package/.next/standalone/.next/server/app/login/pick-workspace.rsc +2 -2
- package/.next/standalone/.next/server/app/login.html +2 -2
- package/.next/standalone/.next/server/app/login.rsc +2 -2
- package/.next/standalone/.next/server/app/onboarding/page.js +2 -2
- package/.next/standalone/.next/server/app/onboarding/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/onboarding/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/onboarding.html +2 -2
- package/.next/standalone/.next/server/app/onboarding.rsc +3 -3
- package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/projects.html +2 -2
- package/.next/standalone/.next/server/app/projects.rsc +3 -3
- package/.next/standalone/.next/server/app/settings.html +2 -2
- package/.next/standalone/.next/server/app/settings.rsc +4 -4
- package/.next/standalone/.next/server/app-paths-manifest.json +35 -35
- package/.next/standalone/.next/server/chunks/1318.js +1 -1
- package/.next/standalone/.next/server/chunks/{5201.js → 1416.js} +2 -2
- package/.next/standalone/.next/server/chunks/1559.js +2 -2
- package/.next/standalone/.next/server/chunks/{3630.js → 2195.js} +1 -1
- package/.next/standalone/.next/server/chunks/2460.js +1 -0
- package/.next/standalone/.next/server/chunks/2572.js +2 -2
- package/.next/standalone/.next/server/chunks/2758.js +1 -0
- package/.next/standalone/.next/server/chunks/2961.js +1 -1
- package/.next/standalone/.next/server/chunks/3419.js +1 -1
- package/.next/standalone/.next/server/chunks/4066.js +1 -0
- package/.next/standalone/.next/server/chunks/4827.js +1 -1
- package/.next/standalone/.next/server/chunks/5245.js +1 -1
- package/.next/standalone/.next/server/chunks/5453.js +1 -1
- package/.next/standalone/.next/server/chunks/5489.js +1 -1
- package/.next/standalone/.next/server/chunks/6113.js +1 -1
- package/.next/standalone/.next/server/chunks/6506.js +2 -2
- package/.next/standalone/.next/server/chunks/6737.js +1 -0
- package/.next/standalone/.next/server/chunks/679.js +1 -1
- package/.next/standalone/.next/server/chunks/7368.js +1 -1
- package/.next/standalone/.next/server/chunks/7530.js +1 -1
- package/.next/standalone/.next/server/chunks/7578.js +2 -2
- package/.next/standalone/.next/server/chunks/7675.js +1 -0
- package/.next/standalone/.next/server/chunks/7789.js +1 -0
- package/.next/standalone/.next/server/chunks/{1201.js → 8030.js} +2 -2
- package/.next/standalone/.next/server/chunks/920.js +1 -1
- package/.next/standalone/.next/server/chunks/9213.js +1 -1
- package/.next/standalone/.next/server/chunks/9378.js +1 -1
- package/.next/standalone/.next/server/chunks/9931.js +1 -1
- package/.next/standalone/.next/server/instrumentation.js +1 -1
- package/.next/standalone/.next/server/middleware-build-manifest.js +1 -1
- package/.next/standalone/.next/server/middleware-manifest.json +5 -5
- package/.next/standalone/.next/server/pages/404.html +2 -2
- package/.next/standalone/.next/server/pages/500.html +1 -1
- package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/server-reference-manifest.json +1 -1
- package/.next/standalone/.next/static/chunks/11595.f080a1d100972212.js +1 -0
- package/.next/standalone/.next/static/chunks/14628-283d3983d1fb36c9.js +1 -0
- package/.next/standalone/.next/static/chunks/{29305-f587e7e81bc0b200.js → 17562-56f932146e9e6c94.js} +4 -4
- package/.next/standalone/.next/static/chunks/25080-25ad29e64c855338.js +1 -0
- package/.next/standalone/.next/static/chunks/28698-7fb271ffc6e63a26.js +1 -0
- package/.next/standalone/.next/static/chunks/{95225-96b44da3ebd6ddad.js → 32736-aeaaa1e4c4d5529b.js} +1 -1
- package/.next/standalone/.next/static/chunks/33456.20313bd67a5c41cc.js +1 -0
- package/.next/standalone/.next/static/chunks/4860.3b555a398cdffb19.js +1 -0
- package/.next/standalone/.next/static/chunks/75257-99c0ce24b436847b.js +1 -0
- package/.next/standalone/.next/static/chunks/79919-0c6dcda1dd8646f0.js +1 -0
- package/.next/standalone/.next/static/chunks/91328-f501e3c3ca519a92.js +1 -0
- package/.next/standalone/.next/static/chunks/94643-e54eff17e941a93b.js +1 -0
- package/.next/standalone/.next/static/chunks/99373.b8a95d1bec5ad4e7.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/layout-f3c6431432d42c7c.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/dashboard/{page-77b175e52a85f3cb.js → page-5d723f974bdad33b.js} +1 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page-8d3b1f4d8b76d66c.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/page-57c698dea2fa6e29.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/graph/{page-69d3162667f85677.js → page-d2bb622855e746f1.js} +1 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page-fc255dc3612032b9.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/new/{page-a3f83031dfbafc81.js → page-f032ee8a80d1f56a.js} +1 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/page-46a0ddfd0421b0a8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/{page-3c7ff3a40a4615ac.js → page-3a83748ce0ae1c4f.js} +1 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/tasks/{page-7b8e11fdc5b596d0.js → page-8af9bb9f96ab0258.js} +1 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/settings/page-b02939820affdae5.js +1 -0
- package/.next/standalone/.next/static/chunks/app/onboarding/page-d2c0c7951114e763.js +1 -0
- package/.next/standalone/.next/static/chunks/{webpack-dffb97a4feb8faba.js → webpack-de8a36d232a91d6b.js} +1 -1
- package/.next/standalone/.next/static/css/44f13b43a3de716d.css +1 -0
- package/.next/standalone/package.json +1 -1
- package/.next/standalone/public/chorus-plugin/.claude-plugin/plugin.json +2 -2
- package/.next/standalone/public/chorus-plugin/agents/code-reviewer.md +1 -0
- package/.next/standalone/public/chorus-plugin/agents/proposal-reviewer.md +12 -3
- package/.next/standalone/public/chorus-plugin/agents/task-reviewer.md +4 -0
- package/.next/standalone/public/chorus-plugin/bin/chorus-api.sh +1 -1
- package/.next/standalone/public/chorus-plugin/bin/on-post-submit-for-verify.sh +3 -3
- package/.next/standalone/public/chorus-plugin/bin/on-post-submit-proposal.sh +3 -3
- package/.next/standalone/public/chorus-plugin/bin/on-post-verify-task.sh +2 -2
- package/.next/standalone/public/chorus-plugin/bin/on-pre-spawn-agent.sh +22 -9
- package/.next/standalone/public/chorus-plugin/bin/on-session-start.sh +39 -64
- package/.next/standalone/public/chorus-plugin/bin/on-subagent-start.sh +44 -29
- package/.next/standalone/public/chorus-plugin/bin/on-subagent-stop.sh +100 -29
- package/.next/standalone/public/chorus-plugin/bin/resolve-spec-mode.sh +107 -0
- package/.next/standalone/public/chorus-plugin/bin/test-syntax.sh +6 -2
- package/.next/standalone/public/chorus-plugin/bin/tests/test-resolver-drift.sh +46 -0
- package/.next/standalone/public/chorus-plugin/bin/tests/test-skill-harness-fidelity-negative.sh +328 -0
- package/.next/standalone/public/chorus-plugin/bin/tests/test-skill-harness-fidelity.sh +372 -0
- package/.next/standalone/public/chorus-plugin/bin/tests/test-spec-mode-resolution.sh +83 -0
- package/.next/standalone/public/chorus-plugin/bin/tests/test-subagent-session-name.sh +599 -0
- package/.next/standalone/public/chorus-plugin/skills/brainstorm/SKILL.md +1 -1
- package/.next/standalone/public/chorus-plugin/skills/chorus/SKILL.md +11 -6
- package/.next/standalone/public/chorus-plugin/skills/chorus-cli/SKILL.md +1 -1
- package/.next/standalone/public/chorus-plugin/skills/develop/SKILL.md +14 -9
- package/.next/standalone/public/chorus-plugin/skills/docs/SKILL.md +1 -1
- package/.next/standalone/public/chorus-plugin/skills/idea/SKILL.md +1 -1
- package/.next/standalone/public/chorus-plugin/skills/openspec-aware/SKILL.md +27 -31
- package/.next/standalone/public/chorus-plugin/skills/orchestrate/SKILL.md +11 -1
- package/.next/standalone/public/chorus-plugin/skills/proposal/SKILL.md +14 -7
- package/.next/standalone/public/chorus-plugin/skills/quick-dev/SKILL.md +6 -4
- package/.next/standalone/public/chorus-plugin/skills/review/SKILL.md +10 -8
- package/.next/standalone/public/chorus-plugin/skills/spec-lite/SKILL.md +147 -0
- package/.next/standalone/public/chorus-plugin/skills/yolo/SKILL.md +49 -34
- package/.next/standalone/public/kiro-plugin/.kiro/agents/chorus-code-reviewer.json +1 -1
- package/.next/standalone/public/kiro-plugin/.kiro/agents/chorus-proposal-reviewer.json +2 -1
- package/.next/standalone/public/kiro-plugin/.kiro/agents/chorus-task-reviewer.json +1 -1
- package/.next/standalone/public/kiro-plugin/.kiro/agents/chorus.md +1 -1
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-brainstorm/SKILL.md +1 -1
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-cli/SKILL.md +1 -1
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-develop/SKILL.md +9 -7
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-docs/SKILL.md +1 -1
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-idea/SKILL.md +1 -1
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-openspec-aware/SKILL.md +35 -27
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-orchestrate/SKILL.md +9 -1
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-proposal/SKILL.md +14 -7
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-quick-dev/SKILL.md +2 -2
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-review/SKILL.md +8 -8
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-spec-lite/SKILL.md +147 -0
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-yolo/SKILL.md +39 -25
- package/.next/standalone/public/kiro-plugin/.kiro/steering/chorus.md +11 -6
- package/.next/standalone/public/kiro-plugin/bin/chorus-api.sh +1 -1
- package/.next/standalone/public/kiro-plugin/bin/on-agent-spawn.sh +41 -0
- package/.next/standalone/public/kiro-plugin/bin/on-post-submit-for-verify.sh +3 -3
- package/.next/standalone/public/kiro-plugin/bin/on-post-submit-proposal.sh +3 -3
- package/.next/standalone/public/kiro-plugin/bin/on-post-verify-task.sh +2 -2
- package/.next/standalone/public/kiro-plugin/bin/resolve-spec-mode.sh +107 -0
- package/.next/standalone/public/kiro-plugin/manifest.txt +2 -0
- package/.next/standalone/public/skill/chorus/SKILL.md +11 -1
- package/.next/standalone/public/skill/code-reviewer-chorus/SKILL.md +1 -0
- package/.next/standalone/public/skill/develop-chorus/SKILL.md +1 -1
- package/.next/standalone/public/skill/orchestrate-chorus/SKILL.md +11 -1
- package/.next/standalone/public/skill/proposal-reviewer-chorus/SKILL.md +5 -2
- package/.next/standalone/public/skill/quick-dev-chorus/SKILL.md +1 -1
- package/.next/standalone/public/skill/review-chorus/SKILL.md +5 -3
- package/.next/standalone/public/skill/task-reviewer-chorus/SKILL.md +4 -0
- package/.next/standalone/public/skill/yolo-chorus/SKILL.md +23 -7
- package/README.ja.md +3 -3
- package/README.ko.md +3 -3
- package/README.md +3 -3
- package/README.zh.md +3 -3
- package/chorus.mjs +30 -2
- package/cli/agent-cli-config.mjs +323 -0
- package/cli/agent-launcher.mjs +44 -16
- package/cli/child-exit.mjs +77 -0
- package/cli/claude-spawner.mjs +26 -14
- package/cli/codex-spawner.mjs +27 -16
- package/cli/control-handler.mjs +104 -6
- package/cli/credentials.mjs +7 -0
- package/cli/daemon-config.mjs +14 -0
- package/cli/daemon-rest-client.mjs +98 -29
- package/cli/daemon.mjs +37 -7
- package/cli/dsh-managed-config.mjs +26 -28
- package/cli/dsh-spawner.mjs +27 -16
- package/cli/init/steps/credential-seed.mjs +1 -1
- package/cli/kiro-spawner.mjs +26 -16
- package/cli/launch-diagnostics.mjs +67 -0
- package/cli/login.mjs +17 -1
- package/cli/pi-spawner.mjs +23 -13
- package/cli/prompts.mjs +52 -2
- package/cli/spawner-select.mjs +6 -11
- package/package.json +1 -1
- package/.next/standalone/.next/server/chunks/1114.js +0 -1
- package/.next/standalone/.next/server/chunks/1155.js +0 -1
- package/.next/standalone/.next/server/chunks/6465.js +0 -1
- package/.next/standalone/.next/server/chunks/8105.js +0 -1
- package/.next/standalone/.next/server/chunks/8232.js +0 -1
- package/.next/standalone/.next/static/chunks/11595.f7c3ef5cd7fc8feb.js +0 -1
- package/.next/standalone/.next/static/chunks/33456.c81079032acc2966.js +0 -1
- package/.next/standalone/.next/static/chunks/45262-38b332523f00a223.js +0 -1
- package/.next/standalone/.next/static/chunks/46021-f5d072b0cbcb7fac.js +0 -1
- package/.next/standalone/.next/static/chunks/4860.f0cfb1201191ae88.js +0 -1
- package/.next/standalone/.next/static/chunks/66609-64a01d5cb415465b.js +0 -1
- package/.next/standalone/.next/static/chunks/79919-c5a2a3fd8f5f9204.js +0 -1
- package/.next/standalone/.next/static/chunks/94394-38194b81b489275c.js +0 -1
- package/.next/standalone/.next/static/chunks/94643-f1bdf37fb3bb6adb.js +0 -1
- package/.next/standalone/.next/static/chunks/96482-2b3bdb2544d72e5a.js +0 -1
- package/.next/standalone/.next/static/chunks/99373.3c23ac2efbd4db02.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/layout-66328332f62c7371.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page-87ceae13c4950fc9.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/page-45e95154e546460e.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page-b7b2017e5be69564.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/page-8b06834ca0f663bb.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/settings/page-efe5326c47aca9ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/onboarding/page-0ce33b9327fe3d8c.js +0 -1
- package/.next/standalone/.next/static/css/1d9cf83f50b6db00.css +0 -1
- /package/.next/standalone/.next/static/{wuqYN129vOIGymh_NEdZe → dot63ILT878Tloqi7Czj_}/_buildManifest.js +0 -0
- /package/.next/standalone/.next/static/{wuqYN129vOIGymh_NEdZe → dot63ILT878Tloqi7Czj_}/_ssgManifest.js +0 -0
|
@@ -140,8 +140,12 @@ assert_eq "no session id -> <slug>/no-session" \
|
|
|
140
140
|
# the global root, and does NOT create a .chorus/ in the project dir.
|
|
141
141
|
printf '%s' '{"session_id":"sess-place","tool_input":{"subagent_type":"general-purpose","name":"placer"}}' \
|
|
142
142
|
| "$BASH" "$DIR/on-pre-spawn-agent.sh" >/dev/null 2>&1 || true
|
|
143
|
-
|
|
144
|
-
|
|
143
|
+
# The pending filename is <sanitized subagent_type>__<epoch>-<pid>, never unknown-*.
|
|
144
|
+
PENDING_PLACED="$( ls "${CHORUS_PLUGIN_STATE_ROOT}/${EXPECT_SLUG}/sess-place/pending" 2>/dev/null | head -1 )"
|
|
145
|
+
case "$PENDING_PLACED" in
|
|
146
|
+
general-purpose__*) assert_true "pending file written under global root" true ;;
|
|
147
|
+
*) assert_true "pending file written under global root" false ;;
|
|
148
|
+
esac
|
|
145
149
|
assert_true "no .chorus/ created in project dir" \
|
|
146
150
|
test ! -d "${CLAUDE_PROJECT_DIR}/.chorus"
|
|
147
151
|
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# test-resolver-drift.sh — enforce the single-source invariant for the bash
|
|
3
|
+
# spec-mode resolver. resolve-spec-mode.sh is COPIED into each bash plugin port
|
|
4
|
+
# (Claude Code, Codex, Kiro, …); those copies MUST stay byte-identical to the
|
|
5
|
+
# canonical Claude Code copy, or the "one computation of the mode" guarantee
|
|
6
|
+
# silently rots as ports diverge. The 13-case matrix test covers the canonical
|
|
7
|
+
# copy; this guard makes every other copy equal to it. Bash 3.2 compatible.
|
|
8
|
+
set -u
|
|
9
|
+
|
|
10
|
+
# Repo root = four levels up from this script (tests → bin → chorus-plugin → public → repo).
|
|
11
|
+
ROOT="$(cd "$(dirname "$0")/../../../.." && pwd)"
|
|
12
|
+
CANON="$ROOT/public/chorus-plugin/bin/resolve-spec-mode.sh"
|
|
13
|
+
|
|
14
|
+
if [ ! -f "$CANON" ]; then
|
|
15
|
+
echo "FATAL: canonical resolver not found at $CANON" >&2
|
|
16
|
+
exit 1
|
|
17
|
+
fi
|
|
18
|
+
|
|
19
|
+
PASS=0
|
|
20
|
+
FAIL=0
|
|
21
|
+
echo "resolver drift-guard (canonical: public/chorus-plugin/bin/resolve-spec-mode.sh):"
|
|
22
|
+
|
|
23
|
+
# Every bash copy under public/, plugins/ or packages/ (excludes node_modules /
|
|
24
|
+
# build output). packages/ is included because the OpenClaw plugin — which has no
|
|
25
|
+
# SessionStart channel and so resolves the mode from its skill — SHIPS this
|
|
26
|
+
# resolver rather than hand-rolling the rule in Markdown.
|
|
27
|
+
COPIES=$(find "$ROOT/public" "$ROOT/plugins" "$ROOT/packages" -name resolve-spec-mode.sh 2>/dev/null \
|
|
28
|
+
| grep -v '/node_modules/' | grep -v '/dist/' | sort)
|
|
29
|
+
|
|
30
|
+
for f in $COPIES; do
|
|
31
|
+
rel="${f#$ROOT/}"
|
|
32
|
+
if [ "$f" = "$CANON" ]; then
|
|
33
|
+
echo " -- $rel (canonical)"
|
|
34
|
+
continue
|
|
35
|
+
fi
|
|
36
|
+
if diff -q "$CANON" "$f" >/dev/null 2>&1; then
|
|
37
|
+
PASS=$((PASS + 1)); echo " PASS $rel (byte-identical)"
|
|
38
|
+
else
|
|
39
|
+
FAIL=$((FAIL + 1)); echo " FAIL $rel DIFFERS from canonical:"
|
|
40
|
+
diff "$CANON" "$f" | sed 's/^/ /'
|
|
41
|
+
fi
|
|
42
|
+
done
|
|
43
|
+
|
|
44
|
+
echo ""
|
|
45
|
+
echo "Results: $PASS identical copy(ies), $FAIL drifted"
|
|
46
|
+
[ "$FAIL" -eq 0 ]
|
package/.next/standalone/public/chorus-plugin/bin/tests/test-skill-harness-fidelity-negative.sh
ADDED
|
@@ -0,0 +1,328 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# test-skill-harness-fidelity-negative.sh — negative cases for the fidelity guard.
|
|
3
|
+
#
|
|
4
|
+
# A blacklist guard that passes on a tree it never scanned is worse than no guard,
|
|
5
|
+
# so this harness plants each blacklisted literal into a synthetic repo and asserts
|
|
6
|
+
# the guard actually FAILS. Every case runs twice: once under a plain path and once
|
|
7
|
+
# under a path containing a space, because the original guard word-split its scope
|
|
8
|
+
# string and reported "3 PASS" on a repo checked out under e.g.
|
|
9
|
+
# "/Users/me/My Repos/Chorus" while having searched nothing.
|
|
10
|
+
#
|
|
11
|
+
# Bash 3.2 compatible.
|
|
12
|
+
set -u
|
|
13
|
+
|
|
14
|
+
GUARD="$(cd "$(dirname "$0")" && pwd)/test-skill-harness-fidelity.sh"
|
|
15
|
+
if [ ! -x "$GUARD" ]; then
|
|
16
|
+
echo "FATAL: guard not found or not executable at $GUARD" >&2
|
|
17
|
+
exit 1
|
|
18
|
+
fi
|
|
19
|
+
|
|
20
|
+
PASS=0
|
|
21
|
+
FAIL=0
|
|
22
|
+
TMPROOT="$(mktemp -d)"
|
|
23
|
+
trap 'rm -rf "$TMPROOT"' EXIT
|
|
24
|
+
|
|
25
|
+
# scaffold <repo-root> — a minimal tree with every path the guard scans, all clean.
|
|
26
|
+
# Missing paths are themselves a scan error now, so the clean case must be complete.
|
|
27
|
+
scaffold() {
|
|
28
|
+
_r="$1"
|
|
29
|
+
mkdir -p "$_r/public/chorus-plugin/bin/tests" \
|
|
30
|
+
"$_r/public/chorus-plugin/skills/develop" \
|
|
31
|
+
"$_r/public/chorus-plugin/agents" \
|
|
32
|
+
"$_r/public/kiro-plugin/.kiro/skills" \
|
|
33
|
+
"$_r/public/kiro-plugin/.kiro/agents" \
|
|
34
|
+
"$_r/public/kiro-plugin/.kiro/steering" \
|
|
35
|
+
"$_r/public/skill/proposal-reviewer-chorus" \
|
|
36
|
+
"$_r/packages/chorus-dsh/skills" \
|
|
37
|
+
"$_r/packages/chorus-dsh/skills/proposal-reviewer-chorus" \
|
|
38
|
+
"$_r/packages/chorus-pi/agents" \
|
|
39
|
+
"$_r/packages/openclaw-plugin/skills/proposal-reviewer" \
|
|
40
|
+
"$_r/plugins/chorus/skills" \
|
|
41
|
+
"$_r/plugins/chorus/skills/chorus-proposal-reviewer" \
|
|
42
|
+
"$_r/docs"
|
|
43
|
+
printf 'clean skill text, wait using your harness mechanism\n' \
|
|
44
|
+
> "$_r/public/chorus-plugin/skills/develop/SKILL.md"
|
|
45
|
+
printf '# SPEC_LITE\nthe template is inlined here\n' > "$_r/docs/SPEC_LITE.md"
|
|
46
|
+
cp "$GUARD" "$_r/public/chorus-plugin/bin/tests/$(basename "$GUARD")"
|
|
47
|
+
|
|
48
|
+
# ── The seven proposal-reviewer surfaces, all carrying the canonical rule.
|
|
49
|
+
# Checks 4-6 fail on a missing enumerated path, so a clean tree needs all seven
|
|
50
|
+
# present AND compliant. The truthful "Any shell command beyond read-only
|
|
51
|
+
# inspection —" sentence is included deliberately: it must not trip check 4.
|
|
52
|
+
for _pr in "public/chorus-plugin/agents/proposal-reviewer.md" \
|
|
53
|
+
"plugins/chorus/skills/chorus-proposal-reviewer/SKILL.md" \
|
|
54
|
+
"packages/chorus-pi/agents/chorus-proposal-reviewer.md" \
|
|
55
|
+
"packages/chorus-dsh/skills/proposal-reviewer-chorus/SKILL.md" \
|
|
56
|
+
"packages/openclaw-plugin/skills/proposal-reviewer/SKILL.md" \
|
|
57
|
+
"public/skill/proposal-reviewer-chorus/SKILL.md"; do
|
|
58
|
+
printf 'Bash is READ-ONLY inspection only: ls, cat, grep/rg, find.\n' > "$_r/$_pr"
|
|
59
|
+
printf 'No file writes, no git write ops, no installs, no test/build runs.\n' >> "$_r/$_pr"
|
|
60
|
+
printf 'Any shell command beyond read-only inspection — no file writes.\n' >> "$_r/$_pr"
|
|
61
|
+
printf 'Use it to confirm a file or directory exists before flagging it as missing.\n' >> "$_r/$_pr"
|
|
62
|
+
done
|
|
63
|
+
# Claude Code's file additionally needs the frontmatter list check 6 reads.
|
|
64
|
+
cat > "$_r/public/chorus-plugin/agents/proposal-reviewer.md" <<'CCAGENT'
|
|
65
|
+
---
|
|
66
|
+
disallowedTools:
|
|
67
|
+
- Agent
|
|
68
|
+
- Edit
|
|
69
|
+
- Write
|
|
70
|
+
---
|
|
71
|
+
Bash is READ-ONLY inspection only: ls, cat, grep/rg, find.
|
|
72
|
+
No file writes, no git write ops, no installs, no test/build runs.
|
|
73
|
+
Any shell command beyond read-only inspection — no file writes.
|
|
74
|
+
Use it to confirm a file or directory exists before flagging it as missing.
|
|
75
|
+
CCAGENT
|
|
76
|
+
# Kiro states the rule inside a JSON prompt string and names its tool `shell`.
|
|
77
|
+
cat > "$_r/public/kiro-plugin/.kiro/agents/chorus-proposal-reviewer.json" <<'KIROAGENT'
|
|
78
|
+
{
|
|
79
|
+
"name": "chorus-proposal-reviewer",
|
|
80
|
+
"tools": [
|
|
81
|
+
"read",
|
|
82
|
+
"shell",
|
|
83
|
+
"@chorus"
|
|
84
|
+
],
|
|
85
|
+
"prompt": "Shell is READ-ONLY inspection only: ls, cat, grep/rg, find. No file writes, no git write ops, no installs, no test/build runs. Use it to confirm a file or directory exists before flagging it as missing."
|
|
86
|
+
}
|
|
87
|
+
KIROAGENT
|
|
88
|
+
# ── Check 4's extra scope: the Kiro orchestrator prompt and steering doc.
|
|
89
|
+
# Not reviewer definitions (so check 5 never looks at them), but they describe the
|
|
90
|
+
# grant to the agent that spawns the reviewer — a false claim here misleads it.
|
|
91
|
+
printf 'chorus-proposal-reviewer is scoped `tools: ["read", "shell", "@chorus"]`.\n' \
|
|
92
|
+
> "$_r/public/kiro-plugin/.kiro/agents/chorus.md"
|
|
93
|
+
printf 'chorus-proposal-reviewer is scoped `tools: ["read", "shell", "@chorus"]`.\n' \
|
|
94
|
+
> "$_r/public/kiro-plugin/.kiro/steering/chorus.md"
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
# run_guard <repo-root> — echo the guard's exit code, discarding its output.
|
|
98
|
+
run_guard() {
|
|
99
|
+
"$1/public/chorus-plugin/bin/tests/$(basename "$GUARD")" >/dev/null 2>&1
|
|
100
|
+
echo $?
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
# expect <label> <repo-root> <want-rc-zero|want-rc-nonzero>
|
|
104
|
+
expect() {
|
|
105
|
+
_label="$1"; _r="$2"; _want="$3"
|
|
106
|
+
_rc="$(run_guard "$_r")"
|
|
107
|
+
case "$_want" in
|
|
108
|
+
zero) if [ "$_rc" -eq 0 ]; then PASS=$((PASS+1)); echo " PASS $_label (exit 0)"
|
|
109
|
+
else FAIL=$((FAIL+1)); echo " FAIL $_label — wanted exit 0, got $_rc"; fi ;;
|
|
110
|
+
nonzero) if [ "$_rc" -ne 0 ]; then PASS=$((PASS+1)); echo " PASS $_label (exit $_rc)"
|
|
111
|
+
else FAIL=$((FAIL+1)); echo " FAIL $_label — guard reported PASS but the literal is present"; fi ;;
|
|
112
|
+
esac
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
# case_in <dirname> — build a fresh scaffold under TMPROOT/<dirname>, echo its path.
|
|
116
|
+
case_in() {
|
|
117
|
+
_d="$TMPROOT/$1"
|
|
118
|
+
rm -rf "$_d"; mkdir -p "$_d"
|
|
119
|
+
scaffold "$_d"
|
|
120
|
+
echo "$_d"
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
echo "skill/harness fidelity guard — negative cases (plain path AND path with a space):"
|
|
124
|
+
echo ""
|
|
125
|
+
|
|
126
|
+
for dirname in "plain" "with spaces"; do
|
|
127
|
+
echo "--- repo root: .../$dirname"
|
|
128
|
+
|
|
129
|
+
R="$(case_in "$dirname")"
|
|
130
|
+
expect "clean tree passes" "$R" zero
|
|
131
|
+
|
|
132
|
+
R="$(case_in "$dirname")"
|
|
133
|
+
printf 'Use TeamCreate to spawn the team\n' >> "$R/plugins/chorus/skills/note.md"
|
|
134
|
+
expect "check 1 catches TeamCreate" "$R" nonzero
|
|
135
|
+
|
|
136
|
+
R="$(case_in "$dirname")"
|
|
137
|
+
printf 'Run the reviewer synchronously and read the result\n' \
|
|
138
|
+
>> "$R/public/chorus-plugin/skills/develop/SKILL.md"
|
|
139
|
+
expect "check 2 catches 'reviewer synchronously'" "$R" nonzero
|
|
140
|
+
|
|
141
|
+
R="$(case_in "$dirname")"
|
|
142
|
+
printf 'the subagent waits and returns the VERDICT to you\n' \
|
|
143
|
+
>> "$R/public/kiro-plugin/.kiro/skills/SKILL.md"
|
|
144
|
+
expect "check 2 catches 'waits and returns the VERDICT' (kiro)" "$R" nonzero
|
|
145
|
+
|
|
146
|
+
R="$(case_in "$dirname")"
|
|
147
|
+
printf 'spawn it in **foreground** so it blocks\n' >> "$R/packages/chorus-dsh/skills/SKILL.md"
|
|
148
|
+
expect "check 2 catches 'in **foreground**' (dsh)" "$R" nonzero
|
|
149
|
+
|
|
150
|
+
R="$(case_in "$dirname")"
|
|
151
|
+
printf 'the launch returns the VERDICT inline\n' \
|
|
152
|
+
>> "$R/public/chorus-plugin/skills/develop/SKILL.md"
|
|
153
|
+
expect "check 2 catches 'returns the VERDICT inline'" "$R" nonzero
|
|
154
|
+
|
|
155
|
+
# dsh legitimately keeps run_in_background: false, so only this exact
|
|
156
|
+
# parenthesised imperative is blacklisted — not the flag itself.
|
|
157
|
+
R="$(case_in "$dirname")"
|
|
158
|
+
printf 'wait for it (do NOT set run_in_background)\n' \
|
|
159
|
+
>> "$R/packages/chorus-dsh/skills/SKILL.md"
|
|
160
|
+
expect "check 2 catches '(do NOT set run_in_background)' (dsh)" "$R" nonzero
|
|
161
|
+
|
|
162
|
+
R="$(case_in "$dirname")"
|
|
163
|
+
printf 'Copy .chorus/specs/TEMPLATE/spec.md to start\n' >> "$R/docs/SPEC_LITE.md"
|
|
164
|
+
expect "check 3 catches .chorus/specs/TEMPLATE" "$R" nonzero
|
|
165
|
+
|
|
166
|
+
# chorus-pi is excluded from check 2 on purpose: its blocking `subagent` really
|
|
167
|
+
# does return the VERDICT, so the phrase is true there and must NOT trip a FAIL.
|
|
168
|
+
R="$(case_in "$dirname")"
|
|
169
|
+
mkdir -p "$R/packages/chorus-pi/skills"
|
|
170
|
+
printf 'the blocking subagent waits and returns the VERDICT\n' \
|
|
171
|
+
>> "$R/packages/chorus-pi/skills/SKILL.md"
|
|
172
|
+
expect "check 2 still exempts packages/chorus-pi" "$R" zero
|
|
173
|
+
|
|
174
|
+
# dsh's real wording must stay green. If someone later replaces the literal
|
|
175
|
+
# blacklist with a proximity rule pairing run_in_background against
|
|
176
|
+
# "foreground"/"synchronous"/"inline", this case fails a correct tree — which
|
|
177
|
+
# is exactly the regression the guard's header forbids.
|
|
178
|
+
R="$(case_in "$dirname")"
|
|
179
|
+
printf 'Spawn the reviewer with run_in_background: false and read its result.\n' \
|
|
180
|
+
>> "$R/packages/chorus-dsh/skills/SKILL.md"
|
|
181
|
+
expect "check 2 allows dsh's legitimate run_in_background: false" "$R" zero
|
|
182
|
+
|
|
183
|
+
# A scan that cannot run must never look like "no hits".
|
|
184
|
+
R="$(case_in "$dirname")"
|
|
185
|
+
rm -rf "$R/packages/chorus-dsh"
|
|
186
|
+
expect "missing scope path fails instead of passing" "$R" nonzero
|
|
187
|
+
|
|
188
|
+
# ── Check 4 — shell-disabled claims, one fixture per phrasing family ──────
|
|
189
|
+
R="$(case_in "$dirname")"
|
|
190
|
+
printf -- '- **You are READ-ONLY.** Do NOT run Bash.\n' \
|
|
191
|
+
>> "$R/packages/chorus-dsh/skills/proposal-reviewer-chorus/SKILL.md"
|
|
192
|
+
expect "check 4 catches 'Do NOT run Bash' (dsh reviewer)" "$R" nonzero
|
|
193
|
+
|
|
194
|
+
R="$(case_in "$dirname")"
|
|
195
|
+
printf 'You have `read` and `@chorus` tools — no `shell`, no `write`.\n' \
|
|
196
|
+
>> "$R/public/kiro-plugin/.kiro/agents/chorus-proposal-reviewer.json"
|
|
197
|
+
expect "check 4 catches 'no \`shell\`' (kiro reviewer)" "$R" nonzero
|
|
198
|
+
|
|
199
|
+
R="$(case_in "$dirname")"
|
|
200
|
+
printf 'Bash is disabled for this agent.\n' \
|
|
201
|
+
>> "$R/packages/chorus-pi/agents/chorus-proposal-reviewer.md"
|
|
202
|
+
expect "check 4 catches 'Bash is disabled' (pi reviewer)" "$R" nonzero
|
|
203
|
+
|
|
204
|
+
R="$(case_in "$dirname")"
|
|
205
|
+
printf 'Running any shell commands is prohibited.\n' \
|
|
206
|
+
>> "$R/plugins/chorus/skills/chorus-proposal-reviewer/SKILL.md"
|
|
207
|
+
expect "check 4 catches 'Running any shell commands' (codex reviewer)" "$R" nonzero
|
|
208
|
+
|
|
209
|
+
R="$(case_in "$dirname")"
|
|
210
|
+
printf 'You cannot run shell commands.\n' \
|
|
211
|
+
>> "$R/public/skill/proposal-reviewer-chorus/SKILL.md"
|
|
212
|
+
expect "check 4 catches 'cannot run shell' (standalone skill)" "$R" nonzero
|
|
213
|
+
|
|
214
|
+
R="$(case_in "$dirname")"
|
|
215
|
+
printf 'Do not edit files or run Bash commands.\n' \
|
|
216
|
+
>> "$R/packages/openclaw-plugin/skills/proposal-reviewer/SKILL.md"
|
|
217
|
+
expect "check 4 catches 'or run Bash commands' (openclaw reviewer)" "$R" nonzero
|
|
218
|
+
|
|
219
|
+
# Check 4's extra scope: the orchestrator prompt and the steering doc. These two
|
|
220
|
+
# carried the "no `shell`" claim while sitting outside the guard, which is how the
|
|
221
|
+
# false statement survived the fix — so each gets its own fixture.
|
|
222
|
+
R="$(case_in "$dirname")"
|
|
223
|
+
printf 'Each reviewer is scoped `tools: ["read", "@chorus"]`, no `shell`.\n' \
|
|
224
|
+
>> "$R/public/kiro-plugin/.kiro/agents/chorus.md"
|
|
225
|
+
expect "check 4 catches 'no \`shell\`' (kiro orchestrator prompt)" "$R" nonzero
|
|
226
|
+
|
|
227
|
+
R="$(case_in "$dirname")"
|
|
228
|
+
printf 'The reviewer cannot run shell commands.\n' \
|
|
229
|
+
>> "$R/public/kiro-plugin/.kiro/steering/chorus.md"
|
|
230
|
+
expect "check 4 catches 'cannot run shell' (kiro steering doc)" "$R" nonzero
|
|
231
|
+
|
|
232
|
+
R="$(case_in "$dirname")"
|
|
233
|
+
rm -f "$R/public/kiro-plugin/.kiro/agents/chorus.md"
|
|
234
|
+
expect "a deleted check-4-only file fails instead of being skipped" "$R" nonzero
|
|
235
|
+
|
|
236
|
+
# The clean tree passes with neither of those two files carrying the canonical
|
|
237
|
+
# rule markers — that is check 5 correctly ignoring them (they are orchestrator
|
|
238
|
+
# prose, not reviewer definitions). Adding them to PR_FILES would break it.
|
|
239
|
+
|
|
240
|
+
# The truthful sentence every surface keeps must NOT trip check 4. This is the
|
|
241
|
+
# false positive an under-anchored blacklist (a bare "shell"/"Bash") would cause.
|
|
242
|
+
R="$(case_in "$dirname")"
|
|
243
|
+
printf 'Any shell command beyond read-only inspection — no git write ops.\n' \
|
|
244
|
+
>> "$R/public/skill/proposal-reviewer-chorus/SKILL.md"
|
|
245
|
+
expect "check 4 allows the truthful 'beyond read-only inspection' prose" "$R" zero
|
|
246
|
+
|
|
247
|
+
# ── Check 5 — the canonical rule must be present, all three markers ───────
|
|
248
|
+
R="$(case_in "$dirname")"
|
|
249
|
+
grep -v 'READ-ONLY inspection only' \
|
|
250
|
+
"$R/packages/openclaw-plugin/skills/proposal-reviewer/SKILL.md" > "$R/tmp.md"
|
|
251
|
+
mv "$R/tmp.md" "$R/packages/openclaw-plugin/skills/proposal-reviewer/SKILL.md"
|
|
252
|
+
expect "check 5 catches a missing read-only-inspection marker (openclaw)" "$R" nonzero
|
|
253
|
+
|
|
254
|
+
R="$(case_in "$dirname")"
|
|
255
|
+
grep -v 'before flagging it as missing' \
|
|
256
|
+
"$R/packages/chorus-dsh/skills/proposal-reviewer-chorus/SKILL.md" > "$R/tmp.md"
|
|
257
|
+
mv "$R/tmp.md" "$R/packages/chorus-dsh/skills/proposal-reviewer-chorus/SKILL.md"
|
|
258
|
+
expect "check 5 catches a missing existence-check obligation (dsh)" "$R" nonzero
|
|
259
|
+
|
|
260
|
+
R="$(case_in "$dirname")"
|
|
261
|
+
grep -v 'no installs, no test/build runs' \
|
|
262
|
+
"$R/packages/chorus-pi/agents/chorus-proposal-reviewer.md" > "$R/tmp.md"
|
|
263
|
+
mv "$R/tmp.md" "$R/packages/chorus-pi/agents/chorus-proposal-reviewer.md"
|
|
264
|
+
expect "check 5 catches a missing forbidden-command list (pi)" "$R" nonzero
|
|
265
|
+
|
|
266
|
+
# ── Enumerated path deleted — must FAIL, never be silently skipped ────────
|
|
267
|
+
R="$(case_in "$dirname")"
|
|
268
|
+
rm -f "$R/public/skill/proposal-reviewer-chorus/SKILL.md"
|
|
269
|
+
expect "a deleted enumerated surface fails instead of being skipped" "$R" nonzero
|
|
270
|
+
|
|
271
|
+
# ── Check 6 — the tool grants behind the rule ────────────────────────────
|
|
272
|
+
R="$(case_in "$dirname")"
|
|
273
|
+
# awk, not `sed 's/…/…\n…/'` — BSD sed (macOS) does not expand \n in the
|
|
274
|
+
# replacement, so the sed form would silently insert a literal "n" and the
|
|
275
|
+
# fixture would prove nothing.
|
|
276
|
+
awk '{print} /^ - Agent$/{print " - Bash"}' \
|
|
277
|
+
"$R/public/chorus-plugin/agents/proposal-reviewer.md" > "$R/tmp.md"
|
|
278
|
+
mv "$R/tmp.md" "$R/public/chorus-plugin/agents/proposal-reviewer.md"
|
|
279
|
+
expect "check 6 catches '- Bash' re-added to disallowedTools (claude code)" "$R" nonzero
|
|
280
|
+
|
|
281
|
+
# Two evasions of a whole-line `- Bash` match, both of which YAML accepts and a
|
|
282
|
+
# harness would honour: flow style, and a quoted entry.
|
|
283
|
+
R="$(case_in "$dirname")"
|
|
284
|
+
awk '/^disallowedTools:$/{print "disallowedTools: [Bash, Agent, Edit, Write]"; skip=1; next}
|
|
285
|
+
skip&&/^[[:space:]]*-[[:space:]]/{next} {skip=0; print}' \
|
|
286
|
+
"$R/public/chorus-plugin/agents/proposal-reviewer.md" > "$R/tmp.md"
|
|
287
|
+
mv "$R/tmp.md" "$R/public/chorus-plugin/agents/proposal-reviewer.md"
|
|
288
|
+
expect "check 6 catches Bash in a YAML flow-style disallowedTools (claude code)" "$R" nonzero
|
|
289
|
+
|
|
290
|
+
R="$(case_in "$dirname")"
|
|
291
|
+
awk '{print} /^ - Agent$/{print " - \"Bash\""}' \
|
|
292
|
+
"$R/public/chorus-plugin/agents/proposal-reviewer.md" > "$R/tmp.md"
|
|
293
|
+
mv "$R/tmp.md" "$R/public/chorus-plugin/agents/proposal-reviewer.md"
|
|
294
|
+
expect "check 6 catches a quoted '- \"Bash\"' entry (claude code)" "$R" nonzero
|
|
295
|
+
|
|
296
|
+
# Two more evasions YAML accepts inside the list: a `#` comment line and a blank
|
|
297
|
+
# line before `- Bash`. An extractor that treats either as the end of the list
|
|
298
|
+
# reports PASS on a tree whose deny list really does contain Bash.
|
|
299
|
+
R="$(case_in "$dirname")"
|
|
300
|
+
awk '{print} /^ - Agent$/{print " # restrict shell"; print " - Bash"}' \
|
|
301
|
+
"$R/public/chorus-plugin/agents/proposal-reviewer.md" > "$R/tmp.md"
|
|
302
|
+
mv "$R/tmp.md" "$R/public/chorus-plugin/agents/proposal-reviewer.md"
|
|
303
|
+
expect "check 6 catches '- Bash' after a comment line in the list (claude code)" "$R" nonzero
|
|
304
|
+
|
|
305
|
+
R="$(case_in "$dirname")"
|
|
306
|
+
awk '{print} /^ - Agent$/{print ""; print " - Bash"}' \
|
|
307
|
+
"$R/public/chorus-plugin/agents/proposal-reviewer.md" > "$R/tmp.md"
|
|
308
|
+
mv "$R/tmp.md" "$R/public/chorus-plugin/agents/proposal-reviewer.md"
|
|
309
|
+
expect "check 6 catches '- Bash' after a blank line in the list (claude code)" "$R" nonzero
|
|
310
|
+
|
|
311
|
+
R="$(case_in "$dirname")"
|
|
312
|
+
grep -v '"shell",' "$R/public/kiro-plugin/.kiro/agents/chorus-proposal-reviewer.json" \
|
|
313
|
+
> "$R/tmp.json"
|
|
314
|
+
mv "$R/tmp.json" "$R/public/kiro-plugin/.kiro/agents/chorus-proposal-reviewer.json"
|
|
315
|
+
expect "check 6 catches \`shell\` dropped from kiro's tools" "$R" nonzero
|
|
316
|
+
|
|
317
|
+
# A `Bash` mention elsewhere in the Claude Code agent body is not a tool denial —
|
|
318
|
+
# only a `- Bash` entry inside the disallowedTools list is.
|
|
319
|
+
R="$(case_in "$dirname")"
|
|
320
|
+
printf 'Bash inspection findings belong in the VERDICT comment.\n' \
|
|
321
|
+
>> "$R/public/chorus-plugin/agents/proposal-reviewer.md"
|
|
322
|
+
expect "check 6 does not fire on 'Bash' outside the disallowedTools list" "$R" zero
|
|
323
|
+
|
|
324
|
+
echo ""
|
|
325
|
+
done
|
|
326
|
+
|
|
327
|
+
echo "Results: $PASS passed, $FAIL failed"
|
|
328
|
+
[ "$FAIL" -eq 0 ]
|