crewly 1.14.1 → 1.16.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 +34 -4
- 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/prompt.md +1 -1
- 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/runtime_scripts/runtime-config.json +7 -0
- package/config/skills/_common/lib.sh +124 -2
- package/config/skills/_common/lib.test.sh +68 -1
- package/config/skills/agent/core/count-json/SKILL.md +61 -0
- package/config/skills/agent/core/count-json/execute.sh +52 -0
- package/config/skills/agent/core/count-json/execute.test.sh +35 -0
- package/config/skills/agent/core/record-prediction/SKILL.md +61 -0
- package/config/skills/agent/core/record-prediction/execute.sh +90 -0
- package/config/skills/agent/core/record-prediction/execute.test.sh +67 -0
- package/config/skills/agent/core/resolve-prediction/SKILL.md +61 -0
- package/config/skills/agent/core/resolve-prediction/execute.sh +87 -0
- package/config/skills/agent/core/resolve-prediction/execute.test.sh +74 -0
- package/config/skills/agent/core/set-focus/SKILL.md +64 -0
- package/config/skills/agent/core/set-focus/execute.sh +73 -0
- package/config/skills/agent/core/set-focus/execute.test.sh +67 -0
- package/config/skills/agent/core/suppress-noise/SKILL.md +59 -0
- package/config/skills/agent/core/suppress-noise/execute.sh +68 -0
- package/config/skills/agent/core/suppress-noise/execute.test.sh +58 -0
- 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 +161 -0
- package/dist/backend/backend/src/constants.d.ts.map +1 -1
- package/dist/backend/backend/src/constants.js +159 -1
- package/dist/backend/backend/src/constants.js.map +1 -1
- package/dist/backend/backend/src/controllers/agent-self-improvement/agent-self-improvement.controller.d.ts +76 -0
- package/dist/backend/backend/src/controllers/agent-self-improvement/agent-self-improvement.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/agent-self-improvement/agent-self-improvement.controller.js +262 -0
- package/dist/backend/backend/src/controllers/agent-self-improvement/agent-self-improvement.controller.js.map +1 -0
- 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/oauth/oauth.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/oauth/oauth.routes.js +31 -0
- package/dist/backend/backend/src/controllers/oauth/oauth.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/request-types.d.ts +6 -2
- package/dist/backend/backend/src/controllers/request-types.d.ts.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 +20 -1
- package/dist/backend/backend/src/controllers/team/team.controller.js.map +1 -1
- package/dist/backend/backend/src/index.d.ts +13 -0
- package/dist/backend/backend/src/index.d.ts.map +1 -1
- package/dist/backend/backend/src/index.js +240 -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 +9 -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 +78 -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 +311 -13
- 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/opencode-runtime.service.d.ts +114 -0
- package/dist/backend/backend/src/services/agent/opencode-runtime.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/agent/opencode-runtime.service.js +185 -0
- package/dist/backend/backend/src/services/agent/opencode-runtime.service.js.map +1 -0
- 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 +71 -1
- package/dist/backend/backend/src/services/agent/runtime-agent.service.abstract.js.map +1 -1
- package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.d.ts +1 -1
- 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 +15 -3
- package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/runtime-service.factory.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/runtime-service.factory.js +9 -0
- package/dist/backend/backend/src/services/agent/runtime-service.factory.js.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-builder.service.d.ts +23 -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 +45 -0
- package/dist/backend/backend/src/services/ai/prompt-builder.service.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/memory-reference.module.d.ts +43 -3
- package/dist/backend/backend/src/services/ai/prompt-modules/memory-reference.module.d.ts.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/memory-reference.module.js +85 -4
- package/dist/backend/backend/src/services/ai/prompt-modules/memory-reference.module.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 +44 -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/ai/prompt-modules/skills-reference.module.d.ts.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.js +6 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.js.map +1 -1
- package/dist/backend/backend/src/services/ai/self-improvement/agent-memory-provider.d.ts +45 -0
- package/dist/backend/backend/src/services/ai/self-improvement/agent-memory-provider.d.ts.map +1 -0
- package/dist/backend/backend/src/services/ai/self-improvement/agent-memory-provider.js +59 -0
- package/dist/backend/backend/src/services/ai/self-improvement/agent-memory-provider.js.map +1 -0
- package/dist/backend/backend/src/services/ai/self-improvement/consolidation-scheduler.service.d.ts +137 -0
- package/dist/backend/backend/src/services/ai/self-improvement/consolidation-scheduler.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/ai/self-improvement/consolidation-scheduler.service.js +216 -0
- package/dist/backend/backend/src/services/ai/self-improvement/consolidation-scheduler.service.js.map +1 -0
- package/dist/backend/backend/src/services/ai/self-improvement/prediction-calibration.service.d.ts +4 -1
- package/dist/backend/backend/src/services/ai/self-improvement/prediction-calibration.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/ai/self-improvement/prediction-calibration.service.js +3 -1
- package/dist/backend/backend/src/services/ai/self-improvement/prediction-calibration.service.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 +23 -3
- 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 +34 -3
- 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 +5 -3
- 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 +6 -4
- 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/mcp-tool-definitions.d.ts +1 -1
- package/dist/backend/backend/src/services/mcp-tool-definitions.js +1 -1
- package/dist/backend/backend/src/services/mcp-tool-definitions.js.map +1 -1
- 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/runtime-adapter.d.ts +10 -1
- package/dist/backend/backend/src/services/runtime-adapter.d.ts.map +1 -1
- package/dist/backend/backend/src/services/runtime-adapter.js +12 -1
- package/dist/backend/backend/src/services/runtime-adapter.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/settings/settings.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/settings/settings.service.js +1 -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.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/fallback-trigger-cleanup.subscriber.d.ts +78 -0
- package/dist/backend/backend/src/services/v3/fallback-trigger-cleanup.subscriber.d.ts.map +1 -0
- package/dist/backend/backend/src/services/v3/fallback-trigger-cleanup.subscriber.js +129 -0
- package/dist/backend/backend/src/services/v3/fallback-trigger-cleanup.subscriber.js.map +1 -0
- 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-skill-measurer.service.d.ts +117 -0
- package/dist/backend/backend/src/services/v3/kr-skill-measurer.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/v3/kr-skill-measurer.service.js +214 -0
- package/dist/backend/backend/src/services/v3/kr-skill-measurer.service.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 +76 -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 +267 -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/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 +27 -1
- 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/settings.types.d.ts +1 -1
- package/dist/backend/backend/src/types/settings.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/settings.types.js +7 -0
- package/dist/backend/backend/src/types/settings.types.js.map +1 -1
- package/dist/backend/backend/src/types/team-template.types.d.ts +2 -2
- package/dist/backend/backend/src/types/team-template.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/team-template.types.js +1 -1
- package/dist/backend/backend/src/types/team-template.types.js.map +1 -1
- package/dist/backend/backend/src/types/v2/index.d.ts +1 -1
- package/dist/backend/backend/src/types/v2/index.d.ts.map +1 -1
- package/dist/backend/backend/src/types/v2/index.js +1 -1
- package/dist/backend/backend/src/types/v2/index.js.map +1 -1
- package/dist/backend/backend/src/types/v2/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/backend/src/utils/terminal-string-ops.d.ts +2 -0
- package/dist/backend/backend/src/utils/terminal-string-ops.d.ts.map +1 -1
- package/dist/backend/backend/src/utils/terminal-string-ops.js +14 -0
- package/dist/backend/backend/src/utils/terminal-string-ops.js.map +1 -1
- 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 +161 -0
- package/dist/cli/backend/src/constants.d.ts.map +1 -1
- package/dist/cli/backend/src/constants.js +159 -1
- package/dist/cli/backend/src/constants.js.map +1 -1
- package/dist/cli/backend/src/services/agent/agent-registration.service.d.ts +78 -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 +311 -13
- 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/opencode-runtime.service.d.ts +114 -0
- package/dist/cli/backend/src/services/agent/opencode-runtime.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/agent/opencode-runtime.service.js +185 -0
- package/dist/cli/backend/src/services/agent/opencode-runtime.service.js.map +1 -0
- 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 +71 -1
- package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.js.map +1 -1
- package/dist/cli/backend/src/services/agent/runtime-exit-monitor.service.d.ts +1 -1
- package/dist/cli/backend/src/services/agent/runtime-exit-monitor.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/agent/runtime-exit-monitor.service.js +15 -3
- package/dist/cli/backend/src/services/agent/runtime-exit-monitor.service.js.map +1 -1
- package/dist/cli/backend/src/services/agent/runtime-service.factory.d.ts.map +1 -1
- package/dist/cli/backend/src/services/agent/runtime-service.factory.js +9 -0
- package/dist/cli/backend/src/services/agent/runtime-service.factory.js.map +1 -1
- package/dist/cli/backend/src/services/ai/prompt-builder.service.d.ts +23 -0
- package/dist/cli/backend/src/services/ai/prompt-builder.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/ai/prompt-builder.service.js +45 -0
- package/dist/cli/backend/src/services/ai/prompt-builder.service.js.map +1 -1
- package/dist/cli/backend/src/services/ai/prompt-modules/memory-reference.module.d.ts +43 -3
- package/dist/cli/backend/src/services/ai/prompt-modules/memory-reference.module.d.ts.map +1 -1
- package/dist/cli/backend/src/services/ai/prompt-modules/memory-reference.module.js +85 -4
- package/dist/cli/backend/src/services/ai/prompt-modules/memory-reference.module.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 +44 -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/ai/prompt-modules/skills-reference.module.d.ts.map +1 -1
- package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.js +6 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.js.map +1 -1
- package/dist/cli/backend/src/services/ai/self-improvement/agent-memory-provider.d.ts +45 -0
- package/dist/cli/backend/src/services/ai/self-improvement/agent-memory-provider.d.ts.map +1 -0
- package/dist/cli/backend/src/services/ai/self-improvement/agent-memory-provider.js +59 -0
- package/dist/cli/backend/src/services/ai/self-improvement/agent-memory-provider.js.map +1 -0
- package/dist/cli/backend/src/services/ai/self-improvement/attention.service.d.ts +74 -0
- package/dist/cli/backend/src/services/ai/self-improvement/attention.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/ai/self-improvement/attention.service.js +132 -0
- package/dist/cli/backend/src/services/ai/self-improvement/attention.service.js.map +1 -0
- package/dist/cli/backend/src/services/ai/self-improvement/memory-consolidation.service.d.ts +107 -0
- package/dist/cli/backend/src/services/ai/self-improvement/memory-consolidation.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/ai/self-improvement/memory-consolidation.service.js +183 -0
- package/dist/cli/backend/src/services/ai/self-improvement/memory-consolidation.service.js.map +1 -0
- package/dist/cli/backend/src/services/ai/self-improvement/prediction-calibration.service.d.ts +100 -0
- package/dist/cli/backend/src/services/ai/self-improvement/prediction-calibration.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/ai/self-improvement/prediction-calibration.service.js +130 -0
- package/dist/cli/backend/src/services/ai/self-improvement/prediction-calibration.service.js.map +1 -0
- 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 +23 -3
- 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 +34 -3
- 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 +5 -3
- 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 +6 -4
- 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/mcp-tool-definitions.d.ts +1 -1
- package/dist/cli/backend/src/services/mcp-tool-definitions.js +1 -1
- package/dist/cli/backend/src/services/mcp-tool-definitions.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/settings/settings.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/settings/settings.service.js +1 -0
- package/dist/cli/backend/src/services/settings/settings.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 +27 -1
- 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/settings.types.d.ts +1 -1
- package/dist/cli/backend/src/types/settings.types.d.ts.map +1 -1
- package/dist/cli/backend/src/types/settings.types.js +7 -0
- package/dist/cli/backend/src/types/settings.types.js.map +1 -1
- package/dist/cli/backend/src/types/team-template.types.d.ts +2 -2
- package/dist/cli/backend/src/types/team-template.types.d.ts.map +1 -1
- package/dist/cli/backend/src/types/team-template.types.js +1 -1
- package/dist/cli/backend/src/types/team-template.types.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/backend/src/utils/terminal-string-ops.d.ts +2 -0
- package/dist/cli/backend/src/utils/terminal-string-ops.d.ts.map +1 -1
- package/dist/cli/backend/src/utils/terminal-string-ops.js +14 -0
- package/dist/cli/backend/src/utils/terminal-string-ops.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/onboard.d.ts +2 -2
- package/dist/cli/cli/src/commands/onboard.d.ts.map +1 -1
- package/dist/cli/cli/src/commands/onboard.js +15 -7
- package/dist/cli/cli/src/commands/onboard.js.map +1 -1
- 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-019817e2.js +4961 -0
- package/frontend/dist/assets/{index-88feb412.css → index-a56613e7.css} +1 -1
- package/frontend/dist/index.html +2 -2
- package/package.json +3 -2
- package/frontend/dist/assets/index-190a957f.js +0 -4961
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fallback Trigger Cleanup — cancels a delegation's "fallback check" timer
|
|
3
|
+
* the moment the delegated WorkItem reaches a terminal status.
|
|
4
|
+
*
|
|
5
|
+
* `delegate-task` arms a one-shot time trigger named
|
|
6
|
+
* `fallback-<target>-<wi8>` whose action creates a self-targeted "Fallback
|
|
7
|
+
* check on <target> for task <wi8>" WorkItem for the orchestrator. Nothing
|
|
8
|
+
* ever cancelled it, so on steamfun-ops it fired after every delegation
|
|
9
|
+
* whether the work was long verified or not: 26 of 65 real WorkItems in
|
|
10
|
+
* three days were these checks, each one a full orchestrator turn
|
|
11
|
+
* (2026-09-18). The skill's default was raised to 2 h; this subscriber
|
|
12
|
+
* removes the timer as soon as the work is done, verified or cancelled so it
|
|
13
|
+
* never fires for finished work at all.
|
|
14
|
+
*
|
|
15
|
+
* @module services/v3/fallback-trigger-cleanup.subscriber
|
|
16
|
+
*/
|
|
17
|
+
import { LoggerService } from '../core/logger.service.js';
|
|
18
|
+
import { formatError } from '../../utils/format-error.js';
|
|
19
|
+
import { TriggerEngine } from './trigger-engine.service.js';
|
|
20
|
+
/** Events after which a delegation's fallback timer is pointless. */
|
|
21
|
+
export const FALLBACK_CLEANUP_EVENTS = [
|
|
22
|
+
'task:done',
|
|
23
|
+
'task:verified',
|
|
24
|
+
'task:cancelled',
|
|
25
|
+
];
|
|
26
|
+
/** Length of the WorkItem-id prefix `delegate-task` puts in the trigger name. */
|
|
27
|
+
const WI_ID_PREFIX_LENGTH = 8;
|
|
28
|
+
/**
|
|
29
|
+
* Name `delegate-task` gives the fallback timer for a WorkItem.
|
|
30
|
+
*
|
|
31
|
+
* @param workItemId - Full WorkItem id
|
|
32
|
+
* @param target - Session the work was delegated to
|
|
33
|
+
* @returns The trigger name
|
|
34
|
+
*/
|
|
35
|
+
export function fallbackTriggerName(workItemId, target) {
|
|
36
|
+
return `fallback-${target}-${workItemId.slice(0, WI_ID_PREFIX_LENGTH)}`;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Whether a trigger is the fallback timer for the given WorkItem, regardless
|
|
40
|
+
* of target (the event may not carry the target session).
|
|
41
|
+
*
|
|
42
|
+
* @param trigger - Candidate trigger
|
|
43
|
+
* @param workItemId - Full WorkItem id
|
|
44
|
+
* @returns True when the name matches `fallback-*-<wi8>`
|
|
45
|
+
*/
|
|
46
|
+
export function isFallbackTriggerFor(trigger, workItemId) {
|
|
47
|
+
const name = trigger.name ?? '';
|
|
48
|
+
return name.startsWith('fallback-') && name.endsWith(`-${workItemId.slice(0, WI_ID_PREFIX_LENGTH)}`);
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Subscribes to task terminal events and cancels matching fallback timers.
|
|
52
|
+
*/
|
|
53
|
+
export class FallbackTriggerCleanupSubscriber {
|
|
54
|
+
logger;
|
|
55
|
+
eventBus;
|
|
56
|
+
triggers;
|
|
57
|
+
unsubscribers = [];
|
|
58
|
+
started = false;
|
|
59
|
+
constructor(deps) {
|
|
60
|
+
this.logger = LoggerService.getInstance().createComponentLogger('FallbackTriggerCleanup');
|
|
61
|
+
this.eventBus = deps.eventBus;
|
|
62
|
+
this.triggers = deps.triggers;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Production wiring.
|
|
66
|
+
*
|
|
67
|
+
* @param eventBus - The process event bus
|
|
68
|
+
* @returns A subscriber bound to the trigger engine singleton
|
|
69
|
+
*/
|
|
70
|
+
static boot(eventBus) {
|
|
71
|
+
return new FallbackTriggerCleanupSubscriber({ eventBus, triggers: TriggerEngine.getInstance() });
|
|
72
|
+
}
|
|
73
|
+
/** Subscribe. Idempotent. */
|
|
74
|
+
start() {
|
|
75
|
+
if (this.started)
|
|
76
|
+
return;
|
|
77
|
+
this.started = true;
|
|
78
|
+
for (const eventType of FALLBACK_CLEANUP_EVENTS) {
|
|
79
|
+
this.unsubscribers.push(this.eventBus.onInProcess(eventType, (e) => {
|
|
80
|
+
void this.handle(e).catch((err) => {
|
|
81
|
+
this.logger.warn('Fallback trigger cleanup failed', { eventType, error: formatError(err) });
|
|
82
|
+
});
|
|
83
|
+
}));
|
|
84
|
+
}
|
|
85
|
+
this.logger.info('FallbackTriggerCleanup subscribed', { eventTypes: [...FALLBACK_CLEANUP_EVENTS] });
|
|
86
|
+
}
|
|
87
|
+
/** Unsubscribe. Safe to call twice. */
|
|
88
|
+
stop() {
|
|
89
|
+
for (const u of this.unsubscribers) {
|
|
90
|
+
try {
|
|
91
|
+
u();
|
|
92
|
+
}
|
|
93
|
+
catch {
|
|
94
|
+
// ignore
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
this.unsubscribers = [];
|
|
98
|
+
this.started = false;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Cancel every live fallback timer for the event's WorkItem.
|
|
102
|
+
*
|
|
103
|
+
* @param event - A task terminal event
|
|
104
|
+
* @returns Number of triggers cancelled
|
|
105
|
+
*/
|
|
106
|
+
async handle(event) {
|
|
107
|
+
const workItemId = event.workItemId;
|
|
108
|
+
if (!workItemId)
|
|
109
|
+
return 0;
|
|
110
|
+
let cancelled = 0;
|
|
111
|
+
for (const trigger of this.triggers.list()) {
|
|
112
|
+
if (trigger.status !== 'active' && trigger.status !== 'paused')
|
|
113
|
+
continue;
|
|
114
|
+
if (!isFallbackTriggerFor(trigger, workItemId))
|
|
115
|
+
continue;
|
|
116
|
+
if (await this.triggers.cancel(trigger.id)) {
|
|
117
|
+
cancelled += 1;
|
|
118
|
+
this.logger.info('Cancelled fallback timer for finished WorkItem', {
|
|
119
|
+
workItemId,
|
|
120
|
+
triggerId: trigger.id,
|
|
121
|
+
name: trigger.name,
|
|
122
|
+
event: event.type,
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
return cancelled;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=fallback-trigger-cleanup.subscriber.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fallback-trigger-cleanup.subscriber.js","sourceRoot":"","sources":["../../../../../../backend/src/services/v3/fallback-trigger-cleanup.subscriber.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"}
|
|
@@ -0,0 +1,277 @@
|
|
|
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 { LoggerService } from '../core/logger.service.js';
|
|
32
|
+
import { SLA_TERMINAL_WORK_ITEM_STATUSES } from '../../types/v2/work-item.types.js';
|
|
33
|
+
import { formatError } from '../../utils/format-error.js';
|
|
34
|
+
import { safeReadJson } from '../../utils/file-io.utils.js';
|
|
35
|
+
import { getMissionPath } from './mission-paths.js';
|
|
36
|
+
import { KRTrackingService } from './kr-tracking.service.js';
|
|
37
|
+
import { TaskPoolService } from '../task-pool/task-pool.service.js';
|
|
38
|
+
// ---------------------------------------------------------------------------
|
|
39
|
+
// Constants
|
|
40
|
+
// ---------------------------------------------------------------------------
|
|
41
|
+
/** Terminal-success events that may move a `task_completion` KR. */
|
|
42
|
+
export const KR_MEASURE_EVENTS = ['task:done', 'task:verified'];
|
|
43
|
+
/**
|
|
44
|
+
* Task terminal events after which a mission may have no active work left.
|
|
45
|
+
* `task:cancelled` is included so a mission whose last item was cancelled
|
|
46
|
+
* still gets its "all done — review" nudge.
|
|
47
|
+
*/
|
|
48
|
+
export const ALL_TASKS_DONE_TRIGGER_EVENTS = [
|
|
49
|
+
'task:done',
|
|
50
|
+
'task:verified',
|
|
51
|
+
'task:cancelled',
|
|
52
|
+
];
|
|
53
|
+
/** Bounded size of the per-day `team:all_tasks_done` dedup set. */
|
|
54
|
+
const ALL_TASKS_DONE_DEDUP_CAPACITY = 1000;
|
|
55
|
+
/** KR measurement source that this subscriber is allowed to drive. */
|
|
56
|
+
const TASK_COMPLETION_SOURCE = 'task_completion';
|
|
57
|
+
// ---------------------------------------------------------------------------
|
|
58
|
+
// Helpers
|
|
59
|
+
// ---------------------------------------------------------------------------
|
|
60
|
+
/** UTC calendar-day key (`YYYY-MM-DD`). */
|
|
61
|
+
function dayKey(now) {
|
|
62
|
+
return now.toISOString().slice(0, 10);
|
|
63
|
+
}
|
|
64
|
+
/** Default production mission loader — reads the shared missions dir. */
|
|
65
|
+
async function defaultLoadMission(missionId) {
|
|
66
|
+
try {
|
|
67
|
+
return await safeReadJson(getMissionPath(missionId), null);
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
return null;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
// ---------------------------------------------------------------------------
|
|
74
|
+
// Subscriber
|
|
75
|
+
// ---------------------------------------------------------------------------
|
|
76
|
+
/**
|
|
77
|
+
* Drives KR auto-measurement and `team:all_tasks_done` from task terminal
|
|
78
|
+
* events. See module docs.
|
|
79
|
+
*/
|
|
80
|
+
export class KRCompletionSubscriber {
|
|
81
|
+
eventBus;
|
|
82
|
+
taskPool;
|
|
83
|
+
krTracking;
|
|
84
|
+
loadMission;
|
|
85
|
+
logger;
|
|
86
|
+
now;
|
|
87
|
+
unsubscribers = [];
|
|
88
|
+
started = false;
|
|
89
|
+
pendingDispatches = new Set();
|
|
90
|
+
/** `<missionId>:<YYYY-MM-DD>` keys already published today (FIFO-bounded). */
|
|
91
|
+
publishedAllDone = [];
|
|
92
|
+
constructor(deps) {
|
|
93
|
+
this.eventBus = deps.eventBus;
|
|
94
|
+
this.taskPool = deps.taskPool;
|
|
95
|
+
this.krTracking = deps.krTracking;
|
|
96
|
+
this.loadMission = deps.loadMission ?? defaultLoadMission;
|
|
97
|
+
this.logger =
|
|
98
|
+
deps.logger ?? LoggerService.getInstance().createComponentLogger('KRCompletionSubscriber');
|
|
99
|
+
this.now = deps.now ?? (() => new Date());
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Production wiring helper — constructs from singletons.
|
|
103
|
+
*
|
|
104
|
+
* @param eventBus - The live event bus
|
|
105
|
+
* @returns A subscriber ready to `start()`
|
|
106
|
+
*/
|
|
107
|
+
static boot(eventBus) {
|
|
108
|
+
return new KRCompletionSubscriber({
|
|
109
|
+
eventBus,
|
|
110
|
+
taskPool: TaskPoolService.getInstance(),
|
|
111
|
+
krTracking: KRTrackingService.getInstance(),
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
/** Subscribe to the task terminal events. Idempotent. */
|
|
115
|
+
start() {
|
|
116
|
+
if (this.started)
|
|
117
|
+
return;
|
|
118
|
+
this.started = true;
|
|
119
|
+
for (const eventType of ALL_TASKS_DONE_TRIGGER_EVENTS) {
|
|
120
|
+
this.unsubscribers.push(this.eventBus.onInProcess(eventType, (e) => this.safeDispatch(eventType, e)));
|
|
121
|
+
}
|
|
122
|
+
this.logger.info('KRCompletionSubscriber subscribed', {
|
|
123
|
+
eventTypes: ALL_TASKS_DONE_TRIGGER_EVENTS,
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
/** Detach all subscriptions. Idempotent. */
|
|
127
|
+
stop() {
|
|
128
|
+
for (const u of this.unsubscribers) {
|
|
129
|
+
try {
|
|
130
|
+
u();
|
|
131
|
+
}
|
|
132
|
+
catch (err) {
|
|
133
|
+
this.logger.warn('KRCompletion unsubscribe threw', { error: formatError(err) });
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
this.unsubscribers = [];
|
|
137
|
+
this.started = false;
|
|
138
|
+
}
|
|
139
|
+
/** Await every in-flight dispatch. Test affordance. */
|
|
140
|
+
async flushPending() {
|
|
141
|
+
while (this.pendingDispatches.size > 0) {
|
|
142
|
+
await Promise.allSettled(Array.from(this.pendingDispatches));
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
// -------------------------------------------------------------------------
|
|
146
|
+
// Dispatch
|
|
147
|
+
// -------------------------------------------------------------------------
|
|
148
|
+
safeDispatch(eventType, event) {
|
|
149
|
+
const promise = (async () => {
|
|
150
|
+
try {
|
|
151
|
+
await this.handle(eventType, event);
|
|
152
|
+
}
|
|
153
|
+
catch (err) {
|
|
154
|
+
this.logger.warn('KRCompletion dispatch threw — swallowed', {
|
|
155
|
+
eventType,
|
|
156
|
+
eventId: event.id,
|
|
157
|
+
error: formatError(err),
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
})();
|
|
161
|
+
this.pendingDispatches.add(promise);
|
|
162
|
+
promise.finally(() => this.pendingDispatches.delete(promise));
|
|
163
|
+
return promise;
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Resolve the source WI, then run the KR measurement (success events
|
|
167
|
+
* only) and the all-tasks-done check (every trigger event). The two
|
|
168
|
+
* halves are independent — a failure in one is logged and does not stop
|
|
169
|
+
* the other.
|
|
170
|
+
*/
|
|
171
|
+
async handle(eventType, event) {
|
|
172
|
+
if (!event.workItemId)
|
|
173
|
+
return;
|
|
174
|
+
const workItem = await this.taskPool.findWorkItem(event.workItemId);
|
|
175
|
+
if (!workItem || !workItem.missionId)
|
|
176
|
+
return;
|
|
177
|
+
if (KR_MEASURE_EVENTS.includes(eventType)) {
|
|
178
|
+
try {
|
|
179
|
+
await this.measureKR(workItem);
|
|
180
|
+
}
|
|
181
|
+
catch (err) {
|
|
182
|
+
this.logger.warn('KR auto-measure failed', {
|
|
183
|
+
workItemId: workItem.id,
|
|
184
|
+
missionId: workItem.missionId,
|
|
185
|
+
error: formatError(err),
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
await this.maybePublishAllTasksDone(workItem.missionId);
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Find the KR the WI contributes to and feed it to
|
|
193
|
+
* {@link KRTrackingService.onWorkItemCompleted} when that KR is measured
|
|
194
|
+
* by task completion.
|
|
195
|
+
*/
|
|
196
|
+
async measureKR(workItem) {
|
|
197
|
+
const missionId = workItem.missionId;
|
|
198
|
+
const explicitKrId = typeof workItem.metadata?.krId === 'string' ? workItem.metadata.krId : undefined;
|
|
199
|
+
let kr = null;
|
|
200
|
+
if (explicitKrId) {
|
|
201
|
+
kr = await this.krTracking.get(missionId, explicitKrId);
|
|
202
|
+
}
|
|
203
|
+
else {
|
|
204
|
+
const krs = await this.krTracking.listByMission(missionId);
|
|
205
|
+
kr = krs.find((k) => k.linkedWorkItemIds.includes(workItem.id)) ?? null;
|
|
206
|
+
}
|
|
207
|
+
if (!kr)
|
|
208
|
+
return;
|
|
209
|
+
if (kr.measurementSource !== TASK_COMPLETION_SOURCE) {
|
|
210
|
+
this.logger.debug('KR not measured by task completion — skipping auto-measure', {
|
|
211
|
+
krId: kr.id,
|
|
212
|
+
measurementSource: kr.measurementSource,
|
|
213
|
+
});
|
|
214
|
+
return;
|
|
215
|
+
}
|
|
216
|
+
// `onWorkItemCompleted` keys on `metadata.krId`; inject it when the link
|
|
217
|
+
// was discovered via `linkedWorkItemIds` so the existing service method
|
|
218
|
+
// can stay untouched.
|
|
219
|
+
const withKr = explicitKrId
|
|
220
|
+
? workItem
|
|
221
|
+
: { ...workItem, metadata: { ...(workItem.metadata ?? {}), krId: kr.id } };
|
|
222
|
+
await this.krTracking.onWorkItemCompleted(withKr);
|
|
223
|
+
this.logger.info('KR auto-measured from task completion', {
|
|
224
|
+
krId: kr.id,
|
|
225
|
+
missionId,
|
|
226
|
+
workItemId: workItem.id,
|
|
227
|
+
});
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Publish `team:all_tasks_done` once per mission per UTC day when the
|
|
231
|
+
* mission has no non-terminal WorkItems left in the pool.
|
|
232
|
+
*/
|
|
233
|
+
async maybePublishAllTasksDone(missionId) {
|
|
234
|
+
const key = `${missionId}:${dayKey(this.now())}`;
|
|
235
|
+
if (this.publishedAllDone.includes(key))
|
|
236
|
+
return;
|
|
237
|
+
const allItems = await this.taskPool.getAllItems();
|
|
238
|
+
const missionItems = allItems.filter((wi) => wi.missionId === missionId);
|
|
239
|
+
if (missionItems.length === 0)
|
|
240
|
+
return;
|
|
241
|
+
const active = missionItems.filter((wi) => !SLA_TERMINAL_WORK_ITEM_STATUSES.has(wi.status));
|
|
242
|
+
if (active.length > 0)
|
|
243
|
+
return;
|
|
244
|
+
// Re-check after the awaits: two WIs finishing in the same tick both
|
|
245
|
+
// pass the early check above; only the first to reach this synchronous
|
|
246
|
+
// section may publish.
|
|
247
|
+
if (this.publishedAllDone.includes(key))
|
|
248
|
+
return;
|
|
249
|
+
this.rememberPublished(key);
|
|
250
|
+
const mission = await this.loadMission(missionId);
|
|
251
|
+
this.eventBus.publish({
|
|
252
|
+
id: `${missionId}:all_tasks_done:${dayKey(this.now())}`,
|
|
253
|
+
type: 'team:all_tasks_done',
|
|
254
|
+
timestamp: this.now().toISOString(),
|
|
255
|
+
teamId: mission?.ownerTeamId ?? '',
|
|
256
|
+
teamName: '',
|
|
257
|
+
memberId: '',
|
|
258
|
+
memberName: '',
|
|
259
|
+
sessionName: '',
|
|
260
|
+
previousValue: String(missionItems.length),
|
|
261
|
+
newValue: 'all_tasks_done',
|
|
262
|
+
changedField: 'taskStatus',
|
|
263
|
+
missionId,
|
|
264
|
+
});
|
|
265
|
+
this.logger.info('team:all_tasks_done published', {
|
|
266
|
+
missionId,
|
|
267
|
+
totalItems: missionItems.length,
|
|
268
|
+
});
|
|
269
|
+
}
|
|
270
|
+
rememberPublished(key) {
|
|
271
|
+
this.publishedAllDone.push(key);
|
|
272
|
+
if (this.publishedAllDone.length > ALL_TASKS_DONE_DEDUP_CAPACITY) {
|
|
273
|
+
this.publishedAllDone.shift();
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
//# sourceMappingURL=kr-completion.subscriber.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kr-completion.subscriber.js","sourceRoot":"","sources":["../../../../../../backend/src/services/v3/kr-completion.subscriber.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* KR Skill Measurer — fills `measurementSource: 'skill_output'` Key Results
|
|
3
|
+
* from a skill's JSON output.
|
|
4
|
+
*
|
|
5
|
+
* Until 2026-09-18 a KR's value had exactly three ways to change and all of
|
|
6
|
+
* them were a hand-made API call, so "tickets waiting for acceptance" or
|
|
7
|
+
* "build pass rate" could only be tracked by someone remembering to type the
|
|
8
|
+
* number in. A KR configured as
|
|
9
|
+
*
|
|
10
|
+
* ```json
|
|
11
|
+
* { "measurementSource": "skill_output",
|
|
12
|
+
* "measurementConfig": { "skill": "steamfun-ticket-count",
|
|
13
|
+
* "args": { "status": "review" },
|
|
14
|
+
* "jsonPath": ".count" } }
|
|
15
|
+
* ```
|
|
16
|
+
*
|
|
17
|
+
* is now measured on every mission sweep: the named skill's `execute.sh` is
|
|
18
|
+
* run with the JSON args, the number at `jsonPath` is read from its stdout
|
|
19
|
+
* and recorded as a measurement (deduped when unchanged since the last one).
|
|
20
|
+
*
|
|
21
|
+
* Safety: `skill` is a bare name (`[a-z0-9-]`) resolved against the known
|
|
22
|
+
* skill roots only — never a path — and runs with a hard timeout and a
|
|
23
|
+
* bounded output size. This is the same trust boundary as an agent running
|
|
24
|
+
* the skill itself, not a new one.
|
|
25
|
+
*
|
|
26
|
+
* @module services/v3/kr-skill-measurer.service
|
|
27
|
+
*/
|
|
28
|
+
import { KRTrackingService } from './kr-tracking.service.js';
|
|
29
|
+
import type { KeyResult } from '../../types/v2/key-result.types.js';
|
|
30
|
+
/** Shape of `measurementConfig` for a `skill_output` KR. */
|
|
31
|
+
export interface SkillOutputMeasurementConfig {
|
|
32
|
+
/** Bare skill directory name, e.g. `steamfun-ticket-count`. */
|
|
33
|
+
skill: string;
|
|
34
|
+
/** JSON object passed to the skill as its single argument. */
|
|
35
|
+
args?: Record<string, unknown>;
|
|
36
|
+
/** Dot path into the skill's JSON stdout, e.g. `.count` or `.data.total`. Default `.value`. */
|
|
37
|
+
jsonPath?: string;
|
|
38
|
+
}
|
|
39
|
+
/** What one measurement attempt produced. */
|
|
40
|
+
export interface SkillMeasurementOutcome {
|
|
41
|
+
krId: string;
|
|
42
|
+
status: 'recorded' | 'unchanged' | 'skipped' | 'failed';
|
|
43
|
+
value?: number;
|
|
44
|
+
reason?: string;
|
|
45
|
+
}
|
|
46
|
+
/** Runs a resolved skill and returns its stdout. Injectable for tests. */
|
|
47
|
+
export type SkillRunner = (executePath: string, argsJson: string, timeoutMs: number) => Promise<string>;
|
|
48
|
+
/**
|
|
49
|
+
* Default runner: `bash <execute.sh> '<json>'` with a timeout and output cap.
|
|
50
|
+
*
|
|
51
|
+
* @param executePath - Absolute path of the skill's execute.sh
|
|
52
|
+
* @param argsJson - JSON argument string
|
|
53
|
+
* @param timeoutMs - Kill the skill after this long
|
|
54
|
+
* @returns stdout
|
|
55
|
+
*/
|
|
56
|
+
export declare const defaultSkillRunner: SkillRunner;
|
|
57
|
+
/**
|
|
58
|
+
* Read a dot path (`.a.b.c`, leading dot optional) out of parsed JSON.
|
|
59
|
+
*
|
|
60
|
+
* @param value - Parsed JSON
|
|
61
|
+
* @param jsonPath - Dot path
|
|
62
|
+
* @returns The value at the path, or undefined
|
|
63
|
+
*/
|
|
64
|
+
export declare function readJsonPath(value: unknown, jsonPath: string): unknown;
|
|
65
|
+
/**
|
|
66
|
+
* Coerce a skill output value to a number: numbers as is, booleans to 1/0,
|
|
67
|
+
* numeric strings parsed. Anything else is undefined.
|
|
68
|
+
*
|
|
69
|
+
* @param raw - Value read from the skill output
|
|
70
|
+
* @returns A finite number or undefined
|
|
71
|
+
*/
|
|
72
|
+
export declare function coerceMeasurement(raw: unknown): number | undefined;
|
|
73
|
+
/**
|
|
74
|
+
* Measures `skill_output` Key Results by running their skill.
|
|
75
|
+
*/
|
|
76
|
+
export declare class KRSkillMeasurerService {
|
|
77
|
+
private static instance;
|
|
78
|
+
private readonly logger;
|
|
79
|
+
private readonly runner;
|
|
80
|
+
private readonly skillRoots;
|
|
81
|
+
private readonly krTracking;
|
|
82
|
+
/**
|
|
83
|
+
* @param opts - Test seams: skill roots to search, a runner, a KR service
|
|
84
|
+
*/
|
|
85
|
+
constructor(opts?: {
|
|
86
|
+
skillRoots?: string[];
|
|
87
|
+
runner?: SkillRunner;
|
|
88
|
+
krTracking?: KRTrackingService;
|
|
89
|
+
projectRoot?: string;
|
|
90
|
+
});
|
|
91
|
+
static getInstance(): KRSkillMeasurerService;
|
|
92
|
+
static setInstance(next: KRSkillMeasurerService | null): void;
|
|
93
|
+
/**
|
|
94
|
+
* Resolve a bare skill name to its `execute.sh`, searching the known roots.
|
|
95
|
+
*
|
|
96
|
+
* @param skill - Bare directory name
|
|
97
|
+
* @returns Absolute path, or null when the name is invalid or not found
|
|
98
|
+
*/
|
|
99
|
+
resolveSkill(skill: string): string | null;
|
|
100
|
+
/**
|
|
101
|
+
* Measure every `skill_output` KR of a mission. Failure-soft: one KR's
|
|
102
|
+
* error never stops the others, and nothing throws to the sweep.
|
|
103
|
+
*
|
|
104
|
+
* @param missionId - Mission whose KRs to measure
|
|
105
|
+
* @returns One outcome per skill_output KR
|
|
106
|
+
*/
|
|
107
|
+
measureMission(missionId: string): Promise<SkillMeasurementOutcome[]>;
|
|
108
|
+
/**
|
|
109
|
+
* Measure one KR. Exposed for the manual `POST …/measure-now` path.
|
|
110
|
+
*
|
|
111
|
+
* @param missionId - Owning mission
|
|
112
|
+
* @param kr - The KR (must be `skill_output`)
|
|
113
|
+
* @returns The outcome
|
|
114
|
+
*/
|
|
115
|
+
measureOne(missionId: string, kr: KeyResult): Promise<SkillMeasurementOutcome>;
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=kr-skill-measurer.service.d.ts.map
|