crewly 1.12.1 → 1.13.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/config/skills/_common/complete-body-shape.test.sh +113 -0
- package/config/skills/_common/no-dangling-symlinks.test.sh +63 -0
- package/config/skills/_common/task-pool-body-shape.test.sh +471 -0
- package/config/skills/agent/core/accept-task/execute.sh +30 -5
- package/config/skills/agent/core/block-task/execute.sh +59 -6
- package/config/skills/agent/core/complete-task/SKILL.md +37 -5
- package/config/skills/agent/core/complete-task/execute.sh +40 -9
- package/config/skills/agent/core/complete-task/execute.test.sh +213 -0
- package/config/skills/agent/core/create-task/SKILL.md +33 -0
- package/config/skills/agent/core/create-task/execute.sh +82 -23
- package/config/skills/agent/core/delegate-task/execute.sh +46 -0
- package/config/skills/agent/core/get-team-norms/SKILL.md +1 -1
- package/config/skills/agent/core/get-team-norms/execute.sh +73 -2
- package/config/skills/agent/core/handoff-task/execute.sh +8 -1
- package/config/skills/agent/core/report-status/SKILL.md +26 -0
- package/config/skills/agent/core/report-status/execute.sh +40 -5
- package/config/skills/orchestrator/delegate-task/SKILL.md +1 -1
- package/config/skills/orchestrator/delegate-task/execute.sh +45 -11
- package/config/skills/orchestrator/delegate-task/execute.test.sh +153 -1
- package/config/skills/team-leader/aggregate-results/SKILL.md +1 -1
- package/config/skills/team-leader/decompose-goal/execute.sh +11 -16
- package/config/skills/team-leader/delegate-task/SKILL.md +14 -1
- package/config/skills/team-leader/delegate-task/execute.sh +132 -43
- package/config/skills/team-leader/delegate-task/execute.test.sh +180 -27
- package/config/vitest-exclude.constants.ts +56 -0
- package/dist/backend/backend/src/controllers/chat/chat.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/chat/chat.controller.js +29 -7
- package/dist/backend/backend/src/controllers/chat/chat.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/cloud/cloud.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/cloud/cloud.controller.js +1 -1
- package/dist/backend/backend/src/controllers/cloud/cloud.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/monitoring/terminal.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/monitoring/terminal.controller.js +18 -3
- package/dist/backend/backend/src/controllers/monitoring/terminal.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/slack/slack.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/slack/slack.controller.js +18 -15
- package/dist/backend/backend/src/controllers/slack/slack.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.d.ts +6 -1
- package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.js +19 -10
- package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.js.map +1 -1
- package/dist/backend/backend/src/index.d.ts.map +1 -1
- package/dist/backend/backend/src/index.js +20 -0
- package/dist/backend/backend/src/index.js.map +1 -1
- package/dist/backend/backend/src/scripts/stamp-build.d.ts +25 -0
- package/dist/backend/backend/src/scripts/stamp-build.d.ts.map +1 -0
- package/dist/backend/backend/src/scripts/stamp-build.js +48 -0
- package/dist/backend/backend/src/scripts/stamp-build.js.map +1 -0
- package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/agent-registration.service.js +33 -1
- package/dist/backend/backend/src/services/agent/agent-registration.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.d.ts +78 -2
- package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.js +248 -44
- package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/types.d.ts +51 -3
- package/dist/backend/backend/src/services/agent/crewly-agent/types.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/types.js +31 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/types.js.map +1 -1
- package/dist/backend/backend/src/services/cloud/cloud-client.service.d.ts +5 -0
- package/dist/backend/backend/src/services/cloud/cloud-client.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/cloud/cloud-client.service.js +7 -0
- package/dist/backend/backend/src/services/cloud/cloud-client.service.js.map +1 -1
- package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.d.ts +15 -0
- package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.js +40 -0
- package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.js.map +1 -1
- package/dist/backend/backend/src/services/orchestrator/commitment-approval-guard.d.ts.map +1 -1
- package/dist/backend/backend/src/services/orchestrator/commitment-approval-guard.js +26 -0
- package/dist/backend/backend/src/services/orchestrator/commitment-approval-guard.js.map +1 -1
- package/dist/backend/backend/src/services/orchestrator/onboarding/materialize-team.d.ts.map +1 -1
- package/dist/backend/backend/src/services/orchestrator/onboarding/materialize-team.js +19 -3
- package/dist/backend/backend/src/services/orchestrator/onboarding/materialize-team.js.map +1 -1
- package/dist/backend/backend/src/services/orchestrator/orchestrator-status.service.d.ts +28 -3
- package/dist/backend/backend/src/services/orchestrator/orchestrator-status.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/orchestrator/orchestrator-status.service.js +65 -8
- package/dist/backend/backend/src/services/orchestrator/orchestrator-status.service.js.map +1 -1
- package/dist/backend/backend/src/services/reconciler/reconcile-rules.d.ts +214 -4
- package/dist/backend/backend/src/services/reconciler/reconcile-rules.d.ts.map +1 -1
- package/dist/backend/backend/src/services/reconciler/reconcile-rules.js +330 -48
- package/dist/backend/backend/src/services/reconciler/reconcile-rules.js.map +1 -1
- package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.d.ts +13 -1
- package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.d.ts.map +1 -1
- package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.js +84 -5
- package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.js.map +1 -1
- package/dist/backend/backend/src/services/reconciler/reconciler.service.d.ts +14 -0
- package/dist/backend/backend/src/services/reconciler/reconciler.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/reconciler/reconciler.service.js +77 -3
- package/dist/backend/backend/src/services/reconciler/reconciler.service.js.map +1 -1
- package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts +152 -7
- package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/task-pool/task-pool.service.js +268 -36
- package/dist/backend/backend/src/services/task-pool/task-pool.service.js.map +1 -1
- package/dist/backend/backend/src/services/v3/escalation-router.service.js +2 -2
- package/dist/backend/backend/src/services/v3/escalation-router.service.js.map +1 -1
- package/dist/backend/backend/src/services/v3/request-sla.subscriber.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/request-sla.subscriber.js +39 -2
- package/dist/backend/backend/src/services/v3/request-sla.subscriber.js.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-migrate.service.d.ts +3 -0
- package/dist/backend/backend/src/services/wiki/wiki-migrate.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-migrate.service.js +21 -10
- package/dist/backend/backend/src/services/wiki/wiki-migrate.service.js.map +1 -1
- package/dist/backend/backend/src/types/v2/index.d.ts +1 -1
- package/dist/backend/backend/src/types/v2/index.d.ts.map +1 -1
- package/dist/backend/backend/src/types/v2/index.js +1 -1
- package/dist/backend/backend/src/types/v2/index.js.map +1 -1
- package/dist/backend/backend/src/types/v2/work-item.types.d.ts +181 -1
- package/dist/backend/backend/src/types/v2/work-item.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/v2/work-item.types.js +104 -17
- package/dist/backend/backend/src/types/v2/work-item.types.js.map +1 -1
- package/dist/backend/backend/src/utils/build-provenance.d.ts +150 -0
- package/dist/backend/backend/src/utils/build-provenance.d.ts.map +1 -0
- package/dist/backend/backend/src/utils/build-provenance.js +211 -0
- package/dist/backend/backend/src/utils/build-provenance.js.map +1 -0
- package/dist/backend/backend/src/websocket/chat.gateway.d.ts.map +1 -1
- package/dist/backend/backend/src/websocket/chat.gateway.js +7 -1
- package/dist/backend/backend/src/websocket/chat.gateway.js.map +1 -1
- package/dist/backend/build-info.json +4 -0
- package/dist/backend/config/vitest-exclude.constants.d.ts +53 -0
- package/dist/backend/config/vitest-exclude.constants.d.ts.map +1 -0
- package/dist/backend/config/vitest-exclude.constants.js +55 -0
- package/dist/backend/config/vitest-exclude.constants.js.map +1 -0
- package/dist/cli/backend/src/services/agent/active-work-briefing.service.d.ts +538 -0
- package/dist/cli/backend/src/services/agent/active-work-briefing.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/agent/active-work-briefing.service.js +802 -0
- package/dist/cli/backend/src/services/agent/active-work-briefing.service.js.map +1 -0
- package/dist/cli/backend/src/services/agent/agent-heartbeat.service.d.ts +240 -0
- package/dist/cli/backend/src/services/agent/agent-heartbeat.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/agent/agent-heartbeat.service.js +524 -0
- package/dist/cli/backend/src/services/agent/agent-heartbeat.service.js.map +1 -0
- package/dist/cli/backend/src/services/agent/agent-registration.service.d.ts +629 -0
- package/dist/cli/backend/src/services/agent/agent-registration.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/agent/agent-registration.service.js +4548 -0
- package/dist/cli/backend/src/services/agent/agent-registration.service.js.map +1 -0
- package/dist/cli/backend/src/services/agent/agent-suspend.service.d.ts +118 -0
- package/dist/cli/backend/src/services/agent/agent-suspend.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/agent/agent-suspend.service.js +304 -0
- package/dist/cli/backend/src/services/agent/agent-suspend.service.js.map +1 -0
- package/dist/cli/backend/src/services/agent/auditor-scheduler.service.d.ts +196 -0
- package/dist/cli/backend/src/services/agent/auditor-scheduler.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/agent/auditor-scheduler.service.js +504 -0
- package/dist/cli/backend/src/services/agent/auditor-scheduler.service.js.map +1 -0
- package/dist/cli/backend/src/services/agent/claude-runtime.service.d.ts +97 -0
- package/dist/cli/backend/src/services/agent/claude-runtime.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/agent/claude-runtime.service.js +334 -0
- package/dist/cli/backend/src/services/agent/claude-runtime.service.js.map +1 -0
- package/dist/cli/backend/src/services/agent/codex-runtime.service.d.ts +47 -0
- package/dist/cli/backend/src/services/agent/codex-runtime.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/agent/codex-runtime.service.js +112 -0
- package/dist/cli/backend/src/services/agent/codex-runtime.service.js.map +1 -0
- package/dist/cli/backend/src/services/agent/context-window-monitor.service.d.ts +323 -0
- package/dist/cli/backend/src/services/agent/context-window-monitor.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/agent/context-window-monitor.service.js +1056 -0
- package/dist/cli/backend/src/services/agent/context-window-monitor.service.js.map +1 -0
- package/dist/cli/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.d.ts +198 -0
- package/dist/cli/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.js +816 -0
- package/dist/cli/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.js.map +1 -0
- package/dist/cli/backend/src/services/agent/crewly-agent/in-process-log-buffer.d.ts +155 -0
- package/dist/cli/backend/src/services/agent/crewly-agent/in-process-log-buffer.d.ts.map +1 -0
- package/dist/cli/backend/src/services/agent/crewly-agent/in-process-log-buffer.js +272 -0
- package/dist/cli/backend/src/services/agent/crewly-agent/in-process-log-buffer.js.map +1 -0
- package/dist/cli/backend/src/services/agent/crewly-agent/in-process-runtime-registry.d.ts +91 -0
- package/dist/cli/backend/src/services/agent/crewly-agent/in-process-runtime-registry.d.ts.map +1 -0
- package/dist/cli/backend/src/services/agent/crewly-agent/in-process-runtime-registry.js +120 -0
- package/dist/cli/backend/src/services/agent/crewly-agent/in-process-runtime-registry.js.map +1 -0
- package/dist/cli/backend/src/services/agent/crewly-agent/types.d.ts +536 -0
- package/dist/cli/backend/src/services/agent/crewly-agent/types.d.ts.map +1 -0
- package/dist/cli/backend/src/services/agent/crewly-agent/types.js +282 -0
- package/dist/cli/backend/src/services/agent/crewly-agent/types.js.map +1 -0
- package/dist/cli/backend/src/services/agent/disk-cleanup.service.d.ts +100 -0
- package/dist/cli/backend/src/services/agent/disk-cleanup.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/agent/disk-cleanup.service.js +149 -0
- package/dist/cli/backend/src/services/agent/disk-cleanup.service.js.map +1 -0
- package/dist/cli/backend/src/services/agent/gemini-runtime.service.d.ts +130 -0
- package/dist/cli/backend/src/services/agent/gemini-runtime.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/agent/gemini-runtime.service.js +758 -0
- package/dist/cli/backend/src/services/agent/gemini-runtime.service.js.map +1 -0
- package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.d.ts +216 -0
- package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.js +508 -0
- package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.js.map +1 -0
- package/dist/cli/backend/src/services/agent/pty-activity-tracker.service.d.ts +113 -0
- package/dist/cli/backend/src/services/agent/pty-activity-tracker.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/agent/pty-activity-tracker.service.js +161 -0
- package/dist/cli/backend/src/services/agent/pty-activity-tracker.service.js.map +1 -0
- package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.d.ts +156 -0
- package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.d.ts.map +1 -0
- package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.js +641 -0
- package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.js.map +1 -0
- package/dist/cli/backend/src/services/agent/runtime-exit-monitor.service.d.ts +295 -0
- package/dist/cli/backend/src/services/agent/runtime-exit-monitor.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/agent/runtime-exit-monitor.service.js +1166 -0
- package/dist/cli/backend/src/services/agent/runtime-exit-monitor.service.js.map +1 -0
- package/dist/cli/backend/src/services/agent/runtime-service.factory.d.ts +71 -0
- package/dist/cli/backend/src/services/agent/runtime-service.factory.d.ts.map +1 -0
- package/dist/cli/backend/src/services/agent/runtime-service.factory.js +174 -0
- package/dist/cli/backend/src/services/agent/runtime-service.factory.js.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-builder.service.d.ts +435 -0
- package/dist/cli/backend/src/services/ai/prompt-builder.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-builder.service.js +1331 -0
- package/dist/cli/backend/src/services/ai/prompt-builder.service.js.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/capability-overlay.module.d.ts +33 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/capability-overlay.module.d.ts.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/capability-overlay.module.js +70 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/capability-overlay.module.js.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/communication.module.d.ts +100 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/communication.module.d.ts.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/communication.module.js +296 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/communication.module.js.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/decision-rights.module.d.ts +59 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/decision-rights.module.d.ts.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/decision-rights.module.js +87 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/decision-rights.module.js.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/default-execution-loop.module.d.ts +67 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/default-execution-loop.module.d.ts.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/default-execution-loop.module.js +84 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/default-execution-loop.module.js.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/domain-sop.module.d.ts +35 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/domain-sop.module.d.ts.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/domain-sop.module.js +50 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/domain-sop.module.js.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/expert-profile.module.d.ts +41 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/expert-profile.module.d.ts.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/expert-profile.module.js +95 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/expert-profile.module.js.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/identity.module.d.ts +28 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/identity.module.d.ts.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/identity.module.js +47 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/identity.module.js.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/lazy-anti-patterns.module.d.ts +65 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/lazy-anti-patterns.module.d.ts.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/lazy-anti-patterns.module.js +79 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/lazy-anti-patterns.module.js.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/learning-reference.module.d.ts +28 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/learning-reference.module.d.ts.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/learning-reference.module.js +55 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/learning-reference.module.js.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/lifecycle.module.d.ts +44 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/lifecycle.module.d.ts.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/lifecycle.module.js +120 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/lifecycle.module.js.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/markdown-file-module.d.ts +46 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/markdown-file-module.d.ts.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/markdown-file-module.js +44 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/markdown-file-module.js.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/memory-reference.module.d.ts +28 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/memory-reference.module.d.ts.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/memory-reference.module.js +46 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/memory-reference.module.js.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/mission-context.module.d.ts +60 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/mission-context.module.d.ts.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/mission-context.module.js +104 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/mission-context.module.js.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/project-reference.module.d.ts +29 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/project-reference.module.d.ts.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/project-reference.module.js +50 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/project-reference.module.js.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/prompt-assembly.service.d.ts +103 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/prompt-assembly.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/prompt-assembly.service.js +383 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/prompt-assembly.service.js.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/recovery.module.d.ts +34 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/recovery.module.d.ts.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/recovery.module.js +96 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/recovery.module.js.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/request-contract.module.d.ts +106 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/request-contract.module.d.ts.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/request-contract.module.js +167 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/request-contract.module.js.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/risk-policy.module.d.ts +35 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/risk-policy.module.d.ts.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/risk-policy.module.js +50 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/risk-policy.module.js.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/role-boundary.module.d.ts +91 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/role-boundary.module.d.ts.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/role-boundary.module.js +411 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/role-boundary.module.js.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.d.ts +62 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.d.ts.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.js +199 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.js.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/sop-norm-distinction.module.d.ts +79 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/sop-norm-distinction.module.d.ts.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/sop-norm-distinction.module.js +118 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/sop-norm-distinction.module.js.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/soul.module.d.ts +102 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/soul.module.d.ts.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/soul.module.js +229 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/soul.module.js.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/team-norms.module.d.ts +61 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/team-norms.module.d.ts.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/team-norms.module.js +197 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/team-norms.module.js.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/team-reference.module.d.ts +54 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/team-reference.module.d.ts.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/team-reference.module.js +149 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/team-reference.module.js.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/user-profile-reference.module.d.ts +32 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/user-profile-reference.module.d.ts.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/user-profile-reference.module.js +69 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/user-profile-reference.module.js.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/working-memory.module.d.ts +91 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/working-memory.module.d.ts.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/working-memory.module.js +136 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/working-memory.module.js.map +1 -0
- package/dist/cli/backend/src/services/ai/self-improvement/growth-areas.service.d.ts +81 -0
- package/dist/cli/backend/src/services/ai/self-improvement/growth-areas.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/ai/self-improvement/growth-areas.service.js +135 -0
- package/dist/cli/backend/src/services/ai/self-improvement/growth-areas.service.js.map +1 -0
- package/dist/cli/backend/src/services/chat-v2/chat-v2.service.d.ts +737 -0
- package/dist/cli/backend/src/services/chat-v2/chat-v2.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/chat-v2/chat-v2.service.js +1213 -0
- package/dist/cli/backend/src/services/chat-v2/chat-v2.service.js.map +1 -0
- package/dist/cli/backend/src/services/chat-v2/chat-v2.singleton.d.ts +27 -0
- package/dist/cli/backend/src/services/chat-v2/chat-v2.singleton.d.ts.map +1 -0
- package/dist/cli/backend/src/services/chat-v2/chat-v2.singleton.js +57 -0
- package/dist/cli/backend/src/services/chat-v2/chat-v2.singleton.js.map +1 -0
- package/dist/cli/backend/src/services/chat-v2/config.d.ts +100 -0
- package/dist/cli/backend/src/services/chat-v2/config.d.ts.map +1 -0
- package/dist/cli/backend/src/services/chat-v2/config.js +174 -0
- package/dist/cli/backend/src/services/chat-v2/config.js.map +1 -0
- package/dist/cli/backend/src/services/chat-v2/legacy-dto.utils.d.ts +118 -0
- package/dist/cli/backend/src/services/chat-v2/legacy-dto.utils.d.ts.map +1 -0
- package/dist/cli/backend/src/services/chat-v2/legacy-dto.utils.js +171 -0
- package/dist/cli/backend/src/services/chat-v2/legacy-dto.utils.js.map +1 -0
- package/dist/cli/backend/src/services/chat-v2/sqlite/channel.store.d.ts +188 -0
- package/dist/cli/backend/src/services/chat-v2/sqlite/channel.store.d.ts.map +1 -0
- package/dist/cli/backend/src/services/chat-v2/sqlite/channel.store.js +317 -0
- package/dist/cli/backend/src/services/chat-v2/sqlite/channel.store.js.map +1 -0
- package/dist/cli/backend/src/services/chat-v2/sqlite/chat-db.d.ts +119 -0
- package/dist/cli/backend/src/services/chat-v2/sqlite/chat-db.d.ts.map +1 -0
- package/dist/cli/backend/src/services/chat-v2/sqlite/chat-db.js +551 -0
- package/dist/cli/backend/src/services/chat-v2/sqlite/chat-db.js.map +1 -0
- package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.d.ts +208 -0
- package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.d.ts.map +1 -0
- package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.js +405 -0
- package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.js.map +1 -0
- package/dist/cli/backend/src/services/chat-v2/types.d.ts +341 -0
- package/dist/cli/backend/src/services/chat-v2/types.d.ts.map +1 -0
- package/dist/cli/backend/src/services/chat-v2/types.js +61 -0
- package/dist/cli/backend/src/services/chat-v2/types.js.map +1 -0
- package/dist/cli/backend/src/services/cloud/cloud-client.service.d.ts +5 -0
- package/dist/cli/backend/src/services/cloud/cloud-client.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/cloud/cloud-client.service.js +7 -0
- package/dist/cli/backend/src/services/cloud/cloud-client.service.js.map +1 -1
- package/dist/cli/backend/src/services/continuation/patterns/idle-patterns.d.ts +37 -0
- package/dist/cli/backend/src/services/continuation/patterns/idle-patterns.d.ts.map +1 -0
- package/dist/cli/backend/src/services/continuation/patterns/idle-patterns.js +63 -0
- package/dist/cli/backend/src/services/continuation/patterns/idle-patterns.js.map +1 -0
- package/dist/cli/backend/src/services/intent-task/intent-classifier.rules.d.ts +335 -0
- package/dist/cli/backend/src/services/intent-task/intent-classifier.rules.d.ts.map +1 -0
- package/dist/cli/backend/src/services/intent-task/intent-classifier.rules.js +421 -0
- package/dist/cli/backend/src/services/intent-task/intent-classifier.rules.js.map +1 -0
- package/dist/cli/backend/src/services/mcp-client.d.ts +233 -0
- package/dist/cli/backend/src/services/mcp-client.d.ts.map +1 -0
- package/dist/cli/backend/src/services/mcp-client.js +302 -0
- package/dist/cli/backend/src/services/mcp-client.js.map +1 -0
- package/dist/cli/backend/src/services/memory/mission-context.service.d.ts +168 -0
- package/dist/cli/backend/src/services/memory/mission-context.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/memory/mission-context.service.js +365 -0
- package/dist/cli/backend/src/services/memory/mission-context.service.js.map +1 -0
- package/dist/cli/backend/src/services/memory/session-memory.service.d.ts +197 -0
- package/dist/cli/backend/src/services/memory/session-memory.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/memory/session-memory.service.js +369 -0
- package/dist/cli/backend/src/services/memory/session-memory.service.js.map +1 -0
- package/dist/cli/backend/src/services/memory/user-profile.service.d.ts +77 -0
- package/dist/cli/backend/src/services/memory/user-profile.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/memory/user-profile.service.js +171 -0
- package/dist/cli/backend/src/services/memory/user-profile.service.js.map +1 -0
- package/dist/cli/backend/src/services/memory/working-memory.service.d.ts +232 -0
- package/dist/cli/backend/src/services/memory/working-memory.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/memory/working-memory.service.js +417 -0
- package/dist/cli/backend/src/services/memory/working-memory.service.js.map +1 -0
- package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.d.ts +84 -0
- package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.js +136 -0
- package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.js.map +1 -0
- package/dist/cli/backend/src/services/messaging/thread-status-queue.service.d.ts +358 -0
- package/dist/cli/backend/src/services/messaging/thread-status-queue.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/messaging/thread-status-queue.service.js +755 -0
- package/dist/cli/backend/src/services/messaging/thread-status-queue.service.js.map +1 -0
- package/dist/cli/backend/src/services/monitoring/token-usage.service.d.ts +269 -0
- package/dist/cli/backend/src/services/monitoring/token-usage.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/monitoring/token-usage.service.js +391 -0
- package/dist/cli/backend/src/services/monitoring/token-usage.service.js.map +1 -0
- package/dist/cli/backend/src/services/observability/agent-behavior-log.service.d.ts +132 -0
- package/dist/cli/backend/src/services/observability/agent-behavior-log.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/observability/agent-behavior-log.service.js +284 -0
- package/dist/cli/backend/src/services/observability/agent-behavior-log.service.js.map +1 -0
- package/dist/cli/backend/src/services/observability/agent-behavior-log.singleton.d.ts +70 -0
- package/dist/cli/backend/src/services/observability/agent-behavior-log.singleton.d.ts.map +1 -0
- package/dist/cli/backend/src/services/observability/agent-behavior-log.singleton.js +121 -0
- package/dist/cli/backend/src/services/observability/agent-behavior-log.singleton.js.map +1 -0
- package/dist/cli/backend/src/services/observability/agent-behavior-log.types.d.ts +130 -0
- package/dist/cli/backend/src/services/observability/agent-behavior-log.types.d.ts.map +1 -0
- package/dist/cli/backend/src/services/observability/agent-behavior-log.types.js +48 -0
- package/dist/cli/backend/src/services/observability/agent-behavior-log.types.js.map +1 -0
- package/dist/cli/backend/src/services/observability/observability-db.d.ts +84 -0
- package/dist/cli/backend/src/services/observability/observability-db.d.ts.map +1 -0
- package/dist/cli/backend/src/services/observability/observability-db.js +165 -0
- package/dist/cli/backend/src/services/observability/observability-db.js.map +1 -0
- package/dist/cli/backend/src/services/onboarding/content-approval.service.d.ts +124 -0
- package/dist/cli/backend/src/services/onboarding/content-approval.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/onboarding/content-approval.service.js +256 -0
- package/dist/cli/backend/src/services/onboarding/content-approval.service.js.map +1 -0
- package/dist/cli/backend/src/services/onboarding/content-approval.types.d.ts +80 -0
- package/dist/cli/backend/src/services/onboarding/content-approval.types.d.ts.map +1 -0
- package/dist/cli/backend/src/services/onboarding/content-approval.types.js +16 -0
- package/dist/cli/backend/src/services/onboarding/content-approval.types.js.map +1 -0
- package/dist/cli/backend/src/services/orc/orc-delivery-enforcer.service.d.ts +142 -0
- package/dist/cli/backend/src/services/orc/orc-delivery-enforcer.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/orc/orc-delivery-enforcer.service.js +265 -0
- package/dist/cli/backend/src/services/orc/orc-delivery-enforcer.service.js.map +1 -0
- package/dist/cli/backend/src/services/orchestrator/improvement-marker.service.d.ts +231 -0
- package/dist/cli/backend/src/services/orchestrator/improvement-marker.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/orchestrator/improvement-marker.service.js +353 -0
- package/dist/cli/backend/src/services/orchestrator/improvement-marker.service.js.map +1 -0
- package/dist/cli/backend/src/services/orchestrator/improvement-startup.service.d.ts +157 -0
- package/dist/cli/backend/src/services/orchestrator/improvement-startup.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/orchestrator/improvement-startup.service.js +483 -0
- package/dist/cli/backend/src/services/orchestrator/improvement-startup.service.js.map +1 -0
- package/dist/cli/backend/src/services/orchestrator/index.d.ts +16 -0
- package/dist/cli/backend/src/services/orchestrator/index.d.ts.map +1 -0
- package/dist/cli/backend/src/services/orchestrator/index.js +16 -0
- package/dist/cli/backend/src/services/orchestrator/index.js.map +1 -0
- package/dist/cli/backend/src/services/orchestrator/orchestrator-restart.service.d.ts +117 -0
- package/dist/cli/backend/src/services/orchestrator/orchestrator-restart.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/orchestrator/orchestrator-restart.service.js +300 -0
- package/dist/cli/backend/src/services/orchestrator/orchestrator-restart.service.js.map +1 -0
- package/dist/cli/backend/src/services/orchestrator/orchestrator-setup.service.d.ts +114 -0
- package/dist/cli/backend/src/services/orchestrator/orchestrator-setup.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/orchestrator/orchestrator-setup.service.js +195 -0
- package/dist/cli/backend/src/services/orchestrator/orchestrator-setup.service.js.map +1 -0
- package/dist/cli/backend/src/services/orchestrator/orchestrator-status.service.d.ts +94 -0
- package/dist/cli/backend/src/services/orchestrator/orchestrator-status.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/orchestrator/orchestrator-status.service.js +279 -0
- package/dist/cli/backend/src/services/orchestrator/orchestrator-status.service.js.map +1 -0
- package/dist/cli/backend/src/services/orchestrator/safe-restart.service.d.ts +192 -0
- package/dist/cli/backend/src/services/orchestrator/safe-restart.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/orchestrator/safe-restart.service.js +395 -0
- package/dist/cli/backend/src/services/orchestrator/safe-restart.service.js.map +1 -0
- package/dist/cli/backend/src/services/orchestrator/self-improvement.service.d.ts +201 -0
- package/dist/cli/backend/src/services/orchestrator/self-improvement.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/orchestrator/self-improvement.service.js +396 -0
- package/dist/cli/backend/src/services/orchestrator/self-improvement.service.js.map +1 -0
- package/dist/cli/backend/src/services/orchestrator/slack-bridge-lazy.d.ts +17 -0
- package/dist/cli/backend/src/services/orchestrator/slack-bridge-lazy.d.ts.map +1 -0
- package/dist/cli/backend/src/services/orchestrator/slack-bridge-lazy.js +30 -0
- package/dist/cli/backend/src/services/orchestrator/slack-bridge-lazy.js.map +1 -0
- package/dist/cli/backend/src/services/orchestrator/state-persistence.service.d.ts +249 -0
- package/dist/cli/backend/src/services/orchestrator/state-persistence.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/orchestrator/state-persistence.service.js +569 -0
- package/dist/cli/backend/src/services/orchestrator/state-persistence.service.js.map +1 -0
- package/dist/cli/backend/src/services/session/index.d.ts +47 -0
- package/dist/cli/backend/src/services/session/index.d.ts.map +1 -0
- package/dist/cli/backend/src/services/session/index.js +50 -0
- package/dist/cli/backend/src/services/session/index.js.map +1 -0
- package/dist/cli/backend/src/services/session/log-rotation.service.d.ts +163 -0
- package/dist/cli/backend/src/services/session/log-rotation.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/session/log-rotation.service.js +362 -0
- package/dist/cli/backend/src/services/session/log-rotation.service.js.map +1 -0
- package/dist/cli/backend/src/services/session/pty/index.d.ts +11 -0
- package/dist/cli/backend/src/services/session/pty/index.d.ts.map +1 -0
- package/dist/cli/backend/src/services/session/pty/index.js +11 -0
- package/dist/cli/backend/src/services/session/pty/index.js.map +1 -0
- package/dist/cli/backend/src/services/session/pty/pty-session-backend.d.ts +445 -0
- package/dist/cli/backend/src/services/session/pty/pty-session-backend.d.ts.map +1 -0
- package/dist/cli/backend/src/services/session/pty/pty-session-backend.js +804 -0
- package/dist/cli/backend/src/services/session/pty/pty-session-backend.js.map +1 -0
- package/dist/cli/backend/src/services/session/pty/pty-session.d.ts +252 -0
- package/dist/cli/backend/src/services/session/pty/pty-session.d.ts.map +1 -0
- package/dist/cli/backend/src/services/session/pty/pty-session.js +611 -0
- package/dist/cli/backend/src/services/session/pty/pty-session.js.map +1 -0
- package/dist/cli/backend/src/services/session/pty/pty-terminal-buffer.d.ts +275 -0
- package/dist/cli/backend/src/services/session/pty/pty-terminal-buffer.d.ts.map +1 -0
- package/dist/cli/backend/src/services/session/pty/pty-terminal-buffer.js +403 -0
- package/dist/cli/backend/src/services/session/pty/pty-terminal-buffer.js.map +1 -0
- package/dist/cli/backend/src/services/session/runtime-pid-registry.service.d.ts +86 -0
- package/dist/cli/backend/src/services/session/runtime-pid-registry.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/session/runtime-pid-registry.service.js +214 -0
- package/dist/cli/backend/src/services/session/runtime-pid-registry.service.js.map +1 -0
- package/dist/cli/backend/src/services/session/session-backend.factory.d.ts +127 -0
- package/dist/cli/backend/src/services/session/session-backend.factory.d.ts.map +1 -0
- package/dist/cli/backend/src/services/session/session-backend.factory.js +226 -0
- package/dist/cli/backend/src/services/session/session-backend.factory.js.map +1 -0
- package/dist/cli/backend/src/services/session/session-backend.interface.d.ts +390 -0
- package/dist/cli/backend/src/services/session/session-backend.interface.d.ts.map +1 -0
- package/dist/cli/backend/src/services/session/session-backend.interface.js +19 -0
- package/dist/cli/backend/src/services/session/session-backend.interface.js.map +1 -0
- package/dist/cli/backend/src/services/session/session-command-helper.d.ts +350 -0
- package/dist/cli/backend/src/services/session/session-command-helper.d.ts.map +1 -0
- package/dist/cli/backend/src/services/session/session-command-helper.js +810 -0
- package/dist/cli/backend/src/services/session/session-command-helper.js.map +1 -0
- package/dist/cli/backend/src/services/session/session-handoff.service.d.ts +307 -0
- package/dist/cli/backend/src/services/session/session-handoff.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/session/session-handoff.service.js +742 -0
- package/dist/cli/backend/src/services/session/session-handoff.service.js.map +1 -0
- package/dist/cli/backend/src/services/session/session-state-persistence.d.ts +231 -0
- package/dist/cli/backend/src/services/session/session-state-persistence.d.ts.map +1 -0
- package/dist/cli/backend/src/services/session/session-state-persistence.js +407 -0
- package/dist/cli/backend/src/services/session/session-state-persistence.js.map +1 -0
- package/dist/cli/backend/src/services/settings/role.service.d.ts +277 -0
- package/dist/cli/backend/src/services/settings/role.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/settings/role.service.js +728 -0
- package/dist/cli/backend/src/services/settings/role.service.js.map +1 -0
- package/dist/cli/backend/src/services/slack/cross-machine-message.service.d.ts +152 -0
- package/dist/cli/backend/src/services/slack/cross-machine-message.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/slack/cross-machine-message.service.js +354 -0
- package/dist/cli/backend/src/services/slack/cross-machine-message.service.js.map +1 -0
- package/dist/cli/backend/src/services/slack/slack-image.service.d.ts +114 -0
- package/dist/cli/backend/src/services/slack/slack-image.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/slack/slack-image.service.js +331 -0
- package/dist/cli/backend/src/services/slack/slack-image.service.js.map +1 -0
- package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.d.ts +499 -0
- package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.d.ts.map +1 -0
- package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.js +1928 -0
- package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.js.map +1 -0
- package/dist/cli/backend/src/services/slack/slack.service.d.ts +315 -0
- package/dist/cli/backend/src/services/slack/slack.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/slack/slack.service.js +1094 -0
- package/dist/cli/backend/src/services/slack/slack.service.js.map +1 -0
- package/dist/cli/backend/src/services/sop/sop.service.d.ts +364 -0
- package/dist/cli/backend/src/services/sop/sop.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/sop/sop.service.js +734 -0
- package/dist/cli/backend/src/services/sop/sop.service.js.map +1 -0
- package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts +152 -7
- package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/task-pool/task-pool.service.js +268 -36
- package/dist/cli/backend/src/services/task-pool/task-pool.service.js.map +1 -1
- package/dist/cli/backend/src/services/v3/escalation-router.service.d.ts +178 -0
- package/dist/cli/backend/src/services/v3/escalation-router.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/v3/escalation-router.service.js +692 -0
- package/dist/cli/backend/src/services/v3/escalation-router.service.js.map +1 -0
- package/dist/cli/backend/src/services/v3/kr-tracking.service.d.ts +200 -0
- package/dist/cli/backend/src/services/v3/kr-tracking.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/v3/kr-tracking.service.js +482 -0
- package/dist/cli/backend/src/services/v3/kr-tracking.service.js.map +1 -0
- package/dist/cli/backend/src/services/v3/mission-executor.service.d.ts +117 -0
- package/dist/cli/backend/src/services/v3/mission-executor.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/v3/mission-executor.service.js +321 -0
- package/dist/cli/backend/src/services/v3/mission-executor.service.js.map +1 -0
- package/dist/cli/backend/src/services/v3/request-sla.subscriber.d.ts +610 -0
- package/dist/cli/backend/src/services/v3/request-sla.subscriber.d.ts.map +1 -0
- package/dist/cli/backend/src/services/v3/request-sla.subscriber.js +1529 -0
- package/dist/cli/backend/src/services/v3/request-sla.subscriber.js.map +1 -0
- package/dist/cli/backend/src/services/v3/request-tracker.service.d.ts +78 -0
- package/dist/cli/backend/src/services/v3/request-tracker.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/v3/request-tracker.service.js +108 -0
- package/dist/cli/backend/src/services/v3/request-tracker.service.js.map +1 -0
- package/dist/cli/backend/src/services/v3/request.service.d.ts +295 -0
- package/dist/cli/backend/src/services/v3/request.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/v3/request.service.js +534 -0
- package/dist/cli/backend/src/services/v3/request.service.js.map +1 -0
- package/dist/cli/backend/src/services/v3/v3-data.service.d.ts +340 -0
- package/dist/cli/backend/src/services/v3/v3-data.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/v3/v3-data.service.js +1113 -0
- package/dist/cli/backend/src/services/v3/v3-data.service.js.map +1 -0
- package/dist/cli/backend/src/types/cross-machine.types.d.ts +103 -0
- package/dist/cli/backend/src/types/cross-machine.types.d.ts.map +1 -0
- package/dist/cli/backend/src/types/cross-machine.types.js +47 -0
- package/dist/cli/backend/src/types/cross-machine.types.js.map +1 -0
- package/dist/cli/backend/src/types/intent-task.types.d.ts +402 -0
- package/dist/cli/backend/src/types/intent-task.types.d.ts.map +1 -0
- package/dist/cli/backend/src/types/intent-task.types.js +403 -0
- package/dist/cli/backend/src/types/intent-task.types.js.map +1 -0
- package/dist/cli/backend/src/types/orchestrator-state.types.d.ts +531 -0
- package/dist/cli/backend/src/types/orchestrator-state.types.d.ts.map +1 -0
- package/dist/cli/backend/src/types/orchestrator-state.types.js +110 -0
- package/dist/cli/backend/src/types/orchestrator-state.types.js.map +1 -0
- package/dist/cli/backend/src/types/v2/index.d.ts +30 -0
- package/dist/cli/backend/src/types/v2/index.d.ts.map +1 -0
- package/dist/cli/backend/src/types/v2/index.js +22 -0
- package/dist/cli/backend/src/types/v2/index.js.map +1 -0
- package/dist/cli/backend/src/types/v2/key-result.types.d.ts +279 -0
- package/dist/cli/backend/src/types/v2/key-result.types.d.ts.map +1 -0
- package/dist/cli/backend/src/types/v2/key-result.types.js +264 -0
- package/dist/cli/backend/src/types/v2/key-result.types.js.map +1 -0
- package/dist/cli/backend/src/types/v2/mission.types.d.ts +661 -0
- package/dist/cli/backend/src/types/v2/mission.types.d.ts.map +1 -0
- package/dist/cli/backend/src/types/v2/mission.types.js +713 -0
- package/dist/cli/backend/src/types/v2/mission.types.js.map +1 -0
- package/dist/cli/backend/src/types/v2/reconcile.types.d.ts +204 -0
- package/dist/cli/backend/src/types/v2/reconcile.types.d.ts.map +1 -0
- package/dist/cli/backend/src/types/v2/reconcile.types.js +121 -0
- package/dist/cli/backend/src/types/v2/reconcile.types.js.map +1 -0
- package/dist/cli/backend/src/types/v2/request.types.d.ts +192 -0
- package/dist/cli/backend/src/types/v2/request.types.d.ts.map +1 -0
- package/dist/cli/backend/src/types/v2/request.types.js +179 -0
- package/dist/cli/backend/src/types/v2/request.types.js.map +1 -0
- package/dist/cli/backend/src/types/v2/work-item.types.d.ts +181 -1
- package/dist/cli/backend/src/types/v2/work-item.types.d.ts.map +1 -1
- package/dist/cli/backend/src/types/v2/work-item.types.js +104 -17
- package/dist/cli/backend/src/types/v2/work-item.types.js.map +1 -1
- package/dist/cli/backend/src/types/v2/workspace.types.d.ts +157 -0
- package/dist/cli/backend/src/types/v2/workspace.types.d.ts.map +1 -0
- package/dist/cli/backend/src/types/v2/workspace.types.js +173 -0
- package/dist/cli/backend/src/types/v2/workspace.types.js.map +1 -0
- package/dist/cli/backend/src/utils/async.utils.d.ts +68 -0
- package/dist/cli/backend/src/utils/async.utils.d.ts.map +1 -0
- package/dist/cli/backend/src/utils/async.utils.js +80 -0
- package/dist/cli/backend/src/utils/async.utils.js.map +1 -0
- package/dist/cli/backend/src/utils/native-binding.utils.d.ts +128 -0
- package/dist/cli/backend/src/utils/native-binding.utils.d.ts.map +1 -0
- package/dist/cli/backend/src/utils/native-binding.utils.js +206 -0
- package/dist/cli/backend/src/utils/native-binding.utils.js.map +1 -0
- package/dist/cli/backend/src/websocket/chat.gateway.d.ts +142 -0
- package/dist/cli/backend/src/websocket/chat.gateway.d.ts.map +1 -0
- package/dist/cli/backend/src/websocket/chat.gateway.js +327 -0
- package/dist/cli/backend/src/websocket/chat.gateway.js.map +1 -0
- package/dist/cli/backend/src/websocket/terminal.gateway.d.ts +341 -0
- package/dist/cli/backend/src/websocket/terminal.gateway.d.ts.map +1 -0
- package/dist/cli/backend/src/websocket/terminal.gateway.js +933 -0
- package/dist/cli/backend/src/websocket/terminal.gateway.js.map +1 -0
- package/dist/cli/config/vitest-exclude.constants.d.ts +53 -0
- package/dist/cli/config/vitest-exclude.constants.d.ts.map +1 -0
- package/dist/cli/config/vitest-exclude.constants.js +55 -0
- package/dist/cli/config/vitest-exclude.constants.js.map +1 -0
- package/package.json +2 -2
- package/packages/crewly-agent/src/cli.ts +16 -6
- package/packages/crewly-agent/src/runtime/agent-runner.service.test.ts +311 -33
- package/packages/crewly-agent/src/runtime/agent-runner.service.ts +221 -12
- package/packages/crewly-agent/src/runtime/tool-registry.test.ts +19 -0
- package/packages/crewly-agent/src/runtime/tool-registry.ts +4 -1
- package/packages/crewly-agent/src/runtime/types.ts +65 -5
|
@@ -0,0 +1,471 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# =============================================================================
|
|
3
|
+
# Wire-shape contract test for /api/task-pool/add and /api/task-pool/claim
|
|
4
|
+
#
|
|
5
|
+
# Sibling of `complete-body-shape.test.sh`, which covers /task-pool/complete.
|
|
6
|
+
# Same harness: a Python HTTP stub records every POST body, each skill is
|
|
7
|
+
# pointed at it via CREWLY_API_URL, and the CAPTURED body is asserted against
|
|
8
|
+
# the shape the controller actually destructures.
|
|
9
|
+
#
|
|
10
|
+
# WHY THIS EXISTS
|
|
11
|
+
# ---------------
|
|
12
|
+
# Five separate skills have now shipped a POST body the controller never
|
|
13
|
+
# reads. Nothing binds a skill's request body to the shape its controller
|
|
14
|
+
# destructures, so they drift silently and independently:
|
|
15
|
+
# #734 complete-task + both delegate-task skills (/task-pool/complete)
|
|
16
|
+
# #735-family agent/core/accept-task (/task-pool/claim)
|
|
17
|
+
# #735-family agent/core/create-task (/task-pool/add)
|
|
18
|
+
# Five instances is not five bugs — it is one missing contract. This test is
|
|
19
|
+
# that contract for the two endpoints in the create/claim family.
|
|
20
|
+
#
|
|
21
|
+
# The failures are invisible without an executing test: a skill that posts an
|
|
22
|
+
# unread field gets a 200 and reports success, while the field is dropped. A
|
|
23
|
+
# static grep of the jq literal would pass for the wrong reason. So this test
|
|
24
|
+
# EXECUTES each skill and inspects the bytes that actually went on the wire.
|
|
25
|
+
#
|
|
26
|
+
# Test runner:
|
|
27
|
+
# bash config/skills/_common/task-pool-body-shape.test.sh
|
|
28
|
+
# echo $? # 0 on pass, 1 on fail
|
|
29
|
+
# =============================================================================
|
|
30
|
+
set -eo pipefail
|
|
31
|
+
|
|
32
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
33
|
+
REPO_ROOT="$(cd "${SCRIPT_DIR}/../../.." && pwd)"
|
|
34
|
+
PASS=0
|
|
35
|
+
FAIL=0
|
|
36
|
+
|
|
37
|
+
# The exact key set `blockItem` destructures from req.body:
|
|
38
|
+
# const { agentId, reason } = req.body — and agentId is HARD-REQUIRED (400)
|
|
39
|
+
BLOCK_ALLOWED_KEYS='["agentId","reason"]'
|
|
40
|
+
|
|
41
|
+
# The exact key set `claimItem` destructures from req.body:
|
|
42
|
+
# const { agentId, workItemId, filters } = req.body
|
|
43
|
+
CLAIM_ALLOWED_KEYS='["agentId","filters","workItemId"]'
|
|
44
|
+
|
|
45
|
+
# The WorkItemOwner enum accepted by validateCreateWorkItemInput.
|
|
46
|
+
OWNER_ENUM='["orchestrator","team_lead","agent","system"]'
|
|
47
|
+
|
|
48
|
+
# Every field of `CreateWorkItemInput` (backend/src/types/v2/work-item.types.ts),
|
|
49
|
+
# plus the three legacy-full-shape fields addItem inspects to decide which path
|
|
50
|
+
# to take. Anything OUTSIDE this set is silently discarded by the endpoint:
|
|
51
|
+
# `createWorkItem(input)` copies named fields only, so an unknown key produces
|
|
52
|
+
# a 200 and vanishes. That is the whole bug family in one assertion.
|
|
53
|
+
ADD_ALLOWED_KEYS='["id","requestId","parentWorkItemId","type","owner","target","title","description","briefMarkdown","scheduledAt","maxRetries","triggerId","projectTaskId","missionId","metadata","dependsOn","status","createdAt","retryCount","inputTokens","outputTokens","cost"]'
|
|
54
|
+
|
|
55
|
+
assert_jq() {
|
|
56
|
+
local test_name="$1" jq_filter="$2" body="$3"
|
|
57
|
+
local result
|
|
58
|
+
result=$(printf '%s' "$body" | jq -er "$jq_filter" 2>/dev/null || true)
|
|
59
|
+
if [ -n "$result" ] && [ "$result" != "null" ] && [ "$result" != "false" ]; then
|
|
60
|
+
PASS=$((PASS + 1))
|
|
61
|
+
echo " ✓ ${test_name}"
|
|
62
|
+
else
|
|
63
|
+
FAIL=$((FAIL + 1))
|
|
64
|
+
echo " ✗ ${test_name}"
|
|
65
|
+
echo " filter: ${jq_filter}"
|
|
66
|
+
echo " body: ${body}"
|
|
67
|
+
fi
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
# Assert a captured /task-pool/add body is a shape `addItem` actually reads.
|
|
71
|
+
# Applied uniformly to every /add callsite — this is the contract itself.
|
|
72
|
+
assert_add_contract() {
|
|
73
|
+
local label="$1" body="$2"
|
|
74
|
+
# 1. No envelope. addItem reads `req.body` directly; `{workItem: {...}}`
|
|
75
|
+
# makes every real field invisible and 400s on `type`/`owner`/`title`.
|
|
76
|
+
assert_jq "${label}: no {workItem:...} envelope" '.workItem == null' "$body"
|
|
77
|
+
# 2. Minimal CreateWorkItemInput required fields, at top level.
|
|
78
|
+
assert_jq "${label}: type is a string" '.type | type == "string"' "$body"
|
|
79
|
+
assert_jq "${label}: title is a non-empty string" '.title | type == "string" and length > 0' "$body"
|
|
80
|
+
# 3. owner is the WorkItemOwner ROLE enum, not a session name.
|
|
81
|
+
local owner
|
|
82
|
+
owner=$(printf '%s' "$body" | jq -r '.owner // ""')
|
|
83
|
+
if printf '%s' "$OWNER_ENUM" | jq -e --arg o "$owner" 'index($o) != null' >/dev/null 2>&1; then
|
|
84
|
+
PASS=$((PASS + 1)); echo " ✓ ${label}: owner '${owner}' is a valid WorkItemOwner"
|
|
85
|
+
else
|
|
86
|
+
FAIL=$((FAIL + 1)); echo " ✗ ${label}: owner '${owner}' is NOT a WorkItemOwner (expected one of ${OWNER_ENUM})"
|
|
87
|
+
fi
|
|
88
|
+
# 4. No key outside CreateWorkItemInput. This is the general form of the
|
|
89
|
+
# bug: `priority` and `projectPath` are NOT WorkItem fields, so a caller
|
|
90
|
+
# passing --priority critical believes it took effect while the endpoint
|
|
91
|
+
# drops it. Such values belong in `metadata`.
|
|
92
|
+
local extra_add
|
|
93
|
+
extra_add=$(printf '%s' "$body" | jq -c --argjson allowed "$ADD_ALLOWED_KEYS" '[keys[] | select(. as $k | $allowed | index($k) == null)]')
|
|
94
|
+
if [ "$extra_add" = "[]" ]; then
|
|
95
|
+
PASS=$((PASS + 1)); echo " ✓ ${label}: every top-level key is read by the endpoint"
|
|
96
|
+
else
|
|
97
|
+
FAIL=$((FAIL + 1))
|
|
98
|
+
echo " ✗ ${label}: keys silently discarded by addItem: ${extra_add}"
|
|
99
|
+
echo " These are not CreateWorkItemInput fields — move them into metadata."
|
|
100
|
+
fi
|
|
101
|
+
# 5. If an id is sent it must be accompanied by status AND createdAt,
|
|
102
|
+
# otherwise isLegacyFullShape is false and the caller's intent is
|
|
103
|
+
# ambiguous. Either commit to the legacy full shape or send neither.
|
|
104
|
+
local has_id has_status has_created
|
|
105
|
+
has_id=$(printf '%s' "$body" | jq -r 'has("id")')
|
|
106
|
+
has_status=$(printf '%s' "$body" | jq -r 'has("status")')
|
|
107
|
+
has_created=$(printf '%s' "$body" | jq -r 'has("createdAt")')
|
|
108
|
+
if [ "$has_id" = "false" ] || { [ "$has_status" = "true" ] && [ "$has_created" = "true" ]; }; then
|
|
109
|
+
PASS=$((PASS + 1)); echo " ✓ ${label}: id/status/createdAt are consistent (minimal or full, not half)"
|
|
110
|
+
else
|
|
111
|
+
FAIL=$((FAIL + 1))
|
|
112
|
+
echo " ✗ ${label}: half-legacy shape — id=${has_id} status=${has_status} createdAt=${has_created}"
|
|
113
|
+
echo " A body with id but no createdAt takes the MINIMAL path; send all three or none."
|
|
114
|
+
fi
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
# Assert a captured /task-pool/claim body only carries keys claimItem reads.
|
|
118
|
+
assert_claim_contract() {
|
|
119
|
+
local label="$1" body="$2"
|
|
120
|
+
assert_jq "${label}: agentId is a non-empty string" '.agentId | type == "string" and length > 0' "$body"
|
|
121
|
+
local extra
|
|
122
|
+
extra=$(printf '%s' "$body" | jq -c --argjson allowed "$CLAIM_ALLOWED_KEYS" '[keys[] | select(. as $k | $allowed | index($k) == null)]')
|
|
123
|
+
if [ "$extra" = "[]" ]; then
|
|
124
|
+
PASS=$((PASS + 1)); echo " ✓ ${label}: no keys outside {agentId, workItemId, filters}"
|
|
125
|
+
else
|
|
126
|
+
FAIL=$((FAIL + 1)); echo " ✗ ${label}: body carries keys the controller never reads: ${extra}"
|
|
127
|
+
fi
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
# Assert a captured /task-pool/block body matches what blockItem reads.
|
|
131
|
+
assert_block_contract() {
|
|
132
|
+
local label="$1" body="$2"
|
|
133
|
+
assert_jq "${label}: agentId present (endpoint 400s without it)" '.agentId | type == "string" and length > 0' "$body"
|
|
134
|
+
assert_jq "${label}: reason is a non-empty string" '.reason | type == "string" and length > 0' "$body"
|
|
135
|
+
local extra
|
|
136
|
+
extra=$(printf '%s' "$body" | jq -c --argjson allowed "$BLOCK_ALLOWED_KEYS" '[keys[] | select(. as $k | $allowed | index($k) == null)]')
|
|
137
|
+
if [ "$extra" = "[]" ]; then
|
|
138
|
+
PASS=$((PASS + 1)); echo " ✓ ${label}: no keys outside {agentId, reason}"
|
|
139
|
+
else
|
|
140
|
+
FAIL=$((FAIL + 1)); echo " ✗ ${label}: keys silently discarded by blockItem: ${extra}"
|
|
141
|
+
fi
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
start_stub() {
|
|
145
|
+
local port="$1" log_file="$2"
|
|
146
|
+
PORT=$port LOG_FILE=$log_file \
|
|
147
|
+
python3 -c '
|
|
148
|
+
import http.server, json, os
|
|
149
|
+
LOG = os.environ["LOG_FILE"]
|
|
150
|
+
PORT = int(os.environ["PORT"])
|
|
151
|
+
|
|
152
|
+
class Handler(http.server.BaseHTTPRequestHandler):
|
|
153
|
+
def log_message(self, *a, **kw): pass
|
|
154
|
+
def _record(self, body_bytes):
|
|
155
|
+
with open(LOG, "a") as f:
|
|
156
|
+
f.write(json.dumps({
|
|
157
|
+
"method": self.command,
|
|
158
|
+
"path": self.path,
|
|
159
|
+
"body": body_bytes.decode("utf-8") if body_bytes else "",
|
|
160
|
+
}) + "\n")
|
|
161
|
+
def _json(self, payload):
|
|
162
|
+
self.send_response(200)
|
|
163
|
+
self.send_header("Content-Type", "application/json")
|
|
164
|
+
self.end_headers()
|
|
165
|
+
self.wfile.write(payload)
|
|
166
|
+
def do_POST(self):
|
|
167
|
+
ln = int(self.headers.get("Content-Length") or 0)
|
|
168
|
+
body = self.rfile.read(ln) if ln else b""
|
|
169
|
+
self._record(body)
|
|
170
|
+
if self.path.startswith("/api/task-pool/claim"):
|
|
171
|
+
self._json(b"{\"success\":true,\"data\":{\"workItem\":{\"id\":\"wi-stub-1\",\"title\":\"stub\"},\"claim\":{\"id\":\"claim-1\"}}}")
|
|
172
|
+
return
|
|
173
|
+
if self.path.startswith("/api/task-pool/add"):
|
|
174
|
+
self._json(b"{\"success\":true,\"data\":{\"id\":\"wi-stub-1\",\"workItemId\":\"wi-stub-1\",\"status\":\"queued\"}}")
|
|
175
|
+
return
|
|
176
|
+
self._json(b"{\"success\":true}")
|
|
177
|
+
def do_GET(self):
|
|
178
|
+
self._record(b"")
|
|
179
|
+
# block-task pre-checks item status before calling /block.
|
|
180
|
+
# NOTE: this block lives inside a bash single-quoted python3 -c
|
|
181
|
+
# argument, so it must contain NO apostrophe characters at all —
|
|
182
|
+
# a stray one silently terminates the bash string and the file
|
|
183
|
+
# then fails to parse many lines later.
|
|
184
|
+
# A marker file lets a scenario choose what status is reported; with
|
|
185
|
+
# no marker the status is absent and the pre-check is skipped, which
|
|
186
|
+
# keeps every pre-existing scenario behaving as before.
|
|
187
|
+
marker = LOG + ".status"
|
|
188
|
+
if self.path.startswith("/api/task-pool/items/") and os.path.exists(marker):
|
|
189
|
+
with open(marker) as f:
|
|
190
|
+
st = f.read().strip()
|
|
191
|
+
self._json(json.dumps({"success": True, "data": {"id": "wi-stub-1", "status": st}}).encode())
|
|
192
|
+
return
|
|
193
|
+
self._json(b"{\"success\":true,\"data\":[],\"workItems\":[]}")
|
|
194
|
+
|
|
195
|
+
httpd = http.server.HTTPServer(("127.0.0.1", PORT), Handler)
|
|
196
|
+
httpd.serve_forever()
|
|
197
|
+
' >/dev/null 2>&1 &
|
|
198
|
+
echo $!
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
PORT=39185
|
|
202
|
+
TMPROOT=$(mktemp -d -t crewly-taskpool-shape-XXXXXX)
|
|
203
|
+
LOG="${TMPROOT}/requests.jsonl"
|
|
204
|
+
: > "$LOG"
|
|
205
|
+
|
|
206
|
+
STUB_PID=$(start_stub "$PORT" "$LOG")
|
|
207
|
+
trap "kill $STUB_PID 2>/dev/null || true; rm -rf $TMPROOT" EXIT
|
|
208
|
+
|
|
209
|
+
for _ in 1 2 3 4 5 6 7 8 9 10; do
|
|
210
|
+
if curl -s "http://127.0.0.1:${PORT}/healthz" >/dev/null 2>&1; then break; fi
|
|
211
|
+
sleep 0.1
|
|
212
|
+
done
|
|
213
|
+
|
|
214
|
+
export CREWLY_API_URL="http://127.0.0.1:${PORT}"
|
|
215
|
+
|
|
216
|
+
capture() { grep -F "\"path\": \"$1\"" "$LOG" | head -1 | jq -r '.body' 2>/dev/null || true; }
|
|
217
|
+
|
|
218
|
+
echo "=== /task-pool/add + /task-pool/claim body-shape contract ==="
|
|
219
|
+
|
|
220
|
+
# ---------------------------------------------------------------------------
|
|
221
|
+
# Scenario 1 — agent/core/create-task -> /task-pool/add
|
|
222
|
+
# ---------------------------------------------------------------------------
|
|
223
|
+
echo ""
|
|
224
|
+
echo "--- Scenario 1: agent/core/create-task -> /add ---"
|
|
225
|
+
: > "$LOG"
|
|
226
|
+
bash "${REPO_ROOT}/config/skills/agent/core/create-task/execute.sh" \
|
|
227
|
+
--project-path /tmp/proj-foo --task "Contract test task" \
|
|
228
|
+
--priority high --session quinn-target >/dev/null 2>&1 || true
|
|
229
|
+
BODY=$(capture "/api/task-pool/add")
|
|
230
|
+
if [ -z "$BODY" ]; then
|
|
231
|
+
FAIL=$((FAIL + 1)); echo " ✗ no /task-pool/add POST captured"
|
|
232
|
+
else
|
|
233
|
+
assert_add_contract "create-task" "$BODY"
|
|
234
|
+
assert_jq "create-task: target is the session name" '.target == "quinn-target"' "$BODY"
|
|
235
|
+
assert_jq "create-task: priority preserved in metadata.priority" '.metadata.priority == "high"' "$BODY"
|
|
236
|
+
fi
|
|
237
|
+
|
|
238
|
+
# ---------------------------------------------------------------------------
|
|
239
|
+
# Scenario 2 — agent/core/accept-task -> /task-pool/claim (targeted)
|
|
240
|
+
# ---------------------------------------------------------------------------
|
|
241
|
+
echo ""
|
|
242
|
+
echo "--- Scenario 2: agent/core/accept-task targeted -> /claim ---"
|
|
243
|
+
: > "$LOG"
|
|
244
|
+
bash "${REPO_ROOT}/config/skills/agent/core/accept-task/execute.sh" \
|
|
245
|
+
'{"sessionName":"quinn-claimer","workItemId":"wi-requested-42"}' >/dev/null 2>&1 || true
|
|
246
|
+
BODY=$(capture "/api/task-pool/claim")
|
|
247
|
+
if [ -z "$BODY" ]; then
|
|
248
|
+
FAIL=$((FAIL + 1)); echo " ✗ no /task-pool/claim POST captured"
|
|
249
|
+
else
|
|
250
|
+
assert_claim_contract "accept-task(targeted)" "$BODY"
|
|
251
|
+
assert_jq "accept-task(targeted): requested workItemId IS forwarded" '.workItemId == "wi-requested-42"' "$BODY"
|
|
252
|
+
fi
|
|
253
|
+
|
|
254
|
+
# ---------------------------------------------------------------------------
|
|
255
|
+
# Scenario 3 — accept-task taskId alias -> /claim
|
|
256
|
+
# ---------------------------------------------------------------------------
|
|
257
|
+
echo ""
|
|
258
|
+
echo "--- Scenario 3: agent/core/accept-task taskId alias -> /claim ---"
|
|
259
|
+
: > "$LOG"
|
|
260
|
+
bash "${REPO_ROOT}/config/skills/agent/core/accept-task/execute.sh" \
|
|
261
|
+
'{"sessionName":"quinn-claimer","taskId":"wi-alias-7"}' >/dev/null 2>&1 || true
|
|
262
|
+
BODY=$(capture "/api/task-pool/claim")
|
|
263
|
+
if [ -z "$BODY" ]; then
|
|
264
|
+
FAIL=$((FAIL + 1)); echo " ✗ no /task-pool/claim POST captured"
|
|
265
|
+
else
|
|
266
|
+
assert_claim_contract "accept-task(alias)" "$BODY"
|
|
267
|
+
assert_jq "accept-task(alias): taskId is forwarded as workItemId" '.workItemId == "wi-alias-7"' "$BODY"
|
|
268
|
+
fi
|
|
269
|
+
|
|
270
|
+
# ---------------------------------------------------------------------------
|
|
271
|
+
# Scenario 4 — accept-task next-available -> /claim (no workItemId)
|
|
272
|
+
# ---------------------------------------------------------------------------
|
|
273
|
+
echo ""
|
|
274
|
+
echo "--- Scenario 4: agent/core/accept-task FIFO -> /claim ---"
|
|
275
|
+
: > "$LOG"
|
|
276
|
+
bash "${REPO_ROOT}/config/skills/agent/core/accept-task/execute.sh" \
|
|
277
|
+
'{"sessionName":"quinn-claimer"}' >/dev/null 2>&1 || true
|
|
278
|
+
BODY=$(capture "/api/task-pool/claim")
|
|
279
|
+
if [ -z "$BODY" ]; then
|
|
280
|
+
FAIL=$((FAIL + 1)); echo " ✗ no /task-pool/claim POST captured"
|
|
281
|
+
else
|
|
282
|
+
assert_claim_contract "accept-task(fifo)" "$BODY"
|
|
283
|
+
assert_jq "accept-task(fifo): omits workItemId entirely" 'has("workItemId") == false' "$BODY"
|
|
284
|
+
fi
|
|
285
|
+
|
|
286
|
+
# ---------------------------------------------------------------------------
|
|
287
|
+
# Scenario 5 — team-leader/delegate-task -> /task-pool/add
|
|
288
|
+
# ---------------------------------------------------------------------------
|
|
289
|
+
echo ""
|
|
290
|
+
echo "--- Scenario 5: team-leader/delegate-task -> /add ---"
|
|
291
|
+
: > "$LOG"
|
|
292
|
+
bash "${REPO_ROOT}/config/skills/team-leader/delegate-task/execute.sh" \
|
|
293
|
+
'{"to":"quinn-target","task":"Contract test delegation","from":"quinn-tl"}' >/dev/null 2>&1 || true
|
|
294
|
+
BODY=$(capture "/api/task-pool/add")
|
|
295
|
+
if [ -z "$BODY" ]; then
|
|
296
|
+
FAIL=$((FAIL + 1)); echo " ✗ no /task-pool/add POST captured for team-leader/delegate-task"
|
|
297
|
+
else
|
|
298
|
+
assert_add_contract "tl-delegate-task" "$BODY"
|
|
299
|
+
fi
|
|
300
|
+
|
|
301
|
+
# ---------------------------------------------------------------------------
|
|
302
|
+
# Scenario 6 — orchestrator/delegate-task -> /task-pool/add
|
|
303
|
+
# ---------------------------------------------------------------------------
|
|
304
|
+
echo ""
|
|
305
|
+
echo "--- Scenario 6: orchestrator/delegate-task -> /add ---"
|
|
306
|
+
: > "$LOG"
|
|
307
|
+
# The orc delegate-task skill enforces the Request Contract (P0-3): the brief
|
|
308
|
+
# must carry Goal + Expected Outcome + Eval Criteria markers or it refuses.
|
|
309
|
+
bash "${REPO_ROOT}/config/skills/orchestrator/delegate-task/execute.sh" \
|
|
310
|
+
'{"to":"quinn-target","task":"Goal: contract test orc delegation. Expected Outcome: a /task-pool/add body is emitted. Eval Criteria: body shape matches CreateWorkItemInput."}' \
|
|
311
|
+
>/dev/null 2>&1 || true
|
|
312
|
+
BODY=$(capture "/api/task-pool/add")
|
|
313
|
+
if [ -z "$BODY" ]; then
|
|
314
|
+
FAIL=$((FAIL + 1)); echo " ✗ no /task-pool/add POST captured for orchestrator/delegate-task"
|
|
315
|
+
else
|
|
316
|
+
assert_add_contract "orc-delegate-task" "$BODY"
|
|
317
|
+
fi
|
|
318
|
+
|
|
319
|
+
# ---------------------------------------------------------------------------
|
|
320
|
+
# Scenario 7 — agent/core/break-down-request -> /task-pool/add
|
|
321
|
+
#
|
|
322
|
+
# This callsite deliberately uses the LEGACY FULL shape (id + status +
|
|
323
|
+
# createdAt) so its client-side ids can be referenced upfront. It is the
|
|
324
|
+
# control case: the contract must accept the legacy path, not just minimal.
|
|
325
|
+
# ---------------------------------------------------------------------------
|
|
326
|
+
echo ""
|
|
327
|
+
echo "--- Scenario 7: agent/core/break-down-request -> /add (legacy full shape) ---"
|
|
328
|
+
: > "$LOG"
|
|
329
|
+
bash "${REPO_ROOT}/config/skills/agent/core/break-down-request/execute.sh" \
|
|
330
|
+
'{"requestId":"req-contract-1","sessionName":"quinn-bdr","tasks":[{"title":"Contract subtask","description":"d","type":"delegate","target":"quinn-target"}]}' \
|
|
331
|
+
>/dev/null 2>&1 || true
|
|
332
|
+
BODY=$(capture "/api/task-pool/add")
|
|
333
|
+
if [ -z "$BODY" ]; then
|
|
334
|
+
FAIL=$((FAIL + 1)); echo " ✗ no /task-pool/add POST captured for break-down-request"
|
|
335
|
+
else
|
|
336
|
+
assert_add_contract "break-down-request" "$BODY"
|
|
337
|
+
fi
|
|
338
|
+
|
|
339
|
+
# ---------------------------------------------------------------------------
|
|
340
|
+
# Scenario 8 — team-leader/decompose-goal -> /task-pool/add
|
|
341
|
+
# ---------------------------------------------------------------------------
|
|
342
|
+
echo ""
|
|
343
|
+
echo "--- Scenario 8: team-leader/decompose-goal -> /add ---"
|
|
344
|
+
: > "$LOG"
|
|
345
|
+
bash "${REPO_ROOT}/config/skills/team-leader/decompose-goal/execute.sh" \
|
|
346
|
+
'{"objective":"Contract test objective","projectPath":"/tmp/proj-foo","tasks":[{"title":"Contract subtask","description":"d","requiredRole":"developer","priority":"high"}]}' \
|
|
347
|
+
>/dev/null 2>&1 || true
|
|
348
|
+
BODY=$(capture "/api/task-pool/add")
|
|
349
|
+
if [ -z "$BODY" ]; then
|
|
350
|
+
FAIL=$((FAIL + 1)); echo " ✗ no /task-pool/add POST captured for team-leader/decompose-goal"
|
|
351
|
+
else
|
|
352
|
+
assert_add_contract "decompose-goal" "$BODY"
|
|
353
|
+
assert_jq "decompose-goal: priority preserved in metadata.priority" '.metadata.priority != null' "$BODY"
|
|
354
|
+
fi
|
|
355
|
+
|
|
356
|
+
# ---------------------------------------------------------------------------
|
|
357
|
+
# Scenario 9 — agent/core/block-task -> /task-pool/block/:id
|
|
358
|
+
#
|
|
359
|
+
# This callsite sent {reason, questions?, urgency?} and NO agentId, so every
|
|
360
|
+
# call 400'd with "agentId is required" — the skill agents use to report being
|
|
361
|
+
# blocked could not report anything. `questions`/`urgency` had no field on the
|
|
362
|
+
# endpoint and were discarded; they are now folded into `reason`, which is read.
|
|
363
|
+
# ---------------------------------------------------------------------------
|
|
364
|
+
echo ""
|
|
365
|
+
echo "--- Scenario 9: agent/core/block-task -> /block ---"
|
|
366
|
+
: > "$LOG"
|
|
367
|
+
bash "${REPO_ROOT}/config/skills/agent/core/block-task/execute.sh" \
|
|
368
|
+
'{"workItemId":"wi-stub-1","sessionName":"quinn-blocker","reason":"missing creds","urgency":"high","questions":"who owns X?"}' \
|
|
369
|
+
>/dev/null 2>&1 || true
|
|
370
|
+
BODY=$(capture "/api/task-pool/block/wi-stub-1")
|
|
371
|
+
if [ -z "$BODY" ]; then
|
|
372
|
+
FAIL=$((FAIL + 1)); echo " ✗ no /task-pool/block POST captured for block-task"
|
|
373
|
+
else
|
|
374
|
+
assert_block_contract "block-task" "$BODY"
|
|
375
|
+
assert_jq "block-task: urgency folded into reason, not dropped" '.reason | test("urgency")' "$BODY"
|
|
376
|
+
assert_jq "block-task: questions folded into reason, not dropped" '.reason | test("who owns X")' "$BODY"
|
|
377
|
+
fi
|
|
378
|
+
|
|
379
|
+
# ---------------------------------------------------------------------------
|
|
380
|
+
# Scenario 10 — create-task carries a brief (instance 10)
|
|
381
|
+
#
|
|
382
|
+
# create-task previously sent only {title,type,owner,target,metadata}, so every
|
|
383
|
+
# WorkItem filed through the documented skill was TITLE-ONLY — an agent could
|
|
384
|
+
# not attach Goal + Expected Outcome + Eval Criteria at all. `description` and
|
|
385
|
+
# `briefMarkdown` are both CreateWorkItemInput fields the endpoint reads.
|
|
386
|
+
# ---------------------------------------------------------------------------
|
|
387
|
+
echo ""
|
|
388
|
+
echo "--- Scenario 10: create-task carries description + briefMarkdown ---"
|
|
389
|
+
: > "$LOG"
|
|
390
|
+
BRIEF_FILE=$(mktemp)
|
|
391
|
+
printf '## GOAL\nShip the thing.\n\n## EVAL CRITERIA\n1. It ships.\n' > "$BRIEF_FILE"
|
|
392
|
+
bash "${REPO_ROOT}/config/skills/agent/core/create-task/execute.sh" \
|
|
393
|
+
--project-path /tmp/proj-foo --task "Briefed task" \
|
|
394
|
+
--description "A short summary" --brief "@${BRIEF_FILE}" >/dev/null 2>&1 || true
|
|
395
|
+
BODY=$(capture "/api/task-pool/add")
|
|
396
|
+
if [ -z "$BODY" ]; then
|
|
397
|
+
FAIL=$((FAIL + 1)); echo " ✗ no /task-pool/add POST captured for briefed create-task"
|
|
398
|
+
else
|
|
399
|
+
assert_add_contract "create-task(briefed)" "$BODY"
|
|
400
|
+
assert_jq "create-task: description forwarded" '.description == "A short summary"' "$BODY"
|
|
401
|
+
assert_jq "create-task: briefMarkdown forwarded from @file" '.briefMarkdown | test("EVAL CRITERIA")' "$BODY"
|
|
402
|
+
fi
|
|
403
|
+
rm -f "$BRIEF_FILE"
|
|
404
|
+
|
|
405
|
+
# Omitting both must still produce a clean minimal WorkItem — no empty strings.
|
|
406
|
+
: > "$LOG"
|
|
407
|
+
bash "${REPO_ROOT}/config/skills/agent/core/create-task/execute.sh" \
|
|
408
|
+
--project-path /tmp/proj-foo --task "Unbriefed task" >/dev/null 2>&1 || true
|
|
409
|
+
BODY=$(capture "/api/task-pool/add")
|
|
410
|
+
if [ -n "$BODY" ]; then
|
|
411
|
+
assert_jq "create-task: omits description entirely when unset" 'has("description") == false' "$BODY"
|
|
412
|
+
assert_jq "create-task: omits briefMarkdown entirely when unset" 'has("briefMarkdown") == false' "$BODY"
|
|
413
|
+
fi
|
|
414
|
+
|
|
415
|
+
# Over-cap brief must fail IN THE SKILL, naming the limit — not reach the server.
|
|
416
|
+
: > "$LOG"
|
|
417
|
+
BIG_FILE=$(mktemp)
|
|
418
|
+
python3 -c "import sys; sys.stdout.write('x' * 17000)" > "$BIG_FILE"
|
|
419
|
+
BIG_OUT=$(bash "${REPO_ROOT}/config/skills/agent/core/create-task/execute.sh" \
|
|
420
|
+
--project-path /tmp/proj-foo --task "Oversized" --brief "@${BIG_FILE}" 2>&1 || true)
|
|
421
|
+
if printf '%s' "$BIG_OUT" | grep -q "16384"; then
|
|
422
|
+
PASS=$((PASS + 1)); echo " ✓ create-task: over-cap brief rejected naming the 16384-byte limit"
|
|
423
|
+
else
|
|
424
|
+
FAIL=$((FAIL + 1)); echo " ✗ create-task: expected a 16384-byte limit error, got: ${BIG_OUT}"
|
|
425
|
+
fi
|
|
426
|
+
if grep -qF '"path": "/api/task-pool/add"' "$LOG"; then
|
|
427
|
+
FAIL=$((FAIL + 1)); echo " ✗ create-task: over-cap brief still hit the server — must fail before the POST"
|
|
428
|
+
else
|
|
429
|
+
PASS=$((PASS + 1)); echo " ✓ create-task: over-cap brief never reached the server"
|
|
430
|
+
fi
|
|
431
|
+
rm -f "$BIG_FILE"
|
|
432
|
+
|
|
433
|
+
# ---------------------------------------------------------------------------
|
|
434
|
+
# Scenario 11 — block-task pre-checks status instead of letting the state
|
|
435
|
+
# machine answer with a bare conflict.
|
|
436
|
+
#
|
|
437
|
+
# WORK_ITEM_TRANSITIONS allows `blocked` only from `running`. Blocking a queued
|
|
438
|
+
# item previously surfaced as a raw HTTP 500 carrying a state-machine string —
|
|
439
|
+
# a CLIENT error dressed as a server fault, which makes retry logic treat a
|
|
440
|
+
# PERMANENT failure as transient.
|
|
441
|
+
# ---------------------------------------------------------------------------
|
|
442
|
+
echo ""
|
|
443
|
+
echo "--- Scenario 11: block-task status pre-check ---"
|
|
444
|
+
: > "$LOG"
|
|
445
|
+
echo "queued" > "${LOG}.status"
|
|
446
|
+
PRECHECK_OUT=$(bash "${REPO_ROOT}/config/skills/agent/core/block-task/execute.sh" \
|
|
447
|
+
'{"workItemId":"wi-stub-1","sessionName":"quinn-blocker","reason":"missing creds"}' 2>&1 || true)
|
|
448
|
+
rm -f "${LOG}.status"
|
|
449
|
+
|
|
450
|
+
if printf '%s' "$PRECHECK_OUT" | grep -q "not 'running'"; then
|
|
451
|
+
PASS=$((PASS + 1)); echo " ✓ refuses a queued item, naming its actual status"
|
|
452
|
+
else
|
|
453
|
+
FAIL=$((FAIL + 1)); echo " ✗ expected a status refusal, got: ${PRECHECK_OUT}"
|
|
454
|
+
fi
|
|
455
|
+
|
|
456
|
+
if printf '%s' "$PRECHECK_OUT" | grep -q "accept-task"; then
|
|
457
|
+
PASS=$((PASS + 1)); echo " ✓ names the remedy skill rather than the state machine"
|
|
458
|
+
else
|
|
459
|
+
FAIL=$((FAIL + 1)); echo " ✗ refusal does not tell the caller how to proceed"
|
|
460
|
+
fi
|
|
461
|
+
|
|
462
|
+
if grep -qF '"path": "/api/task-pool/block/' "$LOG"; then
|
|
463
|
+
FAIL=$((FAIL + 1)); echo " ✗ called /block anyway — the pre-check must short-circuit"
|
|
464
|
+
else
|
|
465
|
+
PASS=$((PASS + 1)); echo " ✓ no /block POST emitted"
|
|
466
|
+
fi
|
|
467
|
+
|
|
468
|
+
echo ""
|
|
469
|
+
echo "=== Results: ${PASS} passed, ${FAIL} failed ==="
|
|
470
|
+
[ "$FAIL" -eq 0 ] || exit 1
|
|
471
|
+
exit 0
|
|
@@ -1,30 +1,55 @@
|
|
|
1
1
|
#!/bin/bash
|
|
2
|
-
# Claim
|
|
2
|
+
# Claim a WorkItem from the V3 task-pool.
|
|
3
|
+
#
|
|
4
|
+
# Two modes, mirroring `POST /api/task-pool/claim`:
|
|
5
|
+
#
|
|
6
|
+
# 1. Next-available (FIFO) — omit `workItemId`. The pool picks the
|
|
7
|
+
# highest-scored queued item available to this agent.
|
|
8
|
+
# 2. Targeted — pass `workItemId` (or its alias `taskId`). Claims THAT
|
|
9
|
+
# specific item. The controller branches to `claimSpecificItem`, which
|
|
10
|
+
# still enforces the agent-liveness and target-respect gates.
|
|
3
11
|
#
|
|
4
12
|
# V3-only as of spec 2026-05-06-task-management-v1-deprecation.md. The
|
|
5
13
|
# legacy `/task-management/take-next` endpoint (which read `.md` files
|
|
6
14
|
# from `delegated/open/`) is no longer the source of truth.
|
|
7
15
|
#
|
|
8
16
|
# Input shape (backwards-compat from v1):
|
|
9
|
-
# { "sessionName": "dev-1", "projectPath"?: "...", "taskGroup"?: "..." }
|
|
17
|
+
# { "sessionName": "dev-1", "workItemId"?: "wi-abc", "projectPath"?: "...", "taskGroup"?: "..." }
|
|
10
18
|
#
|
|
11
19
|
# `taskGroup` (legacy v1 milestone filter) maps to V3's `filters.types`.
|
|
12
20
|
# `teamMemberId` is no longer needed — V3 keys claims by `agentId`
|
|
13
21
|
# (= sessionName).
|
|
22
|
+
#
|
|
23
|
+
# A targeted claim that cannot be satisfied surfaces the endpoint's 404 and
|
|
24
|
+
# exits non-zero. It deliberately does NOT fall back to next-available:
|
|
25
|
+
# silently handing back a DIFFERENT WorkItem than the one requested misroutes
|
|
26
|
+
# delegated work, which is strictly worse than a visible failure. (Quinn
|
|
27
|
+
# 2026-08-21: this skill dropped `workItemId` entirely, so every targeted
|
|
28
|
+
# delegation silently claimed an unrelated FIFO item instead.)
|
|
14
29
|
|
|
15
30
|
set -euo pipefail
|
|
16
31
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
17
32
|
source "${SCRIPT_DIR}/../../_common/lib.sh"
|
|
18
33
|
|
|
19
34
|
INPUT=$(read_json_input "${1:-}")
|
|
20
|
-
[ -z "$INPUT" ] && error_exit "Usage: execute.sh '{\"sessionName\":\"dev-1\"}' or echo '{...}' | execute.sh"
|
|
35
|
+
[ -z "$INPUT" ] && error_exit "Usage: execute.sh '{\"sessionName\":\"dev-1\"}' or execute.sh '{\"sessionName\":\"dev-1\",\"workItemId\":\"wi-abc\"}' or echo '{...}' | execute.sh"
|
|
21
36
|
|
|
22
37
|
SESSION_NAME=$(printf '%s' "$INPUT" | jq -r '.sessionName // empty')
|
|
23
38
|
require_param "sessionName" "$SESSION_NAME"
|
|
24
39
|
|
|
40
|
+
# Accept `workItemId` or the `taskId` alias — briefs and dispatch messages
|
|
41
|
+
# refer to the item by id under both names.
|
|
42
|
+
WORK_ITEM_ID=$(printf '%s' "$INPUT" | jq -r '.workItemId // .taskId // empty')
|
|
43
|
+
|
|
25
44
|
# v1's `taskGroup` is informational metadata; V3 filters by WorkItem `type`
|
|
26
45
|
# instead. We pass the session name as the agent identity and let the pool
|
|
27
|
-
# pick the highest-scored available WI for this agent
|
|
28
|
-
|
|
46
|
+
# pick the highest-scored available WI for this agent — unless a specific
|
|
47
|
+
# item was requested, in which case the pool must honour that id or fail.
|
|
48
|
+
if [ -n "$WORK_ITEM_ID" ]; then
|
|
49
|
+
BODY=$(jq -n --arg agentId "$SESSION_NAME" --arg workItemId "$WORK_ITEM_ID" \
|
|
50
|
+
'{agentId: $agentId, workItemId: $workItemId}')
|
|
51
|
+
else
|
|
52
|
+
BODY=$(jq -n --arg agentId "$SESSION_NAME" '{agentId: $agentId}')
|
|
53
|
+
fi
|
|
29
54
|
|
|
30
55
|
api_call POST "/task-pool/claim" "$BODY"
|
|
@@ -7,7 +7,12 @@
|
|
|
7
7
|
# `/task-pool/block/:workItemId` is.
|
|
8
8
|
#
|
|
9
9
|
# Input shape:
|
|
10
|
-
# { "workItemId": "abc-123", "
|
|
10
|
+
# { "workItemId": "abc-123", "sessionName": "dev-1", "reason": "missing creds",
|
|
11
|
+
# "questions"?: "...", "urgency"?: "..." }
|
|
12
|
+
#
|
|
13
|
+
# `sessionName` is REQUIRED (sent as `agentId`) — the endpoint 400s without it.
|
|
14
|
+
# `questions`/`urgency` are folded into `reason`; the endpoint has no field for
|
|
15
|
+
# them.
|
|
11
16
|
#
|
|
12
17
|
# Backwards-compat: if `absoluteTaskPath` is provided instead of
|
|
13
18
|
# `workItemId`, we emit a warning and skip the call rather than fall back
|
|
@@ -35,12 +40,60 @@ fi
|
|
|
35
40
|
require_param "workItemId" "$WORK_ITEM_ID"
|
|
36
41
|
require_param "reason" "$REASON"
|
|
37
42
|
|
|
43
|
+
SESSION_NAME=$(printf '%s' "$INPUT" | jq -r '.sessionName // .agentId // empty')
|
|
44
|
+
[ -z "$SESSION_NAME" ] && SESSION_NAME="${CREWLY_SESSION_NAME:-}"
|
|
45
|
+
require_param "sessionName (or agentId, or CREWLY_SESSION_NAME)" "$SESSION_NAME"
|
|
46
|
+
|
|
47
|
+
# `blockItem` destructures ONLY `{agentId, reason}` and hard-requires agentId
|
|
48
|
+
# (400 "agentId is required"). This skill previously sent neither agentId nor a
|
|
49
|
+
# readable home for `questions`/`urgency`, so EVERY call 400'd — the skill
|
|
50
|
+
# agents use to report being blocked could not report anything.
|
|
51
|
+
#
|
|
52
|
+
# `questions` and `urgency` have no field on this endpoint. Rather than drop
|
|
53
|
+
# caller-supplied content on the floor (the same silent-discard bug in a new
|
|
54
|
+
# shape), they are folded into `reason`, which IS read and is forwarded to
|
|
55
|
+
# TaskProjection.markBlocked. The information survives; only the structure is
|
|
56
|
+
# lost, and the endpoint has nowhere to put the structure.
|
|
57
|
+
if [ -n "$URGENCY" ]; then
|
|
58
|
+
REASON="[urgency: ${URGENCY}] ${REASON}"
|
|
59
|
+
fi
|
|
60
|
+
if [ -n "$QUESTIONS" ]; then
|
|
61
|
+
REASON="${REASON}
|
|
62
|
+
|
|
63
|
+
Open questions: ${QUESTIONS}"
|
|
64
|
+
fi
|
|
65
|
+
|
|
66
|
+
# Pre-check the status and explain, rather than letting the state machine
|
|
67
|
+
# answer with a bare conflict.
|
|
68
|
+
#
|
|
69
|
+
# WORK_ITEM_TRANSITIONS (backend/src/types/v2/work-item.types.ts) allows
|
|
70
|
+
# `blocked` ONLY from `running` — you can block work you have claimed, not work
|
|
71
|
+
# you have merely been dispatched. That rule is deliberate and stays: `blocked`
|
|
72
|
+
# has a single outbound edge (-> queued), so every consumer treats it as a
|
|
73
|
+
# near-terminal parking state while the state machine does not. Widening the
|
|
74
|
+
# ways IN would widen the surface for stranding.
|
|
75
|
+
#
|
|
76
|
+
# So the fix is the message, not the rule: name the current status and the
|
|
77
|
+
# remedy skill, the same disposition as the skipGates rejection.
|
|
78
|
+
CURRENT_STATUS=$(api_call GET "/task-pool/items/${WORK_ITEM_ID}" 2>/dev/null \
|
|
79
|
+
| jq -r '(.data // .) | .status // empty' 2>/dev/null || true)
|
|
80
|
+
|
|
81
|
+
if [ -n "$CURRENT_STATUS" ] && [ "$CURRENT_STATUS" != "running" ]; then
|
|
82
|
+
case "$CURRENT_STATUS" in
|
|
83
|
+
queued|scheduled)
|
|
84
|
+
error_exit "WorkItem ${WORK_ITEM_ID} is '${CURRENT_STATUS}', not 'running' — only a claimed WorkItem can be blocked. Claim it first with the accept-task skill, then block it. If you cannot start it at all, cancel it instead (POST /task-pool/items/${WORK_ITEM_ID}/cancel)." ;;
|
|
85
|
+
blocked)
|
|
86
|
+
error_exit "WorkItem ${WORK_ITEM_ID} is already blocked. To add detail, append a note with the report-progress skill rather than blocking again." ;;
|
|
87
|
+
done|done_by_worker|verified|cancelled|failed|rejected)
|
|
88
|
+
error_exit "WorkItem ${WORK_ITEM_ID} is '${CURRENT_STATUS}' and cannot be blocked — it has already left the running state. If this is wrong, raise it with your team lead rather than forcing a transition." ;;
|
|
89
|
+
*)
|
|
90
|
+
error_exit "WorkItem ${WORK_ITEM_ID} is '${CURRENT_STATUS}', not 'running' — only a claimed (running) WorkItem can be blocked." ;;
|
|
91
|
+
esac
|
|
92
|
+
fi
|
|
93
|
+
|
|
38
94
|
BODY=$(jq -n \
|
|
95
|
+
--arg agentId "$SESSION_NAME" \
|
|
39
96
|
--arg reason "$REASON" \
|
|
40
|
-
|
|
41
|
-
--arg urgency "$URGENCY" \
|
|
42
|
-
'{reason: $reason} +
|
|
43
|
-
(if $questions != "" then {questions: $questions} else {} end) +
|
|
44
|
-
(if $urgency != "" then {urgency: $urgency} else {} end)')
|
|
97
|
+
'{agentId: $agentId, reason: $reason}')
|
|
45
98
|
|
|
46
99
|
api_call POST "/task-pool/block/${WORK_ITEM_ID}" "$BODY"
|