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
|
@@ -158,7 +158,10 @@ export class ToolCallLoopDetector {
|
|
|
158
158
|
}
|
|
159
159
|
if (this.consecutiveErrors >= this.errorThreshold) {
|
|
160
160
|
this.loopDetected = true;
|
|
161
|
-
|
|
161
|
+
// Serialize objects properly — `String(obj)` yields "[object Object]"
|
|
162
|
+
// and loses the actual error. Mirror isErrorResult()'s serialization.
|
|
163
|
+
const resultStr = typeof result === 'string' ? result : JSON.stringify(result);
|
|
164
|
+
this.loopReason = `Tool "${toolName}" returned errors ${this.consecutiveErrors} consecutive times. Last result: ${resultStr.slice(0, 200)}`;
|
|
162
165
|
return true;
|
|
163
166
|
}
|
|
164
167
|
} else {
|
|
@@ -198,6 +201,40 @@ export class ToolCallLoopDetector {
|
|
|
198
201
|
* const result = await runner.run('Check all team statuses');
|
|
199
202
|
* ```
|
|
200
203
|
*/
|
|
204
|
+
/**
|
|
205
|
+
* Thrown when a single agent run exceeds its wall-clock budget.
|
|
206
|
+
*
|
|
207
|
+
* Distinct class (rather than a message-sniffed "timeout" string) because
|
|
208
|
+
* {@link AgentRunnerService.isRecoverableError} treats anything mentioning
|
|
209
|
+
* "timeout" as retryable. A hard-budget expiry is deliberately NOT retryable:
|
|
210
|
+
* the budget covers the whole run including retries, so re-entering the retry
|
|
211
|
+
* loop would multiply the very stall the budget exists to bound.
|
|
212
|
+
*
|
|
213
|
+
* @example
|
|
214
|
+
* ```typescript
|
|
215
|
+
* try { await runner.run(msg); }
|
|
216
|
+
* catch (e) { if (e instanceof AgentRunTimeoutError) recycleAgent(); }
|
|
217
|
+
* ```
|
|
218
|
+
*/
|
|
219
|
+
export class AgentRunTimeoutError extends Error {
|
|
220
|
+
/** Wall-clock budget that was exceeded, in milliseconds. */
|
|
221
|
+
readonly timeoutMs: number;
|
|
222
|
+
|
|
223
|
+
/**
|
|
224
|
+
* @param timeoutMs - The budget that was exceeded, in milliseconds
|
|
225
|
+
* @param modelId - Model the run was using, for operator diagnosis
|
|
226
|
+
*/
|
|
227
|
+
constructor(timeoutMs: number, modelId: string) {
|
|
228
|
+
super(
|
|
229
|
+
`Agent run exceeded its ${timeoutMs}ms wall-clock budget (model: ${modelId}) `
|
|
230
|
+
+ `and was hard-aborted. The model connection stalled without delivering a `
|
|
231
|
+
+ `response — see CREWLY_AGENT_MESSAGE_TIMEOUT_MS to tune the budget.`,
|
|
232
|
+
);
|
|
233
|
+
this.name = 'AgentRunTimeoutError';
|
|
234
|
+
this.timeoutMs = timeoutMs;
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
|
|
201
238
|
/** Function type for generateText — used for dependency injection in tests */
|
|
202
239
|
type GenerateTextFn = (opts: Record<string, unknown>) => Promise<Record<string, unknown>>;
|
|
203
240
|
|
|
@@ -269,6 +306,7 @@ export class AgentRunnerService {
|
|
|
269
306
|
messages: [],
|
|
270
307
|
systemPrompt: this.effectiveSystemPrompt,
|
|
271
308
|
totalTokens: { input: 0, output: 0 },
|
|
309
|
+
lastContextTokens: 0,
|
|
272
310
|
createdAt: new Date(),
|
|
273
311
|
lastActivityAt: new Date(),
|
|
274
312
|
};
|
|
@@ -662,11 +700,19 @@ export class AgentRunnerService {
|
|
|
662
700
|
* @returns ContextBudgetStatus with usage stats and level
|
|
663
701
|
*/
|
|
664
702
|
getContextBudget(): ContextBudgetStatus {
|
|
665
|
-
const
|
|
703
|
+
const lifetimeTokensUsed = this.state.totalTokens.input + this.state.totalTokens.output;
|
|
704
|
+
// Occupancy, NOT lifetime spend. The prompt is re-sent in full on every
|
|
705
|
+
// request, so the lifetime sum counts the same history once per turn and
|
|
706
|
+
// sails past the window within a handful of messages — which used to pin
|
|
707
|
+
// `level` at 'critical' forever and run a compaction before every single
|
|
708
|
+
// message, doubling the model calls for the rest of the session.
|
|
709
|
+
const contextTokensUsed = this.state.lastContextTokens > 0
|
|
710
|
+
? this.state.lastContextTokens
|
|
711
|
+
: this.estimateContextTokens();
|
|
666
712
|
const contextWindowSize = MODEL_CONTEXT_WINDOWS[this.config.model.modelId]
|
|
667
713
|
?? MODEL_CONTEXT_WINDOWS.default;
|
|
668
714
|
const usagePercent = contextWindowSize > 0
|
|
669
|
-
?
|
|
715
|
+
? contextTokensUsed / contextWindowSize
|
|
670
716
|
: 0;
|
|
671
717
|
|
|
672
718
|
const threshold = this.config.compactionThreshold;
|
|
@@ -682,7 +728,7 @@ export class AgentRunnerService {
|
|
|
682
728
|
|| usagePercent >= threshold;
|
|
683
729
|
|
|
684
730
|
const pct = (usagePercent * 100).toFixed(1);
|
|
685
|
-
let summary = `${pct}% of context budget used (${
|
|
731
|
+
let summary = `${pct}% of context budget used (${contextTokensUsed.toLocaleString()}/${contextWindowSize.toLocaleString()} tokens, ${this.state.messages.length} messages, ${lifetimeTokensUsed.toLocaleString()} billed this session)`;
|
|
686
732
|
if (level === 'critical') {
|
|
687
733
|
summary += ' — CRITICAL: compaction recommended immediately';
|
|
688
734
|
} else if (level === 'warning') {
|
|
@@ -690,7 +736,8 @@ export class AgentRunnerService {
|
|
|
690
736
|
}
|
|
691
737
|
|
|
692
738
|
return {
|
|
693
|
-
|
|
739
|
+
contextTokensUsed,
|
|
740
|
+
lifetimeTokensUsed,
|
|
694
741
|
contextWindowSize,
|
|
695
742
|
usagePercent,
|
|
696
743
|
level,
|
|
@@ -700,6 +747,91 @@ export class AgentRunnerService {
|
|
|
700
747
|
};
|
|
701
748
|
}
|
|
702
749
|
|
|
750
|
+
/**
|
|
751
|
+
* Provider-specific request options.
|
|
752
|
+
*
|
|
753
|
+
* Turns on Anthropic prompt caching. Every request re-sends the same
|
|
754
|
+
* prefix — the system prompt (tens of KB for an orchestrator) followed by
|
|
755
|
+
* the tool schemas — and that prefix is byte-stable for the life of the
|
|
756
|
+
* session, which is exactly the shape caching is for. Without this the
|
|
757
|
+
* whole prefix is billed at full rate on every single turn.
|
|
758
|
+
*
|
|
759
|
+
* The top-level `cacheControl` places the breakpoint at the last cacheable
|
|
760
|
+
* block, so tools + system + settled history are covered by one marker and
|
|
761
|
+
* only the newest turn is uncached.
|
|
762
|
+
*
|
|
763
|
+
* Anthropic-only by design: DeepSeek caches server-side with no opt-in, and
|
|
764
|
+
* the other providers ignore an option namespaced to a provider that is not
|
|
765
|
+
* theirs — but sending it only where it means something keeps the request
|
|
766
|
+
* honest.
|
|
767
|
+
*
|
|
768
|
+
* @returns Provider options for the current model, or undefined when the
|
|
769
|
+
* provider needs none
|
|
770
|
+
*/
|
|
771
|
+
private buildProviderOptions(): Record<string, Record<string, unknown>> | undefined {
|
|
772
|
+
if (this.config.model.provider !== 'anthropic') return undefined;
|
|
773
|
+
return { anthropic: { cacheControl: { type: 'ephemeral' } } };
|
|
774
|
+
}
|
|
775
|
+
|
|
776
|
+
/**
|
|
777
|
+
* Record how full the context is after a completed request.
|
|
778
|
+
*
|
|
779
|
+
* The prompt the provider just billed IS the context size — `input` covers
|
|
780
|
+
* the system prompt, the tool schemas and the retained history, and
|
|
781
|
+
* `cachedInput` covers the part of that same prompt served from cache
|
|
782
|
+
* (billed cheaper, but still occupying the window, so it must be added
|
|
783
|
+
* back). The reply is included because the next request carries it forward.
|
|
784
|
+
*
|
|
785
|
+
* Assigns rather than accumulates: this is a snapshot of the current turn,
|
|
786
|
+
* and compaction shrinks it back down on the next measurement.
|
|
787
|
+
*
|
|
788
|
+
* @param usage - Token counts reported by the provider for the request
|
|
789
|
+
*/
|
|
790
|
+
private recordContextOccupancy(
|
|
791
|
+
usage: { input: number; output: number; cachedInput: number },
|
|
792
|
+
): void {
|
|
793
|
+
this.state.lastContextTokens = usage.input + usage.cachedInput + usage.output;
|
|
794
|
+
}
|
|
795
|
+
|
|
796
|
+
/**
|
|
797
|
+
* Estimate context occupancy from the text we are about to send.
|
|
798
|
+
*
|
|
799
|
+
* Only used before the first response of a conversation, when no provider
|
|
800
|
+
* measurement exists yet. A rough number is fine there — one turn later it
|
|
801
|
+
* is replaced by the provider's own count — but it must not be wildly low,
|
|
802
|
+
* because a 40KB system prompt already fills a meaningful slice of a small
|
|
803
|
+
* window before any history exists.
|
|
804
|
+
*
|
|
805
|
+
* CJK and Latin text are counted separately: a single chars-per-token ratio
|
|
806
|
+
* misjudges a Chinese prompt by more than 2x in whichever direction it is
|
|
807
|
+
* tuned for. Tool schemas are not included — they are unavailable here and
|
|
808
|
+
* the estimate is superseded immediately.
|
|
809
|
+
*
|
|
810
|
+
* @returns Estimated tokens currently occupying the context window
|
|
811
|
+
*/
|
|
812
|
+
private estimateContextTokens(): number {
|
|
813
|
+
let text = this.state.systemPrompt ?? '';
|
|
814
|
+
for (const m of this.state.messages) {
|
|
815
|
+
text += typeof m.content === 'string' ? m.content : JSON.stringify(m.content);
|
|
816
|
+
}
|
|
817
|
+
let cjk = 0;
|
|
818
|
+
for (const ch of text) {
|
|
819
|
+
const code = ch.codePointAt(0) ?? 0;
|
|
820
|
+
// CJK ideographs, kana, Hangul, and full-width forms.
|
|
821
|
+
if ((code >= 0x3040 && code <= 0x9fff)
|
|
822
|
+
|| (code >= 0xac00 && code <= 0xd7af)
|
|
823
|
+
|| (code >= 0xf900 && code <= 0xfaff)
|
|
824
|
+
|| (code >= 0xff00 && code <= 0xffef)) {
|
|
825
|
+
cjk++;
|
|
826
|
+
}
|
|
827
|
+
}
|
|
828
|
+
const latin = [...text].length - cjk;
|
|
829
|
+
return Math.ceil(
|
|
830
|
+
latin / CREWLY_AGENT_DEFAULTS.CHARS_PER_TOKEN_LATIN
|
|
831
|
+
+ cjk / CREWLY_AGENT_DEFAULTS.CHARS_PER_TOKEN_CJK,
|
|
832
|
+
);
|
|
833
|
+
}
|
|
834
|
+
|
|
703
835
|
/**
|
|
704
836
|
* Process queued messages serially.
|
|
705
837
|
*/
|
|
@@ -824,19 +956,73 @@ export class AgentRunnerService {
|
|
|
824
956
|
externalAbortSignal.addEventListener('abort', () => runAbort.abort(), { once: true });
|
|
825
957
|
}
|
|
826
958
|
|
|
959
|
+
// Wall-clock budget for the ENTIRE run (all retries included).
|
|
960
|
+
//
|
|
961
|
+
// Without this, a model connection that opens but then goes silent — no
|
|
962
|
+
// bytes, no FIN, no error — hangs `await streamResult` forever: undici
|
|
963
|
+
// applies no idle deadline to a streaming body. That stalled promise wedges
|
|
964
|
+
// processQueue permanently (`this.processing` stays true), so every later
|
|
965
|
+
// message queues behind it and the agent goes silently catatonic: the
|
|
966
|
+
// process is alive and heartbeating, but no run ever completes and no error
|
|
967
|
+
// is ever raised. Bounding the run converts that invisible hang into a
|
|
968
|
+
// normal rejection the caller can log, surface, and recover from.
|
|
969
|
+
const timeoutMs = this.resolveRunTimeoutMs();
|
|
970
|
+
let hardTimer: ReturnType<typeof setTimeout> | undefined;
|
|
971
|
+
let softTimer: ReturnType<typeof setTimeout> | undefined;
|
|
972
|
+
|
|
827
973
|
try {
|
|
828
974
|
// If a test override is set, use generateText path (backward compatible)
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
|
|
975
|
+
const runPromise = this._generateTextFn
|
|
976
|
+
? this.executeRunWithGenerateText(tools, runAbort.signal)
|
|
977
|
+
// Production path: streamText for real-time feedback
|
|
978
|
+
: this.executeRunWithStreamText(tools, runAbort.signal);
|
|
979
|
+
|
|
980
|
+
// The loser of the race stays pending. Attach a no-op catch so its
|
|
981
|
+
// eventual abort-rejection is never an unhandled rejection (which
|
|
982
|
+
// crashes the agent process under Node's default policy).
|
|
983
|
+
runPromise.catch(() => { /* settled by the race below */ });
|
|
984
|
+
|
|
985
|
+
const timeoutPromise = new Promise<never>((_, reject) => {
|
|
986
|
+
softTimer = setTimeout(() => {
|
|
987
|
+
console.warn(
|
|
988
|
+
`[AgentRunner] Run exceeded soft warning threshold `
|
|
989
|
+
+ `(${CREWLY_AGENT_DEFAULTS.MESSAGE_SOFT_WARNING_MS}ms) — still waiting on the model.`,
|
|
990
|
+
);
|
|
991
|
+
}, CREWLY_AGENT_DEFAULTS.MESSAGE_SOFT_WARNING_MS);
|
|
992
|
+
|
|
993
|
+
hardTimer = setTimeout(() => {
|
|
994
|
+
// Abort first so the in-flight HTTP request and any tool work are
|
|
995
|
+
// torn down, then reject — a well-behaved provider unwinds on the
|
|
996
|
+
// signal, and a wedged one no longer holds the queue hostage.
|
|
997
|
+
runAbort.abort();
|
|
998
|
+
reject(new AgentRunTimeoutError(timeoutMs, this.config.model.modelId));
|
|
999
|
+
}, timeoutMs);
|
|
1000
|
+
});
|
|
832
1001
|
|
|
833
|
-
|
|
834
|
-
return await this.executeRunWithStreamText(tools, runAbort.signal);
|
|
1002
|
+
return await Promise.race([runPromise, timeoutPromise]);
|
|
835
1003
|
} finally {
|
|
1004
|
+
if (hardTimer) clearTimeout(hardTimer);
|
|
1005
|
+
if (softTimer) clearTimeout(softTimer);
|
|
836
1006
|
this.currentRunAbort = null;
|
|
837
1007
|
}
|
|
838
1008
|
}
|
|
839
1009
|
|
|
1010
|
+
/**
|
|
1011
|
+
* Resolve the wall-clock budget for one run.
|
|
1012
|
+
*
|
|
1013
|
+
* Per-model overrides win over the global default: reasoning models emit
|
|
1014
|
+
* chain-of-thought tokens far slower than plain content, so a budget tuned
|
|
1015
|
+
* for a chat model would kill them mid-thought.
|
|
1016
|
+
*
|
|
1017
|
+
* @returns Budget in milliseconds for the currently configured model
|
|
1018
|
+
*/
|
|
1019
|
+
private resolveRunTimeoutMs(): number {
|
|
1020
|
+
return (
|
|
1021
|
+
CREWLY_AGENT_DEFAULTS.MODEL_TIMEOUT_MS[this.config.model.modelId]
|
|
1022
|
+
?? CREWLY_AGENT_DEFAULTS.MESSAGE_TIMEOUT_MS
|
|
1023
|
+
);
|
|
1024
|
+
}
|
|
1025
|
+
|
|
840
1026
|
/**
|
|
841
1027
|
* Check if an error is recoverable and eligible for automatic retry.
|
|
842
1028
|
*
|
|
@@ -850,6 +1036,9 @@ export class AgentRunnerService {
|
|
|
850
1036
|
*/
|
|
851
1037
|
private isRecoverableError(error: unknown): boolean {
|
|
852
1038
|
if (!(error instanceof Error)) return false;
|
|
1039
|
+
// Hard-budget expiry is terminal by construction: the budget spans the
|
|
1040
|
+
// whole run, so retrying would just re-enter the stall it bounded.
|
|
1041
|
+
if (error instanceof AgentRunTimeoutError) return false;
|
|
853
1042
|
const msg = error.message.toLowerCase();
|
|
854
1043
|
const statusMatch = msg.match(/\b(429|5\d{2})\b/);
|
|
855
1044
|
if (statusMatch) return true;
|
|
@@ -955,6 +1144,7 @@ export class AgentRunnerService {
|
|
|
955
1144
|
model: this.model!,
|
|
956
1145
|
system: this.state.systemPrompt,
|
|
957
1146
|
messages: this.state.messages,
|
|
1147
|
+
providerOptions: this.buildProviderOptions(),
|
|
958
1148
|
tools: tools as any,
|
|
959
1149
|
stopWhen: stepCountIs(this.config.maxSteps),
|
|
960
1150
|
temperature: this.config.model.temperature,
|
|
@@ -1067,9 +1257,11 @@ export class AgentRunnerService {
|
|
|
1067
1257
|
const usage = {
|
|
1068
1258
|
input: resultUsage?.inputTokens ?? 0,
|
|
1069
1259
|
output: resultUsage?.outputTokens ?? 0,
|
|
1260
|
+
cachedInput: resultUsage?.cachedInputTokens ?? 0,
|
|
1070
1261
|
};
|
|
1071
1262
|
this.state.totalTokens.input += usage.input;
|
|
1072
1263
|
this.state.totalTokens.output += usage.output;
|
|
1264
|
+
this.recordContextOccupancy(usage);
|
|
1073
1265
|
|
|
1074
1266
|
// Check budget after token update
|
|
1075
1267
|
const postBudget = this.getContextBudget();
|
|
@@ -1183,6 +1375,7 @@ export class AgentRunnerService {
|
|
|
1183
1375
|
model: this.model,
|
|
1184
1376
|
system: this.state.systemPrompt,
|
|
1185
1377
|
messages: this.state.messages,
|
|
1378
|
+
providerOptions: this.buildProviderOptions(),
|
|
1186
1379
|
tools,
|
|
1187
1380
|
stopWhen: stepCountIs(this.config.maxSteps),
|
|
1188
1381
|
temperature: this.config.model.temperature,
|
|
@@ -1251,9 +1444,11 @@ export class AgentRunnerService {
|
|
|
1251
1444
|
const usage = {
|
|
1252
1445
|
input: result.usage?.inputTokens ?? 0,
|
|
1253
1446
|
output: result.usage?.outputTokens ?? 0,
|
|
1447
|
+
cachedInput: result.usage?.cachedInputTokens ?? 0,
|
|
1254
1448
|
};
|
|
1255
1449
|
this.state.totalTokens.input += usage.input;
|
|
1256
1450
|
this.state.totalTokens.output += usage.output;
|
|
1451
|
+
this.recordContextOccupancy(usage);
|
|
1257
1452
|
|
|
1258
1453
|
// Check budget after token update and attach warning if approaching limits
|
|
1259
1454
|
const postBudget = this.getContextBudget();
|
|
@@ -1398,6 +1593,7 @@ export class AgentRunnerService {
|
|
|
1398
1593
|
model: this.model,
|
|
1399
1594
|
system: this.state.systemPrompt,
|
|
1400
1595
|
messages: this.state.messages,
|
|
1596
|
+
providerOptions: this.buildProviderOptions(),
|
|
1401
1597
|
tools: tools as any,
|
|
1402
1598
|
stopWhen: stepCountIs(20), // Limited steps for follow-up
|
|
1403
1599
|
temperature: this.config.model.temperature,
|
|
@@ -1409,7 +1605,7 @@ export class AgentRunnerService {
|
|
|
1409
1605
|
const followUpResult = followUp as unknown as Record<string, unknown>;
|
|
1410
1606
|
const steps = (followUpResult.steps as Array<Record<string, unknown>>) ?? [];
|
|
1411
1607
|
const text = (followUpResult.text as string) ?? '';
|
|
1412
|
-
const followUpUsage = followUpResult.usage as { inputTokens?: number; outputTokens?: number } | undefined;
|
|
1608
|
+
const followUpUsage = followUpResult.usage as { inputTokens?: number; outputTokens?: number; cachedInputTokens?: number } | undefined;
|
|
1413
1609
|
const finishReason = (followUpResult.finishReason as string) ?? 'stop';
|
|
1414
1610
|
|
|
1415
1611
|
const followUpToolCalls: ToolCallRecord[] = [];
|
|
@@ -1426,10 +1622,16 @@ export class AgentRunnerService {
|
|
|
1426
1622
|
this.state.messages.push({ role: 'assistant', content: text });
|
|
1427
1623
|
}
|
|
1428
1624
|
|
|
1429
|
-
// Track follow-up token usage
|
|
1625
|
+
// Track follow-up token usage. This is a later request in the same run,
|
|
1626
|
+
// so its prompt is the most current picture of how full the context is.
|
|
1430
1627
|
if (followUpUsage) {
|
|
1431
1628
|
this.state.totalTokens.input += followUpUsage.inputTokens ?? 0;
|
|
1432
1629
|
this.state.totalTokens.output += followUpUsage.outputTokens ?? 0;
|
|
1630
|
+
this.recordContextOccupancy({
|
|
1631
|
+
input: followUpUsage.inputTokens ?? 0,
|
|
1632
|
+
output: followUpUsage.outputTokens ?? 0,
|
|
1633
|
+
cachedInput: followUpUsage.cachedInputTokens ?? 0,
|
|
1634
|
+
});
|
|
1433
1635
|
}
|
|
1434
1636
|
|
|
1435
1637
|
return {
|
|
@@ -1438,6 +1640,7 @@ export class AgentRunnerService {
|
|
|
1438
1640
|
usage: {
|
|
1439
1641
|
input: followUpUsage?.inputTokens ?? 0,
|
|
1440
1642
|
output: followUpUsage?.outputTokens ?? 0,
|
|
1643
|
+
cachedInput: followUpUsage?.cachedInputTokens ?? 0,
|
|
1441
1644
|
},
|
|
1442
1645
|
toolCalls: followUpToolCalls,
|
|
1443
1646
|
finishReason,
|
|
@@ -1470,6 +1673,7 @@ export class AgentRunnerService {
|
|
|
1470
1673
|
model: this.model,
|
|
1471
1674
|
system: this.state.systemPrompt,
|
|
1472
1675
|
messages: this.state.messages,
|
|
1676
|
+
providerOptions: this.buildProviderOptions(),
|
|
1473
1677
|
maxOutputTokens: resolveMaxOutputTokens(this.config.model),
|
|
1474
1678
|
temperature: this.config.model.temperature,
|
|
1475
1679
|
});
|
|
@@ -1484,6 +1688,11 @@ export class AgentRunnerService {
|
|
|
1484
1688
|
if (fallbackUsage) {
|
|
1485
1689
|
this.state.totalTokens.input += fallbackUsage.inputTokens ?? 0;
|
|
1486
1690
|
this.state.totalTokens.output += fallbackUsage.outputTokens ?? 0;
|
|
1691
|
+
this.recordContextOccupancy({
|
|
1692
|
+
input: fallbackUsage.inputTokens ?? 0,
|
|
1693
|
+
output: fallbackUsage.outputTokens ?? 0,
|
|
1694
|
+
cachedInput: fallbackUsage.cachedInputTokens ?? 0,
|
|
1695
|
+
});
|
|
1487
1696
|
}
|
|
1488
1697
|
}
|
|
1489
1698
|
|
|
@@ -2186,6 +2186,25 @@ describe('Tool Registry', () => {
|
|
|
2186
2186
|
expect(validateFn('rm -rf ./dist')).toBeNull();
|
|
2187
2187
|
expect(validateFn('rm -rf node_modules')).toBeNull();
|
|
2188
2188
|
});
|
|
2189
|
+
|
|
2190
|
+
it('should signal the block is permanent so the model stops retrying', () => {
|
|
2191
|
+
// A blocked command is a policy decision, not a transient failure. When
|
|
2192
|
+
// the message read like a retryable error the model retried variations
|
|
2193
|
+
// until the loop detector aborted the whole run, so the wording carries
|
|
2194
|
+
// real behavioural weight and is worth pinning.
|
|
2195
|
+
const reason = validateFn('kill -9 $$');
|
|
2196
|
+
|
|
2197
|
+
expect(reason).not.toBeNull();
|
|
2198
|
+
expect(reason).toMatch(/permanently blocked/i);
|
|
2199
|
+
expect(reason).toMatch(/NOT a transient error/i);
|
|
2200
|
+
expect(reason).toMatch(/do NOT retry/i);
|
|
2201
|
+
});
|
|
2202
|
+
|
|
2203
|
+
it('should still identify which pattern caused the block', () => {
|
|
2204
|
+
// The matched pattern stays in the message: without it the model cannot
|
|
2205
|
+
// tell which part of a compound command was rejected.
|
|
2206
|
+
expect(validateFn('shutdown -h now')).toMatch(/shutdown/);
|
|
2207
|
+
});
|
|
2189
2208
|
});
|
|
2190
2209
|
|
|
2191
2210
|
describe('bash_exec tool', () => {
|
|
@@ -79,7 +79,10 @@ export const APPROVAL_REQUIRED_BASH_PATTERNS: Array<{ pattern: RegExp; label: st
|
|
|
79
79
|
export function validateBashCommand(command: string): string | null {
|
|
80
80
|
for (const pattern of BLOCKED_COMMAND_PATTERNS) {
|
|
81
81
|
if (pattern.test(command)) {
|
|
82
|
-
|
|
82
|
+
// Phrased to signal the model this is a PERMANENT policy block, not a
|
|
83
|
+
// transient failure — otherwise it retries variations until the loop
|
|
84
|
+
// detector aborts the whole run.
|
|
85
|
+
return `Command permanently blocked by security policy (matched ${pattern}). This is NOT a transient error — do NOT retry this or a variation. Achieve the goal a different way (use a Crewly API/tool, or skip this step).`;
|
|
83
86
|
}
|
|
84
87
|
}
|
|
85
88
|
return null;
|
|
@@ -105,6 +105,20 @@ export interface ConversationState {
|
|
|
105
105
|
systemPrompt: string;
|
|
106
106
|
/** Cumulative token usage across all generateText calls */
|
|
107
107
|
totalTokens: { input: number; output: number };
|
|
108
|
+
/**
|
|
109
|
+
* Tokens occupying the model's context as of the most recent request:
|
|
110
|
+
* the prompt that was actually sent (system + tools + retained history,
|
|
111
|
+
* cache hits included) plus the reply it produced, which the next request
|
|
112
|
+
* carries forward.
|
|
113
|
+
*
|
|
114
|
+
* This is a MEASUREMENT, not a running total — it is assigned, never
|
|
115
|
+
* accumulated. `totalTokens` answers "what has this session cost?";
|
|
116
|
+
* this answers "how full is the context?". Using the former for the
|
|
117
|
+
* latter conflates lifetime spend with occupancy and climbs past 100%
|
|
118
|
+
* of the window after a few turns, pinning the runner in permanent
|
|
119
|
+
* compaction. 0 until the first response lands.
|
|
120
|
+
*/
|
|
121
|
+
lastContextTokens: number;
|
|
108
122
|
/** Conversation creation time */
|
|
109
123
|
createdAt: Date;
|
|
110
124
|
/** Last activity timestamp */
|
|
@@ -156,8 +170,13 @@ export interface AgentRunResult {
|
|
|
156
170
|
text: string;
|
|
157
171
|
/** Number of steps taken in this run */
|
|
158
172
|
steps: number;
|
|
159
|
-
/**
|
|
160
|
-
|
|
173
|
+
/**
|
|
174
|
+
* Token usage for this run. `cachedInput` is the portion of `input` the
|
|
175
|
+
* provider served from its prompt cache — the number to watch when
|
|
176
|
+
* verifying caching actually engaged. It is 0 on providers that do not
|
|
177
|
+
* report cache hits.
|
|
178
|
+
*/
|
|
179
|
+
usage: { input: number; output: number; cachedInput: number };
|
|
161
180
|
/** Tool calls made during this run */
|
|
162
181
|
toolCalls: ToolCallRecord[];
|
|
163
182
|
/** Reason the generation finished */
|
|
@@ -322,8 +341,19 @@ export const WRITE_TOOLS: readonly string[] = [
|
|
|
322
341
|
* Tracks token usage against the model's context window limit.
|
|
323
342
|
*/
|
|
324
343
|
export interface ContextBudgetStatus {
|
|
325
|
-
/**
|
|
326
|
-
|
|
344
|
+
/**
|
|
345
|
+
* Tokens occupying the context window right now — measured from the last
|
|
346
|
+
* request, or estimated from the system prompt + history before the first
|
|
347
|
+
* one. This is the numerator of `usagePercent`.
|
|
348
|
+
*/
|
|
349
|
+
contextTokensUsed: number;
|
|
350
|
+
/**
|
|
351
|
+
* Lifetime tokens billed for this session (input + output across every
|
|
352
|
+
* request). Reported for cost visibility only — it must never be compared
|
|
353
|
+
* against the context window, since re-sent history is counted once per
|
|
354
|
+
* request and the sum exceeds the window long before the context is full.
|
|
355
|
+
*/
|
|
356
|
+
lifetimeTokensUsed: number;
|
|
327
357
|
/** Estimated context window size for the current model */
|
|
328
358
|
contextWindowSize: number;
|
|
329
359
|
/** Usage as a fraction (0.0 - 1.0) */
|
|
@@ -343,7 +373,20 @@ export interface ContextBudgetStatus {
|
|
|
343
373
|
* Used for budget tracking when the model doesn't report its own limit.
|
|
344
374
|
*/
|
|
345
375
|
export const MODEL_CONTEXT_WINDOWS: Record<string, number> = {
|
|
346
|
-
// Anthropic
|
|
376
|
+
// Anthropic — current generation. These were missing, so every model the
|
|
377
|
+
// fleet actually runs fell through to `default: 128_000` while its real
|
|
378
|
+
// window is 1M. An 8x under-estimate makes `compactionThreshold` fire
|
|
379
|
+
// roughly 8x too early, which is expensive: each premature compaction is a
|
|
380
|
+
// whole extra model call.
|
|
381
|
+
'claude-fable-5': 1_000_000,
|
|
382
|
+
'claude-opus-5': 1_000_000,
|
|
383
|
+
'claude-opus-4-8': 1_000_000,
|
|
384
|
+
'claude-opus-4-7': 1_000_000,
|
|
385
|
+
'claude-opus-4-6': 1_000_000,
|
|
386
|
+
'claude-sonnet-5': 1_000_000,
|
|
387
|
+
'claude-sonnet-4-6': 1_000_000,
|
|
388
|
+
'claude-haiku-4-5': 200_000,
|
|
389
|
+
// Anthropic — older dated snapshots, kept so pinned configs still resolve.
|
|
347
390
|
'claude-opus-4-20250514': 200_000,
|
|
348
391
|
'claude-sonnet-4-20250514': 200_000,
|
|
349
392
|
'claude-haiku-4-20250506': 200_000,
|
|
@@ -493,6 +536,14 @@ export const CREWLY_AGENT_DEFAULTS = {
|
|
|
493
536
|
MAX_HISTORY_MESSAGES: 100,
|
|
494
537
|
/** Default compaction threshold (80% of context window) */
|
|
495
538
|
COMPACTION_THRESHOLD: 0.8,
|
|
539
|
+
/**
|
|
540
|
+
* Characters per token, used ONLY to size the context before the first
|
|
541
|
+
* response gives us a real measurement. Latin text runs about 4 chars per
|
|
542
|
+
* token; CJK about 1.5, so the two are counted separately — a single ratio
|
|
543
|
+
* would misjudge a Chinese system prompt by more than 2x.
|
|
544
|
+
*/
|
|
545
|
+
CHARS_PER_TOKEN_LATIN: 4,
|
|
546
|
+
CHARS_PER_TOKEN_CJK: 1.5,
|
|
496
547
|
/** Default model configuration */
|
|
497
548
|
DEFAULT_MODEL: {
|
|
498
549
|
provider: 'google' as ModelProvider,
|
|
@@ -540,6 +591,15 @@ export const CREWLY_AGENT_DEFAULTS = {
|
|
|
540
591
|
/** Soft warning threshold in milliseconds — logs a warning but does not kill the request.
|
|
541
592
|
* Override via CREWLY_AGENT_MESSAGE_SOFT_WARNING_MS env var. */
|
|
542
593
|
MESSAGE_SOFT_WARNING_MS: Number(process.env.CREWLY_AGENT_MESSAGE_SOFT_WARNING_MS) || 240_000,
|
|
594
|
+
/** Grace period added on top of the agent's own run budget before the PARENT
|
|
595
|
+
* gives up waiting on the child's IPC reply.
|
|
596
|
+
*
|
|
597
|
+
* The child enforces the run budget itself and reports a clean error, so in
|
|
598
|
+
* normal operation the parent timer never fires. It exists for the case the
|
|
599
|
+
* child can no longer report at all — blocked event loop, broken stdout pipe,
|
|
600
|
+
* SIGSTOP. The grace keeps the parent from racing the child and mislabelling
|
|
601
|
+
* a normal in-budget timeout as a wedged runtime. */
|
|
602
|
+
IPC_RUN_TIMEOUT_GRACE_MS: 30_000,
|
|
543
603
|
/** Cooldown period in milliseconds after rate limit retries are exhausted */
|
|
544
604
|
RATE_LIMIT_COOLDOWN_MS: 300_000,
|
|
545
605
|
/** Maximum number of automatic retries for recoverable errors (429, 5xx, network) */
|