crewly 1.20.192 → 1.20.194
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/config/constants.ts +11 -0
- package/config/hooks/subagent-guard/subagent.sh +113 -0
- package/config/roles/architect/prompt.md +1 -1
- package/config/roles/auditor/prompt.md +1 -1
- package/config/roles/backend-developer/prompt.md +1 -1
- package/config/roles/content-strategist/prompt.md +2 -2
- package/config/roles/designer/prompt.md +1 -1
- package/config/roles/developer/prompt.md +2 -2
- package/config/roles/frontend-developer/prompt.md +1 -1
- package/config/roles/fullstack-dev/prompt.md +1 -1
- package/config/roles/generalist/prompt.md +1 -1
- package/config/roles/ops/prompt.md +1 -1
- package/config/roles/orchestrator/prompt.md +2 -2
- package/config/roles/product-manager/prompt.md +1 -1
- package/config/roles/qa/prompt.md +1 -1
- package/config/roles/qa-engineer/prompt.md +1 -1
- package/config/roles/researcher/prompt.md +1 -1
- package/config/roles/sales/prompt.md +1 -1
- package/config/roles/support/prompt.md +1 -1
- package/config/roles/team-leader/prompt.md +1 -1
- package/config/roles/tpm/prompt.md +1 -1
- package/config/roles/ux-designer/prompt.md +1 -1
- package/config/skills/_common/complete-body-shape.test.sh +17 -0
- package/config/skills/agent/core/complete-task/SKILL.md +27 -4
- package/config/skills/agent/core/complete-task/execute.sh +23 -3
- package/config/skills/agent/core/complete-task/execute.test.sh +34 -0
- package/config/skills/agent/core/experiment-card/SKILL.md +96 -0
- package/config/skills/agent/core/experiment-card/execute.sh +147 -0
- package/config/skills/agent/core/experiment-card/execute.test.sh +91 -0
- package/config/skills/agent/core/handoff-task/execute.sh +1 -1
- package/config/skills/agent/core/report-status/SKILL.md +27 -4
- package/config/skills/agent/core/report-status/execute.sh +104 -4
- package/config/skills/agent/core/todo-add/SKILL.md +16 -2
- package/config/skills/agent/core/todo-add/execute.sh +21 -5
- package/config/skills/agent/core/todo-add/execute.test.sh +14 -0
- package/config/skills/agent/core/todo-tasks/SKILL.md +4 -3
- package/config/skills/agent/core/todo-update/SKILL.md +13 -2
- package/config/skills/agent/core/todo-update/execute.sh +41 -3
- package/config/skills/agent/core/todo-update/execute.test.sh +7 -0
- package/config/skills/marketplace-registry.ts +4 -4
- package/config/skills/orchestrator/complete-task/SKILL.md +13 -6
- package/config/skills/orchestrator/complete-task/execute.sh +22 -3
- package/config/skills/orchestrator/delegate-task/execute.sh +2 -2
- package/config/skills/orchestrator/harness-login/SKILL.md +9 -1
- package/config/skills/orchestrator/harness-login/execute.sh +12 -4
- package/config/skills/orchestrator/harness-login/execute.test.sh +7 -0
- package/config/skills/registry.json +6 -5
- package/config/skills/team-leader/delegate-task/execute.sh +1 -1
- package/config/skills/team-leader/verify-output/SKILL.md +18 -1
- package/config/skills/team-leader/verify-output/execute.sh +28 -0
- package/config/skills/team-leader/verify-output/execute.test.sh +27 -0
- package/dist/backend/backend/src/constants.d.ts +192 -2
- package/dist/backend/backend/src/constants.d.ts.map +1 -1
- package/dist/backend/backend/src/constants.js +196 -1
- package/dist/backend/backend/src/constants.js.map +1 -1
- package/dist/backend/backend/src/controllers/canva/canva.controller.d.ts +6 -0
- package/dist/backend/backend/src/controllers/canva/canva.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/canva/canva.controller.js +13 -2
- package/dist/backend/backend/src/controllers/canva/canva.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/canva/canva.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/canva/canva.routes.js +3 -1
- package/dist/backend/backend/src/controllers/canva/canva.routes.js.map +1 -1
- package/dist/backend/backend/src/controllers/cloud/cloud.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/cloud/cloud.controller.js +4 -1
- package/dist/backend/backend/src/controllers/cloud/cloud.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/connector/connector.controller.d.ts +4 -0
- package/dist/backend/backend/src/controllers/connector/connector.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/connector/connector.controller.js +32 -3
- package/dist/backend/backend/src/controllers/connector/connector.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/connector/grant-sharing.handler.d.ts +41 -0
- package/dist/backend/backend/src/controllers/connector/grant-sharing.handler.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/connector/grant-sharing.handler.js +75 -0
- package/dist/backend/backend/src/controllers/connector/grant-sharing.handler.js.map +1 -0
- package/dist/backend/backend/src/controllers/experiments/experiments.routes.d.ts +27 -0
- package/dist/backend/backend/src/controllers/experiments/experiments.routes.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/experiments/experiments.routes.js +96 -0
- package/dist/backend/backend/src/controllers/experiments/experiments.routes.js.map +1 -0
- package/dist/backend/backend/src/controllers/google/google.controller.d.ts +6 -0
- package/dist/backend/backend/src/controllers/google/google.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/google/google.controller.js +19 -0
- package/dist/backend/backend/src/controllers/google/google.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/google/google.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/google/google.routes.js +3 -1
- package/dist/backend/backend/src/controllers/google/google.routes.js.map +1 -1
- package/dist/backend/backend/src/controllers/harness/owner-login.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/harness/owner-login.controller.js +22 -3
- package/dist/backend/backend/src/controllers/harness/owner-login.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/microsoft/microsoft-todo.controller.d.ts +19 -2
- package/dist/backend/backend/src/controllers/microsoft/microsoft-todo.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/microsoft/microsoft-todo.controller.js +37 -4
- package/dist/backend/backend/src/controllers/microsoft/microsoft-todo.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/microsoft/microsoft-todo.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/microsoft/microsoft-todo.routes.js +3 -1
- package/dist/backend/backend/src/controllers/microsoft/microsoft-todo.routes.js.map +1 -1
- package/dist/backend/backend/src/controllers/monitoring/terminal.controller.d.ts +9 -0
- package/dist/backend/backend/src/controllers/monitoring/terminal.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/monitoring/terminal.controller.js +26 -0
- package/dist/backend/backend/src/controllers/monitoring/terminal.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/people/people.routes.d.ts +25 -0
- package/dist/backend/backend/src/controllers/people/people.routes.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/people/people.routes.js +90 -0
- package/dist/backend/backend/src/controllers/people/people.routes.js.map +1 -0
- package/dist/backend/backend/src/controllers/request-types.d.ts +2 -0
- package/dist/backend/backend/src/controllers/request-types.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/system/runtime-fallback.controller.d.ts +22 -1
- package/dist/backend/backend/src/controllers/system/runtime-fallback.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/system/runtime-fallback.controller.js +143 -3
- package/dist/backend/backend/src/controllers/system/runtime-fallback.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.d.ts +25 -3
- 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 +125 -19
- package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.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 +14 -0
- package/dist/backend/backend/src/controllers/team/team.controller.js.map +1 -1
- package/dist/backend/backend/src/index.d.ts.map +1 -1
- package/dist/backend/backend/src/index.js +82 -3
- package/dist/backend/backend/src/index.js.map +1 -1
- package/dist/backend/backend/src/routes/api.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/routes/api.routes.js +6 -0
- package/dist/backend/backend/src/routes/api.routes.js.map +1 -1
- package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts +13 -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 +28 -3
- package/dist/backend/backend/src/services/agent/agent-registration.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/auditor-scheduler.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/auditor-scheduler.service.js +3 -0
- package/dist/backend/backend/src/services/agent/auditor-scheduler.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/control-plane-guard.service.d.ts +3 -2
- package/dist/backend/backend/src/services/agent/control-plane-guard.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/control-plane-guard.service.js +14 -3
- package/dist/backend/backend/src/services/agent/control-plane-guard.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/fresh-task-conversation.service.d.ts +28 -1
- package/dist/backend/backend/src/services/agent/fresh-task-conversation.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/fresh-task-conversation.service.js +48 -4
- package/dist/backend/backend/src/services/agent/fresh-task-conversation.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/idle-detection.service.js +1 -1
- package/dist/backend/backend/src/services/agent/idle-detection.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/oauth-relogin-monitor.service.d.ts +2 -1
- 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 +17 -4
- package/dist/backend/backend/src/services/agent/oauth-relogin-monitor.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.d.ts +14 -0
- 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 +38 -0
- package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/runtime-session-recovery.d.ts +34 -0
- package/dist/backend/backend/src/services/agent/runtime-session-recovery.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/runtime-session-recovery.js +49 -5
- package/dist/backend/backend/src/services/agent/runtime-session-recovery.js.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/communication.module.d.ts.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/communication.module.js +8 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/communication.module.js.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/lazy-anti-patterns.module.js +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/lazy-anti-patterns.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 +1 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.js.map +1 -1
- package/dist/backend/backend/src/services/canva/canva-token.service.d.ts +17 -4
- package/dist/backend/backend/src/services/canva/canva-token.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/canva/canva-token.service.js +54 -17
- package/dist/backend/backend/src/services/canva/canva-token.service.js.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts +35 -0
- package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.js +77 -1
- package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.js.map +1 -1
- package/dist/backend/backend/src/services/cloud/cloud-disconnect-notice.service.d.ts +17 -2
- package/dist/backend/backend/src/services/cloud/cloud-disconnect-notice.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/cloud/cloud-disconnect-notice.service.js +30 -6
- package/dist/backend/backend/src/services/cloud/cloud-disconnect-notice.service.js.map +1 -1
- package/dist/backend/backend/src/services/cloud/cloud-disconnect-notice.utils.d.ts +38 -2
- package/dist/backend/backend/src/services/cloud/cloud-disconnect-notice.utils.d.ts.map +1 -1
- package/dist/backend/backend/src/services/cloud/cloud-disconnect-notice.utils.js +63 -1
- package/dist/backend/backend/src/services/cloud/cloud-disconnect-notice.utils.js.map +1 -1
- package/dist/backend/backend/src/services/cloud/cloud-sync.service.d.ts +74 -4
- package/dist/backend/backend/src/services/cloud/cloud-sync.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/cloud/cloud-sync.service.js +204 -56
- package/dist/backend/backend/src/services/cloud/cloud-sync.service.js.map +1 -1
- package/dist/backend/backend/src/services/cloud/cloud-sync.types.d.ts +19 -0
- package/dist/backend/backend/src/services/cloud/cloud-sync.types.d.ts.map +1 -1
- package/dist/backend/backend/src/services/cloud/cloud-sync.types.js.map +1 -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 +3 -0
- package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.js.map +1 -1
- package/dist/backend/backend/src/services/experiments/experiment-verdict.d.ts +88 -0
- package/dist/backend/backend/src/services/experiments/experiment-verdict.d.ts.map +1 -0
- package/dist/backend/backend/src/services/experiments/experiment-verdict.js +226 -0
- package/dist/backend/backend/src/services/experiments/experiment-verdict.js.map +1 -0
- package/dist/backend/backend/src/services/experiments/experiment.service.d.ts +301 -0
- package/dist/backend/backend/src/services/experiments/experiment.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/experiments/experiment.service.js +754 -0
- package/dist/backend/backend/src/services/experiments/experiment.service.js.map +1 -0
- package/dist/backend/backend/src/services/experiments/experiment.wiring.d.ts +73 -0
- package/dist/backend/backend/src/services/experiments/experiment.wiring.d.ts.map +1 -0
- package/dist/backend/backend/src/services/experiments/experiment.wiring.js +142 -0
- package/dist/backend/backend/src/services/experiments/experiment.wiring.js.map +1 -0
- package/dist/backend/backend/src/services/experiments/seo-ops-metric.fetcher.d.ts +60 -0
- package/dist/backend/backend/src/services/experiments/seo-ops-metric.fetcher.d.ts.map +1 -0
- package/dist/backend/backend/src/services/experiments/seo-ops-metric.fetcher.js +113 -0
- package/dist/backend/backend/src/services/experiments/seo-ops-metric.fetcher.js.map +1 -0
- package/dist/backend/backend/src/services/google/google-workspace-token.service.d.ts +25 -2
- package/dist/backend/backend/src/services/google/google-workspace-token.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/google/google-workspace-token.service.js +53 -7
- package/dist/backend/backend/src/services/google/google-workspace-token.service.js.map +1 -1
- package/dist/backend/backend/src/services/harness/claude-accounts.d.ts +207 -0
- package/dist/backend/backend/src/services/harness/claude-accounts.d.ts.map +1 -0
- package/dist/backend/backend/src/services/harness/claude-accounts.js +306 -0
- package/dist/backend/backend/src/services/harness/claude-accounts.js.map +1 -0
- package/dist/backend/backend/src/services/harness/harness-credentials.store.d.ts +35 -0
- package/dist/backend/backend/src/services/harness/harness-credentials.store.d.ts.map +1 -1
- package/dist/backend/backend/src/services/harness/harness-credentials.store.js +48 -0
- package/dist/backend/backend/src/services/harness/harness-credentials.store.js.map +1 -1
- package/dist/backend/backend/src/services/harness/harness-relogin.service.d.ts +70 -1
- package/dist/backend/backend/src/services/harness/harness-relogin.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/harness/harness-relogin.service.js +156 -19
- package/dist/backend/backend/src/services/harness/harness-relogin.service.js.map +1 -1
- package/dist/backend/backend/src/services/harness/harness.types.d.ts +2 -0
- package/dist/backend/backend/src/services/harness/harness.types.d.ts.map +1 -1
- package/dist/backend/backend/src/services/harness/harness.types.js.map +1 -1
- package/dist/backend/backend/src/services/harness/login-broker.service.d.ts +19 -4
- package/dist/backend/backend/src/services/harness/login-broker.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/harness/login-broker.service.js +46 -7
- package/dist/backend/backend/src/services/harness/login-broker.service.js.map +1 -1
- package/dist/backend/backend/src/services/harness/owner-login-request.d.ts +18 -2
- package/dist/backend/backend/src/services/harness/owner-login-request.d.ts.map +1 -1
- package/dist/backend/backend/src/services/harness/owner-login-request.js +31 -7
- package/dist/backend/backend/src/services/harness/owner-login-request.js.map +1 -1
- package/dist/backend/backend/src/services/marketplace/marketplace-installer.service.d.ts +21 -0
- package/dist/backend/backend/src/services/marketplace/marketplace-installer.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/marketplace/marketplace-installer.service.js +39 -1
- package/dist/backend/backend/src/services/marketplace/marketplace-installer.service.js.map +1 -1
- package/dist/backend/backend/src/services/messaging/queue-processor.service.d.ts +19 -0
- package/dist/backend/backend/src/services/messaging/queue-processor.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/messaging/queue-processor.service.js +46 -0
- package/dist/backend/backend/src/services/messaging/queue-processor.service.js.map +1 -1
- package/dist/backend/backend/src/services/messaging/sub-agent-message-queue.service.d.ts +5 -0
- package/dist/backend/backend/src/services/messaging/sub-agent-message-queue.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/messaging/sub-agent-message-queue.service.js +13 -0
- package/dist/backend/backend/src/services/messaging/sub-agent-message-queue.service.js.map +1 -1
- package/dist/backend/backend/src/services/microsoft/microsoft-todo.service.d.ts +87 -5
- package/dist/backend/backend/src/services/microsoft/microsoft-todo.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/microsoft/microsoft-todo.service.js +151 -12
- package/dist/backend/backend/src/services/microsoft/microsoft-todo.service.js.map +1 -1
- package/dist/backend/backend/src/services/microsoft/microsoft-token.service.d.ts +17 -4
- package/dist/backend/backend/src/services/microsoft/microsoft-token.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/microsoft/microsoft-token.service.js +50 -17
- package/dist/backend/backend/src/services/microsoft/microsoft-token.service.js.map +1 -1
- package/dist/backend/backend/src/services/monitoring/claude-session-tokens.service.d.ts +53 -7
- package/dist/backend/backend/src/services/monitoring/claude-session-tokens.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/monitoring/claude-session-tokens.service.js +77 -14
- package/dist/backend/backend/src/services/monitoring/claude-session-tokens.service.js.map +1 -1
- package/dist/backend/backend/src/services/monitoring/claude-transcript-sync.service.d.ts +53 -1
- package/dist/backend/backend/src/services/monitoring/claude-transcript-sync.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/monitoring/claude-transcript-sync.service.js +130 -29
- package/dist/backend/backend/src/services/monitoring/claude-transcript-sync.service.js.map +1 -1
- package/dist/backend/backend/src/services/orc/orc-status-router.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/orc/orc-status-router.service.js +3 -2
- package/dist/backend/backend/src/services/orc/orc-status-router.service.js.map +1 -1
- package/dist/backend/backend/src/services/people/acting-for.service.d.ts +188 -0
- package/dist/backend/backend/src/services/people/acting-for.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/people/acting-for.service.js +299 -0
- package/dist/backend/backend/src/services/people/acting-for.service.js.map +1 -0
- package/dist/backend/backend/src/services/people/dedicated-agent.d.ts +89 -0
- package/dist/backend/backend/src/services/people/dedicated-agent.d.ts.map +1 -0
- package/dist/backend/backend/src/services/people/dedicated-agent.js +113 -0
- package/dist/backend/backend/src/services/people/dedicated-agent.js.map +1 -0
- package/dist/backend/backend/src/services/people/grant-sharing.d.ts +80 -0
- package/dist/backend/backend/src/services/people/grant-sharing.d.ts.map +1 -0
- package/dist/backend/backend/src/services/people/grant-sharing.js +143 -0
- package/dist/backend/backend/src/services/people/grant-sharing.js.map +1 -0
- package/dist/backend/backend/src/services/people/people-directory.service.d.ts +239 -0
- package/dist/backend/backend/src/services/people/people-directory.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/people/people-directory.service.js +454 -0
- package/dist/backend/backend/src/services/people/people-directory.service.js.map +1 -0
- package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.js.map +1 -1
- package/dist/backend/backend/src/services/runtime-fallback/effective-runtime.d.ts +29 -1
- package/dist/backend/backend/src/services/runtime-fallback/effective-runtime.d.ts.map +1 -1
- package/dist/backend/backend/src/services/runtime-fallback/effective-runtime.js +40 -0
- package/dist/backend/backend/src/services/runtime-fallback/effective-runtime.js.map +1 -1
- package/dist/backend/backend/src/services/runtime-fallback/runtime-availability.d.ts +8 -1
- package/dist/backend/backend/src/services/runtime-fallback/runtime-availability.d.ts.map +1 -1
- package/dist/backend/backend/src/services/runtime-fallback/runtime-availability.js +16 -2
- package/dist/backend/backend/src/services/runtime-fallback/runtime-availability.js.map +1 -1
- package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.service.d.ts +60 -1
- package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.service.js +140 -8
- package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.service.js.map +1 -1
- package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.store.js +1 -1
- package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.store.js.map +1 -1
- package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.types.d.ts +20 -7
- package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.types.d.ts.map +1 -1
- package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.types.js +24 -7
- package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.types.js.map +1 -1
- package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.wiring.d.ts.map +1 -1
- package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.wiring.js +12 -2
- package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.wiring.js.map +1 -1
- package/dist/backend/backend/src/services/runtime-fallback/runtime-usage-probe.d.ts +7 -1
- package/dist/backend/backend/src/services/runtime-fallback/runtime-usage-probe.d.ts.map +1 -1
- package/dist/backend/backend/src/services/runtime-fallback/runtime-usage-probe.js +18 -3
- package/dist/backend/backend/src/services/runtime-fallback/runtime-usage-probe.js.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-agent-dm.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-agent-dm.service.js +3 -0
- package/dist/backend/backend/src/services/slack/slack-agent-dm.service.js.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-bot-ids.d.ts +33 -0
- package/dist/backend/backend/src/services/slack/slack-bot-ids.d.ts.map +1 -0
- package/dist/backend/backend/src/services/slack/slack-bot-ids.js +56 -0
- package/dist/backend/backend/src/services/slack/slack-bot-ids.js.map +1 -0
- package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.d.ts +22 -0
- package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.d.ts.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.js +70 -0
- package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.js.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-team-channel.service.d.ts +9 -0
- package/dist/backend/backend/src/services/slack/slack-team-channel.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-team-channel.service.js +46 -0
- package/dist/backend/backend/src/services/slack/slack-team-channel.service.js.map +1 -1
- package/dist/backend/backend/src/services/slack/slack.service.d.ts +6 -0
- package/dist/backend/backend/src/services/slack/slack.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/slack/slack.service.js +8 -0
- package/dist/backend/backend/src/services/slack/slack.service.js.map +1 -1
- package/dist/backend/backend/src/services/task-pool/completion-evidence.service.d.ts +105 -0
- package/dist/backend/backend/src/services/task-pool/completion-evidence.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/task-pool/completion-evidence.service.js +238 -0
- package/dist/backend/backend/src/services/task-pool/completion-evidence.service.js.map +1 -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 +4 -0
- package/dist/backend/backend/src/services/task-pool/task-pool.service.js.map +1 -1
- package/dist/backend/backend/src/services/usage/usage-stats.service.d.ts +39 -12
- package/dist/backend/backend/src/services/usage/usage-stats.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/usage/usage-stats.service.js +61 -20
- package/dist/backend/backend/src/services/usage/usage-stats.service.js.map +1 -1
- package/dist/backend/backend/src/services/v3/agent-auto-claim.service.d.ts +2 -0
- package/dist/backend/backend/src/services/v3/agent-auto-claim.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/agent-auto-claim.service.js +9 -0
- package/dist/backend/backend/src/services/v3/agent-auto-claim.service.js.map +1 -1
- package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.d.ts +10 -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 +45 -2
- package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.js.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-ingest.service.d.ts +3 -1
- package/dist/backend/backend/src/services/wiki/wiki-ingest.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-ingest.service.js.map +1 -1
- package/dist/backend/backend/src/services/workflow/message-scheduler.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/workflow/message-scheduler.service.js +3 -0
- package/dist/backend/backend/src/services/workflow/message-scheduler.service.js.map +1 -1
- package/dist/backend/backend/src/services/workflow/scheduler.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/workflow/scheduler.service.js +3 -0
- package/dist/backend/backend/src/services/workflow/scheduler.service.js.map +1 -1
- package/dist/backend/backend/src/types/experiment.types.d.ts +153 -0
- package/dist/backend/backend/src/types/experiment.types.d.ts.map +1 -0
- package/dist/backend/backend/src/types/experiment.types.js +32 -0
- package/dist/backend/backend/src/types/experiment.types.js.map +1 -0
- package/dist/backend/backend/src/types/index.d.ts +12 -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/messaging.types.d.ts +11 -0
- package/dist/backend/backend/src/types/messaging.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/messaging.types.js.map +1 -1
- package/dist/backend/backend/src/types/v2/completion-evidence.types.d.ts +77 -0
- package/dist/backend/backend/src/types/v2/completion-evidence.types.d.ts.map +1 -0
- package/dist/backend/backend/src/types/v2/completion-evidence.types.js +119 -0
- package/dist/backend/backend/src/types/v2/completion-evidence.types.js.map +1 -0
- package/dist/backend/backend/src/types/v2/work-item.types.d.ts +13 -0
- package/dist/backend/backend/src/types/v2/work-item.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/v2/work-item.types.js.map +1 -1
- package/dist/backend/build-info.json +2 -2
- package/dist/backend/config/constants.d.ts +11 -0
- package/dist/backend/config/constants.d.ts.map +1 -1
- package/dist/backend/config/constants.js +11 -0
- package/dist/backend/config/constants.js.map +1 -1
- package/dist/cli/backend/src/constants.d.ts +192 -2
- package/dist/cli/backend/src/constants.d.ts.map +1 -1
- package/dist/cli/backend/src/constants.js +196 -1
- package/dist/cli/backend/src/constants.js.map +1 -1
- package/dist/cli/backend/src/services/agent/agent-registration.service.d.ts +13 -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 +28 -3
- package/dist/cli/backend/src/services/agent/agent-registration.service.js.map +1 -1
- package/dist/cli/backend/src/services/agent/auditor-scheduler.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/agent/auditor-scheduler.service.js +3 -0
- package/dist/cli/backend/src/services/agent/auditor-scheduler.service.js.map +1 -1
- package/dist/cli/backend/src/services/agent/control-plane-guard.service.d.ts +3 -2
- package/dist/cli/backend/src/services/agent/control-plane-guard.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/agent/control-plane-guard.service.js +14 -3
- package/dist/cli/backend/src/services/agent/control-plane-guard.service.js.map +1 -1
- package/dist/cli/backend/src/services/agent/fresh-task-conversation.service.d.ts +28 -1
- package/dist/cli/backend/src/services/agent/fresh-task-conversation.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/agent/fresh-task-conversation.service.js +48 -4
- package/dist/cli/backend/src/services/agent/fresh-task-conversation.service.js.map +1 -1
- package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.d.ts +2 -1
- 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 +17 -4
- package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.js.map +1 -1
- package/dist/cli/backend/src/services/agent/runtime-exit-monitor.service.d.ts +14 -0
- 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 +38 -0
- package/dist/cli/backend/src/services/agent/runtime-exit-monitor.service.js.map +1 -1
- package/dist/cli/backend/src/services/agent/runtime-session-recovery.d.ts +34 -0
- package/dist/cli/backend/src/services/agent/runtime-session-recovery.d.ts.map +1 -1
- package/dist/cli/backend/src/services/agent/runtime-session-recovery.js +49 -5
- package/dist/cli/backend/src/services/agent/runtime-session-recovery.js.map +1 -1
- package/dist/cli/backend/src/services/ai/prompt-modules/communication.module.d.ts.map +1 -1
- package/dist/cli/backend/src/services/ai/prompt-modules/communication.module.js +8 -1
- package/dist/cli/backend/src/services/ai/prompt-modules/communication.module.js.map +1 -1
- package/dist/cli/backend/src/services/ai/prompt-modules/lazy-anti-patterns.module.js +1 -1
- package/dist/cli/backend/src/services/ai/prompt-modules/lazy-anti-patterns.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 +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.js.map +1 -1
- package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts +35 -0
- package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.js +77 -1
- package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.js.map +1 -1
- package/dist/cli/backend/src/services/cloud/cloud-sync.service.d.ts +74 -4
- package/dist/cli/backend/src/services/cloud/cloud-sync.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/cloud/cloud-sync.service.js +204 -56
- package/dist/cli/backend/src/services/cloud/cloud-sync.service.js.map +1 -1
- package/dist/cli/backend/src/services/cloud/cloud-sync.types.d.ts +19 -0
- package/dist/cli/backend/src/services/cloud/cloud-sync.types.d.ts.map +1 -1
- package/dist/cli/backend/src/services/cloud/cloud-sync.types.js.map +1 -1
- package/dist/cli/backend/src/services/harness/claude-accounts.d.ts +207 -0
- package/dist/cli/backend/src/services/harness/claude-accounts.d.ts.map +1 -0
- package/dist/cli/backend/src/services/harness/claude-accounts.js +306 -0
- package/dist/cli/backend/src/services/harness/claude-accounts.js.map +1 -0
- package/dist/cli/backend/src/services/harness/harness-credentials.store.d.ts +35 -0
- package/dist/cli/backend/src/services/harness/harness-credentials.store.d.ts.map +1 -1
- package/dist/cli/backend/src/services/harness/harness-credentials.store.js +48 -0
- package/dist/cli/backend/src/services/harness/harness-credentials.store.js.map +1 -1
- package/dist/cli/backend/src/services/harness/harness-relogin.service.d.ts +70 -1
- package/dist/cli/backend/src/services/harness/harness-relogin.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/harness/harness-relogin.service.js +156 -19
- package/dist/cli/backend/src/services/harness/harness-relogin.service.js.map +1 -1
- package/dist/cli/backend/src/services/harness/harness.types.d.ts +2 -0
- package/dist/cli/backend/src/services/harness/harness.types.d.ts.map +1 -1
- package/dist/cli/backend/src/services/harness/harness.types.js.map +1 -1
- package/dist/cli/backend/src/services/harness/login-broker.service.d.ts +19 -4
- package/dist/cli/backend/src/services/harness/login-broker.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/harness/login-broker.service.js +46 -7
- package/dist/cli/backend/src/services/harness/login-broker.service.js.map +1 -1
- package/dist/cli/backend/src/services/harness/owner-login-request.d.ts +18 -2
- package/dist/cli/backend/src/services/harness/owner-login-request.d.ts.map +1 -1
- package/dist/cli/backend/src/services/harness/owner-login-request.js +31 -7
- package/dist/cli/backend/src/services/harness/owner-login-request.js.map +1 -1
- package/dist/cli/backend/src/services/marketplace/marketplace-installer.service.d.ts +21 -0
- package/dist/cli/backend/src/services/marketplace/marketplace-installer.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/marketplace/marketplace-installer.service.js +39 -1
- package/dist/cli/backend/src/services/marketplace/marketplace-installer.service.js.map +1 -1
- package/dist/cli/backend/src/services/messaging/queue-processor.service.d.ts +19 -0
- package/dist/cli/backend/src/services/messaging/queue-processor.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/messaging/queue-processor.service.js +46 -0
- package/dist/cli/backend/src/services/messaging/queue-processor.service.js.map +1 -1
- package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.d.ts +5 -0
- package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.js +13 -0
- package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.js.map +1 -1
- package/dist/cli/backend/src/services/monitoring/claude-session-tokens.service.d.ts +197 -0
- package/dist/cli/backend/src/services/monitoring/claude-session-tokens.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/monitoring/claude-session-tokens.service.js +455 -0
- package/dist/cli/backend/src/services/monitoring/claude-session-tokens.service.js.map +1 -0
- package/dist/cli/backend/src/services/people/acting-for.service.d.ts +188 -0
- package/dist/cli/backend/src/services/people/acting-for.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/people/acting-for.service.js +299 -0
- package/dist/cli/backend/src/services/people/acting-for.service.js.map +1 -0
- package/dist/cli/backend/src/services/people/dedicated-agent.d.ts +89 -0
- package/dist/cli/backend/src/services/people/dedicated-agent.d.ts.map +1 -0
- package/dist/cli/backend/src/services/people/dedicated-agent.js +113 -0
- package/dist/cli/backend/src/services/people/dedicated-agent.js.map +1 -0
- package/dist/cli/backend/src/services/people/people-directory.service.d.ts +239 -0
- package/dist/cli/backend/src/services/people/people-directory.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/people/people-directory.service.js +454 -0
- package/dist/cli/backend/src/services/people/people-directory.service.js.map +1 -0
- package/dist/cli/backend/src/services/runtime-fallback/effective-runtime.d.ts +29 -1
- package/dist/cli/backend/src/services/runtime-fallback/effective-runtime.d.ts.map +1 -1
- package/dist/cli/backend/src/services/runtime-fallback/effective-runtime.js +40 -0
- package/dist/cli/backend/src/services/runtime-fallback/effective-runtime.js.map +1 -1
- package/dist/cli/backend/src/services/runtime-fallback/runtime-fallback.types.d.ts +20 -7
- package/dist/cli/backend/src/services/runtime-fallback/runtime-fallback.types.d.ts.map +1 -1
- package/dist/cli/backend/src/services/runtime-fallback/runtime-fallback.types.js +24 -7
- package/dist/cli/backend/src/services/runtime-fallback/runtime-fallback.types.js.map +1 -1
- package/dist/cli/backend/src/services/slack/slack-agent-dm.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/slack/slack-agent-dm.service.js +3 -0
- package/dist/cli/backend/src/services/slack/slack-agent-dm.service.js.map +1 -1
- package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.d.ts +22 -0
- package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.d.ts.map +1 -1
- package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.js +70 -0
- package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.js.map +1 -1
- package/dist/cli/backend/src/services/slack/slack-team-channel.service.d.ts +9 -0
- package/dist/cli/backend/src/services/slack/slack-team-channel.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/slack/slack-team-channel.service.js +46 -0
- package/dist/cli/backend/src/services/slack/slack-team-channel.service.js.map +1 -1
- package/dist/cli/backend/src/services/slack/slack.service.d.ts +6 -0
- package/dist/cli/backend/src/services/slack/slack.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/slack/slack.service.js +8 -0
- package/dist/cli/backend/src/services/slack/slack.service.js.map +1 -1
- 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 +4 -0
- package/dist/cli/backend/src/services/task-pool/task-pool.service.js.map +1 -1
- package/dist/cli/backend/src/services/wiki/wiki-ingest.service.d.ts +3 -1
- package/dist/cli/backend/src/services/wiki/wiki-ingest.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/wiki/wiki-ingest.service.js.map +1 -1
- package/dist/cli/backend/src/types/index.d.ts +12 -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/messaging.types.d.ts +11 -0
- package/dist/cli/backend/src/types/messaging.types.d.ts.map +1 -1
- package/dist/cli/backend/src/types/messaging.types.js.map +1 -1
- package/dist/cli/backend/src/types/v2/work-item.types.d.ts +13 -0
- package/dist/cli/backend/src/types/v2/work-item.types.d.ts.map +1 -1
- package/dist/cli/backend/src/types/v2/work-item.types.js.map +1 -1
- package/dist/cli/cli/src/utils/marketplace.d.ts +21 -0
- package/dist/cli/cli/src/utils/marketplace.d.ts.map +1 -1
- package/dist/cli/cli/src/utils/marketplace.js +35 -1
- package/dist/cli/cli/src/utils/marketplace.js.map +1 -1
- package/dist/cli/config/constants.d.ts +11 -0
- package/dist/cli/config/constants.d.ts.map +1 -1
- package/dist/cli/config/constants.js +11 -0
- package/dist/cli/config/constants.js.map +1 -1
- package/dist/cli/config/skills/marketplace-registry.d.ts +4 -4
- package/dist/cli/config/skills/marketplace-registry.js +4 -4
- package/frontend/dist/assets/{index-fc715ec3.css → index-5e967795.css} +1 -1
- package/frontend/dist/assets/{index-5b7af029.js → index-800118ca.js} +296 -296
- package/frontend/dist/index.html +2 -2
- package/package.json +1 -1
- package/packages/crewly-agent/src/runtime/tool-registry.test.ts +45 -0
- package/packages/crewly-agent/src/runtime/tool-registry.ts +40 -5
- package/packages/crewly-agent/src/test/isolated-home.test.ts +24 -0
|
@@ -0,0 +1,455 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Claude Session Token Reader
|
|
3
|
+
*
|
|
4
|
+
* Reads per-turn token usage from Claude Code's session JSONL files.
|
|
5
|
+
* Claude Code stores conversations at:
|
|
6
|
+
* ~/.claude/projects/{path-slug}/{sessionId}.jsonl
|
|
7
|
+
* or, for a session that runs on another of the owner's Claude Code accounts
|
|
8
|
+
* (issue #942, `CLAUDE_CONFIG_DIR` set to the account's config dir):
|
|
9
|
+
* <account config dir>/projects/{path-slug}/{sessionId}.jsonl
|
|
10
|
+
*
|
|
11
|
+
* Each assistant message includes an API `usage` object with exact
|
|
12
|
+
* token counts (input_tokens, output_tokens, cache tokens).
|
|
13
|
+
*
|
|
14
|
+
* Used as the primary token source for claude-code agents because
|
|
15
|
+
* Claude Code's TUI status bar is not capturable from PTY scrollback.
|
|
16
|
+
*
|
|
17
|
+
* @module services/monitoring/claude-session-tokens
|
|
18
|
+
*/
|
|
19
|
+
import { promises as fs, realpathSync } from 'fs';
|
|
20
|
+
import * as path from 'path';
|
|
21
|
+
import * as os from 'os';
|
|
22
|
+
import { LoggerService } from '../core/logger.service.js';
|
|
23
|
+
/**
|
|
24
|
+
* Cache-aware cost rates for Claude models (USD per token).
|
|
25
|
+
* Cache reads are ~10% of input price; cache writes are ~125% of input price.
|
|
26
|
+
*/
|
|
27
|
+
const CLAUDE_COST_RATES = {
|
|
28
|
+
'claude-opus-4-6': { input: 0.000015, output: 0.000075, cacheRead: 0.0000015, cacheWrite: 0.00001875 },
|
|
29
|
+
'claude-opus-4-20250514': { input: 0.000015, output: 0.000075, cacheRead: 0.0000015, cacheWrite: 0.00001875 },
|
|
30
|
+
'claude-sonnet-4-6': { input: 0.000003, output: 0.000015, cacheRead: 0.0000003, cacheWrite: 0.00000375 },
|
|
31
|
+
'claude-sonnet-4-20250514': { input: 0.000003, output: 0.000015, cacheRead: 0.0000003, cacheWrite: 0.00000375 },
|
|
32
|
+
'claude-haiku-4-20250506': { input: 0.00000025, output: 0.00000125, cacheRead: 0.000000025, cacheWrite: 0.0000003125 },
|
|
33
|
+
default: { input: 0.000003, output: 0.000015, cacheRead: 0.0000003, cacheWrite: 0.00000375 },
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* Calculates cost with proper cache-aware pricing for Claude models.
|
|
37
|
+
*/
|
|
38
|
+
function calculateClaudeCost(inputTokens, outputTokens, cacheReadTokens, cacheCreateTokens, model) {
|
|
39
|
+
const rates = CLAUDE_COST_RATES[model] || CLAUDE_COST_RATES.default;
|
|
40
|
+
return (inputTokens * rates.input +
|
|
41
|
+
outputTokens * rates.output +
|
|
42
|
+
cacheReadTokens * rates.cacheRead +
|
|
43
|
+
cacheCreateTokens * rates.cacheWrite);
|
|
44
|
+
}
|
|
45
|
+
/** Claude Code's per-user state directory, under the home directory. */
|
|
46
|
+
const CLAUDE_DIR_NAME = '.claude';
|
|
47
|
+
/** Subdirectory of {@link CLAUDE_DIR_NAME} holding one directory per project slug. */
|
|
48
|
+
const CLAUDE_PROJECTS_DIR_NAME = 'projects';
|
|
49
|
+
/** File extension of Claude Code conversation transcripts. */
|
|
50
|
+
const JSONL_EXTENSION = '.jsonl';
|
|
51
|
+
const logger = LoggerService.getInstance().createComponentLogger('ClaudeSessionTokens');
|
|
52
|
+
/**
|
|
53
|
+
* Encodes an absolute path into the slug format used by Claude Code
|
|
54
|
+
* for its projects directory. Replaces `/` with `-`.
|
|
55
|
+
*
|
|
56
|
+
* @param projectPath - Absolute path (e.g. /Users/alice/.crewly)
|
|
57
|
+
* @returns Encoded slug (e.g. -Users-alice--crewly)
|
|
58
|
+
*/
|
|
59
|
+
export function encodeProjectSlug(projectPath) {
|
|
60
|
+
// Claude Code replaces both / and . with - in its project directory slug
|
|
61
|
+
return projectPath.replace(/[/.]/g, '-');
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Builds the ordered, de-duplicated list of Claude Code project slugs that may
|
|
65
|
+
* hold transcripts for a working directory.
|
|
66
|
+
*
|
|
67
|
+
* Claude Code names its project directory after the *resolved* cwd (it sees
|
|
68
|
+
* `process.cwd()`, which the OS has already run through any symlinks). On
|
|
69
|
+
* macOS `/tmp` and `/var` are symlinks into `/private`, so an agent launched
|
|
70
|
+
* in `/tmp/proj` writes to `-private-tmp-proj`, not `-tmp-proj` (#938).
|
|
71
|
+
*
|
|
72
|
+
* The realpath slug comes first because that is where Claude Code writes. The
|
|
73
|
+
* raw slug is kept as a fallback for a cwd that cannot be resolved (deleted,
|
|
74
|
+
* permission denied) and for transcripts written before a directory was moved
|
|
75
|
+
* behind a symlink. Resolution failures never throw.
|
|
76
|
+
*
|
|
77
|
+
* @param projectPath - The agent's working directory, as Crewly recorded it
|
|
78
|
+
* @returns Slugs to try, most likely first; never empty
|
|
79
|
+
*
|
|
80
|
+
* @example
|
|
81
|
+
* ```typescript
|
|
82
|
+
* await resolveProjectSlugCandidates('/tmp/proj');
|
|
83
|
+
* // macOS: ['-private-tmp-proj', '-tmp-proj']; Linux: ['-tmp-proj']
|
|
84
|
+
* ```
|
|
85
|
+
*/
|
|
86
|
+
export async function resolveProjectSlugCandidates(projectPath) {
|
|
87
|
+
const rawSlug = encodeProjectSlug(projectPath);
|
|
88
|
+
let resolvedSlug = null;
|
|
89
|
+
try {
|
|
90
|
+
resolvedSlug = encodeProjectSlug(await fs.realpath(projectPath));
|
|
91
|
+
}
|
|
92
|
+
catch {
|
|
93
|
+
// Nonexistent or unreadable cwd — the raw slug is the only guess left.
|
|
94
|
+
}
|
|
95
|
+
return resolvedSlug && resolvedSlug !== rawSlug ? [resolvedSlug, rawSlug] : [rawSlug];
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Synchronous {@link resolveProjectSlugCandidates}, for callers that cannot
|
|
99
|
+
* await (launch-time resume checks).
|
|
100
|
+
*
|
|
101
|
+
* The raw slug is taken from the absolute (`path.resolve`d) cwd.
|
|
102
|
+
*
|
|
103
|
+
* @param projectPath - The agent's working directory
|
|
104
|
+
* @returns Slugs to try, realpath slug first; never empty
|
|
105
|
+
*
|
|
106
|
+
* @example
|
|
107
|
+
* ```typescript
|
|
108
|
+
* resolveProjectSlugCandidatesSync('/tmp/proj');
|
|
109
|
+
* // macOS: ['-private-tmp-proj', '-tmp-proj']
|
|
110
|
+
* ```
|
|
111
|
+
*/
|
|
112
|
+
export function resolveProjectSlugCandidatesSync(projectPath) {
|
|
113
|
+
const absolute = path.resolve(projectPath);
|
|
114
|
+
const rawSlug = encodeProjectSlug(absolute);
|
|
115
|
+
let resolvedSlug = null;
|
|
116
|
+
try {
|
|
117
|
+
resolvedSlug = encodeProjectSlug(realpathSync(absolute));
|
|
118
|
+
}
|
|
119
|
+
catch {
|
|
120
|
+
// Nonexistent or unreadable cwd — the raw slug is the only guess left.
|
|
121
|
+
}
|
|
122
|
+
return resolvedSlug && resolvedSlug !== rawSlug ? [resolvedSlug, rawSlug] : [rawSlug];
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* The `projects/` directories Claude Code may have written a session's
|
|
126
|
+
* transcripts to, most likely first.
|
|
127
|
+
*
|
|
128
|
+
* A session on another of the owner's Claude Code accounts (issue #942) runs
|
|
129
|
+
* with `CLAUDE_CONFIG_DIR` set to that account's config dir, so its
|
|
130
|
+
* transcripts land in `<config dir>/projects/`. The default login's
|
|
131
|
+
* `~/.claude/projects/` is always included last: a session that switched
|
|
132
|
+
* accounts during the day has transcripts in both.
|
|
133
|
+
*
|
|
134
|
+
* @param homeDir - Home directory that contains `.claude/`
|
|
135
|
+
* @param configDirs - Claude config dirs of the session's accounts (current account first)
|
|
136
|
+
* @returns Absolute `projects/` directory paths, de-duplicated
|
|
137
|
+
*
|
|
138
|
+
* @example
|
|
139
|
+
* ```typescript
|
|
140
|
+
* claudeProjectsRoots('/Users/a', ['/Users/a/.crewly/claude-accounts/work']);
|
|
141
|
+
* // ['/Users/a/.crewly/claude-accounts/work/projects', '/Users/a/.claude/projects']
|
|
142
|
+
* ```
|
|
143
|
+
*/
|
|
144
|
+
export function claudeProjectsRoots(homeDir, configDirs = []) {
|
|
145
|
+
const roots = [
|
|
146
|
+
...configDirs.map((dir) => path.join(dir, CLAUDE_PROJECTS_DIR_NAME)),
|
|
147
|
+
path.join(homeDir, CLAUDE_DIR_NAME, CLAUDE_PROJECTS_DIR_NAME),
|
|
148
|
+
];
|
|
149
|
+
return [...new Set(roots)];
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Lists the Claude Code project directories that may hold transcripts for a
|
|
153
|
+
* working directory: every root of {@link claudeProjectsRoots}, each with the
|
|
154
|
+
* slugs of {@link resolveProjectSlugCandidates}. The directories are not
|
|
155
|
+
* required to exist.
|
|
156
|
+
*
|
|
157
|
+
* @param projectPath - The agent's working directory
|
|
158
|
+
* @param homeDir - Home directory that contains `.claude/` (defaults to the OS home)
|
|
159
|
+
* @param configDirs - Config dirs of the owner's other Claude Code accounts the session runs on (searched first)
|
|
160
|
+
* @returns Absolute candidate directory paths, most likely first
|
|
161
|
+
*/
|
|
162
|
+
export async function resolveProjectDirCandidates(projectPath, homeDir = os.homedir(), configDirs = []) {
|
|
163
|
+
const slugs = await resolveProjectSlugCandidates(projectPath);
|
|
164
|
+
return claudeProjectsRoots(homeDir, configDirs).flatMap((root) => slugs.map((slug) => path.join(root, slug)));
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Locates a known conversation's transcript across all candidate project
|
|
168
|
+
* directories, returning the first one that exists.
|
|
169
|
+
*
|
|
170
|
+
* @param projectPath - The agent's working directory
|
|
171
|
+
* @param sessionId - Claude Code conversation UUID
|
|
172
|
+
* @param homeDir - Home directory that contains `.claude/` (defaults to the OS home)
|
|
173
|
+
* @param configDirs - Config dirs of the owner's other Claude Code accounts (searched first)
|
|
174
|
+
* @returns Absolute path to the existing .jsonl file, or null if none exists
|
|
175
|
+
*/
|
|
176
|
+
export async function findSessionJsonlPath(projectPath, sessionId, homeDir = os.homedir(), configDirs = []) {
|
|
177
|
+
for (const dir of await resolveProjectDirCandidates(projectPath, homeDir, configDirs)) {
|
|
178
|
+
const candidate = path.join(dir, `${sessionId}${JSONL_EXTENSION}`);
|
|
179
|
+
try {
|
|
180
|
+
await fs.access(candidate);
|
|
181
|
+
return candidate;
|
|
182
|
+
}
|
|
183
|
+
catch {
|
|
184
|
+
continue;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
return null;
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Lists every transcript file across all candidate project directories.
|
|
191
|
+
*
|
|
192
|
+
* Merges rather than stopping at the first existing directory: if both the
|
|
193
|
+
* resolved and the raw slug directories exist, the live conversation may be in
|
|
194
|
+
* either, and picking a directory by existence alone could lock onto a stale
|
|
195
|
+
* one. A file name seen in an earlier (more likely) directory shadows the same
|
|
196
|
+
* name in a later one, so a conversation is never listed twice.
|
|
197
|
+
*
|
|
198
|
+
* @param projectPath - The agent's working directory
|
|
199
|
+
* @param homeDir - Home directory that contains `.claude/` (defaults to the OS home)
|
|
200
|
+
* @param configDirs - Config dirs of the owner's other Claude Code accounts (searched first)
|
|
201
|
+
* @returns Absolute paths of all .jsonl files found, grouped by candidate directory order
|
|
202
|
+
*/
|
|
203
|
+
export async function listProjectTranscripts(projectPath, homeDir = os.homedir(), configDirs = []) {
|
|
204
|
+
const seen = new Set();
|
|
205
|
+
const result = [];
|
|
206
|
+
for (const dir of await resolveProjectDirCandidates(projectPath, homeDir, configDirs)) {
|
|
207
|
+
let files;
|
|
208
|
+
try {
|
|
209
|
+
files = await fs.readdir(dir);
|
|
210
|
+
}
|
|
211
|
+
catch {
|
|
212
|
+
continue;
|
|
213
|
+
}
|
|
214
|
+
for (const file of files) {
|
|
215
|
+
if (!file.endsWith(JSONL_EXTENSION) || seen.has(file))
|
|
216
|
+
continue;
|
|
217
|
+
seen.add(file);
|
|
218
|
+
result.push(path.join(dir, file));
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
return result;
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Finds the most recently modified transcript across all candidate project
|
|
225
|
+
* directories for a working directory.
|
|
226
|
+
*
|
|
227
|
+
* @param projectPath - The agent's working directory
|
|
228
|
+
* @param homeDir - Home directory that contains `.claude/` (defaults to the OS home)
|
|
229
|
+
* @param configDirs - Config dirs of the owner's other Claude Code accounts (searched too)
|
|
230
|
+
* @returns Absolute path of the newest .jsonl file, or null if there is none
|
|
231
|
+
*/
|
|
232
|
+
export async function findLatestSessionFile(projectPath, homeDir = os.homedir(), configDirs = []) {
|
|
233
|
+
let latestFile = null;
|
|
234
|
+
let latestMtime = -1;
|
|
235
|
+
for (const file of await listProjectTranscripts(projectPath, homeDir, configDirs)) {
|
|
236
|
+
try {
|
|
237
|
+
const { mtimeMs } = await fs.stat(file);
|
|
238
|
+
if (mtimeMs > latestMtime) {
|
|
239
|
+
latestMtime = mtimeMs;
|
|
240
|
+
latestFile = file;
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
catch {
|
|
244
|
+
continue;
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
return latestFile;
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* Returns the path to a Claude Code session JSONL file under the *raw* cwd
|
|
251
|
+
* slug. Does not resolve symlinks — prefer {@link findSessionJsonlPath},
|
|
252
|
+
* which also checks the realpath slug Claude Code actually writes to.
|
|
253
|
+
*
|
|
254
|
+
* @param projectPath - The agent's working directory
|
|
255
|
+
* @param sessionId - Claude Code conversation UUID
|
|
256
|
+
* @returns Absolute path to the .jsonl file
|
|
257
|
+
*/
|
|
258
|
+
export function getSessionJsonlPath(projectPath, sessionId) {
|
|
259
|
+
const slug = encodeProjectSlug(projectPath);
|
|
260
|
+
return path.join(os.homedir(), CLAUDE_DIR_NAME, CLAUDE_PROJECTS_DIR_NAME, slug, `${sessionId}${JSONL_EXTENSION}`);
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Finds the most recently modified .jsonl session file in a Claude Code
|
|
264
|
+
* project directory. Used as a fallback when the session ID is not known
|
|
265
|
+
* (e.g. the orchestrator session, which may not have been persisted yet).
|
|
266
|
+
* Checks both the realpath and the raw cwd slug directories.
|
|
267
|
+
*
|
|
268
|
+
* @param projectPath - The agent's working directory
|
|
269
|
+
* @returns The session UUID, or null if no JSONL files found
|
|
270
|
+
*/
|
|
271
|
+
export async function findLatestSessionId(projectPath) {
|
|
272
|
+
const latest = await findLatestSessionFile(projectPath);
|
|
273
|
+
return latest ? path.basename(latest, JSONL_EXTENSION) : null;
|
|
274
|
+
}
|
|
275
|
+
/**
|
|
276
|
+
* Reads token usage from a Claude Code session JSONL, summing all
|
|
277
|
+
* assistant turns whose timestamp is at or after `since`.
|
|
278
|
+
*
|
|
279
|
+
* Reads the file from the end backwards for efficiency — recent
|
|
280
|
+
* entries are at the tail.
|
|
281
|
+
*
|
|
282
|
+
* @param projectPath - The agent's working directory
|
|
283
|
+
* @param sessionId - Claude Code conversation UUID (if null, auto-detects latest)
|
|
284
|
+
* @param since - Only count turns at or after this time
|
|
285
|
+
* @param until - Only count turns before this time (defaults to now)
|
|
286
|
+
* @param configDirs - Config dirs of the owner's other Claude Code accounts the session runs on
|
|
287
|
+
* @returns Aggregated token summary, or null if the file doesn't exist
|
|
288
|
+
*/
|
|
289
|
+
export async function getTokensSince(projectPath, sessionId, since, until, configDirs = []) {
|
|
290
|
+
// Auto-detect session if not provided
|
|
291
|
+
const filePath = sessionId
|
|
292
|
+
? await findSessionJsonlPath(projectPath, sessionId, os.homedir(), configDirs)
|
|
293
|
+
: await findLatestSessionFile(projectPath, os.homedir(), configDirs);
|
|
294
|
+
if (!filePath) {
|
|
295
|
+
logger.debug('No Claude session JSONL found', { projectPath, sessionId });
|
|
296
|
+
return null;
|
|
297
|
+
}
|
|
298
|
+
let content;
|
|
299
|
+
try {
|
|
300
|
+
content = await fs.readFile(filePath, 'utf-8');
|
|
301
|
+
}
|
|
302
|
+
catch {
|
|
303
|
+
logger.debug('Session JSONL not found', { filePath });
|
|
304
|
+
return null;
|
|
305
|
+
}
|
|
306
|
+
const sinceMs = since.getTime();
|
|
307
|
+
const untilMs = until ? until.getTime() : Infinity;
|
|
308
|
+
const summary = {
|
|
309
|
+
inputTokens: 0,
|
|
310
|
+
outputTokens: 0,
|
|
311
|
+
cacheReadTokens: 0,
|
|
312
|
+
cacheCreateTokens: 0,
|
|
313
|
+
cost: 0,
|
|
314
|
+
model: '',
|
|
315
|
+
turnCount: 0,
|
|
316
|
+
};
|
|
317
|
+
// Parse lines from the end — most recent entries are last
|
|
318
|
+
const lines = content.split('\n');
|
|
319
|
+
for (let i = lines.length - 1; i >= 0; i--) {
|
|
320
|
+
const line = lines[i].trim();
|
|
321
|
+
if (!line)
|
|
322
|
+
continue;
|
|
323
|
+
let entry;
|
|
324
|
+
try {
|
|
325
|
+
entry = JSON.parse(line);
|
|
326
|
+
}
|
|
327
|
+
catch {
|
|
328
|
+
continue;
|
|
329
|
+
}
|
|
330
|
+
// Only assistant messages carry usage data
|
|
331
|
+
if (entry.type !== 'assistant')
|
|
332
|
+
continue;
|
|
333
|
+
const ts = entry.timestamp;
|
|
334
|
+
if (!ts)
|
|
335
|
+
continue;
|
|
336
|
+
// Timestamp can be ISO string or epoch ms
|
|
337
|
+
const entryMs = typeof ts === 'number' ? ts : new Date(ts).getTime();
|
|
338
|
+
if (isNaN(entryMs))
|
|
339
|
+
continue;
|
|
340
|
+
// Stop scanning once we're before the window — entries are chronological
|
|
341
|
+
if (entryMs < sinceMs)
|
|
342
|
+
break;
|
|
343
|
+
// Skip entries after the upper bound
|
|
344
|
+
if (entryMs > untilMs)
|
|
345
|
+
continue;
|
|
346
|
+
const msg = entry.message;
|
|
347
|
+
if (!msg)
|
|
348
|
+
continue;
|
|
349
|
+
const usage = msg.usage;
|
|
350
|
+
if (!usage)
|
|
351
|
+
continue;
|
|
352
|
+
const inputTokens = usage.input_tokens || 0;
|
|
353
|
+
const outputTokens = usage.output_tokens || 0;
|
|
354
|
+
const cacheRead = usage.cache_read_input_tokens || 0;
|
|
355
|
+
const cacheCreate = usage.cache_creation_input_tokens || 0;
|
|
356
|
+
const model = msg.model || '';
|
|
357
|
+
summary.inputTokens += inputTokens + cacheRead + cacheCreate;
|
|
358
|
+
summary.outputTokens += outputTokens;
|
|
359
|
+
summary.cacheReadTokens += cacheRead;
|
|
360
|
+
summary.cacheCreateTokens += cacheCreate;
|
|
361
|
+
summary.cost += calculateClaudeCost(inputTokens, outputTokens, cacheRead, cacheCreate, model);
|
|
362
|
+
summary.turnCount += 1;
|
|
363
|
+
if (!summary.model && model)
|
|
364
|
+
summary.model = model;
|
|
365
|
+
}
|
|
366
|
+
return summary;
|
|
367
|
+
}
|
|
368
|
+
/**
|
|
369
|
+
* Scans all Claude Code session JSONL files for a project and feeds
|
|
370
|
+
* aggregated per-session token data into TokenUsageService.
|
|
371
|
+
*
|
|
372
|
+
* This bridges the gap between Claude Code's file-based token tracking
|
|
373
|
+
* and the in-memory TokenUsageService that powers the Usage dashboard.
|
|
374
|
+
* Should be called once during server startup.
|
|
375
|
+
*
|
|
376
|
+
* Only processes sessions modified in the last `maxAgeDays` to avoid
|
|
377
|
+
* scanning hundreds of old session files.
|
|
378
|
+
*
|
|
379
|
+
* @param projectPath - The project's working directory
|
|
380
|
+
* @param maxAgeDays - Only process sessions modified within this many days (default: 7)
|
|
381
|
+
* @returns Number of sessions loaded
|
|
382
|
+
*/
|
|
383
|
+
export async function syncSessionsToTokenUsageService(projectPath, maxAgeDays = 7) {
|
|
384
|
+
const { TokenUsageService } = await import('./token-usage.service.js');
|
|
385
|
+
const tokenSvc = TokenUsageService.getInstance();
|
|
386
|
+
const jsonlFiles = await listProjectTranscripts(projectPath);
|
|
387
|
+
if (jsonlFiles.length === 0) {
|
|
388
|
+
logger.debug('No Claude transcripts found for project', { projectPath });
|
|
389
|
+
return 0;
|
|
390
|
+
}
|
|
391
|
+
const cutoffMs = Date.now() - maxAgeDays * 24 * 60 * 60 * 1000;
|
|
392
|
+
let loaded = 0;
|
|
393
|
+
for (const filePath of jsonlFiles) {
|
|
394
|
+
try {
|
|
395
|
+
const stat = await fs.stat(filePath);
|
|
396
|
+
if (stat.mtimeMs < cutoffMs)
|
|
397
|
+
continue;
|
|
398
|
+
const content = await fs.readFile(filePath, 'utf-8');
|
|
399
|
+
const lines = content.split('\n');
|
|
400
|
+
let sessionInput = 0;
|
|
401
|
+
let sessionOutput = 0;
|
|
402
|
+
let sessionCacheRead = 0;
|
|
403
|
+
let sessionCacheCreate = 0;
|
|
404
|
+
let model = '';
|
|
405
|
+
let turnCount = 0;
|
|
406
|
+
for (const line of lines) {
|
|
407
|
+
if (!line.trim())
|
|
408
|
+
continue;
|
|
409
|
+
try {
|
|
410
|
+
const entry = JSON.parse(line);
|
|
411
|
+
if (entry.type !== 'assistant')
|
|
412
|
+
continue;
|
|
413
|
+
const msg = entry.message;
|
|
414
|
+
if (!msg?.usage)
|
|
415
|
+
continue;
|
|
416
|
+
const u = msg.usage;
|
|
417
|
+
sessionInput += u.input_tokens || 0;
|
|
418
|
+
sessionOutput += u.output_tokens || 0;
|
|
419
|
+
sessionCacheRead += u.cache_read_input_tokens || 0;
|
|
420
|
+
sessionCacheCreate += u.cache_creation_input_tokens || 0;
|
|
421
|
+
if (!model && msg.model)
|
|
422
|
+
model = msg.model;
|
|
423
|
+
turnCount++;
|
|
424
|
+
}
|
|
425
|
+
catch {
|
|
426
|
+
continue;
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
if (turnCount > 0) {
|
|
430
|
+
const sessionId = path.basename(filePath, JSONL_EXTENSION);
|
|
431
|
+
const resolvedModel = model || 'claude-sonnet-4-6';
|
|
432
|
+
// Calculate cost with proper cache-aware pricing
|
|
433
|
+
const cost = calculateClaudeCost(sessionInput, sessionOutput, sessionCacheRead, sessionCacheCreate, resolvedModel);
|
|
434
|
+
// Record only real input tokens (not cache) to avoid inflating counts.
|
|
435
|
+
// Pass pre-calculated cost via a dedicated method if available,
|
|
436
|
+
// otherwise record raw tokens and let the dashboard use our cost.
|
|
437
|
+
tokenSvc.recordUsage(sessionId, sessionId, sessionInput, sessionOutput, resolvedModel);
|
|
438
|
+
// Override the auto-calculated cost with our cache-aware cost
|
|
439
|
+
tokenSvc.overrideSessionCost(sessionId, cost);
|
|
440
|
+
loaded++;
|
|
441
|
+
}
|
|
442
|
+
}
|
|
443
|
+
catch {
|
|
444
|
+
continue;
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
logger.info('Synced Claude Code sessions to TokenUsageService', {
|
|
448
|
+
projectPath,
|
|
449
|
+
scannedFiles: jsonlFiles.length,
|
|
450
|
+
loadedSessions: loaded,
|
|
451
|
+
maxAgeDays,
|
|
452
|
+
});
|
|
453
|
+
return loaded;
|
|
454
|
+
}
|
|
455
|
+
//# sourceMappingURL=claude-session-tokens.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-session-tokens.service.js","sourceRoot":"","sources":["../../../../../../backend/src/services/monitoring/claude-session-tokens.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Acting-for — the person each agent session is working for right now
|
|
3
|
+
* (issue #968).
|
|
4
|
+
*
|
|
5
|
+
* Every human message delivered to an agent records its sender as the person
|
|
6
|
+
* that agent acts for until the next human message: a Slack message records
|
|
7
|
+
* the sender's Slack user id (`owner` for any Slack id of the owner), a
|
|
8
|
+
* dashboard message records the owner. A message one agent sends another
|
|
9
|
+
* passes the sender's person on, so work delegated for Info stays Info's — and
|
|
10
|
+
* a message an agent wrote is never recorded as a person, even when it came
|
|
11
|
+
* through Slack under a bot's user id. Scheduled, autonomous and system turns
|
|
12
|
+
* act for the owner.
|
|
13
|
+
*
|
|
14
|
+
* The record is set only by the backend from what it delivered — never from
|
|
15
|
+
* anything an agent sends — and connector credential requests carry it to
|
|
16
|
+
* Cloud, which decides whether that person may use the grant.
|
|
17
|
+
*
|
|
18
|
+
* Kept in `<CREWLY_HOME>/acting-for.json` so a restart does not turn a
|
|
19
|
+
* member's in-flight turn into the owner's.
|
|
20
|
+
*
|
|
21
|
+
* specs/per-person-access.md
|
|
22
|
+
*
|
|
23
|
+
* @module services/people/acting-for.service
|
|
24
|
+
*/
|
|
25
|
+
import { type PeopleDirectoryService, type PersonRole } from './people-directory.service.js';
|
|
26
|
+
/** Where an acting-for record came from. */
|
|
27
|
+
export type ActingForSource = 'slack' | 'dashboard' | 'agent' | 'system';
|
|
28
|
+
/** One session's record. */
|
|
29
|
+
export interface ActingForEntry {
|
|
30
|
+
/** Person id (a member's Slack user id, or `owner`) */
|
|
31
|
+
personId: string;
|
|
32
|
+
source: ActingForSource;
|
|
33
|
+
/** ISO time it was recorded */
|
|
34
|
+
at: string;
|
|
35
|
+
}
|
|
36
|
+
/** The person a request acts for, as Cloud is told. */
|
|
37
|
+
export interface Actor {
|
|
38
|
+
id: string;
|
|
39
|
+
role: PersonRole;
|
|
40
|
+
/** Display name, for messages */
|
|
41
|
+
name: string;
|
|
42
|
+
}
|
|
43
|
+
/** Injectable dependencies. */
|
|
44
|
+
export interface ActingForDeps {
|
|
45
|
+
filePath?: string;
|
|
46
|
+
people?: () => PeopleDirectoryService;
|
|
47
|
+
now?: () => number;
|
|
48
|
+
}
|
|
49
|
+
/** The acting-for record. */
|
|
50
|
+
export declare class ActingForService {
|
|
51
|
+
private readonly filePathOverride?;
|
|
52
|
+
private readonly people;
|
|
53
|
+
private readonly now;
|
|
54
|
+
private cache;
|
|
55
|
+
/**
|
|
56
|
+
* @param deps - Store path, people directory, clock
|
|
57
|
+
*/
|
|
58
|
+
constructor(deps?: ActingForDeps);
|
|
59
|
+
/**
|
|
60
|
+
* Record that a session now acts for a person.
|
|
61
|
+
*
|
|
62
|
+
* @param session - Agent session name
|
|
63
|
+
* @param personId - Slack user id, or `owner`
|
|
64
|
+
* @param source - What delivered the message
|
|
65
|
+
*/
|
|
66
|
+
record(session: string, personId: string, source: ActingForSource): void;
|
|
67
|
+
/**
|
|
68
|
+
* Record a human message delivered to a session: a Slack sender, or the
|
|
69
|
+
* owner when it carries no Slack sender (dashboard / terminal).
|
|
70
|
+
*
|
|
71
|
+
* @param session - Agent session name
|
|
72
|
+
* @param slackUserId - Sender's Slack user id, when the message came from Slack
|
|
73
|
+
*/
|
|
74
|
+
recordHumanMessage(session: string, slackUserId: string | null | undefined): void;
|
|
75
|
+
/**
|
|
76
|
+
* A turn nobody asked for just now — a scheduled check, a scheduled
|
|
77
|
+
* message, an autonomous run, a system event: it acts for the owner, not
|
|
78
|
+
* for whoever spoke last.
|
|
79
|
+
*
|
|
80
|
+
* @param session - Agent session
|
|
81
|
+
*/
|
|
82
|
+
recordSystemTurn(session: string): void;
|
|
83
|
+
/**
|
|
84
|
+
* A message an agent wrote (in Slack, or a chat row an agent authored):
|
|
85
|
+
* the target acts for whoever that agent acts for. When the author has no
|
|
86
|
+
* record here (an agent on another machine) the target is left as it was.
|
|
87
|
+
*
|
|
88
|
+
* @param target - Receiving session
|
|
89
|
+
* @param authorSession - The agent that wrote it
|
|
90
|
+
*/
|
|
91
|
+
inheritFromAgent(target: string, authorSession: string): void;
|
|
92
|
+
/**
|
|
93
|
+
* A message from one agent to another: the target acts for whoever the
|
|
94
|
+
* sender acts for (the owner when the sender has no record).
|
|
95
|
+
*
|
|
96
|
+
* @param target - Receiving session
|
|
97
|
+
* @param fromSession - Sending session
|
|
98
|
+
*/
|
|
99
|
+
inherit(target: string, fromSession: string): void;
|
|
100
|
+
/**
|
|
101
|
+
* A session's record.
|
|
102
|
+
*
|
|
103
|
+
* @param session - Agent session name
|
|
104
|
+
* @returns Entry, or null when the session never got a human message
|
|
105
|
+
*/
|
|
106
|
+
get(session: string): ActingForEntry | null;
|
|
107
|
+
/**
|
|
108
|
+
* The person a request acts for: the owner for a request with no agent
|
|
109
|
+
* session (the owner's dashboard), else the session's record (the owner
|
|
110
|
+
* when it has none).
|
|
111
|
+
*
|
|
112
|
+
* @param session - Calling agent session, if any
|
|
113
|
+
* @returns Actor
|
|
114
|
+
*/
|
|
115
|
+
actorFor(session?: string | null): Actor;
|
|
116
|
+
/**
|
|
117
|
+
* @param personId - Person id
|
|
118
|
+
* @returns `owner` for the owner by any spelling, else the id
|
|
119
|
+
*/
|
|
120
|
+
private canonical;
|
|
121
|
+
/**
|
|
122
|
+
* @param id - Slack user id
|
|
123
|
+
* @returns True for a known bot (false when the directory cannot tell)
|
|
124
|
+
*/
|
|
125
|
+
private isBot;
|
|
126
|
+
/** Forget everything (tests). */
|
|
127
|
+
clear(): void;
|
|
128
|
+
/** @returns Store path */
|
|
129
|
+
private filePath;
|
|
130
|
+
/** @returns All records (read once, then cached) */
|
|
131
|
+
private load;
|
|
132
|
+
/**
|
|
133
|
+
* Save atomically (best effort: the in-memory record still applies).
|
|
134
|
+
*
|
|
135
|
+
* @param all - Records
|
|
136
|
+
*/
|
|
137
|
+
private save;
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* The backend's acting-for record.
|
|
141
|
+
*
|
|
142
|
+
* @returns Singleton
|
|
143
|
+
*/
|
|
144
|
+
export declare function getActingFor(): ActingForService;
|
|
145
|
+
/**
|
|
146
|
+
* Replace the singleton (tests).
|
|
147
|
+
*
|
|
148
|
+
* @param service - Instance, or null to reset
|
|
149
|
+
*/
|
|
150
|
+
export declare function setActingForForTesting(service: ActingForService | null): void;
|
|
151
|
+
/**
|
|
152
|
+
* Before a scheduled, autonomous or system turn is delivered: the session
|
|
153
|
+
* acts for the owner (best effort, never throws).
|
|
154
|
+
*
|
|
155
|
+
* @param session - Agent session the turn goes to
|
|
156
|
+
*/
|
|
157
|
+
export declare function noteSystemTurn(session: string): void;
|
|
158
|
+
/**
|
|
159
|
+
* Run work as a person: connector token requests made inside carry that
|
|
160
|
+
* person to Cloud.
|
|
161
|
+
*
|
|
162
|
+
* @param actor - Person
|
|
163
|
+
* @param fn - Work
|
|
164
|
+
* @returns What `fn` returns
|
|
165
|
+
*/
|
|
166
|
+
export declare function runAsActor<T>(actor: Actor, fn: () => T): T;
|
|
167
|
+
/**
|
|
168
|
+
* The person the current request acts for.
|
|
169
|
+
*
|
|
170
|
+
* @returns Actor, or null outside a connector request (backend-internal calls)
|
|
171
|
+
*/
|
|
172
|
+
export declare function currentActor(): Actor | null;
|
|
173
|
+
/**
|
|
174
|
+
* Headers that tell Cloud who a credential request is for.
|
|
175
|
+
*
|
|
176
|
+
* @param actor - Person (default: the current request's)
|
|
177
|
+
* @returns Headers (empty outside a connector request)
|
|
178
|
+
*/
|
|
179
|
+
export declare function actingForHeaders(actor?: Actor | null): Record<string, string>;
|
|
180
|
+
/**
|
|
181
|
+
* Cache-key suffix for a token fetched for the current person, so one
|
|
182
|
+
* person's cached token is never handed to another.
|
|
183
|
+
*
|
|
184
|
+
* @param actor - Person (default: the current request's)
|
|
185
|
+
* @returns `''` outside a connector request, else `\0<person id>`
|
|
186
|
+
*/
|
|
187
|
+
export declare function actorCacheSuffix(actor?: Actor | null): string;
|
|
188
|
+
//# sourceMappingURL=acting-for.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"acting-for.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/people/acting-for.service.ts"],"names":[],"mappings":"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"}
|