crewly 1.14.0 → 1.15.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/README.md +28 -0
- package/config/constants.ts +57 -0
- package/config/index.ts +6 -2
- package/config/roles/architect/soul.md +31 -0
- package/config/roles/auditor/soul.md +30 -0
- package/config/roles/backend-developer/soul.md +30 -0
- package/config/roles/content-strategist/soul.md +29 -0
- package/config/roles/designer/soul.md +30 -0
- package/config/roles/developer/soul.md +4 -1
- package/config/roles/frontend-developer/soul.md +28 -0
- package/config/roles/fullstack-dev/soul.md +28 -0
- package/config/roles/generalist/soul.md +28 -0
- package/config/roles/ops/soul.md +31 -0
- package/config/roles/orchestrator/fragments/lifecycle.md +2 -22
- package/config/roles/orchestrator/fragments/recovery.md +1 -1
- package/config/roles/orchestrator/prompt.md +18 -49
- package/config/roles/orchestrator/soul.md +2 -1
- package/config/roles/product-manager/prompt.md +1 -1
- package/config/roles/product-manager/soul.md +30 -0
- package/config/roles/qa/soul.md +31 -0
- package/config/roles/qa-engineer/soul.md +31 -0
- package/config/roles/researcher/soul.md +4 -1
- package/config/roles/sales/soul.md +30 -0
- package/config/roles/support/soul.md +30 -0
- package/config/roles/team-leader/prompt.md +1 -1
- package/config/roles/team-leader/soul.md +32 -0
- package/config/roles/tpm/soul.md +31 -0
- package/config/roles/ux-designer/soul.md +31 -0
- package/config/skills/_common/lib.sh +124 -2
- package/config/skills/_common/lib.test.sh +68 -1
- package/config/skills/orchestrator/delegate-task/SKILL.md +17 -21
- package/config/skills/orchestrator/delegate-task/execute.sh +18 -9
- package/config/skills/orchestrator/delegate-task/execute.test.sh +1 -1
- package/config/skills/orchestrator/wiki-migrate/SKILL.md +33 -3
- package/config/skills/orchestrator/wiki-migrate/compact.jq +36 -0
- package/config/skills/orchestrator/wiki-migrate/execute.sh +35 -5
- package/config/skills/orchestrator/wiki-migrate/execute.test.sh +124 -0
- package/config/skills/team-leader/verify-output/execute.sh +14 -6
- package/config/skills/team-leader/verify-output/execute.test.sh +117 -0
- package/dist/backend/backend/src/constants.d.ts +100 -0
- package/dist/backend/backend/src/constants.d.ts.map +1 -1
- package/dist/backend/backend/src/constants.js +88 -1
- package/dist/backend/backend/src/constants.js.map +1 -1
- package/dist/backend/backend/src/controllers/mission/mission-policy.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/mission/mission-policy.controller.js +4 -6
- package/dist/backend/backend/src/controllers/mission/mission-policy.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/mission/mission-policy.routes.d.ts +10 -0
- package/dist/backend/backend/src/controllers/mission/mission-policy.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/mission/mission-policy.routes.js +78 -16
- package/dist/backend/backend/src/controllers/mission/mission-policy.routes.js.map +1 -1
- package/dist/backend/backend/src/controllers/orchestrator/orchestrator.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/orchestrator/orchestrator.controller.js +11 -1
- package/dist/backend/backend/src/controllers/orchestrator/orchestrator.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.d.ts +14 -0
- 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 +59 -0
- 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 +9 -0
- 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 +14 -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 +16 -1
- package/dist/backend/backend/src/controllers/team/team.controller.js.map +1 -1
- package/dist/backend/backend/src/index.d.ts +12 -0
- package/dist/backend/backend/src/index.d.ts.map +1 -1
- package/dist/backend/backend/src/index.js +195 -9
- package/dist/backend/backend/src/index.js.map +1 -1
- package/dist/backend/backend/src/middleware/api-token.middleware.d.ts +139 -0
- package/dist/backend/backend/src/middleware/api-token.middleware.d.ts.map +1 -0
- package/dist/backend/backend/src/middleware/api-token.middleware.js +301 -0
- package/dist/backend/backend/src/middleware/api-token.middleware.js.map +1 -0
- package/dist/backend/backend/src/routes/api.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/routes/api.routes.js +3 -1
- package/dist/backend/backend/src/routes/api.routes.js.map +1 -1
- package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts +68 -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 +280 -10
- package/dist/backend/backend/src/services/agent/agent-registration.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/claude-runtime.service.d.ts +7 -0
- package/dist/backend/backend/src/services/agent/claude-runtime.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/claude-runtime.service.js +10 -1
- package/dist/backend/backend/src/services/agent/claude-runtime.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/codex-runtime.service.d.ts +8 -0
- package/dist/backend/backend/src/services/agent/codex-runtime.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/codex-runtime.service.js +11 -1
- package/dist/backend/backend/src/services/agent/codex-runtime.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.d.ts +36 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.js +66 -9
- package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/gemini-runtime.service.d.ts +7 -0
- package/dist/backend/backend/src/services/agent/gemini-runtime.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/gemini-runtime.service.js +10 -1
- package/dist/backend/backend/src/services/agent/gemini-runtime.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/oauth-relogin-monitor.service.d.ts +197 -0
- package/dist/backend/backend/src/services/agent/oauth-relogin-monitor.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/oauth-relogin-monitor.service.js +422 -3
- package/dist/backend/backend/src/services/agent/oauth-relogin-monitor.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/runtime-agent.service.abstract.d.ts +27 -0
- package/dist/backend/backend/src/services/agent/runtime-agent.service.abstract.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/runtime-agent.service.abstract.js +50 -1
- package/dist/backend/backend/src/services/agent/runtime-agent.service.abstract.js.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/index.d.ts +1 -1
- 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 +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/index.js.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/prompt-assembly.service.d.ts +35 -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 +73 -2
- 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 +42 -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 +33 -0
- 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/recovery.module.d.ts.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/recovery.module.js +13 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/recovery.module.js.map +1 -1
- package/dist/backend/backend/src/services/backup/backup-archive.service.d.ts +26 -2
- package/dist/backend/backend/src/services/backup/backup-archive.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/backup/backup-archive.service.js +91 -10
- package/dist/backend/backend/src/services/backup/backup-archive.service.js.map +1 -1
- package/dist/backend/backend/src/services/backup/backup-restore.service.d.ts +15 -2
- package/dist/backend/backend/src/services/backup/backup-restore.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/backup/backup-restore.service.js +100 -21
- package/dist/backend/backend/src/services/backup/backup-restore.service.js.map +1 -1
- package/dist/backend/backend/src/services/backup/backup.types.d.ts +85 -2
- package/dist/backend/backend/src/services/backup/backup.types.d.ts.map +1 -1
- package/dist/backend/backend/src/services/backup/backup.types.js +21 -0
- package/dist/backend/backend/src/services/backup/backup.types.js.map +1 -1
- package/dist/backend/backend/src/services/backup/project-file-filter.d.ts +35 -0
- package/dist/backend/backend/src/services/backup/project-file-filter.d.ts.map +1 -0
- package/dist/backend/backend/src/services/backup/project-file-filter.js +90 -0
- package/dist/backend/backend/src/services/backup/project-file-filter.js.map +1 -0
- package/dist/backend/backend/src/services/budget/team-budget-gate.service.d.ts +165 -0
- package/dist/backend/backend/src/services/budget/team-budget-gate.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/budget/team-budget-gate.service.js +364 -0
- package/dist/backend/backend/src/services/budget/team-budget-gate.service.js.map +1 -0
- package/dist/backend/backend/src/services/chat-v2/chat-v2.service.d.ts +29 -0
- package/dist/backend/backend/src/services/chat-v2/chat-v2.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/chat-v2.service.js +42 -0
- package/dist/backend/backend/src/services/chat-v2/chat-v2.service.js.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.d.ts +16 -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 +22 -0
- package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.js.map +1 -1
- package/dist/backend/backend/src/services/core/api-token.service.d.ts +78 -0
- package/dist/backend/backend/src/services/core/api-token.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/core/api-token.service.js +149 -0
- package/dist/backend/backend/src/services/core/api-token.service.js.map +1 -0
- package/dist/backend/backend/src/services/core/logger.service.d.ts +10 -1
- package/dist/backend/backend/src/services/core/logger.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/core/logger.service.js +18 -3
- package/dist/backend/backend/src/services/core/logger.service.js.map +1 -1
- package/dist/backend/backend/src/services/core/storage.service.d.ts +11 -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 +34 -0
- package/dist/backend/backend/src/services/core/storage.service.js.map +1 -1
- package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.d.ts +7 -1
- package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.js +29 -7
- package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.js.map +1 -1
- package/dist/backend/backend/src/services/hierarchy/hierarchy-escalation-monitor.service.d.ts +140 -0
- package/dist/backend/backend/src/services/hierarchy/hierarchy-escalation-monitor.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/hierarchy/hierarchy-escalation-monitor.service.js +346 -0
- package/dist/backend/backend/src/services/hierarchy/hierarchy-escalation-monitor.service.js.map +1 -0
- package/dist/backend/backend/src/services/monitoring/token-usage.service.d.ts +27 -3
- package/dist/backend/backend/src/services/monitoring/token-usage.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/monitoring/token-usage.service.js +42 -7
- package/dist/backend/backend/src/services/monitoring/token-usage.service.js.map +1 -1
- package/dist/backend/backend/src/services/orc/orc-delivery-enforcer.service.d.ts +47 -0
- package/dist/backend/backend/src/services/orc/orc-delivery-enforcer.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/orc/orc-delivery-enforcer.service.js +67 -1
- package/dist/backend/backend/src/services/orc/orc-delivery-enforcer.service.js.map +1 -1
- package/dist/backend/backend/src/services/reconciler/reconcile-rules.d.ts +22 -15
- package/dist/backend/backend/src/services/reconciler/reconcile-rules.d.ts.map +1 -1
- package/dist/backend/backend/src/services/reconciler/reconcile-rules.js +24 -15
- package/dist/backend/backend/src/services/reconciler/reconcile-rules.js.map +1 -1
- package/dist/backend/backend/src/services/session/pty/pty-session.d.ts +7 -1
- package/dist/backend/backend/src/services/session/pty/pty-session.d.ts.map +1 -1
- package/dist/backend/backend/src/services/session/pty/pty-session.js +9 -3
- package/dist/backend/backend/src/services/session/pty/pty-session.js.map +1 -1
- package/dist/backend/backend/src/services/session/session-handoff.service.d.ts +27 -0
- 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 +110 -22
- package/dist/backend/backend/src/services/session/session-handoff.service.js.map +1 -1
- 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 +7 -1
- package/dist/backend/backend/src/services/skill/skill-catalog.service.js.map +1 -1
- package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts +52 -0
- 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 +132 -6
- package/dist/backend/backend/src/services/task-pool/task-pool.service.js.map +1 -1
- package/dist/backend/backend/src/services/v3/escalation-boot.d.ts +87 -0
- package/dist/backend/backend/src/services/v3/escalation-boot.d.ts.map +1 -0
- package/dist/backend/backend/src/services/v3/escalation-boot.js +128 -0
- package/dist/backend/backend/src/services/v3/escalation-boot.js.map +1 -0
- package/dist/backend/backend/src/services/v3/escalation.service.d.ts +1 -1
- package/dist/backend/backend/src/services/v3/escalation.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/escalation.service.js +4 -4
- package/dist/backend/backend/src/services/v3/escalation.service.js.map +1 -1
- package/dist/backend/backend/src/services/v3/kr-completion.subscriber.d.ts +118 -0
- package/dist/backend/backend/src/services/v3/kr-completion.subscriber.d.ts.map +1 -0
- package/dist/backend/backend/src/services/v3/kr-completion.subscriber.js +277 -0
- package/dist/backend/backend/src/services/v3/kr-completion.subscriber.js.map +1 -0
- package/dist/backend/backend/src/services/v3/kr-tracking.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/kr-tracking.service.js +3 -6
- package/dist/backend/backend/src/services/v3/kr-tracking.service.js.map +1 -1
- package/dist/backend/backend/src/services/v3/mission-executor.service.d.ts +5 -0
- 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 +36 -0
- package/dist/backend/backend/src/services/v3/mission-executor.service.js.map +1 -1
- package/dist/backend/backend/src/services/v3/mission-paths.d.ts +69 -0
- package/dist/backend/backend/src/services/v3/mission-paths.d.ts.map +1 -0
- package/dist/backend/backend/src/services/v3/mission-paths.js +92 -0
- package/dist/backend/backend/src/services/v3/mission-paths.js.map +1 -0
- package/dist/backend/backend/src/services/v3/mission-period.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/mission-period.service.js +1 -12
- package/dist/backend/backend/src/services/v3/mission-period.service.js.map +1 -1
- package/dist/backend/backend/src/services/v3/mission-reminder.service.d.ts +74 -2
- package/dist/backend/backend/src/services/v3/mission-reminder.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/mission-reminder.service.js +251 -9
- package/dist/backend/backend/src/services/v3/mission-reminder.service.js.map +1 -1
- package/dist/backend/backend/src/services/v3/okr-cascade.service.d.ts +6 -4
- package/dist/backend/backend/src/services/v3/okr-cascade.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/okr-cascade.service.js +11 -10
- package/dist/backend/backend/src/services/v3/okr-cascade.service.js.map +1 -1
- package/dist/backend/backend/src/services/v3/okr-review.service.d.ts +24 -0
- package/dist/backend/backend/src/services/v3/okr-review.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/okr-review.service.js +63 -3
- package/dist/backend/backend/src/services/v3/okr-review.service.js.map +1 -1
- package/dist/backend/backend/src/services/v3/tl-auto-verify.service.d.ts +17 -0
- package/dist/backend/backend/src/services/v3/tl-auto-verify.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/tl-auto-verify.service.js +62 -13
- package/dist/backend/backend/src/services/v3/tl-auto-verify.service.js.map +1 -1
- package/dist/backend/backend/src/services/v3/v3-data.service.d.ts +6 -2
- 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 +14 -9
- package/dist/backend/backend/src/services/v3/v3-data.service.js.map +1 -1
- package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.d.ts +14 -0
- package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.js +31 -0
- package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.js.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-reflect-trigger.service.d.ts +21 -0
- package/dist/backend/backend/src/services/wiki/wiki-reflect-trigger.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-reflect-trigger.service.js +53 -3
- package/dist/backend/backend/src/services/wiki/wiki-reflect-trigger.service.js.map +1 -1
- package/dist/backend/backend/src/types/event-bus.types.d.ts +4 -2
- package/dist/backend/backend/src/types/event-bus.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/event-bus.types.js +15 -0
- package/dist/backend/backend/src/types/event-bus.types.js.map +1 -1
- package/dist/backend/backend/src/types/index.d.ts +16 -0
- package/dist/backend/backend/src/types/index.d.ts.map +1 -1
- package/dist/backend/backend/src/types/index.js.map +1 -1
- package/dist/backend/backend/src/types/v2/index.d.ts +1 -1
- package/dist/backend/backend/src/types/v2/index.d.ts.map +1 -1
- package/dist/backend/backend/src/types/v2/index.js +1 -1
- package/dist/backend/backend/src/types/v2/index.js.map +1 -1
- package/dist/backend/backend/src/types/v2/mission.types.d.ts +41 -0
- package/dist/backend/backend/src/types/v2/mission.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/v2/mission.types.js +29 -0
- package/dist/backend/backend/src/types/v2/mission.types.js.map +1 -1
- package/dist/backend/backend/src/utils/network-exposure.utils.d.ts +67 -0
- package/dist/backend/backend/src/utils/network-exposure.utils.d.ts.map +1 -0
- package/dist/backend/backend/src/utils/network-exposure.utils.js +92 -0
- package/dist/backend/backend/src/utils/network-exposure.utils.js.map +1 -0
- package/dist/backend/build-info.json +2 -2
- package/dist/backend/config/constants.d.ts +53 -0
- package/dist/backend/config/constants.d.ts.map +1 -1
- package/dist/backend/config/constants.js +54 -0
- package/dist/backend/config/constants.js.map +1 -1
- package/dist/backend/config/index.d.ts +2 -2
- package/dist/backend/config/index.d.ts.map +1 -1
- package/dist/backend/config/index.js +6 -6
- package/dist/backend/config/index.js.map +1 -1
- package/dist/cli/backend/src/constants.d.ts +100 -0
- package/dist/cli/backend/src/constants.d.ts.map +1 -1
- package/dist/cli/backend/src/constants.js +88 -1
- package/dist/cli/backend/src/constants.js.map +1 -1
- package/dist/cli/backend/src/services/agent/agent-registration.service.d.ts +68 -0
- package/dist/cli/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/agent/agent-registration.service.js +280 -10
- package/dist/cli/backend/src/services/agent/agent-registration.service.js.map +1 -1
- package/dist/cli/backend/src/services/agent/claude-runtime.service.d.ts +7 -0
- package/dist/cli/backend/src/services/agent/claude-runtime.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/agent/claude-runtime.service.js +10 -1
- package/dist/cli/backend/src/services/agent/claude-runtime.service.js.map +1 -1
- package/dist/cli/backend/src/services/agent/codex-runtime.service.d.ts +8 -0
- package/dist/cli/backend/src/services/agent/codex-runtime.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/agent/codex-runtime.service.js +11 -1
- package/dist/cli/backend/src/services/agent/codex-runtime.service.js.map +1 -1
- package/dist/cli/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.d.ts +36 -1
- package/dist/cli/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.js +66 -9
- package/dist/cli/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.js.map +1 -1
- package/dist/cli/backend/src/services/agent/gemini-runtime.service.d.ts +7 -0
- package/dist/cli/backend/src/services/agent/gemini-runtime.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/agent/gemini-runtime.service.js +10 -1
- package/dist/cli/backend/src/services/agent/gemini-runtime.service.js.map +1 -1
- package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.d.ts +197 -0
- package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.js +422 -3
- package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.js.map +1 -1
- package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.d.ts +27 -0
- package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.d.ts.map +1 -1
- package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.js +50 -1
- package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.js.map +1 -1
- package/dist/cli/backend/src/services/ai/prompt-modules/prompt-assembly.service.d.ts +35 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/prompt-assembly.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/ai/prompt-modules/prompt-assembly.service.js +73 -2
- package/dist/cli/backend/src/services/ai/prompt-modules/prompt-assembly.service.js.map +1 -1
- package/dist/cli/backend/src/services/ai/prompt-modules/prompt-module.interface.d.ts +42 -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 +33 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/prompt-module.interface.js.map +1 -1
- package/dist/cli/backend/src/services/ai/prompt-modules/recovery.module.d.ts.map +1 -1
- package/dist/cli/backend/src/services/ai/prompt-modules/recovery.module.js +13 -1
- package/dist/cli/backend/src/services/ai/prompt-modules/recovery.module.js.map +1 -1
- package/dist/cli/backend/src/services/backup/backup-archive.service.d.ts +26 -2
- package/dist/cli/backend/src/services/backup/backup-archive.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/backup/backup-archive.service.js +91 -10
- package/dist/cli/backend/src/services/backup/backup-archive.service.js.map +1 -1
- package/dist/cli/backend/src/services/backup/backup-restore.service.d.ts +15 -2
- package/dist/cli/backend/src/services/backup/backup-restore.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/backup/backup-restore.service.js +100 -21
- package/dist/cli/backend/src/services/backup/backup-restore.service.js.map +1 -1
- package/dist/cli/backend/src/services/backup/backup.types.d.ts +85 -2
- package/dist/cli/backend/src/services/backup/backup.types.d.ts.map +1 -1
- package/dist/cli/backend/src/services/backup/backup.types.js +21 -0
- package/dist/cli/backend/src/services/backup/backup.types.js.map +1 -1
- package/dist/cli/backend/src/services/backup/project-file-filter.d.ts +35 -0
- package/dist/cli/backend/src/services/backup/project-file-filter.d.ts.map +1 -0
- package/dist/cli/backend/src/services/backup/project-file-filter.js +90 -0
- package/dist/cli/backend/src/services/backup/project-file-filter.js.map +1 -0
- package/dist/cli/backend/src/services/budget/team-budget-gate.service.d.ts +165 -0
- package/dist/cli/backend/src/services/budget/team-budget-gate.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/budget/team-budget-gate.service.js +364 -0
- package/dist/cli/backend/src/services/budget/team-budget-gate.service.js.map +1 -0
- package/dist/cli/backend/src/services/chat-v2/chat-v2.service.d.ts +29 -0
- package/dist/cli/backend/src/services/chat-v2/chat-v2.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/chat-v2/chat-v2.service.js +42 -0
- package/dist/cli/backend/src/services/chat-v2/chat-v2.service.js.map +1 -1
- package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.d.ts +16 -0
- package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.d.ts.map +1 -1
- package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.js +22 -0
- package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.js.map +1 -1
- package/dist/cli/backend/src/services/core/api-token.service.d.ts +78 -0
- package/dist/cli/backend/src/services/core/api-token.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/core/api-token.service.js +149 -0
- package/dist/cli/backend/src/services/core/api-token.service.js.map +1 -0
- package/dist/cli/backend/src/services/core/logger.service.d.ts +10 -1
- package/dist/cli/backend/src/services/core/logger.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/core/logger.service.js +18 -3
- package/dist/cli/backend/src/services/core/logger.service.js.map +1 -1
- package/dist/cli/backend/src/services/core/storage.service.d.ts +11 -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 +34 -0
- package/dist/cli/backend/src/services/core/storage.service.js.map +1 -1
- package/dist/cli/backend/src/services/monitoring/token-usage.service.d.ts +27 -3
- package/dist/cli/backend/src/services/monitoring/token-usage.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/monitoring/token-usage.service.js +42 -7
- package/dist/cli/backend/src/services/monitoring/token-usage.service.js.map +1 -1
- package/dist/cli/backend/src/services/orc/orc-delivery-enforcer.service.d.ts +47 -0
- package/dist/cli/backend/src/services/orc/orc-delivery-enforcer.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/orc/orc-delivery-enforcer.service.js +67 -1
- package/dist/cli/backend/src/services/orc/orc-delivery-enforcer.service.js.map +1 -1
- package/dist/cli/backend/src/services/session/pty/pty-session.d.ts +7 -1
- package/dist/cli/backend/src/services/session/pty/pty-session.d.ts.map +1 -1
- package/dist/cli/backend/src/services/session/pty/pty-session.js +9 -3
- package/dist/cli/backend/src/services/session/pty/pty-session.js.map +1 -1
- package/dist/cli/backend/src/services/session/session-handoff.service.d.ts +27 -0
- package/dist/cli/backend/src/services/session/session-handoff.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/session/session-handoff.service.js +110 -22
- package/dist/cli/backend/src/services/session/session-handoff.service.js.map +1 -1
- package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts +52 -0
- 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 +132 -6
- package/dist/cli/backend/src/services/task-pool/task-pool.service.js.map +1 -1
- package/dist/cli/backend/src/services/v3/kr-tracking.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/v3/kr-tracking.service.js +3 -6
- package/dist/cli/backend/src/services/v3/kr-tracking.service.js.map +1 -1
- package/dist/cli/backend/src/services/v3/mission-executor.service.d.ts +5 -0
- package/dist/cli/backend/src/services/v3/mission-executor.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/v3/mission-executor.service.js +36 -0
- package/dist/cli/backend/src/services/v3/mission-executor.service.js.map +1 -1
- package/dist/cli/backend/src/services/v3/mission-paths.d.ts +69 -0
- package/dist/cli/backend/src/services/v3/mission-paths.d.ts.map +1 -0
- package/dist/cli/backend/src/services/v3/mission-paths.js +92 -0
- package/dist/cli/backend/src/services/v3/mission-paths.js.map +1 -0
- package/dist/cli/backend/src/services/v3/v3-data.service.d.ts +6 -2
- package/dist/cli/backend/src/services/v3/v3-data.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/v3/v3-data.service.js +14 -9
- package/dist/cli/backend/src/services/v3/v3-data.service.js.map +1 -1
- package/dist/cli/backend/src/types/event-bus.types.d.ts +4 -2
- package/dist/cli/backend/src/types/event-bus.types.d.ts.map +1 -1
- package/dist/cli/backend/src/types/event-bus.types.js +15 -0
- package/dist/cli/backend/src/types/event-bus.types.js.map +1 -1
- package/dist/cli/backend/src/types/index.d.ts +16 -0
- package/dist/cli/backend/src/types/index.d.ts.map +1 -1
- package/dist/cli/backend/src/types/index.js.map +1 -1
- package/dist/cli/backend/src/types/v2/index.d.ts +1 -1
- package/dist/cli/backend/src/types/v2/index.d.ts.map +1 -1
- package/dist/cli/backend/src/types/v2/index.js +1 -1
- package/dist/cli/backend/src/types/v2/index.js.map +1 -1
- package/dist/cli/backend/src/types/v2/mission.types.d.ts +41 -0
- package/dist/cli/backend/src/types/v2/mission.types.d.ts.map +1 -1
- package/dist/cli/backend/src/types/v2/mission.types.js +29 -0
- package/dist/cli/backend/src/types/v2/mission.types.js.map +1 -1
- package/dist/cli/cli/src/commands/backup.d.ts +25 -0
- package/dist/cli/cli/src/commands/backup.d.ts.map +1 -1
- package/dist/cli/cli/src/commands/backup.js +120 -6
- package/dist/cli/cli/src/commands/backup.js.map +1 -1
- package/dist/cli/cli/src/commands/doctor.d.ts +58 -0
- package/dist/cli/cli/src/commands/doctor.d.ts.map +1 -0
- package/dist/cli/cli/src/commands/doctor.js +163 -0
- package/dist/cli/cli/src/commands/doctor.js.map +1 -0
- package/dist/cli/cli/src/commands/service.d.ts +68 -11
- package/dist/cli/cli/src/commands/service.d.ts.map +1 -1
- package/dist/cli/cli/src/commands/service.js +183 -51
- package/dist/cli/cli/src/commands/service.js.map +1 -1
- package/dist/cli/cli/src/commands/token.d.ts +53 -0
- package/dist/cli/cli/src/commands/token.d.ts.map +1 -0
- package/dist/cli/cli/src/commands/token.js +70 -0
- package/dist/cli/cli/src/commands/token.js.map +1 -0
- package/dist/cli/cli/src/index.js +40 -5
- package/dist/cli/cli/src/index.js.map +1 -1
- package/dist/cli/cli/src/scripts/check-native-toolchain.d.ts +21 -0
- package/dist/cli/cli/src/scripts/check-native-toolchain.d.ts.map +1 -0
- package/dist/cli/cli/src/scripts/check-native-toolchain.js +40 -0
- package/dist/cli/cli/src/scripts/check-native-toolchain.js.map +1 -0
- package/dist/cli/cli/src/utils/native-toolchain.d.ts +111 -0
- package/dist/cli/cli/src/utils/native-toolchain.d.ts.map +1 -0
- package/dist/cli/cli/src/utils/native-toolchain.js +146 -0
- package/dist/cli/cli/src/utils/native-toolchain.js.map +1 -0
- package/dist/cli/cli/src/utils/package-root.d.ts +55 -0
- package/dist/cli/cli/src/utils/package-root.d.ts.map +1 -0
- package/dist/cli/cli/src/utils/package-root.js +107 -0
- package/dist/cli/cli/src/utils/package-root.js.map +1 -0
- package/dist/cli/cli/src/utils/version-check.d.ts +18 -2
- package/dist/cli/cli/src/utils/version-check.d.ts.map +1 -1
- package/dist/cli/cli/src/utils/version-check.js +51 -4
- package/dist/cli/cli/src/utils/version-check.js.map +1 -1
- package/dist/cli/config/constants.d.ts +53 -0
- package/dist/cli/config/constants.d.ts.map +1 -1
- package/dist/cli/config/constants.js +54 -0
- package/dist/cli/config/constants.js.map +1 -1
- package/dist/cli/config/index.d.ts +2 -2
- package/dist/cli/config/index.d.ts.map +1 -1
- package/dist/cli/config/index.js +6 -6
- package/dist/cli/config/index.js.map +1 -1
- package/frontend/dist/assets/index-203224f9.js +4961 -0
- package/frontend/dist/assets/index-dcaf6c88.css +42 -0
- package/frontend/dist/index.html +2 -2
- package/package.json +3 -2
- package/config/constants.d.ts.map +0 -1
- package/config/index.d.ts.map +0 -1
- package/frontend/dist/assets/index-190a957f.js +0 -4961
- package/frontend/dist/assets/index-88feb412.css +0 -42
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Escalation Boot
|
|
3
|
+
*
|
|
4
|
+
* Production wiring for {@link EscalationService}. The service (evaluate
|
|
5
|
+
* every mission's `policy.escalationRules` every 5 minutes → notify /
|
|
6
|
+
* pause / block) was fully implemented but never instantiated, so the
|
|
7
|
+
* escalation rules on every policy template were dead configuration.
|
|
8
|
+
*
|
|
9
|
+
* This module keeps the boot logic out of `index.ts` so it can be unit
|
|
10
|
+
* tested: env gating, the owner-facing `[ESCALATION]` notification handler,
|
|
11
|
+
* and the "no missions ⇒ no-op" property.
|
|
12
|
+
*
|
|
13
|
+
* Env:
|
|
14
|
+
* `CREWLY_ESCALATION_ENABLED=false` — do not start the service
|
|
15
|
+
* anything else (or unset) — start it (default)
|
|
16
|
+
*
|
|
17
|
+
* @module services/v3/escalation-boot
|
|
18
|
+
*/
|
|
19
|
+
import { EscalationService, type EscalationActionHandler } from './escalation.service.js';
|
|
20
|
+
import type { Mission, EscalationRule } from '../../types/v2/mission.types.js';
|
|
21
|
+
import type { ComponentLogger } from '../core/logger.service.js';
|
|
22
|
+
import { MESSAGE_SOURCES } from '../../constants.js';
|
|
23
|
+
/** Env var that disables the escalation loop when set to `'false'`. */
|
|
24
|
+
export declare const ESCALATION_ENABLED_ENV = "CREWLY_ESCALATION_ENABLED";
|
|
25
|
+
/** Conversation id stamped on owner-facing escalation messages. */
|
|
26
|
+
export declare const ESCALATION_CONVERSATION_ID = "system_escalation";
|
|
27
|
+
/** Envelope prefix the orchestrator prompt recognises for policy escalations. */
|
|
28
|
+
export declare const ESCALATION_ENVELOPE_PREFIX = "[ESCALATION]";
|
|
29
|
+
/** Minimal MessageQueueService surface used to reach the orchestrator. */
|
|
30
|
+
export interface EscalationMessageQueueLike {
|
|
31
|
+
enqueue(input: {
|
|
32
|
+
content: string;
|
|
33
|
+
conversationId: string;
|
|
34
|
+
source: typeof MESSAGE_SOURCES.SYSTEM_EVENT;
|
|
35
|
+
targetSession?: string;
|
|
36
|
+
sourceMetadata?: Record<string, unknown>;
|
|
37
|
+
}): unknown;
|
|
38
|
+
}
|
|
39
|
+
/** Dependencies for {@link bootEscalationService}. */
|
|
40
|
+
export interface EscalationBootDependencies {
|
|
41
|
+
/** Queue used to surface escalations to the orchestrator (and thus the owner). */
|
|
42
|
+
messageQueue: EscalationMessageQueueLike;
|
|
43
|
+
logger: ComponentLogger;
|
|
44
|
+
/** Project root override (defaults to the shared missions resolver's root). */
|
|
45
|
+
projectPath?: string;
|
|
46
|
+
/** Test seam — defaults to `new EscalationService(projectPath)`. */
|
|
47
|
+
createService?: (projectPath: string) => EscalationService;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Whether the escalation loop should start. Only the literal string
|
|
51
|
+
* `'false'` disables it — every other value (including unset) enables.
|
|
52
|
+
*
|
|
53
|
+
* @returns `true` when the service should be booted
|
|
54
|
+
*/
|
|
55
|
+
export declare function isEscalationEnabled(): boolean;
|
|
56
|
+
/**
|
|
57
|
+
* Build the owner-facing envelope for a triggered escalation rule.
|
|
58
|
+
*
|
|
59
|
+
* @param mission - The escalated mission
|
|
60
|
+
* @param rule - The rule that fired
|
|
61
|
+
* @param action - The action taken
|
|
62
|
+
* @returns One-line `[ESCALATION]` message for the orchestrator queue
|
|
63
|
+
*/
|
|
64
|
+
export declare function formatEscalationEnvelope(mission: Mission, rule: EscalationRule, action: 'notify' | 'pause' | 'block'): string;
|
|
65
|
+
/**
|
|
66
|
+
* Action handler that surfaces every triggered rule to the orchestrator's
|
|
67
|
+
* chat queue as a `[ESCALATION]` system event. The built-in `pause`
|
|
68
|
+
* behaviour (blocking the mission's WorkItems) stays inside
|
|
69
|
+
* {@link EscalationService}; this handler is purely the notification leg.
|
|
70
|
+
*
|
|
71
|
+
* @param deps - Queue + logger
|
|
72
|
+
* @returns Handler suitable for {@link EscalationService.setActionHandler}
|
|
73
|
+
*/
|
|
74
|
+
export declare function createEscalationNotifier(deps: Pick<EscalationBootDependencies, 'messageQueue' | 'logger'>): EscalationActionHandler;
|
|
75
|
+
/**
|
|
76
|
+
* Boot the escalation loop if enabled. Never throws — a failure to start
|
|
77
|
+
* is logged and `null` is returned so the backend keeps booting.
|
|
78
|
+
*
|
|
79
|
+
* Must be called AFTER the TriggerEngine action handler has been wired in
|
|
80
|
+
* `index.ts`: `EscalationService.start()` wraps whatever handler is
|
|
81
|
+
* currently installed and delegates non-escalation triggers to it.
|
|
82
|
+
*
|
|
83
|
+
* @param deps - Boot dependencies
|
|
84
|
+
* @returns The started service, or `null` when disabled / failed
|
|
85
|
+
*/
|
|
86
|
+
export declare function bootEscalationService(deps: EscalationBootDependencies): Promise<EscalationService | null>;
|
|
87
|
+
//# sourceMappingURL=escalation-boot.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"escalation-boot.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/v3/escalation-boot.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,iBAAiB,EAAE,KAAK,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAE1F,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAC/E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,eAAe,EAA6B,MAAM,oBAAoB,CAAC;AAMhF,uEAAuE;AACvE,eAAO,MAAM,sBAAsB,8BAA8B,CAAC;AAElE,mEAAmE;AACnE,eAAO,MAAM,0BAA0B,sBAAsB,CAAC;AAE9D,iFAAiF;AACjF,eAAO,MAAM,0BAA0B,iBAAiB,CAAC;AAMzD,0EAA0E;AAC1E,MAAM,WAAW,0BAA0B;IACzC,OAAO,CAAC,KAAK,EAAE;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,cAAc,EAAE,MAAM,CAAC;QACvB,MAAM,EAAE,OAAO,eAAe,CAAC,YAAY,CAAC;QAC5C,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAC1C,GAAG,OAAO,CAAC;CACb;AAED,sDAAsD;AACtD,MAAM,WAAW,0BAA0B;IACzC,kFAAkF;IAClF,YAAY,EAAE,0BAA0B,CAAC;IACzC,MAAM,EAAE,eAAe,CAAC;IACxB,+EAA+E;IAC/E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oEAAoE;IACpE,aAAa,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,iBAAiB,CAAC;CAC5D;AAMD;;;;;GAKG;AACH,wBAAgB,mBAAmB,IAAI,OAAO,CAE7C;AAED;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,cAAc,EACpB,MAAM,EAAE,QAAQ,GAAG,OAAO,GAAG,OAAO,GACnC,MAAM,CAaR;AAED;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,IAAI,CAAC,0BAA0B,EAAE,cAAc,GAAG,QAAQ,CAAC,GAChE,uBAAuB,CAuBzB;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,0BAA0B,GAC/B,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAmBnC"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Escalation Boot
|
|
3
|
+
*
|
|
4
|
+
* Production wiring for {@link EscalationService}. The service (evaluate
|
|
5
|
+
* every mission's `policy.escalationRules` every 5 minutes → notify /
|
|
6
|
+
* pause / block) was fully implemented but never instantiated, so the
|
|
7
|
+
* escalation rules on every policy template were dead configuration.
|
|
8
|
+
*
|
|
9
|
+
* This module keeps the boot logic out of `index.ts` so it can be unit
|
|
10
|
+
* tested: env gating, the owner-facing `[ESCALATION]` notification handler,
|
|
11
|
+
* and the "no missions ⇒ no-op" property.
|
|
12
|
+
*
|
|
13
|
+
* Env:
|
|
14
|
+
* `CREWLY_ESCALATION_ENABLED=false` — do not start the service
|
|
15
|
+
* anything else (or unset) — start it (default)
|
|
16
|
+
*
|
|
17
|
+
* @module services/v3/escalation-boot
|
|
18
|
+
*/
|
|
19
|
+
import { EscalationService } from './escalation.service.js';
|
|
20
|
+
import { getMissionProjectPath } from './mission-paths.js';
|
|
21
|
+
import { MESSAGE_SOURCES, ORCHESTRATOR_SESSION_NAME } from '../../constants.js';
|
|
22
|
+
// ---------------------------------------------------------------------------
|
|
23
|
+
// Constants
|
|
24
|
+
// ---------------------------------------------------------------------------
|
|
25
|
+
/** Env var that disables the escalation loop when set to `'false'`. */
|
|
26
|
+
export const ESCALATION_ENABLED_ENV = 'CREWLY_ESCALATION_ENABLED';
|
|
27
|
+
/** Conversation id stamped on owner-facing escalation messages. */
|
|
28
|
+
export const ESCALATION_CONVERSATION_ID = 'system_escalation';
|
|
29
|
+
/** Envelope prefix the orchestrator prompt recognises for policy escalations. */
|
|
30
|
+
export const ESCALATION_ENVELOPE_PREFIX = '[ESCALATION]';
|
|
31
|
+
// ---------------------------------------------------------------------------
|
|
32
|
+
// Helpers
|
|
33
|
+
// ---------------------------------------------------------------------------
|
|
34
|
+
/**
|
|
35
|
+
* Whether the escalation loop should start. Only the literal string
|
|
36
|
+
* `'false'` disables it — every other value (including unset) enables.
|
|
37
|
+
*
|
|
38
|
+
* @returns `true` when the service should be booted
|
|
39
|
+
*/
|
|
40
|
+
export function isEscalationEnabled() {
|
|
41
|
+
return process.env[ESCALATION_ENABLED_ENV] !== 'false';
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Build the owner-facing envelope for a triggered escalation rule.
|
|
45
|
+
*
|
|
46
|
+
* @param mission - The escalated mission
|
|
47
|
+
* @param rule - The rule that fired
|
|
48
|
+
* @param action - The action taken
|
|
49
|
+
* @returns One-line `[ESCALATION]` message for the orchestrator queue
|
|
50
|
+
*/
|
|
51
|
+
export function formatEscalationEnvelope(mission, rule, action) {
|
|
52
|
+
const objective = mission.objective.length > 80 ? `${mission.objective.slice(0, 80)}…` : mission.objective;
|
|
53
|
+
return (`${ESCALATION_ENVELOPE_PREFIX} Mission "${objective}" (${mission.id}) — ` +
|
|
54
|
+
`policy rule ${rule.condition} exceeded threshold ${rule.threshold}; ` +
|
|
55
|
+
`action=${action}, escalateTo=${rule.escalateTo}. ` +
|
|
56
|
+
(action === 'notify'
|
|
57
|
+
? 'Owner attention requested.'
|
|
58
|
+
: action === 'pause'
|
|
59
|
+
? 'Queued/running mission work has been paused (blocked) pending owner review.'
|
|
60
|
+
: 'Mission is blocked pending owner review.'));
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Action handler that surfaces every triggered rule to the orchestrator's
|
|
64
|
+
* chat queue as a `[ESCALATION]` system event. The built-in `pause`
|
|
65
|
+
* behaviour (blocking the mission's WorkItems) stays inside
|
|
66
|
+
* {@link EscalationService}; this handler is purely the notification leg.
|
|
67
|
+
*
|
|
68
|
+
* @param deps - Queue + logger
|
|
69
|
+
* @returns Handler suitable for {@link EscalationService.setActionHandler}
|
|
70
|
+
*/
|
|
71
|
+
export function createEscalationNotifier(deps) {
|
|
72
|
+
return async (mission, rule, action) => {
|
|
73
|
+
try {
|
|
74
|
+
deps.messageQueue.enqueue({
|
|
75
|
+
content: formatEscalationEnvelope(mission, rule, action),
|
|
76
|
+
conversationId: ESCALATION_CONVERSATION_ID,
|
|
77
|
+
source: MESSAGE_SOURCES.SYSTEM_EVENT,
|
|
78
|
+
targetSession: ORCHESTRATOR_SESSION_NAME,
|
|
79
|
+
sourceMetadata: {
|
|
80
|
+
missionId: mission.id,
|
|
81
|
+
condition: rule.condition,
|
|
82
|
+
threshold: rule.threshold,
|
|
83
|
+
action,
|
|
84
|
+
escalateTo: rule.escalateTo,
|
|
85
|
+
},
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
catch (err) {
|
|
89
|
+
deps.logger.warn('Escalation notification enqueue failed (non-fatal)', {
|
|
90
|
+
missionId: mission.id,
|
|
91
|
+
error: err instanceof Error ? err.message : String(err),
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Boot the escalation loop if enabled. Never throws — a failure to start
|
|
98
|
+
* is logged and `null` is returned so the backend keeps booting.
|
|
99
|
+
*
|
|
100
|
+
* Must be called AFTER the TriggerEngine action handler has been wired in
|
|
101
|
+
* `index.ts`: `EscalationService.start()` wraps whatever handler is
|
|
102
|
+
* currently installed and delegates non-escalation triggers to it.
|
|
103
|
+
*
|
|
104
|
+
* @param deps - Boot dependencies
|
|
105
|
+
* @returns The started service, or `null` when disabled / failed
|
|
106
|
+
*/
|
|
107
|
+
export async function bootEscalationService(deps) {
|
|
108
|
+
if (!isEscalationEnabled()) {
|
|
109
|
+
deps.logger.info('EscalationService disabled via env', { env: ESCALATION_ENABLED_ENV });
|
|
110
|
+
return null;
|
|
111
|
+
}
|
|
112
|
+
const projectPath = deps.projectPath ?? getMissionProjectPath();
|
|
113
|
+
try {
|
|
114
|
+
const service = deps.createService
|
|
115
|
+
? deps.createService(projectPath)
|
|
116
|
+
: new EscalationService(projectPath);
|
|
117
|
+
service.setActionHandler(createEscalationNotifier(deps));
|
|
118
|
+
await service.start();
|
|
119
|
+
return service;
|
|
120
|
+
}
|
|
121
|
+
catch (err) {
|
|
122
|
+
deps.logger.warn('EscalationService boot failed (non-fatal)', {
|
|
123
|
+
error: err instanceof Error ? err.message : String(err),
|
|
124
|
+
});
|
|
125
|
+
return null;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=escalation-boot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"escalation-boot.js","sourceRoot":"","sources":["../../../../../../backend/src/services/v3/escalation-boot.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,iBAAiB,EAAgC,MAAM,yBAAyB,CAAC;AAC1F,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAG3D,OAAO,EAAE,eAAe,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAEhF,8EAA8E;AAC9E,YAAY;AACZ,8EAA8E;AAE9E,uEAAuE;AACvE,MAAM,CAAC,MAAM,sBAAsB,GAAG,2BAA2B,CAAC;AAElE,mEAAmE;AACnE,MAAM,CAAC,MAAM,0BAA0B,GAAG,mBAAmB,CAAC;AAE9D,iFAAiF;AACjF,MAAM,CAAC,MAAM,0BAA0B,GAAG,cAAc,CAAC;AA4BzD,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB;IACjC,OAAO,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,KAAK,OAAO,CAAC;AACzD,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,wBAAwB,CACtC,OAAgB,EAChB,IAAoB,EACpB,MAAoC;IAEpC,MAAM,SAAS,GACb,OAAO,CAAC,SAAS,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;IAC3F,OAAO,CACL,GAAG,0BAA0B,aAAa,SAAS,MAAM,OAAO,CAAC,EAAE,MAAM;QACzE,eAAe,IAAI,CAAC,SAAS,uBAAuB,IAAI,CAAC,SAAS,IAAI;QACtE,UAAU,MAAM,gBAAgB,IAAI,CAAC,UAAU,IAAI;QACnD,CAAC,MAAM,KAAK,QAAQ;YAClB,CAAC,CAAC,4BAA4B;YAC9B,CAAC,CAAC,MAAM,KAAK,OAAO;gBAClB,CAAC,CAAC,6EAA6E;gBAC/E,CAAC,CAAC,0CAA0C,CAAC,CAClD,CAAC;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,wBAAwB,CACtC,IAAiE;IAEjE,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE;QACrC,IAAI,CAAC;YACH,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;gBACxB,OAAO,EAAE,wBAAwB,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC;gBACxD,cAAc,EAAE,0BAA0B;gBAC1C,MAAM,EAAE,eAAe,CAAC,YAAY;gBACpC,aAAa,EAAE,yBAAyB;gBACxC,cAAc,EAAE;oBACd,SAAS,EAAE,OAAO,CAAC,EAAE;oBACrB,SAAS,EAAE,IAAI,CAAC,SAAS;oBACzB,SAAS,EAAE,IAAI,CAAC,SAAS;oBACzB,MAAM;oBACN,UAAU,EAAE,IAAI,CAAC,UAAU;iBAC5B;aACF,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,oDAAoD,EAAE;gBACrE,SAAS,EAAE,OAAO,CAAC,EAAE;gBACrB,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;aACxD,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC;AACJ,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,IAAgC;IAEhC,IAAI,CAAC,mBAAmB,EAAE,EAAE,CAAC;QAC3B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,oCAAoC,EAAE,EAAE,GAAG,EAAE,sBAAsB,EAAE,CAAC,CAAC;QACxF,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,qBAAqB,EAAE,CAAC;IAChE,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa;YAChC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC;YACjC,CAAC,CAAC,IAAI,iBAAiB,CAAC,WAAW,CAAC,CAAC;QACvC,OAAO,CAAC,gBAAgB,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC,CAAC;QACzD,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;QACtB,OAAO,OAAO,CAAC;IACjB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,2CAA2C,EAAE;YAC5D,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;SACxD,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
*/
|
|
20
20
|
import { PolicyEnforcementService, type EscalationResult } from '../policy/policy-enforcement.service.js';
|
|
21
21
|
import type { WorkItem } from '../../types/v2/work-item.types.js';
|
|
22
|
-
import type
|
|
22
|
+
import { type Mission, type EscalationContext, type EscalationRule } from '../../types/v2/index.js';
|
|
23
23
|
/**
|
|
24
24
|
* Result of a single Mission's escalation evaluation.
|
|
25
25
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"escalation.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/v3/escalation.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;
|
|
1
|
+
{"version":3,"file":"escalation.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/v3/escalation.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAMH,OAAO,EAAE,wBAAwB,EAAE,KAAK,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AAI1G,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mCAAmC,CAAC;AAElE,OAAO,EAEL,KAAK,OAAO,EACZ,KAAK,iBAAiB,EACtB,KAAK,cAAc,EACpB,MAAM,yBAAyB,CAAC;AAgBjC;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,iBAAiB;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,sCAAsC;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,0DAA0D;IAC1D,UAAU,EAAE,gBAAgB,CAAC;IAC7B,gCAAgC;IAChC,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,0CAA0C;IAC1C,iBAAiB,EAAE,MAAM,CAAC;IAC1B,wDAAwD;IACxD,oBAAoB,EAAE,MAAM,CAAC;IAC7B,6DAA6D;IAC7D,OAAO,EAAE,uBAAuB,EAAE,CAAC;IACnC,sCAAsC;IACtC,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,MAAM,MAAM,uBAAuB,GAAG,CACpC,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,cAAc,EACpB,MAAM,EAAE,QAAQ,GAAG,OAAO,GAAG,OAAO,KACjC,OAAO,CAAC,IAAI,CAAC,CAAC;AAMnB;;;;;;;;;;;;;GAaG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;IACzC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA2B;IACzD,OAAO,CAAC,aAAa,CAAwC;IAC7D,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,OAAO,CAAS;IACxB;;;;;;;OAOG;IACH,OAAO,CAAC,gBAAgB,CAAuE;IAE/F;;;;;OAKG;gBAED,WAAW,EAAE,MAAM,EACnB,aAAa,CAAC,EAAE,wBAAwB;IAQ1C;;;;;OAKG;IACH,gBAAgB,CAAC,OAAO,EAAE,uBAAuB,GAAG,IAAI;IAIxD;;;;;OAKG;IACG,KAAK,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkEnD;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAc3B;;OAEG;IACH,SAAS,IAAI,OAAO;IAQpB;;;;;OAKG;IACG,QAAQ,IAAI,OAAO,CAAC,sBAAsB,CAAC;IAsFjD;;;;OAIG;YACW,oBAAoB;IAWlC;;;;;;;;;;;;;OAaG;IACH,sBAAsB,CAAC,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,GAAG,iBAAiB;IA0BrF;;;;;;;;;OASG;YACW,wBAAwB;IAyCtC;;;;;OAKG;YACW,qBAAqB;IAiDnC;;;;OAIG;IACG,kBAAkB,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;CA6B/C"}
|
|
@@ -19,18 +19,18 @@
|
|
|
19
19
|
*/
|
|
20
20
|
import * as path from 'path';
|
|
21
21
|
import * as fs from 'fs/promises';
|
|
22
|
+
import { getMissionsDir } from './mission-paths.js';
|
|
22
23
|
import { LoggerService } from '../core/logger.service.js';
|
|
23
24
|
import { PolicyEnforcementService } from '../policy/policy-enforcement.service.js';
|
|
24
25
|
import { TaskPoolService } from '../task-pool/task-pool.service.js';
|
|
25
26
|
import { TriggerEngine } from './trigger-engine.service.js';
|
|
26
27
|
import { ensureDir, safeReadJson } from '../../utils/file-io.utils.js';
|
|
28
|
+
import { isMissionExecutable, } from '../../types/v2/index.js';
|
|
27
29
|
// ---------------------------------------------------------------------------
|
|
28
30
|
// Constants
|
|
29
31
|
// ---------------------------------------------------------------------------
|
|
30
32
|
/** Default cron expression for escalation checks: every 5 minutes. */
|
|
31
33
|
const DEFAULT_ESCALATION_CRON = '*/5 * * * *';
|
|
32
|
-
/** Directory name for missions under .crewly. */
|
|
33
|
-
const MISSIONS_DIR = 'missions';
|
|
34
34
|
/** Maximum escalation results to log per evaluation cycle. */
|
|
35
35
|
const MAX_LOG_RESULTS = 20;
|
|
36
36
|
// ---------------------------------------------------------------------------
|
|
@@ -76,7 +76,7 @@ export class EscalationService {
|
|
|
76
76
|
constructor(projectPath, policyService) {
|
|
77
77
|
this.logger = LoggerService.getInstance().createComponentLogger('EscalationService');
|
|
78
78
|
this.projectPath = projectPath;
|
|
79
|
-
this.missionsDir =
|
|
79
|
+
this.missionsDir = getMissionsDir(projectPath);
|
|
80
80
|
this.policyService = policyService ?? new PolicyEnforcementService();
|
|
81
81
|
}
|
|
82
82
|
/**
|
|
@@ -421,7 +421,7 @@ export class EscalationService {
|
|
|
421
421
|
const mission = await safeReadJson(filePath, null);
|
|
422
422
|
if (mission &&
|
|
423
423
|
mission.id &&
|
|
424
|
-
mission
|
|
424
|
+
isMissionExecutable(mission) &&
|
|
425
425
|
mission.policy?.escalationRules?.length > 0) {
|
|
426
426
|
missions.push(mission);
|
|
427
427
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"escalation.service.js","sourceRoot":"","sources":["../../../../../../backend/src/services/v3/escalation.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,EAAE,aAAa,EAAwB,MAAM,2BAA2B,CAAC;AAChF,OAAO,EAAE,wBAAwB,EAAyB,MAAM,yCAAyC,CAAC;AAC1G,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAG5D,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"escalation.service.js","sourceRoot":"","sources":["../../../../../../backend/src/services/v3/escalation.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* KR Completion Subscriber
|
|
3
|
+
*
|
|
4
|
+
* Closes two gaps in the OKR runtime loop that the data model already
|
|
5
|
+
* supported but nothing ever drove:
|
|
6
|
+
*
|
|
7
|
+
* 1. **KR auto-measurement from task completion.**
|
|
8
|
+
* `KRTrackingService.onWorkItemCompleted` maps completed/total linked
|
|
9
|
+
* WorkItems onto a KR whose `measurementSource === 'task_completion'`,
|
|
10
|
+
* but had zero production callers. This subscriber listens to the
|
|
11
|
+
* pool's terminal-success events (`task:done`, `task:verified`),
|
|
12
|
+
* resolves the KR either from `workItem.metadata.krId` or from any KR
|
|
13
|
+
* of the mission whose `linkedWorkItemIds` contains the WI, and calls
|
|
14
|
+
* `onWorkItemCompleted`.
|
|
15
|
+
*
|
|
16
|
+
* 2. **`team:all_tasks_done` publication.**
|
|
17
|
+
* The event was declared, CRITICAL, subscribed to by the orchestrator
|
|
18
|
+
* and handled by the EventToWorkItemBridge (→ `mission:review_due` →
|
|
19
|
+
* review WI) — but nothing published it. On every task terminal event
|
|
20
|
+
* (`task:done`, `task:verified`, `task:cancelled`) this subscriber
|
|
21
|
+
* checks whether the WI's mission has zero non-terminal WorkItems left
|
|
22
|
+
* and, if so, publishes once per mission per UTC day (idempotent id
|
|
23
|
+
* `<missionId>:all_tasks_done:<YYYY-MM-DD>`).
|
|
24
|
+
*
|
|
25
|
+
* Follows the same shape as the other in-process subscribers (bridge,
|
|
26
|
+
* auto-learning, milestone): `onInProcess` subscriptions, per-dispatch
|
|
27
|
+
* try/catch, `flushPending()` for tests, idempotent `start()`/`stop()`.
|
|
28
|
+
*
|
|
29
|
+
* @module services/v3/kr-completion.subscriber
|
|
30
|
+
*/
|
|
31
|
+
import { type ComponentLogger } from '../core/logger.service.js';
|
|
32
|
+
import type { EventBusService } from '../event-bus/event-bus.service.js';
|
|
33
|
+
import type { EventType } from '../../types/event-bus.types.js';
|
|
34
|
+
import type { WorkItem } from '../../types/v2/work-item.types.js';
|
|
35
|
+
import type { KeyResult } from '../../types/v2/key-result.types.js';
|
|
36
|
+
import type { Mission } from '../../types/v2/mission.types.js';
|
|
37
|
+
/** Terminal-success events that may move a `task_completion` KR. */
|
|
38
|
+
export declare const KR_MEASURE_EVENTS: readonly EventType[];
|
|
39
|
+
/**
|
|
40
|
+
* Task terminal events after which a mission may have no active work left.
|
|
41
|
+
* `task:cancelled` is included so a mission whose last item was cancelled
|
|
42
|
+
* still gets its "all done — review" nudge.
|
|
43
|
+
*/
|
|
44
|
+
export declare const ALL_TASKS_DONE_TRIGGER_EVENTS: readonly EventType[];
|
|
45
|
+
/** Minimal pool surface the subscriber needs. */
|
|
46
|
+
export interface KRCompletionTaskPool {
|
|
47
|
+
findWorkItem(id: string): Promise<WorkItem | null | undefined>;
|
|
48
|
+
getAllItems(): Promise<WorkItem[]>;
|
|
49
|
+
}
|
|
50
|
+
/** Minimal KR-tracking surface the subscriber needs. */
|
|
51
|
+
export interface KRCompletionTracker {
|
|
52
|
+
listByMission(missionId: string): Promise<KeyResult[]>;
|
|
53
|
+
get(missionId: string, krId: string): Promise<KeyResult | null>;
|
|
54
|
+
onWorkItemCompleted(workItem: WorkItem): Promise<void>;
|
|
55
|
+
}
|
|
56
|
+
/** Constructor dependencies (all injectable for tests). */
|
|
57
|
+
export interface KRCompletionSubscriberDependencies {
|
|
58
|
+
eventBus: EventBusService;
|
|
59
|
+
taskPool: KRCompletionTaskPool;
|
|
60
|
+
krTracking: KRCompletionTracker;
|
|
61
|
+
/** Loads a mission by id (for `ownerTeamId` on the published event). */
|
|
62
|
+
loadMission?: (missionId: string) => Promise<Mission | null>;
|
|
63
|
+
logger?: ComponentLogger;
|
|
64
|
+
/** Clock override for the per-day dedup key. */
|
|
65
|
+
now?: () => Date;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Drives KR auto-measurement and `team:all_tasks_done` from task terminal
|
|
69
|
+
* events. See module docs.
|
|
70
|
+
*/
|
|
71
|
+
export declare class KRCompletionSubscriber {
|
|
72
|
+
private readonly eventBus;
|
|
73
|
+
private readonly taskPool;
|
|
74
|
+
private readonly krTracking;
|
|
75
|
+
private readonly loadMission;
|
|
76
|
+
private readonly logger;
|
|
77
|
+
private readonly now;
|
|
78
|
+
private unsubscribers;
|
|
79
|
+
private started;
|
|
80
|
+
private readonly pendingDispatches;
|
|
81
|
+
/** `<missionId>:<YYYY-MM-DD>` keys already published today (FIFO-bounded). */
|
|
82
|
+
private readonly publishedAllDone;
|
|
83
|
+
constructor(deps: KRCompletionSubscriberDependencies);
|
|
84
|
+
/**
|
|
85
|
+
* Production wiring helper — constructs from singletons.
|
|
86
|
+
*
|
|
87
|
+
* @param eventBus - The live event bus
|
|
88
|
+
* @returns A subscriber ready to `start()`
|
|
89
|
+
*/
|
|
90
|
+
static boot(eventBus: EventBusService): KRCompletionSubscriber;
|
|
91
|
+
/** Subscribe to the task terminal events. Idempotent. */
|
|
92
|
+
start(): void;
|
|
93
|
+
/** Detach all subscriptions. Idempotent. */
|
|
94
|
+
stop(): void;
|
|
95
|
+
/** Await every in-flight dispatch. Test affordance. */
|
|
96
|
+
flushPending(): Promise<void>;
|
|
97
|
+
private safeDispatch;
|
|
98
|
+
/**
|
|
99
|
+
* Resolve the source WI, then run the KR measurement (success events
|
|
100
|
+
* only) and the all-tasks-done check (every trigger event). The two
|
|
101
|
+
* halves are independent — a failure in one is logged and does not stop
|
|
102
|
+
* the other.
|
|
103
|
+
*/
|
|
104
|
+
private handle;
|
|
105
|
+
/**
|
|
106
|
+
* Find the KR the WI contributes to and feed it to
|
|
107
|
+
* {@link KRTrackingService.onWorkItemCompleted} when that KR is measured
|
|
108
|
+
* by task completion.
|
|
109
|
+
*/
|
|
110
|
+
private measureKR;
|
|
111
|
+
/**
|
|
112
|
+
* Publish `team:all_tasks_done` once per mission per UTC day when the
|
|
113
|
+
* mission has no non-terminal WorkItems left in the pool.
|
|
114
|
+
*/
|
|
115
|
+
private maybePublishAllTasksDone;
|
|
116
|
+
private rememberPublished;
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=kr-completion.subscriber.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kr-completion.subscriber.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/v3/kr-completion.subscriber.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,OAAO,EAAiB,KAAK,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAChF,OAAO,KAAK,EAAE,eAAe,EAAwB,MAAM,mCAAmC,CAAC;AAC/F,OAAO,KAAK,EAAc,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAC5E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mCAAmC,CAAC;AAElE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oCAAoC,CAAC;AACpE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iCAAiC,CAAC;AAW/D,oEAAoE;AACpE,eAAO,MAAM,iBAAiB,EAAE,SAAS,SAAS,EAA4C,CAAC;AAE/F;;;;GAIG;AACH,eAAO,MAAM,6BAA6B,EAAE,SAAS,SAAS,EAIpD,CAAC;AAYX,iDAAiD;AACjD,MAAM,WAAW,oBAAoB;IACnC,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;IAC/D,WAAW,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;CACpC;AAED,wDAAwD;AACxD,MAAM,WAAW,mBAAmB;IAClC,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IACvD,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC;IAChE,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACxD;AAED,2DAA2D;AAC3D,MAAM,WAAW,kCAAkC;IACjD,QAAQ,EAAE,eAAe,CAAC;IAC1B,QAAQ,EAAE,oBAAoB,CAAC;IAC/B,UAAU,EAAE,mBAAmB,CAAC;IAChC,wEAAwE;IACxE,WAAW,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IAC7D,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,gDAAgD;IAChD,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;CAClB;AAwBD;;;GAGG;AACH,qBAAa,sBAAsB;IACjC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAkB;IAC3C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAuB;IAChD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAsB;IACjD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAiD;IAC7E,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;IACzC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAa;IACjC,OAAO,CAAC,aAAa,CAA8B;IACnD,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAiC;IACnE,8EAA8E;IAC9E,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAgB;gBAErC,IAAI,EAAE,kCAAkC;IAUpD;;;;;OAKG;IACH,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,eAAe,GAAG,sBAAsB;IAQ9D,yDAAyD;IACzD,KAAK,IAAI,IAAI;IAab,4CAA4C;IAC5C,IAAI,IAAI,IAAI;IAYZ,uDAAuD;IACjD,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAUnC,OAAO,CAAC,YAAY;IAiBpB;;;;;OAKG;YACW,MAAM;IAoBpB;;;;OAIG;YACW,SAAS;IAoCvB;;;OAGG;YACW,wBAAwB;IAoCtC,OAAO,CAAC,iBAAiB;CAM1B"}
|