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
|
@@ -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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"}
|
|
@@ -43,6 +43,12 @@
|
|
|
43
43
|
* 「重新登录 claude」 / "relogin codex" / the orchestrator's `harness-login`
|
|
44
44
|
* skill) start the broker at once, even while logged in (account switch).
|
|
45
45
|
*
|
|
46
|
+
* `login claude <name>` signs in one of the owner's OTHER Claude Code
|
|
47
|
+
* accounts (issue #942, claude-accounts.ts): the same link-and-code flow,
|
|
48
|
+
* run with that account's config dir; the token is kept for that account
|
|
49
|
+
* only, no agent is restarted, and the runtime fallback is told the account
|
|
50
|
+
* is usable ({@link HarnessReloginService.setAccountLoginHandler}).
|
|
51
|
+
*
|
|
46
52
|
* Secrets: Claude's code is passed to the broker and never stored, logged
|
|
47
53
|
* or echoed; DMs are built from {@link LoginSession} snapshots, which never
|
|
48
54
|
* contain a token, and the screen text is redacted again.
|
|
@@ -110,13 +116,17 @@ export interface OwnerLoginOptions {
|
|
|
110
116
|
/** Conversation to answer in (null = this machine's DM with the owner) */
|
|
111
117
|
replyTarget?: ReloginReplyTarget | null;
|
|
112
118
|
/** Who relayed the request, for logs */
|
|
113
|
-
requestedBy: 'owner_dm' | 'orchestrator';
|
|
119
|
+
requestedBy: 'owner_dm' | 'orchestrator' | 'dashboard';
|
|
120
|
+
/** One of the owner's other Claude Code accounts to sign in (issue #942); absent = the default login */
|
|
121
|
+
account?: string;
|
|
114
122
|
}
|
|
115
123
|
/** An owner-requested login that was started. */
|
|
116
124
|
export interface OwnerLoginStarted {
|
|
117
125
|
/** `restarted`: a flow for the harness was running and was started over */
|
|
118
126
|
status: 'started' | 'restarted';
|
|
119
127
|
harnessId: HarnessId;
|
|
128
|
+
/** The other Claude Code account being signed in, when it is one */
|
|
129
|
+
account?: string;
|
|
120
130
|
/** Whether the owner can be DM'd right now (false = Slack is down) */
|
|
121
131
|
dmAvailable: boolean;
|
|
122
132
|
}
|
|
@@ -183,6 +193,10 @@ export interface HarnessReloginDeps {
|
|
|
183
193
|
* waited for them (owner-message watchdog). Returns how many messages.
|
|
184
194
|
*/
|
|
185
195
|
onLoginRestored?: (harnessId: HarnessId, resumed: readonly string[]) => Promise<number> | number;
|
|
196
|
+
/** After one of the owner's other Claude Code accounts was signed in (the runtime fallback) */
|
|
197
|
+
onAccountLogin?: (account: string) => Promise<void> | void;
|
|
198
|
+
/** The owner's existing other Claude Code accounts (default: claude-accounts.ts) */
|
|
199
|
+
listClaudeAccounts?: () => string[];
|
|
186
200
|
/** This machine's name, for the owner ("iriss-air.lan") */
|
|
187
201
|
machineName?: () => string;
|
|
188
202
|
/** Persisted notice / backoff state */
|
|
@@ -262,6 +276,8 @@ export interface LoginDmWording {
|
|
|
262
276
|
switchAccount?: boolean;
|
|
263
277
|
/** This machine's name */
|
|
264
278
|
machine?: string;
|
|
279
|
+
/** One of the owner's other Claude Code accounts this login is for */
|
|
280
|
+
account?: string | null;
|
|
265
281
|
}
|
|
266
282
|
/**
|
|
267
283
|
* The first "signed out" DM, a re-reminder, or the note after a link expired unused.
|
|
@@ -329,6 +345,22 @@ export declare function formatOwnerSuccessDm(harnessId: HarnessId, result: {
|
|
|
329
345
|
resumed: string[];
|
|
330
346
|
failed: string[];
|
|
331
347
|
}, redelivered?: number): string;
|
|
348
|
+
/**
|
|
349
|
+
* DM after one of the owner's other Claude Code accounts was signed in.
|
|
350
|
+
*
|
|
351
|
+
* @param account - Account name
|
|
352
|
+
* @param machine - This machine's name
|
|
353
|
+
* @returns Slack mrkdwn text
|
|
354
|
+
*/
|
|
355
|
+
export declare function formatAccountSuccessDm(account: string, machine: string): string;
|
|
356
|
+
/**
|
|
357
|
+
* DM after the link for one of the owner's other Claude Code accounts expired unused.
|
|
358
|
+
*
|
|
359
|
+
* @param account - Account name
|
|
360
|
+
* @param machine - This machine's name
|
|
361
|
+
* @returns Slack mrkdwn text
|
|
362
|
+
*/
|
|
363
|
+
export declare function formatAccountLinkExpiredDm(account: string, machine: string): string;
|
|
332
364
|
/**
|
|
333
365
|
* Reply to a login request that named no harness Crewly can log in.
|
|
334
366
|
*
|
|
@@ -371,12 +403,15 @@ export declare class HarnessReloginService {
|
|
|
371
403
|
private listAgents;
|
|
372
404
|
private sessionNeedsLogin;
|
|
373
405
|
private onLoginRestored;
|
|
406
|
+
private onAccountLogin;
|
|
407
|
+
private readonly listClaudeAccounts;
|
|
374
408
|
private readonly machineName;
|
|
375
409
|
private readonly state;
|
|
376
410
|
private notifier;
|
|
377
411
|
private resumer;
|
|
378
412
|
private readonly now;
|
|
379
413
|
private readonly logger;
|
|
414
|
+
/** Flows by {@link flowKey} (harness, or harness@account) */
|
|
380
415
|
private readonly flows;
|
|
381
416
|
/** Harnesses whose expiry is being confirmed → sessions reported meanwhile */
|
|
382
417
|
private readonly confirming;
|
|
@@ -419,6 +454,12 @@ export declare class HarnessReloginService {
|
|
|
419
454
|
* @param handler - Handler, or null
|
|
420
455
|
*/
|
|
421
456
|
setLoginRestoredHandler(handler: HarnessReloginDeps['onLoginRestored'] | null): void;
|
|
457
|
+
/**
|
|
458
|
+
* Set what learns that one of the owner's other Claude Code accounts was signed in.
|
|
459
|
+
*
|
|
460
|
+
* @param handler - Handler (the runtime fallback), or null
|
|
461
|
+
*/
|
|
462
|
+
setAccountLoginHandler(handler: HarnessReloginDeps['onAccountLogin'] | null): void;
|
|
422
463
|
/**
|
|
423
464
|
* Set how the configured agents (running or not) are listed.
|
|
424
465
|
*
|
|
@@ -459,6 +500,12 @@ export declare class HarnessReloginService {
|
|
|
459
500
|
* @returns True when consumed; the caller must then NOT pass it on as a chat message
|
|
460
501
|
*/
|
|
461
502
|
handleOwnerReply(text: string, target?: ReloginReplyTarget | null, scope?: OwnerReplyScope): boolean;
|
|
503
|
+
/**
|
|
504
|
+
* The owner's existing other Claude Code accounts (for "login claude work").
|
|
505
|
+
*
|
|
506
|
+
* @returns Names; empty when they cannot be read
|
|
507
|
+
*/
|
|
508
|
+
private knownClaudeAccounts;
|
|
462
509
|
/**
|
|
463
510
|
* Start a login the owner asked for, through the broker: forced (runs
|
|
464
511
|
* even when the harness is still logged in — the owner may be switching
|
|
@@ -654,6 +701,28 @@ export declare class HarnessReloginService {
|
|
|
654
701
|
* @param notify - DM the owner (false for the silent API-key path)
|
|
655
702
|
*/
|
|
656
703
|
private succeed;
|
|
704
|
+
/**
|
|
705
|
+
* One of the owner's other Claude Code accounts is signed in: no agent is
|
|
706
|
+
* restarted (none runs on it until the fallback moves one there); the
|
|
707
|
+
* runtime fallback is told, and the owner gets one line.
|
|
708
|
+
*
|
|
709
|
+
* @param flow - The account's flow
|
|
710
|
+
* @param account - Account name
|
|
711
|
+
*/
|
|
712
|
+
private succeedAccount;
|
|
713
|
+
/**
|
|
714
|
+
* Tell the runtime fallback that an account was signed in.
|
|
715
|
+
*
|
|
716
|
+
* @param account - Account name
|
|
717
|
+
*/
|
|
718
|
+
private tellAccountLogin;
|
|
719
|
+
/**
|
|
720
|
+
* A flow's key in the map.
|
|
721
|
+
*
|
|
722
|
+
* @param flow - The flow
|
|
723
|
+
* @returns {@link flowKey} of its harness and account
|
|
724
|
+
*/
|
|
725
|
+
private keyOf;
|
|
657
726
|
/**
|
|
658
727
|
* Sessions to restart after a login: the ones whose output matched plus
|
|
659
728
|
* every live session of the harness (they all hold the dead login).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"harness-relogin.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/harness/harness-relogin.service.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"harness-relogin.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/harness/harness-relogin.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwDG;AAMH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACzE,OAAO,EAA8B,KAAK,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAI1G,OAAO,EAIN,KAAK,SAAS,EACd,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAuB,KAAK,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAGzF,OAAO,EAA2D,KAAK,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE3H,wCAAwC;AACxC,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAE1D,+BAA+B;AAC/B,MAAM,WAAW,YAAY;IAC5B,SAAS,EAAE,SAAS,CAAC;IACrB,8EAA8E;IAC9E,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B;;;OAGG;IACH,MAAM,EAAE,YAAY,CAAC;CACrB;AAED;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;GAGG;AACH,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG,kBAAkB,CAAC;AAE3D,qCAAqC;AACrC,MAAM,WAAW,oBAAoB;IACpC;;;;;;OAMG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,kBAAkB,GAAG,IAAI,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IACxF;;;;OAIG;IACH,WAAW,CAAC,IAAI,OAAO,CAAC;CACxB;AAED,2BAA2B;AAC3B,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,OAAO,CAAC;AAEhD,0FAA0F;AAC1F,MAAM,MAAM,eAAe,GAAG,KAAK,GAAG,OAAO,CAAC;AAE9C,2CAA2C;AAC3C,MAAM,WAAW,iBAAiB;IACjC,qEAAqE;IACrE,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,0EAA0E;IAC1E,WAAW,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAAC;IACxC,wCAAwC;IACxC,WAAW,EAAE,UAAU,GAAG,cAAc,GAAG,WAAW,CAAC;IACvD,wGAAwG;IACxG,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,iDAAiD;AACjD,MAAM,WAAW,iBAAiB;IACjC,2EAA2E;IAC3E,MAAM,EAAE,SAAS,GAAG,WAAW,CAAC;IAChC,SAAS,EAAE,SAAS,CAAC;IACrB,oEAAoE;IACpE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sEAAsE;IACtE,WAAW,EAAE,OAAO,CAAC;CACrB;AAED,mEAAmE;AACnE,MAAM,WAAW,qBAAqB;IACrC,oFAAoF;IACpF,MAAM,EAAE,iBAAiB,CAAC;IAC1B,SAAS,EAAE,SAAS,CAAC;IACrB,6BAA6B;IAC7B,OAAO,EAAE,MAAM,CAAC;CAChB;AAED,+DAA+D;AAC/D,MAAM,MAAM,gBAAgB,GAAG,iBAAiB,GAAG,qBAAqB,CAAC;AAEzE,+CAA+C;AAC/C,MAAM,WAAW,mBAAmB;IACnC;;;;;OAKG;IACH,YAAY,CAAC,SAAS,EAAE,SAAS,GAAG,MAAM,EAAE,CAAC;IAC7C;;;;;OAKG;IACH,MAAM,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,EAAE,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;CAC1F;AAED,4DAA4D;AAC5D,MAAM,WAAW,eAAe;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,sEAAsE;IACtE,SAAS,EAAE,MAAM,CAAC;IAClB,oCAAoC;IACpC,WAAW,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,0DAA0D;AAC1D,MAAM,MAAM,aAAa,GAAG,IAAI,CAAC,kBAAkB,EAAE,OAAO,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,IAAI,CAAC,CAAC;AAElG,+BAA+B;AAC/B,MAAM,WAAW,kBAAkB;IAClC,MAAM,EAAE,aAAa,CAAC;IACtB,WAAW,EAAE,IAAI,CAAC,uBAAuB,EAAE,MAAM,GAAG,yBAAyB,CAAC,CAAC;IAC/E,OAAO,EAAE,IAAI,CAAC,oBAAoB,EAAE,QAAQ,CAAC,CAAC;IAC9C,mHAAmH;IACnH,eAAe,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;IAC/D;;;OAGG;IACH,WAAW,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;IAC5D,kEAAkE;IAClE,aAAa,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC5C,4EAA4E;IAC5E,UAAU,CAAC,EAAE,MAAM,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;IAC9C,uFAAuF;IACvF,iBAAiB,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC;IACrD;;;OAGG;IACH,eAAe,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,MAAM,EAAE,KAAK,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;IACjG,+FAA+F;IAC/F,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC3D,oFAAoF;IACpF,kBAAkB,CAAC,EAAE,MAAM,MAAM,EAAE,CAAC;IACpC,2DAA2D;IAC3D,WAAW,CAAC,EAAE,MAAM,MAAM,CAAC;IAC3B,uCAAuC;IACvC,KAAK,CAAC,EAAE,iBAAiB,CAAC;IAC1B,QAAQ,CAAC,EAAE,oBAAoB,GAAG,IAAI,CAAC;IACvC,OAAO,CAAC,EAAE,mBAAmB,GAAG,IAAI,CAAC;IACrC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,aAAa,CAAC;CACvB;AAiFD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,SAAS,GAAG,MAAM,CAK/D;AAmBD;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAGpD;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAMpD;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAGvD;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAKvE;AA2BD;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,0BAA2B,CAAC;AAE9D;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAMnE;AAED,0CAA0C;AAC1C,MAAM,WAAW,cAAc;IAC9B,gGAAgG;IAChG,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,8CAA8C;IAC9C,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,0BAA0B;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sEAAsE;IACtE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAeD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,iBAAiB,CAChC,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,SAAS,MAAM,EAAE,EACzB,IAAI,GAAE,QAAQ,GAAG,UAAU,GAAG,cAAyB,GACrD,MAAM,CAUR;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,YAAY,EAAE,QAAQ,GAAE,SAAS,MAAM,EAAO,EAAE,OAAO,GAAE,cAAmB,GAAG,MAAM,CAa1H;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,YAAY,EAAE,QAAQ,GAAE,SAAS,MAAM,EAAO,EAAE,OAAO,GAAE,cAAmB,GAAG,MAAM,CAW5H;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM,CAI9D;AAaD;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAC9B,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE;IAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,EAC/C,WAAW,GAAE,MAAU,EACvB,OAAO,CAAC,EAAE,MAAM,GACd,MAAM,CAKR;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE;IAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,EAAE,WAAW,GAAE,MAAU,GAAG,MAAM,CAK3I;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAK/E;AAED;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAEnF;AAKD;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAEhE;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,SAAS,GAAG,MAAM,CASlE;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAInF;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,MAAM,EAAE,EAAE,OAAO,GAAE,MAAsB,GAAG,MAAM,CAE1H;AAED,mDAAmD;AACnD,qBAAa,qBAAqB;IACjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgB;IACvC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAoC;IAChE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAgC;IACxD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAwC;IACxE,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA2C;IACvE,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAsC;IACpE,OAAO,CAAC,UAAU,CAA0C;IAC5D,OAAO,CAAC,iBAAiB,CAAiD;IAC1E,OAAO,CAAC,eAAe,CAA+C;IACtE,OAAO,CAAC,cAAc,CAA8C;IACpE,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAiB;IACpD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAe;IAC3C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAoB;IAC1C,OAAO,CAAC,QAAQ,CAA8B;IAC9C,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAe;IACnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgB;IACvC,6DAA6D;IAC7D,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAkC;IACxD,8EAA8E;IAC9E,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAqC;IAChE,oDAAoD;IACpD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAwB;IAClD,oFAAoF;IACpF,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAgC;IAC3D,+CAA+C;IAC/C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAgC;IAC5D,yGAAyG;IACzG,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAqB;IAClD,oCAAoC;IACpC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA2D;IACtF,mCAAmC;IACnC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA6C;IAC3E,0EAA0E;IAC1E,OAAO,CAAC,MAAM,CAAyB;IACvC,OAAO,CAAC,WAAW,CAA+B;IAClD,OAAO,CAAC,eAAe,CAA+B;IACtD,OAAO,CAAC,mBAAmB,CAAS;IAEpC;;OAEG;gBACS,IAAI,EAAE,kBAAkB;IAsBpC;;;;OAIG;IACH,WAAW,CAAC,QAAQ,EAAE,oBAAoB,GAAG,IAAI,GAAG,IAAI;IAIxD;;;;OAIG;IACH,UAAU,CAAC,OAAO,EAAE,mBAAmB,GAAG,IAAI,GAAG,IAAI;IAIrD;;;;OAIG;IACH,uBAAuB,CAAC,OAAO,EAAE,kBAAkB,CAAC,iBAAiB,CAAC,GAAG,IAAI,GAAG,IAAI;IAIpF;;;;OAIG;IACH,sBAAsB,CAAC,OAAO,EAAE,kBAAkB,CAAC,gBAAgB,CAAC,GAAG,IAAI,GAAG,IAAI;IAIlF;;;;OAIG;IACH,cAAc,CAAC,MAAM,EAAE,kBAAkB,CAAC,YAAY,CAAC,GAAG,IAAI,GAAG,IAAI;IAIrE;;;;OAIG;IACH,oBAAoB,CAAC,MAAM,EAAE,kBAAkB,CAAC,mBAAmB,CAAC,GAAG,IAAI,GAAG,IAAI;IAIlF;;;;;;;OAOG;IACH,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO;IAqC3C;;;;;;;;;;;;;;;;;OAiBG;IACH,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,GAAE,kBAAkB,GAAG,IAAW,EAAE,KAAK,GAAE,eAAuB,GAAG,OAAO;IAqBjH;;;;OAIG;IACH,OAAO,CAAC,mBAAmB;IAQ3B;;;;;;;;;OASG;IACH,eAAe,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,iBAAiB,GAAG,gBAAgB;IA4BnF;;;;;OAKG;IACH,WAAW,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO;IAI1C;;;;;;OAMG;IACH,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAKzD;;;;;OAKG;YACW,uBAAuB;IAcrC;;;;;;;OAOG;IACH,OAAO,CAAC,gBAAgB;IAmDxB;;;;;OAKG;IACH,UAAU,CAAC,SAAS,EAAE,SAAS,GAAG,cAAc,GAAG,IAAI;IAMvD;;;;;;;;;OASG;IACG,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IA6BrC;;;;OAIG;IACG,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IAItC;;;;;OAKG;YACW,QAAQ;IAiBtB;;;;;;OAMG;IACH,KAAK,CAAC,UAAU,GAAE,MAA2D,EAAE,YAAY,GAAE,MAAe,GAAG,IAAI;IAQnH,8DAA8D;IAC9D,IAAI,IAAI,IAAI;IAQZ;;;;OAIG;YACW,aAAa;IA4C3B;;;;;;;OAOG;YACW,YAAY;IAO1B;;;;;;OAMG;YACW,KAAK;IAsBnB;;;;;;OAMG;YACW,WAAW;IAoBzB;;;;;OAKG;IACH,OAAO,CAAC,SAAS;IASjB;;;;;OAKG;YACW,mBAAmB;IAcjC;;;;;;OAMG;IACH,OAAO,CAAC,eAAe;IAevB;;;;;;;;OAQG;IACH,OAAO,CAAC,OAAO;IAwBf;;;;OAIG;IACH,OAAO,CAAC,kBAAkB;IAuB1B;;;;;;;OAOG;YACW,eAAe;IA4B7B;;;;OAIG;IACH,OAAO,CAAC,YAAY;IAsBpB;;;;OAIG;IACH,OAAO,CAAC,cAAc;IAkDtB;;;;;;OAMG;YACW,iBAAiB;IAoB/B;;;;OAIG;YACW,iBAAiB;IAqB/B;;;;;;OAMG;YACW,OAAO;IAyCrB;;;;;;;OAOG;YACW,cAAc;IAO5B;;;;OAIG;YACW,gBAAgB;IAS9B;;;;;OAKG;IACH,OAAO,CAAC,KAAK;IAIb;;;;;;OAMG;IACH,OAAO,CAAC,iBAAiB;IAWzB;;;;;;OAMG;IACH,OAAO,CAAC,YAAY;IAOpB;;;;OAIG;YACW,aAAa;IAU3B;;;;;OAKG;IACH,OAAO,CAAC,gBAAgB;IAOxB;;;;OAIG;IACH,OAAO,CAAC,aAAa;IAIrB;;;;OAIG;IACH,OAAO,CAAC,gBAAgB;IAOxB;;;;;OAKG;IACH,OAAO,CAAC,SAAS;IAIjB;;;;;OAKG;IACH,OAAO,CAAC,gBAAgB;IAUxB;;;;OAIG;YACW,wBAAwB;IAWtC;;;;;;;OAOG;YACW,EAAE;IAOhB;;;;;;;OAOG;YACW,MAAM;IAkBpB;;;;;OAKG;IACH,OAAO,CAAC,WAAW;IAQnB;;;;OAIG;IACH,OAAO,CAAC,gBAAgB;CAIxB;AAKD;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,IAAI,qBAAqB,CAuBhE;AAED;;;;GAIG;AACH,wBAAgB,kCAAkC,CAAC,OAAO,EAAE,qBAAqB,GAAG,IAAI,GAAG,IAAI,CAG9F"}
|
|
@@ -43,6 +43,12 @@
|
|
|
43
43
|
* 「重新登录 claude」 / "relogin codex" / the orchestrator's `harness-login`
|
|
44
44
|
* skill) start the broker at once, even while logged in (account switch).
|
|
45
45
|
*
|
|
46
|
+
* `login claude <name>` signs in one of the owner's OTHER Claude Code
|
|
47
|
+
* accounts (issue #942, claude-accounts.ts): the same link-and-code flow,
|
|
48
|
+
* run with that account's config dir; the token is kept for that account
|
|
49
|
+
* only, no agent is restarted, and the runtime fallback is told the account
|
|
50
|
+
* is usable ({@link HarnessReloginService.setAccountLoginHandler}).
|
|
51
|
+
*
|
|
46
52
|
* Secrets: Claude's code is passed to the broker and never stored, logged
|
|
47
53
|
* or echoed; DMs are built from {@link LoginSession} snapshots, which never
|
|
48
54
|
* contain a token, and the screen text is redacted again.
|
|
@@ -51,6 +57,7 @@
|
|
|
51
57
|
*/
|
|
52
58
|
import * as os from 'os';
|
|
53
59
|
import { HARNESS_CONSTANTS } from '../../constants.js';
|
|
60
|
+
import { listClaudeAccounts } from './claude-accounts.js';
|
|
54
61
|
import { LoggerService } from '../core/logger.service.js';
|
|
55
62
|
import { getHarnessCredentialsStore } from './harness-credentials.store.js';
|
|
56
63
|
import { createHarnessLoginProbe } from './harness-login-probe.js';
|
|
@@ -61,6 +68,17 @@ import { LOGIN_BROKER_EVENTS } from './login-broker.service.js';
|
|
|
61
68
|
import { redactSecrets } from './login-rules.js';
|
|
62
69
|
import { parseOwnerLoginRequest } from './owner-login-request.js';
|
|
63
70
|
import { MemoryReloginStateStore, createDefaultReloginStateStore } from './relogin-state.store.js';
|
|
71
|
+
/**
|
|
72
|
+
* Key of a flow in the coordinator's map: the harness id, or
|
|
73
|
+
* `harness@account` for one of the owner's other Claude Code accounts.
|
|
74
|
+
*
|
|
75
|
+
* @param harnessId - Harness
|
|
76
|
+
* @param account - Account, or null/undefined for the default login
|
|
77
|
+
* @returns Key
|
|
78
|
+
*/
|
|
79
|
+
function flowKey(harnessId, account) {
|
|
80
|
+
return account ? `${harnessId}${HARNESS_CONSTANTS.CLAUDE.ACCOUNTS.TARGET_SEPARATOR}${account}` : harnessId;
|
|
81
|
+
}
|
|
64
82
|
/** A detected expiry: not forced, standard wording, this machine's DM. */
|
|
65
83
|
const EXPIRY_FLOW = { trigger: 'expiry', switchAccount: false, replyTarget: null };
|
|
66
84
|
/** Harnesses the coordinator can log in (they have a broker method). */
|
|
@@ -218,7 +236,7 @@ export function stripScreenReplyPrefix(reply) {
|
|
|
218
236
|
* @returns Slack mrkdwn line
|
|
219
237
|
*/
|
|
220
238
|
function loginDmHeader(harnessId, wording) {
|
|
221
|
-
const name = displayName(harnessId);
|
|
239
|
+
const name = wording.account ? `${displayName(harnessId)} account \`${wording.account}\`` : displayName(harnessId);
|
|
222
240
|
const where = wording.machine ? ` on ${wording.machine}` : '';
|
|
223
241
|
return wording.switchAccount ? `*Switch the ${name} account${where}*` : `*Sign in to ${name}${where}*`;
|
|
224
242
|
}
|
|
@@ -348,6 +366,27 @@ export function formatOwnerSuccessDm(harnessId, result, redelivered = 0) {
|
|
|
348
366
|
text += ` Could not restart: ${result.failed.join(', ')}.`;
|
|
349
367
|
return text;
|
|
350
368
|
}
|
|
369
|
+
/**
|
|
370
|
+
* DM after one of the owner's other Claude Code accounts was signed in.
|
|
371
|
+
*
|
|
372
|
+
* @param account - Account name
|
|
373
|
+
* @param machine - This machine's name
|
|
374
|
+
* @returns Slack mrkdwn text
|
|
375
|
+
*/
|
|
376
|
+
export function formatAccountSuccessDm(account, machine) {
|
|
377
|
+
return (`Done: Claude Code account \`${account}\` is signed in on ${machine}. ` +
|
|
378
|
+
`Agents use it when an earlier runtime in their fallback order runs out (add \`claude-code@${account}\` in Settings → Runtimes if it is not there yet).`);
|
|
379
|
+
}
|
|
380
|
+
/**
|
|
381
|
+
* DM after the link for one of the owner's other Claude Code accounts expired unused.
|
|
382
|
+
*
|
|
383
|
+
* @param account - Account name
|
|
384
|
+
* @param machine - This machine's name
|
|
385
|
+
* @returns Slack mrkdwn text
|
|
386
|
+
*/
|
|
387
|
+
export function formatAccountLinkExpiredDm(account, machine) {
|
|
388
|
+
return `The sign-in link for Claude Code account \`${account}\` on ${machine} expired before it was used. Reply \`login claude ${account}\` for a fresh one.`;
|
|
389
|
+
}
|
|
351
390
|
/** Harness names the owner can type, for the "which one?" reply. */
|
|
352
391
|
const WHICH_HARNESS_HINT = 'Reply `relogin claude` or `relogin codex` (to switch accounts: `switch claude account`).';
|
|
353
392
|
/**
|
|
@@ -409,12 +448,15 @@ export class HarnessReloginService {
|
|
|
409
448
|
listAgents;
|
|
410
449
|
sessionNeedsLogin;
|
|
411
450
|
onLoginRestored;
|
|
451
|
+
onAccountLogin;
|
|
452
|
+
listClaudeAccounts;
|
|
412
453
|
machineName;
|
|
413
454
|
state;
|
|
414
455
|
notifier;
|
|
415
456
|
resumer;
|
|
416
457
|
now;
|
|
417
458
|
logger;
|
|
459
|
+
/** Flows by {@link flowKey} (harness, or harness@account) */
|
|
418
460
|
flows = new Map();
|
|
419
461
|
/** Harnesses whose expiry is being confirmed → sessions reported meanwhile */
|
|
420
462
|
confirming = new Map();
|
|
@@ -448,6 +490,8 @@ export class HarnessReloginService {
|
|
|
448
490
|
this.listAgents = deps.listAgents ?? null;
|
|
449
491
|
this.sessionNeedsLogin = deps.sessionNeedsLogin ?? null;
|
|
450
492
|
this.onLoginRestored = deps.onLoginRestored ?? null;
|
|
493
|
+
this.onAccountLogin = deps.onAccountLogin ?? null;
|
|
494
|
+
this.listClaudeAccounts = deps.listClaudeAccounts ?? (() => listClaudeAccounts());
|
|
451
495
|
this.machineName = deps.machineName ?? (() => os.hostname());
|
|
452
496
|
this.state = deps.state ?? new MemoryReloginStateStore();
|
|
453
497
|
this.notifier = deps.notifier ?? null;
|
|
@@ -481,6 +525,14 @@ export class HarnessReloginService {
|
|
|
481
525
|
setLoginRestoredHandler(handler) {
|
|
482
526
|
this.onLoginRestored = handler ?? null;
|
|
483
527
|
}
|
|
528
|
+
/**
|
|
529
|
+
* Set what learns that one of the owner's other Claude Code accounts was signed in.
|
|
530
|
+
*
|
|
531
|
+
* @param handler - Handler (the runtime fallback), or null
|
|
532
|
+
*/
|
|
533
|
+
setAccountLoginHandler(handler) {
|
|
534
|
+
this.onAccountLogin = handler ?? null;
|
|
535
|
+
}
|
|
484
536
|
/**
|
|
485
537
|
* Set how the configured agents (running or not) are listed.
|
|
486
538
|
*
|
|
@@ -577,7 +629,7 @@ export class HarnessReloginService {
|
|
|
577
629
|
return true;
|
|
578
630
|
}
|
|
579
631
|
}
|
|
580
|
-
const request = parseOwnerLoginRequest(text);
|
|
632
|
+
const request = parseOwnerLoginRequest(text, { knownClaudeAccounts: this.knownClaudeAccounts() });
|
|
581
633
|
if (!request)
|
|
582
634
|
return false;
|
|
583
635
|
if (scope === 'agent' && request.kind !== 'harness')
|
|
@@ -585,6 +637,19 @@ export class HarnessReloginService {
|
|
|
585
637
|
void this.handleOwnerLoginRequest(request, target);
|
|
586
638
|
return true;
|
|
587
639
|
}
|
|
640
|
+
/**
|
|
641
|
+
* The owner's existing other Claude Code accounts (for "login claude work").
|
|
642
|
+
*
|
|
643
|
+
* @returns Names; empty when they cannot be read
|
|
644
|
+
*/
|
|
645
|
+
knownClaudeAccounts() {
|
|
646
|
+
try {
|
|
647
|
+
return this.listClaudeAccounts();
|
|
648
|
+
}
|
|
649
|
+
catch {
|
|
650
|
+
return [];
|
|
651
|
+
}
|
|
652
|
+
}
|
|
588
653
|
/**
|
|
589
654
|
* Start a login the owner asked for, through the broker: forced (runs
|
|
590
655
|
* even when the harness is still logged in — the owner may be switching
|
|
@@ -599,10 +664,15 @@ export class HarnessReloginService {
|
|
|
599
664
|
if (!hasBrokerLogin(harnessId)) {
|
|
600
665
|
return { status: 'no_broker_login', harnessId, message: formatNoBrokerLoginDm(harnessId) };
|
|
601
666
|
}
|
|
602
|
-
const
|
|
667
|
+
const account = options.account ?? null;
|
|
668
|
+
if (account && harnessId !== HARNESS_CONSTANTS.IDS.CLAUDE_CODE) {
|
|
669
|
+
return { status: 'no_broker_login', harnessId, message: `Only Claude Code can have more than one account in Crewly. ${WHICH_HARNESS_HINT}` };
|
|
670
|
+
}
|
|
671
|
+
const existing = this.flows.get(flowKey(harnessId, account));
|
|
603
672
|
const restarted = Boolean(existing && existing.phase === 'running');
|
|
604
673
|
this.logger.info('Owner-requested login started', {
|
|
605
674
|
harnessId,
|
|
675
|
+
...(account ? { account } : {}),
|
|
606
676
|
requestedBy: options.requestedBy,
|
|
607
677
|
switchAccount: options.switchAccount === true,
|
|
608
678
|
restarted,
|
|
@@ -612,9 +682,10 @@ export class HarnessReloginService {
|
|
|
612
682
|
trigger: 'owner',
|
|
613
683
|
switchAccount: options.switchAccount === true,
|
|
614
684
|
replyTarget: options.replyTarget ?? existing?.replyTarget ?? null,
|
|
685
|
+
account,
|
|
615
686
|
});
|
|
616
687
|
const dmAvailable = this.notifier ? (this.notifier.isAvailable?.() ?? true) : false;
|
|
617
|
-
return { status: restarted ? 'restarted' : 'started', harnessId, dmAvailable };
|
|
688
|
+
return { status: restarted ? 'restarted' : 'started', harnessId, ...(account ? { account } : {}), dmAvailable };
|
|
618
689
|
}
|
|
619
690
|
/**
|
|
620
691
|
* Harnesses confirmed signed out on this machine (persisted).
|
|
@@ -647,7 +718,12 @@ export class HarnessReloginService {
|
|
|
647
718
|
await this.notify(formatWhichHarnessDm(request.name), target);
|
|
648
719
|
return;
|
|
649
720
|
}
|
|
650
|
-
const result = this.startOwnerLogin(request.harnessId, {
|
|
721
|
+
const result = this.startOwnerLogin(request.harnessId, {
|
|
722
|
+
switchAccount: request.switchAccount,
|
|
723
|
+
replyTarget: target,
|
|
724
|
+
requestedBy: 'owner_dm',
|
|
725
|
+
...(request.account ? { account: request.account } : {}),
|
|
726
|
+
});
|
|
651
727
|
if (result.status === 'no_broker_login')
|
|
652
728
|
await this.notify(result.message, target);
|
|
653
729
|
}
|
|
@@ -667,6 +743,7 @@ export class HarnessReloginService {
|
|
|
667
743
|
trigger: flow.trigger,
|
|
668
744
|
switchAccount: flow.switchAccount,
|
|
669
745
|
replyTarget: target ?? flow.replyTarget,
|
|
746
|
+
account: flow.account,
|
|
670
747
|
});
|
|
671
748
|
}
|
|
672
749
|
this.logger.info('Sign-in started on the owner\'s reply', { harnessIds: flows.map((flow) => flow.harnessId) });
|
|
@@ -995,17 +1072,19 @@ export class HarnessReloginService {
|
|
|
995
1072
|
* @param options - Trigger, wording and reply target
|
|
996
1073
|
*/
|
|
997
1074
|
replaceAndStart(harnessId, previous, options) {
|
|
1075
|
+
const key = flowKey(harnessId, options.account);
|
|
998
1076
|
if (previous) {
|
|
999
1077
|
this.clearScreenTimer(previous);
|
|
1000
1078
|
this.cancelOwnSession(previous);
|
|
1001
|
-
if (this.flows.get(
|
|
1002
|
-
this.flows.delete(
|
|
1079
|
+
if (this.flows.get(this.keyOf(previous)) === previous)
|
|
1080
|
+
this.flows.delete(this.keyOf(previous));
|
|
1003
1081
|
}
|
|
1004
1082
|
// The owner asked: a quiet period after the last login must not swallow it.
|
|
1005
|
-
|
|
1083
|
+
if (!options.account)
|
|
1084
|
+
this.quietUntil.delete(harnessId);
|
|
1006
1085
|
const flow = this.newFlow(harnessId, new Set(previous?.stuck ?? []), options, 'running');
|
|
1007
1086
|
flow.remind = previous?.remind ?? false;
|
|
1008
|
-
this.flows.set(
|
|
1087
|
+
this.flows.set(key, flow);
|
|
1009
1088
|
this.startBrokerSession(flow);
|
|
1010
1089
|
}
|
|
1011
1090
|
/**
|
|
@@ -1020,6 +1099,7 @@ export class HarnessReloginService {
|
|
|
1020
1099
|
newFlow(harnessId, stuck, options, phase) {
|
|
1021
1100
|
return {
|
|
1022
1101
|
harnessId,
|
|
1102
|
+
account: options.account ?? null,
|
|
1023
1103
|
phase,
|
|
1024
1104
|
sessionId: null,
|
|
1025
1105
|
startedAt: this.now(),
|
|
@@ -1050,7 +1130,7 @@ export class HarnessReloginService {
|
|
|
1050
1130
|
return;
|
|
1051
1131
|
let session;
|
|
1052
1132
|
try {
|
|
1053
|
-
session = this.broker.start(flow.harnessId, method.id);
|
|
1133
|
+
session = flow.account ? this.broker.start(flow.harnessId, method.id, { account: flow.account }) : this.broker.start(flow.harnessId, method.id);
|
|
1054
1134
|
}
|
|
1055
1135
|
catch (error) {
|
|
1056
1136
|
const reason = error instanceof Error ? error.message : String(error);
|
|
@@ -1117,7 +1197,7 @@ export class HarnessReloginService {
|
|
|
1117
1197
|
* @param session - Session snapshot
|
|
1118
1198
|
*/
|
|
1119
1199
|
handleUpdate(session) {
|
|
1120
|
-
const flow = this.flows.get(session.harnessId);
|
|
1200
|
+
const flow = this.flows.get(flowKey(session.harnessId, session.account));
|
|
1121
1201
|
if (!flow || flow.phase !== 'running' || flow.sessionId !== session.id || isTerminalLoginState(session.state))
|
|
1122
1202
|
return;
|
|
1123
1203
|
const linkReady = session.method === 'device' ? Boolean(session.url && session.userCode) : Boolean(session.url);
|
|
@@ -1144,7 +1224,13 @@ export class HarnessReloginService {
|
|
|
1144
1224
|
* @param session - Final snapshot
|
|
1145
1225
|
*/
|
|
1146
1226
|
handleFinished(session) {
|
|
1147
|
-
const flow = this.flows.get(session.harnessId);
|
|
1227
|
+
const flow = this.flows.get(flowKey(session.harnessId, session.account));
|
|
1228
|
+
if (!flow && session.account) {
|
|
1229
|
+
// One of the owner's other Claude Code accounts signed in from the dashboard.
|
|
1230
|
+
if (session.state === 'succeeded')
|
|
1231
|
+
void this.tellAccountLogin(session.account);
|
|
1232
|
+
return;
|
|
1233
|
+
}
|
|
1148
1234
|
if (!flow) {
|
|
1149
1235
|
// Signed in from the dashboard / Setup with no flow here: the agents
|
|
1150
1236
|
// parked on a sign-in screen still hold the dead login.
|
|
@@ -1172,7 +1258,8 @@ export class HarnessReloginService {
|
|
|
1172
1258
|
flow.phase = 'signed_out';
|
|
1173
1259
|
flow.sessionId = null;
|
|
1174
1260
|
flow.dm = 'none';
|
|
1175
|
-
|
|
1261
|
+
// Re-reminders are about the default login; another account's link is asked for again by name.
|
|
1262
|
+
flow.remind = !flow.account && (flow.remind || this.isSignedOut(flow.harnessId));
|
|
1176
1263
|
if (session.state === 'cancelled') {
|
|
1177
1264
|
// Cancelled on the web or by a shutdown: the owner knows; stay quiet.
|
|
1178
1265
|
this.logger.info('Re-login cancelled', { harnessId: flow.harnessId, sessionId: session.id });
|
|
@@ -1180,7 +1267,9 @@ export class HarnessReloginService {
|
|
|
1180
1267
|
}
|
|
1181
1268
|
this.logger.warn('Re-login did not finish', { harnessId: flow.harnessId, sessionId: session.id, state: session.state });
|
|
1182
1269
|
const text = session.state === 'timed_out'
|
|
1183
|
-
?
|
|
1270
|
+
? flow.account
|
|
1271
|
+
? formatAccountLinkExpiredDm(flow.account, this.machineName())
|
|
1272
|
+
: formatSignedOutDm(flow.harnessId, this.machineName(), this.agentNamesOn(flow), 'link_expired')
|
|
1184
1273
|
: formatFailureDm(flow.harnessId, session.message);
|
|
1185
1274
|
void this.dm(flow, text);
|
|
1186
1275
|
}
|
|
@@ -1218,8 +1307,13 @@ export class HarnessReloginService {
|
|
|
1218
1307
|
* @param flow - The flow
|
|
1219
1308
|
*/
|
|
1220
1309
|
async confirmAndSucceed(flow) {
|
|
1310
|
+
if (flow.account) {
|
|
1311
|
+
// The token was just captured for that account; the runtime fallback probes it.
|
|
1312
|
+
await this.succeedAccount(flow, flow.account);
|
|
1313
|
+
return;
|
|
1314
|
+
}
|
|
1221
1315
|
const state = await this.probe(flow.harnessId, true);
|
|
1222
|
-
if (this.flows.get(flow
|
|
1316
|
+
if (this.flows.get(this.keyOf(flow)) !== flow)
|
|
1223
1317
|
return;
|
|
1224
1318
|
if (state === 'logged_out') {
|
|
1225
1319
|
this.logger.warn('Re-login: the sign-in finished but the harness still cannot reach its API', { harnessId: flow.harnessId });
|
|
@@ -1242,8 +1336,12 @@ export class HarnessReloginService {
|
|
|
1242
1336
|
*/
|
|
1243
1337
|
async succeed(flow, notify) {
|
|
1244
1338
|
const { harnessId } = flow;
|
|
1245
|
-
if (
|
|
1246
|
-
this.
|
|
1339
|
+
if (flow.account) {
|
|
1340
|
+
await this.succeedAccount(flow, flow.account);
|
|
1341
|
+
return;
|
|
1342
|
+
}
|
|
1343
|
+
if (this.flows.get(this.keyOf(flow)) === flow)
|
|
1344
|
+
this.flows.delete(this.keyOf(flow));
|
|
1247
1345
|
this.quietUntil.set(harnessId, this.now() + HARNESS_CONSTANTS.RELOGIN.POST_SUCCESS_QUIET_MS);
|
|
1248
1346
|
this.probeCache.set(harnessId, { at: this.now(), state: 'logged_in' });
|
|
1249
1347
|
this.state.update(harnessId, { signedOutSince: undefined, lastNoticeAt: undefined, noticeCount: undefined, seenLoggedInAt: this.now() });
|
|
@@ -1277,6 +1375,45 @@ export class HarnessReloginService {
|
|
|
1277
1375
|
await this.dm(flow, text);
|
|
1278
1376
|
}
|
|
1279
1377
|
}
|
|
1378
|
+
/**
|
|
1379
|
+
* One of the owner's other Claude Code accounts is signed in: no agent is
|
|
1380
|
+
* restarted (none runs on it until the fallback moves one there); the
|
|
1381
|
+
* runtime fallback is told, and the owner gets one line.
|
|
1382
|
+
*
|
|
1383
|
+
* @param flow - The account's flow
|
|
1384
|
+
* @param account - Account name
|
|
1385
|
+
*/
|
|
1386
|
+
async succeedAccount(flow, account) {
|
|
1387
|
+
if (this.flows.get(this.keyOf(flow)) === flow)
|
|
1388
|
+
this.flows.delete(this.keyOf(flow));
|
|
1389
|
+
this.logger.info('Claude Code account signed in', { account });
|
|
1390
|
+
await this.tellAccountLogin(account);
|
|
1391
|
+
await this.dm(flow, formatAccountSuccessDm(account, this.machineName()));
|
|
1392
|
+
}
|
|
1393
|
+
/**
|
|
1394
|
+
* Tell the runtime fallback that an account was signed in.
|
|
1395
|
+
*
|
|
1396
|
+
* @param account - Account name
|
|
1397
|
+
*/
|
|
1398
|
+
async tellAccountLogin(account) {
|
|
1399
|
+
if (!this.onAccountLogin)
|
|
1400
|
+
return;
|
|
1401
|
+
try {
|
|
1402
|
+
await this.onAccountLogin(account);
|
|
1403
|
+
}
|
|
1404
|
+
catch (error) {
|
|
1405
|
+
this.logger.warn('Account sign-in handler failed', { account, error: error instanceof Error ? error.message : String(error) });
|
|
1406
|
+
}
|
|
1407
|
+
}
|
|
1408
|
+
/**
|
|
1409
|
+
* A flow's key in the map.
|
|
1410
|
+
*
|
|
1411
|
+
* @param flow - The flow
|
|
1412
|
+
* @returns {@link flowKey} of its harness and account
|
|
1413
|
+
*/
|
|
1414
|
+
keyOf(flow) {
|
|
1415
|
+
return flowKey(flow.harnessId, flow.account);
|
|
1416
|
+
}
|
|
1280
1417
|
/**
|
|
1281
1418
|
* Sessions to restart after a login: the ones whose output matched plus
|
|
1282
1419
|
* every live session of the harness (they all hold the dead login).
|
|
@@ -1370,7 +1507,7 @@ export class HarnessReloginService {
|
|
|
1370
1507
|
* @returns Account-switch flag and machine name
|
|
1371
1508
|
*/
|
|
1372
1509
|
wordingOf(flow) {
|
|
1373
|
-
return { ownerRequested: flow.trigger === 'owner', switchAccount: flow.switchAccount, machine: this.machineName() };
|
|
1510
|
+
return { ownerRequested: flow.trigger === 'owner', switchAccount: flow.switchAccount, machine: this.machineName(), account: flow.account };
|
|
1374
1511
|
}
|
|
1375
1512
|
/**
|
|
1376
1513
|
* Cancel the flow's live broker session, marking it as cancelled by the
|
|
@@ -1396,7 +1533,7 @@ export class HarnessReloginService {
|
|
|
1396
1533
|
*/
|
|
1397
1534
|
async sendScreenIfUnrecognised(flow) {
|
|
1398
1535
|
flow.screenTimer = null;
|
|
1399
|
-
if (this.flows.get(flow
|
|
1536
|
+
if (this.flows.get(this.keyOf(flow)) !== flow || flow.phase !== 'running' || flow.dm !== 'none' || !flow.sessionId)
|
|
1400
1537
|
return;
|
|
1401
1538
|
const session = this.readSession(flow.sessionId);
|
|
1402
1539
|
if (!session || isTerminalLoginState(session.state))
|