crewly 1.20.192 → 1.20.193
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/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/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 +135 -2
- package/dist/backend/backend/src/constants.d.ts.map +1 -1
- package/dist/backend/backend/src/constants.js +136 -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/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 +44 -1
- 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 +3 -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/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/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 +49 -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 +24 -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 +52 -0
- 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/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 +48 -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 +11 -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 +29 -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 +45 -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/people/acting-for.service.d.ts +151 -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 +224 -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 +79 -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 +135 -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 +181 -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 +317 -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-orchestrator-bridge.d.ts +10 -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 +51 -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/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/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 +5 -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 +135 -2
- package/dist/cli/backend/src/constants.d.ts.map +1 -1
- package/dist/cli/backend/src/constants.js +136 -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/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/chat-v2/chat-v2.dispatcher.service.d.ts +24 -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 +52 -0
- 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 +11 -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 +29 -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 +151 -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 +224 -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 +181 -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 +317 -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 +10 -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 +51 -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/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/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 +5 -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-5b7af029.js → index-465d1f8f.js} +293 -293
- package/frontend/dist/assets/{index-fc715ec3.css → index-5e967795.css} +1 -1
- 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,207 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The owner's other Claude Code accounts on this machine (issue #942).
|
|
3
|
+
*
|
|
4
|
+
* When the owner's Claude Code account runs out of usage, agents can move to
|
|
5
|
+
* another account of the SAME owner before falling back to other runtimes.
|
|
6
|
+
* Each account has its own config dir and its own login — Crewly never
|
|
7
|
+
* switches accounts inside one login (in-place switching is unreliable
|
|
8
|
+
* upstream, anthropics/claude-code#94195):
|
|
9
|
+
*
|
|
10
|
+
* - config dir: `<CREWLY_HOME>/claude-accounts/<name>/`, passed to Claude as
|
|
11
|
+
* `CLAUDE_CONFIG_DIR` (its own history, settings and `.claude.json`);
|
|
12
|
+
* - login: the long-lived `claude setup-token` token, stored in
|
|
13
|
+
* `harness-credentials.json` (`claudeAccounts.<name>`) and passed as
|
|
14
|
+
* `CLAUDE_CODE_OAUTH_TOKEN` to sessions on that account only. A login
|
|
15
|
+
* done by hand (`CLAUDE_CONFIG_DIR=… claude /login`) also counts when it
|
|
16
|
+
* left a credentials file there.
|
|
17
|
+
*
|
|
18
|
+
* In a fallback chain an account is the entry `claude-code@<name>`; plain
|
|
19
|
+
* `claude-code` is the machine's default login.
|
|
20
|
+
*
|
|
21
|
+
* Add only Claude Code accounts that the owner owns.
|
|
22
|
+
*
|
|
23
|
+
* @module services/harness/claude-accounts
|
|
24
|
+
*/
|
|
25
|
+
import { type HarnessCredentialsStore } from './harness-credentials.store.js';
|
|
26
|
+
/** A runtime target: a runtime, optionally on one of the owner's accounts. */
|
|
27
|
+
export interface RuntimeTarget {
|
|
28
|
+
/** Runtime id (`claude-code`, `crewly-agent`, …) */
|
|
29
|
+
runtime: string;
|
|
30
|
+
/** Account name, for `claude-code@<name>` */
|
|
31
|
+
account?: string;
|
|
32
|
+
}
|
|
33
|
+
/** One account as the API shows it. */
|
|
34
|
+
export interface ClaudeAccountInfo {
|
|
35
|
+
name: string;
|
|
36
|
+
/** Fallback chain entry (`claude-code@<name>`) */
|
|
37
|
+
target: string;
|
|
38
|
+
/** A login is stored (token) or present in its config dir */
|
|
39
|
+
signedIn: boolean;
|
|
40
|
+
/** Its config dir */
|
|
41
|
+
configDir: string;
|
|
42
|
+
}
|
|
43
|
+
/** Where accounts live (injectable for tests). */
|
|
44
|
+
export interface ClaudeAccountsLocation {
|
|
45
|
+
crewlyHome?: string;
|
|
46
|
+
credentials?: Pick<HarnessCredentialsStore, 'getClaudeAccountToken' | 'listClaudeAccountsWithToken'>;
|
|
47
|
+
}
|
|
48
|
+
/** An invalid account name. */
|
|
49
|
+
export declare class ClaudeAccountNameError extends Error {
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Normalise an account name as written by a person.
|
|
53
|
+
*
|
|
54
|
+
* @param raw - e.g. "Work", " b "
|
|
55
|
+
* @returns The name, lower-cased and trimmed
|
|
56
|
+
*/
|
|
57
|
+
export declare function normaliseClaudeAccountName(raw: string): string;
|
|
58
|
+
/**
|
|
59
|
+
* Whether a (normalised) name can be an account name.
|
|
60
|
+
*
|
|
61
|
+
* @param name - Candidate
|
|
62
|
+
* @returns True for 1–32 of `a-z0-9_-`, starting with a letter or digit, not a reserved word
|
|
63
|
+
*
|
|
64
|
+
* @example
|
|
65
|
+
* ```ts
|
|
66
|
+
* isValidClaudeAccountName('work'); // true
|
|
67
|
+
* isValidClaudeAccountName('code'); // false (reserved)
|
|
68
|
+
* ```
|
|
69
|
+
*/
|
|
70
|
+
export declare function isValidClaudeAccountName(name: string): boolean;
|
|
71
|
+
/**
|
|
72
|
+
* Validate and normalise an account name.
|
|
73
|
+
*
|
|
74
|
+
* @param raw - Name as given
|
|
75
|
+
* @returns The normalised name
|
|
76
|
+
* @throws ClaudeAccountNameError when it is not a valid name
|
|
77
|
+
*/
|
|
78
|
+
export declare function requireClaudeAccountName(raw: unknown): string;
|
|
79
|
+
/**
|
|
80
|
+
* Split a runtime target.
|
|
81
|
+
*
|
|
82
|
+
* @param target - `claude-code`, `claude-code@work`, `crewly-agent`
|
|
83
|
+
* @returns Runtime and account
|
|
84
|
+
*
|
|
85
|
+
* @example
|
|
86
|
+
* ```ts
|
|
87
|
+
* parseRuntimeTarget('claude-code@work'); // { runtime: 'claude-code', account: 'work' }
|
|
88
|
+
* ```
|
|
89
|
+
*/
|
|
90
|
+
export declare function parseRuntimeTarget(target: string): RuntimeTarget;
|
|
91
|
+
/**
|
|
92
|
+
* The runtime of a target, without its account.
|
|
93
|
+
*
|
|
94
|
+
* @param target - Runtime target
|
|
95
|
+
* @returns Runtime id
|
|
96
|
+
*/
|
|
97
|
+
export declare function baseRuntimeOf(target: string): string;
|
|
98
|
+
/**
|
|
99
|
+
* The account of a target.
|
|
100
|
+
*
|
|
101
|
+
* @param target - Runtime target
|
|
102
|
+
* @returns Account name, or null for a runtime's default login
|
|
103
|
+
*/
|
|
104
|
+
export declare function accountOf(target: string): string | null;
|
|
105
|
+
/**
|
|
106
|
+
* Build a target.
|
|
107
|
+
*
|
|
108
|
+
* @param runtime - Runtime id
|
|
109
|
+
* @param account - Account name (only Claude Code has accounts)
|
|
110
|
+
* @returns `runtime` or `runtime@account`
|
|
111
|
+
*/
|
|
112
|
+
export declare function runtimeTarget(runtime: string, account?: string | null): string;
|
|
113
|
+
/**
|
|
114
|
+
* Whether a chain entry is one of the owner's Claude Code accounts.
|
|
115
|
+
*
|
|
116
|
+
* @param target - Chain entry
|
|
117
|
+
* @returns True for `claude-code@<valid name>`
|
|
118
|
+
*/
|
|
119
|
+
export declare function isClaudeAccountTarget(target: string): boolean;
|
|
120
|
+
/**
|
|
121
|
+
* Directory holding every account's config dir.
|
|
122
|
+
*
|
|
123
|
+
* @param crewlyHome - CREWLY_HOME
|
|
124
|
+
* @returns Absolute path
|
|
125
|
+
*/
|
|
126
|
+
export declare function claudeAccountsRoot(crewlyHome?: string): string;
|
|
127
|
+
/**
|
|
128
|
+
* An account's config dir (its `CLAUDE_CONFIG_DIR`).
|
|
129
|
+
*
|
|
130
|
+
* @param account - Account name (valid)
|
|
131
|
+
* @param crewlyHome - CREWLY_HOME
|
|
132
|
+
* @returns Absolute path
|
|
133
|
+
*/
|
|
134
|
+
export declare function claudeAccountConfigDir(account: string, crewlyHome?: string): string;
|
|
135
|
+
/**
|
|
136
|
+
* Accounts known on this machine: a config dir exists or a token is stored.
|
|
137
|
+
*
|
|
138
|
+
* @param location - CREWLY_HOME / credentials overrides
|
|
139
|
+
* @returns Sorted account names
|
|
140
|
+
*/
|
|
141
|
+
export declare function listClaudeAccounts(location?: ClaudeAccountsLocation): string[];
|
|
142
|
+
/**
|
|
143
|
+
* Whether an account has a login: a stored token, or a credentials file in
|
|
144
|
+
* its config dir (a login done by hand).
|
|
145
|
+
*
|
|
146
|
+
* @param account - Account name
|
|
147
|
+
* @param location - CREWLY_HOME / credentials overrides
|
|
148
|
+
* @returns True when signed in
|
|
149
|
+
*/
|
|
150
|
+
export declare function isClaudeAccountSignedIn(account: string, location?: ClaudeAccountsLocation): boolean;
|
|
151
|
+
/**
|
|
152
|
+
* Every known account with its login state.
|
|
153
|
+
*
|
|
154
|
+
* @param location - CREWLY_HOME / credentials overrides
|
|
155
|
+
* @returns Accounts
|
|
156
|
+
*/
|
|
157
|
+
export declare function describeClaudeAccounts(location?: ClaudeAccountsLocation): ClaudeAccountInfo[];
|
|
158
|
+
/**
|
|
159
|
+
* Env that runs Claude Code on an account: its config dir and its token.
|
|
160
|
+
* The default login's credentials are blanked so they cannot win over the
|
|
161
|
+
* account's (an empty value counts as unset for Claude Code).
|
|
162
|
+
*
|
|
163
|
+
* @param account - Account name
|
|
164
|
+
* @param location - CREWLY_HOME / credentials overrides
|
|
165
|
+
* @returns Env vars to merge over the session's env
|
|
166
|
+
*
|
|
167
|
+
* @example
|
|
168
|
+
* ```ts
|
|
169
|
+
* claudeAccountEnv('work'); // { CLAUDE_CONFIG_DIR: '~/.crewly/claude-accounts/work', CLAUDE_CODE_OAUTH_TOKEN: '…', ANTHROPIC_API_KEY: '' }
|
|
170
|
+
* ```
|
|
171
|
+
*/
|
|
172
|
+
export declare function claudeAccountEnv(account: string, location?: ClaudeAccountsLocation): Record<string, string>;
|
|
173
|
+
/**
|
|
174
|
+
* Create an account's config dir (idempotent). A new dir starts with the
|
|
175
|
+
* owner's own choices from the default login: Claude's `settings.json` and
|
|
176
|
+
* the first-run answers in `.claude.json` (onboarding done, permission mode
|
|
177
|
+
* accepted, theme), so an agent on the account does not stop at a first-run
|
|
178
|
+
* screen the owner already answered. No credential is copied.
|
|
179
|
+
*
|
|
180
|
+
* @param account - Account name (valid)
|
|
181
|
+
* @param options - CREWLY_HOME and the default login's location (tests)
|
|
182
|
+
* @returns The config dir
|
|
183
|
+
*/
|
|
184
|
+
export declare function ensureClaudeAccountDir(account: string, options?: {
|
|
185
|
+
crewlyHome?: string;
|
|
186
|
+
defaultEnv?: NodeJS.ProcessEnv;
|
|
187
|
+
homeDir?: string;
|
|
188
|
+
}): string;
|
|
189
|
+
/**
|
|
190
|
+
* After an account's login: create its dir if needed and record Claude's
|
|
191
|
+
* first-run "onboarding done" answer there (as for the default login).
|
|
192
|
+
*
|
|
193
|
+
* @param account - Account name (valid)
|
|
194
|
+
* @param crewlyHome - CREWLY_HOME
|
|
195
|
+
*/
|
|
196
|
+
export declare function prepareClaudeAccountAfterLogin(account: string, crewlyHome?: string): void;
|
|
197
|
+
/**
|
|
198
|
+
* Remove an account: its stored token and its config dir.
|
|
199
|
+
*
|
|
200
|
+
* @param account - Account name (valid)
|
|
201
|
+
* @param location - CREWLY_HOME / credentials store
|
|
202
|
+
*/
|
|
203
|
+
export declare function removeClaudeAccount(account: string, location?: {
|
|
204
|
+
crewlyHome?: string;
|
|
205
|
+
credentials?: Pick<HarnessCredentialsStore, 'clearClaudeAccount'>;
|
|
206
|
+
}): void;
|
|
207
|
+
//# sourceMappingURL=claude-accounts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-accounts.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/harness/claude-accounts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,306 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The owner's other Claude Code accounts on this machine (issue #942).
|
|
3
|
+
*
|
|
4
|
+
* When the owner's Claude Code account runs out of usage, agents can move to
|
|
5
|
+
* another account of the SAME owner before falling back to other runtimes.
|
|
6
|
+
* Each account has its own config dir and its own login — Crewly never
|
|
7
|
+
* switches accounts inside one login (in-place switching is unreliable
|
|
8
|
+
* upstream, anthropics/claude-code#94195):
|
|
9
|
+
*
|
|
10
|
+
* - config dir: `<CREWLY_HOME>/claude-accounts/<name>/`, passed to Claude as
|
|
11
|
+
* `CLAUDE_CONFIG_DIR` (its own history, settings and `.claude.json`);
|
|
12
|
+
* - login: the long-lived `claude setup-token` token, stored in
|
|
13
|
+
* `harness-credentials.json` (`claudeAccounts.<name>`) and passed as
|
|
14
|
+
* `CLAUDE_CODE_OAUTH_TOKEN` to sessions on that account only. A login
|
|
15
|
+
* done by hand (`CLAUDE_CONFIG_DIR=… claude /login`) also counts when it
|
|
16
|
+
* left a credentials file there.
|
|
17
|
+
*
|
|
18
|
+
* In a fallback chain an account is the entry `claude-code@<name>`; plain
|
|
19
|
+
* `claude-code` is the machine's default login.
|
|
20
|
+
*
|
|
21
|
+
* Add only Claude Code accounts that the owner owns.
|
|
22
|
+
*
|
|
23
|
+
* @module services/harness/claude-accounts
|
|
24
|
+
*/
|
|
25
|
+
import * as fs from 'fs';
|
|
26
|
+
import * as os from 'os';
|
|
27
|
+
import * as path from 'path';
|
|
28
|
+
import { HARNESS_CONSTANTS, RUNTIME_TYPES } from '../../constants.js';
|
|
29
|
+
import { getCrewlyHomePath } from '../core/crewly-home.utils.js';
|
|
30
|
+
import { prepareClaudeConfigForCrewlyLogin } from './claude-config.utils.js';
|
|
31
|
+
import { getHarnessCredentialsStore } from './harness-credentials.store.js';
|
|
32
|
+
const ACC = HARNESS_CONSTANTS.CLAUDE.ACCOUNTS;
|
|
33
|
+
/** An invalid account name. */
|
|
34
|
+
export class ClaudeAccountNameError extends Error {
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Normalise an account name as written by a person.
|
|
38
|
+
*
|
|
39
|
+
* @param raw - e.g. "Work", " b "
|
|
40
|
+
* @returns The name, lower-cased and trimmed
|
|
41
|
+
*/
|
|
42
|
+
export function normaliseClaudeAccountName(raw) {
|
|
43
|
+
return raw.trim().toLowerCase();
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Whether a (normalised) name can be an account name.
|
|
47
|
+
*
|
|
48
|
+
* @param name - Candidate
|
|
49
|
+
* @returns True for 1–32 of `a-z0-9_-`, starting with a letter or digit, not a reserved word
|
|
50
|
+
*
|
|
51
|
+
* @example
|
|
52
|
+
* ```ts
|
|
53
|
+
* isValidClaudeAccountName('work'); // true
|
|
54
|
+
* isValidClaudeAccountName('code'); // false (reserved)
|
|
55
|
+
* ```
|
|
56
|
+
*/
|
|
57
|
+
export function isValidClaudeAccountName(name) {
|
|
58
|
+
return ACC.NAME_PATTERN.test(name) && !ACC.RESERVED_NAMES.includes(name);
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Validate and normalise an account name.
|
|
62
|
+
*
|
|
63
|
+
* @param raw - Name as given
|
|
64
|
+
* @returns The normalised name
|
|
65
|
+
* @throws ClaudeAccountNameError when it is not a valid name
|
|
66
|
+
*/
|
|
67
|
+
export function requireClaudeAccountName(raw) {
|
|
68
|
+
const name = typeof raw === 'string' ? normaliseClaudeAccountName(raw) : '';
|
|
69
|
+
if (!isValidClaudeAccountName(name)) {
|
|
70
|
+
throw new ClaudeAccountNameError(`Account names are 1–32 lower-case letters, digits, "-" or "_" (not ${ACC.RESERVED_NAMES.map((r) => `"${r}"`).join(', ')})`);
|
|
71
|
+
}
|
|
72
|
+
return name;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Split a runtime target.
|
|
76
|
+
*
|
|
77
|
+
* @param target - `claude-code`, `claude-code@work`, `crewly-agent`
|
|
78
|
+
* @returns Runtime and account
|
|
79
|
+
*
|
|
80
|
+
* @example
|
|
81
|
+
* ```ts
|
|
82
|
+
* parseRuntimeTarget('claude-code@work'); // { runtime: 'claude-code', account: 'work' }
|
|
83
|
+
* ```
|
|
84
|
+
*/
|
|
85
|
+
export function parseRuntimeTarget(target) {
|
|
86
|
+
const at = target.indexOf(ACC.TARGET_SEPARATOR);
|
|
87
|
+
if (at <= 0)
|
|
88
|
+
return { runtime: target };
|
|
89
|
+
return { runtime: target.slice(0, at), account: target.slice(at + 1) };
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* The runtime of a target, without its account.
|
|
93
|
+
*
|
|
94
|
+
* @param target - Runtime target
|
|
95
|
+
* @returns Runtime id
|
|
96
|
+
*/
|
|
97
|
+
export function baseRuntimeOf(target) {
|
|
98
|
+
return parseRuntimeTarget(target).runtime;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* The account of a target.
|
|
102
|
+
*
|
|
103
|
+
* @param target - Runtime target
|
|
104
|
+
* @returns Account name, or null for a runtime's default login
|
|
105
|
+
*/
|
|
106
|
+
export function accountOf(target) {
|
|
107
|
+
return parseRuntimeTarget(target).account ?? null;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Build a target.
|
|
111
|
+
*
|
|
112
|
+
* @param runtime - Runtime id
|
|
113
|
+
* @param account - Account name (only Claude Code has accounts)
|
|
114
|
+
* @returns `runtime` or `runtime@account`
|
|
115
|
+
*/
|
|
116
|
+
export function runtimeTarget(runtime, account) {
|
|
117
|
+
return account ? `${runtime}${ACC.TARGET_SEPARATOR}${account}` : runtime;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Whether a chain entry is one of the owner's Claude Code accounts.
|
|
121
|
+
*
|
|
122
|
+
* @param target - Chain entry
|
|
123
|
+
* @returns True for `claude-code@<valid name>`
|
|
124
|
+
*/
|
|
125
|
+
export function isClaudeAccountTarget(target) {
|
|
126
|
+
const { runtime, account } = parseRuntimeTarget(target);
|
|
127
|
+
return runtime === RUNTIME_TYPES.CLAUDE_CODE && account !== undefined && isValidClaudeAccountName(account);
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Directory holding every account's config dir.
|
|
131
|
+
*
|
|
132
|
+
* @param crewlyHome - CREWLY_HOME
|
|
133
|
+
* @returns Absolute path
|
|
134
|
+
*/
|
|
135
|
+
export function claudeAccountsRoot(crewlyHome = getCrewlyHomePath()) {
|
|
136
|
+
return path.join(crewlyHome, ACC.DIR);
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* An account's config dir (its `CLAUDE_CONFIG_DIR`).
|
|
140
|
+
*
|
|
141
|
+
* @param account - Account name (valid)
|
|
142
|
+
* @param crewlyHome - CREWLY_HOME
|
|
143
|
+
* @returns Absolute path
|
|
144
|
+
*/
|
|
145
|
+
export function claudeAccountConfigDir(account, crewlyHome = getCrewlyHomePath()) {
|
|
146
|
+
return path.join(claudeAccountsRoot(crewlyHome), account);
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Accounts known on this machine: a config dir exists or a token is stored.
|
|
150
|
+
*
|
|
151
|
+
* @param location - CREWLY_HOME / credentials overrides
|
|
152
|
+
* @returns Sorted account names
|
|
153
|
+
*/
|
|
154
|
+
export function listClaudeAccounts(location = {}) {
|
|
155
|
+
const names = new Set();
|
|
156
|
+
try {
|
|
157
|
+
for (const entry of fs.readdirSync(claudeAccountsRoot(location.crewlyHome), { withFileTypes: true })) {
|
|
158
|
+
if (entry.isDirectory() && isValidClaudeAccountName(entry.name))
|
|
159
|
+
names.add(entry.name);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
catch {
|
|
163
|
+
// no accounts yet
|
|
164
|
+
}
|
|
165
|
+
try {
|
|
166
|
+
for (const name of (location.credentials ?? getHarnessCredentialsStore()).listClaudeAccountsWithToken()) {
|
|
167
|
+
if (isValidClaudeAccountName(name))
|
|
168
|
+
names.add(name);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
catch {
|
|
172
|
+
// unreadable credentials: directories only
|
|
173
|
+
}
|
|
174
|
+
return [...names].sort();
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Whether an account has a login: a stored token, or a credentials file in
|
|
178
|
+
* its config dir (a login done by hand).
|
|
179
|
+
*
|
|
180
|
+
* @param account - Account name
|
|
181
|
+
* @param location - CREWLY_HOME / credentials overrides
|
|
182
|
+
* @returns True when signed in
|
|
183
|
+
*/
|
|
184
|
+
export function isClaudeAccountSignedIn(account, location = {}) {
|
|
185
|
+
try {
|
|
186
|
+
if ((location.credentials ?? getHarnessCredentialsStore()).getClaudeAccountToken(account))
|
|
187
|
+
return true;
|
|
188
|
+
}
|
|
189
|
+
catch {
|
|
190
|
+
// fall through to the file check
|
|
191
|
+
}
|
|
192
|
+
return fs.existsSync(path.join(claudeAccountConfigDir(account, location.crewlyHome), HARNESS_CONSTANTS.CLAUDE.CREDENTIALS_FILE));
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Every known account with its login state.
|
|
196
|
+
*
|
|
197
|
+
* @param location - CREWLY_HOME / credentials overrides
|
|
198
|
+
* @returns Accounts
|
|
199
|
+
*/
|
|
200
|
+
export function describeClaudeAccounts(location = {}) {
|
|
201
|
+
return listClaudeAccounts(location).map((name) => ({
|
|
202
|
+
name,
|
|
203
|
+
target: runtimeTarget(RUNTIME_TYPES.CLAUDE_CODE, name),
|
|
204
|
+
signedIn: isClaudeAccountSignedIn(name, location),
|
|
205
|
+
configDir: claudeAccountConfigDir(name, location.crewlyHome),
|
|
206
|
+
}));
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Env that runs Claude Code on an account: its config dir and its token.
|
|
210
|
+
* The default login's credentials are blanked so they cannot win over the
|
|
211
|
+
* account's (an empty value counts as unset for Claude Code).
|
|
212
|
+
*
|
|
213
|
+
* @param account - Account name
|
|
214
|
+
* @param location - CREWLY_HOME / credentials overrides
|
|
215
|
+
* @returns Env vars to merge over the session's env
|
|
216
|
+
*
|
|
217
|
+
* @example
|
|
218
|
+
* ```ts
|
|
219
|
+
* claudeAccountEnv('work'); // { CLAUDE_CONFIG_DIR: '~/.crewly/claude-accounts/work', CLAUDE_CODE_OAUTH_TOKEN: '…', ANTHROPIC_API_KEY: '' }
|
|
220
|
+
* ```
|
|
221
|
+
*/
|
|
222
|
+
export function claudeAccountEnv(account, location = {}) {
|
|
223
|
+
let token = null;
|
|
224
|
+
try {
|
|
225
|
+
token = (location.credentials ?? getHarnessCredentialsStore()).getClaudeAccountToken(account);
|
|
226
|
+
}
|
|
227
|
+
catch {
|
|
228
|
+
token = null;
|
|
229
|
+
}
|
|
230
|
+
return {
|
|
231
|
+
[HARNESS_CONSTANTS.CLAUDE.CONFIG_DIR_ENV]: claudeAccountConfigDir(account, location.crewlyHome),
|
|
232
|
+
[HARNESS_CONSTANTS.CLAUDE.OAUTH_TOKEN_ENV]: token ?? '',
|
|
233
|
+
[HARNESS_CONSTANTS.CLAUDE.API_KEY_ENV]: '',
|
|
234
|
+
};
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* Create an account's config dir (idempotent). A new dir starts with the
|
|
238
|
+
* owner's own choices from the default login: Claude's `settings.json` and
|
|
239
|
+
* the first-run answers in `.claude.json` (onboarding done, permission mode
|
|
240
|
+
* accepted, theme), so an agent on the account does not stop at a first-run
|
|
241
|
+
* screen the owner already answered. No credential is copied.
|
|
242
|
+
*
|
|
243
|
+
* @param account - Account name (valid)
|
|
244
|
+
* @param options - CREWLY_HOME and the default login's location (tests)
|
|
245
|
+
* @returns The config dir
|
|
246
|
+
*/
|
|
247
|
+
export function ensureClaudeAccountDir(account, options = {}) {
|
|
248
|
+
const dir = claudeAccountConfigDir(account, options.crewlyHome);
|
|
249
|
+
if (fs.existsSync(dir))
|
|
250
|
+
return dir;
|
|
251
|
+
fs.mkdirSync(dir, { recursive: true, mode: 0o700 });
|
|
252
|
+
const env = options.defaultEnv ?? process.env;
|
|
253
|
+
const home = options.homeDir ?? os.homedir();
|
|
254
|
+
const defaultConfigDir = env[HARNESS_CONSTANTS.CLAUDE.CONFIG_DIR_ENV];
|
|
255
|
+
const defaultDataDir = defaultConfigDir ? defaultConfigDir : path.join(home, HARNESS_CONSTANTS.CLAUDE.DATA_DIR);
|
|
256
|
+
const defaultConfigFile = path.join(defaultConfigDir ? defaultConfigDir : home, HARNESS_CONSTANTS.CLAUDE.CONFIG_FILE);
|
|
257
|
+
try {
|
|
258
|
+
const settings = path.join(defaultDataDir, ACC.SETTINGS_FILE);
|
|
259
|
+
if (fs.existsSync(settings))
|
|
260
|
+
fs.copyFileSync(settings, path.join(dir, ACC.SETTINGS_FILE));
|
|
261
|
+
}
|
|
262
|
+
catch {
|
|
263
|
+
// the account starts with Claude's defaults
|
|
264
|
+
}
|
|
265
|
+
try {
|
|
266
|
+
const parsed = JSON.parse(fs.readFileSync(defaultConfigFile, 'utf-8'));
|
|
267
|
+
if (parsed && typeof parsed === 'object' && !Array.isArray(parsed)) {
|
|
268
|
+
const source = parsed;
|
|
269
|
+
const copied = {};
|
|
270
|
+
for (const key of ACC.COPIED_CONFIG_KEYS)
|
|
271
|
+
if (key in source)
|
|
272
|
+
copied[key] = source[key];
|
|
273
|
+
if (Object.keys(copied).length > 0) {
|
|
274
|
+
fs.writeFileSync(path.join(dir, HARNESS_CONSTANTS.CLAUDE.CONFIG_FILE), `${JSON.stringify(copied, null, 2)}\n`, {
|
|
275
|
+
mode: HARNESS_CONSTANTS.CREDENTIALS_FILE_MODE,
|
|
276
|
+
});
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
catch {
|
|
281
|
+
// no default config to copy from
|
|
282
|
+
}
|
|
283
|
+
return dir;
|
|
284
|
+
}
|
|
285
|
+
/**
|
|
286
|
+
* After an account's login: create its dir if needed and record Claude's
|
|
287
|
+
* first-run "onboarding done" answer there (as for the default login).
|
|
288
|
+
*
|
|
289
|
+
* @param account - Account name (valid)
|
|
290
|
+
* @param crewlyHome - CREWLY_HOME
|
|
291
|
+
*/
|
|
292
|
+
export function prepareClaudeAccountAfterLogin(account, crewlyHome) {
|
|
293
|
+
const dir = ensureClaudeAccountDir(account, { crewlyHome });
|
|
294
|
+
prepareClaudeConfigForCrewlyLogin({}, { env: { [HARNESS_CONSTANTS.CLAUDE.CONFIG_DIR_ENV]: dir } });
|
|
295
|
+
}
|
|
296
|
+
/**
|
|
297
|
+
* Remove an account: its stored token and its config dir.
|
|
298
|
+
*
|
|
299
|
+
* @param account - Account name (valid)
|
|
300
|
+
* @param location - CREWLY_HOME / credentials store
|
|
301
|
+
*/
|
|
302
|
+
export function removeClaudeAccount(account, location = {}) {
|
|
303
|
+
(location.credentials ?? getHarnessCredentialsStore()).clearClaudeAccount(account);
|
|
304
|
+
fs.rmSync(claudeAccountConfigDir(account, location.crewlyHome), { recursive: true, force: true });
|
|
305
|
+
}
|
|
306
|
+
//# sourceMappingURL=claude-accounts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-accounts.js","sourceRoot":"","sources":["../../../../../../backend/src/services/harness/claude-accounts.ts"],"names":[],"mappings":"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"}
|
|
@@ -35,6 +35,14 @@ export interface HarnessCredentials {
|
|
|
35
35
|
geminiApiKey?: string;
|
|
36
36
|
updatedAt?: string;
|
|
37
37
|
};
|
|
38
|
+
/**
|
|
39
|
+
* The owner's other Claude Code accounts (issue #942), keyed by account
|
|
40
|
+
* name. Each token goes only to sessions running on that account.
|
|
41
|
+
*/
|
|
42
|
+
claudeAccounts?: Record<string, {
|
|
43
|
+
oauthToken?: string;
|
|
44
|
+
updatedAt?: string;
|
|
45
|
+
}>;
|
|
38
46
|
}
|
|
39
47
|
/** Which stored Claude credential is active. */
|
|
40
48
|
export type StoredClaudeCredential = 'oauth_token' | 'api_key' | null;
|
|
@@ -116,6 +124,33 @@ export declare class HarnessCredentialsStore {
|
|
|
116
124
|
* Forget the stored Claude credential.
|
|
117
125
|
*/
|
|
118
126
|
clearClaude(): void;
|
|
127
|
+
/**
|
|
128
|
+
* Store the `setup-token` token of one of the owner's other Claude Code accounts.
|
|
129
|
+
*
|
|
130
|
+
* @param account - Account name (validated by the caller)
|
|
131
|
+
* @param token - Token printed by `claude setup-token`
|
|
132
|
+
* @throws Error when the token is empty
|
|
133
|
+
*/
|
|
134
|
+
setClaudeAccountToken(account: string, token: string): void;
|
|
135
|
+
/**
|
|
136
|
+
* The stored token of one of the owner's other Claude Code accounts.
|
|
137
|
+
*
|
|
138
|
+
* @param account - Account name
|
|
139
|
+
* @returns The token, or null when none is stored
|
|
140
|
+
*/
|
|
141
|
+
getClaudeAccountToken(account: string): string | null;
|
|
142
|
+
/**
|
|
143
|
+
* Account names with a stored token.
|
|
144
|
+
*
|
|
145
|
+
* @returns Names
|
|
146
|
+
*/
|
|
147
|
+
listClaudeAccountsWithToken(): string[];
|
|
148
|
+
/**
|
|
149
|
+
* Forget the token of one of the owner's other Claude Code accounts.
|
|
150
|
+
*
|
|
151
|
+
* @param account - Account name
|
|
152
|
+
*/
|
|
153
|
+
clearClaudeAccount(account: string): void;
|
|
119
154
|
/**
|
|
120
155
|
* Which Claude credential Crewly holds (never the value).
|
|
121
156
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"harness-credentials.store.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/harness/harness-credentials.store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAQH,mDAAmD;AACnD,MAAM,WAAW,kBAAkB;IAClC,MAAM,CAAC,EAAE;QACR,uFAAuF;QACvF,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,wDAAwD;QACxD,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,SAAS,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,KAAK,CAAC,EAAE;QACP,iFAAiF;QACjF,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,SAAS,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,WAAW,CAAC,EAAE;QACb,2GAA2G;QAC3G,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,SAAS,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;
|
|
1
|
+
{"version":3,"file":"harness-credentials.store.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/harness/harness-credentials.store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAQH,mDAAmD;AACnD,MAAM,WAAW,kBAAkB;IAClC,MAAM,CAAC,EAAE;QACR,uFAAuF;QACvF,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,wDAAwD;QACxD,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,SAAS,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,KAAK,CAAC,EAAE;QACP,iFAAiF;QACjF,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,SAAS,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,WAAW,CAAC,EAAE;QACb,2GAA2G;QAC3G,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,SAAS,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IACF;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC7E;AAED,gDAAgD;AAChD,MAAM,MAAM,sBAAsB,GAAG,aAAa,GAAG,SAAS,GAAG,IAAI,CAAC;AAYtE;;;;;GAKG;AACH,qBAAa,uBAAuB;IAKvB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;IAJtC;;;OAGG;gBAC0B,QAAQ,CAAC,EAAE,MAAM,YAAA;IAE9C;;;;OAIG;IACH,WAAW,IAAI,MAAM;IAIrB;;;;OAIG;IACH,IAAI,IAAI,kBAAkB;IAS1B;;;;;;;;OAQG;IACH,KAAK,CAAC,WAAW,EAAE,kBAAkB,GAAG,IAAI;IAe5C;;;;;;OAMG;IACH,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAMxC;;;;;OAKG;IACH,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAMrC;;;;;OAKG;IACH,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAMlC;;;;;OAKG;IACH,0BAA0B,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAM7C;;;;OAIG;IACH,0BAA0B,IAAI,MAAM,GAAG,IAAI;IAK3C;;OAEG;IACH,gBAAgB,IAAI,IAAI;IAQxB;;OAEG;IACH,WAAW,IAAI,IAAI;IAQnB;;;;;;OAMG;IACH,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAS3D;;;;;OAKG;IACH,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAKrD;;;;OAIG;IACH,2BAA2B,IAAI,MAAM,EAAE;IAKvC;;;;OAIG;IACH,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAQzC;;;;OAIG;IACH,uBAAuB,IAAI,sBAAsB;IAOjD;;;;;;;;;;;;;;;;;OAiBG;IACH,mBAAmB,CAAC,OAAO,GAAE,MAAM,CAAC,UAAwB,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;CAgB3G;AAKD;;;;GAIG;AACH,wBAAgB,0BAA0B,IAAI,uBAAuB,CAEpE;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,GAAE,MAAM,CAAC,UAAwB,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAM1H"}
|
|
@@ -171,6 +171,54 @@ export class HarnessCredentialsStore {
|
|
|
171
171
|
delete next.claude;
|
|
172
172
|
this.write(next);
|
|
173
173
|
}
|
|
174
|
+
/**
|
|
175
|
+
* Store the `setup-token` token of one of the owner's other Claude Code accounts.
|
|
176
|
+
*
|
|
177
|
+
* @param account - Account name (validated by the caller)
|
|
178
|
+
* @param token - Token printed by `claude setup-token`
|
|
179
|
+
* @throws Error when the token is empty
|
|
180
|
+
*/
|
|
181
|
+
setClaudeAccountToken(account, token) {
|
|
182
|
+
if (!isNonEmptyString(token))
|
|
183
|
+
throw new Error('Claude OAuth token is empty');
|
|
184
|
+
const current = this.read();
|
|
185
|
+
this.write({
|
|
186
|
+
...current,
|
|
187
|
+
claudeAccounts: { ...(current.claudeAccounts ?? {}), [account]: { oauthToken: token.trim(), updatedAt: new Date().toISOString() } },
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* The stored token of one of the owner's other Claude Code accounts.
|
|
192
|
+
*
|
|
193
|
+
* @param account - Account name
|
|
194
|
+
* @returns The token, or null when none is stored
|
|
195
|
+
*/
|
|
196
|
+
getClaudeAccountToken(account) {
|
|
197
|
+
const token = this.read().claudeAccounts?.[account]?.oauthToken;
|
|
198
|
+
return isNonEmptyString(token) ? token : null;
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Account names with a stored token.
|
|
202
|
+
*
|
|
203
|
+
* @returns Names
|
|
204
|
+
*/
|
|
205
|
+
listClaudeAccountsWithToken() {
|
|
206
|
+
const accounts = this.read().claudeAccounts ?? {};
|
|
207
|
+
return Object.keys(accounts).filter((name) => isNonEmptyString(accounts[name]?.oauthToken));
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Forget the token of one of the owner's other Claude Code accounts.
|
|
211
|
+
*
|
|
212
|
+
* @param account - Account name
|
|
213
|
+
*/
|
|
214
|
+
clearClaudeAccount(account) {
|
|
215
|
+
const current = this.read();
|
|
216
|
+
if (!current.claudeAccounts?.[account])
|
|
217
|
+
return;
|
|
218
|
+
const accounts = { ...current.claudeAccounts };
|
|
219
|
+
delete accounts[account];
|
|
220
|
+
this.write({ ...current, claudeAccounts: accounts });
|
|
221
|
+
}
|
|
174
222
|
/**
|
|
175
223
|
* Which Claude credential Crewly holds (never the value).
|
|
176
224
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"harness-credentials.store.js","sourceRoot":"","sources":["../../../../../../backend/src/services/harness/harness-credentials.store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAC7F,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"harness-credentials.store.js","sourceRoot":"","sources":["../../../../../../backend/src/services/harness/harness-credentials.store.ts"],"names":[],"mappings":"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"}
|