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
|
@@ -23,6 +23,8 @@ export interface LaunchRuntimeDecision {
|
|
|
23
23
|
overridden: boolean;
|
|
24
24
|
/** Model to run when the fallback is the Crewly Agent (provider/model) */
|
|
25
25
|
crewlyAgentModel?: string;
|
|
26
|
+
/** One of the owner's other Claude Code accounts to run on (issue #942) */
|
|
27
|
+
claudeAccount?: string;
|
|
26
28
|
}
|
|
27
29
|
/** Input of a launch decision. */
|
|
28
30
|
export interface LaunchRuntimeInput {
|
|
@@ -35,8 +37,12 @@ export interface LaunchRuntimeInput {
|
|
|
35
37
|
}
|
|
36
38
|
/** Hooks the RuntimeFallbackService provides. */
|
|
37
39
|
export interface RuntimeFallbackHooks {
|
|
38
|
-
/** Runtime a session runs on instead of its configured one, or null */
|
|
40
|
+
/** Runtime a session runs on instead of its configured one, or null (never carries an account) */
|
|
39
41
|
overrideFor(sessionName: string): string | null;
|
|
42
|
+
/** The owner's other Claude Code account a session runs on, or null (its runtime's default login) */
|
|
43
|
+
accountFor(sessionName: string): string | null;
|
|
44
|
+
/** A session's login expired: true when the fallback owns it (the session runs on another account) */
|
|
45
|
+
reportLoginExpiry(sessionName: string): boolean;
|
|
40
46
|
/** Runtime to launch a session on (may start a fallback for an exhausted runtime) */
|
|
41
47
|
resolveLaunch(input: LaunchRuntimeInput): Promise<LaunchRuntimeDecision>;
|
|
42
48
|
/** Before a message is written into a session: deliver now, or queue it (a switch is running / needed) */
|
|
@@ -65,6 +71,28 @@ export declare function setRuntimeFallbackHooks(next: RuntimeFallbackHooks | nul
|
|
|
65
71
|
* ```
|
|
66
72
|
*/
|
|
67
73
|
export declare function effectiveRuntimeType<T extends string>(sessionName: string | undefined | null, configured: T): T;
|
|
74
|
+
/**
|
|
75
|
+
* The owner's other Claude Code account a session runs on (issue #942).
|
|
76
|
+
*
|
|
77
|
+
* @param sessionName - Session name
|
|
78
|
+
* @returns Account name, or null when it runs on its runtime's default login
|
|
79
|
+
*
|
|
80
|
+
* @example
|
|
81
|
+
* ```ts
|
|
82
|
+
* const account = effectiveClaudeAccount(sessionName); // 'work' while on claude-code@work
|
|
83
|
+
* ```
|
|
84
|
+
*/
|
|
85
|
+
export declare function effectiveClaudeAccount(sessionName: string | undefined | null): string | null;
|
|
86
|
+
/**
|
|
87
|
+
* Report an expired login of a session. A session on one of the owner's
|
|
88
|
+
* other Claude Code accounts is the fallback's: that account is marked
|
|
89
|
+
* signed out and the agent moves on along its chain; the default login's
|
|
90
|
+
* expiry stays with the re-login flow.
|
|
91
|
+
*
|
|
92
|
+
* @param sessionName - Session whose output showed the expiry
|
|
93
|
+
* @returns True when the fallback handled it (the caller must not start a re-login)
|
|
94
|
+
*/
|
|
95
|
+
export declare function reportRuntimeLoginExpiry(sessionName: string | undefined | null): boolean;
|
|
68
96
|
/**
|
|
69
97
|
* Decide the runtime to launch a session on.
|
|
70
98
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"effective-runtime.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/runtime-fallback/effective-runtime.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,4CAA4C;AAC5C,MAAM,MAAM,mBAAmB,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC;AAEhE,iDAAiD;AACjD,MAAM,WAAW,qBAAqB;IACrC,wBAAwB;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,8DAA8D;IAC9D,UAAU,EAAE,OAAO,CAAC;IACpB,0EAA0E;IAC1E,gBAAgB,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"effective-runtime.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/runtime-fallback/effective-runtime.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,4CAA4C;AAC5C,MAAM,MAAM,mBAAmB,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC;AAEhE,iDAAiD;AACjD,MAAM,WAAW,qBAAqB;IACrC,wBAAwB;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,8DAA8D;IAC9D,UAAU,EAAE,OAAO,CAAC;IACpB,0EAA0E;IAC1E,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,2EAA2E;IAC3E,aAAa,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,kCAAkC;AAClC,MAAM,WAAW,kBAAkB;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,0DAA0D;IAC1D,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,OAAO,CAAC;CACxB;AAED,iDAAiD;AACjD,MAAM,WAAW,oBAAoB;IACpC,kGAAkG;IAClG,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAChD,qGAAqG;IACrG,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAC/C,sGAAsG;IACtG,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC;IAChD,qFAAqF;IACrF,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAAC;IACzE,0GAA0G;IAC1G,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;IAC1E,0EAA0E;IAC1E,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC;IACvG,8EAA8E;IAC9E,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;CACpD;AAID;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,oBAAoB,GAAG,IAAI,GAAG,IAAI,CAE/E;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,SAAS,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,EAAE,UAAU,EAAE,CAAC,GAAG,CAAC,CAO/G;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAO5F;AAED;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,OAAO,CAOxF;AAED;;;;;GAKG;AACH,wBAAsB,oBAAoB,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAOpG;AAED;;;;;;GAMG;AACH,wBAAgB,6BAA6B,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAOvG;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAO5H;AAED;;;;;GAKG;AACH,wBAAgB,4BAA4B,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAO/E"}
|
|
@@ -44,6 +44,46 @@ export function effectiveRuntimeType(sessionName, configured) {
|
|
|
44
44
|
return configured;
|
|
45
45
|
}
|
|
46
46
|
}
|
|
47
|
+
/**
|
|
48
|
+
* The owner's other Claude Code account a session runs on (issue #942).
|
|
49
|
+
*
|
|
50
|
+
* @param sessionName - Session name
|
|
51
|
+
* @returns Account name, or null when it runs on its runtime's default login
|
|
52
|
+
*
|
|
53
|
+
* @example
|
|
54
|
+
* ```ts
|
|
55
|
+
* const account = effectiveClaudeAccount(sessionName); // 'work' while on claude-code@work
|
|
56
|
+
* ```
|
|
57
|
+
*/
|
|
58
|
+
export function effectiveClaudeAccount(sessionName) {
|
|
59
|
+
if (!hooks || !sessionName)
|
|
60
|
+
return null;
|
|
61
|
+
try {
|
|
62
|
+
return hooks.accountFor(sessionName);
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Report an expired login of a session. A session on one of the owner's
|
|
70
|
+
* other Claude Code accounts is the fallback's: that account is marked
|
|
71
|
+
* signed out and the agent moves on along its chain; the default login's
|
|
72
|
+
* expiry stays with the re-login flow.
|
|
73
|
+
*
|
|
74
|
+
* @param sessionName - Session whose output showed the expiry
|
|
75
|
+
* @returns True when the fallback handled it (the caller must not start a re-login)
|
|
76
|
+
*/
|
|
77
|
+
export function reportRuntimeLoginExpiry(sessionName) {
|
|
78
|
+
if (!hooks || !sessionName)
|
|
79
|
+
return false;
|
|
80
|
+
try {
|
|
81
|
+
return hooks.reportLoginExpiry(sessionName);
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
return false;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
47
87
|
/**
|
|
48
88
|
* Decide the runtime to launch a session on.
|
|
49
89
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"effective-runtime.js","sourceRoot":"","sources":["../../../../../../backend/src/services/runtime-fallback/effective-runtime.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;
|
|
1
|
+
{"version":3,"file":"effective-runtime.js","sourceRoot":"","sources":["../../../../../../backend/src/services/runtime-fallback/effective-runtime.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AA6CH,IAAI,KAAK,GAAgC,IAAI,CAAC;AAE9C;;;;GAIG;AACH,MAAM,UAAU,uBAAuB,CAAC,IAAiC;IACxE,KAAK,GAAG,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,oBAAoB,CAAmB,WAAsC,EAAE,UAAa;IAC3G,IAAI,CAAC,KAAK,IAAI,CAAC,WAAW;QAAE,OAAO,UAAU,CAAC;IAC9C,IAAI,CAAC;QACJ,OAAQ,KAAK,CAAC,WAAW,CAAC,WAAW,CAAc,IAAI,UAAU,CAAC;IACnE,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,UAAU,CAAC;IACnB,CAAC;AACF,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,sBAAsB,CAAC,WAAsC;IAC5E,IAAI,CAAC,KAAK,IAAI,CAAC,WAAW;QAAE,OAAO,IAAI,CAAC;IACxC,IAAI,CAAC;QACJ,OAAO,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;IACtC,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,IAAI,CAAC;IACb,CAAC;AACF,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,wBAAwB,CAAC,WAAsC;IAC9E,IAAI,CAAC,KAAK,IAAI,CAAC,WAAW;QAAE,OAAO,KAAK,CAAC;IACzC,IAAI,CAAC;QACJ,OAAO,KAAK,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;IAC7C,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,KAAK,CAAC;IACd,CAAC;AACF,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,KAAyB;IACnE,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;IACpE,IAAI,CAAC;QACJ,OAAO,MAAM,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACzC,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;IACzD,CAAC;AACF,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,6BAA6B,CAAC,WAAmB,EAAE,OAAe;IACjF,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAC7B,IAAI,CAAC;QACJ,OAAO,KAAK,CAAC,cAAc,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IACnD,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,SAAS,CAAC;IAClB,CAAC;AACF,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,mBAAmB,CAAC,WAAmB,EAAE,OAAe,EAAE,IAAY,EAAE,MAA2B;IAClH,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI;QAAE,OAAO,KAAK,CAAC;IAClC,IAAI,CAAC;QACJ,OAAO,KAAK,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IAC/D,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,KAAK,CAAC;IACd,CAAC;AACF,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,4BAA4B,CAAC,WAAmB;IAC/D,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,IAAI,CAAC;QACJ,OAAO,KAAK,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;IAC3C,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,IAAI,CAAC;IACb,CAAC;AACF,CAAC"}
|
|
@@ -8,6 +8,8 @@
|
|
|
8
8
|
* - Gemini CLI is retired; OpenCode has no login check Crewly can run.
|
|
9
9
|
* - A runtime whose first-run Terms the owner has not accepted on this
|
|
10
10
|
* machine (pending, "Don't agree", a failed setup) is skipped.
|
|
11
|
+
* - Each of the owner's other Claude Code accounts (`claude-code@<name>`,
|
|
12
|
+
* issue #942) needs Claude Code installed and that account signed in.
|
|
11
13
|
*
|
|
12
14
|
* @module services/runtime-fallback/runtime-availability
|
|
13
15
|
*/
|
|
@@ -31,12 +33,17 @@ export interface AvailabilityInput {
|
|
|
31
33
|
* specs/2026-10-01-runtime-terms-consent.md
|
|
32
34
|
*/
|
|
33
35
|
termsBlocked?: (runtime: string) => string | null;
|
|
36
|
+
/** The owner's other Claude Code accounts on this machine */
|
|
37
|
+
claudeAccounts?: ReadonlyArray<{
|
|
38
|
+
name: string;
|
|
39
|
+
signedIn: boolean;
|
|
40
|
+
}>;
|
|
34
41
|
}
|
|
35
42
|
/**
|
|
36
43
|
* Availability of every runtime.
|
|
37
44
|
*
|
|
38
45
|
* @param input - Harness facts, Crewly Agent model, key lookup
|
|
39
|
-
* @returns One entry per known runtime, in a stable order
|
|
46
|
+
* @returns One entry per known runtime, then one per Claude Code account, in a stable order
|
|
40
47
|
*
|
|
41
48
|
* @example
|
|
42
49
|
* ```ts
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-availability.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/runtime-fallback/runtime-availability.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"runtime-availability.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/runtime-fallback/runtime-availability.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,OAAO,EAAgC,KAAK,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAErG,4CAA4C;AAC5C,MAAM,WAAW,YAAY;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,WAAW,GAAG,YAAY,GAAG,SAAS,CAAC;CACnD;AAED,oDAAoD;AACpD,MAAM,WAAW,iBAAiB;IACjC,SAAS,EAAE,SAAS,YAAY,EAAE,CAAC;IACnC,oDAAoD;IACpD,gBAAgB,EAAE,MAAM,CAAC;IACzB,gFAAgF;IAChF,cAAc,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC;IAC9C;;;;OAIG;IACH,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IAClD,6DAA6D;IAC7D,cAAc,CAAC,EAAE,aAAa,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CACpE;AAWD;;;;;;;;;;GAUG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,iBAAiB,GAAG,mBAAmB,EAAE,CA2B1F"}
|
|
@@ -8,10 +8,13 @@
|
|
|
8
8
|
* - Gemini CLI is retired; OpenCode has no login check Crewly can run.
|
|
9
9
|
* - A runtime whose first-run Terms the owner has not accepted on this
|
|
10
10
|
* machine (pending, "Don't agree", a failed setup) is skipped.
|
|
11
|
+
* - Each of the owner's other Claude Code accounts (`claude-code@<name>`,
|
|
12
|
+
* issue #942) needs Claude Code installed and that account signed in.
|
|
11
13
|
*
|
|
12
14
|
* @module services/runtime-fallback/runtime-availability
|
|
13
15
|
*/
|
|
14
16
|
import { RUNTIME_TYPES } from '../../constants.js';
|
|
17
|
+
import { runtimeTarget } from '../harness/claude-accounts.js';
|
|
15
18
|
import { KNOWN_RUNTIMES, runtimeLabel } from './runtime-fallback.types.js';
|
|
16
19
|
/** Provider display names. */
|
|
17
20
|
const PROVIDER_NAMES = {
|
|
@@ -25,7 +28,7 @@ const PROVIDER_NAMES = {
|
|
|
25
28
|
* Availability of every runtime.
|
|
26
29
|
*
|
|
27
30
|
* @param input - Harness facts, Crewly Agent model, key lookup
|
|
28
|
-
* @returns One entry per known runtime, in a stable order
|
|
31
|
+
* @returns One entry per known runtime, then one per Claude Code account, in a stable order
|
|
29
32
|
*
|
|
30
33
|
* @example
|
|
31
34
|
* ```ts
|
|
@@ -33,7 +36,7 @@ const PROVIDER_NAMES = {
|
|
|
33
36
|
* ```
|
|
34
37
|
*/
|
|
35
38
|
export function computeRuntimeAvailability(input) {
|
|
36
|
-
|
|
39
|
+
const runtimes = KNOWN_RUNTIMES.map((runtime) => {
|
|
37
40
|
const label = runtimeLabel(runtime, input.crewlyAgentModel);
|
|
38
41
|
if (runtime === RUNTIME_TYPES.CREWLY_AGENT) {
|
|
39
42
|
const provider = input.crewlyAgentModel.split('/')[0] ?? '';
|
|
@@ -57,5 +60,16 @@ export function computeRuntimeAvailability(input) {
|
|
|
57
60
|
return { runtime, label, selectable: false, reason: terms, termsBlocked: true };
|
|
58
61
|
return { runtime, label, selectable: true };
|
|
59
62
|
});
|
|
63
|
+
const claude = input.harnesses.find((h) => h.id === RUNTIME_TYPES.CLAUDE_CODE);
|
|
64
|
+
const accounts = (input.claudeAccounts ?? []).map((account) => {
|
|
65
|
+
const runtime = runtimeTarget(RUNTIME_TYPES.CLAUDE_CODE, account.name);
|
|
66
|
+
const label = runtimeLabel(runtime);
|
|
67
|
+
if (!claude || !claude.installed)
|
|
68
|
+
return { runtime, label, selectable: false, reason: 'Not installed' };
|
|
69
|
+
if (!account.signedIn)
|
|
70
|
+
return { runtime, label, selectable: false, reason: `Not signed in (reply \`login claude ${account.name}\` in Slack)` };
|
|
71
|
+
return { runtime, label, selectable: true };
|
|
72
|
+
});
|
|
73
|
+
return [...runtimes, ...accounts];
|
|
60
74
|
}
|
|
61
75
|
//# sourceMappingURL=runtime-availability.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-availability.js","sourceRoot":"","sources":["../../../../../../backend/src/services/runtime-fallback/runtime-availability.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"runtime-availability.js","sourceRoot":"","sources":["../../../../../../backend/src/services/runtime-fallback/runtime-availability.ts"],"names":[],"mappings":"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"}
|
|
@@ -25,6 +25,15 @@
|
|
|
25
25
|
* comes straight back) doubles the next probe interval.
|
|
26
26
|
* 7. **Tell the owner once** per event, and once when it is over.
|
|
27
27
|
*
|
|
28
|
+
* A chain entry may be one of the owner's other Claude Code accounts
|
|
29
|
+
* (`claude-code@work`, issue #942): it is a runtime target of its own — out
|
|
30
|
+
* of usage, probed and switched to independently of the default login. An
|
|
31
|
+
* agent on such an account still reports `claude-code` as its runtime
|
|
32
|
+
* ({@link RuntimeFallbackService.overrideFor}); the account comes from
|
|
33
|
+
* {@link RuntimeFallbackService.accountFor}. When that account's login
|
|
34
|
+
* expires the agent moves on along its chain, and the account comes back
|
|
35
|
+
* once the owner signs it in again ({@link RuntimeFallbackService.onAccountLogin}).
|
|
36
|
+
*
|
|
28
37
|
* Nothing here throws into its callers: delivery and launch fall back to the
|
|
29
38
|
* configured runtime on any error.
|
|
30
39
|
*
|
|
@@ -88,7 +97,7 @@ export interface RuntimeFallbackDeps {
|
|
|
88
97
|
isBusy: (sessionName: string) => Promise<boolean>;
|
|
89
98
|
/** Which runtimes are installed and signed in */
|
|
90
99
|
getAvailability: (settings: RuntimeFallbackSettings) => Promise<RuntimeAvailability[]>;
|
|
91
|
-
/** Does the runtime have usage again? */
|
|
100
|
+
/** Does the runtime (target: `claude-code@work` probes that account) have usage again? */
|
|
92
101
|
probe: (runtime: string) => Promise<ProbeResult>;
|
|
93
102
|
/** Write the handover file; returns its path */
|
|
94
103
|
writeHandover: (req: HandoverRequest) => Promise<string | null>;
|
|
@@ -190,6 +199,31 @@ export declare class RuntimeFallbackService implements RuntimeFallbackHooks {
|
|
|
190
199
|
* @returns Fallback runtime, or null
|
|
191
200
|
*/
|
|
192
201
|
overrideFor(sessionName: string): string | null;
|
|
202
|
+
/**
|
|
203
|
+
* The owner's other Claude Code account a session runs on.
|
|
204
|
+
*
|
|
205
|
+
* @param sessionName - Session
|
|
206
|
+
* @returns Account name, or null
|
|
207
|
+
*/
|
|
208
|
+
accountFor(sessionName: string): string | null;
|
|
209
|
+
/**
|
|
210
|
+
* A session's login expired. When it runs on one of the owner's other
|
|
211
|
+
* Claude Code accounts, that account is marked signed out (`login`) and
|
|
212
|
+
* the agent moves on along its chain; the owner is told how to sign it
|
|
213
|
+
* in again. The default login's expiry is left to the re-login flow.
|
|
214
|
+
*
|
|
215
|
+
* @param sessionName - Session
|
|
216
|
+
* @returns True when handled here
|
|
217
|
+
*/
|
|
218
|
+
reportLoginExpiry(sessionName: string): boolean;
|
|
219
|
+
/**
|
|
220
|
+
* One of the owner's other Claude Code accounts was signed in: if it was
|
|
221
|
+
* marked signed out, probe it and bring it back.
|
|
222
|
+
*
|
|
223
|
+
* @param account - Account name
|
|
224
|
+
* @returns Resolves when done; never rejects
|
|
225
|
+
*/
|
|
226
|
+
onAccountLogin(account: string): Promise<void>;
|
|
193
227
|
/**
|
|
194
228
|
* Take the note for a session's next kickoff.
|
|
195
229
|
*
|
|
@@ -223,6 +257,23 @@ export declare class RuntimeFallbackService implements RuntimeFallbackHooks {
|
|
|
223
257
|
* @returns The decision
|
|
224
258
|
*/
|
|
225
259
|
resolveLaunch(input: LaunchRuntimeInput): Promise<LaunchRuntimeDecision>;
|
|
260
|
+
/**
|
|
261
|
+
* The runtime target a session's output belongs to: the account it runs
|
|
262
|
+
* on when its override is a Claude Code account of that runtime.
|
|
263
|
+
*
|
|
264
|
+
* @param sessionName - Session
|
|
265
|
+
* @param runtime - Runtime the caller resolved (no account)
|
|
266
|
+
* @returns Target
|
|
267
|
+
*/
|
|
268
|
+
private targetOf;
|
|
269
|
+
/**
|
|
270
|
+
* A session on one of the owner's other Claude Code accounts lost its
|
|
271
|
+
* login: mark the account signed out and move the agent on.
|
|
272
|
+
*
|
|
273
|
+
* @param sessionName - Session
|
|
274
|
+
* @param target - `claude-code@<account>`
|
|
275
|
+
*/
|
|
276
|
+
private onAccountSignedOut;
|
|
226
277
|
/**
|
|
227
278
|
* Count a transient rate limit; escalate when they keep coming.
|
|
228
279
|
*
|
|
@@ -367,6 +418,14 @@ export declare class RuntimeFallbackService implements RuntimeFallbackHooks {
|
|
|
367
418
|
/** Send every owner notice that is due (once per event). */
|
|
368
419
|
flushNotices(): Promise<void>;
|
|
369
420
|
private limitNoticeText;
|
|
421
|
+
/**
|
|
422
|
+
* "Claude Code (work) is signed out on iriss-air. Reply `login claude work`
|
|
423
|
+
* to sign it in again. 2 agents switched to DeepSeek meanwhile."
|
|
424
|
+
*
|
|
425
|
+
* @param entry - The sign-out event
|
|
426
|
+
* @returns Owner message
|
|
427
|
+
*/
|
|
428
|
+
private signedOutNoticeText;
|
|
370
429
|
/**
|
|
371
430
|
* "DeepSeek is out of credit — top up at platform.deepseek.com. Orc is
|
|
372
431
|
* running on Claude Code meanwhile."
|
package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.service.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-fallback.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/runtime-fallback/runtime-fallback.service.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"runtime-fallback.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/runtime-fallback/runtime-fallback.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -25,6 +25,15 @@
|
|
|
25
25
|
* comes straight back) doubles the next probe interval.
|
|
26
26
|
* 7. **Tell the owner once** per event, and once when it is over.
|
|
27
27
|
*
|
|
28
|
+
* A chain entry may be one of the owner's other Claude Code accounts
|
|
29
|
+
* (`claude-code@work`, issue #942): it is a runtime target of its own — out
|
|
30
|
+
* of usage, probed and switched to independently of the default login. An
|
|
31
|
+
* agent on such an account still reports `claude-code` as its runtime
|
|
32
|
+
* ({@link RuntimeFallbackService.overrideFor}); the account comes from
|
|
33
|
+
* {@link RuntimeFallbackService.accountFor}. When that account's login
|
|
34
|
+
* expires the agent moves on along its chain, and the account comes back
|
|
35
|
+
* once the owner signs it in again ({@link RuntimeFallbackService.onAccountLogin}).
|
|
36
|
+
*
|
|
28
37
|
* Nothing here throws into its callers: delivery and launch fall back to the
|
|
29
38
|
* configured runtime on any error.
|
|
30
39
|
*
|
|
@@ -32,6 +41,7 @@
|
|
|
32
41
|
*/
|
|
33
42
|
import { ORCHESTRATOR_SESSION_NAME, RUNTIME_FALLBACK_CONSTANTS, RUNTIME_TYPES } from '../../constants.js';
|
|
34
43
|
import { detectUsageLimit } from './usage-limit-rules.js';
|
|
44
|
+
import { accountOf, baseRuntimeOf, parseRuntimeTarget, runtimeTarget } from '../harness/claude-accounts.js';
|
|
35
45
|
import { applySettingsPatch, runtimeLabel, runtimeShortLabel, } from './runtime-fallback.types.js';
|
|
36
46
|
const C = RUNTIME_FALLBACK_CONSTANTS;
|
|
37
47
|
const SILENT = { info: () => undefined, warn: () => undefined, debug: () => undefined };
|
|
@@ -124,7 +134,62 @@ export class RuntimeFallbackService {
|
|
|
124
134
|
* @returns Fallback runtime, or null
|
|
125
135
|
*/
|
|
126
136
|
overrideFor(sessionName) {
|
|
127
|
-
|
|
137
|
+
const target = this.state.overrides[sessionName]?.runtime;
|
|
138
|
+
return target ? baseRuntimeOf(target) : null;
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* The owner's other Claude Code account a session runs on.
|
|
142
|
+
*
|
|
143
|
+
* @param sessionName - Session
|
|
144
|
+
* @returns Account name, or null
|
|
145
|
+
*/
|
|
146
|
+
accountFor(sessionName) {
|
|
147
|
+
const target = this.state.overrides[sessionName]?.runtime;
|
|
148
|
+
return target ? accountOf(target) : null;
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* A session's login expired. When it runs on one of the owner's other
|
|
152
|
+
* Claude Code accounts, that account is marked signed out (`login`) and
|
|
153
|
+
* the agent moves on along its chain; the owner is told how to sign it
|
|
154
|
+
* in again. The default login's expiry is left to the re-login flow.
|
|
155
|
+
*
|
|
156
|
+
* @param sessionName - Session
|
|
157
|
+
* @returns True when handled here
|
|
158
|
+
*/
|
|
159
|
+
reportLoginExpiry(sessionName) {
|
|
160
|
+
if (!this.state.settings.enabled || this.isExempt(sessionName))
|
|
161
|
+
return false;
|
|
162
|
+
const target = this.state.overrides[sessionName]?.runtime;
|
|
163
|
+
if (!target || !accountOf(target))
|
|
164
|
+
return false;
|
|
165
|
+
void this.onAccountSignedOut(sessionName, target).catch((err) => this.logger.warn('Runtime fallback failed after an account sign-out', { sessionName, error: err instanceof Error ? err.message : String(err) }));
|
|
166
|
+
return true;
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* One of the owner's other Claude Code accounts was signed in: if it was
|
|
170
|
+
* marked signed out, probe it and bring it back.
|
|
171
|
+
*
|
|
172
|
+
* @param account - Account name
|
|
173
|
+
* @returns Resolves when done; never rejects
|
|
174
|
+
*/
|
|
175
|
+
async onAccountLogin(account) {
|
|
176
|
+
this.availability = null;
|
|
177
|
+
const target = runtimeTarget(RUNTIME_TYPES.CLAUDE_CODE, account);
|
|
178
|
+
const entry = this.state.exhausted[target];
|
|
179
|
+
if (!entry || entry.kind !== 'login')
|
|
180
|
+
return;
|
|
181
|
+
const result = await this.deps.probe(target).catch(() => 'unknown');
|
|
182
|
+
entry.lastProbeAt = new Date(this.now()).toISOString();
|
|
183
|
+
if (result === 'available') {
|
|
184
|
+
await this.recover(target);
|
|
185
|
+
return;
|
|
186
|
+
}
|
|
187
|
+
if (result === 'limited') {
|
|
188
|
+
// Signed in again, but that account is out of usage too.
|
|
189
|
+
entry.kind = 'usage_limit';
|
|
190
|
+
entry.ruleId = 'probe_limited';
|
|
191
|
+
}
|
|
192
|
+
this.save();
|
|
128
193
|
}
|
|
129
194
|
/**
|
|
130
195
|
* Take the note for a session's next kickoff.
|
|
@@ -150,7 +215,9 @@ export class RuntimeFallbackService {
|
|
|
150
215
|
reportOutput(sessionName, runtime, text, source) {
|
|
151
216
|
if (!this.state.settings.enabled || source === 'screen' || this.isExempt(sessionName))
|
|
152
217
|
return false;
|
|
153
|
-
|
|
218
|
+
// On another Claude Code account the account is what ran out, not the default login.
|
|
219
|
+
const target = this.targetOf(sessionName, runtime);
|
|
220
|
+
if ((this.mutedUntil.get(target) ?? 0) > this.now())
|
|
154
221
|
return false;
|
|
155
222
|
let match = detectUsageLimit(text, runtime, this.now(), this.deps.timeZone);
|
|
156
223
|
if (!match)
|
|
@@ -160,7 +227,7 @@ export class RuntimeFallbackService {
|
|
|
160
227
|
if (!match)
|
|
161
228
|
return false;
|
|
162
229
|
}
|
|
163
|
-
void this.onUsageLimit(sessionName,
|
|
230
|
+
void this.onUsageLimit(sessionName, target, match).catch((err) => this.logger.warn('Runtime fallback failed', { sessionName, runtime, error: err instanceof Error ? err.message : String(err) }));
|
|
164
231
|
return true;
|
|
165
232
|
}
|
|
166
233
|
/**
|
|
@@ -238,6 +305,49 @@ export class RuntimeFallbackService {
|
|
|
238
305
|
return this.decision(target);
|
|
239
306
|
}
|
|
240
307
|
// --------------------------------------------------------------- detection
|
|
308
|
+
/**
|
|
309
|
+
* The runtime target a session's output belongs to: the account it runs
|
|
310
|
+
* on when its override is a Claude Code account of that runtime.
|
|
311
|
+
*
|
|
312
|
+
* @param sessionName - Session
|
|
313
|
+
* @param runtime - Runtime the caller resolved (no account)
|
|
314
|
+
* @returns Target
|
|
315
|
+
*/
|
|
316
|
+
targetOf(sessionName, runtime) {
|
|
317
|
+
const override = this.state.overrides[sessionName]?.runtime;
|
|
318
|
+
return override && baseRuntimeOf(override) === runtime ? override : runtime;
|
|
319
|
+
}
|
|
320
|
+
/**
|
|
321
|
+
* A session on one of the owner's other Claude Code accounts lost its
|
|
322
|
+
* login: mark the account signed out and move the agent on.
|
|
323
|
+
*
|
|
324
|
+
* @param sessionName - Session
|
|
325
|
+
* @param target - `claude-code@<account>`
|
|
326
|
+
*/
|
|
327
|
+
async onAccountSignedOut(sessionName, target) {
|
|
328
|
+
const known = this.state.exhausted[target];
|
|
329
|
+
if (!known) {
|
|
330
|
+
this.state.exhausted[target] = {
|
|
331
|
+
runtime: target,
|
|
332
|
+
since: new Date(this.now()).toISOString(),
|
|
333
|
+
kind: 'login',
|
|
334
|
+
ruleId: 'login_expired',
|
|
335
|
+
switched: [],
|
|
336
|
+
switchedTo: [],
|
|
337
|
+
notified: false,
|
|
338
|
+
};
|
|
339
|
+
this.availability = null;
|
|
340
|
+
this.save();
|
|
341
|
+
this.logger.info('Claude Code account is signed out — its agents move on along their chain', { runtime: target });
|
|
342
|
+
}
|
|
343
|
+
else if (known.kind !== 'login') {
|
|
344
|
+
known.kind = 'login';
|
|
345
|
+
known.ruleId = 'login_expired';
|
|
346
|
+
delete known.until;
|
|
347
|
+
this.save();
|
|
348
|
+
}
|
|
349
|
+
await this.switchSession(sessionName, { waitForSafePoint: false, flushAfter: false });
|
|
350
|
+
}
|
|
241
351
|
/**
|
|
242
352
|
* Count a transient rate limit; escalate when they keep coming.
|
|
243
353
|
*
|
|
@@ -783,6 +893,8 @@ export class RuntimeFallbackService {
|
|
|
783
893
|
async limitNoticeText(entry) {
|
|
784
894
|
if (entry.kind === 'billing')
|
|
785
895
|
return this.billingNoticeText(entry);
|
|
896
|
+
if (entry.kind === 'login')
|
|
897
|
+
return this.signedOutNoticeText(entry);
|
|
786
898
|
const label = this.label(entry.runtime);
|
|
787
899
|
const reset = entry.until ? ` (resets ~${this.formatTime(Date.parse(entry.until))})` : '';
|
|
788
900
|
const head = `${label} hit its usage limit on ${this.deps.machineName()}${reset}.`;
|
|
@@ -799,6 +911,22 @@ export class RuntimeFallbackService {
|
|
|
799
911
|
text += ' Some agents had no fallback available and wait for the reset.';
|
|
800
912
|
return text;
|
|
801
913
|
}
|
|
914
|
+
/**
|
|
915
|
+
* "Claude Code (work) is signed out on iriss-air. Reply `login claude work`
|
|
916
|
+
* to sign it in again. 2 agents switched to DeepSeek meanwhile."
|
|
917
|
+
*
|
|
918
|
+
* @param entry - The sign-out event
|
|
919
|
+
* @returns Owner message
|
|
920
|
+
*/
|
|
921
|
+
signedOutNoticeText(entry) {
|
|
922
|
+
const account = accountOf(entry.runtime) ?? '';
|
|
923
|
+
const head = `${this.label(entry.runtime)} is signed out on ${this.deps.machineName()}. Reply \`login claude ${account}\` to sign it in again.`;
|
|
924
|
+
const n = entry.switched.length;
|
|
925
|
+
if (n === 0)
|
|
926
|
+
return `${head} No other runtime is available meanwhile.`;
|
|
927
|
+
const targets = entry.switchedTo.map((r) => this.label(r)).join(' / ');
|
|
928
|
+
return `${head} ${agents(n)} switched to ${targets} meanwhile.`;
|
|
929
|
+
}
|
|
802
930
|
/**
|
|
803
931
|
* "DeepSeek is out of credit — top up at platform.deepseek.com. Orc is
|
|
804
932
|
* running on Claude Code meanwhile."
|
|
@@ -833,7 +961,7 @@ export class RuntimeFallbackService {
|
|
|
833
961
|
*/
|
|
834
962
|
topUpUrl(entry) {
|
|
835
963
|
let provider = null;
|
|
836
|
-
if (entry.runtime === RUNTIME_TYPES.CLAUDE_CODE)
|
|
964
|
+
if (baseRuntimeOf(entry.runtime) === RUNTIME_TYPES.CLAUDE_CODE)
|
|
837
965
|
provider = 'anthropic';
|
|
838
966
|
else if (entry.runtime === RUNTIME_TYPES.CODEX_CLI)
|
|
839
967
|
provider = 'openai';
|
|
@@ -872,11 +1000,13 @@ export class RuntimeFallbackService {
|
|
|
872
1000
|
}
|
|
873
1001
|
switchNote(from, to, until, handover, workItem) {
|
|
874
1002
|
const reset = until ? ` (it resets ~${this.formatTime(Date.parse(until))})` : '';
|
|
875
|
-
const
|
|
1003
|
+
const kind = this.state.exhausted[from]?.kind;
|
|
876
1004
|
const parts = [
|
|
877
|
-
billing
|
|
1005
|
+
kind === 'billing'
|
|
878
1006
|
? `Crewly moved you from ${this.label(from)} to ${this.label(to)} because ${this.label(from)} is out of credit; you will be moved back once it is topped up.`
|
|
879
|
-
:
|
|
1007
|
+
: kind === 'login'
|
|
1008
|
+
? `Crewly moved you from ${this.label(from)} to ${this.label(to)} because the ${this.label(from)} login expired.`
|
|
1009
|
+
: `Crewly moved you from ${this.label(from)} to ${this.label(to)} because ${this.label(from)} hit its usage limit${reset}; you will be moved back when it resets.`,
|
|
880
1010
|
handover
|
|
881
1011
|
? `This is a fresh conversation: after registering, read ${handover} once — it holds the end of your previous conversation.`
|
|
882
1012
|
: 'This is a fresh conversation: your tasks, teams and wiki are all still in Crewly.',
|
|
@@ -936,10 +1066,12 @@ export class RuntimeFallbackService {
|
|
|
936
1066
|
label(runtime) {
|
|
937
1067
|
return runtimeLabel(runtime, this.state.settings.crewlyAgentModel);
|
|
938
1068
|
}
|
|
939
|
-
decision(
|
|
1069
|
+
decision(target) {
|
|
1070
|
+
const { runtime, account } = parseRuntimeTarget(target);
|
|
940
1071
|
return {
|
|
941
1072
|
runtime,
|
|
942
1073
|
overridden: true,
|
|
1074
|
+
...(account ? { claudeAccount: account } : {}),
|
|
943
1075
|
...(runtime === RUNTIME_TYPES.CREWLY_AGENT ? { crewlyAgentModel: this.state.settings.crewlyAgentModel } : {}),
|
|
944
1076
|
};
|
|
945
1077
|
}
|