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,181 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* People directory — the humans who use this Crewly instance, keyed by their
|
|
3
|
+
* Slack user id, with a role (issue #968).
|
|
4
|
+
*
|
|
5
|
+
* - **owner**: the instance owner (the Slack user who installed Crewly's
|
|
6
|
+
* Slack app). Always shown, always `owner`, never removable. When their
|
|
7
|
+
* Slack id is not known the owner is the id `owner` (dashboard, terminal).
|
|
8
|
+
* - **member**: a person in the workspace. A Slack user who messages an agent
|
|
9
|
+
* is added as a member automatically.
|
|
10
|
+
* - **guest**: someone the owner marked as a guest. Guests are not included
|
|
11
|
+
* when a connector is shared with "all members".
|
|
12
|
+
*
|
|
13
|
+
* Stored in `<CREWLY_HOME>/people.json`. Writes are atomic.
|
|
14
|
+
*
|
|
15
|
+
* specs/per-person-access.md
|
|
16
|
+
*
|
|
17
|
+
* @module services/people/people-directory.service
|
|
18
|
+
*/
|
|
19
|
+
/** A person's role on this instance. */
|
|
20
|
+
export type PersonRole = 'owner' | 'member' | 'guest';
|
|
21
|
+
/** One person. */
|
|
22
|
+
export interface Person {
|
|
23
|
+
/** Slack user id (`U0123…`), or `owner` for an owner whose Slack id is unknown */
|
|
24
|
+
id: string;
|
|
25
|
+
/** Display name */
|
|
26
|
+
name?: string;
|
|
27
|
+
role: PersonRole;
|
|
28
|
+
/** `auto`: added when they first messaged an agent; `owner`: added or edited by the owner */
|
|
29
|
+
source: 'auto' | 'owner';
|
|
30
|
+
createdAt: string;
|
|
31
|
+
updatedAt: string;
|
|
32
|
+
}
|
|
33
|
+
/** An invalid edit. */
|
|
34
|
+
export declare class PeopleDirectoryError extends Error {
|
|
35
|
+
}
|
|
36
|
+
/** Injectable dependencies. */
|
|
37
|
+
export interface PeopleDirectoryDeps {
|
|
38
|
+
/** Store file (default `<CREWLY_HOME>/people.json`) */
|
|
39
|
+
filePath?: string;
|
|
40
|
+
/** The instance owner's Slack user id, when known */
|
|
41
|
+
getOwnerSlackUserId?: () => string | null | undefined;
|
|
42
|
+
now?: () => number;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Whether a value is a valid role.
|
|
46
|
+
*
|
|
47
|
+
* @param value - Candidate
|
|
48
|
+
* @returns True for owner / member / guest
|
|
49
|
+
*/
|
|
50
|
+
export declare function isPersonRole(value: unknown): value is PersonRole;
|
|
51
|
+
/**
|
|
52
|
+
* Whether a value is a person id this directory accepts: a Slack user id, or
|
|
53
|
+
* the owner placeholder.
|
|
54
|
+
*
|
|
55
|
+
* @param value - Candidate
|
|
56
|
+
* @returns True when valid
|
|
57
|
+
*/
|
|
58
|
+
export declare function isPersonId(value: unknown): value is string;
|
|
59
|
+
/** The people directory. */
|
|
60
|
+
export declare class PeopleDirectoryService {
|
|
61
|
+
private readonly filePathOverride?;
|
|
62
|
+
private readonly ownerSlackUserId;
|
|
63
|
+
private readonly now;
|
|
64
|
+
/**
|
|
65
|
+
* @param deps - Store path, owner lookup, clock
|
|
66
|
+
*/
|
|
67
|
+
constructor(deps?: PeopleDirectoryDeps);
|
|
68
|
+
/** @returns Store path (resolved per call so CREWLY_HOME changes apply) */
|
|
69
|
+
private filePath;
|
|
70
|
+
/**
|
|
71
|
+
* The owner's person id: their Slack user id when known, else `owner`.
|
|
72
|
+
*
|
|
73
|
+
* @returns Person id
|
|
74
|
+
*/
|
|
75
|
+
ownerId(): string;
|
|
76
|
+
/**
|
|
77
|
+
* Whether a person id is the instance owner.
|
|
78
|
+
*
|
|
79
|
+
* @param id - Person id
|
|
80
|
+
* @returns True for the owner's Slack id or the `owner` placeholder
|
|
81
|
+
*/
|
|
82
|
+
isOwner(id: string | null | undefined): boolean;
|
|
83
|
+
/**
|
|
84
|
+
* Everyone, owner first, then by name.
|
|
85
|
+
*
|
|
86
|
+
* @returns People (copies)
|
|
87
|
+
*/
|
|
88
|
+
list(): Person[];
|
|
89
|
+
/**
|
|
90
|
+
* One person.
|
|
91
|
+
*
|
|
92
|
+
* @param id - Person id
|
|
93
|
+
* @returns The person, or null when unknown
|
|
94
|
+
*/
|
|
95
|
+
get(id: string): Person | null;
|
|
96
|
+
/**
|
|
97
|
+
* A person's role. Unknown people are members (the default for a Slack
|
|
98
|
+
* user in the workspace).
|
|
99
|
+
*
|
|
100
|
+
* @param id - Person id
|
|
101
|
+
* @returns Role
|
|
102
|
+
*/
|
|
103
|
+
roleOf(id: string): PersonRole;
|
|
104
|
+
/**
|
|
105
|
+
* How to name a person to others.
|
|
106
|
+
*
|
|
107
|
+
* @param id - Person id
|
|
108
|
+
* @returns Their name, "the owner" for an owner without one, else the id
|
|
109
|
+
*/
|
|
110
|
+
displayName(id: string): string;
|
|
111
|
+
/**
|
|
112
|
+
* Record a Slack user who messaged an agent (added as a member the first
|
|
113
|
+
* time; a missing name is filled in). Never changes a role.
|
|
114
|
+
*
|
|
115
|
+
* @param id - Slack user id
|
|
116
|
+
* @param name - Their display name, when known
|
|
117
|
+
*/
|
|
118
|
+
noteSeen(id: string, name?: string): void;
|
|
119
|
+
/**
|
|
120
|
+
* Add or edit a person (owner action).
|
|
121
|
+
*
|
|
122
|
+
* @param id - Slack user id
|
|
123
|
+
* @param patch - Name and/or role
|
|
124
|
+
* @returns The person
|
|
125
|
+
* @throws PeopleDirectoryError on an invalid id or role, or when changing the owner's role
|
|
126
|
+
*/
|
|
127
|
+
upsert(id: string, patch: {
|
|
128
|
+
name?: unknown;
|
|
129
|
+
role?: unknown;
|
|
130
|
+
}): Person;
|
|
131
|
+
/**
|
|
132
|
+
* Remove a person (they come back as a member if they message an agent again).
|
|
133
|
+
*
|
|
134
|
+
* @param id - Person id
|
|
135
|
+
* @returns True when removed
|
|
136
|
+
* @throws PeopleDirectoryError for the owner
|
|
137
|
+
*/
|
|
138
|
+
remove(id: string): boolean;
|
|
139
|
+
/** @returns The stored file (empty when missing or unreadable) */
|
|
140
|
+
private read;
|
|
141
|
+
/**
|
|
142
|
+
* Write atomically.
|
|
143
|
+
*
|
|
144
|
+
* @param file - Contents
|
|
145
|
+
*/
|
|
146
|
+
private write;
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Trim and bound a display name.
|
|
150
|
+
*
|
|
151
|
+
* @param name - Raw name
|
|
152
|
+
* @returns Clean name, or undefined when empty
|
|
153
|
+
*/
|
|
154
|
+
export declare function cleanPersonName(name: string | null | undefined): string | undefined;
|
|
155
|
+
/**
|
|
156
|
+
* Record a Slack user who messaged an agent, with their name (best effort,
|
|
157
|
+
* never throws).
|
|
158
|
+
*
|
|
159
|
+
* @param slackUserId - Slack user id
|
|
160
|
+
* @param name - Display name, when known
|
|
161
|
+
*/
|
|
162
|
+
export declare function notePerson(slackUserId: string, name?: string | null): void;
|
|
163
|
+
/**
|
|
164
|
+
* Tell the directory how to find the owner's Slack id (wired once Slack is up).
|
|
165
|
+
*
|
|
166
|
+
* @param lookup - Lookup, or null
|
|
167
|
+
*/
|
|
168
|
+
export declare function setPeopleOwnerLookup(lookup: (() => string | null | undefined) | null): void;
|
|
169
|
+
/**
|
|
170
|
+
* The backend's people directory.
|
|
171
|
+
*
|
|
172
|
+
* @returns Singleton
|
|
173
|
+
*/
|
|
174
|
+
export declare function getPeopleDirectory(): PeopleDirectoryService;
|
|
175
|
+
/**
|
|
176
|
+
* Replace the singleton (tests).
|
|
177
|
+
*
|
|
178
|
+
* @param service - Instance, or null to reset
|
|
179
|
+
*/
|
|
180
|
+
export declare function setPeopleDirectoryForTesting(service: PeopleDirectoryService | null): void;
|
|
181
|
+
//# sourceMappingURL=people-directory.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"people-directory.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/people/people-directory.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,317 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* People directory — the humans who use this Crewly instance, keyed by their
|
|
3
|
+
* Slack user id, with a role (issue #968).
|
|
4
|
+
*
|
|
5
|
+
* - **owner**: the instance owner (the Slack user who installed Crewly's
|
|
6
|
+
* Slack app). Always shown, always `owner`, never removable. When their
|
|
7
|
+
* Slack id is not known the owner is the id `owner` (dashboard, terminal).
|
|
8
|
+
* - **member**: a person in the workspace. A Slack user who messages an agent
|
|
9
|
+
* is added as a member automatically.
|
|
10
|
+
* - **guest**: someone the owner marked as a guest. Guests are not included
|
|
11
|
+
* when a connector is shared with "all members".
|
|
12
|
+
*
|
|
13
|
+
* Stored in `<CREWLY_HOME>/people.json`. Writes are atomic.
|
|
14
|
+
*
|
|
15
|
+
* specs/per-person-access.md
|
|
16
|
+
*
|
|
17
|
+
* @module services/people/people-directory.service
|
|
18
|
+
*/
|
|
19
|
+
import * as fs from 'fs';
|
|
20
|
+
import * as path from 'path';
|
|
21
|
+
import { PEOPLE_CONSTANTS } from '../../constants.js';
|
|
22
|
+
import { getCrewlyHomePath } from '../core/crewly-home.utils.js';
|
|
23
|
+
/** An invalid edit. */
|
|
24
|
+
export class PeopleDirectoryError extends Error {
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Whether a value is a valid role.
|
|
28
|
+
*
|
|
29
|
+
* @param value - Candidate
|
|
30
|
+
* @returns True for owner / member / guest
|
|
31
|
+
*/
|
|
32
|
+
export function isPersonRole(value) {
|
|
33
|
+
return typeof value === 'string' && PEOPLE_CONSTANTS.ROLES.includes(value);
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Whether a value is a person id this directory accepts: a Slack user id, or
|
|
37
|
+
* the owner placeholder.
|
|
38
|
+
*
|
|
39
|
+
* @param value - Candidate
|
|
40
|
+
* @returns True when valid
|
|
41
|
+
*/
|
|
42
|
+
export function isPersonId(value) {
|
|
43
|
+
return typeof value === 'string' && (value === PEOPLE_CONSTANTS.OWNER_ID || PEOPLE_CONSTANTS.SLACK_USER_ID_PATTERN.test(value));
|
|
44
|
+
}
|
|
45
|
+
/** The people directory. */
|
|
46
|
+
export class PeopleDirectoryService {
|
|
47
|
+
filePathOverride;
|
|
48
|
+
ownerSlackUserId;
|
|
49
|
+
now;
|
|
50
|
+
/**
|
|
51
|
+
* @param deps - Store path, owner lookup, clock
|
|
52
|
+
*/
|
|
53
|
+
constructor(deps = {}) {
|
|
54
|
+
this.filePathOverride = deps.filePath;
|
|
55
|
+
this.ownerSlackUserId = () => {
|
|
56
|
+
try {
|
|
57
|
+
const id = deps.getOwnerSlackUserId?.();
|
|
58
|
+
return typeof id === 'string' && id.trim() ? id.trim() : null;
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
return null;
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
this.now = deps.now ?? (() => Date.now());
|
|
65
|
+
}
|
|
66
|
+
/** @returns Store path (resolved per call so CREWLY_HOME changes apply) */
|
|
67
|
+
filePath() {
|
|
68
|
+
return this.filePathOverride ?? path.join(getCrewlyHomePath(), PEOPLE_CONSTANTS.STORE_FILE);
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* The owner's person id: their Slack user id when known, else `owner`.
|
|
72
|
+
*
|
|
73
|
+
* @returns Person id
|
|
74
|
+
*/
|
|
75
|
+
ownerId() {
|
|
76
|
+
return this.ownerSlackUserId() ?? PEOPLE_CONSTANTS.OWNER_ID;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Whether a person id is the instance owner.
|
|
80
|
+
*
|
|
81
|
+
* @param id - Person id
|
|
82
|
+
* @returns True for the owner's Slack id or the `owner` placeholder
|
|
83
|
+
*/
|
|
84
|
+
isOwner(id) {
|
|
85
|
+
if (!id)
|
|
86
|
+
return false;
|
|
87
|
+
return id === PEOPLE_CONSTANTS.OWNER_ID || id === this.ownerSlackUserId();
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Everyone, owner first, then by name.
|
|
91
|
+
*
|
|
92
|
+
* @returns People (copies)
|
|
93
|
+
*/
|
|
94
|
+
list() {
|
|
95
|
+
const stored = this.read().people;
|
|
96
|
+
const ownerId = this.ownerId();
|
|
97
|
+
const iso = new Date(this.now()).toISOString();
|
|
98
|
+
const owner = stored.find((p) => p.id === ownerId) ?? stored.find((p) => p.id === PEOPLE_CONSTANTS.OWNER_ID);
|
|
99
|
+
const out = [{ ...(owner ?? { source: 'owner', createdAt: iso, updatedAt: iso }), id: ownerId, role: 'owner' }];
|
|
100
|
+
const others = stored
|
|
101
|
+
.filter((p) => p.id !== ownerId && p.id !== PEOPLE_CONSTANTS.OWNER_ID)
|
|
102
|
+
.map((p) => ({ ...p, role: p.role === 'owner' ? 'member' : p.role }))
|
|
103
|
+
.sort((a, b) => (a.name ?? a.id).localeCompare(b.name ?? b.id));
|
|
104
|
+
return [...out, ...others];
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* One person.
|
|
108
|
+
*
|
|
109
|
+
* @param id - Person id
|
|
110
|
+
* @returns The person, or null when unknown
|
|
111
|
+
*/
|
|
112
|
+
get(id) {
|
|
113
|
+
const ownerId = this.ownerId();
|
|
114
|
+
const key = id === PEOPLE_CONSTANTS.OWNER_ID ? ownerId : id;
|
|
115
|
+
return this.list().find((p) => p.id === key) ?? null;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* A person's role. Unknown people are members (the default for a Slack
|
|
119
|
+
* user in the workspace).
|
|
120
|
+
*
|
|
121
|
+
* @param id - Person id
|
|
122
|
+
* @returns Role
|
|
123
|
+
*/
|
|
124
|
+
roleOf(id) {
|
|
125
|
+
if (this.isOwner(id))
|
|
126
|
+
return 'owner';
|
|
127
|
+
const found = this.read().people.find((p) => p.id === id);
|
|
128
|
+
if (!found)
|
|
129
|
+
return PEOPLE_CONSTANTS.DEFAULT_ROLE;
|
|
130
|
+
return found.role === 'owner' ? 'member' : found.role;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* How to name a person to others.
|
|
134
|
+
*
|
|
135
|
+
* @param id - Person id
|
|
136
|
+
* @returns Their name, "the owner" for an owner without one, else the id
|
|
137
|
+
*/
|
|
138
|
+
displayName(id) {
|
|
139
|
+
const person = this.get(id);
|
|
140
|
+
if (person?.name)
|
|
141
|
+
return person.name;
|
|
142
|
+
return this.isOwner(id) ? 'the owner' : id;
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Record a Slack user who messaged an agent (added as a member the first
|
|
146
|
+
* time; a missing name is filled in). Never changes a role.
|
|
147
|
+
*
|
|
148
|
+
* @param id - Slack user id
|
|
149
|
+
* @param name - Their display name, when known
|
|
150
|
+
*/
|
|
151
|
+
noteSeen(id, name) {
|
|
152
|
+
if (!PEOPLE_CONSTANTS.SLACK_USER_ID_PATTERN.test(id))
|
|
153
|
+
return;
|
|
154
|
+
const file = this.read();
|
|
155
|
+
const existing = file.people.find((p) => p.id === id);
|
|
156
|
+
const cleanName = cleanPersonName(name);
|
|
157
|
+
if (existing) {
|
|
158
|
+
if (cleanName && !existing.name) {
|
|
159
|
+
existing.name = cleanName;
|
|
160
|
+
existing.updatedAt = new Date(this.now()).toISOString();
|
|
161
|
+
this.write(file);
|
|
162
|
+
}
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
const iso = new Date(this.now()).toISOString();
|
|
166
|
+
file.people.push({
|
|
167
|
+
id,
|
|
168
|
+
...(cleanName ? { name: cleanName } : {}),
|
|
169
|
+
role: this.isOwner(id) ? 'owner' : PEOPLE_CONSTANTS.DEFAULT_ROLE,
|
|
170
|
+
source: 'auto',
|
|
171
|
+
createdAt: iso,
|
|
172
|
+
updatedAt: iso,
|
|
173
|
+
});
|
|
174
|
+
this.write(file);
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Add or edit a person (owner action).
|
|
178
|
+
*
|
|
179
|
+
* @param id - Slack user id
|
|
180
|
+
* @param patch - Name and/or role
|
|
181
|
+
* @returns The person
|
|
182
|
+
* @throws PeopleDirectoryError on an invalid id or role, or when changing the owner's role
|
|
183
|
+
*/
|
|
184
|
+
upsert(id, patch) {
|
|
185
|
+
if (!isPersonId(id))
|
|
186
|
+
throw new PeopleDirectoryError('A person is a Slack user id like U0123ABCD');
|
|
187
|
+
if (patch.role !== undefined && !isPersonRole(patch.role))
|
|
188
|
+
throw new PeopleDirectoryError('role must be owner, member or guest');
|
|
189
|
+
const owner = this.isOwner(id);
|
|
190
|
+
if (owner && patch.role !== undefined && patch.role !== 'owner')
|
|
191
|
+
throw new PeopleDirectoryError("The instance owner's role can't be changed");
|
|
192
|
+
if (!owner && patch.role === 'owner')
|
|
193
|
+
throw new PeopleDirectoryError('There is one owner: the person who installed Crewly in Slack');
|
|
194
|
+
if (patch.name !== undefined && patch.name !== null && typeof patch.name !== 'string')
|
|
195
|
+
throw new PeopleDirectoryError('name must be text');
|
|
196
|
+
const file = this.read();
|
|
197
|
+
const key = owner ? this.ownerId() : id;
|
|
198
|
+
const iso = new Date(this.now()).toISOString();
|
|
199
|
+
let person = file.people.find((p) => p.id === key);
|
|
200
|
+
if (!person) {
|
|
201
|
+
person = { id: key, role: owner ? 'owner' : PEOPLE_CONSTANTS.DEFAULT_ROLE, source: 'owner', createdAt: iso, updatedAt: iso };
|
|
202
|
+
file.people.push(person);
|
|
203
|
+
}
|
|
204
|
+
if (patch.name !== undefined) {
|
|
205
|
+
const name = cleanPersonName(patch.name);
|
|
206
|
+
if (name)
|
|
207
|
+
person.name = name;
|
|
208
|
+
else
|
|
209
|
+
delete person.name;
|
|
210
|
+
}
|
|
211
|
+
if (patch.role !== undefined)
|
|
212
|
+
person.role = patch.role;
|
|
213
|
+
person.source = 'owner';
|
|
214
|
+
person.updatedAt = iso;
|
|
215
|
+
this.write(file);
|
|
216
|
+
return this.get(key);
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Remove a person (they come back as a member if they message an agent again).
|
|
220
|
+
*
|
|
221
|
+
* @param id - Person id
|
|
222
|
+
* @returns True when removed
|
|
223
|
+
* @throws PeopleDirectoryError for the owner
|
|
224
|
+
*/
|
|
225
|
+
remove(id) {
|
|
226
|
+
if (this.isOwner(id))
|
|
227
|
+
throw new PeopleDirectoryError("The instance owner can't be removed");
|
|
228
|
+
const file = this.read();
|
|
229
|
+
const before = file.people.length;
|
|
230
|
+
file.people = file.people.filter((p) => p.id !== id);
|
|
231
|
+
if (file.people.length === before)
|
|
232
|
+
return false;
|
|
233
|
+
this.write(file);
|
|
234
|
+
return true;
|
|
235
|
+
}
|
|
236
|
+
/** @returns The stored file (empty when missing or unreadable) */
|
|
237
|
+
read() {
|
|
238
|
+
try {
|
|
239
|
+
const raw = JSON.parse(fs.readFileSync(this.filePath(), 'utf-8'));
|
|
240
|
+
const people = raw && typeof raw === 'object' && Array.isArray(raw.people) ? raw.people : [];
|
|
241
|
+
return {
|
|
242
|
+
version: 1,
|
|
243
|
+
people: people.filter((p) => !!p && isPersonId(p.id) && isPersonRole(p.role)),
|
|
244
|
+
};
|
|
245
|
+
}
|
|
246
|
+
catch {
|
|
247
|
+
return { version: 1, people: [] };
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Write atomically.
|
|
252
|
+
*
|
|
253
|
+
* @param file - Contents
|
|
254
|
+
*/
|
|
255
|
+
write(file) {
|
|
256
|
+
const target = this.filePath();
|
|
257
|
+
fs.mkdirSync(path.dirname(target), { recursive: true });
|
|
258
|
+
const tmp = `${target}.${process.pid}.tmp`;
|
|
259
|
+
fs.writeFileSync(tmp, `${JSON.stringify(file, null, 2)}\n`, 'utf-8');
|
|
260
|
+
fs.renameSync(tmp, target);
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* Trim and bound a display name.
|
|
265
|
+
*
|
|
266
|
+
* @param name - Raw name
|
|
267
|
+
* @returns Clean name, or undefined when empty
|
|
268
|
+
*/
|
|
269
|
+
export function cleanPersonName(name) {
|
|
270
|
+
if (typeof name !== 'string')
|
|
271
|
+
return undefined;
|
|
272
|
+
const trimmed = name.replace(/\s+/g, ' ').trim().slice(0, PEOPLE_CONSTANTS.MAX_NAME_LENGTH);
|
|
273
|
+
return trimmed || undefined;
|
|
274
|
+
}
|
|
275
|
+
/**
|
|
276
|
+
* Record a Slack user who messaged an agent, with their name (best effort,
|
|
277
|
+
* never throws).
|
|
278
|
+
*
|
|
279
|
+
* @param slackUserId - Slack user id
|
|
280
|
+
* @param name - Display name, when known
|
|
281
|
+
*/
|
|
282
|
+
export function notePerson(slackUserId, name) {
|
|
283
|
+
try {
|
|
284
|
+
getPeopleDirectory().noteSeen(slackUserId, name ?? undefined);
|
|
285
|
+
}
|
|
286
|
+
catch {
|
|
287
|
+
// the directory is a convenience here
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
let instance = null;
|
|
291
|
+
let ownerLookup = null;
|
|
292
|
+
/**
|
|
293
|
+
* Tell the directory how to find the owner's Slack id (wired once Slack is up).
|
|
294
|
+
*
|
|
295
|
+
* @param lookup - Lookup, or null
|
|
296
|
+
*/
|
|
297
|
+
export function setPeopleOwnerLookup(lookup) {
|
|
298
|
+
ownerLookup = lookup;
|
|
299
|
+
}
|
|
300
|
+
/**
|
|
301
|
+
* The backend's people directory.
|
|
302
|
+
*
|
|
303
|
+
* @returns Singleton
|
|
304
|
+
*/
|
|
305
|
+
export function getPeopleDirectory() {
|
|
306
|
+
instance ??= new PeopleDirectoryService({ getOwnerSlackUserId: () => ownerLookup?.() ?? null });
|
|
307
|
+
return instance;
|
|
308
|
+
}
|
|
309
|
+
/**
|
|
310
|
+
* Replace the singleton (tests).
|
|
311
|
+
*
|
|
312
|
+
* @param service - Instance, or null to reset
|
|
313
|
+
*/
|
|
314
|
+
export function setPeopleDirectoryForTesting(service) {
|
|
315
|
+
instance = service;
|
|
316
|
+
}
|
|
317
|
+
//# sourceMappingURL=people-directory.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"people-directory.service.js","sourceRoot":"","sources":["../../../../../../backend/src/services/people/people-directory.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -23,6 +23,8 @@ export interface LaunchRuntimeDecision {
|
|
|
23
23
|
overridden: boolean;
|
|
24
24
|
/** Model to run when the fallback is the Crewly Agent (provider/model) */
|
|
25
25
|
crewlyAgentModel?: string;
|
|
26
|
+
/** One of the owner's other Claude Code accounts to run on (issue #942) */
|
|
27
|
+
claudeAccount?: string;
|
|
26
28
|
}
|
|
27
29
|
/** Input of a launch decision. */
|
|
28
30
|
export interface LaunchRuntimeInput {
|
|
@@ -35,8 +37,12 @@ export interface LaunchRuntimeInput {
|
|
|
35
37
|
}
|
|
36
38
|
/** Hooks the RuntimeFallbackService provides. */
|
|
37
39
|
export interface RuntimeFallbackHooks {
|
|
38
|
-
/** Runtime a session runs on instead of its configured one, or null */
|
|
40
|
+
/** Runtime a session runs on instead of its configured one, or null (never carries an account) */
|
|
39
41
|
overrideFor(sessionName: string): string | null;
|
|
42
|
+
/** The owner's other Claude Code account a session runs on, or null (its runtime's default login) */
|
|
43
|
+
accountFor(sessionName: string): string | null;
|
|
44
|
+
/** A session's login expired: true when the fallback owns it (the session runs on another account) */
|
|
45
|
+
reportLoginExpiry(sessionName: string): boolean;
|
|
40
46
|
/** Runtime to launch a session on (may start a fallback for an exhausted runtime) */
|
|
41
47
|
resolveLaunch(input: LaunchRuntimeInput): Promise<LaunchRuntimeDecision>;
|
|
42
48
|
/** Before a message is written into a session: deliver now, or queue it (a switch is running / needed) */
|
|
@@ -65,6 +71,28 @@ export declare function setRuntimeFallbackHooks(next: RuntimeFallbackHooks | nul
|
|
|
65
71
|
* ```
|
|
66
72
|
*/
|
|
67
73
|
export declare function effectiveRuntimeType<T extends string>(sessionName: string | undefined | null, configured: T): T;
|
|
74
|
+
/**
|
|
75
|
+
* The owner's other Claude Code account a session runs on (issue #942).
|
|
76
|
+
*
|
|
77
|
+
* @param sessionName - Session name
|
|
78
|
+
* @returns Account name, or null when it runs on its runtime's default login
|
|
79
|
+
*
|
|
80
|
+
* @example
|
|
81
|
+
* ```ts
|
|
82
|
+
* const account = effectiveClaudeAccount(sessionName); // 'work' while on claude-code@work
|
|
83
|
+
* ```
|
|
84
|
+
*/
|
|
85
|
+
export declare function effectiveClaudeAccount(sessionName: string | undefined | null): string | null;
|
|
86
|
+
/**
|
|
87
|
+
* Report an expired login of a session. A session on one of the owner's
|
|
88
|
+
* other Claude Code accounts is the fallback's: that account is marked
|
|
89
|
+
* signed out and the agent moves on along its chain; the default login's
|
|
90
|
+
* expiry stays with the re-login flow.
|
|
91
|
+
*
|
|
92
|
+
* @param sessionName - Session whose output showed the expiry
|
|
93
|
+
* @returns True when the fallback handled it (the caller must not start a re-login)
|
|
94
|
+
*/
|
|
95
|
+
export declare function reportRuntimeLoginExpiry(sessionName: string | undefined | null): boolean;
|
|
68
96
|
/**
|
|
69
97
|
* Decide the runtime to launch a session on.
|
|
70
98
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"effective-runtime.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/runtime-fallback/effective-runtime.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,4CAA4C;AAC5C,MAAM,MAAM,mBAAmB,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC;AAEhE,iDAAiD;AACjD,MAAM,WAAW,qBAAqB;IACrC,wBAAwB;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,8DAA8D;IAC9D,UAAU,EAAE,OAAO,CAAC;IACpB,0EAA0E;IAC1E,gBAAgB,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"effective-runtime.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/runtime-fallback/effective-runtime.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,4CAA4C;AAC5C,MAAM,MAAM,mBAAmB,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC;AAEhE,iDAAiD;AACjD,MAAM,WAAW,qBAAqB;IACrC,wBAAwB;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,8DAA8D;IAC9D,UAAU,EAAE,OAAO,CAAC;IACpB,0EAA0E;IAC1E,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,2EAA2E;IAC3E,aAAa,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,kCAAkC;AAClC,MAAM,WAAW,kBAAkB;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,0DAA0D;IAC1D,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,OAAO,CAAC;CACxB;AAED,iDAAiD;AACjD,MAAM,WAAW,oBAAoB;IACpC,kGAAkG;IAClG,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAChD,qGAAqG;IACrG,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAC/C,sGAAsG;IACtG,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC;IAChD,qFAAqF;IACrF,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAAC;IACzE,0GAA0G;IAC1G,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;IAC1E,0EAA0E;IAC1E,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC;IACvG,8EAA8E;IAC9E,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;CACpD;AAID;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,oBAAoB,GAAG,IAAI,GAAG,IAAI,CAE/E;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,SAAS,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,EAAE,UAAU,EAAE,CAAC,GAAG,CAAC,CAO/G;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAO5F;AAED;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,OAAO,CAOxF;AAED;;;;;GAKG;AACH,wBAAsB,oBAAoB,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAOpG;AAED;;;;;;GAMG;AACH,wBAAgB,6BAA6B,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAOvG;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAO5H;AAED;;;;;GAKG;AACH,wBAAgB,4BAA4B,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAO/E"}
|
|
@@ -44,6 +44,46 @@ export function effectiveRuntimeType(sessionName, configured) {
|
|
|
44
44
|
return configured;
|
|
45
45
|
}
|
|
46
46
|
}
|
|
47
|
+
/**
|
|
48
|
+
* The owner's other Claude Code account a session runs on (issue #942).
|
|
49
|
+
*
|
|
50
|
+
* @param sessionName - Session name
|
|
51
|
+
* @returns Account name, or null when it runs on its runtime's default login
|
|
52
|
+
*
|
|
53
|
+
* @example
|
|
54
|
+
* ```ts
|
|
55
|
+
* const account = effectiveClaudeAccount(sessionName); // 'work' while on claude-code@work
|
|
56
|
+
* ```
|
|
57
|
+
*/
|
|
58
|
+
export function effectiveClaudeAccount(sessionName) {
|
|
59
|
+
if (!hooks || !sessionName)
|
|
60
|
+
return null;
|
|
61
|
+
try {
|
|
62
|
+
return hooks.accountFor(sessionName);
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Report an expired login of a session. A session on one of the owner's
|
|
70
|
+
* other Claude Code accounts is the fallback's: that account is marked
|
|
71
|
+
* signed out and the agent moves on along its chain; the default login's
|
|
72
|
+
* expiry stays with the re-login flow.
|
|
73
|
+
*
|
|
74
|
+
* @param sessionName - Session whose output showed the expiry
|
|
75
|
+
* @returns True when the fallback handled it (the caller must not start a re-login)
|
|
76
|
+
*/
|
|
77
|
+
export function reportRuntimeLoginExpiry(sessionName) {
|
|
78
|
+
if (!hooks || !sessionName)
|
|
79
|
+
return false;
|
|
80
|
+
try {
|
|
81
|
+
return hooks.reportLoginExpiry(sessionName);
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
return false;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
47
87
|
/**
|
|
48
88
|
* Decide the runtime to launch a session on.
|
|
49
89
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"effective-runtime.js","sourceRoot":"","sources":["../../../../../../backend/src/services/runtime-fallback/effective-runtime.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;
|
|
1
|
+
{"version":3,"file":"effective-runtime.js","sourceRoot":"","sources":["../../../../../../backend/src/services/runtime-fallback/effective-runtime.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AA6CH,IAAI,KAAK,GAAgC,IAAI,CAAC;AAE9C;;;;GAIG;AACH,MAAM,UAAU,uBAAuB,CAAC,IAAiC;IACxE,KAAK,GAAG,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,oBAAoB,CAAmB,WAAsC,EAAE,UAAa;IAC3G,IAAI,CAAC,KAAK,IAAI,CAAC,WAAW;QAAE,OAAO,UAAU,CAAC;IAC9C,IAAI,CAAC;QACJ,OAAQ,KAAK,CAAC,WAAW,CAAC,WAAW,CAAc,IAAI,UAAU,CAAC;IACnE,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,UAAU,CAAC;IACnB,CAAC;AACF,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,sBAAsB,CAAC,WAAsC;IAC5E,IAAI,CAAC,KAAK,IAAI,CAAC,WAAW;QAAE,OAAO,IAAI,CAAC;IACxC,IAAI,CAAC;QACJ,OAAO,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;IACtC,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,IAAI,CAAC;IACb,CAAC;AACF,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,wBAAwB,CAAC,WAAsC;IAC9E,IAAI,CAAC,KAAK,IAAI,CAAC,WAAW;QAAE,OAAO,KAAK,CAAC;IACzC,IAAI,CAAC;QACJ,OAAO,KAAK,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;IAC7C,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,KAAK,CAAC;IACd,CAAC;AACF,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,KAAyB;IACnE,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;IACpE,IAAI,CAAC;QACJ,OAAO,MAAM,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACzC,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;IACzD,CAAC;AACF,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,6BAA6B,CAAC,WAAmB,EAAE,OAAe;IACjF,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAC7B,IAAI,CAAC;QACJ,OAAO,KAAK,CAAC,cAAc,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IACnD,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,SAAS,CAAC;IAClB,CAAC;AACF,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,mBAAmB,CAAC,WAAmB,EAAE,OAAe,EAAE,IAAY,EAAE,MAA2B;IAClH,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI;QAAE,OAAO,KAAK,CAAC;IAClC,IAAI,CAAC;QACJ,OAAO,KAAK,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IAC/D,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,KAAK,CAAC;IACd,CAAC;AACF,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,4BAA4B,CAAC,WAAmB;IAC/D,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,IAAI,CAAC;QACJ,OAAO,KAAK,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;IAC3C,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,IAAI,CAAC;IACb,CAAC;AACF,CAAC"}
|