crewly 1.6.4 → 1.7.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/roles/architect/prompt.md +68 -2
- package/config/roles/auditor/prompt.md +92 -0
- package/config/roles/backend-developer/prompt.md +68 -2
- package/config/roles/content-strategist/prompt.md +73 -5
- package/config/roles/designer/prompt.md +69 -4
- package/config/roles/developer/prompt.md +233 -5
- package/config/roles/frontend-developer/prompt.md +68 -2
- package/config/roles/fullstack-dev/prompt.md +68 -2
- package/config/roles/generalist/prompt.md +68 -2
- package/config/roles/ops/prompt.md +69 -3
- package/config/roles/orchestrator/fragments/communication.md +27 -0
- package/config/roles/orchestrator/fragments/role-boundary.md +1 -1
- package/config/roles/orchestrator/prompt.md +285 -70
- package/config/roles/product-manager/prompt.md +140 -7
- package/config/roles/qa/prompt.md +70 -5
- package/config/roles/qa-engineer/prompt.md +70 -5
- package/config/roles/researcher/prompt.md +68 -2
- package/config/roles/sales/prompt.md +70 -5
- package/config/roles/support/prompt.md +69 -4
- package/config/roles/team-leader/prompt.md +93 -6
- package/config/roles/team-leader/role-boundaries.md +26 -0
- package/config/roles/team-leader/tl-addon.md +153 -1
- package/config/roles/tpm/prompt.md +68 -2
- package/config/roles/ux-designer/prompt.md +70 -5
- package/config/skills/_common/complete-body-shape.test.sh +249 -0
- package/config/skills/agent/core/accept-task/execute.sh +18 -15
- package/config/skills/agent/core/block-task/execute.sh +27 -9
- package/config/skills/agent/core/cancel-followup/SKILL.md +18 -0
- package/config/skills/agent/core/complete-task/execute.sh +45 -7
- package/config/skills/agent/core/create-request/SKILL.md +1 -1
- package/config/skills/agent/core/create-request/execute.sh +29 -2
- package/config/skills/agent/core/create-request/execute.test.sh +168 -0
- package/config/skills/agent/core/create-task/execute.sh +40 -12
- package/config/skills/agent/core/get-my-active-work/SKILL.md +3 -1
- package/config/skills/agent/core/get-my-tasks/execute.sh +7 -5
- package/config/skills/agent/core/handoff-task/execute.sh +34 -48
- package/config/skills/agent/core/list-my-followups/SKILL.md +18 -0
- package/config/skills/agent/core/read-task/execute.sh +21 -8
- package/config/skills/agent/core/recall/SKILL.md +7 -0
- package/config/skills/agent/core/remember/SKILL.md +17 -1
- package/config/skills/agent/core/remember/execute.sh +5 -1
- package/config/skills/agent/core/reply-channel/SKILL.md +19 -0
- package/config/skills/agent/core/report-progress/execute.sh +39 -16
- package/config/skills/agent/core/report-status/SKILL.md +8 -1
- package/config/skills/agent/core/report-status/execute.sh +59 -13
- package/config/skills/agent/core/save-working-state/execute.sh +17 -6
- package/config/skills/agent/core/schedule-followup/SKILL.md +19 -0
- package/config/skills/agent/core/send-message/SKILL.md +6 -0
- package/config/skills/agent/core/supersede-memory/SKILL.md +76 -0
- package/config/skills/agent/core/supersede-memory/execute.sh +108 -0
- package/config/skills/agent/core/watch-for-event/SKILL.md +19 -0
- package/config/skills/agent/onboarding/materialize-team/SKILL.md +94 -0
- package/config/skills/agent/onboarding/materialize-team/execute.sh +98 -0
- package/config/skills/agent/onboarding/recommend-team/SKILL.md +90 -0
- package/config/skills/agent/onboarding/recommend-team/execute.sh +96 -0
- package/config/skills/agent/xhs-article-to-image/SKILL.md +20 -0
- package/config/skills/auditor/score-task/SKILL.md +15 -0
- package/config/skills/orchestrator/assign-task/execute.sh +28 -4
- package/config/skills/orchestrator/cancel-all-schedules/SKILL.md +15 -1
- package/config/skills/orchestrator/complete-task/execute.sh +45 -4
- package/config/skills/orchestrator/delegate-task/SKILL.md +1 -0
- package/config/skills/orchestrator/delegate-task/execute.sh +41 -2
- package/config/skills/orchestrator/get-tasks/execute.sh +22 -18
- package/config/skills/orchestrator/heartbeat/execute.sh +48 -6
- package/config/skills/orchestrator/list-schedules/SKILL.md +15 -1
- package/config/skills/orchestrator/update-team-member/SKILL.md +20 -0
- package/config/skills/team-leader/decompose-goal/execute.sh +51 -20
- package/config/skills/team-leader/delegate-task/execute.sh +67 -26
- package/config/skills/team-leader/delegate-task/execute.test.sh +117 -0
- package/config/skills/team-leader/verify-output/execute.sh +19 -20
- package/config/slack-app-manifest.json +2 -1
- package/config/sops/common/dev-process-tiers.md +181 -0
- package/config/sops/common/mid-flight-milestone-surface.md +128 -0
- package/config/sops/common/owner-facing-communication.md +175 -0
- package/config/sops/developer/git-workflow.md +33 -0
- package/config/souls/orchestrator.md +8 -0
- package/config/souls/team-leader.md +77 -0
- package/dist/backend/backend/src/constants.d.ts +12 -0
- package/dist/backend/backend/src/constants.d.ts.map +1 -1
- package/dist/backend/backend/src/constants.js +12 -0
- package/dist/backend/backend/src/constants.js.map +1 -1
- package/dist/backend/backend/src/controllers/active-work/active-work.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/active-work/active-work.controller.js +4 -1
- package/dist/backend/backend/src/controllers/active-work/active-work.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/agent-stream/agent-stream.controller.d.ts +8 -1
- package/dist/backend/backend/src/controllers/agent-stream/agent-stream.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/agent-stream/agent-stream.controller.js +30 -26
- package/dist/backend/backend/src/controllers/agent-stream/agent-stream.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/api.controller.d.ts +0 -9
- package/dist/backend/backend/src/controllers/api.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/api.controller.js +4 -32
- package/dist/backend/backend/src/controllers/api.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/browser/browser.controller.js +2 -2
- package/dist/backend/backend/src/controllers/browser/browser.controller.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 +11 -2
- package/dist/backend/backend/src/controllers/chat/chat.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/chat-v2/chat-v2.controller.d.ts +73 -0
- package/dist/backend/backend/src/controllers/chat-v2/chat-v2.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/chat-v2/chat-v2.controller.js +133 -2
- package/dist/backend/backend/src/controllers/chat-v2/chat-v2.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/chat-v2/chat-v2.routes.d.ts +3 -0
- package/dist/backend/backend/src/controllers/chat-v2/chat-v2.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/chat-v2/chat-v2.routes.js +8 -0
- package/dist/backend/backend/src/controllers/chat-v2/chat-v2.routes.js.map +1 -1
- package/dist/backend/backend/src/controllers/checklist/checklist.controller.d.ts +45 -0
- package/dist/backend/backend/src/controllers/checklist/checklist.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/checklist/checklist.controller.js +122 -0
- package/dist/backend/backend/src/controllers/checklist/checklist.controller.js.map +1 -0
- package/dist/backend/backend/src/controllers/memory/memory.controller.d.ts +24 -0
- package/dist/backend/backend/src/controllers/memory/memory.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/memory/memory.controller.js +69 -1
- package/dist/backend/backend/src/controllers/memory/memory.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/memory/memory.routes.d.ts +1 -0
- package/dist/backend/backend/src/controllers/memory/memory.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/memory/memory.routes.js +3 -1
- package/dist/backend/backend/src/controllers/memory/memory.routes.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 +80 -5
- package/dist/backend/backend/src/controllers/monitoring/terminal.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/onboarding/onboarding.routes.d.ts +1 -0
- package/dist/backend/backend/src/controllers/onboarding/onboarding.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/onboarding/onboarding.routes.js +30 -0
- package/dist/backend/backend/src/controllers/onboarding/onboarding.routes.js.map +1 -1
- package/dist/backend/backend/src/controllers/orchestrator-onboarding/orchestrator-onboarding.controller.d.ts +41 -0
- package/dist/backend/backend/src/controllers/orchestrator-onboarding/orchestrator-onboarding.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/orchestrator-onboarding/orchestrator-onboarding.controller.js +213 -0
- package/dist/backend/backend/src/controllers/orchestrator-onboarding/orchestrator-onboarding.controller.js.map +1 -0
- package/dist/backend/backend/src/controllers/orchestrator-onboarding/orchestrator-onboarding.routes.d.ts +21 -0
- package/dist/backend/backend/src/controllers/orchestrator-onboarding/orchestrator-onboarding.routes.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/orchestrator-onboarding/orchestrator-onboarding.routes.js +27 -0
- package/dist/backend/backend/src/controllers/orchestrator-onboarding/orchestrator-onboarding.routes.js.map +1 -0
- package/dist/backend/backend/src/controllers/session/session.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/session/session.controller.js +50 -8
- package/dist/backend/backend/src/controllers/session/session.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 +236 -18
- package/dist/backend/backend/src/controllers/slack/slack.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/task-management/in-progress-tasks.controller.d.ts +13 -3
- package/dist/backend/backend/src/controllers/task-management/in-progress-tasks.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/task-management/in-progress-tasks.controller.js +29 -24
- package/dist/backend/backend/src/controllers/task-management/in-progress-tasks.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/task-management/tasks.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/task-management/tasks.controller.js +61 -13
- package/dist/backend/backend/src/controllers/task-management/tasks.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.d.ts +159 -7
- 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 +421 -37
- package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/task-pool/task-pool.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/task-pool/task-pool.routes.js +15 -1
- package/dist/backend/backend/src/controllers/task-pool/task-pool.routes.js.map +1 -1
- package/dist/backend/backend/src/controllers/team/team.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/team/team.controller.js +221 -10
- package/dist/backend/backend/src/controllers/team/team.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/teams-backup/teams-backup.controller.d.ts +22 -0
- package/dist/backend/backend/src/controllers/teams-backup/teams-backup.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/teams-backup/teams-backup.controller.js +92 -0
- package/dist/backend/backend/src/controllers/teams-backup/teams-backup.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/teams-backup/teams-backup.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/teams-backup/teams-backup.routes.js +6 -2
- package/dist/backend/backend/src/controllers/teams-backup/teams-backup.routes.js.map +1 -1
- package/dist/backend/backend/src/controllers/types.d.ts +1 -2
- package/dist/backend/backend/src/controllers/types.d.ts.map +1 -1
- package/dist/backend/backend/src/index.d.ts +5 -1
- package/dist/backend/backend/src/index.d.ts.map +1 -1
- package/dist/backend/backend/src/index.js +476 -100
- package/dist/backend/backend/src/index.js.map +1 -1
- package/dist/backend/backend/src/models/Project.d.ts +2 -0
- package/dist/backend/backend/src/models/Project.d.ts.map +1 -1
- package/dist/backend/backend/src/models/Project.js +10 -1
- package/dist/backend/backend/src/models/Project.js.map +1 -1
- package/dist/backend/backend/src/routes/api.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/routes/api.routes.js +15 -2
- package/dist/backend/backend/src/routes/api.routes.js.map +1 -1
- package/dist/backend/backend/src/routes/modules/task-management.routes.d.ts +15 -0
- package/dist/backend/backend/src/routes/modules/task-management.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/routes/modules/task-management.routes.js +23 -43
- package/dist/backend/backend/src/routes/modules/task-management.routes.js.map +1 -1
- package/dist/backend/backend/src/scripts/cleanup-stale-pool.lib.d.ts +87 -0
- package/dist/backend/backend/src/scripts/cleanup-stale-pool.lib.d.ts.map +1 -0
- package/dist/backend/backend/src/scripts/cleanup-stale-pool.lib.js +116 -0
- package/dist/backend/backend/src/scripts/cleanup-stale-pool.lib.js.map +1 -0
- package/dist/backend/backend/src/services/agent/active-work-briefing.service.d.ts +46 -6
- package/dist/backend/backend/src/services/agent/active-work-briefing.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/active-work-briefing.service.js +56 -13
- package/dist/backend/backend/src/services/agent/active-work-briefing.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts +51 -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 +246 -9
- package/dist/backend/backend/src/services/agent/agent-registration.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/context-window-monitor.service.d.ts +31 -5
- package/dist/backend/backend/src/services/agent/context-window-monitor.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/context-window-monitor.service.js +69 -29
- package/dist/backend/backend/src/services/agent/context-window-monitor.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/agent-runner.service.d.ts +61 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/agent-runner.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/agent-runner.service.js +230 -84
- package/dist/backend/backend/src/services/agent/crewly-agent/agent-runner.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/auditor-tools.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/auditor-tools.js +5 -3
- package/dist/backend/backend/src/services/agent/crewly-agent/auditor-tools.js.map +1 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-runtime.service.d.ts +35 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-runtime.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-runtime.service.js +127 -3
- package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-runtime.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/deepseek-sse-transform.d.ts +79 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/deepseek-sse-transform.d.ts.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/deepseek-sse-transform.js +145 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/deepseek-sse-transform.js.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/model-manager.d.ts +64 -9
- package/dist/backend/backend/src/services/agent/crewly-agent/model-manager.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/model-manager.js +125 -15
- package/dist/backend/backend/src/services/agent/crewly-agent/model-manager.js.map +1 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/tool-registry.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/tool-registry.js +101 -33
- package/dist/backend/backend/src/services/agent/crewly-agent/tool-registry.js.map +1 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/types.d.ts +76 -1
- 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 +73 -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 +33 -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 +108 -4
- package/dist/backend/backend/src/services/agent/idle-detection.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.d.ts +5 -5
- package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.js +22 -8
- package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.js.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-builder.service.d.ts +10 -0
- package/dist/backend/backend/src/services/ai/prompt-builder.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-builder.service.js +160 -4
- package/dist/backend/backend/src/services/ai/prompt-builder.service.js.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/communication.module.d.ts +37 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/communication.module.d.ts.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/communication.module.js +77 -3
- package/dist/backend/backend/src/services/ai/prompt-modules/communication.module.js.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/decision-rights.module.d.ts +59 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/decision-rights.module.d.ts.map +1 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/decision-rights.module.js +87 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/decision-rights.module.js.map +1 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/default-execution-loop.module.d.ts +67 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/default-execution-loop.module.d.ts.map +1 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/default-execution-loop.module.js +84 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/default-execution-loop.module.js.map +1 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/index.d.ts +4 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/index.d.ts.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/index.js +4 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/index.js.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/lazy-anti-patterns.module.d.ts +65 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/lazy-anti-patterns.module.d.ts.map +1 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/lazy-anti-patterns.module.js +79 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/lazy-anti-patterns.module.js.map +1 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/mission-context.module.d.ts +60 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/mission-context.module.d.ts.map +1 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/mission-context.module.js +104 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/mission-context.module.js.map +1 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/prompt-assembly.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/prompt-assembly.service.js +45 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/prompt-assembly.service.js.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/prompt-module.interface.d.ts +16 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/prompt-module.interface.d.ts.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/prompt-module.interface.js.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/request-contract.module.d.ts +106 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/request-contract.module.d.ts.map +1 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/request-contract.module.js +167 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/request-contract.module.js.map +1 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/role-boundary.module.d.ts.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/role-boundary.module.js +28 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/role-boundary.module.js.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/soul.module.d.ts +38 -6
- package/dist/backend/backend/src/services/ai/prompt-modules/soul.module.d.ts.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/soul.module.js +73 -10
- package/dist/backend/backend/src/services/ai/prompt-modules/soul.module.js.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/working-memory.module.d.ts +91 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/working-memory.module.d.ts.map +1 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/working-memory.module.js +136 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/working-memory.module.js.map +1 -0
- package/dist/backend/backend/src/services/autonomous/index.d.ts +7 -3
- package/dist/backend/backend/src/services/autonomous/index.d.ts.map +1 -1
- package/dist/backend/backend/src/services/autonomous/index.js +7 -3
- package/dist/backend/backend/src/services/autonomous/index.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 +16 -22
- 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 +1 -1
- 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 +40 -2
- package/dist/backend/backend/src/services/browser/browser-proxy.service.js.map +1 -1
- package/dist/backend/backend/src/services/chat/chat.service.d.ts +48 -331
- package/dist/backend/backend/src/services/chat/chat.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/chat/chat.service.js +261 -712
- package/dist/backend/backend/src/services/chat/chat.service.js.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts +82 -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 +120 -2
- 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.providers.d.ts +114 -0
- package/dist/backend/backend/src/services/chat-v2/chat-v2.providers.d.ts.map +1 -0
- package/dist/backend/backend/src/services/chat-v2/chat-v2.providers.js +182 -0
- package/dist/backend/backend/src/services/chat-v2/chat-v2.providers.js.map +1 -0
- package/dist/backend/backend/src/services/chat-v2/chat-v2.relay-adapter.service.d.ts +188 -0
- package/dist/backend/backend/src/services/chat-v2/chat-v2.relay-adapter.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/chat-v2/chat-v2.relay-adapter.service.js +434 -0
- package/dist/backend/backend/src/services/chat-v2/chat-v2.relay-adapter.service.js.map +1 -0
- package/dist/backend/backend/src/services/chat-v2/chat-v2.service.d.ts +414 -5
- 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 +634 -3
- package/dist/backend/backend/src/services/chat-v2/chat-v2.service.js.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/legacy-dto.utils.d.ts +93 -0
- package/dist/backend/backend/src/services/chat-v2/legacy-dto.utils.d.ts.map +1 -0
- package/dist/backend/backend/src/services/chat-v2/legacy-dto.utils.js +138 -0
- package/dist/backend/backend/src/services/chat-v2/legacy-dto.utils.js.map +1 -0
- package/dist/backend/backend/src/services/chat-v2/sqlite/channel.store.d.ts +46 -0
- package/dist/backend/backend/src/services/chat-v2/sqlite/channel.store.d.ts.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/sqlite/channel.store.js +75 -0
- package/dist/backend/backend/src/services/chat-v2/sqlite/channel.store.js.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/sqlite/chat-db.d.ts +21 -2
- package/dist/backend/backend/src/services/chat-v2/sqlite/chat-db.d.ts.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/sqlite/chat-db.js +229 -29
- package/dist/backend/backend/src/services/chat-v2/sqlite/chat-db.js.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.d.ts +55 -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 +94 -0
- package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.js.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/types.d.ts +33 -1
- package/dist/backend/backend/src/services/chat-v2/types.d.ts.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/types.js +1 -1
- package/dist/backend/backend/src/services/chat-v2/types.js.map +1 -1
- package/dist/backend/backend/src/services/cloud/cloud-sync.service.d.ts +22 -0
- package/dist/backend/backend/src/services/cloud/cloud-sync.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/cloud/cloud-sync.service.js +71 -1
- package/dist/backend/backend/src/services/cloud/cloud-sync.service.js.map +1 -1
- package/dist/backend/backend/src/services/cloud/cloud-sync.types.d.ts +102 -1
- package/dist/backend/backend/src/services/cloud/cloud-sync.types.d.ts.map +1 -1
- package/dist/backend/backend/src/services/cloud/cloud-sync.types.js +61 -0
- package/dist/backend/backend/src/services/cloud/cloud-sync.types.js.map +1 -1
- package/dist/backend/backend/src/services/cloud/device-auto-discovery.service.d.ts +21 -3
- package/dist/backend/backend/src/services/cloud/device-auto-discovery.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/cloud/device-auto-discovery.service.js +47 -13
- package/dist/backend/backend/src/services/cloud/device-auto-discovery.service.js.map +1 -1
- package/dist/backend/backend/src/services/core/config.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/core/config.service.js +8 -1
- package/dist/backend/backend/src/services/core/config.service.js.map +1 -1
- package/dist/backend/backend/src/services/core/crewly-home.utils.d.ts +51 -0
- package/dist/backend/backend/src/services/core/crewly-home.utils.d.ts.map +1 -0
- package/dist/backend/backend/src/services/core/crewly-home.utils.js +59 -0
- package/dist/backend/backend/src/services/core/crewly-home.utils.js.map +1 -0
- package/dist/backend/backend/src/services/core/state-invariant.types.d.ts +53 -0
- package/dist/backend/backend/src/services/core/state-invariant.types.d.ts.map +1 -0
- package/dist/backend/backend/src/services/core/state-invariant.types.js +61 -0
- package/dist/backend/backend/src/services/core/state-invariant.types.js.map +1 -0
- package/dist/backend/backend/src/services/core/storage.service.d.ts +20 -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 +96 -8
- package/dist/backend/backend/src/services/core/storage.service.js.map +1 -1
- package/dist/backend/backend/src/services/core/system-health.util.d.ts +25 -4
- package/dist/backend/backend/src/services/core/system-health.util.d.ts.map +1 -1
- package/dist/backend/backend/src/services/core/system-health.util.js +30 -5
- package/dist/backend/backend/src/services/core/system-health.util.js.map +1 -1
- package/dist/backend/backend/src/services/core/teams-backup.service.d.ts +94 -4
- package/dist/backend/backend/src/services/core/teams-backup.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/core/teams-backup.service.js +172 -10
- package/dist/backend/backend/src/services/core/teams-backup.service.js.map +1 -1
- package/dist/backend/backend/src/services/event-bus/event-bus.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/event-bus/event-bus.service.js +22 -11
- package/dist/backend/backend/src/services/event-bus/event-bus.service.js.map +1 -1
- package/dist/backend/backend/src/services/index.d.ts +0 -2
- package/dist/backend/backend/src/services/index.d.ts.map +1 -1
- package/dist/backend/backend/src/services/index.js +0 -2
- package/dist/backend/backend/src/services/index.js.map +1 -1
- package/dist/backend/backend/src/services/intent-task/intent-classifier.fixture.d.ts +78 -0
- package/dist/backend/backend/src/services/intent-task/intent-classifier.fixture.d.ts.map +1 -0
- package/dist/backend/backend/src/services/intent-task/intent-classifier.fixture.js +209 -0
- package/dist/backend/backend/src/services/intent-task/intent-classifier.fixture.js.map +1 -0
- package/dist/backend/backend/src/services/intent-task/intent-classifier.rules.d.ts +331 -0
- package/dist/backend/backend/src/services/intent-task/intent-classifier.rules.d.ts.map +1 -0
- package/dist/backend/backend/src/services/intent-task/intent-classifier.rules.js +413 -0
- package/dist/backend/backend/src/services/intent-task/intent-classifier.rules.js.map +1 -0
- package/dist/backend/backend/src/services/intent-task/intent-task.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/intent-task/intent-task.service.js +13 -4
- package/dist/backend/backend/src/services/intent-task/intent-task.service.js.map +1 -1
- package/dist/backend/backend/src/services/knowledge/fts5-index.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/knowledge/fts5-index.service.js +18 -13
- package/dist/backend/backend/src/services/knowledge/fts5-index.service.js.map +1 -1
- package/dist/backend/backend/src/services/knowledge/fts5-query-sanitizer.d.ts +102 -0
- package/dist/backend/backend/src/services/knowledge/fts5-query-sanitizer.d.ts.map +1 -0
- package/dist/backend/backend/src/services/knowledge/fts5-query-sanitizer.js +118 -0
- package/dist/backend/backend/src/services/knowledge/fts5-query-sanitizer.js.map +1 -0
- package/dist/backend/backend/src/services/knowledge/vector-store.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/knowledge/vector-store.service.js +11 -15
- package/dist/backend/backend/src/services/knowledge/vector-store.service.js.map +1 -1
- package/dist/backend/backend/src/services/memory/agent-memory.service.d.ts +20 -0
- package/dist/backend/backend/src/services/memory/agent-memory.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/memory/agent-memory.service.js +27 -2
- package/dist/backend/backend/src/services/memory/agent-memory.service.js.map +1 -1
- package/dist/backend/backend/src/services/memory/memory-supersession.service.d.ts +104 -0
- package/dist/backend/backend/src/services/memory/memory-supersession.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/memory/memory-supersession.service.js +127 -0
- package/dist/backend/backend/src/services/memory/memory-supersession.service.js.map +1 -0
- package/dist/backend/backend/src/services/memory/memory.service.d.ts +48 -17
- package/dist/backend/backend/src/services/memory/memory.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/memory/memory.service.js +97 -35
- package/dist/backend/backend/src/services/memory/memory.service.js.map +1 -1
- package/dist/backend/backend/src/services/memory/mission-context.service.d.ts +168 -0
- package/dist/backend/backend/src/services/memory/mission-context.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/memory/mission-context.service.js +365 -0
- package/dist/backend/backend/src/services/memory/mission-context.service.js.map +1 -0
- package/dist/backend/backend/src/services/memory/role-knowledge-eligibility.d.ts +138 -0
- package/dist/backend/backend/src/services/memory/role-knowledge-eligibility.d.ts.map +1 -0
- package/dist/backend/backend/src/services/memory/role-knowledge-eligibility.js +183 -0
- package/dist/backend/backend/src/services/memory/role-knowledge-eligibility.js.map +1 -0
- package/dist/backend/backend/src/services/memory/vector-store.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/memory/vector-store.service.js +7 -11
- package/dist/backend/backend/src/services/memory/vector-store.service.js.map +1 -1
- package/dist/backend/backend/src/services/memory/working-memory.service.d.ts +232 -0
- package/dist/backend/backend/src/services/memory/working-memory.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/memory/working-memory.service.js +417 -0
- package/dist/backend/backend/src/services/memory/working-memory.service.js.map +1 -0
- package/dist/backend/backend/src/services/messaging/message-replay.service.d.ts +2 -4
- package/dist/backend/backend/src/services/messaging/message-replay.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/messaging/message-replay.service.js +22 -12
- package/dist/backend/backend/src/services/messaging/message-replay.service.js.map +1 -1
- package/dist/backend/backend/src/services/messaging/queue-processor.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/messaging/queue-processor.service.js +48 -7
- package/dist/backend/backend/src/services/messaging/queue-processor.service.js.map +1 -1
- package/dist/backend/backend/src/services/monitoring/activity-monitor.service.js +2 -2
- package/dist/backend/backend/src/services/monitoring/activity-monitor.service.js.map +1 -1
- package/dist/backend/backend/src/services/monitoring/system-resource-alert.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/monitoring/system-resource-alert.service.js +13 -3
- package/dist/backend/backend/src/services/monitoring/system-resource-alert.service.js.map +1 -1
- package/dist/backend/backend/src/services/monitoring/team-activity-websocket.service.d.ts +27 -7
- package/dist/backend/backend/src/services/monitoring/team-activity-websocket.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/monitoring/team-activity-websocket.service.js +66 -27
- package/dist/backend/backend/src/services/monitoring/team-activity-websocket.service.js.map +1 -1
- package/dist/backend/backend/src/services/monitoring/teams-json-watcher.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/monitoring/teams-json-watcher.service.js +2 -2
- package/dist/backend/backend/src/services/monitoring/teams-json-watcher.service.js.map +1 -1
- package/dist/backend/backend/src/services/notification/milestone-notification.subscriber.d.ts +99 -0
- package/dist/backend/backend/src/services/notification/milestone-notification.subscriber.d.ts.map +1 -0
- package/dist/backend/backend/src/services/notification/milestone-notification.subscriber.js +225 -0
- package/dist/backend/backend/src/services/notification/milestone-notification.subscriber.js.map +1 -0
- package/dist/backend/backend/src/services/observability/agent-behavior-log.service.d.ts +132 -0
- package/dist/backend/backend/src/services/observability/agent-behavior-log.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/observability/agent-behavior-log.service.js +284 -0
- package/dist/backend/backend/src/services/observability/agent-behavior-log.service.js.map +1 -0
- package/dist/backend/backend/src/services/observability/agent-behavior-log.singleton.d.ts +70 -0
- package/dist/backend/backend/src/services/observability/agent-behavior-log.singleton.d.ts.map +1 -0
- package/dist/backend/backend/src/services/observability/agent-behavior-log.singleton.js +121 -0
- package/dist/backend/backend/src/services/observability/agent-behavior-log.singleton.js.map +1 -0
- package/dist/backend/backend/src/services/observability/agent-behavior-log.types.d.ts +130 -0
- package/dist/backend/backend/src/services/observability/agent-behavior-log.types.d.ts.map +1 -0
- package/dist/backend/backend/src/services/observability/agent-behavior-log.types.js +48 -0
- package/dist/backend/backend/src/services/observability/agent-behavior-log.types.js.map +1 -0
- package/dist/backend/backend/src/services/observability/observability-db.d.ts +84 -0
- package/dist/backend/backend/src/services/observability/observability-db.d.ts.map +1 -0
- package/dist/backend/backend/src/services/observability/observability-db.js +165 -0
- package/dist/backend/backend/src/services/observability/observability-db.js.map +1 -0
- package/dist/backend/backend/src/services/onboarding/onboarding.service.d.ts +22 -0
- package/dist/backend/backend/src/services/onboarding/onboarding.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/onboarding/onboarding.service.js +36 -0
- package/dist/backend/backend/src/services/onboarding/onboarding.service.js.map +1 -1
- package/dist/backend/backend/src/services/onboarding/onboarding.types.d.ts +21 -2
- package/dist/backend/backend/src/services/onboarding/onboarding.types.d.ts.map +1 -1
- package/dist/backend/backend/src/services/orchestrator/improvement-marker.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/orchestrator/improvement-marker.service.js +12 -3
- package/dist/backend/backend/src/services/orchestrator/improvement-marker.service.js.map +1 -1
- package/dist/backend/backend/src/services/orchestrator/onboarding/materialize-team.d.ts +108 -0
- package/dist/backend/backend/src/services/orchestrator/onboarding/materialize-team.d.ts.map +1 -0
- package/dist/backend/backend/src/services/orchestrator/onboarding/materialize-team.js +165 -0
- package/dist/backend/backend/src/services/orchestrator/onboarding/materialize-team.js.map +1 -0
- package/dist/backend/backend/src/services/orchestrator/onboarding/recommend-team.d.ts +114 -0
- package/dist/backend/backend/src/services/orchestrator/onboarding/recommend-team.d.ts.map +1 -0
- package/dist/backend/backend/src/services/orchestrator/onboarding/recommend-team.js +299 -0
- package/dist/backend/backend/src/services/orchestrator/onboarding/recommend-team.js.map +1 -0
- package/dist/backend/backend/src/services/orchestrator/onboarding-bootstrap.service.d.ts +128 -0
- package/dist/backend/backend/src/services/orchestrator/onboarding-bootstrap.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/orchestrator/onboarding-bootstrap.service.js +195 -0
- package/dist/backend/backend/src/services/orchestrator/onboarding-bootstrap.service.js.map +1 -0
- package/dist/backend/backend/src/services/orchestrator/onboarding-mode-loader.d.ts +66 -0
- package/dist/backend/backend/src/services/orchestrator/onboarding-mode-loader.d.ts.map +1 -0
- package/dist/backend/backend/src/services/orchestrator/onboarding-mode-loader.js +145 -0
- package/dist/backend/backend/src/services/orchestrator/onboarding-mode-loader.js.map +1 -0
- package/dist/backend/backend/src/services/orchestrator/onboarding-mode.skill-allowlist.d.ts +59 -0
- package/dist/backend/backend/src/services/orchestrator/onboarding-mode.skill-allowlist.d.ts.map +1 -0
- package/dist/backend/backend/src/services/orchestrator/onboarding-mode.skill-allowlist.js +68 -0
- package/dist/backend/backend/src/services/orchestrator/onboarding-mode.skill-allowlist.js.map +1 -0
- package/dist/backend/backend/src/services/orchestrator/prompts/onboarding-mode.prompt.d.ts +67 -0
- package/dist/backend/backend/src/services/orchestrator/prompts/onboarding-mode.prompt.d.ts.map +1 -0
- package/dist/backend/backend/src/services/orchestrator/prompts/onboarding-mode.prompt.js +290 -0
- package/dist/backend/backend/src/services/orchestrator/prompts/onboarding-mode.prompt.js.map +1 -0
- package/dist/backend/backend/src/services/orchestrator/state-persistence.service.d.ts +23 -1
- package/dist/backend/backend/src/services/orchestrator/state-persistence.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/orchestrator/state-persistence.service.js +64 -1
- package/dist/backend/backend/src/services/orchestrator/state-persistence.service.js.map +1 -1
- package/dist/backend/backend/src/services/project/active-projects.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/project/active-projects.service.js +2 -2
- package/dist/backend/backend/src/services/project/active-projects.service.js.map +1 -1
- package/dist/backend/backend/src/services/project/task-tracking.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/project/task-tracking.service.js +2 -2
- package/dist/backend/backend/src/services/project/task-tracking.service.js.map +1 -1
- package/dist/backend/backend/src/services/prompt/prompt-generator.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/prompt/prompt-generator.service.js +2 -2
- package/dist/backend/backend/src/services/prompt/prompt-generator.service.js.map +1 -1
- package/dist/backend/backend/src/services/reconciler/reconcile-rules.d.ts +73 -6
- package/dist/backend/backend/src/services/reconciler/reconcile-rules.d.ts.map +1 -1
- package/dist/backend/backend/src/services/reconciler/reconcile-rules.js +200 -25
- 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 +149 -2
- 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 +569 -24
- 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.map +1 -1
- package/dist/backend/backend/src/services/reconciler/reconciler.service.js +73 -7
- package/dist/backend/backend/src/services/reconciler/reconciler.service.js.map +1 -1
- package/dist/backend/backend/src/services/session/session-handoff.service.d.ts +31 -18
- package/dist/backend/backend/src/services/session/session-handoff.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/session/session-handoff.service.js +103 -84
- package/dist/backend/backend/src/services/session/session-handoff.service.js.map +1 -1
- package/dist/backend/backend/src/services/session/session-state-persistence.d.ts.map +1 -1
- package/dist/backend/backend/src/services/session/session-state-persistence.js +15 -4
- package/dist/backend/backend/src/services/session/session-state-persistence.js.map +1 -1
- package/dist/backend/backend/src/services/settings/settings.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/settings/settings.service.js +25 -0
- package/dist/backend/backend/src/services/settings/settings.service.js.map +1 -1
- package/dist/backend/backend/src/services/skill/skill-catalog.service.d.ts +14 -3
- package/dist/backend/backend/src/services/skill/skill-catalog.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/skill/skill-catalog.service.js +28 -3
- package/dist/backend/backend/src/services/skill/skill-catalog.service.js.map +1 -1
- package/dist/backend/backend/src/services/skill/skill-executor.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/skill/skill-executor.service.js +13 -1
- package/dist/backend/backend/src/services/skill/skill-executor.service.js.map +1 -1
- package/dist/backend/backend/src/services/slack/cross-machine-message.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/slack/cross-machine-message.service.js +13 -18
- package/dist/backend/backend/src/services/slack/cross-machine-message.service.js.map +1 -1
- package/dist/backend/backend/src/services/slack/notify-reconciliation.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/slack/notify-reconciliation.service.js +9 -6
- package/dist/backend/backend/src/services/slack/notify-reconciliation.service.js.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.d.ts +66 -2
- 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 +318 -61
- package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.js.map +1 -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 +70 -0
- package/dist/backend/backend/src/services/slack/slack.service.js.map +1 -1
- package/dist/backend/backend/src/services/task-pool/pool-storage.d.ts +15 -1
- package/dist/backend/backend/src/services/task-pool/pool-storage.d.ts.map +1 -1
- package/dist/backend/backend/src/services/task-pool/pool-storage.js +31 -8
- package/dist/backend/backend/src/services/task-pool/pool-storage.js.map +1 -1
- package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts +216 -2
- 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 +562 -14
- package/dist/backend/backend/src/services/task-pool/task-pool.service.js.map +1 -1
- package/dist/backend/backend/src/services/v3/agent-auto-claim.service.d.ts +14 -1
- package/dist/backend/backend/src/services/v3/agent-auto-claim.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/agent-auto-claim.service.js +128 -17
- package/dist/backend/backend/src/services/v3/agent-auto-claim.service.js.map +1 -1
- package/dist/backend/backend/src/services/v3/cascade-request-status.d.ts +95 -0
- package/dist/backend/backend/src/services/v3/cascade-request-status.d.ts.map +1 -0
- package/dist/backend/backend/src/services/v3/cascade-request-status.js +200 -0
- package/dist/backend/backend/src/services/v3/cascade-request-status.js.map +1 -0
- package/dist/backend/backend/src/services/v3/escalation-router.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/escalation-router.service.js +42 -0
- package/dist/backend/backend/src/services/v3/escalation-router.service.js.map +1 -1
- package/dist/backend/backend/src/services/v3/mission-executor.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/mission-executor.service.js +25 -5
- package/dist/backend/backend/src/services/v3/mission-executor.service.js.map +1 -1
- package/dist/backend/backend/src/services/v3/request-cascade.subscriber.d.ts +87 -0
- package/dist/backend/backend/src/services/v3/request-cascade.subscriber.d.ts.map +1 -0
- package/dist/backend/backend/src/services/v3/request-cascade.subscriber.js +152 -0
- package/dist/backend/backend/src/services/v3/request-cascade.subscriber.js.map +1 -0
- package/dist/backend/backend/src/services/v3/request-decompose.subscriber.d.ts +253 -0
- package/dist/backend/backend/src/services/v3/request-decompose.subscriber.d.ts.map +1 -0
- package/dist/backend/backend/src/services/v3/request-decompose.subscriber.js +501 -0
- package/dist/backend/backend/src/services/v3/request-decompose.subscriber.js.map +1 -0
- package/dist/backend/backend/src/services/v3/request-sla.subscriber.d.ts +55 -0
- 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 +262 -22
- package/dist/backend/backend/src/services/v3/request-sla.subscriber.js.map +1 -1
- package/dist/backend/backend/src/services/v3/request-status-update.subscriber.d.ts +204 -0
- package/dist/backend/backend/src/services/v3/request-status-update.subscriber.d.ts.map +1 -0
- package/dist/backend/backend/src/services/v3/request-status-update.subscriber.js +617 -0
- package/dist/backend/backend/src/services/v3/request-status-update.subscriber.js.map +1 -0
- package/dist/backend/backend/src/services/v3/request.service.d.ts +107 -0
- package/dist/backend/backend/src/services/v3/request.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/request.service.js +155 -2
- package/dist/backend/backend/src/services/v3/request.service.js.map +1 -1
- package/dist/backend/backend/src/services/v3/trigger-engine.service.d.ts +108 -1
- package/dist/backend/backend/src/services/v3/trigger-engine.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/trigger-engine.service.js +238 -4
- package/dist/backend/backend/src/services/v3/trigger-engine.service.js.map +1 -1
- package/dist/backend/backend/src/services/v3/v3-data.service.d.ts +50 -26
- package/dist/backend/backend/src/services/v3/v3-data.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/v3-data.service.js +126 -161
- package/dist/backend/backend/src/services/v3/v3-data.service.js.map +1 -1
- package/dist/backend/backend/src/services/v3/work-item-projection.d.ts +40 -0
- package/dist/backend/backend/src/services/v3/work-item-projection.d.ts.map +1 -0
- package/dist/backend/backend/src/services/v3/work-item-projection.js +115 -0
- package/dist/backend/backend/src/services/v3/work-item-projection.js.map +1 -0
- package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.d.ts +137 -0
- package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.d.ts.map +1 -0
- package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.js +287 -0
- package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.js.map +1 -0
- package/dist/backend/backend/src/services/whatsapp/whatsapp-orchestrator-bridge.d.ts +1 -1
- package/dist/backend/backend/src/services/whatsapp/whatsapp-orchestrator-bridge.d.ts.map +1 -1
- package/dist/backend/backend/src/services/whatsapp/whatsapp-orchestrator-bridge.js +26 -10
- package/dist/backend/backend/src/services/whatsapp/whatsapp-orchestrator-bridge.js.map +1 -1
- package/dist/backend/backend/src/services/whatsapp/whatsapp.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/whatsapp/whatsapp.service.js +11 -2
- package/dist/backend/backend/src/services/whatsapp/whatsapp.service.js.map +1 -1
- package/dist/backend/backend/src/services/workflow/cron-task.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/workflow/cron-task.service.js +68 -5
- package/dist/backend/backend/src/services/workflow/cron-task.service.js.map +1 -1
- package/dist/backend/backend/src/services/workflow/scheduler.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/workflow/scheduler.service.js +68 -14
- package/dist/backend/backend/src/services/workflow/scheduler.service.js.map +1 -1
- package/dist/backend/backend/src/services/workflow/team-identifier-resolver.d.ts +44 -0
- package/dist/backend/backend/src/services/workflow/team-identifier-resolver.d.ts.map +1 -0
- package/dist/backend/backend/src/services/workflow/team-identifier-resolver.js +57 -0
- package/dist/backend/backend/src/services/workflow/team-identifier-resolver.js.map +1 -0
- package/dist/backend/backend/src/types/credential.types.d.ts +17 -1
- package/dist/backend/backend/src/types/credential.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/credential.types.js +15 -5
- package/dist/backend/backend/src/types/credential.types.js.map +1 -1
- package/dist/backend/backend/src/types/cron-task.types.d.ts +17 -0
- package/dist/backend/backend/src/types/cron-task.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/event-bus.types.d.ts +1 -1
- package/dist/backend/backend/src/types/event-bus.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/event-bus.types.js +24 -0
- package/dist/backend/backend/src/types/event-bus.types.js.map +1 -1
- package/dist/backend/backend/src/types/index.d.ts +11 -1
- package/dist/backend/backend/src/types/index.d.ts.map +1 -1
- package/dist/backend/backend/src/types/index.js +0 -2
- package/dist/backend/backend/src/types/index.js.map +1 -1
- package/dist/backend/backend/src/types/intent-task.types.d.ts +27 -11
- package/dist/backend/backend/src/types/intent-task.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/intent-task.types.js +204 -40
- package/dist/backend/backend/src/types/intent-task.types.js.map +1 -1
- package/dist/backend/backend/src/types/memory.types.d.ts +53 -0
- package/dist/backend/backend/src/types/memory.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/memory.types.js.map +1 -1
- package/dist/backend/backend/src/types/orchestrator-state.types.d.ts +49 -0
- package/dist/backend/backend/src/types/orchestrator-state.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/orchestrator-state.types.js +27 -0
- package/dist/backend/backend/src/types/orchestrator-state.types.js.map +1 -1
- package/dist/backend/backend/src/types/settings.types.d.ts +38 -2
- package/dist/backend/backend/src/types/settings.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/settings.types.js +16 -2
- package/dist/backend/backend/src/types/settings.types.js.map +1 -1
- package/dist/backend/backend/src/types/v2/request.types.d.ts +5 -1
- package/dist/backend/backend/src/types/v2/request.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/v2/request.types.js +2 -2
- package/dist/backend/backend/src/types/v2/request.types.js.map +1 -1
- package/dist/backend/backend/src/types/v2/work-item.types.d.ts +63 -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 +20 -0
- package/dist/backend/backend/src/types/v2/work-item.types.js.map +1 -1
- package/dist/backend/backend/src/utils/esm-require.utils.d.ts +111 -0
- package/dist/backend/backend/src/utils/esm-require.utils.d.ts.map +1 -0
- package/dist/backend/backend/src/utils/esm-require.utils.js +124 -0
- package/dist/backend/backend/src/utils/esm-require.utils.js.map +1 -0
- package/dist/backend/backend/src/utils/integrity-guarded-write.utils.d.ts +119 -0
- package/dist/backend/backend/src/utils/integrity-guarded-write.utils.d.ts.map +1 -0
- package/dist/backend/backend/src/utils/integrity-guarded-write.utils.js +212 -0
- package/dist/backend/backend/src/utils/integrity-guarded-write.utils.js.map +1 -0
- package/dist/backend/backend/src/utils/native-binding.utils.d.ts +128 -0
- package/dist/backend/backend/src/utils/native-binding.utils.d.ts.map +1 -0
- package/dist/backend/backend/src/utils/native-binding.utils.js +206 -0
- package/dist/backend/backend/src/utils/native-binding.utils.js.map +1 -0
- package/dist/backend/backend/src/utils/node-require.utils.d.ts +104 -0
- package/dist/backend/backend/src/utils/node-require.utils.d.ts.map +1 -0
- package/dist/backend/backend/src/utils/node-require.utils.js +111 -0
- package/dist/backend/backend/src/utils/node-require.utils.js.map +1 -0
- package/dist/backend/backend/src/utils/team.utils.d.ts +3 -1
- package/dist/backend/backend/src/utils/team.utils.d.ts.map +1 -1
- package/dist/backend/backend/src/utils/team.utils.js +26 -5
- package/dist/backend/backend/src/utils/team.utils.js.map +1 -1
- package/dist/backend/backend/src/websocket/chat-v2.gateway.d.ts +23 -0
- package/dist/backend/backend/src/websocket/chat-v2.gateway.d.ts.map +1 -1
- package/dist/backend/backend/src/websocket/chat-v2.gateway.js +56 -7
- package/dist/backend/backend/src/websocket/chat-v2.gateway.js.map +1 -1
- package/dist/backend/backend/src/websocket/chat.gateway.d.ts +19 -4
- package/dist/backend/backend/src/websocket/chat.gateway.d.ts.map +1 -1
- package/dist/backend/backend/src/websocket/chat.gateway.js +78 -63
- package/dist/backend/backend/src/websocket/chat.gateway.js.map +1 -1
- package/dist/backend/backend/src/websocket/terminal.gateway.d.ts.map +1 -1
- package/dist/backend/backend/src/websocket/terminal.gateway.js +10 -2
- package/dist/backend/backend/src/websocket/terminal.gateway.js.map +1 -1
- package/dist/cli/backend/src/constants.d.ts +12 -0
- package/dist/cli/backend/src/constants.d.ts.map +1 -1
- package/dist/cli/backend/src/constants.js +12 -0
- package/dist/cli/backend/src/constants.js.map +1 -1
- package/dist/cli/backend/src/models/Project.d.ts +2 -0
- package/dist/cli/backend/src/models/Project.d.ts.map +1 -1
- package/dist/cli/backend/src/models/Project.js +10 -1
- package/dist/cli/backend/src/models/Project.js.map +1 -1
- package/dist/cli/backend/src/services/ai/prompt-modules/prompt-module.interface.d.ts +16 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/prompt-module.interface.d.ts.map +1 -1
- package/dist/cli/backend/src/services/ai/prompt-modules/prompt-module.interface.js.map +1 -1
- package/dist/cli/backend/src/services/core/config.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/core/config.service.js +8 -1
- package/dist/cli/backend/src/services/core/config.service.js.map +1 -1
- package/dist/cli/backend/src/services/core/crewly-home.utils.d.ts +51 -0
- package/dist/cli/backend/src/services/core/crewly-home.utils.d.ts.map +1 -0
- package/dist/cli/backend/src/services/core/crewly-home.utils.js +59 -0
- package/dist/cli/backend/src/services/core/crewly-home.utils.js.map +1 -0
- package/dist/cli/backend/src/services/core/state-invariant.types.d.ts +53 -0
- package/dist/cli/backend/src/services/core/state-invariant.types.d.ts.map +1 -0
- package/dist/cli/backend/src/services/core/state-invariant.types.js +61 -0
- package/dist/cli/backend/src/services/core/state-invariant.types.js.map +1 -0
- package/dist/cli/backend/src/services/core/storage.service.d.ts +20 -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 +96 -8
- package/dist/cli/backend/src/services/core/storage.service.js.map +1 -1
- package/dist/cli/backend/src/services/core/teams-backup.service.d.ts +94 -4
- package/dist/cli/backend/src/services/core/teams-backup.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/core/teams-backup.service.js +172 -10
- package/dist/cli/backend/src/services/core/teams-backup.service.js.map +1 -1
- package/dist/cli/backend/src/services/event-bus/event-bus.service.d.ts +245 -0
- package/dist/cli/backend/src/services/event-bus/event-bus.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/event-bus/event-bus.service.js +650 -0
- package/dist/cli/backend/src/services/event-bus/event-bus.service.js.map +1 -0
- package/dist/cli/backend/src/services/knowledge/fts5-index.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/knowledge/fts5-index.service.js +18 -13
- package/dist/cli/backend/src/services/knowledge/fts5-index.service.js.map +1 -1
- package/dist/cli/backend/src/services/knowledge/fts5-query-sanitizer.d.ts +102 -0
- package/dist/cli/backend/src/services/knowledge/fts5-query-sanitizer.d.ts.map +1 -0
- package/dist/cli/backend/src/services/knowledge/fts5-query-sanitizer.js +118 -0
- package/dist/cli/backend/src/services/knowledge/fts5-query-sanitizer.js.map +1 -0
- package/dist/cli/backend/src/services/knowledge/vector-store.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/knowledge/vector-store.service.js +11 -15
- package/dist/cli/backend/src/services/knowledge/vector-store.service.js.map +1 -1
- package/dist/cli/backend/src/services/memory/agent-memory.service.d.ts +20 -0
- package/dist/cli/backend/src/services/memory/agent-memory.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/memory/agent-memory.service.js +27 -2
- package/dist/cli/backend/src/services/memory/agent-memory.service.js.map +1 -1
- package/dist/cli/backend/src/services/memory/memory.service.d.ts +48 -17
- package/dist/cli/backend/src/services/memory/memory.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/memory/memory.service.js +97 -35
- package/dist/cli/backend/src/services/memory/memory.service.js.map +1 -1
- package/dist/cli/backend/src/services/memory/role-knowledge-eligibility.d.ts +138 -0
- package/dist/cli/backend/src/services/memory/role-knowledge-eligibility.d.ts.map +1 -0
- package/dist/cli/backend/src/services/memory/role-knowledge-eligibility.js +183 -0
- package/dist/cli/backend/src/services/memory/role-knowledge-eligibility.js.map +1 -0
- package/dist/cli/backend/src/services/messaging/message-queue.service.d.ts +236 -0
- package/dist/cli/backend/src/services/messaging/message-queue.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/messaging/message-queue.service.js +581 -0
- package/dist/cli/backend/src/services/messaging/message-queue.service.js.map +1 -0
- package/dist/cli/backend/src/services/project/task-tracking.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/project/task-tracking.service.js +2 -2
- package/dist/cli/backend/src/services/project/task-tracking.service.js.map +1 -1
- package/dist/cli/backend/src/services/settings/settings.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/settings/settings.service.js +25 -0
- package/dist/cli/backend/src/services/settings/settings.service.js.map +1 -1
- package/dist/cli/backend/src/services/skill/skill-executor.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/skill/skill-executor.service.js +13 -1
- package/dist/cli/backend/src/services/skill/skill-executor.service.js.map +1 -1
- package/dist/cli/backend/src/services/slack/slack-thread-store.service.d.ts +147 -0
- package/dist/cli/backend/src/services/slack/slack-thread-store.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/slack/slack-thread-store.service.js +258 -0
- package/dist/cli/backend/src/services/slack/slack-thread-store.service.js.map +1 -0
- package/dist/cli/backend/src/services/task-pool/pool-storage.d.ts +15 -1
- package/dist/cli/backend/src/services/task-pool/pool-storage.d.ts.map +1 -1
- package/dist/cli/backend/src/services/task-pool/pool-storage.js +31 -8
- package/dist/cli/backend/src/services/task-pool/pool-storage.js.map +1 -1
- package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts +490 -9
- 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 +1197 -121
- package/dist/cli/backend/src/services/task-pool/task-pool.service.js.map +1 -1
- package/dist/cli/backend/src/services/v3/work-item-projection.d.ts +40 -0
- package/dist/cli/backend/src/services/v3/work-item-projection.d.ts.map +1 -0
- package/dist/cli/backend/src/services/v3/work-item-projection.js +115 -0
- package/dist/cli/backend/src/services/v3/work-item-projection.js.map +1 -0
- package/dist/cli/backend/src/types/credential.types.d.ts +17 -1
- package/dist/cli/backend/src/types/credential.types.d.ts.map +1 -1
- package/dist/cli/backend/src/types/credential.types.js +15 -5
- package/dist/cli/backend/src/types/credential.types.js.map +1 -1
- package/dist/cli/backend/src/types/event-bus.types.d.ts +173 -0
- package/dist/cli/backend/src/types/event-bus.types.d.ts.map +1 -0
- package/dist/cli/backend/src/types/event-bus.types.js +230 -0
- package/dist/cli/backend/src/types/event-bus.types.js.map +1 -0
- package/dist/cli/backend/src/types/index.d.ts +11 -1
- package/dist/cli/backend/src/types/index.d.ts.map +1 -1
- package/dist/cli/backend/src/types/index.js +0 -2
- package/dist/cli/backend/src/types/index.js.map +1 -1
- package/dist/cli/backend/src/types/memory.types.d.ts +53 -0
- package/dist/cli/backend/src/types/memory.types.d.ts.map +1 -1
- package/dist/cli/backend/src/types/memory.types.js.map +1 -1
- package/dist/cli/backend/src/types/messaging.types.d.ts +223 -0
- package/dist/cli/backend/src/types/messaging.types.d.ts.map +1 -0
- package/dist/cli/backend/src/types/messaging.types.js +231 -0
- package/dist/cli/backend/src/types/messaging.types.js.map +1 -0
- package/dist/cli/backend/src/types/settings.types.d.ts +38 -2
- package/dist/cli/backend/src/types/settings.types.d.ts.map +1 -1
- package/dist/cli/backend/src/types/settings.types.js +16 -2
- package/dist/cli/backend/src/types/settings.types.js.map +1 -1
- package/dist/cli/backend/src/types/slack.types.d.ts +356 -0
- package/dist/cli/backend/src/types/slack.types.d.ts.map +1 -0
- package/dist/cli/backend/src/types/slack.types.js +66 -0
- package/dist/cli/backend/src/types/slack.types.js.map +1 -0
- package/dist/cli/backend/src/types/v2/claim.types.d.ts +2 -5
- package/dist/cli/backend/src/types/v2/claim.types.d.ts.map +1 -1
- package/dist/cli/backend/src/types/v2/claim.types.js +2 -5
- package/dist/cli/backend/src/types/v2/claim.types.js.map +1 -1
- package/dist/cli/backend/src/types/v2/work-item.types.d.ts +63 -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 +20 -0
- package/dist/cli/backend/src/types/v2/work-item.types.js.map +1 -1
- package/dist/cli/backend/src/utils/format-error.d.ts +8 -0
- package/dist/cli/backend/src/utils/format-error.d.ts.map +1 -0
- package/dist/cli/backend/src/utils/format-error.js +10 -0
- package/dist/cli/backend/src/utils/format-error.js.map +1 -0
- package/dist/cli/backend/src/utils/integrity-guarded-write.utils.d.ts +119 -0
- package/dist/cli/backend/src/utils/integrity-guarded-write.utils.d.ts.map +1 -0
- package/dist/cli/backend/src/utils/integrity-guarded-write.utils.js +212 -0
- package/dist/cli/backend/src/utils/integrity-guarded-write.utils.js.map +1 -0
- package/dist/cli/backend/src/utils/node-require.utils.d.ts +104 -0
- package/dist/cli/backend/src/utils/node-require.utils.d.ts.map +1 -0
- package/dist/cli/backend/src/utils/node-require.utils.js +111 -0
- package/dist/cli/backend/src/utils/node-require.utils.js.map +1 -0
- package/dist/cli/cli/src/commands/start.js +73 -12
- package/dist/cli/cli/src/commands/start.js.map +1 -1
- package/frontend/dist/assets/index-b279da34.js +4926 -0
- package/frontend/dist/assets/{index-b7e59b2b.css → index-c07e04c0.css} +2 -2
- package/frontend/dist/index.html +2 -2
- package/package.json +6 -2
- package/dist/backend/backend/src/controllers/eval/eval.controller.d.ts +0 -63
- package/dist/backend/backend/src/controllers/eval/eval.controller.d.ts.map +0 -1
- package/dist/backend/backend/src/controllers/eval/eval.controller.js +0 -228
- package/dist/backend/backend/src/controllers/eval/eval.controller.js.map +0 -1
- package/dist/backend/backend/src/controllers/eval/eval.routes.d.ts +0 -23
- package/dist/backend/backend/src/controllers/eval/eval.routes.d.ts.map +0 -1
- package/dist/backend/backend/src/controllers/eval/eval.routes.js +0 -37
- package/dist/backend/backend/src/controllers/eval/eval.routes.js.map +0 -1
- package/dist/backend/backend/src/controllers/knowledge-v3/index.d.ts +0 -8
- package/dist/backend/backend/src/controllers/knowledge-v3/index.d.ts.map +0 -1
- package/dist/backend/backend/src/controllers/knowledge-v3/index.js +0 -8
- package/dist/backend/backend/src/controllers/knowledge-v3/index.js.map +0 -1
- package/dist/backend/backend/src/controllers/knowledge-v3/knowledge-v3.controller.d.ts +0 -63
- package/dist/backend/backend/src/controllers/knowledge-v3/knowledge-v3.controller.d.ts.map +0 -1
- package/dist/backend/backend/src/controllers/knowledge-v3/knowledge-v3.controller.js +0 -179
- package/dist/backend/backend/src/controllers/knowledge-v3/knowledge-v3.controller.js.map +0 -1
- package/dist/backend/backend/src/controllers/knowledge-v3/knowledge-v3.routes.d.ts +0 -22
- package/dist/backend/backend/src/controllers/knowledge-v3/knowledge-v3.routes.d.ts.map +0 -1
- package/dist/backend/backend/src/controllers/knowledge-v3/knowledge-v3.routes.js +0 -34
- package/dist/backend/backend/src/controllers/knowledge-v3/knowledge-v3.routes.js.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/eval/adapters/cli-adapter.d.ts +0 -130
- package/dist/backend/backend/src/services/agent/crewly-agent/eval/adapters/cli-adapter.d.ts.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/eval/adapters/cli-adapter.js +0 -406
- package/dist/backend/backend/src/services/agent/crewly-agent/eval/adapters/cli-adapter.js.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/eval/adapters/crewly-agent-adapter.d.ts +0 -68
- package/dist/backend/backend/src/services/agent/crewly-agent/eval/adapters/crewly-agent-adapter.d.ts.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/eval/adapters/crewly-agent-adapter.js +0 -206
- package/dist/backend/backend/src/services/agent/crewly-agent/eval/adapters/crewly-agent-adapter.js.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/eval/adapters/index.d.ts +0 -32
- package/dist/backend/backend/src/services/agent/crewly-agent/eval/adapters/index.d.ts.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/eval/adapters/index.js +0 -46
- package/dist/backend/backend/src/services/agent/crewly-agent/eval/adapters/index.js.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/eval/context-generator.d.ts +0 -87
- package/dist/backend/backend/src/services/agent/crewly-agent/eval/context-generator.d.ts.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/eval/context-generator.js +0 -299
- package/dist/backend/backend/src/services/agent/crewly-agent/eval/context-generator.js.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/eval/eval-runner.d.ts +0 -59
- package/dist/backend/backend/src/services/agent/crewly-agent/eval/eval-runner.d.ts.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/eval/eval-runner.js +0 -218
- package/dist/backend/backend/src/services/agent/crewly-agent/eval/eval-runner.js.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/eval/eval-scorer.d.ts +0 -203
- package/dist/backend/backend/src/services/agent/crewly-agent/eval/eval-scorer.d.ts.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/eval/eval-scorer.js +0 -467
- package/dist/backend/backend/src/services/agent/crewly-agent/eval/eval-scorer.js.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/eval/eval-types.d.ts +0 -313
- package/dist/backend/backend/src/services/agent/crewly-agent/eval/eval-types.d.ts.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/eval/eval-types.js +0 -45
- package/dist/backend/backend/src/services/agent/crewly-agent/eval/eval-types.js.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/eval/index.d.ts +0 -21
- package/dist/backend/backend/src/services/agent/crewly-agent/eval/index.d.ts.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/eval/index.js +0 -21
- package/dist/backend/backend/src/services/agent/crewly-agent/eval/index.js.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/eval/run-eval-cli.d.ts +0 -15
- package/dist/backend/backend/src/services/agent/crewly-agent/eval/run-eval-cli.d.ts.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/eval/run-eval-cli.js +0 -349
- package/dist/backend/backend/src/services/agent/crewly-agent/eval/run-eval-cli.js.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/eval/run-eval-l4.d.ts +0 -97
- package/dist/backend/backend/src/services/agent/crewly-agent/eval/run-eval-l4.d.ts.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/eval/run-eval-l4.js +0 -414
- package/dist/backend/backend/src/services/agent/crewly-agent/eval/run-eval-l4.js.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/eval/run-eval-standalone.d.ts +0 -42
- package/dist/backend/backend/src/services/agent/crewly-agent/eval/run-eval-standalone.d.ts.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/eval/run-eval-standalone.js +0 -403
- package/dist/backend/backend/src/services/agent/crewly-agent/eval/run-eval-standalone.js.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/eval/tasks/index.d.ts +0 -41
- package/dist/backend/backend/src/services/agent/crewly-agent/eval/tasks/index.d.ts.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/eval/tasks/index.js +0 -58
- package/dist/backend/backend/src/services/agent/crewly-agent/eval/tasks/index.js.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/eval/tasks/l1-tasks.d.ts +0 -15
- package/dist/backend/backend/src/services/agent/crewly-agent/eval/tasks/l1-tasks.d.ts.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/eval/tasks/l1-tasks.js +0 -396
- package/dist/backend/backend/src/services/agent/crewly-agent/eval/tasks/l1-tasks.js.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/eval/tasks/l2-tasks.d.ts +0 -14
- package/dist/backend/backend/src/services/agent/crewly-agent/eval/tasks/l2-tasks.d.ts.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/eval/tasks/l2-tasks.js +0 -564
- package/dist/backend/backend/src/services/agent/crewly-agent/eval/tasks/l2-tasks.js.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/eval/tasks/l3-tasks.d.ts +0 -13
- package/dist/backend/backend/src/services/agent/crewly-agent/eval/tasks/l3-tasks.d.ts.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/eval/tasks/l3-tasks.js +0 -634
- package/dist/backend/backend/src/services/agent/crewly-agent/eval/tasks/l3-tasks.js.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/eval/tasks/l4-tasks.d.ts +0 -21
- package/dist/backend/backend/src/services/agent/crewly-agent/eval/tasks/l4-tasks.d.ts.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/eval/tasks/l4-tasks.js +0 -1036
- package/dist/backend/backend/src/services/agent/crewly-agent/eval/tasks/l4-tasks.js.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/eval/tool-log-parser.d.ts +0 -100
- package/dist/backend/backend/src/services/agent/crewly-agent/eval/tool-log-parser.d.ts.map +0 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/eval/tool-log-parser.js +0 -187
- package/dist/backend/backend/src/services/agent/crewly-agent/eval/tool-log-parser.js.map +0 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/sop-norm-distinction.module.d.ts +0 -79
- package/dist/backend/backend/src/services/ai/prompt-modules/sop-norm-distinction.module.d.ts.map +0 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/sop-norm-distinction.module.js +0 -118
- package/dist/backend/backend/src/services/ai/prompt-modules/sop-norm-distinction.module.js.map +0 -1
- package/dist/backend/backend/src/services/cloud/cloud-event-bridge.service.d.ts +0 -113
- package/dist/backend/backend/src/services/cloud/cloud-event-bridge.service.d.ts.map +0 -1
- package/dist/backend/backend/src/services/cloud/cloud-event-bridge.service.js +0 -179
- package/dist/backend/backend/src/services/cloud/cloud-event-bridge.service.js.map +0 -1
- package/dist/backend/backend/src/services/cloud/cloud-event-forwarder.service.d.ts +0 -131
- package/dist/backend/backend/src/services/cloud/cloud-event-forwarder.service.d.ts.map +0 -1
- package/dist/backend/backend/src/services/cloud/cloud-event-forwarder.service.js +0 -227
- package/dist/backend/backend/src/services/cloud/cloud-event-forwarder.service.js.map +0 -1
- package/dist/backend/backend/src/services/knowledge/fts5-search-strategy.d.ts +0 -56
- package/dist/backend/backend/src/services/knowledge/fts5-search-strategy.d.ts.map +0 -1
- package/dist/backend/backend/src/services/knowledge/fts5-search-strategy.js +0 -91
- package/dist/backend/backend/src/services/knowledge/fts5-search-strategy.js.map +0 -1
- package/dist/backend/backend/src/services/memory/learning-format.validator.d.ts +0 -97
- package/dist/backend/backend/src/services/memory/learning-format.validator.d.ts.map +0 -1
- package/dist/backend/backend/src/services/memory/learning-format.validator.js +0 -209
- package/dist/backend/backend/src/services/memory/learning-format.validator.js.map +0 -1
- package/frontend/dist/assets/index-7a4e7df5.js +0 -5228
- /package/dist/{backend → cli}/backend/src/services/knowledge/learnings-index.service.d.ts +0 -0
- /package/dist/{backend → cli}/backend/src/services/knowledge/learnings-index.service.d.ts.map +0 -0
- /package/dist/{backend → cli}/backend/src/services/knowledge/learnings-index.service.js +0 -0
- /package/dist/{backend → cli}/backend/src/services/knowledge/learnings-index.service.js.map +0 -0
|
@@ -14,6 +14,25 @@ import { LoggerService } from '../core/logger.service.js';
|
|
|
14
14
|
import { formatError } from '../../utils/format-error.js';
|
|
15
15
|
import { isWorkItem, isValidWorkItemTransition, isTransitionPermitted } from '../../types/v2/work-item.types.js';
|
|
16
16
|
import { createTaskClaim, } from '../../types/v2/claim.types.js';
|
|
17
|
+
/**
|
|
18
|
+
* Structured error thrown by {@link TaskPoolService.removeFromPool}
|
|
19
|
+
* when an active claim exists and `force: true` was not passed.
|
|
20
|
+
*/
|
|
21
|
+
export class WorkItemClaimedError extends Error {
|
|
22
|
+
workItemId;
|
|
23
|
+
claimId;
|
|
24
|
+
claimedBy;
|
|
25
|
+
constructor(args) {
|
|
26
|
+
super(`WorkItem '${args.workItemId}' has an active claim ` +
|
|
27
|
+
`(claimId='${args.claimId}', claimedBy='${args.claimedBy}'). ` +
|
|
28
|
+
`Pass { force: true } to delete anyway (will revoke the claim).`);
|
|
29
|
+
this.name = 'WorkItemClaimedError';
|
|
30
|
+
this.workItemId = args.workItemId;
|
|
31
|
+
this.claimId = args.claimId;
|
|
32
|
+
this.claimedBy = args.claimedBy;
|
|
33
|
+
Object.setPrototypeOf(this, WorkItemClaimedError.prototype);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
17
36
|
// ---------------------------------------------------------------------------
|
|
18
37
|
// Service
|
|
19
38
|
// ---------------------------------------------------------------------------
|
|
@@ -52,6 +71,26 @@ export class TaskPoolService {
|
|
|
52
71
|
* publish at warn level.
|
|
53
72
|
*/
|
|
54
73
|
eventBus = null;
|
|
74
|
+
/**
|
|
75
|
+
* Optional Request-linker reference — wired via {@link setRequestService}
|
|
76
|
+
* from the boot path. When set, {@link addToPool} pushes the new WI's id
|
|
77
|
+
* into the parent `Request.workItemIds[]` immediately after the storage
|
|
78
|
+
* flush, independent of any downstream subscriber.
|
|
79
|
+
*
|
|
80
|
+
* P1 Bug B (Pool umbrella WI 72ca743a) intrinsic-link contract:
|
|
81
|
+
* - The pre-fix path relied on `workitem:queued` / `task:delegated`
|
|
82
|
+
* subscribers (request-sla.subscriber, V3DataService) to backfill
|
|
83
|
+
* `Request.workItemIds[]`. Manual / programmatic / cron callers that
|
|
84
|
+
* bypass the standard event chain left Requests with
|
|
85
|
+
* `workItemIds=[]` even though their WIs were in the pool.
|
|
86
|
+
* - The intrinsic path here is the source-of-truth link and runs on
|
|
87
|
+
* every `addToPool`. Subscriber-driven linking remains as
|
|
88
|
+
* belt-and-suspenders (idempotent — see request.service.ts:328
|
|
89
|
+
* short-circuit on duplicate id).
|
|
90
|
+
* - Optional because singleton callers (tests, CLI) bring up the pool
|
|
91
|
+
* before RequestService exists; missing linker is a no-op debug log.
|
|
92
|
+
*/
|
|
93
|
+
requestService = null;
|
|
55
94
|
/**
|
|
56
95
|
* Serializes claim operations to prevent the race where two concurrent
|
|
57
96
|
* claimFromPool / claimSpecificItem calls both select the same queued
|
|
@@ -76,6 +115,22 @@ export class TaskPoolService {
|
|
|
76
115
|
setEventBusService(bus) {
|
|
77
116
|
this.eventBus = bus;
|
|
78
117
|
}
|
|
118
|
+
/**
|
|
119
|
+
* Wire the Request-linker reference used by {@link addToPool} to
|
|
120
|
+
* intrinsically link the new WI into its parent `Request.workItemIds[]`
|
|
121
|
+
* (P1 Bug B — Pool umbrella WI 72ca743a).
|
|
122
|
+
*
|
|
123
|
+
* Called from the backend boot path after both services exist.
|
|
124
|
+
* Idempotent and may be called with `null` to disable intrinsic
|
|
125
|
+
* linking (testing). Mirrors the {@link setEventBusService} setter
|
|
126
|
+
* pattern so the dependency wiring stays uniform and grep-able.
|
|
127
|
+
*
|
|
128
|
+
* @param svc - The RequestService instance (or any object satisfying
|
|
129
|
+
* {@link IRequestWorkItemLinker}), or null to clear.
|
|
130
|
+
*/
|
|
131
|
+
setRequestService(svc) {
|
|
132
|
+
this.requestService = svc;
|
|
133
|
+
}
|
|
79
134
|
/**
|
|
80
135
|
* Chains the given critical section after any in-flight claim operation.
|
|
81
136
|
* Guarantees FIFO ordering even under concurrent invocation.
|
|
@@ -139,6 +194,25 @@ export class TaskPoolService {
|
|
|
139
194
|
type: workItem.type,
|
|
140
195
|
title: workItem.title,
|
|
141
196
|
});
|
|
197
|
+
// P1 Bug B (Pool umbrella WI 72ca743a): intrinsically link the new
|
|
198
|
+
// WI into its parent `Request.workItemIds[]` if a linker is wired
|
|
199
|
+
// and the WI carries a requestId. This is the SOURCE-OF-TRUTH link
|
|
200
|
+
// and runs unconditionally on every successful addToPool, fixing
|
|
201
|
+
// the bug where manual / programmatic / cron / orchestrator-script
|
|
202
|
+
// callers that bypass the standard event chain left Requests with
|
|
203
|
+
// empty `workItemIds[]`.
|
|
204
|
+
//
|
|
205
|
+
// Subscriber-driven linking (request-sla.subscriber.ts on
|
|
206
|
+
// workitem:queued, V3DataService.onTaskDelegated on task:delegated)
|
|
207
|
+
// continues to run as belt-and-suspenders — `linkWorkItem` is
|
|
208
|
+
// idempotent (request.service.ts:328 short-circuits on duplicate id),
|
|
209
|
+
// so double-link is safe.
|
|
210
|
+
//
|
|
211
|
+
// Failure isolation: pool mutation is the source of truth. Link
|
|
212
|
+
// failures are warn-logged and swallowed; subscriber path remains
|
|
213
|
+
// as a backup, and a future addToPool of the same WI is a no-op
|
|
214
|
+
// (storage dedup) so retry comes via natural traffic.
|
|
215
|
+
await this.linkWorkItemToRequest(workItem);
|
|
142
216
|
// INBOUND-1.f1: announce the queue mutation so subscribers (notably the
|
|
143
217
|
// RequestSlaSubscriber) can react. We publish AFTER the storage flush
|
|
144
218
|
// so any subscriber that re-reads via taskPool.findWorkItem sees the
|
|
@@ -146,6 +220,40 @@ export class TaskPoolService {
|
|
|
146
220
|
// mutation is the source of truth, the event is informational.
|
|
147
221
|
this.publishWorkItemQueued(workItem);
|
|
148
222
|
}
|
|
223
|
+
/**
|
|
224
|
+
* P1 Bug B helper: intrinsically link a freshly-added WI into its
|
|
225
|
+
* parent `Request.workItemIds[]`.
|
|
226
|
+
*
|
|
227
|
+
* Stays a separate method (vs inlining) so:
|
|
228
|
+
* 1. The dependency on RequestService stays explicit and grep-able,
|
|
229
|
+
* mirroring {@link publishWorkItemQueued}.
|
|
230
|
+
* 2. Future enqueue paths (e.g. a batch addAll) can route through
|
|
231
|
+
* the same linker for consistent behaviour.
|
|
232
|
+
* 3. Error handling stays in one place — a thrown linker must NOT
|
|
233
|
+
* back out the pool mutation (the storage write already committed).
|
|
234
|
+
*
|
|
235
|
+
* @param workItem - The WI just persisted into the pool.
|
|
236
|
+
*/
|
|
237
|
+
async linkWorkItemToRequest(workItem) {
|
|
238
|
+
if (!workItem.requestId) {
|
|
239
|
+
// No parent Request — nothing to link.
|
|
240
|
+
return;
|
|
241
|
+
}
|
|
242
|
+
if (!this.requestService) {
|
|
243
|
+
this.logger.debug('No RequestService wired — skipping intrinsic Request link', { workItemId: workItem.id, requestId: workItem.requestId });
|
|
244
|
+
return;
|
|
245
|
+
}
|
|
246
|
+
try {
|
|
247
|
+
await this.requestService.linkWorkItem(workItem.requestId, workItem.id);
|
|
248
|
+
}
|
|
249
|
+
catch (linkError) {
|
|
250
|
+
this.logger.warn('Bug B intrinsic link failed (subscriber path remains as fallback)', {
|
|
251
|
+
requestId: workItem.requestId,
|
|
252
|
+
workItemId: workItem.id,
|
|
253
|
+
error: formatError(linkError),
|
|
254
|
+
});
|
|
255
|
+
}
|
|
256
|
+
}
|
|
149
257
|
/**
|
|
150
258
|
* INBOUND-1.f1 helper: publish a `workitem:queued` event with correlation
|
|
151
259
|
* ids the SLA subscriber needs (`requestId`, `missionId`, plus the new
|
|
@@ -311,6 +419,63 @@ export class TaskPoolService {
|
|
|
311
419
|
});
|
|
312
420
|
}
|
|
313
421
|
}
|
|
422
|
+
/**
|
|
423
|
+
* Publish `task:cancelled` whenever a WorkItem transitions to the
|
|
424
|
+
* cancelled status via {@link updateItemStatus} or {@link transitionStatus}.
|
|
425
|
+
*
|
|
426
|
+
* **Why this exists.** 2026-05-09 dogfood: 4 child WIs of a Slack-
|
|
427
|
+
* originated Request all landed in `cancelled` (orc-not-in-health-map
|
|
428
|
+
* loop, fixed in #531) but the Request stayed in `ready` for hours.
|
|
429
|
+
* `cascadeRequestStatus` only fires from V3DataService's task
|
|
430
|
+
* handlers, which are wired to the retired `v3:task_*` events
|
|
431
|
+
* (`mission-executor.service.ts:152` v1-cleanup comment) — so out-of-
|
|
432
|
+
* band cancellations never reached cascade. The heartbeat sweep
|
|
433
|
+
* eventually caught it (#533), but with up-to-30-min latency that
|
|
434
|
+
* showed up as a misleading "0/4 in every bucket" ping in the user's
|
|
435
|
+
* Slack thread.
|
|
436
|
+
*
|
|
437
|
+
* Publishing `task:cancelled` lets `RequestCascadeSubscriber` close
|
|
438
|
+
* the Request within seconds of the last child cancelling, instead
|
|
439
|
+
* of waiting for the heartbeat catch.
|
|
440
|
+
*
|
|
441
|
+
* Mirrors {@link publishTaskDoneByWorker} / {@link publishTaskRejected}
|
|
442
|
+
* so the EventBus surface stays uniform.
|
|
443
|
+
*
|
|
444
|
+
* @param workItem - The WI snapshot AFTER the cancelled transition committed
|
|
445
|
+
* @param previousStatus - The status it transitioned from (for the event payload)
|
|
446
|
+
*/
|
|
447
|
+
publishTaskCancelled(workItem, previousStatus) {
|
|
448
|
+
if (!this.eventBus) {
|
|
449
|
+
this.logger.debug('No EventBus wired — skipping task:cancelled publish', {
|
|
450
|
+
workItemId: workItem.id,
|
|
451
|
+
});
|
|
452
|
+
return;
|
|
453
|
+
}
|
|
454
|
+
try {
|
|
455
|
+
this.eventBus.publish({
|
|
456
|
+
id: `task:cancelled:${workItem.id}`,
|
|
457
|
+
type: 'task:cancelled',
|
|
458
|
+
timestamp: new Date().toISOString(),
|
|
459
|
+
teamId: '',
|
|
460
|
+
teamName: '',
|
|
461
|
+
memberId: '',
|
|
462
|
+
memberName: '',
|
|
463
|
+
sessionName: '',
|
|
464
|
+
previousValue: previousStatus,
|
|
465
|
+
newValue: 'cancelled',
|
|
466
|
+
changedField: 'taskStatus',
|
|
467
|
+
workItemId: workItem.id,
|
|
468
|
+
missionId: workItem.missionId,
|
|
469
|
+
requestId: workItem.requestId,
|
|
470
|
+
});
|
|
471
|
+
}
|
|
472
|
+
catch (err) {
|
|
473
|
+
this.logger.warn('task:cancelled publish threw', {
|
|
474
|
+
workItemId: workItem.id,
|
|
475
|
+
error: formatError(err),
|
|
476
|
+
});
|
|
477
|
+
}
|
|
478
|
+
}
|
|
314
479
|
/**
|
|
315
480
|
* Claims the next available WorkItem from the pool for an agent.
|
|
316
481
|
*
|
|
@@ -329,12 +494,31 @@ export class TaskPoolService {
|
|
|
329
494
|
// Check if agent already has an active claim
|
|
330
495
|
const existingClaim = await this.storage.findActiveClaimByAgent(agentId);
|
|
331
496
|
if (existingClaim) {
|
|
332
|
-
|
|
497
|
+
// Issue #513 — Steve 2026-05-15. Previously this returned
|
|
498
|
+
// null, which the controller mapped to 404 "No available
|
|
499
|
+
// WorkItem matching filters". That was misleading: the caller
|
|
500
|
+
// DOES have a WorkItem (the one they already claimed), they
|
|
501
|
+
// just couldn't see it without grepping pool.json. Return the
|
|
502
|
+
// held claim + its WorkItem with `alreadyHeld: true` so the
|
|
503
|
+
// skill / agent can recognize the situation.
|
|
504
|
+
this.logger.info('Agent already has an active claim — returning existing', {
|
|
333
505
|
agentId,
|
|
334
506
|
existingClaimId: existingClaim.id,
|
|
335
507
|
existingWorkItemId: existingClaim.workItemId,
|
|
336
508
|
});
|
|
337
|
-
|
|
509
|
+
const heldWorkItem = await this.storage.findWorkItem(existingClaim.workItemId);
|
|
510
|
+
if (!heldWorkItem) {
|
|
511
|
+
// Held claim exists but WI is missing — orphan state. Best we
|
|
512
|
+
// can do is fall through to the empty-pool null so the agent
|
|
513
|
+
// doesn't think they own a phantom item. Log so we notice.
|
|
514
|
+
this.logger.warn('Orphan claim — claim exists but WorkItem missing', {
|
|
515
|
+
agentId,
|
|
516
|
+
existingClaimId: existingClaim.id,
|
|
517
|
+
existingWorkItemId: existingClaim.workItemId,
|
|
518
|
+
});
|
|
519
|
+
return null;
|
|
520
|
+
}
|
|
521
|
+
return { workItem: heldWorkItem, claim: existingClaim, alreadyHeld: true };
|
|
338
522
|
}
|
|
339
523
|
const workItems = await this.storage.getWorkItems();
|
|
340
524
|
const claims = await this.storage.getClaims();
|
|
@@ -342,9 +526,24 @@ export class TaskPoolService {
|
|
|
342
526
|
const claimedIds = new Set(claims
|
|
343
527
|
.filter((c) => c.status === 'active')
|
|
344
528
|
.map((c) => c.workItemId));
|
|
345
|
-
//
|
|
346
|
-
|
|
529
|
+
// Hygiene #3 — target-respect gate. Before this filter, claimFromPool
|
|
530
|
+
// would FIFO-pick the oldest queued+unclaimed item regardless of
|
|
531
|
+
// its existing `target` field, then unconditionally rewrite
|
|
532
|
+
// `wi.target = agentId` in the transitionStatus mutator. That
|
|
533
|
+
// produced the target-rotation bug observed in the 5/9 wave (WIs
|
|
534
|
+
// rotating through Quinn → Sam, Leo → Quinn, etc.).
|
|
535
|
+
//
|
|
536
|
+
// After this filter:
|
|
537
|
+
// - WIs with an explicit target are claimable ONLY by that target.
|
|
538
|
+
// - WIs with no target (broadcast pool) remain claimable by any agent.
|
|
539
|
+
// The defensive identity check in the transitionStatus mutator
|
|
540
|
+
// below ensures we never accidentally overwrite an existing target
|
|
541
|
+
// even if a future code path bypasses this filter.
|
|
542
|
+
const targetRespectingCandidates = workItems
|
|
347
543
|
.filter((wi) => wi.status === 'queued' && !claimedIds.has(wi.id))
|
|
544
|
+
.filter((wi) => !wi.target || wi.target === agentId);
|
|
545
|
+
// Find first matching unclaimed queued item (FIFO by createdAt)
|
|
546
|
+
const candidates = targetRespectingCandidates
|
|
348
547
|
.filter((wi) => matchesFilters(wi, filters))
|
|
349
548
|
.sort((a, b) => new Date(a.createdAt).getTime() - new Date(b.createdAt).getTime());
|
|
350
549
|
if (candidates.length === 0) {
|
|
@@ -356,8 +555,17 @@ export class TaskPoolService {
|
|
|
356
555
|
// same V3 actor-role + state-machine gates as external callers.
|
|
357
556
|
// `startedAt` is set automatically by transitionStatus when
|
|
358
557
|
// newStatus === 'running'; the mutator carries the agent target.
|
|
558
|
+
//
|
|
559
|
+
// Hygiene #3 — target-respect (defensive). The candidate filter
|
|
560
|
+
// above already excludes WIs whose target ≠ agentId, so the only
|
|
561
|
+
// remaining cases here are (a) wi.target === agentId (no-op assign)
|
|
562
|
+
// and (b) wi.target === undefined (broadcast claim). Either way we
|
|
563
|
+
// refuse to overwrite a non-matching existing target.
|
|
359
564
|
const claimedItem = await this.transitionStatus(selected.id, 'running', 'system', (wi) => {
|
|
360
|
-
wi.target
|
|
565
|
+
if (!wi.target) {
|
|
566
|
+
wi.target = agentId;
|
|
567
|
+
}
|
|
568
|
+
// else: target already === agentId per the filter; leave as-is.
|
|
361
569
|
});
|
|
362
570
|
if (!claimedItem) {
|
|
363
571
|
this.logger.warn('Failed to update WorkItem during claim', { workItemId: selected.id });
|
|
@@ -403,13 +611,32 @@ export class TaskPoolService {
|
|
|
403
611
|
const workItem = await this.storage.findWorkItem(workItemId);
|
|
404
612
|
if (!workItem || workItem.status !== 'queued')
|
|
405
613
|
return null;
|
|
614
|
+
// Hygiene #3 — target-respect gate. Refuse to claim a WI whose
|
|
615
|
+
// existing target is set to a different agent. This prevents the
|
|
616
|
+
// claimSpecificItem path (used by AgentAutoClaimService for
|
|
617
|
+
// score-based selection) from rotating target onto an idle agent
|
|
618
|
+
// when another agent is the actual target. Same rule as
|
|
619
|
+
// claimFromPool: target=undefined (broadcast) is claimable by any
|
|
620
|
+
// agent; target=agentId is claimable only by that agent.
|
|
621
|
+
if (workItem.target && workItem.target !== agentId) {
|
|
622
|
+
this.logger.debug('claimSpecificItem refused — target mismatch', {
|
|
623
|
+
workItemId,
|
|
624
|
+
existingTarget: workItem.target,
|
|
625
|
+
requestingAgent: agentId,
|
|
626
|
+
});
|
|
627
|
+
return null;
|
|
628
|
+
}
|
|
406
629
|
const claims = await this.storage.getClaims();
|
|
407
630
|
if (claims.some((c) => c.workItemId === workItemId && c.status === 'active'))
|
|
408
631
|
return null;
|
|
409
632
|
// TRANS-2: route the queued → running flip through transitionStatus
|
|
410
633
|
// (mirrors claimFromPool — same V3 + state-machine gates).
|
|
634
|
+
// Hygiene #3 defensive: only assign target when it's currently
|
|
635
|
+
// undefined; never overwrite an existing target.
|
|
411
636
|
const claimedItem = await this.transitionStatus(workItemId, 'running', 'system', (wi) => {
|
|
412
|
-
wi.target
|
|
637
|
+
if (!wi.target) {
|
|
638
|
+
wi.target = agentId;
|
|
639
|
+
}
|
|
413
640
|
});
|
|
414
641
|
if (!claimedItem)
|
|
415
642
|
return null;
|
|
@@ -587,6 +814,47 @@ export class TaskPoolService {
|
|
|
587
814
|
if (result)
|
|
588
815
|
wi.result = result;
|
|
589
816
|
});
|
|
817
|
+
// Steve 2026-05-15 dogfood: TL Verify WIs were completing (status=done)
|
|
818
|
+
// but the SOURCE work item they were verifying stayed stuck in
|
|
819
|
+
// `done_by_worker` forever. `resolveBlockedDependents` only treats
|
|
820
|
+
// `done|verified` as terminal-success, so blocked dependents of the
|
|
821
|
+
// SOURCE (e.g. an Execute waiting on a Plan in a Plan/Execute/Review
|
|
822
|
+
// chain) were never unblocked.
|
|
823
|
+
//
|
|
824
|
+
// Concrete repro: WI 12d7e988 (Plan) — done_by_worker; verify WI
|
|
825
|
+
// 12d7e988:verify:12d7e988 — done; Execute 722da42f — blocked for 41+
|
|
826
|
+
// min waiting on the Plan that was already verified.
|
|
827
|
+
//
|
|
828
|
+
// When a verify WI completes (metadata.verifyOf points at its source),
|
|
829
|
+
// propagate the verdict to the source via verifyItem so the source
|
|
830
|
+
// moves done_by_worker → verified AND its own dependents unblock. Use
|
|
831
|
+
// the 'system' actor — this is automatic propagation, not a fresh
|
|
832
|
+
// TL action (the TL action was completing this verify WI).
|
|
833
|
+
const verifyOf = updated?.metadata && typeof updated.metadata.verifyOf === 'string'
|
|
834
|
+
? updated.metadata.verifyOf
|
|
835
|
+
: undefined;
|
|
836
|
+
if (verifyOf) {
|
|
837
|
+
try {
|
|
838
|
+
const source = await this.storage.findWorkItem(verifyOf);
|
|
839
|
+
if (source && source.status === 'done_by_worker') {
|
|
840
|
+
await this.verifyItem(verifyOf, 'system', 'verified');
|
|
841
|
+
this.logger.info('Verify WI complete → propagated to source', {
|
|
842
|
+
verifyWorkItemId: workItemId,
|
|
843
|
+
sourceWorkItemId: verifyOf,
|
|
844
|
+
verdict: 'verified',
|
|
845
|
+
});
|
|
846
|
+
}
|
|
847
|
+
}
|
|
848
|
+
catch (err) {
|
|
849
|
+
// Propagation is best-effort — a failed propagate must NOT roll
|
|
850
|
+
// back the verify WI's own completion.
|
|
851
|
+
this.logger.warn('Verify-to-source propagation failed (non-fatal)', {
|
|
852
|
+
verifyWorkItemId: workItemId,
|
|
853
|
+
sourceWorkItemId: verifyOf,
|
|
854
|
+
error: err instanceof Error ? err.message : String(err),
|
|
855
|
+
});
|
|
856
|
+
}
|
|
857
|
+
}
|
|
590
858
|
// Promote any blocked dependents whose deps are now all satisfied.
|
|
591
859
|
await this.resolveBlockedDependents(workItemId);
|
|
592
860
|
await this.storage.flush();
|
|
@@ -891,6 +1159,88 @@ export class TaskPoolService {
|
|
|
891
1159
|
async findWorkItem(workItemId) {
|
|
892
1160
|
return (await this.storage.findWorkItem(workItemId)) ?? null;
|
|
893
1161
|
}
|
|
1162
|
+
/**
|
|
1163
|
+
* Stores worker-supplied structured output on a WorkItem.
|
|
1164
|
+
*
|
|
1165
|
+
* Replaces the v1 `<taskId>.output.json` filesystem store with an
|
|
1166
|
+
* in-pool field (see {@link WorkItem.output}). Used by the worker
|
|
1167
|
+
* `complete-task` flow and read back by the TL `verify-output` skill.
|
|
1168
|
+
*
|
|
1169
|
+
* @param workItemId - WorkItem id to attach output to
|
|
1170
|
+
* @param output - Arbitrary task-specific output object
|
|
1171
|
+
* @returns The updated WorkItem, or null if not found
|
|
1172
|
+
*/
|
|
1173
|
+
async setOutput(workItemId, output) {
|
|
1174
|
+
const ok = await this.storage.updateWorkItem(workItemId, (wi) => {
|
|
1175
|
+
wi.output = output;
|
|
1176
|
+
});
|
|
1177
|
+
if (!ok)
|
|
1178
|
+
return null;
|
|
1179
|
+
return (await this.storage.findWorkItem(workItemId)) ?? null;
|
|
1180
|
+
}
|
|
1181
|
+
/**
|
|
1182
|
+
* Reassigns a WorkItem to a different target agent.
|
|
1183
|
+
*
|
|
1184
|
+
* Replaces the v1 `/task-management/handoff` filesystem reassign with a
|
|
1185
|
+
* direct `target` field update on the WorkItem.
|
|
1186
|
+
*
|
|
1187
|
+
* Allowed transitions:
|
|
1188
|
+
* - `target` must be a non-empty string
|
|
1189
|
+
* - WI must not be in a terminal state (done/cancelled/failed-final)
|
|
1190
|
+
*
|
|
1191
|
+
* @param workItemId - WorkItem to reassign
|
|
1192
|
+
* @param newTarget - Session name of the new target agent
|
|
1193
|
+
* @param fromAgent - Session name of the agent handing off (for audit)
|
|
1194
|
+
* @param reason - Human-readable reason recorded as a working-note
|
|
1195
|
+
* @returns The updated WorkItem, or null if not found
|
|
1196
|
+
*/
|
|
1197
|
+
async handoff(workItemId, newTarget, fromAgent, reason) {
|
|
1198
|
+
if (!newTarget || newTarget.trim() === '') {
|
|
1199
|
+
throw new Error('handoff: newTarget is required');
|
|
1200
|
+
}
|
|
1201
|
+
const wi = await this.storage.findWorkItem(workItemId);
|
|
1202
|
+
if (!wi)
|
|
1203
|
+
return null;
|
|
1204
|
+
if (wi.status === 'done' || wi.status === 'cancelled') {
|
|
1205
|
+
throw new Error(`handoff refused: WorkItem ${workItemId} is in terminal state '${wi.status}'`);
|
|
1206
|
+
}
|
|
1207
|
+
const handoffNote = `[HANDOFF] ${fromAgent} → ${newTarget}: ${reason || '(no reason)'}`;
|
|
1208
|
+
await this.storage.updateWorkItem(workItemId, (item) => {
|
|
1209
|
+
item.target = newTarget;
|
|
1210
|
+
const existing = (item.metadata && typeof item.metadata === 'object' ? item.metadata : {});
|
|
1211
|
+
const notes = Array.isArray(existing.notes) ? existing.notes : [];
|
|
1212
|
+
notes.push(`${new Date().toISOString()} ${handoffNote}`);
|
|
1213
|
+
item.metadata = { ...existing, notes };
|
|
1214
|
+
});
|
|
1215
|
+
this.logger.info('WorkItem handoff', { workItemId, fromAgent, newTarget });
|
|
1216
|
+
return (await this.storage.findWorkItem(workItemId)) ?? null;
|
|
1217
|
+
}
|
|
1218
|
+
/**
|
|
1219
|
+
* Appends a working-state note to a WorkItem's metadata.notes array.
|
|
1220
|
+
*
|
|
1221
|
+
* Replaces v1 `/task-management/sync` and `/task-management/save-working-notes`,
|
|
1222
|
+
* both of which appended progress notes to the `.md` task body. With v1
|
|
1223
|
+
* retired, notes live on the WorkItem itself under `metadata.notes[]`.
|
|
1224
|
+
*
|
|
1225
|
+
* @param workItemId - WorkItem id
|
|
1226
|
+
* @param author - Session name of note author
|
|
1227
|
+
* @param note - Note content (free-form)
|
|
1228
|
+
* @returns The updated WorkItem, or null if not found
|
|
1229
|
+
*/
|
|
1230
|
+
async appendNote(workItemId, author, note) {
|
|
1231
|
+
if (!note || note.trim() === '') {
|
|
1232
|
+
throw new Error('appendNote: note is required');
|
|
1233
|
+
}
|
|
1234
|
+
const ok = await this.storage.updateWorkItem(workItemId, (wi) => {
|
|
1235
|
+
const existing = (wi.metadata && typeof wi.metadata === 'object' ? wi.metadata : {});
|
|
1236
|
+
const notes = Array.isArray(existing.notes) ? existing.notes : [];
|
|
1237
|
+
notes.push(`${new Date().toISOString()} [${author}] ${note}`);
|
|
1238
|
+
wi.metadata = { ...existing, notes };
|
|
1239
|
+
});
|
|
1240
|
+
if (!ok)
|
|
1241
|
+
return null;
|
|
1242
|
+
return (await this.storage.findWorkItem(workItemId)) ?? null;
|
|
1243
|
+
}
|
|
894
1244
|
/**
|
|
895
1245
|
* Removes a WorkItem from the pool entirely.
|
|
896
1246
|
* Used for purging old completed/cancelled items.
|
|
@@ -900,6 +1250,63 @@ export class TaskPoolService {
|
|
|
900
1250
|
async removeItem(workItemId) {
|
|
901
1251
|
await this.storage.removeWorkItem(workItemId);
|
|
902
1252
|
}
|
|
1253
|
+
// -------------------------------------------------------------------------
|
|
1254
|
+
// P1 1ffffb84(a) — Bulk-DELETE stale WorkItems
|
|
1255
|
+
// -------------------------------------------------------------------------
|
|
1256
|
+
/**
|
|
1257
|
+
* Public delete API used by the bulk-cleanup script and the new
|
|
1258
|
+
* `DELETE /api/task-pool/:id` HTTP endpoint (P1 umbrella WI 1ffffb84
|
|
1259
|
+
* component a, Steve directive 2026-05-06: just-DELETE-not-backfill).
|
|
1260
|
+
*
|
|
1261
|
+
* Three guarantees over {@link removeItem}:
|
|
1262
|
+
* 1. Idempotent — `not_found` is a no-op return, not a throw.
|
|
1263
|
+
* 2. Claim-safety — refuses claimed delete unless `opts.force`.
|
|
1264
|
+
* 3. Audit log — single info-level log per removal.
|
|
1265
|
+
*
|
|
1266
|
+
* Force path also revokes the orphaned claim (status='revoked',
|
|
1267
|
+
* endedAt, endReason).
|
|
1268
|
+
*/
|
|
1269
|
+
async removeFromPool(workItemId, opts = {}) {
|
|
1270
|
+
const wi = await this.storage.findWorkItem(workItemId);
|
|
1271
|
+
if (!wi) {
|
|
1272
|
+
this.logger.debug('removeFromPool: item not found (idempotent)', { workItemId });
|
|
1273
|
+
return { removed: false, reason: 'not_found' };
|
|
1274
|
+
}
|
|
1275
|
+
const activeClaim = await this.storage.findActiveClaimByWorkItem(workItemId);
|
|
1276
|
+
const hadActiveClaim = !!activeClaim;
|
|
1277
|
+
if (hadActiveClaim && activeClaim && !opts.force) {
|
|
1278
|
+
this.logger.warn('removeFromPool refused: active claim exists', {
|
|
1279
|
+
workItemId,
|
|
1280
|
+
claimId: activeClaim.id,
|
|
1281
|
+
claimedBy: activeClaim.agentId,
|
|
1282
|
+
});
|
|
1283
|
+
throw new WorkItemClaimedError({
|
|
1284
|
+
workItemId,
|
|
1285
|
+
claimId: activeClaim.id,
|
|
1286
|
+
claimedBy: activeClaim.agentId,
|
|
1287
|
+
});
|
|
1288
|
+
}
|
|
1289
|
+
const removed = await this.storage.removeWorkItem(workItemId);
|
|
1290
|
+
if (hadActiveClaim && activeClaim) {
|
|
1291
|
+
await this.storage.updateClaim(activeClaim.id, (c) => {
|
|
1292
|
+
c.status = 'revoked';
|
|
1293
|
+
c.endedAt = new Date().toISOString();
|
|
1294
|
+
c.endReason = `WorkItem deleted via removeFromPool (force=${opts.force === true})`;
|
|
1295
|
+
});
|
|
1296
|
+
}
|
|
1297
|
+
this.logger.info('removeFromPool: WorkItem removed', {
|
|
1298
|
+
workItemId,
|
|
1299
|
+
status: wi.status,
|
|
1300
|
+
target: wi.target,
|
|
1301
|
+
force: opts.force === true,
|
|
1302
|
+
hadActiveClaim,
|
|
1303
|
+
});
|
|
1304
|
+
return {
|
|
1305
|
+
removed: removed === true,
|
|
1306
|
+
workItem: wi,
|
|
1307
|
+
hadActiveClaim,
|
|
1308
|
+
};
|
|
1309
|
+
}
|
|
903
1310
|
/**
|
|
904
1311
|
* Forces an immediate flush of pool data to disk.
|
|
905
1312
|
* Called during graceful shutdown to prevent data loss.
|
|
@@ -932,12 +1339,36 @@ export class TaskPoolService {
|
|
|
932
1339
|
* @throws Error if transition is invalid (state machine — see WORK_ITEM_TRANSITIONS)
|
|
933
1340
|
* @throws Error if actor is not permitted (role check — see TRANSITION_PERMISSIONS)
|
|
934
1341
|
*/
|
|
935
|
-
async updateItemStatus(workItemId, newStatus, actorRole = 'system'
|
|
1342
|
+
async updateItemStatus(workItemId, newStatus, actorRole = 'system',
|
|
1343
|
+
/**
|
|
1344
|
+
* Optional human-readable reason. Persisted on:
|
|
1345
|
+
* - `WorkItem.cancelReason` when `newStatus === 'cancelled'`
|
|
1346
|
+
* - `WorkItem.blockedReason` when `newStatus === 'blocked'` (Steve
|
|
1347
|
+
* 2026-05-15 dogfood — UI showed Blocked badge with no
|
|
1348
|
+
* explanation)
|
|
1349
|
+
* - Ignored for other status transitions.
|
|
1350
|
+
*/
|
|
1351
|
+
reason) {
|
|
936
1352
|
const items = await this.storage.getWorkItems();
|
|
937
1353
|
const item = items.find((wi) => wi.id === workItemId);
|
|
938
1354
|
if (!item) {
|
|
939
1355
|
throw new Error(`WorkItem not found: ${workItemId}`);
|
|
940
1356
|
}
|
|
1357
|
+
// Idempotent same-state no-op: the reconciler's stale-pickup rule
|
|
1358
|
+
// and the SLA close path can both race to apply the same terminal
|
|
1359
|
+
// status. Silently no-op here instead of throwing or logging a
|
|
1360
|
+
// misleading "transitioned cancelled → cancelled" entry. (Steve
|
|
1361
|
+
// 2026-05-15 dogfood — see the duplicate "Work item status
|
|
1362
|
+
// updated from cancelled to cancelled" rows in
|
|
1363
|
+
// crewly-2026-05-15.log around 15:48:56 / 16:05:55.)
|
|
1364
|
+
if (item.status === newStatus) {
|
|
1365
|
+
this.logger.debug('Skipped idempotent same-state status update', {
|
|
1366
|
+
workItemId,
|
|
1367
|
+
status: newStatus,
|
|
1368
|
+
actorRole,
|
|
1369
|
+
});
|
|
1370
|
+
return;
|
|
1371
|
+
}
|
|
941
1372
|
if (!isValidWorkItemTransition(item.status, newStatus)) {
|
|
942
1373
|
throw new Error(`Invalid status transition for WorkItem ${workItemId}: ${item.status} → ${newStatus}`);
|
|
943
1374
|
}
|
|
@@ -946,22 +1377,63 @@ export class TaskPoolService {
|
|
|
946
1377
|
throw new Error(`Forbidden transition for WorkItem ${workItemId}: actor='${actorRole}' ` +
|
|
947
1378
|
`not permitted to perform ${item.status} → ${newStatus}.`);
|
|
948
1379
|
}
|
|
1380
|
+
// Capture pre-write status. See transitionStatus's identical block
|
|
1381
|
+
// for the writeup — storage.updateWorkItem mutates in place, so
|
|
1382
|
+
// reading item.status after the write yields newStatus and the
|
|
1383
|
+
// "Work item status updated" log reads like "X → X" for every
|
|
1384
|
+
// valid transition.
|
|
1385
|
+
const fromStatus = item.status;
|
|
949
1386
|
await this.storage.updateWorkItem(workItemId, (wi) => {
|
|
950
1387
|
wi.status = newStatus;
|
|
951
|
-
//
|
|
1388
|
+
// P1 1ffffb84 component (b): mirror the transitionStatus
|
|
1389
|
+
// atomic-timestamp contract so the older updateItemStatus path
|
|
1390
|
+
// never produces a status↔completedAt mismatch either. See
|
|
1391
|
+
// transitionStatus below for the full root-cause writeup
|
|
1392
|
+
// (b7840fe8 partial-write bug).
|
|
952
1393
|
if (newStatus === 'running') {
|
|
953
1394
|
wi.startedAt = new Date().toISOString();
|
|
1395
|
+
wi.completedAt = undefined;
|
|
954
1396
|
}
|
|
955
1397
|
else if (newStatus === 'done' || newStatus === 'failed') {
|
|
956
1398
|
wi.completedAt = new Date().toISOString();
|
|
957
1399
|
}
|
|
1400
|
+
else {
|
|
1401
|
+
wi.completedAt = undefined;
|
|
1402
|
+
}
|
|
1403
|
+
// Persist the cancellation reason atomically with the status
|
|
1404
|
+
// flip so the activity timeline always has the explanation
|
|
1405
|
+
// alongside the terminal state. Only set on transitions INTO
|
|
1406
|
+
// cancelled — leaving the field untouched on non-cancel paths
|
|
1407
|
+
// preserves any earlier value (e.g. requeued after a manual
|
|
1408
|
+
// cancel-then-revive flow).
|
|
1409
|
+
if (newStatus === 'cancelled' && typeof reason === 'string' && reason.length > 0) {
|
|
1410
|
+
wi.cancelReason = reason;
|
|
1411
|
+
}
|
|
1412
|
+
// Mirror for blocked transitions (Steve 2026-05-15 dogfood): the
|
|
1413
|
+
// UI showed `Blocked` badge with an empty activity timeline.
|
|
1414
|
+
// Sources include reconciler agent-inactive correction, mission
|
|
1415
|
+
// executor dependency-blocked creation (not via this path),
|
|
1416
|
+
// explicit blockItem.
|
|
1417
|
+
if (newStatus === 'blocked' && typeof reason === 'string' && reason.length > 0) {
|
|
1418
|
+
wi.blockedReason = reason;
|
|
1419
|
+
}
|
|
958
1420
|
});
|
|
959
1421
|
this.logger.info('Work item status updated', {
|
|
960
1422
|
workItemId,
|
|
961
|
-
from:
|
|
1423
|
+
from: fromStatus,
|
|
962
1424
|
to: newStatus,
|
|
963
1425
|
actorRole,
|
|
1426
|
+
...(newStatus === 'cancelled' && reason ? { reason } : {}),
|
|
1427
|
+
...(newStatus === 'blocked' && reason ? { reason } : {}),
|
|
964
1428
|
});
|
|
1429
|
+
// Cascade signal — let RequestCascadeSubscriber close the parent
|
|
1430
|
+
// Request without waiting for the heartbeat catch. See
|
|
1431
|
+
// {@link publishTaskCancelled} for the full bug writeup.
|
|
1432
|
+
if (newStatus === 'cancelled') {
|
|
1433
|
+
const post = await this.storage.findWorkItem(workItemId);
|
|
1434
|
+
if (post)
|
|
1435
|
+
this.publishTaskCancelled(post, fromStatus);
|
|
1436
|
+
}
|
|
965
1437
|
}
|
|
966
1438
|
/**
|
|
967
1439
|
* Public guarded transition helper — TRANS-1's canonical entrypoint.
|
|
@@ -1005,11 +1477,35 @@ export class TaskPoolService {
|
|
|
1005
1477
|
* });
|
|
1006
1478
|
* ```
|
|
1007
1479
|
*/
|
|
1008
|
-
async transitionStatus(workItemId, newStatus, actorRole, mutator
|
|
1480
|
+
async transitionStatus(workItemId, newStatus, actorRole, mutator,
|
|
1481
|
+
/**
|
|
1482
|
+
* Optional human-readable reason. Routed by target status:
|
|
1483
|
+
* - `cancelled` → persisted on `WorkItem.cancelReason`
|
|
1484
|
+
* - `blocked` → persisted on `WorkItem.blockedReason`
|
|
1485
|
+
* (Steve 2026-05-15 dogfood)
|
|
1486
|
+
* - other → ignored
|
|
1487
|
+
* Applied BEFORE the caller's mutator runs so the mutator may
|
|
1488
|
+
* override if needed. Surfaces in the activity timeline so the
|
|
1489
|
+
* Blocked/Cancelled badges aren't opaque ("WorkItem was X.").
|
|
1490
|
+
* Parameter name retained as `cancelReason` for source compat;
|
|
1491
|
+
* effectively a generic transition reason.
|
|
1492
|
+
*/
|
|
1493
|
+
cancelReason) {
|
|
1009
1494
|
const item = await this.storage.findWorkItem(workItemId);
|
|
1010
1495
|
if (!item) {
|
|
1011
1496
|
throw new Error(`WorkItem not found: ${workItemId}`);
|
|
1012
1497
|
}
|
|
1498
|
+
// Idempotent same-state no-op (matches updateItemStatus behavior).
|
|
1499
|
+
// Return the current item so callers chaining on the result don't
|
|
1500
|
+
// see a spurious null. Steve 2026-05-15.
|
|
1501
|
+
if (item.status === newStatus) {
|
|
1502
|
+
this.logger.debug('Skipped idempotent same-state transition', {
|
|
1503
|
+
workItemId,
|
|
1504
|
+
status: newStatus,
|
|
1505
|
+
actorRole,
|
|
1506
|
+
});
|
|
1507
|
+
return item;
|
|
1508
|
+
}
|
|
1013
1509
|
if (!isValidWorkItemTransition(item.status, newStatus)) {
|
|
1014
1510
|
throw new Error(`Invalid status transition for WorkItem ${workItemId}: ${item.status} → ${newStatus}`);
|
|
1015
1511
|
}
|
|
@@ -1017,12 +1513,38 @@ export class TaskPoolService {
|
|
|
1017
1513
|
throw new Error(`Forbidden transition for WorkItem ${workItemId}: actor='${actorRole}' ` +
|
|
1018
1514
|
`not permitted to perform ${item.status} → ${newStatus}.`);
|
|
1019
1515
|
}
|
|
1516
|
+
// Capture the pre-write status into a local. `storage.updateWorkItem`
|
|
1517
|
+
// mutates the same in-memory object that `findWorkItem` returned, so
|
|
1518
|
+
// reading `item.status` AFTER the write yields the new value — which
|
|
1519
|
+
// makes the "transitioned X → Y" log read like "Y → Y" and hides the
|
|
1520
|
+
// real `previousValue` on the task:cancelled EventBus payload.
|
|
1521
|
+
// (Steve 2026-05-15 dogfood: `from:cancelled, to:cancelled` showing
|
|
1522
|
+
// for transitions that were actually `queued → cancelled`.)
|
|
1523
|
+
const fromStatus = item.status;
|
|
1020
1524
|
const ok = await this.storage.updateWorkItem(workItemId, (wi) => {
|
|
1021
1525
|
wi.status = newStatus;
|
|
1022
|
-
//
|
|
1023
|
-
//
|
|
1526
|
+
// Atomic timestamp side-effects enforce the invariant
|
|
1527
|
+
// `completedAt is set IFF status ∈ {done, failed, verified,
|
|
1528
|
+
// done_by_worker, rejected}`.
|
|
1529
|
+
//
|
|
1530
|
+
// P1 1ffffb84 component (b): the prior code only SET completedAt
|
|
1531
|
+
// on terminal transitions; non-terminal landings (queued, running,
|
|
1532
|
+
// blocked, scheduled, proposed, accepted, escalated, cancelled)
|
|
1533
|
+
// inherited a stale completedAt from a prior terminal trip via
|
|
1534
|
+
// - `rejected → queued` (TL re-queue)
|
|
1535
|
+
// - `failed → queued` (BRIDGE-1 retry)
|
|
1536
|
+
// - `running → queued` (releaseBack abandon path)
|
|
1537
|
+
// WorkItem b7840fe8 reproduced the bug — status=queued AND
|
|
1538
|
+
// completedAt=2026-05-06T00:47:59Z AND retryCount=1 AND no
|
|
1539
|
+
// startedAt/target, which is the exact fingerprint of a
|
|
1540
|
+
// `failed → queued` retry leaving stale completedAt. The else
|
|
1541
|
+
// branch below closes the gap atomically with the status flip.
|
|
1024
1542
|
if (newStatus === 'running') {
|
|
1025
1543
|
wi.startedAt = new Date().toISOString();
|
|
1544
|
+
// Resuming work — clear stale completedAt from a prior failed/
|
|
1545
|
+
// rejected attempt so a re-claim never carries forward a
|
|
1546
|
+
// completion timestamp from an earlier terminal trip.
|
|
1547
|
+
wi.completedAt = undefined;
|
|
1026
1548
|
}
|
|
1027
1549
|
else if (newStatus === 'done' ||
|
|
1028
1550
|
newStatus === 'failed' ||
|
|
@@ -1031,6 +1553,25 @@ export class TaskPoolService {
|
|
|
1031
1553
|
newStatus === 'rejected') {
|
|
1032
1554
|
wi.completedAt = new Date().toISOString();
|
|
1033
1555
|
}
|
|
1556
|
+
else {
|
|
1557
|
+
// Non-terminal-with-result landings: clear completedAt so the
|
|
1558
|
+
// invariant holds. (`cancelled` is technically terminal but
|
|
1559
|
+
// historically never carried completedAt — preserving that
|
|
1560
|
+
// shape here to keep the change minimal; the `cancelled`
|
|
1561
|
+
// semantics are out of scope.)
|
|
1562
|
+
wi.completedAt = undefined;
|
|
1563
|
+
}
|
|
1564
|
+
// Apply cancelReason BEFORE the user-supplied mutator so the
|
|
1565
|
+
// mutator wins if the caller wants to override (rare). The
|
|
1566
|
+
// parameter is named `cancelReason` for source-compat but is
|
|
1567
|
+
// routed to cancelReason OR blockedReason based on newStatus
|
|
1568
|
+
// (Steve 2026-05-15).
|
|
1569
|
+
if (newStatus === 'cancelled' && typeof cancelReason === 'string' && cancelReason.length > 0) {
|
|
1570
|
+
wi.cancelReason = cancelReason;
|
|
1571
|
+
}
|
|
1572
|
+
if (newStatus === 'blocked' && typeof cancelReason === 'string' && cancelReason.length > 0) {
|
|
1573
|
+
wi.blockedReason = cancelReason;
|
|
1574
|
+
}
|
|
1034
1575
|
if (mutator)
|
|
1035
1576
|
mutator(wi);
|
|
1036
1577
|
});
|
|
@@ -1042,7 +1583,7 @@ export class TaskPoolService {
|
|
|
1042
1583
|
}
|
|
1043
1584
|
this.logger.info('WorkItem transitioned', {
|
|
1044
1585
|
workItemId,
|
|
1045
|
-
from:
|
|
1586
|
+
from: fromStatus,
|
|
1046
1587
|
to: newStatus,
|
|
1047
1588
|
actorRole,
|
|
1048
1589
|
});
|
|
@@ -1050,7 +1591,14 @@ export class TaskPoolService {
|
|
|
1050
1591
|
// resolved value rather than re-fetching. Coerce `undefined` (item
|
|
1051
1592
|
// removed during the race window) to `null` to match the declared
|
|
1052
1593
|
// return type.
|
|
1053
|
-
|
|
1594
|
+
const post = (await this.storage.findWorkItem(workItemId)) ?? null;
|
|
1595
|
+
// Cascade signal — let RequestCascadeSubscriber close the parent
|
|
1596
|
+
// Request without waiting for the heartbeat catch. See
|
|
1597
|
+
// {@link publishTaskCancelled} for the full bug writeup.
|
|
1598
|
+
if (newStatus === 'cancelled' && post) {
|
|
1599
|
+
this.publishTaskCancelled(post, fromStatus);
|
|
1600
|
+
}
|
|
1601
|
+
return post;
|
|
1054
1602
|
}
|
|
1055
1603
|
/**
|
|
1056
1604
|
* Update token usage and cost on a WorkItem.
|