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,692 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Escalation Router Service
|
|
3
|
+
*
|
|
4
|
+
* Routes escalations to the appropriate target:
|
|
5
|
+
* - target === 'team_lead' → Send message to TL agent via MessageQueue
|
|
6
|
+
* - target === 'human' → Send Slack notification to user + pause task + create pending record
|
|
7
|
+
*
|
|
8
|
+
* Also handles MissionPolicy escalation rules (cost_exceeded, failure_count, etc.)
|
|
9
|
+
* by routing `escalateTo: 'user'` to human and `escalateTo: 'orchestrator'` to agent.
|
|
10
|
+
*
|
|
11
|
+
* Pending human escalations are stored in `.crewly/escalations/` and resolved
|
|
12
|
+
* via POST /api/escalations/:id/resolve.
|
|
13
|
+
*
|
|
14
|
+
* @module services/v3/escalation-router.service
|
|
15
|
+
*/
|
|
16
|
+
import * as path from 'path';
|
|
17
|
+
import { v4 as uuidv4 } from 'uuid';
|
|
18
|
+
import { LoggerService } from '../core/logger.service.js';
|
|
19
|
+
import { ensureDir, atomicWriteJson, safeReadJson } from '../../utils/file-io.utils.js';
|
|
20
|
+
import { getAgentBehaviorLogService } from '../observability/agent-behavior-log.singleton.js';
|
|
21
|
+
// ---------------------------------------------------------------------------
|
|
22
|
+
// Service
|
|
23
|
+
// ---------------------------------------------------------------------------
|
|
24
|
+
export class EscalationRouterService {
|
|
25
|
+
static instance = null;
|
|
26
|
+
logger;
|
|
27
|
+
escalationsDir;
|
|
28
|
+
constructor(projectPath) {
|
|
29
|
+
this.logger = LoggerService.getInstance().createComponentLogger('EscalationRouter');
|
|
30
|
+
this.escalationsDir = path.join(projectPath, '.crewly', 'escalations');
|
|
31
|
+
}
|
|
32
|
+
static getInstance(projectPath) {
|
|
33
|
+
if (!EscalationRouterService.instance) {
|
|
34
|
+
const p = projectPath || process.cwd();
|
|
35
|
+
EscalationRouterService.instance = new EscalationRouterService(p);
|
|
36
|
+
}
|
|
37
|
+
return EscalationRouterService.instance;
|
|
38
|
+
}
|
|
39
|
+
static resetInstance() {
|
|
40
|
+
EscalationRouterService.instance = null;
|
|
41
|
+
}
|
|
42
|
+
// ---------------------------------------------------------------------------
|
|
43
|
+
// Route: AlignmentRequest from Worker
|
|
44
|
+
// ---------------------------------------------------------------------------
|
|
45
|
+
/**
|
|
46
|
+
* Route a worker's AlignmentRequest to the correct target.
|
|
47
|
+
*
|
|
48
|
+
* @param request - The structured alignment request from the worker
|
|
49
|
+
* @param workItemId - The WorkItem being escalated
|
|
50
|
+
* @param workerSession - Worker's session name
|
|
51
|
+
* @returns The escalation ID if routed to human, null if handled by agent
|
|
52
|
+
*/
|
|
53
|
+
async routeAlignmentRequest(request, workItemId, workerSession) {
|
|
54
|
+
// F14: record `agent.escalation` at the canonical worker→{TL,human}
|
|
55
|
+
// entry point. Best-effort — never blocks the escalation flow. Why
|
|
56
|
+
// this site: it is the single chokepoint every structured worker
|
|
57
|
+
// alignment request flows through (target='team_lead' or 'human').
|
|
58
|
+
// The `escalate` skill / send-message-with-action paths converge
|
|
59
|
+
// here. Recording earlier (e.g. inside the skill bash) loses the
|
|
60
|
+
// structured `target`/`reason` shape; recording later (inside
|
|
61
|
+
// notifyHuman / notifyAgent) misses the handled-by-agent branch
|
|
62
|
+
// when target='team_lead' returns null.
|
|
63
|
+
try {
|
|
64
|
+
getAgentBehaviorLogService()?.record({
|
|
65
|
+
type: 'agent.escalation',
|
|
66
|
+
escalatingAgent: workerSession,
|
|
67
|
+
escalatedTo: request.target,
|
|
68
|
+
reason: request.reason,
|
|
69
|
+
taskId: workItemId,
|
|
70
|
+
details: {
|
|
71
|
+
discoveredIssue: request.discoveredIssue,
|
|
72
|
+
decisionNeeded: request.decisionNeeded,
|
|
73
|
+
},
|
|
74
|
+
});
|
|
75
|
+
// F14 ask_human boundary: when an agent escalates to a human
|
|
76
|
+
// (Steve), this IS an `agent.action` with actionType='ask_human'.
|
|
77
|
+
// We record both events so digests can compute (a) raw escalation
|
|
78
|
+
// counts and (b) per-agent ask_human rates as a subset.
|
|
79
|
+
if (request.target === 'human') {
|
|
80
|
+
getAgentBehaviorLogService()?.record({
|
|
81
|
+
type: 'agent.action',
|
|
82
|
+
agent: workerSession,
|
|
83
|
+
actionType: 'ask_human',
|
|
84
|
+
taskId: workItemId,
|
|
85
|
+
details: {
|
|
86
|
+
reason: request.reason,
|
|
87
|
+
workItemId,
|
|
88
|
+
},
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
catch {
|
|
93
|
+
/* observability is best-effort */
|
|
94
|
+
}
|
|
95
|
+
if (request.target === 'human') {
|
|
96
|
+
// Create persistent record + notify human
|
|
97
|
+
const escalation = await this.createPendingEscalation({
|
|
98
|
+
source: 'alignment_request',
|
|
99
|
+
target: 'human',
|
|
100
|
+
summary: `Worker ${workerSession} escalated: ${request.discoveredIssue}`,
|
|
101
|
+
details: {
|
|
102
|
+
currentTask: request.currentTask,
|
|
103
|
+
reason: request.reason,
|
|
104
|
+
whyCannotExecute: request.whyCannotExecute,
|
|
105
|
+
options: request.options,
|
|
106
|
+
recommendation: request.recommendation,
|
|
107
|
+
decisionNeeded: request.decisionNeeded,
|
|
108
|
+
},
|
|
109
|
+
workItemId,
|
|
110
|
+
raisedBy: workerSession,
|
|
111
|
+
});
|
|
112
|
+
// Notify via Slack
|
|
113
|
+
await this.notifyHuman(escalation);
|
|
114
|
+
// Pause the work item
|
|
115
|
+
await this.pauseWorkItem(workItemId);
|
|
116
|
+
this.logger.info('Escalation routed to human', {
|
|
117
|
+
escalationId: escalation.id,
|
|
118
|
+
workItemId,
|
|
119
|
+
reason: request.reason,
|
|
120
|
+
});
|
|
121
|
+
return escalation.id;
|
|
122
|
+
}
|
|
123
|
+
// target === 'team_lead' → route to TL agent
|
|
124
|
+
await this.notifyAgent(request, workItemId, workerSession);
|
|
125
|
+
this.logger.info('Escalation routed to team lead agent', {
|
|
126
|
+
workItemId,
|
|
127
|
+
reason: request.reason,
|
|
128
|
+
});
|
|
129
|
+
return null;
|
|
130
|
+
}
|
|
131
|
+
// ---------------------------------------------------------------------------
|
|
132
|
+
// Route: MissionPolicy EscalationRule
|
|
133
|
+
// ---------------------------------------------------------------------------
|
|
134
|
+
/**
|
|
135
|
+
* Route a MissionPolicy escalation rule trigger.
|
|
136
|
+
*
|
|
137
|
+
* @param mission - The Mission that triggered the rule
|
|
138
|
+
* @param rule - The escalation rule that fired
|
|
139
|
+
* @param context - Current context values (cost, time, failures)
|
|
140
|
+
*/
|
|
141
|
+
async routePolicyEscalation(mission, rule, context) {
|
|
142
|
+
if (rule.escalateTo === 'user') {
|
|
143
|
+
const escalation = await this.createPendingEscalation({
|
|
144
|
+
source: 'policy_rule',
|
|
145
|
+
target: 'human',
|
|
146
|
+
summary: `Mission "${mission.objective}" triggered ${rule.condition} (threshold: ${rule.threshold})`,
|
|
147
|
+
details: {
|
|
148
|
+
condition: rule.condition,
|
|
149
|
+
threshold: rule.threshold,
|
|
150
|
+
currentValue: context[rule.condition] ?? 0,
|
|
151
|
+
action: rule.action,
|
|
152
|
+
},
|
|
153
|
+
missionId: mission.id,
|
|
154
|
+
raisedBy: 'system',
|
|
155
|
+
});
|
|
156
|
+
await this.notifyHuman(escalation);
|
|
157
|
+
// Execute the escalation action
|
|
158
|
+
if (rule.action === 'pause' || rule.action === 'block') {
|
|
159
|
+
try {
|
|
160
|
+
const { MissionExecutorService } = await import('./mission-executor.service.js');
|
|
161
|
+
await MissionExecutorService.getInstance().pauseMission(mission.id);
|
|
162
|
+
}
|
|
163
|
+
catch {
|
|
164
|
+
// Non-fatal
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
return escalation.id;
|
|
168
|
+
}
|
|
169
|
+
// escalateTo === 'orchestrator' or 'team_lead' → route to agent
|
|
170
|
+
this.logger.info('Policy escalation routed to agent', {
|
|
171
|
+
missionId: mission.id,
|
|
172
|
+
escalateTo: rule.escalateTo,
|
|
173
|
+
condition: rule.condition,
|
|
174
|
+
});
|
|
175
|
+
return null;
|
|
176
|
+
}
|
|
177
|
+
// ---------------------------------------------------------------------------
|
|
178
|
+
// Resolution
|
|
179
|
+
// ---------------------------------------------------------------------------
|
|
180
|
+
/**
|
|
181
|
+
* Resolve a pending human escalation.
|
|
182
|
+
*
|
|
183
|
+
* @param escalationId - The escalation to resolve
|
|
184
|
+
* @param resolution - What the human decided
|
|
185
|
+
* @param resolvedBy - Who resolved it (user ID or name)
|
|
186
|
+
* @returns The updated escalation, or null if not found
|
|
187
|
+
*/
|
|
188
|
+
async resolve(escalationId, resolution, resolvedBy) {
|
|
189
|
+
const escalation = await this.loadEscalation(escalationId);
|
|
190
|
+
if (!escalation)
|
|
191
|
+
return null;
|
|
192
|
+
escalation.status = 'resolved';
|
|
193
|
+
escalation.resolvedAt = new Date().toISOString();
|
|
194
|
+
escalation.resolvedBy = resolvedBy;
|
|
195
|
+
escalation.resolution = resolution;
|
|
196
|
+
await this.saveEscalation(escalation);
|
|
197
|
+
// Resume paused work item if applicable
|
|
198
|
+
if (escalation.workItemId) {
|
|
199
|
+
await this.resumeWorkItem(escalation.workItemId);
|
|
200
|
+
}
|
|
201
|
+
this.logger.info('Escalation resolved', {
|
|
202
|
+
escalationId,
|
|
203
|
+
resolvedBy,
|
|
204
|
+
workItemId: escalation.workItemId,
|
|
205
|
+
});
|
|
206
|
+
return escalation;
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Escalate a WorkItem that exhausted its retry budget to the
|
|
210
|
+
* orchestrator. The orchestrator receives a structured message via
|
|
211
|
+
* the same MessageQueue used by `target='team_lead'` escalations,
|
|
212
|
+
* decides whether to (a) surface to the user, (b) replan, (c) hand
|
|
213
|
+
* off to a different agent. Also persists a `PendingEscalation`
|
|
214
|
+
* record for the dashboard / API.
|
|
215
|
+
*
|
|
216
|
+
* Called from `V3DataService.onTaskFailed` once `retryCount >=
|
|
217
|
+
* maxRetries`. Best-effort — exceptions are caught and logged so a
|
|
218
|
+
* messaging blip doesn't strand the upstream failure handler.
|
|
219
|
+
*
|
|
220
|
+
* @param wi - The failed WorkItem (post-`failItem`, with retryCount
|
|
221
|
+
* and maxRetries reflecting the exhausted budget)
|
|
222
|
+
* @param reason - Final failure reason (same string written to wi.error)
|
|
223
|
+
* @returns The persisted escalation id, or null on persistence failure
|
|
224
|
+
*/
|
|
225
|
+
async escalateFailedWorkItem(wi, reason) {
|
|
226
|
+
const escalationId = uuidv4();
|
|
227
|
+
const escalation = {
|
|
228
|
+
id: escalationId,
|
|
229
|
+
status: 'pending',
|
|
230
|
+
source: 'workitem_failed',
|
|
231
|
+
target: 'orchestrator',
|
|
232
|
+
summary: `WorkItem "${wi.title}" failed after ${wi.retryCount} of ${wi.maxRetries} retries`,
|
|
233
|
+
details: {
|
|
234
|
+
workItemId: wi.id,
|
|
235
|
+
title: wi.title,
|
|
236
|
+
type: wi.type,
|
|
237
|
+
target: wi.target ?? null,
|
|
238
|
+
retryCount: wi.retryCount,
|
|
239
|
+
maxRetries: wi.maxRetries,
|
|
240
|
+
lastError: wi.error ?? reason,
|
|
241
|
+
requestId: wi.requestId ?? null,
|
|
242
|
+
missionId: wi.missionId ?? null,
|
|
243
|
+
priority: wi.priority ?? null,
|
|
244
|
+
},
|
|
245
|
+
workItemId: wi.id,
|
|
246
|
+
missionId: wi.missionId ?? undefined,
|
|
247
|
+
taskId: wi.parentWorkItemId ?? undefined,
|
|
248
|
+
raisedBy: wi.target ?? 'system',
|
|
249
|
+
raisedAt: new Date().toISOString(),
|
|
250
|
+
};
|
|
251
|
+
try {
|
|
252
|
+
await this.saveEscalation(escalation);
|
|
253
|
+
}
|
|
254
|
+
catch (err) {
|
|
255
|
+
this.logger.warn('Failed to persist workitem_failed escalation (non-fatal)', {
|
|
256
|
+
workItemId: wi.id,
|
|
257
|
+
error: err instanceof Error ? err.message : String(err),
|
|
258
|
+
});
|
|
259
|
+
// Continue — even if persistence fails the orc message below
|
|
260
|
+
// still has value (orc will surface to user).
|
|
261
|
+
}
|
|
262
|
+
// Build the orc-facing message. Designed to be self-contained so orc
|
|
263
|
+
// can act without going back to the activity log to reconstruct
|
|
264
|
+
// context. Sanitization is REQUIRED because `wi.title` flows from
|
|
265
|
+
// user-derived Slack/Request text and `wi.error` from worker output
|
|
266
|
+
// — both can contain newlines, ANSI escapes, or strings that would
|
|
267
|
+
// collide with the [CHAT:] / [NOTIFY:] markers ORC parses in its
|
|
268
|
+
// own outbound message protocol. We:
|
|
269
|
+
// - strip ANSI escape codes
|
|
270
|
+
// - flatten newlines so a multi-line error can't open a fake
|
|
271
|
+
// marker line
|
|
272
|
+
// - defuse the four ORC-recognized marker prefixes by inserting
|
|
273
|
+
// a zero-width space — visible to neither ORC nor humans, but
|
|
274
|
+
// prevents the marker from parsing
|
|
275
|
+
// - hard-cap each user-derived field so a giant stack trace
|
|
276
|
+
// can't blow past ORC's context budget
|
|
277
|
+
const sanitize = (raw, maxLen) => String(raw)
|
|
278
|
+
.replace(/\[[0-9;]*m/g, '') // strip ANSI color escapes
|
|
279
|
+
.replace(/[\r\n]+/g, ' ') // flatten newlines
|
|
280
|
+
.replace(/\[(CHAT|NOTIFY|EVENT|ESCALATION)/gi, '[$1') // defuse markers
|
|
281
|
+
.slice(0, maxLen);
|
|
282
|
+
const safeTitle = sanitize(wi.title, 200);
|
|
283
|
+
const safeError = sanitize(wi.error ?? reason, 2_000);
|
|
284
|
+
const lines = [
|
|
285
|
+
`[ESCALATION] WorkItem failed after ${wi.retryCount} of ${wi.maxRetries} retries — your decision needed.`,
|
|
286
|
+
'',
|
|
287
|
+
`WorkItem: ${wi.id} "${safeTitle}"`,
|
|
288
|
+
`Type: ${wi.type}`,
|
|
289
|
+
`Target: ${wi.target ?? '(unassigned)'}`,
|
|
290
|
+
`Attempts: ${wi.retryCount} / ${wi.maxRetries}`,
|
|
291
|
+
'',
|
|
292
|
+
`Last error: ${safeError}`,
|
|
293
|
+
'',
|
|
294
|
+
`Parent Request: ${wi.requestId ?? '(none)'}`,
|
|
295
|
+
`Parent Mission: ${wi.missionId ?? '(none)'}`,
|
|
296
|
+
'',
|
|
297
|
+
'Suggested actions (per Escalation SOP in your prompt):',
|
|
298
|
+
' (a) Surface to the user with the failure reason + concrete options',
|
|
299
|
+
' (b) Replan: break the task differently and re-delegate',
|
|
300
|
+
' (c) Hand off to a different agent better suited to the task',
|
|
301
|
+
' (d) Cancel with a "blocked — needs spec clarification" note',
|
|
302
|
+
'',
|
|
303
|
+
`Escalation id: ${escalationId}`,
|
|
304
|
+
];
|
|
305
|
+
try {
|
|
306
|
+
const { MessageQueueService } = await import('../messaging/message-queue.service.js');
|
|
307
|
+
const mq = new MessageQueueService(process.cwd());
|
|
308
|
+
mq.enqueue({
|
|
309
|
+
content: lines.join('\n'),
|
|
310
|
+
conversationId: `escalation-${wi.id}-${Date.now()}`,
|
|
311
|
+
source: 'system_event',
|
|
312
|
+
sourceMetadata: {
|
|
313
|
+
type: 'escalation',
|
|
314
|
+
subtype: 'workitem_failed',
|
|
315
|
+
workItemId: wi.id,
|
|
316
|
+
escalationId,
|
|
317
|
+
},
|
|
318
|
+
});
|
|
319
|
+
this.logger.info('Routed workitem_failed escalation to ORC via MessageQueue', {
|
|
320
|
+
workItemId: wi.id,
|
|
321
|
+
escalationId,
|
|
322
|
+
});
|
|
323
|
+
}
|
|
324
|
+
catch (err) {
|
|
325
|
+
this.logger.warn('Failed to enqueue workitem_failed message for ORC (non-fatal)', {
|
|
326
|
+
workItemId: wi.id,
|
|
327
|
+
error: err instanceof Error ? err.message : String(err),
|
|
328
|
+
});
|
|
329
|
+
}
|
|
330
|
+
return escalationId;
|
|
331
|
+
}
|
|
332
|
+
/**
|
|
333
|
+
* Deliver the FINAL deliverable judgment to the orchestrator when a Request
|
|
334
|
+
* completes — every child WorkItem was verified (P2 acceptance gate), so the
|
|
335
|
+
* whole deliverable is assembled and per-piece accepted. Asks the orc (the
|
|
336
|
+
* top-level TL) to do the holistic check the per-piece verification cannot:
|
|
337
|
+
* does the ASSEMBLED result meet the original goal and is it actually usable?
|
|
338
|
+
* Accept to close, or reopen with concrete gaps (which re-delegates rework).
|
|
339
|
+
*
|
|
340
|
+
* Best-effort — enqueues a self-contained orc message; never throws.
|
|
341
|
+
*
|
|
342
|
+
* @param request - The completed Request (id + goal/title for the summary).
|
|
343
|
+
* @param childItems - Its child WorkItems (title + status, for the summary).
|
|
344
|
+
* @returns Resolves when the message is enqueued (or silently on failure).
|
|
345
|
+
*/
|
|
346
|
+
async requestFinalDeliverableReview(request, childItems) {
|
|
347
|
+
const total = childItems.length;
|
|
348
|
+
const verified = childItems.filter((c) => c.status === 'verified' || c.status === 'done').length;
|
|
349
|
+
const sanitize = (raw, maxLen) => String(raw)
|
|
350
|
+
.replace(/\[[0-9;]*m/g, '')
|
|
351
|
+
.replace(/[\r\n]+/g, ' ')
|
|
352
|
+
.replace(/\[(CHAT|NOTIFY|EVENT|ESCALATION)/gi, '[$1')
|
|
353
|
+
.slice(0, maxLen);
|
|
354
|
+
const goal = sanitize(request.objective ?? request.title ?? request.description ?? '(unspecified)', 300);
|
|
355
|
+
const itemLines = childItems.slice(0, 20).map((c) => ` • [${c.status}] ${sanitize(c.title, 120)}`);
|
|
356
|
+
const lines = [
|
|
357
|
+
'[ESCALATION] Deliverable complete — your final verdict needed.',
|
|
358
|
+
'',
|
|
359
|
+
`Request: ${request.id}`,
|
|
360
|
+
`Goal: ${goal}`,
|
|
361
|
+
`Pieces: ${verified}/${total} work items verified`,
|
|
362
|
+
'',
|
|
363
|
+
'Completed work items:',
|
|
364
|
+
...itemLines,
|
|
365
|
+
...(total > 20 ? [` … and ${total - 20} more`] : []),
|
|
366
|
+
'',
|
|
367
|
+
'Every piece passed TL verification. Now do the FINAL holistic check the',
|
|
368
|
+
'per-piece checks cannot: does the ASSEMBLED deliverable meet the original',
|
|
369
|
+
'goal and is it actually usable end-to-end?',
|
|
370
|
+
' (a) If yes → accept and close; report the result to the user.',
|
|
371
|
+
' (b) If it falls short → reopen with the specific gaps; the team reworks.',
|
|
372
|
+
];
|
|
373
|
+
try {
|
|
374
|
+
const { MessageQueueService } = await import('../messaging/message-queue.service.js');
|
|
375
|
+
const mq = new MessageQueueService(process.cwd());
|
|
376
|
+
mq.enqueue({
|
|
377
|
+
content: lines.join('\n'),
|
|
378
|
+
conversationId: `final-review-${request.id}-${Date.now()}`,
|
|
379
|
+
source: 'system_event',
|
|
380
|
+
sourceMetadata: {
|
|
381
|
+
type: 'escalation',
|
|
382
|
+
subtype: 'final_deliverable_review',
|
|
383
|
+
requestId: request.id,
|
|
384
|
+
},
|
|
385
|
+
});
|
|
386
|
+
this.logger.info('Routed final deliverable review to ORC via MessageQueue', {
|
|
387
|
+
requestId: request.id,
|
|
388
|
+
verified,
|
|
389
|
+
total,
|
|
390
|
+
});
|
|
391
|
+
}
|
|
392
|
+
catch (err) {
|
|
393
|
+
this.logger.warn('Failed to enqueue final deliverable review for ORC (non-fatal)', {
|
|
394
|
+
requestId: request.id,
|
|
395
|
+
error: err instanceof Error ? err.message : String(err),
|
|
396
|
+
});
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
/**
|
|
400
|
+
* Escalate a WorkItem whose worker reported done but whose Team Leader has
|
|
401
|
+
* NOT verified it within the deadline (verification-enforcement, P1).
|
|
402
|
+
*
|
|
403
|
+
* Asks the orchestrator to render an EXPLICIT verdict — verify/accept
|
|
404
|
+
* (→ verified) or reject (→ rejected → the existing rework loop) — so
|
|
405
|
+
* unverified work is never silently auto-accepted by the 24h TTL fallback
|
|
406
|
+
* (`pickTTLExpiryTarget('done_by_worker') → 'verified'`). Mirrors
|
|
407
|
+
* {@link escalateFailedWorkItem}: persists a `tl_verification` escalation
|
|
408
|
+
* targeted at the orchestrator and enqueues a self-contained orc-facing
|
|
409
|
+
* message. Best-effort — persistence/message failures are logged, not
|
|
410
|
+
* thrown, so the reconciler pass never strands on it.
|
|
411
|
+
*
|
|
412
|
+
* @param wi - The unverified WorkItem (only read).
|
|
413
|
+
* @param awaitingMs - How long it has awaited verification (for the message).
|
|
414
|
+
* @returns The escalation id, or null on a hard failure.
|
|
415
|
+
*/
|
|
416
|
+
async escalateUnverifiedWorkItem(wi, awaitingMs) {
|
|
417
|
+
const escalationId = uuidv4();
|
|
418
|
+
const awaitingH = Math.max(1, Math.round(awaitingMs / 3_600_000));
|
|
419
|
+
const escalation = {
|
|
420
|
+
id: escalationId,
|
|
421
|
+
status: 'pending',
|
|
422
|
+
source: 'tl_verification',
|
|
423
|
+
target: 'orchestrator',
|
|
424
|
+
summary: `WorkItem "${wi.title}" awaiting TL verification for ~${awaitingH}h — your verdict needed`,
|
|
425
|
+
details: {
|
|
426
|
+
workItemId: wi.id,
|
|
427
|
+
title: wi.title,
|
|
428
|
+
type: wi.type,
|
|
429
|
+
target: wi.target ?? null,
|
|
430
|
+
awaitingMs,
|
|
431
|
+
requestId: wi.requestId ?? null,
|
|
432
|
+
missionId: wi.missionId ?? null,
|
|
433
|
+
},
|
|
434
|
+
workItemId: wi.id,
|
|
435
|
+
missionId: wi.missionId ?? undefined,
|
|
436
|
+
taskId: wi.parentWorkItemId ?? undefined,
|
|
437
|
+
raisedBy: 'reconciler',
|
|
438
|
+
raisedAt: new Date().toISOString(),
|
|
439
|
+
};
|
|
440
|
+
try {
|
|
441
|
+
await this.saveEscalation(escalation);
|
|
442
|
+
}
|
|
443
|
+
catch (err) {
|
|
444
|
+
this.logger.warn('Failed to persist tl_verification escalation (non-fatal)', {
|
|
445
|
+
workItemId: wi.id,
|
|
446
|
+
error: err instanceof Error ? err.message : String(err),
|
|
447
|
+
});
|
|
448
|
+
}
|
|
449
|
+
const sanitize = (raw, maxLen) => String(raw)
|
|
450
|
+
.replace(/\[[0-9;]*m/g, '')
|
|
451
|
+
.replace(/[\r\n]+/g, ' ')
|
|
452
|
+
.replace(/\[(CHAT|NOTIFY|EVENT|ESCALATION)/gi, '[$1')
|
|
453
|
+
.slice(0, maxLen);
|
|
454
|
+
const safeTitle = sanitize(wi.title, 200);
|
|
455
|
+
const lines = [
|
|
456
|
+
`[ESCALATION] WorkItem awaiting verification for ~${awaitingH}h — your verdict needed.`,
|
|
457
|
+
'',
|
|
458
|
+
'The worker reported this done, but the Team Leader has not verified it.',
|
|
459
|
+
'Do NOT let it pass unverified — render an explicit verdict:',
|
|
460
|
+
'',
|
|
461
|
+
`WorkItem: ${wi.id} "${safeTitle}"`,
|
|
462
|
+
`Type: ${wi.type}`,
|
|
463
|
+
`Target: ${wi.target ?? '(unassigned)'}`,
|
|
464
|
+
'',
|
|
465
|
+
`Parent Request: ${wi.requestId ?? '(none)'}`,
|
|
466
|
+
`Parent Mission: ${wi.missionId ?? '(none)'}`,
|
|
467
|
+
'',
|
|
468
|
+
'Actions:',
|
|
469
|
+
' (a) Verify against the acceptance criteria (yourself or via the TL) → accept',
|
|
470
|
+
' (b) If it falls short, reject with concrete fix instructions → the team reworks it',
|
|
471
|
+
'',
|
|
472
|
+
`Escalation id: ${escalationId}`,
|
|
473
|
+
];
|
|
474
|
+
try {
|
|
475
|
+
const { MessageQueueService } = await import('../messaging/message-queue.service.js');
|
|
476
|
+
const mq = new MessageQueueService(process.cwd());
|
|
477
|
+
mq.enqueue({
|
|
478
|
+
content: lines.join('\n'),
|
|
479
|
+
conversationId: `verify-escalation-${wi.id}-${Date.now()}`,
|
|
480
|
+
source: 'system_event',
|
|
481
|
+
sourceMetadata: {
|
|
482
|
+
type: 'escalation',
|
|
483
|
+
subtype: 'tl_verification',
|
|
484
|
+
workItemId: wi.id,
|
|
485
|
+
escalationId,
|
|
486
|
+
},
|
|
487
|
+
});
|
|
488
|
+
this.logger.info('Routed tl_verification escalation to ORC via MessageQueue', {
|
|
489
|
+
workItemId: wi.id,
|
|
490
|
+
escalationId,
|
|
491
|
+
});
|
|
492
|
+
}
|
|
493
|
+
catch (err) {
|
|
494
|
+
this.logger.warn('Failed to enqueue tl_verification message for ORC (non-fatal)', {
|
|
495
|
+
workItemId: wi.id,
|
|
496
|
+
error: err instanceof Error ? err.message : String(err),
|
|
497
|
+
});
|
|
498
|
+
}
|
|
499
|
+
return escalationId;
|
|
500
|
+
}
|
|
501
|
+
/**
|
|
502
|
+
* List all pending escalations.
|
|
503
|
+
*/
|
|
504
|
+
async listPending() {
|
|
505
|
+
try {
|
|
506
|
+
await ensureDir(this.escalationsDir);
|
|
507
|
+
const fs = await import('fs/promises');
|
|
508
|
+
const files = await fs.readdir(this.escalationsDir);
|
|
509
|
+
const escalations = [];
|
|
510
|
+
for (const f of files) {
|
|
511
|
+
if (!f.endsWith('.json'))
|
|
512
|
+
continue;
|
|
513
|
+
const data = await safeReadJson(path.join(this.escalationsDir, f), null);
|
|
514
|
+
if (data && data.status === 'pending') {
|
|
515
|
+
escalations.push(data);
|
|
516
|
+
}
|
|
517
|
+
}
|
|
518
|
+
return escalations.sort((a, b) => new Date(b.raisedAt).getTime() - new Date(a.raisedAt).getTime());
|
|
519
|
+
}
|
|
520
|
+
catch {
|
|
521
|
+
return [];
|
|
522
|
+
}
|
|
523
|
+
}
|
|
524
|
+
// ---------------------------------------------------------------------------
|
|
525
|
+
// Persistence
|
|
526
|
+
// ---------------------------------------------------------------------------
|
|
527
|
+
async createPendingEscalation(input) {
|
|
528
|
+
const escalation = {
|
|
529
|
+
id: uuidv4(),
|
|
530
|
+
status: 'pending',
|
|
531
|
+
...input,
|
|
532
|
+
raisedAt: new Date().toISOString(),
|
|
533
|
+
};
|
|
534
|
+
await this.saveEscalation(escalation);
|
|
535
|
+
return escalation;
|
|
536
|
+
}
|
|
537
|
+
async saveEscalation(escalation) {
|
|
538
|
+
await ensureDir(this.escalationsDir);
|
|
539
|
+
await atomicWriteJson(path.join(this.escalationsDir, `${escalation.id}.json`), escalation);
|
|
540
|
+
}
|
|
541
|
+
async loadEscalation(id) {
|
|
542
|
+
return safeReadJson(path.join(this.escalationsDir, `${id}.json`), null);
|
|
543
|
+
}
|
|
544
|
+
// ---------------------------------------------------------------------------
|
|
545
|
+
// Notification
|
|
546
|
+
// ---------------------------------------------------------------------------
|
|
547
|
+
/**
|
|
548
|
+
* Notify human via the same channel the original request came from.
|
|
549
|
+
* Falls back to Slack → Chat UI if source channel can't be determined.
|
|
550
|
+
*/
|
|
551
|
+
async notifyHuman(escalation) {
|
|
552
|
+
const message = [
|
|
553
|
+
escalation.summary,
|
|
554
|
+
'',
|
|
555
|
+
`Source: ${escalation.source}`,
|
|
556
|
+
escalation.missionId ? `Mission: ${escalation.missionId}` : '',
|
|
557
|
+
escalation.workItemId ? `WorkItem: ${escalation.workItemId}` : '',
|
|
558
|
+
'',
|
|
559
|
+
`Resolve via: POST /api/escalations/${escalation.id}/resolve`,
|
|
560
|
+
].filter(Boolean).join('\n');
|
|
561
|
+
// Determine source channel from the escalation's associated WorkItem/Request
|
|
562
|
+
const sourceChannel = await this.resolveSourceChannel(escalation);
|
|
563
|
+
let notified = false;
|
|
564
|
+
// Route to the original channel
|
|
565
|
+
if (sourceChannel === 'slack' || !sourceChannel) {
|
|
566
|
+
try {
|
|
567
|
+
const { getSlackOrchestratorBridge } = await import('../slack/slack-orchestrator-bridge.js');
|
|
568
|
+
const bridge = getSlackOrchestratorBridge();
|
|
569
|
+
if (bridge) {
|
|
570
|
+
await bridge.sendNotification({
|
|
571
|
+
type: 'alert',
|
|
572
|
+
title: 'Human Decision Required',
|
|
573
|
+
message,
|
|
574
|
+
urgency: 'high',
|
|
575
|
+
timestamp: new Date().toISOString(),
|
|
576
|
+
});
|
|
577
|
+
notified = true;
|
|
578
|
+
}
|
|
579
|
+
}
|
|
580
|
+
catch {
|
|
581
|
+
// Slack not available
|
|
582
|
+
}
|
|
583
|
+
}
|
|
584
|
+
// Google Chat and Telegram: use the messaging adapter pattern
|
|
585
|
+
if (sourceChannel === 'google_chat' || sourceChannel === 'telegram') {
|
|
586
|
+
try {
|
|
587
|
+
// Route via the Slack bridge's sendNotification which handles multi-channel
|
|
588
|
+
// For now, fall through to Slack as the bridge handles routing
|
|
589
|
+
const { getSlackOrchestratorBridge } = await import('../slack/slack-orchestrator-bridge.js');
|
|
590
|
+
const bridge = getSlackOrchestratorBridge();
|
|
591
|
+
if (bridge) {
|
|
592
|
+
await bridge.sendNotification({
|
|
593
|
+
type: 'alert',
|
|
594
|
+
title: `Human Decision Required (via ${sourceChannel})`,
|
|
595
|
+
message,
|
|
596
|
+
urgency: 'high',
|
|
597
|
+
timestamp: new Date().toISOString(),
|
|
598
|
+
});
|
|
599
|
+
notified = true;
|
|
600
|
+
}
|
|
601
|
+
}
|
|
602
|
+
catch {
|
|
603
|
+
// Channel not available
|
|
604
|
+
}
|
|
605
|
+
}
|
|
606
|
+
if (!notified) {
|
|
607
|
+
this.logger.warn('Could not notify human via any channel', {
|
|
608
|
+
escalationId: escalation.id,
|
|
609
|
+
sourceChannel,
|
|
610
|
+
});
|
|
611
|
+
}
|
|
612
|
+
}
|
|
613
|
+
/**
|
|
614
|
+
* Resolve the source channel for an escalation by tracing back to the
|
|
615
|
+
* original Request/ChatMessage that started the work.
|
|
616
|
+
*/
|
|
617
|
+
async resolveSourceChannel(escalation) {
|
|
618
|
+
if (!escalation.workItemId)
|
|
619
|
+
return null;
|
|
620
|
+
try {
|
|
621
|
+
const taskPool = (await import('../task-pool/task-pool.service.js')).TaskPoolService.getInstance();
|
|
622
|
+
const allItems = await taskPool.getAllItems();
|
|
623
|
+
const wi = allItems.find((w) => w.id === escalation.workItemId);
|
|
624
|
+
if (!wi?.requestId)
|
|
625
|
+
return null;
|
|
626
|
+
// Load the Request to find its source conversation
|
|
627
|
+
const { RequestService } = await import('./request.service.js');
|
|
628
|
+
const request = await RequestService.getInstance().getById(wi.requestId);
|
|
629
|
+
if (!request?.sourceConversationItemId)
|
|
630
|
+
return null;
|
|
631
|
+
// Infer channel from conversation ID pattern
|
|
632
|
+
const { inferChannelTypeFromConversationId } = await import('../../types/chat.types.js');
|
|
633
|
+
return inferChannelTypeFromConversationId(request.sourceConversationItemId) ?? null;
|
|
634
|
+
}
|
|
635
|
+
catch {
|
|
636
|
+
return null; // Can't determine — will fallback to default
|
|
637
|
+
}
|
|
638
|
+
}
|
|
639
|
+
/**
|
|
640
|
+
* Notify TL agent via message queue (for team_lead-targeted escalations).
|
|
641
|
+
*/
|
|
642
|
+
async notifyAgent(request, workItemId, workerSession) {
|
|
643
|
+
try {
|
|
644
|
+
const { MessageQueueService } = await import('../messaging/message-queue.service.js');
|
|
645
|
+
const mq = new MessageQueueService(process.cwd());
|
|
646
|
+
mq.enqueue({
|
|
647
|
+
content: [
|
|
648
|
+
`[ESCALATION] Worker ${workerSession} needs alignment on task.`,
|
|
649
|
+
'',
|
|
650
|
+
`Issue: ${request.discoveredIssue}`,
|
|
651
|
+
`Reason: ${request.reason}`,
|
|
652
|
+
`Decision needed: ${request.decisionNeeded}`,
|
|
653
|
+
'',
|
|
654
|
+
`Options:`,
|
|
655
|
+
...request.options.map((o, i) => ` ${i + 1}. ${o.description} (impact: ${o.impact})`),
|
|
656
|
+
'',
|
|
657
|
+
`Worker recommends: ${request.recommendation}`,
|
|
658
|
+
].join('\n'),
|
|
659
|
+
conversationId: `escalation-${workItemId}-${Date.now()}`,
|
|
660
|
+
source: 'system_event',
|
|
661
|
+
sourceMetadata: { type: 'escalation', workItemId, workerSession },
|
|
662
|
+
});
|
|
663
|
+
}
|
|
664
|
+
catch (err) {
|
|
665
|
+
this.logger.debug('Agent notification failed (non-fatal)', {
|
|
666
|
+
error: err instanceof Error ? err.message : String(err),
|
|
667
|
+
});
|
|
668
|
+
}
|
|
669
|
+
}
|
|
670
|
+
// ---------------------------------------------------------------------------
|
|
671
|
+
// WorkItem pause/resume helpers
|
|
672
|
+
// ---------------------------------------------------------------------------
|
|
673
|
+
async pauseWorkItem(workItemId) {
|
|
674
|
+
try {
|
|
675
|
+
const taskPool = (await import('../task-pool/task-pool.service.js')).TaskPoolService.getInstance();
|
|
676
|
+
await taskPool.updateItemStatus(workItemId, 'blocked');
|
|
677
|
+
}
|
|
678
|
+
catch {
|
|
679
|
+
// Non-fatal
|
|
680
|
+
}
|
|
681
|
+
}
|
|
682
|
+
async resumeWorkItem(workItemId) {
|
|
683
|
+
try {
|
|
684
|
+
const taskPool = (await import('../task-pool/task-pool.service.js')).TaskPoolService.getInstance();
|
|
685
|
+
await taskPool.updateItemStatus(workItemId, 'queued');
|
|
686
|
+
}
|
|
687
|
+
catch {
|
|
688
|
+
// Non-fatal
|
|
689
|
+
}
|
|
690
|
+
}
|
|
691
|
+
}
|
|
692
|
+
//# sourceMappingURL=escalation-router.service.js.map
|