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,140 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hierarchy Escalation Monitor
|
|
3
|
+
*
|
|
4
|
+
* Runtime wiring for {@link HierarchyEscalationService}, which documents
|
|
5
|
+
* the "TL unresponsive → bypass to the orchestrator" rule but had no
|
|
6
|
+
* consumers: nothing recorded TL responses, nothing checked the timeout,
|
|
7
|
+
* nothing routed the bypass.
|
|
8
|
+
*
|
|
9
|
+
* The signal we have today for "a worker escalated to their TL" is the
|
|
10
|
+
* verification handoff: `task:done_by_worker` puts a WorkItem in the TL's
|
|
11
|
+
* court, and `task:verified` / `task:rejected` is the TL's response. So:
|
|
12
|
+
*
|
|
13
|
+
* - `task:done_by_worker` → remember `{ workItemId, workerSession, since }`
|
|
14
|
+
* - `task:verified|rejected` → forget it; `recordTLResponse(tlSession)`
|
|
15
|
+
* - every {@link DEFAULT_SWEEP_INTERVAL_MS}: for each pending handoff
|
|
16
|
+
* older than {@link DEFAULT_TL_ACK_TIMEOUT_MS} whose WI is still
|
|
17
|
+
* `done_by_worker`, resolve the worker's TL from the team hierarchy,
|
|
18
|
+
* call `handleTLUnresponsive` (publishes `hierarchy:escalation`) and
|
|
19
|
+
* enqueue an `[ESCALATION]` system event to the orchestrator — once
|
|
20
|
+
* per WorkItem.
|
|
21
|
+
*
|
|
22
|
+
* What is still missing for a fuller implementation: an explicit
|
|
23
|
+
* "TL acknowledged" signal distinct from the verdict (a TL who has *seen*
|
|
24
|
+
* the item but is still reviewing looks identical to one who is gone),
|
|
25
|
+
* and inclusion of non-verification escalations (a worker's free-text
|
|
26
|
+
* report-status escalation does not produce a WorkItem the monitor can
|
|
27
|
+
* track).
|
|
28
|
+
*
|
|
29
|
+
* @module services/hierarchy/hierarchy-escalation-monitor.service
|
|
30
|
+
*/
|
|
31
|
+
import { type ComponentLogger } from '../core/logger.service.js';
|
|
32
|
+
import { HierarchyEscalationService } from './hierarchy-escalation.service.js';
|
|
33
|
+
import type { EventBusService } from '../event-bus/event-bus.service.js';
|
|
34
|
+
import type { Team } from '../../types/index.js';
|
|
35
|
+
import type { WorkItem } from '../../types/v2/work-item.types.js';
|
|
36
|
+
import { MESSAGE_SOURCES } from '../../constants.js';
|
|
37
|
+
/** How long a TL may sit on a worker's handoff before the bypass fires. */
|
|
38
|
+
export declare const DEFAULT_TL_ACK_TIMEOUT_MS: number;
|
|
39
|
+
/** Cadence of the pending-handoff sweep. */
|
|
40
|
+
export declare const DEFAULT_SWEEP_INTERVAL_MS: number;
|
|
41
|
+
/** Conversation id stamped on the orchestrator-bound bypass message. */
|
|
42
|
+
export declare const HIERARCHY_ESCALATION_CONVERSATION_ID = "system_hierarchy_escalation";
|
|
43
|
+
/** Envelope prefix for the bypass message. */
|
|
44
|
+
export declare const HIERARCHY_ESCALATION_ENVELOPE_PREFIX = "[ESCALATION]";
|
|
45
|
+
/** Minimal pool surface. */
|
|
46
|
+
export interface HierarchyMonitorTaskPool {
|
|
47
|
+
findWorkItem(id: string): Promise<WorkItem | null | undefined>;
|
|
48
|
+
}
|
|
49
|
+
/** Minimal queue surface. */
|
|
50
|
+
export interface HierarchyMonitorMessageQueue {
|
|
51
|
+
enqueue(input: {
|
|
52
|
+
content: string;
|
|
53
|
+
conversationId: string;
|
|
54
|
+
source: typeof MESSAGE_SOURCES.SYSTEM_EVENT;
|
|
55
|
+
targetSession?: string;
|
|
56
|
+
sourceMetadata?: Record<string, unknown>;
|
|
57
|
+
}): unknown;
|
|
58
|
+
}
|
|
59
|
+
/** Injectable dependencies. */
|
|
60
|
+
export interface HierarchyEscalationMonitorDependencies {
|
|
61
|
+
eventBus: EventBusService;
|
|
62
|
+
messageQueue: HierarchyMonitorMessageQueue;
|
|
63
|
+
taskPool?: HierarchyMonitorTaskPool;
|
|
64
|
+
getTeams?: () => Promise<Team[]>;
|
|
65
|
+
escalation?: HierarchyEscalationService;
|
|
66
|
+
logger?: ComponentLogger;
|
|
67
|
+
now?: () => Date;
|
|
68
|
+
/** Override the TL acknowledgement timeout (ms). */
|
|
69
|
+
ackTimeoutMs?: number;
|
|
70
|
+
/** Override the sweep cadence (ms). `0` disables the timer (tests call `sweep()`). */
|
|
71
|
+
sweepIntervalMs?: number;
|
|
72
|
+
}
|
|
73
|
+
/** Outcome of one sweep. */
|
|
74
|
+
export interface HierarchySweepResult {
|
|
75
|
+
pending: number;
|
|
76
|
+
escalated: string[];
|
|
77
|
+
cleared: string[];
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Tracks worker→TL handoffs and bypasses an unresponsive TL. See module docs.
|
|
81
|
+
*/
|
|
82
|
+
export declare class HierarchyEscalationMonitor {
|
|
83
|
+
private readonly eventBus;
|
|
84
|
+
private readonly messageQueue;
|
|
85
|
+
private readonly taskPool;
|
|
86
|
+
private readonly getTeams;
|
|
87
|
+
private readonly escalation;
|
|
88
|
+
private readonly logger;
|
|
89
|
+
private readonly now;
|
|
90
|
+
private readonly ackTimeoutMs;
|
|
91
|
+
private readonly sweepIntervalMs;
|
|
92
|
+
private readonly pending;
|
|
93
|
+
private readonly escalated;
|
|
94
|
+
private unsubscribers;
|
|
95
|
+
private timer;
|
|
96
|
+
private started;
|
|
97
|
+
private readonly pendingDispatches;
|
|
98
|
+
constructor(deps: HierarchyEscalationMonitorDependencies);
|
|
99
|
+
/**
|
|
100
|
+
* Production wiring helper.
|
|
101
|
+
*
|
|
102
|
+
* @param eventBus - Live event bus
|
|
103
|
+
* @param messageQueue - Orchestrator message queue
|
|
104
|
+
* @returns A monitor ready to `start()`
|
|
105
|
+
*/
|
|
106
|
+
static boot(eventBus: EventBusService, messageQueue: HierarchyMonitorMessageQueue): HierarchyEscalationMonitor;
|
|
107
|
+
/** Subscribe + arm the sweep timer. Idempotent. */
|
|
108
|
+
start(): void;
|
|
109
|
+
/** Detach subscriptions and stop the timer. Idempotent. */
|
|
110
|
+
stop(): void;
|
|
111
|
+
/** Await in-flight event handlers. Test affordance. */
|
|
112
|
+
flushPending(): Promise<void>;
|
|
113
|
+
/** Number of handoffs currently awaiting a TL verdict. */
|
|
114
|
+
get pendingCount(): number;
|
|
115
|
+
private safeDispatch;
|
|
116
|
+
/** `task:done_by_worker` — open a pending handoff keyed on the WI. */
|
|
117
|
+
private onOpen;
|
|
118
|
+
/** `task:verified|rejected|cancelled` — the TL (or system) responded. */
|
|
119
|
+
private onClose;
|
|
120
|
+
/**
|
|
121
|
+
* Escalate every pending handoff older than the ack timeout whose WI is
|
|
122
|
+
* still waiting on the TL. Safe to call directly (tests, ops).
|
|
123
|
+
*
|
|
124
|
+
* @returns Summary of what happened
|
|
125
|
+
*/
|
|
126
|
+
sweep(): Promise<HierarchySweepResult>;
|
|
127
|
+
/** Fire the documented bypass for one stale handoff. */
|
|
128
|
+
private escalate;
|
|
129
|
+
/** Publish `hierarchy:escalation` for the TL-at-root case (target = orchestrator). */
|
|
130
|
+
private publishBypassEvent;
|
|
131
|
+
/**
|
|
132
|
+
* Resolve a worker session to its team, member record and team lead. The
|
|
133
|
+
* TL is the worker's `parentMemberId` when set, else the team's canonical
|
|
134
|
+
* lead via {@link pickTeamLead}. Returns `null` when the session is not a
|
|
135
|
+
* team member.
|
|
136
|
+
*/
|
|
137
|
+
private resolveChain;
|
|
138
|
+
private rememberEscalated;
|
|
139
|
+
}
|
|
140
|
+
//# sourceMappingURL=hierarchy-escalation-monitor.service.d.ts.map
|
package/dist/backend/backend/src/services/hierarchy/hierarchy-escalation-monitor.service.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hierarchy-escalation-monitor.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/hierarchy/hierarchy-escalation-monitor.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,346 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hierarchy Escalation Monitor
|
|
3
|
+
*
|
|
4
|
+
* Runtime wiring for {@link HierarchyEscalationService}, which documents
|
|
5
|
+
* the "TL unresponsive → bypass to the orchestrator" rule but had no
|
|
6
|
+
* consumers: nothing recorded TL responses, nothing checked the timeout,
|
|
7
|
+
* nothing routed the bypass.
|
|
8
|
+
*
|
|
9
|
+
* The signal we have today for "a worker escalated to their TL" is the
|
|
10
|
+
* verification handoff: `task:done_by_worker` puts a WorkItem in the TL's
|
|
11
|
+
* court, and `task:verified` / `task:rejected` is the TL's response. So:
|
|
12
|
+
*
|
|
13
|
+
* - `task:done_by_worker` → remember `{ workItemId, workerSession, since }`
|
|
14
|
+
* - `task:verified|rejected` → forget it; `recordTLResponse(tlSession)`
|
|
15
|
+
* - every {@link DEFAULT_SWEEP_INTERVAL_MS}: for each pending handoff
|
|
16
|
+
* older than {@link DEFAULT_TL_ACK_TIMEOUT_MS} whose WI is still
|
|
17
|
+
* `done_by_worker`, resolve the worker's TL from the team hierarchy,
|
|
18
|
+
* call `handleTLUnresponsive` (publishes `hierarchy:escalation`) and
|
|
19
|
+
* enqueue an `[ESCALATION]` system event to the orchestrator — once
|
|
20
|
+
* per WorkItem.
|
|
21
|
+
*
|
|
22
|
+
* What is still missing for a fuller implementation: an explicit
|
|
23
|
+
* "TL acknowledged" signal distinct from the verdict (a TL who has *seen*
|
|
24
|
+
* the item but is still reviewing looks identical to one who is gone),
|
|
25
|
+
* and inclusion of non-verification escalations (a worker's free-text
|
|
26
|
+
* report-status escalation does not produce a WorkItem the monitor can
|
|
27
|
+
* track).
|
|
28
|
+
*
|
|
29
|
+
* @module services/hierarchy/hierarchy-escalation-monitor.service
|
|
30
|
+
*/
|
|
31
|
+
import { LoggerService } from '../core/logger.service.js';
|
|
32
|
+
import { StorageService } from '../core/storage.service.js';
|
|
33
|
+
import { TaskPoolService } from '../task-pool/task-pool.service.js';
|
|
34
|
+
import { HierarchyEscalationService } from './hierarchy-escalation.service.js';
|
|
35
|
+
import { pickTeamLead } from '../../utils/team.utils.js';
|
|
36
|
+
import { formatError } from '../../utils/format-error.js';
|
|
37
|
+
import { MESSAGE_SOURCES, ORCHESTRATOR_SESSION_NAME } from '../../constants.js';
|
|
38
|
+
// ---------------------------------------------------------------------------
|
|
39
|
+
// Constants
|
|
40
|
+
// ---------------------------------------------------------------------------
|
|
41
|
+
/** How long a TL may sit on a worker's handoff before the bypass fires. */
|
|
42
|
+
export const DEFAULT_TL_ACK_TIMEOUT_MS = 15 * 60 * 1000;
|
|
43
|
+
/** Cadence of the pending-handoff sweep. */
|
|
44
|
+
export const DEFAULT_SWEEP_INTERVAL_MS = 5 * 60 * 1000;
|
|
45
|
+
/** Conversation id stamped on the orchestrator-bound bypass message. */
|
|
46
|
+
export const HIERARCHY_ESCALATION_CONVERSATION_ID = 'system_hierarchy_escalation';
|
|
47
|
+
/** Envelope prefix for the bypass message. */
|
|
48
|
+
export const HIERARCHY_ESCALATION_ENVELOPE_PREFIX = '[ESCALATION]';
|
|
49
|
+
/** Bounded size of the escalated-WI dedup list. */
|
|
50
|
+
const ESCALATED_DEDUP_CAPACITY = 1000;
|
|
51
|
+
/** WorkItem status meaning "waiting on the TL". */
|
|
52
|
+
const AWAITING_TL_STATUS = 'done_by_worker';
|
|
53
|
+
/** Events that open a pending handoff. */
|
|
54
|
+
const OPEN_EVENTS = ['task:done_by_worker'];
|
|
55
|
+
/** Events that close a pending handoff (the TL responded). */
|
|
56
|
+
const CLOSE_EVENTS = ['task:verified', 'task:rejected', 'task:cancelled'];
|
|
57
|
+
// ---------------------------------------------------------------------------
|
|
58
|
+
// Monitor
|
|
59
|
+
// ---------------------------------------------------------------------------
|
|
60
|
+
/**
|
|
61
|
+
* Tracks worker→TL handoffs and bypasses an unresponsive TL. See module docs.
|
|
62
|
+
*/
|
|
63
|
+
export class HierarchyEscalationMonitor {
|
|
64
|
+
eventBus;
|
|
65
|
+
messageQueue;
|
|
66
|
+
taskPool;
|
|
67
|
+
getTeams;
|
|
68
|
+
escalation;
|
|
69
|
+
logger;
|
|
70
|
+
now;
|
|
71
|
+
ackTimeoutMs;
|
|
72
|
+
sweepIntervalMs;
|
|
73
|
+
pending = new Map();
|
|
74
|
+
escalated = [];
|
|
75
|
+
unsubscribers = [];
|
|
76
|
+
timer = null;
|
|
77
|
+
started = false;
|
|
78
|
+
pendingDispatches = new Set();
|
|
79
|
+
constructor(deps) {
|
|
80
|
+
this.eventBus = deps.eventBus;
|
|
81
|
+
this.messageQueue = deps.messageQueue;
|
|
82
|
+
this.taskPool = deps.taskPool ?? TaskPoolService.getInstance();
|
|
83
|
+
this.getTeams = deps.getTeams ?? (() => StorageService.getInstance().getTeams());
|
|
84
|
+
this.escalation = deps.escalation ?? HierarchyEscalationService.getInstance();
|
|
85
|
+
this.logger =
|
|
86
|
+
deps.logger ??
|
|
87
|
+
LoggerService.getInstance().createComponentLogger('HierarchyEscalationMonitor');
|
|
88
|
+
this.now = deps.now ?? (() => new Date());
|
|
89
|
+
this.ackTimeoutMs = deps.ackTimeoutMs ?? DEFAULT_TL_ACK_TIMEOUT_MS;
|
|
90
|
+
this.sweepIntervalMs = deps.sweepIntervalMs ?? DEFAULT_SWEEP_INTERVAL_MS;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Production wiring helper.
|
|
94
|
+
*
|
|
95
|
+
* @param eventBus - Live event bus
|
|
96
|
+
* @param messageQueue - Orchestrator message queue
|
|
97
|
+
* @returns A monitor ready to `start()`
|
|
98
|
+
*/
|
|
99
|
+
static boot(eventBus, messageQueue) {
|
|
100
|
+
return new HierarchyEscalationMonitor({ eventBus, messageQueue });
|
|
101
|
+
}
|
|
102
|
+
/** Subscribe + arm the sweep timer. Idempotent. */
|
|
103
|
+
start() {
|
|
104
|
+
if (this.started)
|
|
105
|
+
return;
|
|
106
|
+
this.started = true;
|
|
107
|
+
this.escalation.setEventBus(this.eventBus);
|
|
108
|
+
this.escalation.setUnresponsiveTimeout(this.ackTimeoutMs);
|
|
109
|
+
for (const type of OPEN_EVENTS) {
|
|
110
|
+
this.unsubscribers.push(this.eventBus.onInProcess(type, (e) => this.safeDispatch(e, this.onOpen)));
|
|
111
|
+
}
|
|
112
|
+
for (const type of CLOSE_EVENTS) {
|
|
113
|
+
this.unsubscribers.push(this.eventBus.onInProcess(type, (e) => this.safeDispatch(e, this.onClose)));
|
|
114
|
+
}
|
|
115
|
+
if (this.sweepIntervalMs > 0) {
|
|
116
|
+
this.timer = setInterval(() => {
|
|
117
|
+
this.sweep().catch((err) => {
|
|
118
|
+
this.logger.warn('Hierarchy escalation sweep failed', { error: formatError(err) });
|
|
119
|
+
});
|
|
120
|
+
}, this.sweepIntervalMs);
|
|
121
|
+
this.timer.unref?.();
|
|
122
|
+
}
|
|
123
|
+
this.logger.info('HierarchyEscalationMonitor started', {
|
|
124
|
+
ackTimeoutMs: this.ackTimeoutMs,
|
|
125
|
+
sweepIntervalMs: this.sweepIntervalMs,
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
/** Detach subscriptions and stop the timer. Idempotent. */
|
|
129
|
+
stop() {
|
|
130
|
+
for (const u of this.unsubscribers) {
|
|
131
|
+
try {
|
|
132
|
+
u();
|
|
133
|
+
}
|
|
134
|
+
catch (err) {
|
|
135
|
+
this.logger.warn('HierarchyEscalationMonitor unsubscribe threw', { error: formatError(err) });
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
this.unsubscribers = [];
|
|
139
|
+
if (this.timer) {
|
|
140
|
+
clearInterval(this.timer);
|
|
141
|
+
this.timer = null;
|
|
142
|
+
}
|
|
143
|
+
this.started = false;
|
|
144
|
+
}
|
|
145
|
+
/** Await in-flight event handlers. Test affordance. */
|
|
146
|
+
async flushPending() {
|
|
147
|
+
while (this.pendingDispatches.size > 0) {
|
|
148
|
+
await Promise.allSettled(Array.from(this.pendingDispatches));
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
/** Number of handoffs currently awaiting a TL verdict. */
|
|
152
|
+
get pendingCount() {
|
|
153
|
+
return this.pending.size;
|
|
154
|
+
}
|
|
155
|
+
// -------------------------------------------------------------------------
|
|
156
|
+
// Event handlers
|
|
157
|
+
// -------------------------------------------------------------------------
|
|
158
|
+
safeDispatch(event, handler) {
|
|
159
|
+
const promise = (async () => {
|
|
160
|
+
try {
|
|
161
|
+
await handler(event);
|
|
162
|
+
}
|
|
163
|
+
catch (err) {
|
|
164
|
+
this.logger.warn('HierarchyEscalationMonitor handler threw — swallowed', {
|
|
165
|
+
eventType: event.type,
|
|
166
|
+
eventId: event.id,
|
|
167
|
+
error: formatError(err),
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
})();
|
|
171
|
+
this.pendingDispatches.add(promise);
|
|
172
|
+
promise.finally(() => this.pendingDispatches.delete(promise));
|
|
173
|
+
return promise;
|
|
174
|
+
}
|
|
175
|
+
/** `task:done_by_worker` — open a pending handoff keyed on the WI. */
|
|
176
|
+
onOpen = async (event) => {
|
|
177
|
+
if (!event.workItemId)
|
|
178
|
+
return;
|
|
179
|
+
const wi = await this.taskPool.findWorkItem(event.workItemId);
|
|
180
|
+
if (!wi || !wi.target)
|
|
181
|
+
return;
|
|
182
|
+
this.pending.set(wi.id, {
|
|
183
|
+
workItemId: wi.id,
|
|
184
|
+
workerSession: wi.target,
|
|
185
|
+
since: this.now().getTime(),
|
|
186
|
+
});
|
|
187
|
+
};
|
|
188
|
+
/** `task:verified|rejected|cancelled` — the TL (or system) responded. */
|
|
189
|
+
onClose = async (event) => {
|
|
190
|
+
if (!event.workItemId)
|
|
191
|
+
return;
|
|
192
|
+
const handoff = this.pending.get(event.workItemId);
|
|
193
|
+
this.pending.delete(event.workItemId);
|
|
194
|
+
if (!handoff || event.type === 'task:cancelled')
|
|
195
|
+
return;
|
|
196
|
+
const resolved = await this.resolveChain(handoff.workerSession);
|
|
197
|
+
if (resolved?.teamLead) {
|
|
198
|
+
this.escalation.recordTLResponse(resolved.teamLead.sessionName);
|
|
199
|
+
}
|
|
200
|
+
};
|
|
201
|
+
// -------------------------------------------------------------------------
|
|
202
|
+
// Sweep
|
|
203
|
+
// -------------------------------------------------------------------------
|
|
204
|
+
/**
|
|
205
|
+
* Escalate every pending handoff older than the ack timeout whose WI is
|
|
206
|
+
* still waiting on the TL. Safe to call directly (tests, ops).
|
|
207
|
+
*
|
|
208
|
+
* @returns Summary of what happened
|
|
209
|
+
*/
|
|
210
|
+
async sweep() {
|
|
211
|
+
const nowMs = this.now().getTime();
|
|
212
|
+
const result = { pending: this.pending.size, escalated: [], cleared: [] };
|
|
213
|
+
for (const handoff of Array.from(this.pending.values())) {
|
|
214
|
+
if (nowMs - handoff.since < this.ackTimeoutMs)
|
|
215
|
+
continue;
|
|
216
|
+
const wi = await this.taskPool.findWorkItem(handoff.workItemId);
|
|
217
|
+
if (!wi || wi.status !== AWAITING_TL_STATUS) {
|
|
218
|
+
// Resolved out-of-band (or gone) — nothing to escalate.
|
|
219
|
+
this.pending.delete(handoff.workItemId);
|
|
220
|
+
result.cleared.push(handoff.workItemId);
|
|
221
|
+
continue;
|
|
222
|
+
}
|
|
223
|
+
if (this.escalated.includes(handoff.workItemId)) {
|
|
224
|
+
this.pending.delete(handoff.workItemId);
|
|
225
|
+
continue;
|
|
226
|
+
}
|
|
227
|
+
try {
|
|
228
|
+
await this.escalate(handoff, wi);
|
|
229
|
+
result.escalated.push(handoff.workItemId);
|
|
230
|
+
}
|
|
231
|
+
catch (err) {
|
|
232
|
+
this.logger.warn('Hierarchy escalation failed for handoff', {
|
|
233
|
+
workItemId: handoff.workItemId,
|
|
234
|
+
error: formatError(err),
|
|
235
|
+
});
|
|
236
|
+
}
|
|
237
|
+
finally {
|
|
238
|
+
this.pending.delete(handoff.workItemId);
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
return result;
|
|
242
|
+
}
|
|
243
|
+
/** Fire the documented bypass for one stale handoff. */
|
|
244
|
+
async escalate(handoff, wi) {
|
|
245
|
+
this.rememberEscalated(handoff.workItemId);
|
|
246
|
+
const chain = await this.resolveChain(handoff.workerSession);
|
|
247
|
+
const waitedMin = Math.round((this.now().getTime() - handoff.since) / 60_000);
|
|
248
|
+
const message = `Team lead has not acted on "${wi.title}" (${wi.id}) submitted by ${handoff.workerSession} ` +
|
|
249
|
+
`${waitedMin} min ago — bypassing to the orchestrator.`;
|
|
250
|
+
let target = ORCHESTRATOR_SESSION_NAME;
|
|
251
|
+
if (chain?.teamLead && chain.worker) {
|
|
252
|
+
const routed = this.escalation.handleTLUnresponsive(chain.teamLead.sessionName, chain.worker, chain.team.members, wi.id, message, { teamId: chain.team.id, teamName: chain.team.name });
|
|
253
|
+
// The service routes to the TL's parent when one exists and publishes
|
|
254
|
+
// `hierarchy:escalation` itself. A TL at the top of its team's tree
|
|
255
|
+
// (the common shape) has no parent inside the team, so the service
|
|
256
|
+
// returns null without publishing — the orchestrator is the documented
|
|
257
|
+
// fallback and we publish the event here so subscribers still see it.
|
|
258
|
+
if (routed?.target.sessionName) {
|
|
259
|
+
target = routed.target.sessionName;
|
|
260
|
+
}
|
|
261
|
+
else {
|
|
262
|
+
this.publishBypassEvent(chain.team, chain.worker, chain.teamLead, wi.id);
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
this.messageQueue.enqueue({
|
|
266
|
+
content: `${HIERARCHY_ESCALATION_ENVELOPE_PREFIX} ${message}`,
|
|
267
|
+
conversationId: HIERARCHY_ESCALATION_CONVERSATION_ID,
|
|
268
|
+
source: MESSAGE_SOURCES.SYSTEM_EVENT,
|
|
269
|
+
targetSession: target,
|
|
270
|
+
sourceMetadata: {
|
|
271
|
+
workItemId: wi.id,
|
|
272
|
+
workerSession: handoff.workerSession,
|
|
273
|
+
teamLeadSession: chain?.teamLead?.sessionName,
|
|
274
|
+
teamId: chain?.team.id,
|
|
275
|
+
reason: 'tl_unresponsive',
|
|
276
|
+
},
|
|
277
|
+
});
|
|
278
|
+
this.logger.info('Hierarchy escalation: TL unresponsive — bypassed', {
|
|
279
|
+
workItemId: wi.id,
|
|
280
|
+
workerSession: handoff.workerSession,
|
|
281
|
+
teamLeadSession: chain?.teamLead?.sessionName,
|
|
282
|
+
target,
|
|
283
|
+
});
|
|
284
|
+
}
|
|
285
|
+
/** Publish `hierarchy:escalation` for the TL-at-root case (target = orchestrator). */
|
|
286
|
+
publishBypassEvent(team, worker, teamLead, taskId) {
|
|
287
|
+
try {
|
|
288
|
+
this.eventBus.publish({
|
|
289
|
+
id: `hierarchy:escalation:${taskId}`,
|
|
290
|
+
type: 'hierarchy:escalation',
|
|
291
|
+
timestamp: this.now().toISOString(),
|
|
292
|
+
teamId: team.id,
|
|
293
|
+
teamName: team.name,
|
|
294
|
+
memberId: worker.id,
|
|
295
|
+
memberName: worker.name,
|
|
296
|
+
sessionName: worker.sessionName,
|
|
297
|
+
previousValue: teamLead.sessionName,
|
|
298
|
+
newValue: ORCHESTRATOR_SESSION_NAME,
|
|
299
|
+
changedField: 'hierarchyAction',
|
|
300
|
+
taskId,
|
|
301
|
+
hierarchyLevel: worker.hierarchyLevel,
|
|
302
|
+
parentMemberId: worker.parentMemberId,
|
|
303
|
+
});
|
|
304
|
+
}
|
|
305
|
+
catch (err) {
|
|
306
|
+
this.logger.warn('hierarchy:escalation publish threw', { taskId, error: formatError(err) });
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
// -------------------------------------------------------------------------
|
|
310
|
+
// Helpers
|
|
311
|
+
// -------------------------------------------------------------------------
|
|
312
|
+
/**
|
|
313
|
+
* Resolve a worker session to its team, member record and team lead. The
|
|
314
|
+
* TL is the worker's `parentMemberId` when set, else the team's canonical
|
|
315
|
+
* lead via {@link pickTeamLead}. Returns `null` when the session is not a
|
|
316
|
+
* team member.
|
|
317
|
+
*/
|
|
318
|
+
async resolveChain(workerSession) {
|
|
319
|
+
let teams;
|
|
320
|
+
try {
|
|
321
|
+
teams = await this.getTeams();
|
|
322
|
+
}
|
|
323
|
+
catch (err) {
|
|
324
|
+
this.logger.warn('Team lookup failed during hierarchy escalation', { error: formatError(err) });
|
|
325
|
+
return null;
|
|
326
|
+
}
|
|
327
|
+
for (const team of teams) {
|
|
328
|
+
const worker = team.members.find((m) => m.sessionName === workerSession);
|
|
329
|
+
if (!worker)
|
|
330
|
+
continue;
|
|
331
|
+
const parent = worker.parentMemberId
|
|
332
|
+
? (team.members.find((m) => m.id === worker.parentMemberId) ?? null)
|
|
333
|
+
: null;
|
|
334
|
+
const teamLead = parent ?? pickTeamLead(team);
|
|
335
|
+
// A worker who IS the lead has nobody above them inside the team.
|
|
336
|
+
return { team, worker, teamLead: teamLead && teamLead.id !== worker.id ? teamLead : null };
|
|
337
|
+
}
|
|
338
|
+
return null;
|
|
339
|
+
}
|
|
340
|
+
rememberEscalated(workItemId) {
|
|
341
|
+
this.escalated.push(workItemId);
|
|
342
|
+
if (this.escalated.length > ESCALATED_DEDUP_CAPACITY)
|
|
343
|
+
this.escalated.shift();
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
//# sourceMappingURL=hierarchy-escalation-monitor.service.js.map
|
package/dist/backend/backend/src/services/hierarchy/hierarchy-escalation-monitor.service.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hierarchy-escalation-monitor.service.js","sourceRoot":"","sources":["../../../../../../backend/src/services/hierarchy/hierarchy-escalation-monitor.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,6 +22,18 @@ export interface TokenUsageEvent {
|
|
|
22
22
|
model: string;
|
|
23
23
|
/** Optional task ID for per-task tracking */
|
|
24
24
|
taskId?: string;
|
|
25
|
+
/**
|
|
26
|
+
* Portion of `input` the provider served from its prompt cache (billed at
|
|
27
|
+
* a fraction of the input rate). Absent when the runtime cannot tell.
|
|
28
|
+
*/
|
|
29
|
+
cachedInput?: number;
|
|
30
|
+
/** Model round-trips the run took (agentic steps). Absent when unknown. */
|
|
31
|
+
steps?: number;
|
|
32
|
+
}
|
|
33
|
+
/** Optional per-event detail beyond the raw input/output counts. */
|
|
34
|
+
export interface TokenUsageDetail {
|
|
35
|
+
cachedInput?: number;
|
|
36
|
+
steps?: number;
|
|
25
37
|
}
|
|
26
38
|
/**
|
|
27
39
|
* Per-session token usage record containing all events and aggregates
|
|
@@ -37,6 +49,8 @@ export interface SessionUsageRecord {
|
|
|
37
49
|
totalOutput: number;
|
|
38
50
|
/** Number of usage events recorded */
|
|
39
51
|
eventCount: number;
|
|
52
|
+
/** Total cached (cache-hit) input tokens across all events; absent on records written before 2026-09-18 */
|
|
53
|
+
totalCachedInput?: number;
|
|
40
54
|
/** Individual usage events */
|
|
41
55
|
events: TokenUsageEvent[];
|
|
42
56
|
}
|
|
@@ -65,6 +79,8 @@ export interface SessionUsageSummary {
|
|
|
65
79
|
totalOutput: number;
|
|
66
80
|
/** Number of events */
|
|
67
81
|
eventCount: number;
|
|
82
|
+
/** Total cache-hit input tokens, when the runtime reports them */
|
|
83
|
+
totalCachedInput?: number;
|
|
68
84
|
/** Computed cost in USD based on model pricing */
|
|
69
85
|
cost: number;
|
|
70
86
|
/** Per-model breakdown of token usage */
|
|
@@ -90,16 +106,22 @@ export interface ModelUsageBreakdown {
|
|
|
90
106
|
export declare const TOKEN_COSTS: Record<string, {
|
|
91
107
|
input: number;
|
|
92
108
|
output: number;
|
|
109
|
+
cachedInput?: number;
|
|
93
110
|
}>;
|
|
94
111
|
/**
|
|
95
112
|
* Calculate the cost for a given number of tokens and model.
|
|
96
113
|
*
|
|
97
|
-
*
|
|
114
|
+
* When the model has a `cachedInput` rate and the caller passes how many of
|
|
115
|
+
* the input tokens were cache hits, those tokens are billed at the hit rate
|
|
116
|
+
* and only the remainder at the full input rate.
|
|
117
|
+
*
|
|
118
|
+
* @param inputTokens - Total input tokens for the call(s), cache hits included
|
|
98
119
|
* @param outputTokens - Number of output tokens
|
|
99
120
|
* @param model - Model identifier
|
|
121
|
+
* @param cachedInputTokens - Portion of `inputTokens` served from cache (default 0)
|
|
100
122
|
* @returns Cost in USD
|
|
101
123
|
*/
|
|
102
|
-
export declare function calculateCost(inputTokens: number, outputTokens: number, model: string): number;
|
|
124
|
+
export declare function calculateCost(inputTokens: number, outputTokens: number, model: string, cachedInputTokens?: number): number;
|
|
103
125
|
/**
|
|
104
126
|
* Set a cost override for a session. When present, getSummary() uses this
|
|
105
127
|
* instead of recalculating from events.
|
|
@@ -159,8 +181,10 @@ export declare class TokenUsageService {
|
|
|
159
181
|
* @param input - Number of input tokens consumed
|
|
160
182
|
* @param output - Number of output tokens generated
|
|
161
183
|
* @param model - AI model identifier used
|
|
184
|
+
* @param taskId - Optional task the usage belongs to
|
|
185
|
+
* @param detail - Optional cache-hit and step counts for this event
|
|
162
186
|
*/
|
|
163
|
-
recordUsage(sessionName: string, agentId: string, input: number, output: number, model: string, taskId?: string): void;
|
|
187
|
+
recordUsage(sessionName: string, agentId: string, input: number, output: number, model: string, taskId?: string, detail?: TokenUsageDetail): void;
|
|
164
188
|
/**
|
|
165
189
|
* Set a cache-aware cost override for a session.
|
|
166
190
|
* Used when the caller has pre-calculated cost with proper cache pricing.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"token-usage.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/monitoring/token-usage.service.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAWH;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,mCAAmC;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,uBAAuB;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,sCAAsC;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,wCAAwC;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,mCAAmC;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,6CAA6C;IAC7C,MAAM,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"token-usage.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/monitoring/token-usage.service.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAWH;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,mCAAmC;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,uBAAuB;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,sCAAsC;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,wCAAwC;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,mCAAmC;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,6CAA6C;IAC7C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,2EAA2E;IAC3E,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,oEAAoE;AACpE,MAAM,WAAW,gBAAgB;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,mBAAmB;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,oDAAoD;IACpD,OAAO,EAAE,MAAM,CAAC;IAChB,2CAA2C;IAC3C,UAAU,EAAE,MAAM,CAAC;IACnB,4CAA4C;IAC5C,WAAW,EAAE,MAAM,CAAC;IACpB,sCAAsC;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,2GAA2G;IAC3G,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,8BAA8B;IAC9B,MAAM,EAAE,eAAe,EAAE,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,gDAAgD;IAChD,UAAU,EAAE,MAAM,CAAC;IACnB,kDAAkD;IAClD,WAAW,EAAE,MAAM,CAAC;IACpB,6BAA6B;IAC7B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,mBAAmB;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,uBAAuB;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,yBAAyB;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,0BAA0B;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,uBAAuB;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,kEAAkE;IAClE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,kDAAkD;IAClD,IAAI,EAAE,MAAM,CAAC;IACb,yCAAyC;IACzC,cAAc,EAAE,mBAAmB,EAAE,CAAC;CACvC;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,uBAAuB;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,kCAAkC;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,mCAAmC;IACnC,YAAY,EAAE,MAAM,CAAC;IACrB,0CAA0C;IAC1C,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;GAGG;AACH,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,CAwB/F,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,wBAAgB,aAAa,CAC3B,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,MAAM,EACb,iBAAiB,SAAI,GACpB,MAAM,CAIR;AASD;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAE9E;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAE9E;AAED;;;;;;;;;;;;GAYG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAkC;IAEzD,8CAA8C;IAC9C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA8C;IAEvE,wEAAwE;IACxE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAqE;IAElG,sCAAsC;IACtC,OAAO,CAAC,UAAU,CAA+C;IAEjE,0CAA0C;IAC1C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IAEpC;;;;OAIG;gBACS,UAAU,CAAC,EAAE,MAAM;IAI/B;;;;OAIG;IACH,MAAM,CAAC,WAAW,IAAI,iBAAiB;IAOvC;;OAEG;IACH,MAAM,CAAC,aAAa,IAAI,IAAI;IAO5B;;;;;;;;;;;;;OAaG;IACH,WAAW,CACT,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,gBAAgB,GACxB,IAAI;IAsCP;;;OAGG;IACH,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAI5D;;;;;OAKG;IACH,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,iBAAiB;IAgBnD;;;;OAIG;IACH,kBAAkB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,mBAAmB,EAAE;IA8D1D;;;;;;;OAOG;IACH,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI;IAQhF;;;;;OAKG;IACH,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAKlD;;;;;OAKG;IACH,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAI7E;;;;OAIG;IACH,cAAc,IAAI,GAAG,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAkB5H;;;;;;;;;OASG;IACH,oBAAoB,CAClB,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,IAAI,EACX,KAAK,CAAC,EAAE,IAAI,GACX;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE;IAyB9D;;OAEG;IACH,UAAU,IAAI,IAAI;IAIlB;;;;;OAKG;IACH,kBAAkB,IAAI,IAAI;IAa1B;;OAEG;IACH,iBAAiB,IAAI,IAAI;IAOzB;;;;OAIG;IACG,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAOlC;;;;OAIG;IACG,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAenC;;;;OAIG;IACH,eAAe,IAAI,MAAM;CAG1B"}
|