crewly 1.13.0 → 1.14.0
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/constants.ts +8 -0
- package/config/roles/orchestrator/prompt.md +23 -0
- 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/reply-channel/SKILL.md +6 -0
- package/config/skills/agent/core/reply-channel/execute.sh +14 -2
- 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/agent/core/slack-post/SKILL.md +126 -0
- package/config/skills/agent/core/slack-post/execute.sh +127 -0
- package/config/skills/agent/remote-browser/SKILL.md +178 -0
- package/config/skills/agent/xiaoyuzhoufm-transcript/SKILL.md +46 -22
- package/config/skills/agent/xiaoyuzhoufm-transcript/execute.sh +82 -214
- package/config/skills/agent/xiaoyuzhoufm-transcript/skill.json +3 -3
- 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/orchestrator/get-team-status/SKILL.md +5 -1
- package/config/skills/orchestrator/get-team-status/execute.sh +28 -2
- 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/slack-app-manifest.json +7 -1
- package/config/vitest-exclude.constants.ts +56 -0
- package/dist/backend/backend/src/config/oauth.config.d.ts +93 -19
- package/dist/backend/backend/src/config/oauth.config.d.ts.map +1 -1
- package/dist/backend/backend/src/config/oauth.config.js +121 -19
- package/dist/backend/backend/src/config/oauth.config.js.map +1 -1
- package/dist/backend/backend/src/constants.d.ts +60 -0
- package/dist/backend/backend/src/constants.d.ts.map +1 -1
- package/dist/backend/backend/src/constants.js +74 -0
- package/dist/backend/backend/src/constants.js.map +1 -1
- package/dist/backend/backend/src/controllers/chat/chat.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/chat/chat.controller.js +33 -4
- package/dist/backend/backend/src/controllers/chat/chat.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/credentials/google-oauth.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/credentials/google-oauth.controller.js +27 -9
- package/dist/backend/backend/src/controllers/credentials/google-oauth.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 +360 -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 +43 -7
- package/dist/backend/backend/src/index.js.map +1 -1
- package/dist/backend/backend/src/scripts/stamp-build.d.ts +25 -0
- package/dist/backend/backend/src/scripts/stamp-build.d.ts.map +1 -0
- package/dist/backend/backend/src/scripts/stamp-build.js +48 -0
- package/dist/backend/backend/src/scripts/stamp-build.js.map +1 -0
- package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/agent-registration.service.js +25 -0
- package/dist/backend/backend/src/services/agent/agent-registration.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.js +9 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/types.d.ts +42 -3
- package/dist/backend/backend/src/services/agent/crewly-agent/types.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/types.js +22 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/types.js.map +1 -1
- package/dist/backend/backend/src/services/agent/idle-detection.service.d.ts +10 -0
- package/dist/backend/backend/src/services/agent/idle-detection.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/idle-detection.service.js +37 -0
- package/dist/backend/backend/src/services/agent/idle-detection.service.js.map +1 -1
- package/dist/backend/backend/src/services/browser/browser-bridge.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/browser/browser-bridge.service.js +13 -11
- package/dist/backend/backend/src/services/browser/browser-bridge.service.js.map +1 -1
- package/dist/backend/backend/src/services/browser/browser-proxy.service.d.ts +14 -0
- package/dist/backend/backend/src/services/browser/browser-proxy.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/browser/browser-proxy.service.js +56 -0
- package/dist/backend/backend/src/services/browser/browser-proxy.service.js.map +1 -1
- package/dist/backend/backend/src/services/browser/browser-services.registry.d.ts +63 -0
- package/dist/backend/backend/src/services/browser/browser-services.registry.d.ts.map +1 -0
- package/dist/backend/backend/src/services/browser/browser-services.registry.js +74 -0
- package/dist/backend/backend/src/services/browser/browser-services.registry.js.map +1 -0
- package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts +25 -1
- package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.js +19 -7
- package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.js.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/chat-v2.service.d.ts +57 -0
- package/dist/backend/backend/src/services/chat-v2/chat-v2.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/chat-v2.service.js +110 -1
- package/dist/backend/backend/src/services/chat-v2/chat-v2.service.js.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.d.ts +21 -0
- package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.d.ts.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.js +43 -0
- package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.js.map +1 -1
- package/dist/backend/backend/src/services/core/storage.service.d.ts +6 -0
- package/dist/backend/backend/src/services/core/storage.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/core/storage.service.js +1 -1
- package/dist/backend/backend/src/services/core/storage.service.js.map +1 -1
- package/dist/backend/backend/src/services/credential/helpers/gemini-cli-workspace.helper.d.ts.map +1 -1
- package/dist/backend/backend/src/services/credential/helpers/gemini-cli-workspace.helper.js +6 -2
- package/dist/backend/backend/src/services/credential/helpers/gemini-cli-workspace.helper.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 +54 -0
- package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.js.map +1 -1
- package/dist/backend/backend/src/services/orc/orc-delivery-enforcer.service.d.ts +8 -0
- package/dist/backend/backend/src/services/orc/orc-delivery-enforcer.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/orc/orc-delivery-enforcer.service.js +31 -3
- package/dist/backend/backend/src/services/orc/orc-delivery-enforcer.service.js.map +1 -1
- package/dist/backend/backend/src/services/orchestrator/orchestrator-status.service.d.ts +28 -3
- package/dist/backend/backend/src/services/orchestrator/orchestrator-status.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/orchestrator/orchestrator-status.service.js +65 -8
- package/dist/backend/backend/src/services/orchestrator/orchestrator-status.service.js.map +1 -1
- package/dist/backend/backend/src/services/reconciler/reconcile-rules.d.ts +214 -4
- package/dist/backend/backend/src/services/reconciler/reconcile-rules.d.ts.map +1 -1
- package/dist/backend/backend/src/services/reconciler/reconcile-rules.js +330 -48
- package/dist/backend/backend/src/services/reconciler/reconcile-rules.js.map +1 -1
- package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.d.ts +47 -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 +183 -15
- 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/slack/slack-agent-identity.service.d.ts +209 -0
- package/dist/backend/backend/src/services/slack/slack-agent-identity.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/slack/slack-agent-identity.service.js +416 -0
- package/dist/backend/backend/src/services/slack/slack-agent-identity.service.js.map +1 -0
- package/dist/backend/backend/src/services/slack/slack-agent-post.service.d.ts +124 -0
- package/dist/backend/backend/src/services/slack/slack-agent-post.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/slack/slack-agent-post.service.js +243 -0
- package/dist/backend/backend/src/services/slack/slack-agent-post.service.js.map +1 -0
- package/dist/backend/backend/src/services/slack/slack-initializer.d.ts +11 -0
- package/dist/backend/backend/src/services/slack/slack-initializer.d.ts.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-initializer.js +56 -0
- package/dist/backend/backend/src/services/slack/slack-initializer.js.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-mention-resolver.d.ts +103 -0
- package/dist/backend/backend/src/services/slack/slack-mention-resolver.d.ts.map +1 -0
- package/dist/backend/backend/src/services/slack/slack-mention-resolver.js +197 -0
- package/dist/backend/backend/src/services/slack/slack-mention-resolver.js.map +1 -0
- package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.d.ts.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.js +18 -0
- package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.js.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-team-channel.service.d.ts +329 -0
- package/dist/backend/backend/src/services/slack/slack-team-channel.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/slack/slack-team-channel.service.js +821 -0
- package/dist/backend/backend/src/services/slack/slack-team-channel.service.js.map +1 -0
- package/dist/backend/backend/src/services/slack/slack.service.d.ts +116 -1
- package/dist/backend/backend/src/services/slack/slack.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/slack/slack.service.js +297 -3
- package/dist/backend/backend/src/services/slack/slack.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/v3/workitem-dispatch.subscriber.d.ts +22 -0
- package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.js +71 -0
- package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.js.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-bookkeep-trigger.service.d.ts +20 -2
- package/dist/backend/backend/src/services/wiki/wiki-bookkeep-trigger.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-bookkeep-trigger.service.js +27 -2
- package/dist/backend/backend/src/services/wiki/wiki-bookkeep-trigger.service.js.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-reflect-trigger.service.d.ts +15 -2
- package/dist/backend/backend/src/services/wiki/wiki-reflect-trigger.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-reflect-trigger.service.js +33 -7
- package/dist/backend/backend/src/services/wiki/wiki-reflect-trigger.service.js.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-workitem-bridge.service.d.ts +37 -0
- package/dist/backend/backend/src/services/wiki/wiki-workitem-bridge.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-workitem-bridge.service.js +74 -8
- package/dist/backend/backend/src/services/wiki/wiki-workitem-bridge.service.js.map +1 -1
- package/dist/backend/backend/src/types/slack.types.d.ts +87 -0
- package/dist/backend/backend/src/types/slack.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/slack.types.js.map +1 -1
- package/dist/backend/backend/src/types/v2/index.d.ts +1 -1
- package/dist/backend/backend/src/types/v2/index.d.ts.map +1 -1
- package/dist/backend/backend/src/types/v2/index.js +1 -1
- package/dist/backend/backend/src/types/v2/index.js.map +1 -1
- package/dist/backend/backend/src/types/v2/work-item.types.d.ts +181 -1
- package/dist/backend/backend/src/types/v2/work-item.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/v2/work-item.types.js +104 -17
- package/dist/backend/backend/src/types/v2/work-item.types.js.map +1 -1
- package/dist/backend/backend/src/utils/build-provenance.d.ts +150 -0
- package/dist/backend/backend/src/utils/build-provenance.d.ts.map +1 -0
- package/dist/backend/backend/src/utils/build-provenance.js +211 -0
- package/dist/backend/backend/src/utils/build-provenance.js.map +1 -0
- package/dist/backend/build-info.json +4 -0
- package/dist/backend/config/constants.d.ts +8 -0
- package/dist/backend/config/constants.d.ts.map +1 -1
- package/dist/backend/config/constants.js +8 -0
- package/dist/backend/config/constants.js.map +1 -1
- 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/config/oauth.config.d.ts +93 -19
- package/dist/cli/backend/src/config/oauth.config.d.ts.map +1 -1
- package/dist/cli/backend/src/config/oauth.config.js +121 -19
- package/dist/cli/backend/src/config/oauth.config.js.map +1 -1
- package/dist/cli/backend/src/constants.d.ts +60 -0
- package/dist/cli/backend/src/constants.d.ts.map +1 -1
- package/dist/cli/backend/src/constants.js +74 -0
- package/dist/cli/backend/src/constants.js.map +1 -1
- 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.dispatcher.service.d.ts +292 -0
- package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.js +420 -0
- package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.js.map +1 -0
- package/dist/cli/backend/src/services/chat-v2/chat-v2.mention-resolver.d.ts +134 -0
- package/dist/cli/backend/src/services/chat-v2/chat-v2.mention-resolver.d.ts.map +1 -0
- package/dist/cli/backend/src/services/chat-v2/chat-v2.mention-resolver.js +232 -0
- package/dist/cli/backend/src/services/chat-v2/chat-v2.mention-resolver.js.map +1 -0
- package/dist/cli/backend/src/services/chat-v2/chat-v2.service.d.ts +794 -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 +1322 -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 +229 -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 +448 -0
- package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.js.map +1 -0
- package/dist/cli/backend/src/services/chat-v2/types.d.ts +341 -0
- package/dist/cli/backend/src/services/chat-v2/types.d.ts.map +1 -0
- package/dist/cli/backend/src/services/chat-v2/types.js +61 -0
- package/dist/cli/backend/src/services/chat-v2/types.js.map +1 -0
- package/dist/cli/backend/src/services/continuation/patterns/idle-patterns.d.ts +37 -0
- package/dist/cli/backend/src/services/continuation/patterns/idle-patterns.d.ts.map +1 -0
- package/dist/cli/backend/src/services/continuation/patterns/idle-patterns.js +63 -0
- package/dist/cli/backend/src/services/continuation/patterns/idle-patterns.js.map +1 -0
- package/dist/cli/backend/src/services/core/storage.service.d.ts +6 -0
- package/dist/cli/backend/src/services/core/storage.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/core/storage.service.js +1 -1
- package/dist/cli/backend/src/services/core/storage.service.js.map +1 -1
- package/dist/cli/backend/src/services/credential/helpers/gemini-cli-workspace.helper.d.ts.map +1 -1
- package/dist/cli/backend/src/services/credential/helpers/gemini-cli-workspace.helper.js +6 -2
- package/dist/cli/backend/src/services/credential/helpers/gemini-cli-workspace.helper.js.map +1 -1
- 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 +150 -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 +293 -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-agent-identity.service.d.ts +209 -0
- package/dist/cli/backend/src/services/slack/slack-agent-identity.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/slack/slack-agent-identity.service.js +416 -0
- package/dist/cli/backend/src/services/slack/slack-agent-identity.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-mention-resolver.d.ts +103 -0
- package/dist/cli/backend/src/services/slack/slack-mention-resolver.d.ts.map +1 -0
- package/dist/cli/backend/src/services/slack/slack-mention-resolver.js +197 -0
- package/dist/cli/backend/src/services/slack/slack-mention-resolver.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 +1946 -0
- package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.js.map +1 -0
- package/dist/cli/backend/src/services/slack/slack-team-channel.service.d.ts +329 -0
- package/dist/cli/backend/src/services/slack/slack-team-channel.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/slack/slack-team-channel.service.js +821 -0
- package/dist/cli/backend/src/services/slack/slack-team-channel.service.js.map +1 -0
- package/dist/cli/backend/src/services/slack/slack.service.d.ts +430 -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 +1388 -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/slack.types.d.ts +87 -0
- package/dist/cli/backend/src/types/slack.types.d.ts.map +1 -1
- package/dist/cli/backend/src/types/slack.types.js.map +1 -1
- 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/utils/team.utils.d.ts +40 -0
- package/dist/cli/backend/src/utils/team.utils.d.ts.map +1 -0
- package/dist/cli/backend/src/utils/team.utils.js +66 -0
- package/dist/cli/backend/src/utils/team.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/cli/src/index.js +0 -0
- package/dist/cli/config/constants.d.ts +8 -0
- package/dist/cli/config/constants.d.ts.map +1 -1
- package/dist/cli/config/constants.js +8 -0
- package/dist/cli/config/constants.js.map +1 -1
- package/dist/cli/config/vitest-exclude.constants.d.ts +53 -0
- package/dist/cli/config/vitest-exclude.constants.d.ts.map +1 -0
- package/dist/cli/config/vitest-exclude.constants.js +55 -0
- package/dist/cli/config/vitest-exclude.constants.js.map +1 -0
- package/frontend/dist/assets/index-190a957f.js +4961 -0
- package/frontend/dist/assets/{index-8205ea5e.css → index-88feb412.css} +1 -1
- package/frontend/dist/index.html +2 -2
- package/package.json +2 -2
- package/packages/crewly-agent/src/runtime/agent-runner.service.test.ts +174 -30
- package/packages/crewly-agent/src/runtime/agent-runner.service.ts +121 -6
- package/packages/crewly-agent/src/runtime/types.ts +56 -5
- package/dist/backend/backend/src/controllers/knowledge/index.d.ts +0 -7
- package/dist/backend/backend/src/controllers/knowledge/index.d.ts.map +0 -1
- package/dist/backend/backend/src/controllers/knowledge/index.js +0 -7
- package/dist/backend/backend/src/controllers/knowledge/index.js.map +0 -1
- package/dist/backend/backend/src/controllers/knowledge/knowledge.controller.d.ts +0 -71
- package/dist/backend/backend/src/controllers/knowledge/knowledge.controller.d.ts.map +0 -1
- package/dist/backend/backend/src/controllers/knowledge/knowledge.controller.js +0 -237
- package/dist/backend/backend/src/controllers/knowledge/knowledge.controller.js.map +0 -1
- package/dist/backend/backend/src/controllers/knowledge/knowledge.routes.d.ts +0 -24
- package/dist/backend/backend/src/controllers/knowledge/knowledge.routes.d.ts.map +0 -1
- package/dist/backend/backend/src/controllers/knowledge/knowledge.routes.js +0 -34
- package/dist/backend/backend/src/controllers/knowledge/knowledge.routes.js.map +0 -1
- package/dist/backend/backend/src/controllers/scheduler/unified-scheduler.controller.d.ts +0 -91
- package/dist/backend/backend/src/controllers/scheduler/unified-scheduler.controller.d.ts.map +0 -1
- package/dist/backend/backend/src/controllers/scheduler/unified-scheduler.controller.js +0 -290
- package/dist/backend/backend/src/controllers/scheduler/unified-scheduler.controller.js.map +0 -1
- package/dist/backend/backend/src/controllers/task-management/task-management.controller.d.ts +0 -169
- package/dist/backend/backend/src/controllers/task-management/task-management.controller.d.ts.map +0 -1
- package/dist/backend/backend/src/controllers/task-management/task-management.controller.js +0 -1779
- package/dist/backend/backend/src/controllers/task-management/task-management.controller.js.map +0 -1
- package/dist/backend/backend/src/index.js.orc-bak-20260529 +0 -3130
- package/dist/backend/backend/src/routes/modules/unified-scheduler.routes.d.ts +0 -27
- package/dist/backend/backend/src/routes/modules/unified-scheduler.routes.d.ts.map +0 -1
- package/dist/backend/backend/src/routes/modules/unified-scheduler.routes.js +0 -40
- package/dist/backend/backend/src/routes/modules/unified-scheduler.routes.js.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/agent-runner.service.d.ts +0 -513
- package/dist/backend/backend/src/services/agent/crewly-agent/agent-runner.service.d.ts.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/agent-runner.service.js +0 -1568
- package/dist/backend/backend/src/services/agent/crewly-agent/agent-runner.service.js.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/agent-worker.d.ts +0 -86
- package/dist/backend/backend/src/services/agent/crewly-agent/agent-worker.d.ts.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/agent-worker.js +0 -147
- package/dist/backend/backend/src/services/agent/crewly-agent/agent-worker.js.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/api-client.d.ts +0 -68
- package/dist/backend/backend/src/services/agent/crewly-agent/api-client.d.ts.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/api-client.js +0 -131
- package/dist/backend/backend/src/services/agent/crewly-agent/api-client.js.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/audit-log.service.d.ts +0 -130
- package/dist/backend/backend/src/services/agent/crewly-agent/audit-log.service.d.ts.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/audit-log.service.js +0 -263
- package/dist/backend/backend/src/services/agent/crewly-agent/audit-log.service.js.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/audit-trail.service.d.ts +0 -74
- package/dist/backend/backend/src/services/agent/crewly-agent/audit-trail.service.d.ts.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/audit-trail.service.js +0 -140
- package/dist/backend/backend/src/services/agent/crewly-agent/audit-trail.service.js.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/auditor-tools.d.ts +0 -29
- package/dist/backend/backend/src/services/agent/crewly-agent/auditor-tools.d.ts.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/auditor-tools.js +0 -279
- package/dist/backend/backend/src/services/agent/crewly-agent/auditor-tools.js.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-runtime.service.d.ts +0 -340
- package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-runtime.service.d.ts.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-runtime.service.js +0 -1176
- package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-runtime.service.js.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/deepseek-sse-transform.d.ts +0 -79
- package/dist/backend/backend/src/services/agent/crewly-agent/deepseek-sse-transform.d.ts.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/deepseek-sse-transform.js +0 -145
- package/dist/backend/backend/src/services/agent/crewly-agent/deepseek-sse-transform.js.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/env-isolation.service.d.ts +0 -79
- package/dist/backend/backend/src/services/agent/crewly-agent/env-isolation.service.d.ts.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/env-isolation.service.js +0 -218
- package/dist/backend/backend/src/services/agent/crewly-agent/env-isolation.service.js.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/index.d.ts +0 -16
- package/dist/backend/backend/src/services/agent/crewly-agent/index.d.ts.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/index.js +0 -16
- package/dist/backend/backend/src/services/agent/crewly-agent/index.js.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/mcp-tool-bridge.d.ts +0 -135
- package/dist/backend/backend/src/services/agent/crewly-agent/mcp-tool-bridge.d.ts.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/mcp-tool-bridge.js +0 -185
- package/dist/backend/backend/src/services/agent/crewly-agent/mcp-tool-bridge.js.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/model-manager.d.ts +0 -141
- package/dist/backend/backend/src/services/agent/crewly-agent/model-manager.d.ts.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/model-manager.js +0 -310
- package/dist/backend/backend/src/services/agent/crewly-agent/model-manager.js.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/output-filter.service.d.ts +0 -91
- package/dist/backend/backend/src/services/agent/crewly-agent/output-filter.service.d.ts.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/output-filter.service.js +0 -143
- package/dist/backend/backend/src/services/agent/crewly-agent/output-filter.service.js.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/prompt-guard.service.d.ts +0 -103
- package/dist/backend/backend/src/services/agent/crewly-agent/prompt-guard.service.d.ts.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/prompt-guard.service.js +0 -256
- package/dist/backend/backend/src/services/agent/crewly-agent/prompt-guard.service.js.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/rate-limiter.d.ts +0 -143
- package/dist/backend/backend/src/services/agent/crewly-agent/rate-limiter.d.ts.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/rate-limiter.js +0 -264
- package/dist/backend/backend/src/services/agent/crewly-agent/rate-limiter.js.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/smoke-test.d.ts +0 -13
- package/dist/backend/backend/src/services/agent/crewly-agent/smoke-test.d.ts.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/smoke-test.js +0 -91
- package/dist/backend/backend/src/services/agent/crewly-agent/smoke-test.js.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/tool-registry.d.ts +0 -135
- package/dist/backend/backend/src/services/agent/crewly-agent/tool-registry.d.ts.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/tool-registry.js +0 -1937
- package/dist/backend/backend/src/services/agent/crewly-agent/tool-registry.js.map +0 -1
- package/dist/backend/backend/src/services/autonomous/auto-assign.service.d.ts +0 -429
- package/dist/backend/backend/src/services/autonomous/auto-assign.service.d.ts.map +0 -1
- package/dist/backend/backend/src/services/autonomous/auto-assign.service.js +0 -852
- package/dist/backend/backend/src/services/autonomous/auto-assign.service.js.map +0 -1
- package/dist/backend/backend/src/services/knowledge/embedding-provider.d.ts +0 -78
- package/dist/backend/backend/src/services/knowledge/embedding-provider.d.ts.map +0 -1
- package/dist/backend/backend/src/services/knowledge/embedding-provider.js +0 -179
- package/dist/backend/backend/src/services/knowledge/embedding-provider.js.map +0 -1
- package/dist/backend/backend/src/services/knowledge/fts5-index.service.d.ts +0 -118
- package/dist/backend/backend/src/services/knowledge/fts5-index.service.d.ts.map +0 -1
- package/dist/backend/backend/src/services/knowledge/fts5-index.service.js +0 -241
- package/dist/backend/backend/src/services/knowledge/fts5-index.service.js.map +0 -1
- package/dist/backend/backend/src/services/knowledge/fts5-query-sanitizer.d.ts +0 -102
- package/dist/backend/backend/src/services/knowledge/fts5-query-sanitizer.d.ts.map +0 -1
- package/dist/backend/backend/src/services/knowledge/fts5-query-sanitizer.js +0 -118
- package/dist/backend/backend/src/services/knowledge/fts5-query-sanitizer.js.map +0 -1
- package/dist/backend/backend/src/services/knowledge/index.d.ts +0 -8
- package/dist/backend/backend/src/services/knowledge/index.d.ts.map +0 -1
- package/dist/backend/backend/src/services/knowledge/index.js +0 -8
- package/dist/backend/backend/src/services/knowledge/index.js.map +0 -1
- package/dist/backend/backend/src/services/knowledge/knowledge-search.service.d.ts +0 -241
- package/dist/backend/backend/src/services/knowledge/knowledge-search.service.d.ts.map +0 -1
- package/dist/backend/backend/src/services/knowledge/knowledge-search.service.js +0 -590
- package/dist/backend/backend/src/services/knowledge/knowledge-search.service.js.map +0 -1
- package/dist/backend/backend/src/services/knowledge/knowledge.service.d.ts +0 -153
- package/dist/backend/backend/src/services/knowledge/knowledge.service.d.ts.map +0 -1
- package/dist/backend/backend/src/services/knowledge/knowledge.service.js +0 -409
- package/dist/backend/backend/src/services/knowledge/knowledge.service.js.map +0 -1
- package/dist/backend/backend/src/services/knowledge/vector-store.service.d.ts +0 -331
- package/dist/backend/backend/src/services/knowledge/vector-store.service.d.ts.map +0 -1
- package/dist/backend/backend/src/services/knowledge/vector-store.service.js +0 -830
- package/dist/backend/backend/src/services/knowledge/vector-store.service.js.map +0 -1
- package/dist/backend/backend/src/services/knowledge/wiki-compiler.service.d.ts +0 -115
- package/dist/backend/backend/src/services/knowledge/wiki-compiler.service.d.ts.map +0 -1
- package/dist/backend/backend/src/services/knowledge/wiki-compiler.service.js +0 -215
- package/dist/backend/backend/src/services/knowledge/wiki-compiler.service.js.map +0 -1
- package/dist/backend/backend/src/services/memory/embedding-provider.d.ts +0 -78
- package/dist/backend/backend/src/services/memory/embedding-provider.d.ts.map +0 -1
- package/dist/backend/backend/src/services/memory/embedding-provider.js +0 -185
- package/dist/backend/backend/src/services/memory/embedding-provider.js.map +0 -1
- package/dist/backend/backend/src/services/memory/vector-store.service.d.ts +0 -331
- package/dist/backend/backend/src/services/memory/vector-store.service.d.ts.map +0 -1
- package/dist/backend/backend/src/services/memory/vector-store.service.js +0 -825
- package/dist/backend/backend/src/services/memory/vector-store.service.js.map +0 -1
- package/dist/backend/backend/src/services/project/task-tracking.service.d.ts +0 -171
- package/dist/backend/backend/src/services/project/task-tracking.service.d.ts.map +0 -1
- package/dist/backend/backend/src/services/project/task-tracking.service.js +0 -725
- package/dist/backend/backend/src/services/project/task-tracking.service.js.map +0 -1
- package/dist/backend/backend/src/services/v3/project-task-watcher.service.d.ts +0 -118
- package/dist/backend/backend/src/services/v3/project-task-watcher.service.d.ts.map +0 -1
- package/dist/backend/backend/src/services/v3/project-task-watcher.service.js +0 -326
- package/dist/backend/backend/src/services/v3/project-task-watcher.service.js.map +0 -1
- package/dist/backend/backend/src/services/wiki/wiki-chat-subscriber.service.d.ts +0 -74
- package/dist/backend/backend/src/services/wiki/wiki-chat-subscriber.service.d.ts.map +0 -1
- package/dist/backend/backend/src/services/wiki/wiki-chat-subscriber.service.js +0 -154
- package/dist/backend/backend/src/services/wiki/wiki-chat-subscriber.service.js.map +0 -1
- package/dist/backend/backend/src/services/workflow/unified-scheduler.service.d.ts +0 -234
- package/dist/backend/backend/src/services/workflow/unified-scheduler.service.d.ts.map +0 -1
- package/dist/backend/backend/src/services/workflow/unified-scheduler.service.js +0 -636
- package/dist/backend/backend/src/services/workflow/unified-scheduler.service.js.map +0 -1
- package/dist/backend/backend/src/services/workflow/unified-scheduler.types.d.ts +0 -156
- package/dist/backend/backend/src/services/workflow/unified-scheduler.types.d.ts.map +0 -1
- package/dist/backend/backend/src/services/workflow/unified-scheduler.types.js +0 -81
- package/dist/backend/backend/src/services/workflow/unified-scheduler.types.js.map +0 -1
- package/dist/backend/backend/src/types/auto-assign.types.d.ts +0 -271
- package/dist/backend/backend/src/types/auto-assign.types.d.ts.map +0 -1
- package/dist/backend/backend/src/types/auto-assign.types.js +0 -136
- package/dist/backend/backend/src/types/auto-assign.types.js.map +0 -1
- package/dist/backend/backend/src/types/knowledge.types.d.ts +0 -195
- package/dist/backend/backend/src/types/knowledge.types.d.ts.map +0 -1
- package/dist/backend/backend/src/types/knowledge.types.js +0 -38
- package/dist/backend/backend/src/types/knowledge.types.js.map +0 -1
- package/dist/backend/backend/src/utils/esm-require.utils.d.ts +0 -111
- package/dist/backend/backend/src/utils/esm-require.utils.d.ts.map +0 -1
- package/dist/backend/backend/src/utils/esm-require.utils.js +0 -124
- package/dist/backend/backend/src/utils/esm-require.utils.js.map +0 -1
- package/dist/cli/backend/src/services/knowledge/embedding-provider.d.ts +0 -78
- package/dist/cli/backend/src/services/knowledge/embedding-provider.d.ts.map +0 -1
- package/dist/cli/backend/src/services/knowledge/embedding-provider.js +0 -179
- package/dist/cli/backend/src/services/knowledge/embedding-provider.js.map +0 -1
- package/dist/cli/backend/src/services/knowledge/fts5-index.service.d.ts +0 -118
- package/dist/cli/backend/src/services/knowledge/fts5-index.service.d.ts.map +0 -1
- package/dist/cli/backend/src/services/knowledge/fts5-index.service.js +0 -241
- package/dist/cli/backend/src/services/knowledge/fts5-index.service.js.map +0 -1
- package/dist/cli/backend/src/services/knowledge/fts5-query-sanitizer.d.ts +0 -102
- package/dist/cli/backend/src/services/knowledge/fts5-query-sanitizer.d.ts.map +0 -1
- package/dist/cli/backend/src/services/knowledge/fts5-query-sanitizer.js +0 -118
- package/dist/cli/backend/src/services/knowledge/fts5-query-sanitizer.js.map +0 -1
- package/dist/cli/backend/src/services/knowledge/fts5-search-strategy.d.ts +0 -56
- package/dist/cli/backend/src/services/knowledge/fts5-search-strategy.d.ts.map +0 -1
- package/dist/cli/backend/src/services/knowledge/fts5-search-strategy.js +0 -91
- package/dist/cli/backend/src/services/knowledge/fts5-search-strategy.js.map +0 -1
- package/dist/cli/backend/src/services/knowledge/knowledge-search.service.d.ts +0 -241
- package/dist/cli/backend/src/services/knowledge/knowledge-search.service.d.ts.map +0 -1
- package/dist/cli/backend/src/services/knowledge/knowledge-search.service.js +0 -590
- package/dist/cli/backend/src/services/knowledge/knowledge-search.service.js.map +0 -1
- package/dist/cli/backend/src/services/knowledge/knowledge.service.d.ts +0 -153
- package/dist/cli/backend/src/services/knowledge/knowledge.service.d.ts.map +0 -1
- package/dist/cli/backend/src/services/knowledge/knowledge.service.js +0 -409
- package/dist/cli/backend/src/services/knowledge/knowledge.service.js.map +0 -1
- package/dist/cli/backend/src/services/knowledge/learnings-index.service.d.ts +0 -159
- package/dist/cli/backend/src/services/knowledge/learnings-index.service.d.ts.map +0 -1
- package/dist/cli/backend/src/services/knowledge/learnings-index.service.js +0 -304
- package/dist/cli/backend/src/services/knowledge/learnings-index.service.js.map +0 -1
- package/dist/cli/backend/src/services/knowledge/vector-store.service.d.ts +0 -331
- package/dist/cli/backend/src/services/knowledge/vector-store.service.d.ts.map +0 -1
- package/dist/cli/backend/src/services/knowledge/vector-store.service.js +0 -830
- package/dist/cli/backend/src/services/knowledge/vector-store.service.js.map +0 -1
- package/dist/cli/backend/src/services/knowledge/wiki-compiler.service.d.ts +0 -115
- package/dist/cli/backend/src/services/knowledge/wiki-compiler.service.d.ts.map +0 -1
- package/dist/cli/backend/src/services/knowledge/wiki-compiler.service.js +0 -215
- package/dist/cli/backend/src/services/knowledge/wiki-compiler.service.js.map +0 -1
- package/dist/cli/backend/src/services/memory/embedding-provider.d.ts +0 -78
- package/dist/cli/backend/src/services/memory/embedding-provider.d.ts.map +0 -1
- package/dist/cli/backend/src/services/memory/embedding-provider.js +0 -179
- package/dist/cli/backend/src/services/memory/embedding-provider.js.map +0 -1
- package/dist/cli/backend/src/services/memory/vector-store.service.d.ts +0 -331
- package/dist/cli/backend/src/services/memory/vector-store.service.d.ts.map +0 -1
- package/dist/cli/backend/src/services/memory/vector-store.service.js +0 -814
- package/dist/cli/backend/src/services/memory/vector-store.service.js.map +0 -1
- package/dist/cli/backend/src/services/project/task-tracking.service.d.ts +0 -171
- package/dist/cli/backend/src/services/project/task-tracking.service.d.ts.map +0 -1
- package/dist/cli/backend/src/services/project/task-tracking.service.js +0 -725
- package/dist/cli/backend/src/services/project/task-tracking.service.js.map +0 -1
- package/dist/cli/backend/src/types/auto-assign.types.d.ts +0 -271
- package/dist/cli/backend/src/types/auto-assign.types.d.ts.map +0 -1
- package/dist/cli/backend/src/types/auto-assign.types.js +0 -136
- package/dist/cli/backend/src/types/auto-assign.types.js.map +0 -1
- package/dist/cli/backend/src/types/knowledge.types.d.ts +0 -195
- package/dist/cli/backend/src/types/knowledge.types.d.ts.map +0 -1
- package/dist/cli/backend/src/types/knowledge.types.js +0 -38
- package/dist/cli/backend/src/types/knowledge.types.js.map +0 -1
- package/frontend/dist/assets/index-aa737fd3.js +0 -5254
|
@@ -0,0 +1,1113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* V3 Data Service — Automatic V3 entity creation via EventBus hooks
|
|
3
|
+
*
|
|
4
|
+
* Subscribes to existing backend events and automatically creates/updates
|
|
5
|
+
* V3 entities (WorkItem, Request, Mission). This service is fire-and-forget:
|
|
6
|
+
* errors are logged but never block the main flow.
|
|
7
|
+
*
|
|
8
|
+
* Design principle: Orchestrator has zero knowledge of V3 concepts.
|
|
9
|
+
* V3 data is produced as a side effect of normal operations.
|
|
10
|
+
*
|
|
11
|
+
* Events consumed:
|
|
12
|
+
* - task:delegated -> creates WorkItem in TaskPool
|
|
13
|
+
* - task:completed -> updates WorkItem status to 'done'
|
|
14
|
+
* - task:failed -> updates WorkItem status to 'failed'
|
|
15
|
+
* - goal:set -> creates Mission with conservative policy
|
|
16
|
+
* - message:user_work -> creates Request
|
|
17
|
+
*
|
|
18
|
+
* @module services/v3/v3-data.service
|
|
19
|
+
*/
|
|
20
|
+
import { LoggerService } from '../core/logger.service.js';
|
|
21
|
+
import { StorageService } from '../core/storage.service.js';
|
|
22
|
+
import { TaskPoolService } from '../task-pool/task-pool.service.js';
|
|
23
|
+
import { RequestService } from './request.service.js';
|
|
24
|
+
import { RequestTracker } from './request-tracker.service.js';
|
|
25
|
+
import { createWorkItem } from '../../types/v2/work-item.types.js';
|
|
26
|
+
import { createMission } from '../../types/v2/mission.types.js';
|
|
27
|
+
import { isValidRequestTransition } from '../../types/v2/request.types.js';
|
|
28
|
+
// Bug A v0 (2026-05-06): canonical intent classification — both
|
|
29
|
+
// classifyIntentLevel + classifyIntentCategory consume the shared rule-set
|
|
30
|
+
// at `services/intent-task/intent-classifier.rules.ts`, so this delegation
|
|
31
|
+
// keeps the Request- and Mission-side classifiers in lock-step.
|
|
32
|
+
import { classifyIntentLevel, classifyIntentCategory, } from '../../types/intent-task.types.js';
|
|
33
|
+
import { ensureDir, atomicWriteJson } from '../../utils/file-io.utils.js';
|
|
34
|
+
import { TokenUsageService } from '../monitoring/token-usage.service.js';
|
|
35
|
+
import * as path from 'path';
|
|
36
|
+
// ---------------------------------------------------------------------------
|
|
37
|
+
// Constants
|
|
38
|
+
// ---------------------------------------------------------------------------
|
|
39
|
+
/**
|
|
40
|
+
* Minimum content length for a user message to create a Request.
|
|
41
|
+
* P2-1: Relaxed from 5 → 2 to stop dropping legitimate short commands
|
|
42
|
+
* like "fix", "help", "go", "OK". Only truly empty or single-char
|
|
43
|
+
* messages (e.g., ".", "k") are filtered out.
|
|
44
|
+
*/
|
|
45
|
+
export const MIN_REQUEST_CONTENT_LENGTH = 2;
|
|
46
|
+
/**
|
|
47
|
+
* Grace period (in ms) before an open Request with no WorkItems is
|
|
48
|
+
* auto-closed as dangling. P2-1: Added to prevent premature closure —
|
|
49
|
+
* the orchestrator may need time to process the request and delegate.
|
|
50
|
+
* Default: 5 minutes.
|
|
51
|
+
*/
|
|
52
|
+
export const DANGLING_REQUEST_GRACE_MS = 5 * 60 * 1000;
|
|
53
|
+
// ---------------------------------------------------------------------------
|
|
54
|
+
// Service
|
|
55
|
+
// ---------------------------------------------------------------------------
|
|
56
|
+
/**
|
|
57
|
+
* V3DataService automatically creates V3 data entities by subscribing to
|
|
58
|
+
* backend EventBus events. It wraps every handler in try-catch to ensure
|
|
59
|
+
* failures never impact the main workflow.
|
|
60
|
+
*
|
|
61
|
+
* @example
|
|
62
|
+
* ```typescript
|
|
63
|
+
* const v3Data = new V3DataService(eventBus, '/path/to/project');
|
|
64
|
+
* // That's it — events are now being listened to.
|
|
65
|
+
* ```
|
|
66
|
+
*/
|
|
67
|
+
export class V3DataService {
|
|
68
|
+
eventBus;
|
|
69
|
+
logger = LoggerService.getInstance().createComponentLogger('V3DataService');
|
|
70
|
+
storageService = StorageService.getInstance();
|
|
71
|
+
projectPath;
|
|
72
|
+
missionsDir;
|
|
73
|
+
/**
|
|
74
|
+
* Creates and initializes the V3DataService.
|
|
75
|
+
*
|
|
76
|
+
* Subscribes to EventBus domain events. (Legacy ProjectTask file watcher
|
|
77
|
+
* was retired with the V3↔.md bridge deprecation per
|
|
78
|
+
* `specs/2026-05-06-projecttask-md-deprecation.md`.)
|
|
79
|
+
*
|
|
80
|
+
* @param eventBus - The EventEmitter that publishes domain events
|
|
81
|
+
* @param projectPath - Absolute path to the project root
|
|
82
|
+
*/
|
|
83
|
+
constructor(eventBus, projectPath) {
|
|
84
|
+
this.eventBus = eventBus;
|
|
85
|
+
this.projectPath = projectPath;
|
|
86
|
+
this.missionsDir = path.join(projectPath, '.crewly', 'missions');
|
|
87
|
+
// Subscribe to events — all handlers are fire-and-forget
|
|
88
|
+
this.eventBus.on('v3:task_delegated', this.onTaskDelegated.bind(this));
|
|
89
|
+
this.eventBus.on('v3:task_completed', this.onTaskCompleted.bind(this));
|
|
90
|
+
this.eventBus.on('v3:task_failed', this.onTaskFailed.bind(this));
|
|
91
|
+
this.eventBus.on('v3:task_blocked', this.onTaskBlocked.bind(this));
|
|
92
|
+
this.eventBus.on('v3:goal_set', this.onGoalSet.bind(this));
|
|
93
|
+
this.eventBus.on('v3:user_work_message', this.onUserWorkMessage.bind(this));
|
|
94
|
+
this.logger.info('V3DataService initialized — listening for domain events');
|
|
95
|
+
}
|
|
96
|
+
// ---------------------------------------------------------------------------
|
|
97
|
+
// WorkItem Matching (shared by completed/failed/blocked handlers)
|
|
98
|
+
// ---------------------------------------------------------------------------
|
|
99
|
+
/**
|
|
100
|
+
* Finds the WorkItem matching a task event using a two-tier strategy:
|
|
101
|
+
* 1. Match by projectTaskId (most precise)
|
|
102
|
+
* 2. Fall back to sessionName + status (running first, then queued)
|
|
103
|
+
*
|
|
104
|
+
* If the matched WorkItem is 'queued', it is transitioned to 'running'
|
|
105
|
+
* since completeItem/failItem require 'running' status.
|
|
106
|
+
*
|
|
107
|
+
* @param taskId - The project task ID (may be undefined)
|
|
108
|
+
* @param sessionName - The agent session name
|
|
109
|
+
* @param logContext - Context string for debug logging
|
|
110
|
+
* @returns The matched WorkItem (with status fix applied), or null
|
|
111
|
+
*/
|
|
112
|
+
async findMatchingWorkItem(taskId, sessionName, logContext) {
|
|
113
|
+
const taskPool = TaskPoolService.getInstance();
|
|
114
|
+
const items = await taskPool.getAllItems();
|
|
115
|
+
// Tier 1: precise match by projectTaskId
|
|
116
|
+
let match = taskId
|
|
117
|
+
? items.find((wi) => wi.projectTaskId === taskId && wi.status !== 'done' && wi.status !== 'failed')
|
|
118
|
+
: undefined;
|
|
119
|
+
// Tier 2: match by sessionName + active status (running first, then queued)
|
|
120
|
+
if (!match) {
|
|
121
|
+
match = items.find((wi) => wi.target === sessionName && wi.status === 'running');
|
|
122
|
+
}
|
|
123
|
+
if (!match) {
|
|
124
|
+
match = items.find((wi) => wi.target === sessionName && wi.status === 'queued');
|
|
125
|
+
}
|
|
126
|
+
if (!match) {
|
|
127
|
+
this.logger.debug(`No matching WorkItem found for ${logContext}`, { sessionName, taskId });
|
|
128
|
+
return null;
|
|
129
|
+
}
|
|
130
|
+
// Bug 1 fix: completeItem/failItem require status === 'running', but WorkItems
|
|
131
|
+
// created via delegation start as 'queued' and may never be claimed.
|
|
132
|
+
if (match.status === 'queued') {
|
|
133
|
+
await taskPool.updateItemStatus(match.id, 'running');
|
|
134
|
+
}
|
|
135
|
+
return match;
|
|
136
|
+
}
|
|
137
|
+
// ---------------------------------------------------------------------------
|
|
138
|
+
// Event Handlers (all fire-and-forget)
|
|
139
|
+
// ---------------------------------------------------------------------------
|
|
140
|
+
/**
|
|
141
|
+
* Handles task:delegated — creates a WorkItem in the TaskPool.
|
|
142
|
+
*
|
|
143
|
+
* @param event - Task delegation event payload
|
|
144
|
+
*/
|
|
145
|
+
async onTaskDelegated(event) {
|
|
146
|
+
try {
|
|
147
|
+
const taskPool = TaskPoolService.getInstance();
|
|
148
|
+
// Dedup: check if a WorkItem with this projectTaskId already exists
|
|
149
|
+
const existing = await taskPool.getAllItems();
|
|
150
|
+
if (existing.some((wi) => wi.projectTaskId === event.taskId)) {
|
|
151
|
+
this.logger.debug('WorkItem already exists for task, skipping', { taskId: event.taskId });
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
// Resolve requestId: explicit value from the event payload only.
|
|
155
|
+
// Removed (P2-2): RequestTracker time-window correlation. Orchestrator
|
|
156
|
+
// skills that need to associate a delegation with a Request must pass
|
|
157
|
+
// requestId explicitly via --request-id; the time-window fallback was
|
|
158
|
+
// a global-singleton race vector that produced cross-conversation
|
|
159
|
+
// mislinks (see v3-data.service.test.ts "should NOT use greedy
|
|
160
|
+
// fallback" + "should NOT resolve requestId from RequestTracker").
|
|
161
|
+
const resolvedRequestId = event.requestId || undefined;
|
|
162
|
+
const workItem = createWorkItem({
|
|
163
|
+
type: 'delegate',
|
|
164
|
+
owner: 'orchestrator',
|
|
165
|
+
target: event.assignedTo,
|
|
166
|
+
title: event.title,
|
|
167
|
+
description: event.description,
|
|
168
|
+
projectTaskId: event.taskId,
|
|
169
|
+
requestId: resolvedRequestId,
|
|
170
|
+
maxRetries: 2,
|
|
171
|
+
});
|
|
172
|
+
// Add to pool (createWorkItem already sets status to 'queued')
|
|
173
|
+
await taskPool.addToPool(workItem);
|
|
174
|
+
this.logger.info('WorkItem auto-created from task delegation', {
|
|
175
|
+
workItemId: workItem.id,
|
|
176
|
+
taskId: event.taskId,
|
|
177
|
+
target: event.assignedTo,
|
|
178
|
+
requestId: resolvedRequestId,
|
|
179
|
+
});
|
|
180
|
+
// Hygiene #5 + #3 — DO NOT auto-claim here.
|
|
181
|
+
//
|
|
182
|
+
// The previous block did `taskPool.claimFromPool(event.assignedTo,
|
|
183
|
+
// { types: ['delegate'] })` inline, which transitioned the WI to
|
|
184
|
+
// `running` synchronously. Two compounding failures fell out of
|
|
185
|
+
// that:
|
|
186
|
+
//
|
|
187
|
+
// Hygiene #5 (poll-tasks race): the targeted agent's first
|
|
188
|
+
// `poll-tasks` call returned `available: 0` because the WI was
|
|
189
|
+
// already running. Workers had to fall back to direct curl
|
|
190
|
+
// against /task-pool/complete to make progress. Steve, Sam,
|
|
191
|
+
// Quinn, Max each hit this in the 5/9 wave.
|
|
192
|
+
//
|
|
193
|
+
// Hygiene #3 (target rotation): `claimFromPool` was passed only
|
|
194
|
+
// `{ types: ['delegate'] }` — no target filter. It then
|
|
195
|
+
// FIFO-picked the oldest queued+unclaimed delegate WI in the
|
|
196
|
+
// pool, which was often a DIFFERENT agent's targeted WI
|
|
197
|
+
// (queued because that agent had not claimed yet). The mutator
|
|
198
|
+
// unconditionally rewrote `wi.target = event.assignedTo`, so
|
|
199
|
+
// a Quinn-targeted WI got rotated to Sam, etc. Pool target
|
|
200
|
+
// rotated through 3-4 sessions during the wave (WI 6e532a8b,
|
|
201
|
+
// 598c91da, c443c2cd).
|
|
202
|
+
//
|
|
203
|
+
// Fix: leave the WI queued. Notification is the
|
|
204
|
+
// {@link WorkItemDispatchSubscriber}'s job — it pushes a
|
|
205
|
+
// [CREWLY-DISPATCH] message to `target` and the agent's own
|
|
206
|
+
// `poll-tasks` invocation transitions the WI to running with the
|
|
207
|
+
// target-respect gate added in the same change to claimFromPool.
|
|
208
|
+
// No race, no rotation. See spec /tmp/sam-brief-max-hygiene-5-and-3-2026-05-09.md
|
|
209
|
+
// and the regression tests in v3-data.service.test.ts +
|
|
210
|
+
// task-pool.service.test.ts (describe 'target-respect' blocks).
|
|
211
|
+
// Link WorkItem to Request for bidirectional tracking
|
|
212
|
+
if (resolvedRequestId) {
|
|
213
|
+
try {
|
|
214
|
+
const requestService = RequestService.getInstance(this.projectPath);
|
|
215
|
+
await requestService.linkWorkItem(resolvedRequestId, workItem.id);
|
|
216
|
+
// Transition Request: open → running (first WorkItem assigned)
|
|
217
|
+
const request = await requestService.getById(resolvedRequestId);
|
|
218
|
+
if (request && request.status === 'open') {
|
|
219
|
+
await requestService.update(resolvedRequestId, { status: 'running' });
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
catch (linkErr) {
|
|
223
|
+
this.logger.debug('Failed to link WorkItem to Request (non-fatal)', {
|
|
224
|
+
requestId: resolvedRequestId,
|
|
225
|
+
workItemId: workItem.id,
|
|
226
|
+
error: linkErr instanceof Error ? linkErr.message : String(linkErr),
|
|
227
|
+
});
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
catch (err) {
|
|
232
|
+
this.logger.warn('V3DataService.onTaskDelegated failed (non-fatal)', {
|
|
233
|
+
taskId: event.taskId,
|
|
234
|
+
error: err instanceof Error ? err.message : String(err),
|
|
235
|
+
});
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Handles task:completed — updates the matching WorkItem to 'done'.
|
|
240
|
+
*
|
|
241
|
+
* Uses a two-tier matching strategy:
|
|
242
|
+
* 1. Match by projectTaskId (most precise — correlates to the .crewly/tasks/ file ID)
|
|
243
|
+
* 2. Fall back to sessionName + status (running or queued, since WorkItems
|
|
244
|
+
* created via delegation start as 'queued' and may never be claimed)
|
|
245
|
+
*
|
|
246
|
+
* @param event - Task completion event payload
|
|
247
|
+
*/
|
|
248
|
+
async onTaskCompleted(event) {
|
|
249
|
+
try {
|
|
250
|
+
const match = await this.findMatchingWorkItem(event.taskId, event.sessionName, 'completed task');
|
|
251
|
+
if (!match)
|
|
252
|
+
return;
|
|
253
|
+
const taskPool = TaskPoolService.getInstance();
|
|
254
|
+
await taskPool.completeItem(match.id);
|
|
255
|
+
// Look up token usage for this work item
|
|
256
|
+
try {
|
|
257
|
+
const tokenUsageService = TokenUsageService.getInstance();
|
|
258
|
+
const sessionUsage = tokenUsageService.getUsageBySessions();
|
|
259
|
+
// Find usage for the agent session that completed this task
|
|
260
|
+
const sessionSummary = sessionUsage.find(s => s.sessionName === event.sessionName);
|
|
261
|
+
if (sessionSummary) {
|
|
262
|
+
const totalInput = sessionSummary.totalInput || 0;
|
|
263
|
+
const totalOutput = sessionSummary.totalOutput || 0;
|
|
264
|
+
const totalCost = sessionSummary.cost || 0;
|
|
265
|
+
if (totalInput > 0 || totalOutput > 0) {
|
|
266
|
+
await taskPool.updateTokenUsage(match.id, totalInput, totalOutput, totalCost);
|
|
267
|
+
this.logger.debug('Updated WorkItem token usage', {
|
|
268
|
+
workItemId: match.id,
|
|
269
|
+
inputTokens: totalInput,
|
|
270
|
+
outputTokens: totalOutput,
|
|
271
|
+
cost: totalCost,
|
|
272
|
+
});
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
catch (tokenErr) {
|
|
277
|
+
// Token usage update is non-fatal
|
|
278
|
+
this.logger.debug('Failed to update WorkItem token usage (non-fatal)', {
|
|
279
|
+
error: tokenErr instanceof Error ? tokenErr.message : String(tokenErr),
|
|
280
|
+
});
|
|
281
|
+
}
|
|
282
|
+
this.logger.info('WorkItem auto-completed', {
|
|
283
|
+
workItemId: match.id,
|
|
284
|
+
sessionName: event.sessionName,
|
|
285
|
+
taskId: event.taskId,
|
|
286
|
+
});
|
|
287
|
+
// Growth: extract growth areas from the task title/description (keyword-based, no LLM)
|
|
288
|
+
try {
|
|
289
|
+
const { GrowthAreasService } = await import('../ai/self-improvement/growth-areas.service.js');
|
|
290
|
+
const growthService = new GrowthAreasService();
|
|
291
|
+
const text = match.title + ' ' + (match.description || '');
|
|
292
|
+
const newAreas = await growthService.extractFromText(event.sessionName, text);
|
|
293
|
+
if (newAreas.length > 0) {
|
|
294
|
+
this.logger.info('Growth areas extracted from completed task', {
|
|
295
|
+
sessionName: event.sessionName,
|
|
296
|
+
areas: newAreas.map(a => a.area),
|
|
297
|
+
});
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
catch (err) {
|
|
301
|
+
this.logger.debug('Growth area extraction failed (non-fatal)', {
|
|
302
|
+
sessionName: event.sessionName,
|
|
303
|
+
error: err instanceof Error ? err.message : String(err),
|
|
304
|
+
});
|
|
305
|
+
}
|
|
306
|
+
// Cascade: update parent Request status
|
|
307
|
+
await this.cascadeRequestStatus(match.requestId);
|
|
308
|
+
// Dependency unlock now lives in the V3 task-pool itself —
|
|
309
|
+
// `TaskPoolService.resolveBlockedDependents` runs inside the
|
|
310
|
+
// `completeItem` / `transitionStatus` lifecycle and reads the
|
|
311
|
+
// canonical `WorkItem.dependsOn` field. The previous
|
|
312
|
+
// `unlockDependentWorkItems` helper here read a parallel
|
|
313
|
+
// `metadata._blockedBy` key that mission-executor wrote — that
|
|
314
|
+
// mismatch was the silent freeze for mission decomposition with
|
|
315
|
+
// dependencies. Removed in spec/2026-05-06-task-management-v1-deprecation.md
|
|
316
|
+
// follow-up.
|
|
317
|
+
}
|
|
318
|
+
catch (err) {
|
|
319
|
+
this.logger.warn('V3DataService.onTaskCompleted failed (non-fatal)', {
|
|
320
|
+
sessionName: event.sessionName,
|
|
321
|
+
error: err instanceof Error ? err.message : String(err),
|
|
322
|
+
});
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
/**
|
|
326
|
+
* Handles task:failed — first failure triggers `failItem`, then we
|
|
327
|
+
* decide retry-vs-escalate based on the WI's own `retryCount` budget.
|
|
328
|
+
*
|
|
329
|
+
* Two-stage flow:
|
|
330
|
+
* 1. Always flip running → failed via taskPool.failItem (records the
|
|
331
|
+
* error, releases the claim). This is the ground truth state.
|
|
332
|
+
* 2. If `retryCount < maxRetries` → requeueAfterFailure (failed →
|
|
333
|
+
* queued, retryCount++). The original target keeps the WI.
|
|
334
|
+
* 3. Otherwise → leave it in failed AND escalate to ORC so it can
|
|
335
|
+
* surface the failure to the user and ask for a new plan.
|
|
336
|
+
*
|
|
337
|
+
* Cascade-to-parent-Request happens ONLY on the terminal path
|
|
338
|
+
* (exhausted retries). A retry-eligible WI doesn't cascade, since
|
|
339
|
+
* the Request might still complete on the next attempt.
|
|
340
|
+
*
|
|
341
|
+
* Steve 2026-05-22: prior to this fix the system treated every
|
|
342
|
+
* `task:failed` as terminal — retryCount/maxRetries were dead fields,
|
|
343
|
+
* Mission/Request would cascade-fail on a single transient failure,
|
|
344
|
+
* and the user only learned about it by digging in the Work Items
|
|
345
|
+
* UI. New behaviour: retry up to `maxRetries`, then escalate.
|
|
346
|
+
*
|
|
347
|
+
* @param event - Task failure event payload
|
|
348
|
+
*/
|
|
349
|
+
async onTaskFailed(event) {
|
|
350
|
+
try {
|
|
351
|
+
const match = await this.findMatchingWorkItem(event.taskId, event.sessionName, 'failed task');
|
|
352
|
+
if (!match)
|
|
353
|
+
return;
|
|
354
|
+
const taskPool = TaskPoolService.getInstance();
|
|
355
|
+
const reason = `Task failed for session ${event.sessionName}`;
|
|
356
|
+
// Step 1 — flip to failed (ground truth, releases claim).
|
|
357
|
+
await taskPool.failItem(match.id, reason);
|
|
358
|
+
// Step 2 — decide retry vs escalate based on the freshly-failed
|
|
359
|
+
// WI's retry budget (we re-fetch to get the canonical record).
|
|
360
|
+
const failed = await taskPool.findWorkItem(match.id);
|
|
361
|
+
if (!failed) {
|
|
362
|
+
this.logger.warn('Failed WorkItem disappeared after failItem', {
|
|
363
|
+
workItemId: match.id,
|
|
364
|
+
});
|
|
365
|
+
return;
|
|
366
|
+
}
|
|
367
|
+
if (failed.retryCount < failed.maxRetries) {
|
|
368
|
+
await taskPool.requeueAfterFailure(failed.id, reason);
|
|
369
|
+
this.logger.info('WorkItem auto-retry scheduled', {
|
|
370
|
+
workItemId: failed.id,
|
|
371
|
+
retryCount: failed.retryCount + 1,
|
|
372
|
+
maxRetries: failed.maxRetries,
|
|
373
|
+
sessionName: event.sessionName,
|
|
374
|
+
});
|
|
375
|
+
// Don't cascade — the WI is back in queued; the Request stays
|
|
376
|
+
// alive in the hope the retry succeeds.
|
|
377
|
+
return;
|
|
378
|
+
}
|
|
379
|
+
// Retry budget exhausted → terminal failure path.
|
|
380
|
+
this.logger.info('WorkItem failed after retries exhausted, escalating', {
|
|
381
|
+
workItemId: failed.id,
|
|
382
|
+
retryCount: failed.retryCount,
|
|
383
|
+
maxRetries: failed.maxRetries,
|
|
384
|
+
sessionName: event.sessionName,
|
|
385
|
+
});
|
|
386
|
+
try {
|
|
387
|
+
// Lazy-import to avoid a hard dep cycle: v3-data is loaded very
|
|
388
|
+
// early during bootstrap; escalation-router has its own init
|
|
389
|
+
// dependencies (filesystem dirs, etc).
|
|
390
|
+
const { EscalationRouterService } = await import('./escalation-router.service.js');
|
|
391
|
+
await EscalationRouterService.getInstance().escalateFailedWorkItem(failed, reason);
|
|
392
|
+
}
|
|
393
|
+
catch (err) {
|
|
394
|
+
// Escalation is best-effort — a routing failure mustn't strand
|
|
395
|
+
// the original failure handler; the cascade below still runs.
|
|
396
|
+
this.logger.warn('escalateFailedWorkItem threw (non-fatal)', {
|
|
397
|
+
workItemId: failed.id,
|
|
398
|
+
error: err instanceof Error ? err.message : String(err),
|
|
399
|
+
});
|
|
400
|
+
}
|
|
401
|
+
// Cascade only on terminal failure — Request reflects final state.
|
|
402
|
+
await this.cascadeRequestStatus(match.requestId);
|
|
403
|
+
}
|
|
404
|
+
catch (err) {
|
|
405
|
+
this.logger.warn('V3DataService.onTaskFailed failed (non-fatal)', {
|
|
406
|
+
sessionName: event.sessionName,
|
|
407
|
+
error: err instanceof Error ? err.message : String(err),
|
|
408
|
+
});
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
/**
|
|
412
|
+
* Handles goal:set — creates a Mission with conservative policy.
|
|
413
|
+
*
|
|
414
|
+
* @param event - Goal set event payload
|
|
415
|
+
*/
|
|
416
|
+
async onGoalSet(event) {
|
|
417
|
+
try {
|
|
418
|
+
// Dedup: check if an active Mission with the same objective already exists
|
|
419
|
+
const existingMissions = await this.listMissions();
|
|
420
|
+
const duplicate = existingMissions.find((m) => m.objective === event.goal &&
|
|
421
|
+
m.status !== 'completed' &&
|
|
422
|
+
m.status !== 'cancelled');
|
|
423
|
+
if (duplicate) {
|
|
424
|
+
this.logger.debug('Active Mission with same objective already exists, skipping', {
|
|
425
|
+
missionId: duplicate.id,
|
|
426
|
+
objective: event.goal,
|
|
427
|
+
});
|
|
428
|
+
return;
|
|
429
|
+
}
|
|
430
|
+
// Resolve ownerId from event.setBy (which is usually a session name or member name)
|
|
431
|
+
let ownerId;
|
|
432
|
+
try {
|
|
433
|
+
const memberInfo = await this.storageService.findMemberBySessionName(event.setBy);
|
|
434
|
+
if (memberInfo) {
|
|
435
|
+
ownerId = memberInfo.member.id;
|
|
436
|
+
}
|
|
437
|
+
}
|
|
438
|
+
catch (e) {
|
|
439
|
+
this.logger.debug('Could not resolve ownerId for Mission', { setBy: event.setBy });
|
|
440
|
+
}
|
|
441
|
+
const mission = createMission({
|
|
442
|
+
objective: event.goal,
|
|
443
|
+
ownerTeamId: 'default',
|
|
444
|
+
ownerId,
|
|
445
|
+
successCriteria: [],
|
|
446
|
+
currentStrategy: '',
|
|
447
|
+
cadence: '0 9 * * 1', // Default: weekly Monday review
|
|
448
|
+
});
|
|
449
|
+
// Decompose the mission objective into initial ProjectTasks
|
|
450
|
+
const taskIds = await V3DataService.decomposeMissionToTasks(mission.id, event.goal, event.projectPath);
|
|
451
|
+
mission.activeProjectTaskIds = taskIds;
|
|
452
|
+
await ensureDir(this.missionsDir);
|
|
453
|
+
await atomicWriteJson(path.join(this.missionsDir, `${mission.id}.json`), mission);
|
|
454
|
+
this.logger.info('Mission auto-created from goal with tasks', {
|
|
455
|
+
missionId: mission.id,
|
|
456
|
+
objective: event.goal,
|
|
457
|
+
setBy: event.setBy,
|
|
458
|
+
taskCount: taskIds.length,
|
|
459
|
+
});
|
|
460
|
+
}
|
|
461
|
+
catch (err) {
|
|
462
|
+
this.logger.warn('V3DataService.onGoalSet failed (non-fatal)', {
|
|
463
|
+
goal: event.goal,
|
|
464
|
+
error: err instanceof Error ? err.message : String(err),
|
|
465
|
+
});
|
|
466
|
+
}
|
|
467
|
+
}
|
|
468
|
+
/**
|
|
469
|
+
* Handles message:user_work — creates a Request from a user message.
|
|
470
|
+
*
|
|
471
|
+
* @param event - User work message event payload
|
|
472
|
+
*/
|
|
473
|
+
async onUserWorkMessage(event) {
|
|
474
|
+
try {
|
|
475
|
+
// Signal new user turn — clear stale request correlation
|
|
476
|
+
RequestTracker.getInstance().clearOnNewMessage();
|
|
477
|
+
const requestService = RequestService.getInstance(this.projectPath);
|
|
478
|
+
// Bug 3 fix: auto-close dangling Requests (open, no workItems).
|
|
479
|
+
// When a new user message arrives, any previous Request that is still
|
|
480
|
+
// 'open' with empty workItemIds was never delegated — the orchestrator
|
|
481
|
+
// handled it directly. Close these as 'done' so they don't linger.
|
|
482
|
+
//
|
|
483
|
+
// P2-1 improvement: only auto-close Requests older than DANGLING_GRACE_MS
|
|
484
|
+
// to avoid prematurely closing Requests before the orchestrator has time
|
|
485
|
+
// to process them and create WorkItems.
|
|
486
|
+
try {
|
|
487
|
+
const allRequests = await requestService.listAll();
|
|
488
|
+
const now = Date.now();
|
|
489
|
+
const danglingRequests = allRequests.filter((r) => {
|
|
490
|
+
if (r.status !== 'open' || r.workItemIds.length > 0)
|
|
491
|
+
return false;
|
|
492
|
+
// Grace period: only close if the Request has been open long enough
|
|
493
|
+
const age = now - new Date(r.createdAt).getTime();
|
|
494
|
+
return age > DANGLING_REQUEST_GRACE_MS;
|
|
495
|
+
});
|
|
496
|
+
for (const dangling of danglingRequests) {
|
|
497
|
+
await requestService.update(dangling.id, { status: 'done' });
|
|
498
|
+
this.logger.debug('Auto-closed dangling Request (no workItems, past grace period)', {
|
|
499
|
+
requestId: dangling.id,
|
|
500
|
+
});
|
|
501
|
+
}
|
|
502
|
+
}
|
|
503
|
+
catch (cleanupErr) {
|
|
504
|
+
this.logger.debug('Dangling Request cleanup failed (non-fatal)', {
|
|
505
|
+
error: cleanupErr instanceof Error ? cleanupErr.message : String(cleanupErr),
|
|
506
|
+
});
|
|
507
|
+
}
|
|
508
|
+
// Dedup: check if a Request with this messageId already exists.
|
|
509
|
+
// Previous: used conversationId (Slack thread), which blocked all
|
|
510
|
+
// subsequent messages in the same thread. Now uses messageId so each
|
|
511
|
+
// user message can independently create a Request.
|
|
512
|
+
const existing = await requestService.findBySourceConversationItemId(event.messageId);
|
|
513
|
+
if (existing) {
|
|
514
|
+
this.logger.debug('Request already exists for this message, skipping', {
|
|
515
|
+
messageId: event.messageId,
|
|
516
|
+
existingRequestId: existing.id,
|
|
517
|
+
});
|
|
518
|
+
return;
|
|
519
|
+
}
|
|
520
|
+
// Simple filter: skip empty/whitespace-only messages.
|
|
521
|
+
const content = event.content.trim();
|
|
522
|
+
if (content.length < MIN_REQUEST_CONTENT_LENGTH) {
|
|
523
|
+
this.logger.debug('Message too short to create Request', {
|
|
524
|
+
messageId: event.messageId,
|
|
525
|
+
contentLength: content.length,
|
|
526
|
+
minRequired: MIN_REQUEST_CONTENT_LENGTH,
|
|
527
|
+
});
|
|
528
|
+
return;
|
|
529
|
+
}
|
|
530
|
+
// -----------------------------------------------------------------------
|
|
531
|
+
// V3 Pipeline change: Semantic understanding moved to orchestrator skills.
|
|
532
|
+
// The orchestrator (which has Claude LLM) will decide when to create
|
|
533
|
+
// Requests via the 'create-request' skill and decompose them via the
|
|
534
|
+
// 'break-down-request' skill. This removes mechanical keyword-based
|
|
535
|
+
// intent classification from the data service.
|
|
536
|
+
//
|
|
537
|
+
// The helper functions (classifyIntent, isNonActionableMessage, etc.)
|
|
538
|
+
// are preserved at the bottom of this file as potential fallback.
|
|
539
|
+
// -----------------------------------------------------------------------
|
|
540
|
+
this.logger.info('User work message received — awaiting orchestrator classification via skills', {
|
|
541
|
+
messageId: event.messageId,
|
|
542
|
+
source: event.source,
|
|
543
|
+
contentLength: content.length,
|
|
544
|
+
});
|
|
545
|
+
}
|
|
546
|
+
catch (err) {
|
|
547
|
+
this.logger.warn('V3DataService.onUserWorkMessage failed (non-fatal)', {
|
|
548
|
+
messageId: event.messageId,
|
|
549
|
+
error: err instanceof Error ? err.message : String(err),
|
|
550
|
+
});
|
|
551
|
+
}
|
|
552
|
+
}
|
|
553
|
+
/**
|
|
554
|
+
* Handles task:blocked — updates the matching WorkItem to 'blocked'.
|
|
555
|
+
*
|
|
556
|
+
* Uses the same two-tier matching strategy as onTaskCompleted.
|
|
557
|
+
*
|
|
558
|
+
* @param event - Task blocked event payload
|
|
559
|
+
*/
|
|
560
|
+
async onTaskBlocked(event) {
|
|
561
|
+
try {
|
|
562
|
+
const match = await this.findMatchingWorkItem(event.taskId, event.sessionName, 'blocked task');
|
|
563
|
+
if (!match)
|
|
564
|
+
return;
|
|
565
|
+
const taskPool = TaskPoolService.getInstance();
|
|
566
|
+
await taskPool.updateItemStatus(match.id, 'blocked');
|
|
567
|
+
this.logger.info('WorkItem auto-blocked', {
|
|
568
|
+
workItemId: match.id,
|
|
569
|
+
sessionName: event.sessionName,
|
|
570
|
+
reason: event.reason,
|
|
571
|
+
});
|
|
572
|
+
// Cascade: update parent Request status
|
|
573
|
+
await this.cascadeRequestStatus(match.requestId);
|
|
574
|
+
}
|
|
575
|
+
catch (err) {
|
|
576
|
+
this.logger.warn('V3DataService.onTaskBlocked failed (non-fatal)', {
|
|
577
|
+
sessionName: event.sessionName,
|
|
578
|
+
error: err instanceof Error ? err.message : String(err),
|
|
579
|
+
});
|
|
580
|
+
}
|
|
581
|
+
}
|
|
582
|
+
/**
|
|
583
|
+
* Recomputes Request.status from the aggregate state of its child WorkItems.
|
|
584
|
+
*
|
|
585
|
+
* Rules:
|
|
586
|
+
* - All WorkItems done → Request = done
|
|
587
|
+
* - Any WorkItem running → Request = running
|
|
588
|
+
* - All WorkItems queued → no change (work delegated but not started)
|
|
589
|
+
* - Any WorkItem blocked, none running → Request = blocked
|
|
590
|
+
* - All WorkItems failed/cancelled → Request = cancelled
|
|
591
|
+
* - Some done + some queued (no running) → Request = running
|
|
592
|
+
*
|
|
593
|
+
* @param requestId - The parent Request ID (may be undefined for unlinked WorkItems)
|
|
594
|
+
*/
|
|
595
|
+
async cascadeRequestStatus(requestId) {
|
|
596
|
+
if (!requestId)
|
|
597
|
+
return;
|
|
598
|
+
try {
|
|
599
|
+
const requestService = RequestService.getInstance(this.projectPath);
|
|
600
|
+
const request = await requestService.getById(requestId);
|
|
601
|
+
if (!request || request.status === 'done' || request.status === 'cancelled')
|
|
602
|
+
return;
|
|
603
|
+
const taskPool = TaskPoolService.getInstance();
|
|
604
|
+
const allItems = await taskPool.getAllItems();
|
|
605
|
+
const childItems = allItems.filter((wi) => wi.requestId === requestId);
|
|
606
|
+
if (childItems.length === 0)
|
|
607
|
+
return;
|
|
608
|
+
const statuses = childItems.map((wi) => wi.status);
|
|
609
|
+
let newStatus;
|
|
610
|
+
const allQueued = statuses.every((s) => s === 'queued' || s === 'scheduled');
|
|
611
|
+
if (statuses.every((s) => s === 'done')) {
|
|
612
|
+
newStatus = 'done';
|
|
613
|
+
}
|
|
614
|
+
else if (statuses.some((s) => s === 'running')) {
|
|
615
|
+
newStatus = 'running';
|
|
616
|
+
}
|
|
617
|
+
else if (allQueued) {
|
|
618
|
+
// All WorkItems still queued — work delegated but not started.
|
|
619
|
+
// Keep Request in its current status (no change needed).
|
|
620
|
+
return;
|
|
621
|
+
}
|
|
622
|
+
else if (statuses.some((s) => s === 'blocked') && !statuses.some((s) => s === 'running')) {
|
|
623
|
+
newStatus = 'blocked';
|
|
624
|
+
}
|
|
625
|
+
else if (statuses.every((s) => s === 'failed' || s === 'cancelled')) {
|
|
626
|
+
newStatus = 'cancelled';
|
|
627
|
+
}
|
|
628
|
+
else if (statuses.some((s) => s === 'done')) {
|
|
629
|
+
// Some work completed, some still queued — progress is being made
|
|
630
|
+
newStatus = 'running';
|
|
631
|
+
}
|
|
632
|
+
else {
|
|
633
|
+
// Mixed state — keep current status
|
|
634
|
+
return;
|
|
635
|
+
}
|
|
636
|
+
if (newStatus !== request.status && isValidRequestTransition(request.status, newStatus)) {
|
|
637
|
+
await requestService.update(requestId, { status: newStatus });
|
|
638
|
+
this.logger.info('Request status cascaded from WorkItems', {
|
|
639
|
+
requestId,
|
|
640
|
+
previousStatus: request.status,
|
|
641
|
+
newStatus,
|
|
642
|
+
childStatuses: statuses,
|
|
643
|
+
});
|
|
644
|
+
// Emit update event for notification services
|
|
645
|
+
this.eventBus.emit('v3:request_updated', {
|
|
646
|
+
requestId,
|
|
647
|
+
status: newStatus,
|
|
648
|
+
previousStatus: request.status,
|
|
649
|
+
});
|
|
650
|
+
}
|
|
651
|
+
}
|
|
652
|
+
catch (err) {
|
|
653
|
+
this.logger.debug('cascadeRequestStatus failed (non-fatal)', {
|
|
654
|
+
requestId,
|
|
655
|
+
error: err instanceof Error ? err.message : String(err),
|
|
656
|
+
});
|
|
657
|
+
}
|
|
658
|
+
}
|
|
659
|
+
// ---------------------------------------------------------------------------
|
|
660
|
+
// Mission → Task Decomposition
|
|
661
|
+
// ---------------------------------------------------------------------------
|
|
662
|
+
/**
|
|
663
|
+
* Decomposes a mission objective into V3 WorkItems.
|
|
664
|
+
*
|
|
665
|
+
* Per `specs/2026-05-06-task-management-v1-deprecation.md`, the legacy
|
|
666
|
+
* `.crewly/tasks/delegated/open/*.md` filesystem write has been removed —
|
|
667
|
+
* V3 task-pool is the sole source of truth for delegated work. Each
|
|
668
|
+
* planned sub-task lands as a queued WorkItem with the long-form brief
|
|
669
|
+
* carried in `briefMarkdown` (the same content that previously lived in
|
|
670
|
+
* the .md body).
|
|
671
|
+
*
|
|
672
|
+
* @param missionId - The parent mission ID (stored on each WI and in the
|
|
673
|
+
* brief's Context section)
|
|
674
|
+
* @param objective - The mission objective text
|
|
675
|
+
* @param projectPath - Reserved for future use (e.g. resolving relative
|
|
676
|
+
* skill paths in the brief). Currently unused but
|
|
677
|
+
* kept in the signature so existing callers don't
|
|
678
|
+
* have to be updated in lockstep.
|
|
679
|
+
* @returns Array of created WorkItem IDs in plan order
|
|
680
|
+
*/
|
|
681
|
+
static async decomposeMissionToTasks(missionId, objective, _projectPath) {
|
|
682
|
+
const planned = planTasksFromObjective(objective);
|
|
683
|
+
const workItemIds = [];
|
|
684
|
+
const now = new Date().toISOString();
|
|
685
|
+
// Lazy-import to avoid a static cycle through TaskPoolService.
|
|
686
|
+
const { TaskPoolService } = await import('../task-pool/task-pool.service.js');
|
|
687
|
+
const taskPool = TaskPoolService.getInstance();
|
|
688
|
+
for (const task of planned) {
|
|
689
|
+
const briefMarkdown = [
|
|
690
|
+
`# ${task.title}`,
|
|
691
|
+
'',
|
|
692
|
+
task.description,
|
|
693
|
+
'',
|
|
694
|
+
'## Acceptance Criteria',
|
|
695
|
+
...task.acceptanceCriteria.map((c) => `- ${c}`),
|
|
696
|
+
'',
|
|
697
|
+
'## Context',
|
|
698
|
+
`Parent mission: ${missionId}`,
|
|
699
|
+
`Mission objective: ${objective}`,
|
|
700
|
+
`Required role: developer`,
|
|
701
|
+
'',
|
|
702
|
+
'## Task Information',
|
|
703
|
+
`- **Priority**: ${task.priority}`,
|
|
704
|
+
`- **Created at**: ${now}`,
|
|
705
|
+
`- **Mission ID**: ${missionId}`,
|
|
706
|
+
].join('\n');
|
|
707
|
+
const workItem = createWorkItem({
|
|
708
|
+
type: 'project_task',
|
|
709
|
+
owner: 'orchestrator',
|
|
710
|
+
title: task.title,
|
|
711
|
+
description: task.description.substring(0, 500),
|
|
712
|
+
briefMarkdown,
|
|
713
|
+
missionId,
|
|
714
|
+
maxRetries: 2,
|
|
715
|
+
});
|
|
716
|
+
await taskPool.addToPool(workItem);
|
|
717
|
+
workItemIds.push(workItem.id);
|
|
718
|
+
}
|
|
719
|
+
LoggerService.getInstance().createComponentLogger('V3DataService').debug('Decomposed mission into WorkItems', {
|
|
720
|
+
missionId,
|
|
721
|
+
taskCount: workItemIds.length,
|
|
722
|
+
workItemIds,
|
|
723
|
+
});
|
|
724
|
+
return workItemIds;
|
|
725
|
+
}
|
|
726
|
+
// ---------------------------------------------------------------------------
|
|
727
|
+
// Helpers
|
|
728
|
+
// ---------------------------------------------------------------------------
|
|
729
|
+
/**
|
|
730
|
+
* Lists all missions from disk.
|
|
731
|
+
*
|
|
732
|
+
* @returns Array of Mission objects
|
|
733
|
+
*/
|
|
734
|
+
async listMissions() {
|
|
735
|
+
try {
|
|
736
|
+
await ensureDir(this.missionsDir);
|
|
737
|
+
const files = await import('fs/promises').then((fs) => fs.readdir(this.missionsDir));
|
|
738
|
+
const missions = [];
|
|
739
|
+
for (const file of files) {
|
|
740
|
+
if (!file.endsWith('.json'))
|
|
741
|
+
continue;
|
|
742
|
+
try {
|
|
743
|
+
const filePath = path.join(this.missionsDir, file);
|
|
744
|
+
const { safeReadJson: readJson } = await import('../../utils/file-io.utils.js');
|
|
745
|
+
const data = await readJson(filePath, null);
|
|
746
|
+
if (data && data.id && data.objective) {
|
|
747
|
+
missions.push(data);
|
|
748
|
+
}
|
|
749
|
+
}
|
|
750
|
+
catch {
|
|
751
|
+
// Skip malformed files
|
|
752
|
+
}
|
|
753
|
+
}
|
|
754
|
+
return missions;
|
|
755
|
+
}
|
|
756
|
+
catch {
|
|
757
|
+
return [];
|
|
758
|
+
}
|
|
759
|
+
}
|
|
760
|
+
/**
|
|
761
|
+
* Stops listening to events. Used for cleanup/testing.
|
|
762
|
+
*/
|
|
763
|
+
dispose() {
|
|
764
|
+
this.eventBus.removeAllListeners('v3:task_delegated');
|
|
765
|
+
this.eventBus.removeAllListeners('v3:task_completed');
|
|
766
|
+
this.eventBus.removeAllListeners('v3:task_failed');
|
|
767
|
+
this.eventBus.removeAllListeners('v3:task_blocked');
|
|
768
|
+
this.eventBus.removeAllListeners('v3:goal_set');
|
|
769
|
+
this.eventBus.removeAllListeners('v3:user_work_message');
|
|
770
|
+
this.logger.info('V3DataService disposed');
|
|
771
|
+
}
|
|
772
|
+
}
|
|
773
|
+
// ---------------------------------------------------------------------------
|
|
774
|
+
// Intent Classification (keyword-based, no AI)
|
|
775
|
+
// ---------------------------------------------------------------------------
|
|
776
|
+
/**
|
|
777
|
+
* Patterns that identify non-actionable messages (confirmations, chit-chat,
|
|
778
|
+
* acknowledgements). These messages should NOT create Requests.
|
|
779
|
+
*/
|
|
780
|
+
const NON_ACTIONABLE_PATTERNS = [
|
|
781
|
+
// Acknowledgements / confirmations (Chinese + English)
|
|
782
|
+
/^(好的|好|嗯|嗯嗯|行|行的|可以|没问题|收到|了解|知道了|明白|ok|okay|sure|yes|yep|yeah|yup|got it|sounds good|lgtm|ack|roger|copy|noted|thanks|thank you|thx|ty|np|no problem|alright|understood|fine|cool|nice|great|perfect|awesome|good|done|right|exactly|absolutely|definitely|indeed|correct|agreed|approved|confirmed|approve|accept|安排|好的安排|辛苦了|谢谢|不错|可以的|没事|随便|都行|好吧|对|对的|是的|嗯好|好嘞|好哒|okie|oki|kk|k)\s*[!.。!~~]*$/i,
|
|
783
|
+
// Greetings
|
|
784
|
+
/^(hi|hello|hey|yo|sup|morning|afternoon|evening|你好|早|早上好|下午好|晚上好|嗨|哈喽)\s*[!.。!~~]*$/i,
|
|
785
|
+
// Emoji-only messages
|
|
786
|
+
/^[\p{Emoji}\s]+$/u,
|
|
787
|
+
// Filler / single-word non-work
|
|
788
|
+
/^(hmm+|huh|ah|oh|lol|haha|hehe|wow|omg|idk|brb|ttyl|tbd|wip)\s*[!.。!~~]*$/i,
|
|
789
|
+
];
|
|
790
|
+
/**
|
|
791
|
+
* Maximum word count for a message to be eligible for non-actionable check.
|
|
792
|
+
* Longer messages are unlikely to be simple acknowledgements.
|
|
793
|
+
*/
|
|
794
|
+
const MAX_NON_ACTIONABLE_WORDS = 6;
|
|
795
|
+
/**
|
|
796
|
+
* Checks if a message is non-actionable (confirmation, chit-chat, greeting).
|
|
797
|
+
* These messages should not create Requests or WorkItems.
|
|
798
|
+
*
|
|
799
|
+
* @param content - The user message text (trimmed)
|
|
800
|
+
* @returns True if the message is non-actionable
|
|
801
|
+
*/
|
|
802
|
+
export function isNonActionableMessage(content) {
|
|
803
|
+
// Long messages are likely actionable
|
|
804
|
+
const words = content.split(/\s+/).filter(Boolean);
|
|
805
|
+
if (words.length > MAX_NON_ACTIONABLE_WORDS)
|
|
806
|
+
return false;
|
|
807
|
+
return NON_ACTIONABLE_PATTERNS.some((pattern) => pattern.test(content.trim()));
|
|
808
|
+
}
|
|
809
|
+
/**
|
|
810
|
+
* Auto-classify request intent from message content.
|
|
811
|
+
* Runs synchronously — no AI call, just keyword matching.
|
|
812
|
+
*
|
|
813
|
+
* Bug A v0 (2026-05-06): delegates to the canonical
|
|
814
|
+
* `classifyIntentLevel` + `classifyIntentCategory` from
|
|
815
|
+
* `backend/src/types/intent-task.types.ts` (which read from the
|
|
816
|
+
* code-of-record rules at
|
|
817
|
+
* `backend/src/services/intent-task/intent-classifier.rules.ts`).
|
|
818
|
+
*
|
|
819
|
+
* Why delegation rather than maintaining a parallel rule-set: prior to
|
|
820
|
+
* this PR, the two classifyIntent paths drifted. The Mission-side classifier
|
|
821
|
+
* had ~40 patterns + length floor; the Request-side classifier had ~7 patterns
|
|
822
|
+
* with no length floor. This caused classification skew across surfaces.
|
|
823
|
+
*
|
|
824
|
+
* The local pre-filter `isNonActionableMessage` is preserved because it's
|
|
825
|
+
* scoped to v3-data.service callers (Request creation flow) and short-
|
|
826
|
+
* circuits L0 for chit-chat without invoking the heavier classifier.
|
|
827
|
+
*
|
|
828
|
+
* @param content - The user message text
|
|
829
|
+
* @returns Object with intentCategory and intentLevel
|
|
830
|
+
*/
|
|
831
|
+
export function classifyIntent(content) {
|
|
832
|
+
// Non-actionable messages: acknowledgements, chit-chat, greetings.
|
|
833
|
+
// Pre-filter at the Request boundary — short-circuit before invoking
|
|
834
|
+
// the canonical classifier so non-actionable input never lands as a
|
|
835
|
+
// Request-shaped row.
|
|
836
|
+
if (isNonActionableMessage(content)) {
|
|
837
|
+
return { intentCategory: 'other', intentLevel: 'L0' };
|
|
838
|
+
}
|
|
839
|
+
// Delegate to the canonical L0/L1/L2/L3 classifier + ZH-parity category
|
|
840
|
+
// matcher. Both functions read from the shared rule-set at
|
|
841
|
+
// `intent-classifier.rules.ts`, so any future tuning lands in exactly
|
|
842
|
+
// one place.
|
|
843
|
+
return {
|
|
844
|
+
intentLevel: classifyIntentLevel(content),
|
|
845
|
+
intentCategory: classifyIntentCategory(content),
|
|
846
|
+
};
|
|
847
|
+
}
|
|
848
|
+
/**
|
|
849
|
+
* Threshold for "complex" objectives that warrant multi-step decomposition.
|
|
850
|
+
* Below this word count, a single task is sufficient.
|
|
851
|
+
*/
|
|
852
|
+
const COMPLEX_OBJECTIVE_WORD_THRESHOLD = 15;
|
|
853
|
+
/**
|
|
854
|
+
* Determines whether an objective is complex enough for multi-step decomposition.
|
|
855
|
+
* Complexity heuristics: word count, presence of conjunctions/lists, multiple
|
|
856
|
+
* action verbs, or explicit multi-step indicators.
|
|
857
|
+
*
|
|
858
|
+
* @param objective - The objective text
|
|
859
|
+
* @returns True if the objective warrants multiple tasks
|
|
860
|
+
*/
|
|
861
|
+
export function isComplexObjective(objective) {
|
|
862
|
+
const words = objective.split(/\s+/).filter(Boolean);
|
|
863
|
+
if (words.length >= COMPLEX_OBJECTIVE_WORD_THRESHOLD)
|
|
864
|
+
return true;
|
|
865
|
+
// Chinese: character count heuristic (Chinese text has fewer spaces)
|
|
866
|
+
const cjkChars = objective.match(/[\u4e00-\u9fff]/g);
|
|
867
|
+
if (cjkChars && cjkChars.length >= 20)
|
|
868
|
+
return true;
|
|
869
|
+
const lower = objective.toLowerCase();
|
|
870
|
+
// Multiple action verbs suggest multi-step work (English)
|
|
871
|
+
const actionVerbs = lower.match(/\b(build|create|implement|add|fix|deploy|test|review|design|write|migrate|refactor|setup|configure|integrate)\b/g);
|
|
872
|
+
if (actionVerbs && actionVerbs.length >= 2)
|
|
873
|
+
return true;
|
|
874
|
+
// Chinese action verbs
|
|
875
|
+
const cnActionVerbs = objective.match(/创建|实现|添加|修复|部署|测试|审查|设计|编写|迁移|重构|配置|集成|评估|分析|检查|搭建|开发/g);
|
|
876
|
+
if (cnActionVerbs && cnActionVerbs.length >= 2)
|
|
877
|
+
return true;
|
|
878
|
+
// Conjunctions or list indicators (English)
|
|
879
|
+
if (/\b(and then|then|also|plus|as well as|followed by|after that)\b/.test(lower))
|
|
880
|
+
return true;
|
|
881
|
+
if (/[;,]\s*(and\s+)?(then\s+)?/.test(objective) && words.length > 8)
|
|
882
|
+
return true;
|
|
883
|
+
// Chinese list/compound indicators: "包括...方面", enumeration with 、or ,
|
|
884
|
+
if (/包括|以及|同时|另外|还有|并且|然后/.test(objective))
|
|
885
|
+
return true;
|
|
886
|
+
// Chinese comma-separated list (3+ items with 、)
|
|
887
|
+
const cnListItems = objective.split(/[、,]/).filter((s) => s.trim().length > 1);
|
|
888
|
+
if (cnListItems.length >= 3)
|
|
889
|
+
return true;
|
|
890
|
+
return false;
|
|
891
|
+
}
|
|
892
|
+
/**
|
|
893
|
+
* Decomposes a mission objective into actionable tasks using keyword matching.
|
|
894
|
+
*
|
|
895
|
+
* P0-1 fix: Uses intelligent decomposition instead of always producing 3 tasks.
|
|
896
|
+
* - Simple/direct objectives → 1 task
|
|
897
|
+
* - Complex/multi-step objectives → 2-3 tasks
|
|
898
|
+
*
|
|
899
|
+
* Recognises three broad categories:
|
|
900
|
+
* - **Build** (create/implement/build/add/feature) → single task or design+implement+test
|
|
901
|
+
* - **Fix** (fix/debug/resolve/repair/patch) → single task or investigate+fix+verify
|
|
902
|
+
* - **Default** (anything else) → single task or plan+execute+review
|
|
903
|
+
*
|
|
904
|
+
* @param objective - The mission objective text
|
|
905
|
+
* @returns Array of PlannedTask objects (1-3 items)
|
|
906
|
+
*/
|
|
907
|
+
export function planTasksFromObjective(objective) {
|
|
908
|
+
const lower = objective.toLowerCase();
|
|
909
|
+
const complex = isComplexObjective(objective);
|
|
910
|
+
// Category: Build / Feature work (English + Chinese)
|
|
911
|
+
if (/\b(build|create|implement|add|feature|develop|write|ship)\b/.test(lower) || /创建|实现|添加|开发|编写|搭建|新增/.test(objective)) {
|
|
912
|
+
if (!complex) {
|
|
913
|
+
return [{
|
|
914
|
+
title: truncate(objective, 80),
|
|
915
|
+
description: `Implement: ${objective}. Follow project conventions, write tests, ensure build passes.`,
|
|
916
|
+
acceptanceCriteria: [
|
|
917
|
+
'Functionality implemented and working',
|
|
918
|
+
'Tests written and passing',
|
|
919
|
+
'Build passes clean',
|
|
920
|
+
],
|
|
921
|
+
priority: 'high',
|
|
922
|
+
}];
|
|
923
|
+
}
|
|
924
|
+
return [
|
|
925
|
+
{
|
|
926
|
+
title: `Design approach for: ${truncate(objective, 60)}`,
|
|
927
|
+
description: `Analyse requirements and design the technical approach for: ${objective}. Identify key components, interfaces, and dependencies.`,
|
|
928
|
+
acceptanceCriteria: [
|
|
929
|
+
'Technical approach documented',
|
|
930
|
+
'Key components and interfaces identified',
|
|
931
|
+
'Dependencies and risks listed',
|
|
932
|
+
],
|
|
933
|
+
priority: 'high',
|
|
934
|
+
},
|
|
935
|
+
{
|
|
936
|
+
title: `Implement: ${truncate(objective, 60)}`,
|
|
937
|
+
description: `Implement the core functionality described in: ${objective}. Follow the design approach from the previous task.`,
|
|
938
|
+
acceptanceCriteria: [
|
|
939
|
+
'Core functionality implemented',
|
|
940
|
+
'Code follows project conventions',
|
|
941
|
+
'TypeScript compiles without errors',
|
|
942
|
+
],
|
|
943
|
+
priority: 'high',
|
|
944
|
+
},
|
|
945
|
+
{
|
|
946
|
+
title: `Test and verify: ${truncate(objective, 60)}`,
|
|
947
|
+
description: `Write unit tests for the implementation of: ${objective}. Ensure minimum 80% coverage for new code.`,
|
|
948
|
+
acceptanceCriteria: [
|
|
949
|
+
'Unit tests written and passing',
|
|
950
|
+
'Edge cases covered',
|
|
951
|
+
'Build passes clean',
|
|
952
|
+
],
|
|
953
|
+
priority: 'medium',
|
|
954
|
+
},
|
|
955
|
+
];
|
|
956
|
+
}
|
|
957
|
+
// Category: Bug fix / Debugging (English + Chinese)
|
|
958
|
+
if (/\b(fix|debug|resolve|repair|patch|broken|bug|error|crash)\b/.test(lower) || /修复|修|调试|解决|修补|bug|报错|崩溃/.test(objective)) {
|
|
959
|
+
if (!complex) {
|
|
960
|
+
return [{
|
|
961
|
+
title: truncate(objective, 80),
|
|
962
|
+
description: `Investigate and fix: ${objective}. Identify root cause, apply fix, verify with tests.`,
|
|
963
|
+
acceptanceCriteria: [
|
|
964
|
+
'Root cause identified and fixed',
|
|
965
|
+
'Tests pass, no regressions',
|
|
966
|
+
'Build passes clean',
|
|
967
|
+
],
|
|
968
|
+
priority: 'high',
|
|
969
|
+
}];
|
|
970
|
+
}
|
|
971
|
+
return [
|
|
972
|
+
{
|
|
973
|
+
title: `Investigate: ${truncate(objective, 60)}`,
|
|
974
|
+
description: `Investigate the root cause of: ${objective}. Reproduce the issue and identify the failing code path.`,
|
|
975
|
+
acceptanceCriteria: [
|
|
976
|
+
'Root cause identified',
|
|
977
|
+
'Issue reproduced reliably',
|
|
978
|
+
'Affected code paths documented',
|
|
979
|
+
],
|
|
980
|
+
priority: 'high',
|
|
981
|
+
},
|
|
982
|
+
{
|
|
983
|
+
title: `Fix: ${truncate(objective, 60)}`,
|
|
984
|
+
description: `Apply a fix for: ${objective}. Ensure the fix addresses the root cause, not just the symptoms.`,
|
|
985
|
+
acceptanceCriteria: [
|
|
986
|
+
'Fix applied and tested locally',
|
|
987
|
+
'Root cause addressed',
|
|
988
|
+
'No regressions introduced',
|
|
989
|
+
],
|
|
990
|
+
priority: 'high',
|
|
991
|
+
},
|
|
992
|
+
{
|
|
993
|
+
title: `Verify fix: ${truncate(objective, 60)}`,
|
|
994
|
+
description: `Verify the fix for: ${objective}. Run full test suite and confirm the issue no longer reproduces.`,
|
|
995
|
+
acceptanceCriteria: [
|
|
996
|
+
'All existing tests pass',
|
|
997
|
+
'Regression test added',
|
|
998
|
+
'Issue confirmed resolved',
|
|
999
|
+
],
|
|
1000
|
+
priority: 'medium',
|
|
1001
|
+
},
|
|
1002
|
+
];
|
|
1003
|
+
}
|
|
1004
|
+
// Default category
|
|
1005
|
+
if (!complex) {
|
|
1006
|
+
return [{
|
|
1007
|
+
title: truncate(objective, 80),
|
|
1008
|
+
description: `Execute: ${objective}. Complete the work and verify results.`,
|
|
1009
|
+
acceptanceCriteria: [
|
|
1010
|
+
'Objective completed',
|
|
1011
|
+
'Deliverables produced',
|
|
1012
|
+
'Build passes',
|
|
1013
|
+
],
|
|
1014
|
+
priority: 'high',
|
|
1015
|
+
}];
|
|
1016
|
+
}
|
|
1017
|
+
// Generic Plan → Execute → Review chain. Strict sequential dependency
|
|
1018
|
+
// is encoded via `dependsOnTitles` so the fan-out subscriber writes
|
|
1019
|
+
// `WorkItem.dependsOn` correctly: Execute waits for Plan, Review waits
|
|
1020
|
+
// for Execute. Without these, all three queue concurrently and a
|
|
1021
|
+
// worker can claim Review before Execute completes — observed in the
|
|
1022
|
+
// 2026-05-08 dogfood (Sam claimed Review with empty output while Plan
|
|
1023
|
+
// and Execute were still blocked).
|
|
1024
|
+
const planTitle = `Plan: ${truncate(objective, 60)}`;
|
|
1025
|
+
const executeTitle = `Execute: ${truncate(objective, 60)}`;
|
|
1026
|
+
const reviewTitle = `Review: ${truncate(objective, 60)}`;
|
|
1027
|
+
return [
|
|
1028
|
+
{
|
|
1029
|
+
title: planTitle,
|
|
1030
|
+
description: `Create an execution plan for: ${objective}. Break down the work into concrete steps.`,
|
|
1031
|
+
acceptanceCriteria: [
|
|
1032
|
+
'Execution plan created',
|
|
1033
|
+
'Steps are concrete and actionable',
|
|
1034
|
+
'Dependencies identified',
|
|
1035
|
+
],
|
|
1036
|
+
priority: 'high',
|
|
1037
|
+
},
|
|
1038
|
+
{
|
|
1039
|
+
title: executeTitle,
|
|
1040
|
+
description: `Execute the plan for: ${objective}. Complete all steps identified in the planning phase.`,
|
|
1041
|
+
acceptanceCriteria: [
|
|
1042
|
+
'All planned steps completed',
|
|
1043
|
+
'Deliverables produced',
|
|
1044
|
+
'Build passes',
|
|
1045
|
+
],
|
|
1046
|
+
priority: 'high',
|
|
1047
|
+
dependsOnTitles: [planTitle],
|
|
1048
|
+
},
|
|
1049
|
+
{
|
|
1050
|
+
title: reviewTitle,
|
|
1051
|
+
description: `Review the completed work for: ${objective}. Verify quality, completeness, and alignment with the original objective.`,
|
|
1052
|
+
acceptanceCriteria: [
|
|
1053
|
+
'Work reviewed for quality',
|
|
1054
|
+
'Objective fully addressed',
|
|
1055
|
+
'Documentation updated if needed',
|
|
1056
|
+
],
|
|
1057
|
+
priority: 'low',
|
|
1058
|
+
dependsOnTitles: [executeTitle],
|
|
1059
|
+
},
|
|
1060
|
+
];
|
|
1061
|
+
}
|
|
1062
|
+
/**
|
|
1063
|
+
* Truncates a string to a maximum length, appending ellipsis if needed.
|
|
1064
|
+
*
|
|
1065
|
+
* @param str - The string to truncate
|
|
1066
|
+
* @param maxLen - Maximum length
|
|
1067
|
+
* @returns Truncated string
|
|
1068
|
+
*/
|
|
1069
|
+
function truncate(str, maxLen) {
|
|
1070
|
+
if (str.length <= maxLen)
|
|
1071
|
+
return str;
|
|
1072
|
+
return str.slice(0, maxLen - 3) + '...';
|
|
1073
|
+
}
|
|
1074
|
+
/**
|
|
1075
|
+
* Intent category labels for title prefixes.
|
|
1076
|
+
*/
|
|
1077
|
+
const INTENT_TITLE_PREFIXES = {
|
|
1078
|
+
debugging: 'Fix',
|
|
1079
|
+
deployment: 'Deploy',
|
|
1080
|
+
review: 'Review',
|
|
1081
|
+
planning: 'Plan',
|
|
1082
|
+
research: 'Research',
|
|
1083
|
+
code_change: 'Implement',
|
|
1084
|
+
communication: 'Message',
|
|
1085
|
+
};
|
|
1086
|
+
/**
|
|
1087
|
+
* Generates a summarized title for a Request instead of copying raw content.
|
|
1088
|
+
*
|
|
1089
|
+
* For short messages (under 60 chars), uses the content directly with an
|
|
1090
|
+
* intent prefix. For longer messages, extracts the first sentence or clause
|
|
1091
|
+
* and prepends the intent prefix.
|
|
1092
|
+
*
|
|
1093
|
+
* @param content - The trimmed user message
|
|
1094
|
+
* @param intentCategory - The classified intent category
|
|
1095
|
+
* @returns A concise, informative title (max 80 chars)
|
|
1096
|
+
*/
|
|
1097
|
+
export function generateRequestTitle(content, intentCategory) {
|
|
1098
|
+
const prefix = INTENT_TITLE_PREFIXES[intentCategory];
|
|
1099
|
+
// For short messages (under 60 chars), always add a prefix.
|
|
1100
|
+
// If no category-specific prefix, use a generic "Request" prefix
|
|
1101
|
+
// to ensure title ≠ description.
|
|
1102
|
+
if (content.length <= 60) {
|
|
1103
|
+
const label = prefix || 'Request';
|
|
1104
|
+
return truncate(`[${label}] ${content}`, 80);
|
|
1105
|
+
}
|
|
1106
|
+
// For longer messages, extract the first sentence or clause
|
|
1107
|
+
// and split on Chinese sentence-ending punctuation as well.
|
|
1108
|
+
const firstSentence = content.match(/^[^.!?\n。!?]+[.!?。!?]?/)?.[0] || content;
|
|
1109
|
+
const core = firstSentence.trim();
|
|
1110
|
+
const label = prefix || 'Request';
|
|
1111
|
+
return truncate(`[${label}] ${core}`, 80);
|
|
1112
|
+
}
|
|
1113
|
+
//# sourceMappingURL=v3-data.service.js.map
|