crewly 1.13.0 → 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/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 +25 -0
- 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.map +1 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.js +9 -1
- 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 +42 -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 +22 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/types.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/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/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/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/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/frontend/dist/assets/index-890d3f9d.js +4961 -0
- package/frontend/dist/index.html +1 -1
- package/package.json +2 -2
- package/packages/crewly-agent/src/runtime/agent-runner.service.test.ts +174 -30
- package/packages/crewly-agent/src/runtime/agent-runner.service.ts +121 -6
- package/packages/crewly-agent/src/runtime/types.ts +56 -5
- package/frontend/dist/assets/index-aa737fd3.js +0 -5254
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
import { PoolStorage } from './pool-storage.js';
|
|
12
12
|
import { ClaimService, type HeartbeatResult, type ExtendLeaseResult, type ExpiredClaimsSummary } from './claim.service.js';
|
|
13
13
|
import type { WorkItem, WorkItemStatus, WorkItemType, WorkItemOwner } from '../../types/v2/work-item.types.js';
|
|
14
|
+
import type { WorkItemDisposition } from '../../types/v2/work-item.types.js';
|
|
14
15
|
import { type TaskClaim } from '../../types/v2/claim.types.js';
|
|
15
16
|
import type { EventBusService } from '../event-bus/event-bus.service.js';
|
|
16
17
|
/**
|
|
@@ -134,6 +135,21 @@ export interface ClaimResult {
|
|
|
134
135
|
* }
|
|
135
136
|
* ```
|
|
136
137
|
*/
|
|
138
|
+
/**
|
|
139
|
+
* Options for {@link TaskPoolService.releaseBack}.
|
|
140
|
+
*/
|
|
141
|
+
export interface ReleaseBackOptions {
|
|
142
|
+
/**
|
|
143
|
+
* When true, clear the item's `target` as well, returning it to the
|
|
144
|
+
* unassigned pool.
|
|
145
|
+
*
|
|
146
|
+
* Defaults to false: a release ends an attempt, it does not revoke an
|
|
147
|
+
* assignment. This must be requested BY NAME so that un-assignment is
|
|
148
|
+
* always a deliberate act by a caller who means it, never a silent
|
|
149
|
+
* side effect of a lease expiring.
|
|
150
|
+
*/
|
|
151
|
+
unassign?: boolean;
|
|
152
|
+
}
|
|
137
153
|
export declare class TaskPoolService {
|
|
138
154
|
private static instance;
|
|
139
155
|
private readonly storage;
|
|
@@ -379,11 +395,55 @@ export declare class TaskPoolService {
|
|
|
379
395
|
*
|
|
380
396
|
* The item's status reverts to 'queued' and the claim is marked 'released'.
|
|
381
397
|
*
|
|
398
|
+
* A release is an ADMINISTRATIVE event, not a failure. Two invariants
|
|
399
|
+
* follow, and both were violated before 2026-08-21:
|
|
400
|
+
*
|
|
401
|
+
* 1. **`target` is preserved.** A release says "this attempt ended", not
|
|
402
|
+
* "this work no longer belongs to that agent". Clearing it silently
|
|
403
|
+
* destroyed a deliberate assignment — and because the wake gate admits
|
|
404
|
+
* a worker only when a queued/blocked WI carries `target === their
|
|
405
|
+
* session`, it also made the assigned worker unwakeable for their own
|
|
406
|
+
* work (`wake_gate_no_pool_work`). The sibling failure path,
|
|
407
|
+
* {@link requeueAfterFailure}, already keeps `target` on the far
|
|
408
|
+
* stronger grounds of an actual failure; there is no coherent reading
|
|
409
|
+
* in which a lease lapse un-assigns work that a failure would not.
|
|
410
|
+
* Genuine un-assignment is still possible, but it must be asked for by
|
|
411
|
+
* name via `options.unassign` — never inferred from a lease expiring.
|
|
412
|
+
*
|
|
413
|
+
* One carve-out, and it is not an exception to the rule so much as a
|
|
414
|
+
* sharpening of it: `claimFromPool` stamps `target` on a *broadcast*
|
|
415
|
+
* item to record who picked it up. That stamp is not an assignment,
|
|
416
|
+
* and it is dropped on release (`targetSource === 'claim'`) so the
|
|
417
|
+
* item returns to the broadcast pool. Preserving it would let one
|
|
418
|
+
* claim permanently bind unassigned work to a single agent — and if
|
|
419
|
+
* that agent died, only a dead session could ever re-claim it.
|
|
420
|
+
*
|
|
421
|
+
* 2. **`retryCount` is untouched.** That counter means failures only (see
|
|
422
|
+
* {@link WorkItem.retryCount}); consumers branch on
|
|
423
|
+
* `retryCount < maxRetries` to decide retry-in-place vs terminal-and-
|
|
424
|
+
* escalate. Charging a retry for lease churn drove live work to 3/3
|
|
425
|
+
* with zero failures. Release churn is counted separately in
|
|
426
|
+
* {@link WorkItem.releaseCount}, which nothing branches on.
|
|
427
|
+
*
|
|
382
428
|
* @param workItemId - ID of the work item to release
|
|
383
429
|
* @param reason - Why the item is being released
|
|
384
|
-
* @
|
|
430
|
+
* @param options - Release options
|
|
431
|
+
* @param options.unassign - When true, ALSO clear `target`, returning the
|
|
432
|
+
* item to the unassigned pool. Opt-in only, for the case where a caller
|
|
433
|
+
* genuinely means "someone else should take this". Defaults to false.
|
|
434
|
+
* @throws Error if work item not found, or its status is not
|
|
435
|
+
* 'running' or 'blocked'
|
|
436
|
+
*
|
|
437
|
+
* @example
|
|
438
|
+
* ```typescript
|
|
439
|
+
* // Lease lapsed / claim revoked — the owner keeps the work.
|
|
440
|
+
* await pool.releaseBack(id, 'claim revoked: grace exceeded');
|
|
441
|
+
*
|
|
442
|
+
* // Deliberate hand-back — anyone may pick this up.
|
|
443
|
+
* await pool.releaseBack(id, 'agent declined', { unassign: true });
|
|
444
|
+
* ```
|
|
385
445
|
*/
|
|
386
|
-
releaseBack(workItemId: string, reason: string): Promise<void>;
|
|
446
|
+
releaseBack(workItemId: string, reason: string, options?: ReleaseBackOptions): Promise<void>;
|
|
387
447
|
/**
|
|
388
448
|
* Decide whether a WorkItem requires TL verification before reaching a
|
|
389
449
|
* terminal-success status.
|
|
@@ -406,15 +466,32 @@ export declare class TaskPoolService {
|
|
|
406
466
|
*/
|
|
407
467
|
private requiresVerification;
|
|
408
468
|
/**
|
|
409
|
-
*
|
|
410
|
-
*
|
|
469
|
+
* Release the active claim on a WorkItem, if it has one.
|
|
470
|
+
*
|
|
471
|
+
* Shared by `completeSimpleItem` and `submitForVerification` because both
|
|
411
472
|
* represent the worker handing the item back to the system.
|
|
412
473
|
*
|
|
474
|
+
* Also public for callers that must drive a terminal transition
|
|
475
|
+
* themselves rather than through {@link failItem}. The SLA orphan-close
|
|
476
|
+
* path is the live example: it targets `cancelled`, `failed` OR
|
|
477
|
+
* `rejected` depending on the origin status, so `failItem` — which always
|
|
478
|
+
* transitions to `failed` — cannot serve it. Such callers MUST call this,
|
|
479
|
+
* otherwise the claim stays `active` against a terminal WorkItem and
|
|
480
|
+
* quietly wedges the claiming agent. The mechanism is not an error, which
|
|
481
|
+
* is what makes it hard to spot: {@link claimFromPool} checks
|
|
482
|
+
* `findActiveClaimByAgent` BEFORE it scans the pool, and short-circuits by
|
|
483
|
+
* returning the held claim with `alreadyHeld: true` (issue #513). So the
|
|
484
|
+
* agent is handed the same terminal item on every poll and never sees the
|
|
485
|
+
* queued work waiting for them, until the lease/grace ladder revokes it.
|
|
486
|
+
*
|
|
487
|
+
* Idempotent: a no-op when no active claim exists.
|
|
488
|
+
*
|
|
413
489
|
* @param workItemId - WorkItem whose claim should be released
|
|
414
|
-
* @param endReason - Reason recorded on the claim (`completed
|
|
415
|
-
* `submitted_for_verification`) for
|
|
490
|
+
* @param endReason - Reason recorded on the claim (`completed`,
|
|
491
|
+
* `submitted_for_verification`, `sla escalation timeout ...`) for
|
|
492
|
+
* auditability
|
|
416
493
|
*/
|
|
417
|
-
|
|
494
|
+
releaseClaim(workItemId: string, endReason: string): Promise<void>;
|
|
418
495
|
/**
|
|
419
496
|
* Worker reports a delegated WorkItem as done and submits it for TL
|
|
420
497
|
* verification.
|
|
@@ -559,6 +636,74 @@ export declare class TaskPoolService {
|
|
|
559
636
|
* @throws if the WI doesn't exist or isn't in `failed` status
|
|
560
637
|
*/
|
|
561
638
|
requeueAfterFailure(workItemId: string, reason: string): Promise<void>;
|
|
639
|
+
/**
|
|
640
|
+
* Decide and record how a stranded WorkItem is dealt with — the single
|
|
641
|
+
* funnel every `rejected`/`failed` writer must route through.
|
|
642
|
+
*
|
|
643
|
+
* `rejected` and `failed` are the only two statuses that are neither
|
|
644
|
+
* terminal nor able to reach a terminal state: their sole outbound edge is
|
|
645
|
+
* `→ queued`. An item parked in either is finished as far as every consumer
|
|
646
|
+
* is concerned (see `SLA_TERMINAL_WORK_ITEM_STATUSES`) and unfinished as far
|
|
647
|
+
* as the state machine is concerned, and until this funnel existed nothing
|
|
648
|
+
* owned closing that gap. Items written there by a path that did not itself
|
|
649
|
+
* arrange a successor simply stopped, permanently and — since PR #733
|
|
650
|
+
* correctly stopped the pruning rules emitting illegal corrections for them
|
|
651
|
+
* — silently.
|
|
652
|
+
*
|
|
653
|
+
* Exactly one of three things happens, and the choice is recorded rather
|
|
654
|
+
* than left to be re-derived later by scanning other WorkItems:
|
|
655
|
+
*
|
|
656
|
+
* 1. **retried in place** — `failed` with retry budget left. The item goes
|
|
657
|
+
* back on the queue via {@link requeueAfterFailure}, which bumps
|
|
658
|
+
* `retryCount`. Deliberately NOT stamped: the item has left the stranding
|
|
659
|
+
* statuses under its own power, and a stamp would be a claim about a
|
|
660
|
+
* failure that is no longer the current one.
|
|
661
|
+
* 2. **succeeded by another item** — the caller already created a successor
|
|
662
|
+
* (the `EventToWorkItemBridge` retry/escalation WorkItem). Stamped with
|
|
663
|
+
* its id.
|
|
664
|
+
* 3. **terminal** — budget spent, or a status with no retry path. Stamped,
|
|
665
|
+
* and escalated so a human or the orchestrator renders the verdict. This
|
|
666
|
+
* is the "deliberate terminal state with an audit record" case: the item
|
|
667
|
+
* stays in `rejected`/`failed` by design, because the alternative —
|
|
668
|
+
* adding `→ cancelled` edges — would re-open the illegal-correction
|
|
669
|
+
* surface #733 closed and turn a deliberate decision into a 24h default.
|
|
670
|
+
*
|
|
671
|
+
* Idempotent and re-entrant: an already-disposed item is returned unchanged,
|
|
672
|
+
* so concurrent reconciler passes converge and the safety-net rule cannot
|
|
673
|
+
* fire twice on the same strand. Terminating: the only branch that repeats
|
|
674
|
+
* is (1), and it bumps `retryCount`, so it can run at most `maxRetries`
|
|
675
|
+
* times before (3) becomes the only reachable outcome.
|
|
676
|
+
*
|
|
677
|
+
* @param workItemId - The stranded WorkItem.
|
|
678
|
+
* @param options - `reason` is carried into the audit record and the
|
|
679
|
+
* escalation. `actor` defaults to `'system'`.
|
|
680
|
+
* `successorWorkItemId` selects outcome (2) when the
|
|
681
|
+
* caller owns a real successor.
|
|
682
|
+
* @returns The recorded disposition, or `null` when there was nothing to do
|
|
683
|
+
* (item missing, or not in a stranding status).
|
|
684
|
+
*
|
|
685
|
+
* @example
|
|
686
|
+
* ```typescript
|
|
687
|
+
* await pool.disposeFailedWorkItem(wi.id, { reason: 'SLA escalation timeout' });
|
|
688
|
+
* ```
|
|
689
|
+
*/
|
|
690
|
+
disposeFailedWorkItem(workItemId: string, options: {
|
|
691
|
+
reason: string;
|
|
692
|
+
actor?: WorkItemOwner;
|
|
693
|
+
successorWorkItemId?: string;
|
|
694
|
+
}): Promise<WorkItemDisposition | null>;
|
|
695
|
+
/**
|
|
696
|
+
* Persist a disposition record onto a WorkItem's metadata.
|
|
697
|
+
*
|
|
698
|
+
* Writes metadata only — no status transition — so it is safe to call on an
|
|
699
|
+
* item whose status has no legal outbound edge, which is precisely the
|
|
700
|
+
* situation a `terminal` disposition describes.
|
|
701
|
+
*
|
|
702
|
+
* @param workItemId - WorkItem to stamp.
|
|
703
|
+
* @param disposition - The record to write.
|
|
704
|
+
* @returns The disposition as written.
|
|
705
|
+
*/
|
|
706
|
+
private stampDisposition;
|
|
562
707
|
/**
|
|
563
708
|
* Processes a heartbeat from an agent for their active claim.
|
|
564
709
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task-pool.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/task-pool/task-pool.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,KAAK,eAAe,EAAE,KAAK,iBAAiB,EAAE,KAAK,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAG3H,OAAO,KAAK,EACV,QAAQ,EACR,cAAc,EACd,YAAY,EACZ,aAAa,EACd,MAAM,mCAAmC,CAAC;
|
|
1
|
+
{"version":3,"file":"task-pool.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/task-pool/task-pool.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,7 +12,7 @@ import { PoolStorage } from './pool-storage.js';
|
|
|
12
12
|
import { ClaimService } from './claim.service.js';
|
|
13
13
|
import { LoggerService } from '../core/logger.service.js';
|
|
14
14
|
import { formatError } from '../../utils/format-error.js';
|
|
15
|
-
import { isWorkItem, isValidWorkItemTransition, isTransitionPermitted } from '../../types/v2/work-item.types.js';
|
|
15
|
+
import { isWorkItem, isValidWorkItemTransition, isTransitionPermitted, LAST_REQUEUED_AT_METADATA_KEY, DISPOSITION_METADATA_KEY, DISPOSITION_REQUIRED_STATUSES, getWorkItemDisposition, } from '../../types/v2/work-item.types.js';
|
|
16
16
|
import { createTaskClaim, } from '../../types/v2/claim.types.js';
|
|
17
17
|
/**
|
|
18
18
|
* Structured error thrown by {@link TaskPoolService.removeFromPool}
|
|
@@ -33,30 +33,6 @@ export class WorkItemClaimedError extends Error {
|
|
|
33
33
|
Object.setPrototypeOf(this, WorkItemClaimedError.prototype);
|
|
34
34
|
}
|
|
35
35
|
}
|
|
36
|
-
// ---------------------------------------------------------------------------
|
|
37
|
-
// Service
|
|
38
|
-
// ---------------------------------------------------------------------------
|
|
39
|
-
/**
|
|
40
|
-
* TaskPoolService manages the lifecycle of execution-ready WorkItems.
|
|
41
|
-
*
|
|
42
|
-
* Core operations:
|
|
43
|
-
* - {@link addToPool} — enqueue an execution-ready WorkItem
|
|
44
|
-
* - {@link claimFromPool} — agent claims the next available item
|
|
45
|
-
* - {@link releaseBack} — release a claimed item back to the pool
|
|
46
|
-
* - {@link getPoolStatus} — snapshot of pool statistics
|
|
47
|
-
*
|
|
48
|
-
* @example
|
|
49
|
-
* ```typescript
|
|
50
|
-
* const pool = TaskPoolService.getInstance();
|
|
51
|
-
* pool.addToPool(workItem);
|
|
52
|
-
* const result = pool.claimFromPool('agent-leo', { types: ['delegate'] });
|
|
53
|
-
* if (result) {
|
|
54
|
-
* // agent works on result.workItem
|
|
55
|
-
* // when done:
|
|
56
|
-
* pool.completeItem(result.workItem.id);
|
|
57
|
-
* }
|
|
58
|
-
* ```
|
|
59
|
-
*/
|
|
60
36
|
export class TaskPoolService {
|
|
61
37
|
static instance = null;
|
|
62
38
|
storage;
|
|
@@ -613,7 +589,12 @@ export class TaskPoolService {
|
|
|
613
589
|
// refuse to overwrite a non-matching existing target.
|
|
614
590
|
const claimedItem = await this.transitionStatus(selected.id, 'running', 'system', (wi) => {
|
|
615
591
|
if (!wi.target) {
|
|
592
|
+
// Broadcast claim: record that this target is an incidental
|
|
593
|
+
// claim stamp, not a deliberate assignment, so releaseBack
|
|
594
|
+
// returns the item to the broadcast pool instead of binding
|
|
595
|
+
// it to this agent forever.
|
|
616
596
|
wi.target = agentId;
|
|
597
|
+
wi.targetSource = 'claim';
|
|
617
598
|
}
|
|
618
599
|
// else: target already === agentId per the filter; leave as-is.
|
|
619
600
|
});
|
|
@@ -696,7 +677,10 @@ export class TaskPoolService {
|
|
|
696
677
|
// undefined; never overwrite an existing target.
|
|
697
678
|
const claimedItem = await this.transitionStatus(workItemId, 'running', 'system', (wi) => {
|
|
698
679
|
if (!wi.target) {
|
|
680
|
+
// Broadcast claim — see claimFromPool: this is a claim stamp,
|
|
681
|
+
// not an assignment.
|
|
699
682
|
wi.target = agentId;
|
|
683
|
+
wi.targetSource = 'claim';
|
|
700
684
|
}
|
|
701
685
|
});
|
|
702
686
|
if (!claimedItem)
|
|
@@ -714,11 +698,55 @@ export class TaskPoolService {
|
|
|
714
698
|
*
|
|
715
699
|
* The item's status reverts to 'queued' and the claim is marked 'released'.
|
|
716
700
|
*
|
|
701
|
+
* A release is an ADMINISTRATIVE event, not a failure. Two invariants
|
|
702
|
+
* follow, and both were violated before 2026-08-21:
|
|
703
|
+
*
|
|
704
|
+
* 1. **`target` is preserved.** A release says "this attempt ended", not
|
|
705
|
+
* "this work no longer belongs to that agent". Clearing it silently
|
|
706
|
+
* destroyed a deliberate assignment — and because the wake gate admits
|
|
707
|
+
* a worker only when a queued/blocked WI carries `target === their
|
|
708
|
+
* session`, it also made the assigned worker unwakeable for their own
|
|
709
|
+
* work (`wake_gate_no_pool_work`). The sibling failure path,
|
|
710
|
+
* {@link requeueAfterFailure}, already keeps `target` on the far
|
|
711
|
+
* stronger grounds of an actual failure; there is no coherent reading
|
|
712
|
+
* in which a lease lapse un-assigns work that a failure would not.
|
|
713
|
+
* Genuine un-assignment is still possible, but it must be asked for by
|
|
714
|
+
* name via `options.unassign` — never inferred from a lease expiring.
|
|
715
|
+
*
|
|
716
|
+
* One carve-out, and it is not an exception to the rule so much as a
|
|
717
|
+
* sharpening of it: `claimFromPool` stamps `target` on a *broadcast*
|
|
718
|
+
* item to record who picked it up. That stamp is not an assignment,
|
|
719
|
+
* and it is dropped on release (`targetSource === 'claim'`) so the
|
|
720
|
+
* item returns to the broadcast pool. Preserving it would let one
|
|
721
|
+
* claim permanently bind unassigned work to a single agent — and if
|
|
722
|
+
* that agent died, only a dead session could ever re-claim it.
|
|
723
|
+
*
|
|
724
|
+
* 2. **`retryCount` is untouched.** That counter means failures only (see
|
|
725
|
+
* {@link WorkItem.retryCount}); consumers branch on
|
|
726
|
+
* `retryCount < maxRetries` to decide retry-in-place vs terminal-and-
|
|
727
|
+
* escalate. Charging a retry for lease churn drove live work to 3/3
|
|
728
|
+
* with zero failures. Release churn is counted separately in
|
|
729
|
+
* {@link WorkItem.releaseCount}, which nothing branches on.
|
|
730
|
+
*
|
|
717
731
|
* @param workItemId - ID of the work item to release
|
|
718
732
|
* @param reason - Why the item is being released
|
|
719
|
-
* @
|
|
733
|
+
* @param options - Release options
|
|
734
|
+
* @param options.unassign - When true, ALSO clear `target`, returning the
|
|
735
|
+
* item to the unassigned pool. Opt-in only, for the case where a caller
|
|
736
|
+
* genuinely means "someone else should take this". Defaults to false.
|
|
737
|
+
* @throws Error if work item not found, or its status is not
|
|
738
|
+
* 'running' or 'blocked'
|
|
739
|
+
*
|
|
740
|
+
* @example
|
|
741
|
+
* ```typescript
|
|
742
|
+
* // Lease lapsed / claim revoked — the owner keeps the work.
|
|
743
|
+
* await pool.releaseBack(id, 'claim revoked: grace exceeded');
|
|
744
|
+
*
|
|
745
|
+
* // Deliberate hand-back — anyone may pick this up.
|
|
746
|
+
* await pool.releaseBack(id, 'agent declined', { unassign: true });
|
|
747
|
+
* ```
|
|
720
748
|
*/
|
|
721
|
-
async releaseBack(workItemId, reason) {
|
|
749
|
+
async releaseBack(workItemId, reason, options = {}) {
|
|
722
750
|
const workItem = await this.storage.findWorkItem(workItemId);
|
|
723
751
|
if (!workItem) {
|
|
724
752
|
throw new Error(`WorkItem not found: ${workItemId}`);
|
|
@@ -739,21 +767,31 @@ export class TaskPoolService {
|
|
|
739
767
|
// guarded transitionStatus helper. The state-machine entry for
|
|
740
768
|
// `running → queued` is a TRANS-2 addition, gated to system/TL/orc;
|
|
741
769
|
// `blocked → queued` was already TL/orc/system-gated by TRANS-1.
|
|
742
|
-
// Side-effect mutations (startedAt clear, target
|
|
743
|
-
//
|
|
744
|
-
|
|
770
|
+
// Side-effect mutations (startedAt clear, opt-in target clear,
|
|
771
|
+
// releaseCount bump) move into the atomic mutator.
|
|
772
|
+
//
|
|
773
|
+
// `target` survives every release; only an explicit `unassign` clears
|
|
774
|
+
// it. `retryCount` is NOT touched here — a release is not a failure —
|
|
775
|
+
// and release churn is recorded in `releaseCount` instead.
|
|
776
|
+
const unassign = options.unassign === true;
|
|
745
777
|
await this.transitionStatus(workItemId, 'queued', 'system', (wi) => {
|
|
746
778
|
wi.startedAt = undefined;
|
|
747
|
-
|
|
779
|
+
// Drop the target only when the caller explicitly asked, or when the
|
|
780
|
+
// target was never an assignment in the first place — a broadcast
|
|
781
|
+
// item stamped by whoever happened to claim it belongs back in the
|
|
782
|
+
// broadcast pool, not bound to that agent.
|
|
783
|
+
if (unassign || wi.targetSource === 'claim') {
|
|
748
784
|
wi.target = undefined;
|
|
785
|
+
wi.targetSource = undefined;
|
|
749
786
|
}
|
|
750
|
-
wi.
|
|
787
|
+
wi.releaseCount = (wi.releaseCount ?? 0) + 1;
|
|
751
788
|
});
|
|
752
789
|
await this.storage.flush();
|
|
753
790
|
this.logger.info('WorkItem released back to pool', {
|
|
754
791
|
workItemId,
|
|
755
792
|
reason,
|
|
756
793
|
claimId: claim?.id,
|
|
794
|
+
unassigned: unassign,
|
|
757
795
|
});
|
|
758
796
|
}
|
|
759
797
|
/**
|
|
@@ -785,13 +823,30 @@ export class TaskPoolService {
|
|
|
785
823
|
return wi.type === 'delegate';
|
|
786
824
|
}
|
|
787
825
|
/**
|
|
788
|
-
*
|
|
789
|
-
*
|
|
826
|
+
* Release the active claim on a WorkItem, if it has one.
|
|
827
|
+
*
|
|
828
|
+
* Shared by `completeSimpleItem` and `submitForVerification` because both
|
|
790
829
|
* represent the worker handing the item back to the system.
|
|
791
830
|
*
|
|
831
|
+
* Also public for callers that must drive a terminal transition
|
|
832
|
+
* themselves rather than through {@link failItem}. The SLA orphan-close
|
|
833
|
+
* path is the live example: it targets `cancelled`, `failed` OR
|
|
834
|
+
* `rejected` depending on the origin status, so `failItem` — which always
|
|
835
|
+
* transitions to `failed` — cannot serve it. Such callers MUST call this,
|
|
836
|
+
* otherwise the claim stays `active` against a terminal WorkItem and
|
|
837
|
+
* quietly wedges the claiming agent. The mechanism is not an error, which
|
|
838
|
+
* is what makes it hard to spot: {@link claimFromPool} checks
|
|
839
|
+
* `findActiveClaimByAgent` BEFORE it scans the pool, and short-circuits by
|
|
840
|
+
* returning the held claim with `alreadyHeld: true` (issue #513). So the
|
|
841
|
+
* agent is handed the same terminal item on every poll and never sees the
|
|
842
|
+
* queued work waiting for them, until the lease/grace ladder revokes it.
|
|
843
|
+
*
|
|
844
|
+
* Idempotent: a no-op when no active claim exists.
|
|
845
|
+
*
|
|
792
846
|
* @param workItemId - WorkItem whose claim should be released
|
|
793
|
-
* @param endReason - Reason recorded on the claim (`completed
|
|
794
|
-
* `submitted_for_verification`) for
|
|
847
|
+
* @param endReason - Reason recorded on the claim (`completed`,
|
|
848
|
+
* `submitted_for_verification`, `sla escalation timeout ...`) for
|
|
849
|
+
* auditability
|
|
795
850
|
*/
|
|
796
851
|
async releaseClaim(workItemId, endReason) {
|
|
797
852
|
const claim = await this.storage.findActiveClaimByWorkItem(workItemId);
|
|
@@ -1158,7 +1213,20 @@ export class TaskPoolService {
|
|
|
1158
1213
|
lastFailureReason: reason,
|
|
1159
1214
|
lastFailureAt: now,
|
|
1160
1215
|
retryAttempt: wi.retryCount,
|
|
1216
|
+
// TTL anchor (see getTtlAnchorAt). The age-based expiry rules must
|
|
1217
|
+
// measure this retry's window from HERE, not from the original
|
|
1218
|
+
// `createdAt` — otherwise a WorkItem that failed after the 24h TTL is
|
|
1219
|
+
// TTL-cancelled on the next reconciler pass, silently destroying the
|
|
1220
|
+
// retry we just granted. `createdAt` is deliberately left untouched so
|
|
1221
|
+
// it keeps meaning "when this work was first asked for".
|
|
1222
|
+
[LAST_REQUEUED_AT_METADATA_KEY]: now,
|
|
1161
1223
|
};
|
|
1224
|
+
// A disposition describes how a PAST failure was dealt with. This item
|
|
1225
|
+
// is back in play, so any existing stamp is history and must not be
|
|
1226
|
+
// allowed to outlive the failure it described — otherwise the
|
|
1227
|
+
// safety-net rule would read a stale stamp and skip the item the next
|
|
1228
|
+
// time it strands. See DISPOSITION_METADATA_KEY.
|
|
1229
|
+
delete wi.metadata[DISPOSITION_METADATA_KEY];
|
|
1162
1230
|
// Clear the error field so a successful retry doesn't surface a
|
|
1163
1231
|
// stale error message; the metadata above keeps the history.
|
|
1164
1232
|
wi.error = undefined;
|
|
@@ -1171,6 +1239,167 @@ export class TaskPoolService {
|
|
|
1171
1239
|
reason,
|
|
1172
1240
|
});
|
|
1173
1241
|
}
|
|
1242
|
+
/**
|
|
1243
|
+
* Decide and record how a stranded WorkItem is dealt with — the single
|
|
1244
|
+
* funnel every `rejected`/`failed` writer must route through.
|
|
1245
|
+
*
|
|
1246
|
+
* `rejected` and `failed` are the only two statuses that are neither
|
|
1247
|
+
* terminal nor able to reach a terminal state: their sole outbound edge is
|
|
1248
|
+
* `→ queued`. An item parked in either is finished as far as every consumer
|
|
1249
|
+
* is concerned (see `SLA_TERMINAL_WORK_ITEM_STATUSES`) and unfinished as far
|
|
1250
|
+
* as the state machine is concerned, and until this funnel existed nothing
|
|
1251
|
+
* owned closing that gap. Items written there by a path that did not itself
|
|
1252
|
+
* arrange a successor simply stopped, permanently and — since PR #733
|
|
1253
|
+
* correctly stopped the pruning rules emitting illegal corrections for them
|
|
1254
|
+
* — silently.
|
|
1255
|
+
*
|
|
1256
|
+
* Exactly one of three things happens, and the choice is recorded rather
|
|
1257
|
+
* than left to be re-derived later by scanning other WorkItems:
|
|
1258
|
+
*
|
|
1259
|
+
* 1. **retried in place** — `failed` with retry budget left. The item goes
|
|
1260
|
+
* back on the queue via {@link requeueAfterFailure}, which bumps
|
|
1261
|
+
* `retryCount`. Deliberately NOT stamped: the item has left the stranding
|
|
1262
|
+
* statuses under its own power, and a stamp would be a claim about a
|
|
1263
|
+
* failure that is no longer the current one.
|
|
1264
|
+
* 2. **succeeded by another item** — the caller already created a successor
|
|
1265
|
+
* (the `EventToWorkItemBridge` retry/escalation WorkItem). Stamped with
|
|
1266
|
+
* its id.
|
|
1267
|
+
* 3. **terminal** — budget spent, or a status with no retry path. Stamped,
|
|
1268
|
+
* and escalated so a human or the orchestrator renders the verdict. This
|
|
1269
|
+
* is the "deliberate terminal state with an audit record" case: the item
|
|
1270
|
+
* stays in `rejected`/`failed` by design, because the alternative —
|
|
1271
|
+
* adding `→ cancelled` edges — would re-open the illegal-correction
|
|
1272
|
+
* surface #733 closed and turn a deliberate decision into a 24h default.
|
|
1273
|
+
*
|
|
1274
|
+
* Idempotent and re-entrant: an already-disposed item is returned unchanged,
|
|
1275
|
+
* so concurrent reconciler passes converge and the safety-net rule cannot
|
|
1276
|
+
* fire twice on the same strand. Terminating: the only branch that repeats
|
|
1277
|
+
* is (1), and it bumps `retryCount`, so it can run at most `maxRetries`
|
|
1278
|
+
* times before (3) becomes the only reachable outcome.
|
|
1279
|
+
*
|
|
1280
|
+
* @param workItemId - The stranded WorkItem.
|
|
1281
|
+
* @param options - `reason` is carried into the audit record and the
|
|
1282
|
+
* escalation. `actor` defaults to `'system'`.
|
|
1283
|
+
* `successorWorkItemId` selects outcome (2) when the
|
|
1284
|
+
* caller owns a real successor.
|
|
1285
|
+
* @returns The recorded disposition, or `null` when there was nothing to do
|
|
1286
|
+
* (item missing, or not in a stranding status).
|
|
1287
|
+
*
|
|
1288
|
+
* @example
|
|
1289
|
+
* ```typescript
|
|
1290
|
+
* await pool.disposeFailedWorkItem(wi.id, { reason: 'SLA escalation timeout' });
|
|
1291
|
+
* ```
|
|
1292
|
+
*/
|
|
1293
|
+
async disposeFailedWorkItem(workItemId, options) {
|
|
1294
|
+
const { reason, actor = 'system', successorWorkItemId } = options;
|
|
1295
|
+
const workItem = await this.storage.findWorkItem(workItemId);
|
|
1296
|
+
if (!workItem)
|
|
1297
|
+
return null;
|
|
1298
|
+
// Only the stranding statuses need a disposition. Anything else is either
|
|
1299
|
+
// still in play or already strictly terminal.
|
|
1300
|
+
if (!DISPOSITION_REQUIRED_STATUSES.has(workItem.status))
|
|
1301
|
+
return null;
|
|
1302
|
+
// Idempotency: the stamp IS the key. Two passes converge here.
|
|
1303
|
+
const existing = getWorkItemDisposition(workItem);
|
|
1304
|
+
if (existing)
|
|
1305
|
+
return existing;
|
|
1306
|
+
const now = new Date().toISOString();
|
|
1307
|
+
// (2) The caller owns a real successor — record it and stop.
|
|
1308
|
+
if (successorWorkItemId) {
|
|
1309
|
+
return this.stampDisposition(workItemId, {
|
|
1310
|
+
kind: 'succeeded_by',
|
|
1311
|
+
at: now,
|
|
1312
|
+
by: actor,
|
|
1313
|
+
reason,
|
|
1314
|
+
successorWorkItemId,
|
|
1315
|
+
});
|
|
1316
|
+
}
|
|
1317
|
+
// (1) Retry in place. Only `failed` has a retry path — `rejected` reaches
|
|
1318
|
+
// `queued` too, but re-running work a reviewer rejected without a fresh
|
|
1319
|
+
// verdict would re-execute exactly what was turned down.
|
|
1320
|
+
// `retryCount` is FAILURES ONLY — this branch is load-bearing on that
|
|
1321
|
+
// semantic, not incidentally coupled to it. Reading a churn-inflated count
|
|
1322
|
+
// here would send work that never failed straight to `terminal`.
|
|
1323
|
+
//
|
|
1324
|
+
// That is an invariant rather than an assumption as of #739: `releaseBack`
|
|
1325
|
+
// used to bump `retryCount` on every lease lapse, so a worker who simply
|
|
1326
|
+
// stopped heartbeating was charged a failure. Release churn now goes to
|
|
1327
|
+
// {@link WorkItem.releaseCount}, which nothing branches on. Keep it that
|
|
1328
|
+
// way — if a future change makes anything other than a failure move
|
|
1329
|
+
// `retryCount`, this branch silently starts terminating live work, and a
|
|
1330
|
+
// second counter here would hide that rather than surface it.
|
|
1331
|
+
if (workItem.status === 'failed' && workItem.retryCount < workItem.maxRetries) {
|
|
1332
|
+
await this.requeueAfterFailure(workItemId, reason);
|
|
1333
|
+
this.logger.info('Stranded WorkItem retried in place', {
|
|
1334
|
+
workItemId,
|
|
1335
|
+
retryCount: workItem.retryCount + 1,
|
|
1336
|
+
maxRetries: workItem.maxRetries,
|
|
1337
|
+
reason,
|
|
1338
|
+
});
|
|
1339
|
+
// Not stamped — see the doc comment. The item is queued again, and the
|
|
1340
|
+
// requeue itself is the audit record (metadata.failureHistory).
|
|
1341
|
+
return {
|
|
1342
|
+
kind: 'retried_in_place',
|
|
1343
|
+
at: now,
|
|
1344
|
+
by: actor,
|
|
1345
|
+
reason,
|
|
1346
|
+
};
|
|
1347
|
+
}
|
|
1348
|
+
// (3) Terminal. Escalate for the verdict, then stamp — in that order, so a
|
|
1349
|
+
// failed escalation cannot leave a stamp claiming an escalation happened.
|
|
1350
|
+
let escalationId;
|
|
1351
|
+
try {
|
|
1352
|
+
const { EscalationRouterService } = await import('../v3/escalation-router.service.js');
|
|
1353
|
+
escalationId =
|
|
1354
|
+
(await EscalationRouterService.getInstance().escalateFailedWorkItem(workItem, reason)) ?? undefined;
|
|
1355
|
+
}
|
|
1356
|
+
catch (err) {
|
|
1357
|
+
// Best-effort, matching every other escalation call site: a messaging
|
|
1358
|
+
// blip must not leave the item stranded a second time. The stamp is
|
|
1359
|
+
// still written, without an escalationId, so the gap is visible in the
|
|
1360
|
+
// audit record rather than hidden by a retry loop.
|
|
1361
|
+
this.logger.warn('escalateFailedWorkItem threw during disposition (non-fatal)', {
|
|
1362
|
+
workItemId,
|
|
1363
|
+
error: err instanceof Error ? err.message : String(err),
|
|
1364
|
+
});
|
|
1365
|
+
}
|
|
1366
|
+
return this.stampDisposition(workItemId, {
|
|
1367
|
+
kind: 'terminal',
|
|
1368
|
+
at: now,
|
|
1369
|
+
by: actor,
|
|
1370
|
+
reason,
|
|
1371
|
+
escalationId,
|
|
1372
|
+
});
|
|
1373
|
+
}
|
|
1374
|
+
/**
|
|
1375
|
+
* Persist a disposition record onto a WorkItem's metadata.
|
|
1376
|
+
*
|
|
1377
|
+
* Writes metadata only — no status transition — so it is safe to call on an
|
|
1378
|
+
* item whose status has no legal outbound edge, which is precisely the
|
|
1379
|
+
* situation a `terminal` disposition describes.
|
|
1380
|
+
*
|
|
1381
|
+
* @param workItemId - WorkItem to stamp.
|
|
1382
|
+
* @param disposition - The record to write.
|
|
1383
|
+
* @returns The disposition as written.
|
|
1384
|
+
*/
|
|
1385
|
+
async stampDisposition(workItemId, disposition) {
|
|
1386
|
+
const workItem = await this.storage.findWorkItem(workItemId);
|
|
1387
|
+
if (workItem) {
|
|
1388
|
+
workItem.metadata = {
|
|
1389
|
+
...(workItem.metadata ?? {}),
|
|
1390
|
+
[DISPOSITION_METADATA_KEY]: disposition,
|
|
1391
|
+
};
|
|
1392
|
+
await this.storage.flush();
|
|
1393
|
+
}
|
|
1394
|
+
this.logger.info('WorkItem disposition recorded', {
|
|
1395
|
+
workItemId,
|
|
1396
|
+
kind: disposition.kind,
|
|
1397
|
+
successorWorkItemId: disposition.successorWorkItemId,
|
|
1398
|
+
escalationId: disposition.escalationId,
|
|
1399
|
+
reason: disposition.reason,
|
|
1400
|
+
});
|
|
1401
|
+
return disposition;
|
|
1402
|
+
}
|
|
1174
1403
|
// -----------------------------------------------------------------------
|
|
1175
1404
|
// Claim Lifecycle (delegated to ClaimService)
|
|
1176
1405
|
// -----------------------------------------------------------------------
|
|
@@ -1394,6 +1623,9 @@ export class TaskPoolService {
|
|
|
1394
1623
|
const handoffNote = `[HANDOFF] ${fromAgent} → ${newTarget}: ${reason || '(no reason)'}`;
|
|
1395
1624
|
await this.storage.updateWorkItem(workItemId, (item) => {
|
|
1396
1625
|
item.target = newTarget;
|
|
1626
|
+
// An explicit handoff is a deliberate assignment: it must survive a
|
|
1627
|
+
// later release.
|
|
1628
|
+
item.targetSource = 'assigned';
|
|
1397
1629
|
const existing = (item.metadata && typeof item.metadata === 'object' ? item.metadata : {});
|
|
1398
1630
|
const notes = Array.isArray(existing.notes) ? existing.notes : [];
|
|
1399
1631
|
notes.push(`${new Date().toISOString()} ${handoffNote}`);
|