crewly 1.20.106 → 1.20.107
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/README.md +22 -12
- package/config/constants.ts +43 -0
- package/config/index.ts +2 -0
- package/config/skills/_common/lib.sh +55 -2
- package/config/skills/_common/lib.test.sh +58 -1
- package/config/skills/_common/task-pool-body-shape.test.sh +60 -0
- package/config/skills/agent/core/cancel-followup/execute.sh +18 -3
- package/config/skills/agent/core/cancel-followup/execute.test.sh +73 -0
- package/config/skills/agent/core/complete-task/execute.sh +1 -1
- package/config/skills/agent/core/create-intent-tasks/execute.sh +1 -1
- package/config/skills/agent/core/create-task/SKILL.md +1 -0
- package/config/skills/agent/core/create-task/execute.sh +10 -0
- package/config/skills/agent/core/decompose-intent/execute.sh +1 -1
- package/config/skills/agent/core/handoff-task/execute.sh +1 -1
- package/config/skills/agent/core/list-my-followups/SKILL.md +1 -1
- package/config/skills/agent/core/list-my-followups/execute.sh +25 -3
- package/config/skills/agent/core/list-my-followups/execute.test.sh +72 -0
- package/config/skills/agent/core/poll-tasks/execute.sh +3 -3
- package/config/skills/agent/core/reply-channel/SKILL.md +1 -1
- package/config/skills/agent/core/report-progress/execute.sh +1 -1
- package/config/skills/agent/core/report-status/execute.sh +1 -1
- package/config/skills/agent/core/slack-post/SKILL.md +1 -1
- package/config/skills/agent/core/update-intent-task/execute.sh +1 -1
- package/config/skills/agent/marketing/brand-onboarding/execute.sh +1 -1
- package/config/skills/agent/marketing/submit-for-approval/execute.sh +1 -1
- package/config/skills/agent/remote-browser/SOP-google-flow-video.md +1 -1
- package/config/skills/agent/remote-browser/execute.sh +33 -1
- package/config/skills/agent/remote-browser/execute.test.sh +62 -0
- package/config/skills/agent/screenshot-compare/execute.sh +1 -1
- package/config/skills/agent/transcribe-audio/SKILL.md +1 -1
- package/config/skills/agent/transcribe-audio/execute.sh +1 -1
- package/config/skills/agent/transcribe-audio/instructions.md +1 -1
- package/config/skills/orchestrator/delegate-task/SKILL.md +1 -1
- package/config/skills/orchestrator/get-tasks/SKILL.md +7 -1
- package/config/skills/orchestrator/get-tasks/execute.sh +51 -28
- package/config/skills/orchestrator/get-tasks/execute.test.sh +67 -0
- package/config/skills/orchestrator/heartbeat/execute.sh +2 -2
- package/config/skills/orchestrator/list-missions/execute.sh +1 -1
- package/config/skills/orchestrator/list-missions/execute.test.sh +38 -11
- package/config/skills/team-leader/decompose-goal/SKILL.md +1 -0
- package/config/skills/team-leader/decompose-goal/execute.sh +17 -2
- package/config/skills/team-leader/delegate-task/SKILL.md +1 -0
- package/config/skills/team-leader/delegate-task/execute.sh +6 -2
- package/dist/backend/backend/src/constants.d.ts +199 -2
- package/dist/backend/backend/src/constants.d.ts.map +1 -1
- package/dist/backend/backend/src/constants.js +190 -3
- package/dist/backend/backend/src/constants.js.map +1 -1
- package/dist/backend/backend/src/controllers/browser/browser.controller.d.ts +33 -0
- package/dist/backend/backend/src/controllers/browser/browser.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/browser/browser.controller.js +176 -9
- package/dist/backend/backend/src/controllers/browser/browser.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/chat/chat.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/chat/chat.controller.js +38 -35
- package/dist/backend/backend/src/controllers/chat/chat.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/chat-v2/chat-v2.controller.d.ts +10 -45
- package/dist/backend/backend/src/controllers/chat-v2/chat-v2.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/chat-v2/chat-v2.controller.js +40 -89
- package/dist/backend/backend/src/controllers/chat-v2/chat-v2.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/session/session.controller.d.ts +2 -1
- package/dist/backend/backend/src/controllers/session/session.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/session/session.controller.js +21 -0
- package/dist/backend/backend/src/controllers/session/session.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/slack/slack.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/slack/slack.controller.js +51 -3
- package/dist/backend/backend/src/controllers/slack/slack.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/system/restart-readiness.controller.d.ts +23 -0
- package/dist/backend/backend/src/controllers/system/restart-readiness.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/system/restart-readiness.controller.js +35 -0
- package/dist/backend/backend/src/controllers/system/restart-readiness.controller.js.map +1 -0
- package/dist/backend/backend/src/controllers/system/system.controller.d.ts +5 -3
- package/dist/backend/backend/src/controllers/system/system.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/system/system.controller.js +27 -6
- package/dist/backend/backend/src/controllers/system/system.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/system/system.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/system/system.routes.js +3 -0
- package/dist/backend/backend/src/controllers/system/system.routes.js.map +1 -1
- 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 +29 -1
- 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 +86 -6
- package/dist/backend/backend/src/controllers/team/team.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/tickets/tickets.controller.d.ts +41 -0
- package/dist/backend/backend/src/controllers/tickets/tickets.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/tickets/tickets.controller.js +135 -0
- package/dist/backend/backend/src/controllers/tickets/tickets.controller.js.map +1 -0
- package/dist/backend/backend/src/controllers/tickets/tickets.routes.d.ts +18 -0
- package/dist/backend/backend/src/controllers/tickets/tickets.routes.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/tickets/tickets.routes.js +25 -0
- package/dist/backend/backend/src/controllers/tickets/tickets.routes.js.map +1 -0
- package/dist/backend/backend/src/index.d.ts +70 -1
- package/dist/backend/backend/src/index.d.ts.map +1 -1
- package/dist/backend/backend/src/index.js +352 -71
- 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/scripts/leaked-stub-teams.lib.d.ts +128 -0
- package/dist/backend/backend/src/scripts/leaked-stub-teams.lib.d.ts.map +1 -0
- package/dist/backend/backend/src/scripts/leaked-stub-teams.lib.js +200 -0
- package/dist/backend/backend/src/scripts/leaked-stub-teams.lib.js.map +1 -0
- package/dist/backend/backend/src/services/agent/active-work-briefing.service.d.ts +2 -2
- package/dist/backend/backend/src/services/agent/active-work-briefing.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/active-work-briefing.service.js +3 -1
- package/dist/backend/backend/src/services/agent/active-work-briefing.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts +4 -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 +61 -4
- package/dist/backend/backend/src/services/agent/agent-registration.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/claude-runtime.service.d.ts +30 -0
- package/dist/backend/backend/src/services/agent/claude-runtime.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/claude-runtime.service.js +62 -1
- package/dist/backend/backend/src/services/agent/claude-runtime.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.js +2 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/types.d.ts +0 -2
- package/dist/backend/backend/src/services/agent/crewly-agent/types.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/types.js +0 -2
- package/dist/backend/backend/src/services/agent/crewly-agent/types.js.map +1 -1
- package/dist/backend/backend/src/services/agent/gemini-runtime.service.d.ts +65 -1
- package/dist/backend/backend/src/services/agent/gemini-runtime.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/gemini-runtime.service.js +113 -10
- package/dist/backend/backend/src/services/agent/gemini-runtime.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/restore-filter.d.ts +12 -0
- package/dist/backend/backend/src/services/agent/restore-filter.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/restore-filter.js +19 -0
- package/dist/backend/backend/src/services/agent/restore-filter.js.map +1 -1
- 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 +3 -2
- package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/runtime-startup-blocked.error.d.ts +28 -0
- package/dist/backend/backend/src/services/agent/runtime-startup-blocked.error.d.ts.map +1 -0
- package/dist/backend/backend/src/services/agent/runtime-startup-blocked.error.js +34 -0
- package/dist/backend/backend/src/services/agent/runtime-startup-blocked.error.js.map +1 -0
- package/dist/backend/backend/src/services/browser/browser-bridge.service.d.ts +57 -5
- package/dist/backend/backend/src/services/browser/browser-bridge.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/browser/browser-bridge.service.js +98 -18
- package/dist/backend/backend/src/services/browser/browser-bridge.service.js.map +1 -1
- package/dist/backend/backend/src/services/browser/browser-proxy.service.d.ts +12 -1
- package/dist/backend/backend/src/services/browser/browser-proxy.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/browser/browser-proxy.service.js +25 -4
- package/dist/backend/backend/src/services/browser/browser-proxy.service.js.map +1 -1
- package/dist/backend/backend/src/services/browser/browser-relay-adapter.service.d.ts +2 -1
- package/dist/backend/backend/src/services/browser/browser-relay-adapter.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/browser/browser-relay-adapter.service.js +5 -1
- package/dist/backend/backend/src/services/browser/browser-relay-adapter.service.js.map +1 -1
- package/dist/backend/backend/src/services/browser/browser-session.service.d.ts +38 -0
- package/dist/backend/backend/src/services/browser/browser-session.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/browser/browser-session.service.js +34 -0
- package/dist/backend/backend/src/services/browser/browser-session.service.js.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts +6 -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 +5 -0
- package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.js.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/chat-v2.relay-adapter.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/chat-v2.relay-adapter.service.js +7 -2
- package/dist/backend/backend/src/services/chat-v2/chat-v2.relay-adapter.service.js.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/chat-v2.service.d.ts +23 -1
- package/dist/backend/backend/src/services/chat-v2/chat-v2.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/chat-v2.service.js +58 -1
- package/dist/backend/backend/src/services/chat-v2/chat-v2.service.js.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/owner-inbound.utils.d.ts +63 -0
- package/dist/backend/backend/src/services/chat-v2/owner-inbound.utils.d.ts.map +1 -0
- package/dist/backend/backend/src/services/chat-v2/owner-inbound.utils.js +72 -0
- package/dist/backend/backend/src/services/chat-v2/owner-inbound.utils.js.map +1 -0
- package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.d.ts +10 -0
- package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.d.ts.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.js +15 -0
- package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.js.map +1 -1
- package/dist/backend/backend/src/services/cloud/mobile-api-relay.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/cloud/mobile-api-relay.service.js +6 -1
- package/dist/backend/backend/src/services/cloud/mobile-api-relay.service.js.map +1 -1
- package/dist/backend/backend/src/services/core/retry.util.d.ts +5 -0
- package/dist/backend/backend/src/services/core/retry.util.d.ts.map +1 -1
- package/dist/backend/backend/src/services/core/retry.util.js +2 -2
- package/dist/backend/backend/src/services/core/retry.util.js.map +1 -1
- package/dist/backend/backend/src/services/factory.service.js +3 -3
- package/dist/backend/backend/src/services/factory.service.js.map +1 -1
- package/dist/backend/backend/src/services/messaging/google-chat-initializer.d.ts.map +1 -1
- package/dist/backend/backend/src/services/messaging/google-chat-initializer.js +24 -1
- package/dist/backend/backend/src/services/messaging/google-chat-initializer.js.map +1 -1
- package/dist/backend/backend/src/services/messaging/queue-processor.service.d.ts +9 -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 +55 -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 +7 -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 +12 -0
- package/dist/backend/backend/src/services/messaging/sub-agent-message-queue.service.js.map +1 -1
- package/dist/backend/backend/src/services/messaging/thread-status-queue.service.d.ts +36 -1
- package/dist/backend/backend/src/services/messaging/thread-status-queue.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/messaging/thread-status-queue.service.js +90 -2
- package/dist/backend/backend/src/services/messaging/thread-status-queue.service.js.map +1 -1
- package/dist/backend/backend/src/services/orchestrator/commitment-approval-guard.d.ts.map +1 -1
- package/dist/backend/backend/src/services/orchestrator/commitment-approval-guard.js +22 -16
- package/dist/backend/backend/src/services/orchestrator/commitment-approval-guard.js.map +1 -1
- package/dist/backend/backend/src/services/orchestrator/onboarding/materialize-team.js +11 -1
- package/dist/backend/backend/src/services/orchestrator/onboarding/materialize-team.js.map +1 -1
- package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.d.ts.map +1 -1
- package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.js +9 -9
- package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.js.map +1 -1
- package/dist/backend/backend/src/services/restart/in-flight-turn-tracker.service.d.ts +189 -0
- package/dist/backend/backend/src/services/restart/in-flight-turn-tracker.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/restart/in-flight-turn-tracker.service.js +246 -0
- package/dist/backend/backend/src/services/restart/in-flight-turn-tracker.service.js.map +1 -0
- package/dist/backend/backend/src/services/restart/interrupted-turns.d.ts +153 -0
- package/dist/backend/backend/src/services/restart/interrupted-turns.d.ts.map +1 -0
- package/dist/backend/backend/src/services/restart/interrupted-turns.js +279 -0
- package/dist/backend/backend/src/services/restart/interrupted-turns.js.map +1 -0
- package/dist/backend/backend/src/services/restart/restart-drain.service.d.ts +176 -0
- package/dist/backend/backend/src/services/restart/restart-drain.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/restart/restart-drain.service.js +298 -0
- package/dist/backend/backend/src/services/restart/restart-drain.service.js.map +1 -0
- package/dist/backend/backend/src/services/restart/turn-probe.d.ts +52 -0
- package/dist/backend/backend/src/services/restart/turn-probe.d.ts.map +1 -0
- package/dist/backend/backend/src/services/restart/turn-probe.js +61 -0
- package/dist/backend/backend/src/services/restart/turn-probe.js.map +1 -0
- package/dist/backend/backend/src/services/session/pty/node-pty-install.utils.d.ts +70 -0
- package/dist/backend/backend/src/services/session/pty/node-pty-install.utils.d.ts.map +1 -0
- package/dist/backend/backend/src/services/session/pty/node-pty-install.utils.js +105 -0
- package/dist/backend/backend/src/services/session/pty/node-pty-install.utils.js.map +1 -0
- package/dist/backend/backend/src/services/session/pty/pty-session.d.ts +2 -0
- package/dist/backend/backend/src/services/session/pty/pty-session.d.ts.map +1 -1
- package/dist/backend/backend/src/services/session/pty/pty-session.js +53 -1
- package/dist/backend/backend/src/services/session/pty/pty-session.js.map +1 -1
- package/dist/backend/backend/src/services/session/session-binding.d.ts +125 -0
- package/dist/backend/backend/src/services/session/session-binding.d.ts.map +1 -0
- package/dist/backend/backend/src/services/session/session-binding.js +183 -0
- package/dist/backend/backend/src/services/session/session-binding.js.map +1 -0
- package/dist/backend/backend/src/services/session/session-handoff.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/session/session-handoff.service.js +19 -0
- package/dist/backend/backend/src/services/session/session-handoff.service.js.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-agent-dm.service.d.ts +10 -0
- 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 +37 -1
- package/dist/backend/backend/src/services/slack/slack-agent-dm.service.js.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-cloud-config.service.d.ts +4 -3
- package/dist/backend/backend/src/services/slack/slack-cloud-config.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-cloud-config.service.js +4 -3
- package/dist/backend/backend/src/services/slack/slack-cloud-config.service.js.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-initializer.d.ts +72 -7
- package/dist/backend/backend/src/services/slack/slack-initializer.d.ts.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-initializer.js +185 -23
- package/dist/backend/backend/src/services/slack/slack-initializer.js.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.d.ts +4 -45
- 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 +57 -190
- package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.js.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-source-preference.service.d.ts +59 -0
- package/dist/backend/backend/src/services/slack/slack-source-preference.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/slack/slack-source-preference.service.js +69 -0
- package/dist/backend/backend/src/services/slack/slack-source-preference.service.js.map +1 -0
- package/dist/backend/backend/src/services/slack/slack-team-channel.service.d.ts +18 -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 +64 -3
- package/dist/backend/backend/src/services/slack/slack-team-channel.service.js.map +1 -1
- package/dist/backend/backend/src/services/slack/slack.service.d.ts +33 -1
- package/dist/backend/backend/src/services/slack/slack.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/slack/slack.service.js +129 -4
- package/dist/backend/backend/src/services/slack/slack.service.js.map +1 -1
- package/dist/backend/backend/src/services/task-pool/pool-archive-migration.d.ts +108 -0
- package/dist/backend/backend/src/services/task-pool/pool-archive-migration.d.ts.map +1 -0
- package/dist/backend/backend/src/services/task-pool/pool-archive-migration.js +193 -0
- package/dist/backend/backend/src/services/task-pool/pool-archive-migration.js.map +1 -0
- package/dist/backend/backend/src/services/task-pool/pool-storage.d.ts +15 -0
- package/dist/backend/backend/src/services/task-pool/pool-storage.d.ts.map +1 -1
- package/dist/backend/backend/src/services/task-pool/pool-storage.js +30 -0
- package/dist/backend/backend/src/services/task-pool/pool-storage.js.map +1 -1
- package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts +41 -1
- 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 +55 -1
- package/dist/backend/backend/src/services/task-pool/task-pool.service.js.map +1 -1
- package/dist/backend/backend/src/services/telegram/telegram-orchestrator-bridge.d.ts +7 -0
- package/dist/backend/backend/src/services/telegram/telegram-orchestrator-bridge.d.ts.map +1 -1
- package/dist/backend/backend/src/services/telegram/telegram-orchestrator-bridge.js +32 -1
- package/dist/backend/backend/src/services/telegram/telegram-orchestrator-bridge.js.map +1 -1
- 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 +4 -3
- package/dist/backend/backend/src/services/v3/agent-auto-claim.service.js.map +1 -1
- package/dist/backend/backend/src/services/v3/request-decompose.subscriber.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/request-decompose.subscriber.js +12 -0
- package/dist/backend/backend/src/services/v3/request-decompose.subscriber.js.map +1 -1
- package/dist/backend/backend/src/services/v3/request.service.d.ts +7 -0
- package/dist/backend/backend/src/services/v3/request.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/request.service.js +17 -0
- package/dist/backend/backend/src/services/v3/request.service.js.map +1 -1
- package/dist/backend/backend/src/services/v3/ticket-channel-hooks.d.ts +279 -0
- package/dist/backend/backend/src/services/v3/ticket-channel-hooks.d.ts.map +1 -0
- package/dist/backend/backend/src/services/v3/ticket-channel-hooks.js +458 -0
- package/dist/backend/backend/src/services/v3/ticket-channel-hooks.js.map +1 -0
- package/dist/backend/backend/src/services/v3/ticket-intake.service.d.ts +376 -0
- package/dist/backend/backend/src/services/v3/ticket-intake.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/v3/ticket-intake.service.js +566 -0
- package/dist/backend/backend/src/services/v3/ticket-intake.service.js.map +1 -0
- package/dist/backend/backend/src/services/v3/tl-auto-verify.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/tl-auto-verify.service.js +3 -3
- package/dist/backend/backend/src/services/v3/tl-auto-verify.service.js.map +1 -1
- package/dist/backend/backend/src/services/v3/trigger-engine.service.d.ts +28 -4
- package/dist/backend/backend/src/services/v3/trigger-engine.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/trigger-engine.service.js +40 -10
- package/dist/backend/backend/src/services/v3/trigger-engine.service.js.map +1 -1
- package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.d.ts +1 -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 +3 -3
- package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.js.map +1 -1
- package/dist/backend/backend/src/types/slack.types.d.ts +29 -0
- package/dist/backend/backend/src/types/slack.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/slack.types.js.map +1 -1
- package/dist/backend/backend/src/types/thread-status.types.d.ts +26 -0
- package/dist/backend/backend/src/types/thread-status.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/thread-status.types.js +17 -0
- package/dist/backend/backend/src/types/thread-status.types.js.map +1 -1
- package/dist/backend/backend/src/types/v2/index.d.ts +3 -2
- package/dist/backend/backend/src/types/v2/index.d.ts.map +1 -1
- package/dist/backend/backend/src/types/v2/index.js +1 -1
- package/dist/backend/backend/src/types/v2/index.js.map +1 -1
- package/dist/backend/backend/src/types/v2/request.types.d.ts +39 -3
- package/dist/backend/backend/src/types/v2/request.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/v2/request.types.js +11 -2
- package/dist/backend/backend/src/types/v2/request.types.js.map +1 -1
- package/dist/backend/backend/src/types/v2/ticket.types.d.ts +173 -0
- package/dist/backend/backend/src/types/v2/ticket.types.d.ts.map +1 -0
- package/dist/backend/backend/src/types/v2/ticket.types.js +203 -0
- package/dist/backend/backend/src/types/v2/ticket.types.js.map +1 -0
- package/dist/backend/backend/src/utils/agent-caller.utils.d.ts +26 -0
- package/dist/backend/backend/src/utils/agent-caller.utils.d.ts.map +1 -1
- package/dist/backend/backend/src/utils/agent-caller.utils.js +40 -3
- package/dist/backend/backend/src/utils/agent-caller.utils.js.map +1 -1
- package/dist/backend/backend/src/utils/gemini-auth-settings.d.ts +62 -0
- package/dist/backend/backend/src/utils/gemini-auth-settings.d.ts.map +1 -0
- package/dist/backend/backend/src/utils/gemini-auth-settings.js +104 -0
- package/dist/backend/backend/src/utils/gemini-auth-settings.js.map +1 -0
- package/dist/backend/backend/src/utils/local-api-url.utils.d.ts +56 -0
- package/dist/backend/backend/src/utils/local-api-url.utils.d.ts.map +1 -0
- package/dist/backend/backend/src/utils/local-api-url.utils.js +80 -0
- package/dist/backend/backend/src/utils/local-api-url.utils.js.map +1 -0
- package/dist/backend/build-info.json +2 -2
- package/dist/backend/config/constants.d.ts +40 -0
- package/dist/backend/config/constants.d.ts.map +1 -1
- package/dist/backend/config/constants.js +41 -0
- package/dist/backend/config/constants.js.map +1 -1
- package/dist/backend/config/index.d.ts +4 -2
- package/dist/backend/config/index.d.ts.map +1 -1
- package/dist/backend/config/index.js +2 -2
- package/dist/backend/config/index.js.map +1 -1
- package/dist/cli/backend/src/constants.d.ts +199 -2
- package/dist/cli/backend/src/constants.d.ts.map +1 -1
- package/dist/cli/backend/src/constants.js +190 -3
- package/dist/cli/backend/src/constants.js.map +1 -1
- package/dist/cli/backend/src/services/agent/active-work-briefing.service.d.ts +2 -2
- package/dist/cli/backend/src/services/agent/active-work-briefing.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/agent/active-work-briefing.service.js +3 -1
- package/dist/cli/backend/src/services/agent/active-work-briefing.service.js.map +1 -1
- package/dist/cli/backend/src/services/agent/agent-registration.service.d.ts +4 -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 +61 -4
- package/dist/cli/backend/src/services/agent/agent-registration.service.js.map +1 -1
- package/dist/cli/backend/src/services/agent/claude-runtime.service.d.ts +30 -0
- package/dist/cli/backend/src/services/agent/claude-runtime.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/agent/claude-runtime.service.js +62 -1
- package/dist/cli/backend/src/services/agent/claude-runtime.service.js.map +1 -1
- package/dist/cli/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.js +2 -1
- package/dist/cli/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.js.map +1 -1
- package/dist/cli/backend/src/services/agent/crewly-agent/types.d.ts +0 -2
- package/dist/cli/backend/src/services/agent/crewly-agent/types.d.ts.map +1 -1
- package/dist/cli/backend/src/services/agent/crewly-agent/types.js +0 -2
- package/dist/cli/backend/src/services/agent/crewly-agent/types.js.map +1 -1
- package/dist/cli/backend/src/services/agent/gemini-runtime.service.d.ts +65 -1
- package/dist/cli/backend/src/services/agent/gemini-runtime.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/agent/gemini-runtime.service.js +113 -10
- package/dist/cli/backend/src/services/agent/gemini-runtime.service.js.map +1 -1
- 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 +3 -2
- package/dist/cli/backend/src/services/agent/runtime-exit-monitor.service.js.map +1 -1
- package/dist/cli/backend/src/services/agent/runtime-startup-blocked.error.d.ts +28 -0
- package/dist/cli/backend/src/services/agent/runtime-startup-blocked.error.d.ts.map +1 -0
- package/dist/cli/backend/src/services/agent/runtime-startup-blocked.error.js +34 -0
- package/dist/cli/backend/src/services/agent/runtime-startup-blocked.error.js.map +1 -0
- package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts +6 -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 +5 -0
- package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.js.map +1 -1
- package/dist/cli/backend/src/services/chat-v2/chat-v2.service.d.ts +23 -1
- package/dist/cli/backend/src/services/chat-v2/chat-v2.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/chat-v2/chat-v2.service.js +58 -1
- package/dist/cli/backend/src/services/chat-v2/chat-v2.service.js.map +1 -1
- package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.d.ts +10 -0
- package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.d.ts.map +1 -1
- package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.js +15 -0
- package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.js.map +1 -1
- package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.d.ts +7 -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 +12 -0
- package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.js.map +1 -1
- package/dist/cli/backend/src/services/messaging/thread-status-queue.service.d.ts +36 -1
- package/dist/cli/backend/src/services/messaging/thread-status-queue.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/messaging/thread-status-queue.service.js +90 -2
- package/dist/cli/backend/src/services/messaging/thread-status-queue.service.js.map +1 -1
- package/dist/cli/backend/src/services/restart/in-flight-turn-tracker.service.d.ts +189 -0
- package/dist/cli/backend/src/services/restart/in-flight-turn-tracker.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/restart/in-flight-turn-tracker.service.js +246 -0
- package/dist/cli/backend/src/services/restart/in-flight-turn-tracker.service.js.map +1 -0
- package/dist/cli/backend/src/services/restart/restart-drain.service.d.ts +176 -0
- package/dist/cli/backend/src/services/restart/restart-drain.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/restart/restart-drain.service.js +298 -0
- package/dist/cli/backend/src/services/restart/restart-drain.service.js.map +1 -0
- package/dist/cli/backend/src/services/session/pty/node-pty-install.utils.d.ts +70 -0
- package/dist/cli/backend/src/services/session/pty/node-pty-install.utils.d.ts.map +1 -0
- package/dist/cli/backend/src/services/session/pty/node-pty-install.utils.js +105 -0
- package/dist/cli/backend/src/services/session/pty/node-pty-install.utils.js.map +1 -0
- package/dist/cli/backend/src/services/session/pty/pty-session.d.ts +2 -0
- package/dist/cli/backend/src/services/session/pty/pty-session.d.ts.map +1 -1
- package/dist/cli/backend/src/services/session/pty/pty-session.js +53 -1
- package/dist/cli/backend/src/services/session/pty/pty-session.js.map +1 -1
- package/dist/cli/backend/src/services/session/session-handoff.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/session/session-handoff.service.js +19 -0
- package/dist/cli/backend/src/services/session/session-handoff.service.js.map +1 -1
- package/dist/cli/backend/src/services/slack/slack-agent-dm.service.d.ts +10 -0
- 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 +37 -1
- 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 +4 -45
- 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 +57 -190
- 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 +18 -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 +64 -3
- package/dist/cli/backend/src/services/slack/slack-team-channel.service.js.map +1 -1
- package/dist/cli/backend/src/services/slack/slack.service.d.ts +33 -1
- package/dist/cli/backend/src/services/slack/slack.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/slack/slack.service.js +129 -4
- package/dist/cli/backend/src/services/slack/slack.service.js.map +1 -1
- package/dist/cli/backend/src/services/task-pool/pool-storage.d.ts +15 -0
- package/dist/cli/backend/src/services/task-pool/pool-storage.d.ts.map +1 -1
- package/dist/cli/backend/src/services/task-pool/pool-storage.js +30 -0
- package/dist/cli/backend/src/services/task-pool/pool-storage.js.map +1 -1
- package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts +41 -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 +55 -1
- package/dist/cli/backend/src/services/task-pool/task-pool.service.js.map +1 -1
- package/dist/cli/backend/src/services/v3/request.service.d.ts +7 -0
- package/dist/cli/backend/src/services/v3/request.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/v3/request.service.js +17 -0
- package/dist/cli/backend/src/services/v3/request.service.js.map +1 -1
- package/dist/cli/backend/src/services/v3/ticket-channel-hooks.d.ts +279 -0
- package/dist/cli/backend/src/services/v3/ticket-channel-hooks.d.ts.map +1 -0
- package/dist/cli/backend/src/services/v3/ticket-channel-hooks.js +458 -0
- package/dist/cli/backend/src/services/v3/ticket-channel-hooks.js.map +1 -0
- package/dist/cli/backend/src/services/v3/ticket-intake.service.d.ts +376 -0
- package/dist/cli/backend/src/services/v3/ticket-intake.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/v3/ticket-intake.service.js +566 -0
- package/dist/cli/backend/src/services/v3/ticket-intake.service.js.map +1 -0
- package/dist/cli/backend/src/types/slack.types.d.ts +29 -0
- package/dist/cli/backend/src/types/slack.types.d.ts.map +1 -1
- package/dist/cli/backend/src/types/slack.types.js.map +1 -1
- package/dist/cli/backend/src/types/thread-status.types.d.ts +26 -0
- package/dist/cli/backend/src/types/thread-status.types.d.ts.map +1 -1
- package/dist/cli/backend/src/types/thread-status.types.js +17 -0
- package/dist/cli/backend/src/types/thread-status.types.js.map +1 -1
- package/dist/cli/backend/src/types/v2/index.d.ts +3 -2
- package/dist/cli/backend/src/types/v2/index.d.ts.map +1 -1
- package/dist/cli/backend/src/types/v2/index.js +1 -1
- package/dist/cli/backend/src/types/v2/index.js.map +1 -1
- package/dist/cli/backend/src/types/v2/request.types.d.ts +39 -3
- package/dist/cli/backend/src/types/v2/request.types.d.ts.map +1 -1
- package/dist/cli/backend/src/types/v2/request.types.js +11 -2
- package/dist/cli/backend/src/types/v2/request.types.js.map +1 -1
- package/dist/cli/backend/src/types/v2/ticket.types.d.ts +173 -0
- package/dist/cli/backend/src/types/v2/ticket.types.d.ts.map +1 -0
- package/dist/cli/backend/src/types/v2/ticket.types.js +203 -0
- package/dist/cli/backend/src/types/v2/ticket.types.js.map +1 -0
- package/dist/cli/backend/src/utils/gemini-auth-settings.d.ts +62 -0
- package/dist/cli/backend/src/utils/gemini-auth-settings.d.ts.map +1 -0
- package/dist/cli/backend/src/utils/gemini-auth-settings.js +104 -0
- package/dist/cli/backend/src/utils/gemini-auth-settings.js.map +1 -0
- package/dist/cli/backend/src/utils/local-api-url.utils.d.ts +56 -0
- package/dist/cli/backend/src/utils/local-api-url.utils.d.ts.map +1 -0
- package/dist/cli/backend/src/utils/local-api-url.utils.js +80 -0
- package/dist/cli/backend/src/utils/local-api-url.utils.js.map +1 -0
- package/dist/cli/cli/src/commands/doctor.d.ts +73 -2
- package/dist/cli/cli/src/commands/doctor.d.ts.map +1 -1
- package/dist/cli/cli/src/commands/doctor.js +250 -8
- package/dist/cli/cli/src/commands/doctor.js.map +1 -1
- package/dist/cli/cli/src/commands/install.js +2 -0
- package/dist/cli/cli/src/commands/install.js.map +1 -1
- package/dist/cli/cli/src/commands/onboard.d.ts +68 -0
- package/dist/cli/cli/src/commands/onboard.d.ts.map +1 -1
- package/dist/cli/cli/src/commands/onboard.js +149 -18
- package/dist/cli/cli/src/commands/onboard.js.map +1 -1
- package/dist/cli/cli/src/commands/service.d.ts +6 -0
- package/dist/cli/cli/src/commands/service.d.ts.map +1 -1
- package/dist/cli/cli/src/commands/service.js +152 -50
- package/dist/cli/cli/src/commands/service.js.map +1 -1
- package/dist/cli/cli/src/commands/start.d.ts.map +1 -1
- package/dist/cli/cli/src/commands/start.js +25 -80
- package/dist/cli/cli/src/commands/start.js.map +1 -1
- package/dist/cli/cli/src/commands/status.d.ts +17 -1
- package/dist/cli/cli/src/commands/status.d.ts.map +1 -1
- package/dist/cli/cli/src/commands/status.js +133 -68
- package/dist/cli/cli/src/commands/status.js.map +1 -1
- package/dist/cli/cli/src/commands/stop.d.ts +28 -1
- package/dist/cli/cli/src/commands/stop.d.ts.map +1 -1
- package/dist/cli/cli/src/commands/stop.js +260 -100
- package/dist/cli/cli/src/commands/stop.js.map +1 -1
- package/dist/cli/cli/src/index.js +3 -2
- package/dist/cli/cli/src/index.js.map +1 -1
- package/dist/cli/cli/src/scripts/ensure-node-pty.d.ts +68 -0
- package/dist/cli/cli/src/scripts/ensure-node-pty.d.ts.map +1 -0
- package/dist/cli/cli/src/scripts/ensure-node-pty.js +167 -0
- package/dist/cli/cli/src/scripts/ensure-node-pty.js.map +1 -0
- package/dist/cli/cli/src/utils/backend-status.d.ts +175 -0
- package/dist/cli/cli/src/utils/backend-status.d.ts.map +1 -0
- package/dist/cli/cli/src/utils/backend-status.js +322 -0
- package/dist/cli/cli/src/utils/backend-status.js.map +1 -0
- package/dist/cli/cli/src/utils/marketplace.d.ts +31 -2
- package/dist/cli/cli/src/utils/marketplace.d.ts.map +1 -1
- package/dist/cli/cli/src/utils/marketplace.js +78 -20
- package/dist/cli/cli/src/utils/marketplace.js.map +1 -1
- package/dist/cli/cli/src/utils/native-toolchain.d.ts +53 -8
- package/dist/cli/cli/src/utils/native-toolchain.d.ts.map +1 -1
- package/dist/cli/cli/src/utils/native-toolchain.js +107 -15
- package/dist/cli/cli/src/utils/native-toolchain.js.map +1 -1
- package/dist/cli/cli/src/utils/process-cleanup.d.ts +38 -6
- package/dist/cli/cli/src/utils/process-cleanup.d.ts.map +1 -1
- package/dist/cli/cli/src/utils/process-cleanup.js +83 -53
- package/dist/cli/cli/src/utils/process-cleanup.js.map +1 -1
- package/dist/cli/cli/src/utils/runtime-auth.d.ts +130 -0
- package/dist/cli/cli/src/utils/runtime-auth.d.ts.map +1 -0
- package/dist/cli/cli/src/utils/runtime-auth.js +248 -0
- package/dist/cli/cli/src/utils/runtime-auth.js.map +1 -0
- package/dist/cli/cli/src/utils/safe-shutdown.d.ts +137 -0
- package/dist/cli/cli/src/utils/safe-shutdown.d.ts.map +1 -0
- package/dist/cli/cli/src/utils/safe-shutdown.js +236 -0
- package/dist/cli/cli/src/utils/safe-shutdown.js.map +1 -0
- package/dist/cli/config/constants.d.ts +40 -0
- package/dist/cli/config/constants.d.ts.map +1 -1
- package/dist/cli/config/constants.js +41 -0
- package/dist/cli/config/constants.js.map +1 -1
- package/dist/cli/config/index.d.ts +4 -2
- package/dist/cli/config/index.d.ts.map +1 -1
- package/dist/cli/config/index.js +2 -2
- package/dist/cli/config/index.js.map +1 -1
- package/frontend/dist/assets/{index-488339c1.js → index-f7b99e81.js} +222 -222
- package/frontend/dist/index.html +1 -1
- package/package.json +4 -4
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Is an AI runtime (Claude Code, Codex, Gemini CLI) installed AND logged in?
|
|
3
|
+
*
|
|
4
|
+
* `crewly doctor` used to say "All checks passed" on machines where no agent
|
|
5
|
+
* could ever start (#779). An agent needs a runtime binary on PATH and a
|
|
6
|
+
* saved login; without the login it stops at a sign-in screen.
|
|
7
|
+
*
|
|
8
|
+
* Detection only reads files and environment variable NAMES; it never prints
|
|
9
|
+
* or returns a secret value.
|
|
10
|
+
*
|
|
11
|
+
* - Claude Code: first-run setup finished (`hasCompletedOnboarding`, the #782
|
|
12
|
+
* check) plus a credential: an OAuth account in its config, an API key in
|
|
13
|
+
* its config, a credentials file, an `apiKeyHelper`, or an auth env var.
|
|
14
|
+
* - Codex: `$CODEX_HOME/auth.json` (default `~/.codex`) holds tokens or an
|
|
15
|
+
* API key (written by `codex login`).
|
|
16
|
+
* - Gemini CLI: an auth method saved in `~/.gemini/settings.json` with its
|
|
17
|
+
* credential present, or a Gemini API key Crewly can hand it — Crewly then
|
|
18
|
+
* pre-selects "Use Gemini API Key" at launch (#781).
|
|
19
|
+
*
|
|
20
|
+
* @module cli/utils/runtime-auth
|
|
21
|
+
*/
|
|
22
|
+
/** Result for one runtime. */
|
|
23
|
+
export interface RuntimeAuthStatus {
|
|
24
|
+
/** Stable id: `claude`, `codex`, `gemini` */
|
|
25
|
+
id: RuntimeId;
|
|
26
|
+
/** Display name */
|
|
27
|
+
displayName: string;
|
|
28
|
+
/** Binary on PATH */
|
|
29
|
+
installed: boolean;
|
|
30
|
+
/** Installed and a usable login was found */
|
|
31
|
+
loggedIn: boolean;
|
|
32
|
+
/** What was found (never a secret) */
|
|
33
|
+
detail: string;
|
|
34
|
+
/** Command that fixes it (install and/or log in) */
|
|
35
|
+
fix: string;
|
|
36
|
+
}
|
|
37
|
+
/** Runtimes doctor checks. */
|
|
38
|
+
export type RuntimeId = 'claude' | 'codex' | 'gemini';
|
|
39
|
+
/** Inputs, injectable for tests. */
|
|
40
|
+
export interface RuntimeAuthDeps {
|
|
41
|
+
/** PATH lookup */
|
|
42
|
+
which: (bin: string) => boolean;
|
|
43
|
+
/** Home directory */
|
|
44
|
+
homeDir: string;
|
|
45
|
+
/** Environment */
|
|
46
|
+
env: NodeJS.ProcessEnv;
|
|
47
|
+
}
|
|
48
|
+
/** Static facts about each runtime. */
|
|
49
|
+
export declare const RUNTIME_AUTH_INFO: {
|
|
50
|
+
readonly claude: {
|
|
51
|
+
readonly displayName: "Claude Code";
|
|
52
|
+
readonly bin: "claude";
|
|
53
|
+
readonly install: "npm install -g @anthropic-ai/claude-code";
|
|
54
|
+
readonly login: "run `claude` once in a terminal: choose a theme and log in (or /login)";
|
|
55
|
+
/** Env vars that authenticate Claude Code without a saved login */
|
|
56
|
+
readonly authEnv: readonly ["ANTHROPIC_API_KEY", "ANTHROPIC_AUTH_TOKEN", "CLAUDE_CODE_OAUTH_TOKEN", "CLAUDE_CODE_USE_BEDROCK", "CLAUDE_CODE_USE_VERTEX"];
|
|
57
|
+
readonly configDirEnv: "CLAUDE_CONFIG_DIR";
|
|
58
|
+
readonly configFile: ".claude.json";
|
|
59
|
+
readonly onboardedKey: "hasCompletedOnboarding";
|
|
60
|
+
/** Config keys that record a login */
|
|
61
|
+
readonly loginKeys: readonly ["oauthAccount", "primaryApiKey"];
|
|
62
|
+
/** Claude's data directory under $HOME (unless CLAUDE_CONFIG_DIR is set) */
|
|
63
|
+
readonly dataDir: ".claude";
|
|
64
|
+
/** Credentials file (Linux; macOS keeps it in the Keychain) */
|
|
65
|
+
readonly credentialsFile: ".credentials.json";
|
|
66
|
+
readonly settingsFile: "settings.json";
|
|
67
|
+
};
|
|
68
|
+
readonly codex: {
|
|
69
|
+
readonly displayName: "Codex CLI";
|
|
70
|
+
readonly bin: "codex";
|
|
71
|
+
readonly install: "npm install -g @openai/codex";
|
|
72
|
+
readonly login: "codex login (API key: printenv OPENAI_API_KEY | codex login --with-api-key)";
|
|
73
|
+
readonly homeEnv: "CODEX_HOME";
|
|
74
|
+
readonly homeDir: ".codex";
|
|
75
|
+
readonly authFile: "auth.json";
|
|
76
|
+
};
|
|
77
|
+
readonly gemini: {
|
|
78
|
+
readonly displayName: "Gemini CLI";
|
|
79
|
+
readonly bin: "gemini";
|
|
80
|
+
readonly install: "npm install -g @google/gemini-cli";
|
|
81
|
+
readonly login: "run `gemini` once and choose \"Login with Google\", or set GEMINI_API_KEY (or add a Gemini key in Crewly Settings)";
|
|
82
|
+
/** Env vars Crewly reads a Gemini key from (API_KEY_ENV_VARS.gemini) */
|
|
83
|
+
readonly keyEnv: readonly ["GOOGLE_GENERATIVE_AI_API_KEY", "GEMINI_API_KEY"];
|
|
84
|
+
readonly settingsFile: string;
|
|
85
|
+
readonly oauthCredsFile: string;
|
|
86
|
+
/** Gemini's Google-login auth types */
|
|
87
|
+
readonly googleLoginTypes: readonly ["oauth-personal", "login-with-google"];
|
|
88
|
+
/** Crewly settings file holding API keys */
|
|
89
|
+
readonly crewlySettingsFile: string;
|
|
90
|
+
/** Runtime id under apiKeys.runtimeOverrides */
|
|
91
|
+
readonly crewlyRuntimeId: "gemini-cli";
|
|
92
|
+
};
|
|
93
|
+
};
|
|
94
|
+
/**
|
|
95
|
+
* Claude Code login state.
|
|
96
|
+
*
|
|
97
|
+
* @param deps - Inputs
|
|
98
|
+
* @returns Status
|
|
99
|
+
*/
|
|
100
|
+
export declare function checkClaudeAuth(deps: RuntimeAuthDeps): RuntimeAuthStatus;
|
|
101
|
+
/**
|
|
102
|
+
* Codex CLI login state.
|
|
103
|
+
*
|
|
104
|
+
* @param deps - Inputs
|
|
105
|
+
* @returns Status
|
|
106
|
+
*/
|
|
107
|
+
export declare function checkCodexAuth(deps: RuntimeAuthDeps): RuntimeAuthStatus;
|
|
108
|
+
/**
|
|
109
|
+
* Whether Crewly has a Gemini API key it hands to Gemini sessions (settings
|
|
110
|
+
* global key or a gemini-cli runtime override, else the env).
|
|
111
|
+
*
|
|
112
|
+
* @param deps - Inputs
|
|
113
|
+
* @returns Where the key comes from, or null
|
|
114
|
+
*/
|
|
115
|
+
export declare function findCrewlyGeminiKey(deps: RuntimeAuthDeps): string | null;
|
|
116
|
+
/**
|
|
117
|
+
* Gemini CLI login state.
|
|
118
|
+
*
|
|
119
|
+
* @param deps - Inputs
|
|
120
|
+
* @returns Status
|
|
121
|
+
*/
|
|
122
|
+
export declare function checkGeminiAuth(deps: RuntimeAuthDeps): RuntimeAuthStatus;
|
|
123
|
+
/**
|
|
124
|
+
* Check every runtime.
|
|
125
|
+
*
|
|
126
|
+
* @param deps - Inputs
|
|
127
|
+
* @returns Claude, Codex, Gemini — in that order
|
|
128
|
+
*/
|
|
129
|
+
export declare function checkRuntimeAuth(deps: RuntimeAuthDeps): RuntimeAuthStatus[];
|
|
130
|
+
//# sourceMappingURL=runtime-auth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-auth.d.ts","sourceRoot":"","sources":["../../../../../cli/src/utils/runtime-auth.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AASH,8BAA8B;AAC9B,MAAM,WAAW,iBAAiB;IACjC,6CAA6C;IAC7C,EAAE,EAAE,SAAS,CAAC;IACd,mBAAmB;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,qBAAqB;IACrB,SAAS,EAAE,OAAO,CAAC;IACnB,6CAA6C;IAC7C,QAAQ,EAAE,OAAO,CAAC;IAClB,sCAAsC;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,oDAAoD;IACpD,GAAG,EAAE,MAAM,CAAC;CACZ;AAED,8BAA8B;AAC9B,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,CAAC;AAEtD,oCAAoC;AACpC,MAAM,WAAW,eAAe;IAC/B,kBAAkB;IAClB,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;IAChC,qBAAqB;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,kBAAkB;IAClB,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;CACvB;AAED,uCAAuC;AACvC,eAAO,MAAM,iBAAiB;;;;;;QAM5B,mEAAmE;;;;;QAKnE,sCAAsC;;QAEtC,4EAA4E;;QAE5E,+DAA+D;;;;;;;;;;;;;;;;;;QAkB/D,wEAAwE;;;;QAIxE,uCAAuC;;QAEvC,4CAA4C;;QAE5C,gDAAgD;;;CAGxC,CAAC;AAkDX;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,eAAe,GAAG,iBAAiB,CAgCxE;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,eAAe,GAAG,iBAAiB,CAYvE;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,eAAe,GAAG,MAAM,GAAG,IAAI,CAexE;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,eAAe,GAAG,iBAAiB,CAiCxE;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,eAAe,GAAG,iBAAiB,EAAE,CAE3E"}
|
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Is an AI runtime (Claude Code, Codex, Gemini CLI) installed AND logged in?
|
|
3
|
+
*
|
|
4
|
+
* `crewly doctor` used to say "All checks passed" on machines where no agent
|
|
5
|
+
* could ever start (#779). An agent needs a runtime binary on PATH and a
|
|
6
|
+
* saved login; without the login it stops at a sign-in screen.
|
|
7
|
+
*
|
|
8
|
+
* Detection only reads files and environment variable NAMES; it never prints
|
|
9
|
+
* or returns a secret value.
|
|
10
|
+
*
|
|
11
|
+
* - Claude Code: first-run setup finished (`hasCompletedOnboarding`, the #782
|
|
12
|
+
* check) plus a credential: an OAuth account in its config, an API key in
|
|
13
|
+
* its config, a credentials file, an `apiKeyHelper`, or an auth env var.
|
|
14
|
+
* - Codex: `$CODEX_HOME/auth.json` (default `~/.codex`) holds tokens or an
|
|
15
|
+
* API key (written by `codex login`).
|
|
16
|
+
* - Gemini CLI: an auth method saved in `~/.gemini/settings.json` with its
|
|
17
|
+
* credential present, or a Gemini API key Crewly can hand it — Crewly then
|
|
18
|
+
* pre-selects "Use Gemini API Key" at launch (#781).
|
|
19
|
+
*
|
|
20
|
+
* @module cli/utils/runtime-auth
|
|
21
|
+
*/
|
|
22
|
+
import * as fs from 'fs';
|
|
23
|
+
import * as path from 'path';
|
|
24
|
+
import { GEMINI_API_KEY_AUTH_TYPE, LEGACY_AUTH_TYPE_KEY, } from '../../../backend/src/utils/gemini-auth-settings.js';
|
|
25
|
+
/** Static facts about each runtime. */
|
|
26
|
+
export const RUNTIME_AUTH_INFO = {
|
|
27
|
+
claude: {
|
|
28
|
+
displayName: 'Claude Code',
|
|
29
|
+
bin: 'claude',
|
|
30
|
+
install: 'npm install -g @anthropic-ai/claude-code',
|
|
31
|
+
login: 'run `claude` once in a terminal: choose a theme and log in (or /login)',
|
|
32
|
+
/** Env vars that authenticate Claude Code without a saved login */
|
|
33
|
+
authEnv: ['ANTHROPIC_API_KEY', 'ANTHROPIC_AUTH_TOKEN', 'CLAUDE_CODE_OAUTH_TOKEN', 'CLAUDE_CODE_USE_BEDROCK', 'CLAUDE_CODE_USE_VERTEX'],
|
|
34
|
+
configDirEnv: 'CLAUDE_CONFIG_DIR',
|
|
35
|
+
configFile: '.claude.json',
|
|
36
|
+
onboardedKey: 'hasCompletedOnboarding',
|
|
37
|
+
/** Config keys that record a login */
|
|
38
|
+
loginKeys: ['oauthAccount', 'primaryApiKey'],
|
|
39
|
+
/** Claude's data directory under $HOME (unless CLAUDE_CONFIG_DIR is set) */
|
|
40
|
+
dataDir: '.claude',
|
|
41
|
+
/** Credentials file (Linux; macOS keeps it in the Keychain) */
|
|
42
|
+
credentialsFile: '.credentials.json',
|
|
43
|
+
settingsFile: 'settings.json',
|
|
44
|
+
},
|
|
45
|
+
codex: {
|
|
46
|
+
displayName: 'Codex CLI',
|
|
47
|
+
bin: 'codex',
|
|
48
|
+
install: 'npm install -g @openai/codex',
|
|
49
|
+
login: 'codex login (API key: printenv OPENAI_API_KEY | codex login --with-api-key)',
|
|
50
|
+
homeEnv: 'CODEX_HOME',
|
|
51
|
+
homeDir: '.codex',
|
|
52
|
+
authFile: 'auth.json',
|
|
53
|
+
},
|
|
54
|
+
gemini: {
|
|
55
|
+
displayName: 'Gemini CLI',
|
|
56
|
+
bin: 'gemini',
|
|
57
|
+
install: 'npm install -g @google/gemini-cli',
|
|
58
|
+
login: 'run `gemini` once and choose "Login with Google", or set GEMINI_API_KEY (or add a Gemini key in Crewly Settings)',
|
|
59
|
+
/** Env vars Crewly reads a Gemini key from (API_KEY_ENV_VARS.gemini) */
|
|
60
|
+
keyEnv: ['GOOGLE_GENERATIVE_AI_API_KEY', 'GEMINI_API_KEY'],
|
|
61
|
+
settingsFile: path.join('.gemini', 'settings.json'),
|
|
62
|
+
oauthCredsFile: path.join('.gemini', 'oauth_creds.json'),
|
|
63
|
+
/** Gemini's Google-login auth types */
|
|
64
|
+
googleLoginTypes: ['oauth-personal', 'login-with-google'],
|
|
65
|
+
/** Crewly settings file holding API keys */
|
|
66
|
+
crewlySettingsFile: path.join('.crewly', 'settings.json'),
|
|
67
|
+
/** Runtime id under apiKeys.runtimeOverrides */
|
|
68
|
+
crewlyRuntimeId: 'gemini-cli',
|
|
69
|
+
},
|
|
70
|
+
};
|
|
71
|
+
/**
|
|
72
|
+
* Read and parse a JSON object file.
|
|
73
|
+
*
|
|
74
|
+
* @param file - Path
|
|
75
|
+
* @returns The object, or null when missing / unreadable / not an object
|
|
76
|
+
*/
|
|
77
|
+
function readJsonObject(file) {
|
|
78
|
+
try {
|
|
79
|
+
const parsed = JSON.parse(fs.readFileSync(file, 'utf-8'));
|
|
80
|
+
return parsed !== null && typeof parsed === 'object' && !Array.isArray(parsed) ? parsed : null;
|
|
81
|
+
}
|
|
82
|
+
catch {
|
|
83
|
+
return null;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Whether a value is present (non-empty string or non-null object).
|
|
88
|
+
*
|
|
89
|
+
* @param value - Candidate
|
|
90
|
+
* @returns True when set
|
|
91
|
+
*/
|
|
92
|
+
function isSet(value) {
|
|
93
|
+
if (typeof value === 'string')
|
|
94
|
+
return value.trim().length > 0;
|
|
95
|
+
return value !== null && typeof value === 'object';
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* First env var name (from `names`) that has a value.
|
|
99
|
+
*
|
|
100
|
+
* @param env - Environment
|
|
101
|
+
* @param names - Candidate names
|
|
102
|
+
* @returns The name, or null
|
|
103
|
+
*/
|
|
104
|
+
function firstSetEnv(env, names) {
|
|
105
|
+
return names.find((name) => isSet(env[name])) ?? null;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Fix command: install (when missing) and log in.
|
|
109
|
+
*
|
|
110
|
+
* @param info - Runtime facts
|
|
111
|
+
* @param installed - Binary present
|
|
112
|
+
* @returns Command text
|
|
113
|
+
*/
|
|
114
|
+
function fixFor(info, installed) {
|
|
115
|
+
return installed ? info.login : `${info.install}, then ${info.login}`;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Claude Code login state.
|
|
119
|
+
*
|
|
120
|
+
* @param deps - Inputs
|
|
121
|
+
* @returns Status
|
|
122
|
+
*/
|
|
123
|
+
export function checkClaudeAuth(deps) {
|
|
124
|
+
const info = RUNTIME_AUTH_INFO.claude;
|
|
125
|
+
const installed = deps.which(info.bin);
|
|
126
|
+
const base = { id: 'claude', displayName: info.displayName, installed, fix: fixFor(info, installed) };
|
|
127
|
+
if (!installed)
|
|
128
|
+
return { ...base, loggedIn: false, detail: 'not installed' };
|
|
129
|
+
// CLAUDE_CONFIG_DIR relocates everything: .claude.json, .credentials.json,
|
|
130
|
+
// settings.json. Without it: ~/.claude.json and ~/.claude/<file>.
|
|
131
|
+
const customDir = deps.env[info.configDirEnv];
|
|
132
|
+
const configDir = customDir || deps.homeDir;
|
|
133
|
+
const dataDir = customDir || path.join(deps.homeDir, info.dataDir);
|
|
134
|
+
const config = readJsonObject(path.join(configDir, info.configFile));
|
|
135
|
+
if (!config || config[info.onboardedKey] !== true) {
|
|
136
|
+
return { ...base, loggedIn: false, detail: 'installed but never set up — agents stop at its theme and login screens' };
|
|
137
|
+
}
|
|
138
|
+
const envName = firstSetEnv(deps.env, info.authEnv);
|
|
139
|
+
const configKey = info.loginKeys.find((key) => isSet(config[key]));
|
|
140
|
+
const credentials = fs.existsSync(path.join(dataDir, info.credentialsFile));
|
|
141
|
+
const settings = readJsonObject(path.join(dataDir, info.settingsFile));
|
|
142
|
+
const helper = settings ? isSet(settings.apiKeyHelper) : false;
|
|
143
|
+
const source = configKey === 'oauthAccount' ? 'account login'
|
|
144
|
+
: configKey ? 'API key login'
|
|
145
|
+
: credentials ? 'credentials file'
|
|
146
|
+
: helper ? 'apiKeyHelper'
|
|
147
|
+
: envName ? `$${envName}`
|
|
148
|
+
: null;
|
|
149
|
+
if (!source) {
|
|
150
|
+
return { ...base, loggedIn: false, detail: 'set up, but no login found (logged out?)', fix: 'run `claude` and log in with /login' };
|
|
151
|
+
}
|
|
152
|
+
return { ...base, loggedIn: true, detail: `set up and logged in (${source})` };
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Codex CLI login state.
|
|
156
|
+
*
|
|
157
|
+
* @param deps - Inputs
|
|
158
|
+
* @returns Status
|
|
159
|
+
*/
|
|
160
|
+
export function checkCodexAuth(deps) {
|
|
161
|
+
const info = RUNTIME_AUTH_INFO.codex;
|
|
162
|
+
const installed = deps.which(info.bin);
|
|
163
|
+
const base = { id: 'codex', displayName: info.displayName, installed, fix: fixFor(info, installed) };
|
|
164
|
+
if (!installed)
|
|
165
|
+
return { ...base, loggedIn: false, detail: 'not installed' };
|
|
166
|
+
const codexHome = deps.env[info.homeEnv] || path.join(deps.homeDir, info.homeDir);
|
|
167
|
+
const authFile = path.join(codexHome, info.authFile);
|
|
168
|
+
const auth = readJsonObject(authFile);
|
|
169
|
+
if (auth && isSet(auth.tokens))
|
|
170
|
+
return { ...base, loggedIn: true, detail: 'logged in (ChatGPT account)' };
|
|
171
|
+
if (auth && isSet(auth.OPENAI_API_KEY))
|
|
172
|
+
return { ...base, loggedIn: true, detail: 'logged in (API key)' };
|
|
173
|
+
return { ...base, loggedIn: false, detail: `installed but not logged in (no login in ${authFile})` };
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Whether Crewly has a Gemini API key it hands to Gemini sessions (settings
|
|
177
|
+
* global key or a gemini-cli runtime override, else the env).
|
|
178
|
+
*
|
|
179
|
+
* @param deps - Inputs
|
|
180
|
+
* @returns Where the key comes from, or null
|
|
181
|
+
*/
|
|
182
|
+
export function findCrewlyGeminiKey(deps) {
|
|
183
|
+
const info = RUNTIME_AUTH_INFO.gemini;
|
|
184
|
+
const settings = readJsonObject(path.join(deps.homeDir, info.crewlySettingsFile));
|
|
185
|
+
const apiKeys = settings && typeof settings.apiKeys === 'object' && settings.apiKeys !== null
|
|
186
|
+
? settings.apiKeys
|
|
187
|
+
: null;
|
|
188
|
+
if (apiKeys) {
|
|
189
|
+
const overrides = (apiKeys.runtimeOverrides ?? {});
|
|
190
|
+
const override = overrides[info.crewlyRuntimeId]?.gemini;
|
|
191
|
+
if (override && override.source === 'custom' && isSet(override.key))
|
|
192
|
+
return 'Crewly settings (Gemini runtime key)';
|
|
193
|
+
const global = (apiKeys.global ?? {});
|
|
194
|
+
if (isSet(global.gemini))
|
|
195
|
+
return 'Crewly settings';
|
|
196
|
+
}
|
|
197
|
+
const envName = firstSetEnv(deps.env, info.keyEnv);
|
|
198
|
+
return envName ? `$${envName}` : null;
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Gemini CLI login state.
|
|
202
|
+
*
|
|
203
|
+
* @param deps - Inputs
|
|
204
|
+
* @returns Status
|
|
205
|
+
*/
|
|
206
|
+
export function checkGeminiAuth(deps) {
|
|
207
|
+
const info = RUNTIME_AUTH_INFO.gemini;
|
|
208
|
+
const installed = deps.which(info.bin);
|
|
209
|
+
const base = { id: 'gemini', displayName: info.displayName, installed, fix: fixFor(info, installed) };
|
|
210
|
+
if (!installed)
|
|
211
|
+
return { ...base, loggedIn: false, detail: 'not installed' };
|
|
212
|
+
const settings = readJsonObject(path.join(deps.homeDir, info.settingsFile));
|
|
213
|
+
const security = (settings?.security ?? {});
|
|
214
|
+
const auth = (security.auth ?? {});
|
|
215
|
+
const selected = [auth.selectedType, settings?.[LEGACY_AUTH_TYPE_KEY]].find((v) => typeof v === 'string' && v.length > 0) ?? null;
|
|
216
|
+
const key = findCrewlyGeminiKey(deps);
|
|
217
|
+
if (selected && info.googleLoginTypes.includes(selected)) {
|
|
218
|
+
return fs.existsSync(path.join(deps.homeDir, info.oauthCredsFile))
|
|
219
|
+
? { ...base, loggedIn: true, detail: 'logged in (Google account)' }
|
|
220
|
+
: { ...base, loggedIn: false, detail: 'set to "Login with Google", but no saved Google login', fix: 'run `gemini` once and sign in with Google' };
|
|
221
|
+
}
|
|
222
|
+
if (selected === GEMINI_API_KEY_AUTH_TYPE || !selected) {
|
|
223
|
+
if (key) {
|
|
224
|
+
return {
|
|
225
|
+
...base,
|
|
226
|
+
loggedIn: true,
|
|
227
|
+
detail: selected ? `API key (${key})` : `API key (${key}); Crewly selects "Use Gemini API Key" at launch`,
|
|
228
|
+
};
|
|
229
|
+
}
|
|
230
|
+
return {
|
|
231
|
+
...base,
|
|
232
|
+
loggedIn: false,
|
|
233
|
+
detail: selected ? 'set to use an API key, but no Gemini API key is configured' : 'no login and no Gemini API key',
|
|
234
|
+
};
|
|
235
|
+
}
|
|
236
|
+
// Vertex AI, Cloud Shell, compute credentials: configured outside Gemini's files.
|
|
237
|
+
return { ...base, loggedIn: true, detail: `auth method "${selected}" configured` };
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Check every runtime.
|
|
241
|
+
*
|
|
242
|
+
* @param deps - Inputs
|
|
243
|
+
* @returns Claude, Codex, Gemini — in that order
|
|
244
|
+
*/
|
|
245
|
+
export function checkRuntimeAuth(deps) {
|
|
246
|
+
return [checkClaudeAuth(deps), checkCodexAuth(deps), checkGeminiAuth(deps)];
|
|
247
|
+
}
|
|
248
|
+
//# sourceMappingURL=runtime-auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-auth.js","sourceRoot":"","sources":["../../../../../cli/src/utils/runtime-auth.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EACN,wBAAwB,EACxB,oBAAoB,GACpB,MAAM,oDAAoD,CAAC;AA+B5D,uCAAuC;AACvC,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAChC,MAAM,EAAE;QACP,WAAW,EAAE,aAAa;QAC1B,GAAG,EAAE,QAAQ;QACb,OAAO,EAAE,0CAA0C;QACnD,KAAK,EAAE,wEAAwE;QAC/E,mEAAmE;QACnE,OAAO,EAAE,CAAC,mBAAmB,EAAE,sBAAsB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,wBAAwB,CAAC;QACtI,YAAY,EAAE,mBAAmB;QACjC,UAAU,EAAE,cAAc;QAC1B,YAAY,EAAE,wBAAwB;QACtC,sCAAsC;QACtC,SAAS,EAAE,CAAC,cAAc,EAAE,eAAe,CAAC;QAC5C,4EAA4E;QAC5E,OAAO,EAAE,SAAS;QAClB,+DAA+D;QAC/D,eAAe,EAAE,mBAAmB;QACpC,YAAY,EAAE,eAAe;KAC7B;IACD,KAAK,EAAE;QACN,WAAW,EAAE,WAAW;QACxB,GAAG,EAAE,OAAO;QACZ,OAAO,EAAE,8BAA8B;QACvC,KAAK,EAAE,+EAA+E;QACtF,OAAO,EAAE,YAAY;QACrB,OAAO,EAAE,QAAQ;QACjB,QAAQ,EAAE,WAAW;KACrB;IACD,MAAM,EAAE;QACP,WAAW,EAAE,YAAY;QACzB,GAAG,EAAE,QAAQ;QACb,OAAO,EAAE,mCAAmC;QAC5C,KAAK,EAAE,kHAAkH;QACzH,wEAAwE;QACxE,MAAM,EAAE,CAAC,8BAA8B,EAAE,gBAAgB,CAAC;QAC1D,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,eAAe,CAAC;QACnD,cAAc,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,kBAAkB,CAAC;QACxD,uCAAuC;QACvC,gBAAgB,EAAE,CAAC,gBAAgB,EAAE,mBAAmB,CAAC;QACzD,4CAA4C;QAC5C,kBAAkB,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,eAAe,CAAC;QACzD,gDAAgD;QAChD,eAAe,EAAE,YAAY;KAC7B;CACQ,CAAC;AAEX;;;;;GAKG;AACH,SAAS,cAAc,CAAC,IAAY;IACnC,IAAI,CAAC;QACJ,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;QACnE,OAAO,MAAM,KAAK,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAE,MAAkC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC7H,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,IAAI,CAAC;IACb,CAAC;AACF,CAAC;AAED;;;;;GAKG;AACH,SAAS,KAAK,CAAC,KAAc;IAC5B,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;IAC9D,OAAO,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC;AACpD,CAAC;AAED;;;;;;GAMG;AACH,SAAS,WAAW,CAAC,GAAsB,EAAE,KAAwB;IACpE,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;AACvD,CAAC;AAED;;;;;;GAMG;AACH,SAAS,MAAM,CAAC,IAAwC,EAAE,SAAkB;IAC3E,OAAO,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,UAAU,IAAI,CAAC,KAAK,EAAE,CAAC;AACvE,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,IAAqB;IACpD,MAAM,IAAI,GAAG,iBAAiB,CAAC,MAAM,CAAC;IACtC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACvC,MAAM,IAAI,GAAG,EAAE,EAAE,EAAE,QAAiB,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,CAAC;IAC/G,IAAI,CAAC,SAAS;QAAE,OAAO,EAAE,GAAG,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC;IAE7E,2EAA2E;IAC3E,kEAAkE;IAClE,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC9C,MAAM,SAAS,GAAG,SAAS,IAAI,IAAI,CAAC,OAAO,CAAC;IAC5C,MAAM,OAAO,GAAG,SAAS,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IACnE,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;IACrE,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,IAAI,EAAE,CAAC;QACnD,OAAO,EAAE,GAAG,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,yEAAyE,EAAE,CAAC;IACxH,CAAC;IAED,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IACpD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACnE,MAAM,WAAW,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;IAC5E,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;IACvE,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAE/D,MAAM,MAAM,GAAG,SAAS,KAAK,cAAc,CAAC,CAAC,CAAC,eAAe;QAC5D,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,eAAe;YAC5B,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,kBAAkB;gBACjC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc;oBACxB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,OAAO,EAAE;wBACxB,CAAC,CAAC,IAAI,CAAC;IACZ,IAAI,CAAC,MAAM,EAAE,CAAC;QACb,OAAO,EAAE,GAAG,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,0CAA0C,EAAE,GAAG,EAAE,qCAAqC,EAAE,CAAC;IACrI,CAAC;IACD,OAAO,EAAE,GAAG,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,yBAAyB,MAAM,GAAG,EAAE,CAAC;AAChF,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,IAAqB;IACnD,MAAM,IAAI,GAAG,iBAAiB,CAAC,KAAK,CAAC;IACrC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACvC,MAAM,IAAI,GAAG,EAAE,EAAE,EAAE,OAAgB,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,CAAC;IAC9G,IAAI,CAAC,SAAS;QAAE,OAAO,EAAE,GAAG,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC;IAE7E,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IAClF,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IACrD,MAAM,IAAI,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;IACtC,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;QAAE,OAAO,EAAE,GAAG,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,6BAA6B,EAAE,CAAC;IAC1G,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC;QAAE,OAAO,EAAE,GAAG,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,qBAAqB,EAAE,CAAC;IAC1G,OAAO,EAAE,GAAG,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,4CAA4C,QAAQ,GAAG,EAAE,CAAC;AACtG,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAqB;IACxD,MAAM,IAAI,GAAG,iBAAiB,CAAC,MAAM,CAAC;IACtC,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC;IAClF,MAAM,OAAO,GAAG,QAAQ,IAAI,OAAO,QAAQ,CAAC,OAAO,KAAK,QAAQ,IAAI,QAAQ,CAAC,OAAO,KAAK,IAAI;QAC5F,CAAC,CAAE,QAAQ,CAAC,OAAmC;QAC/C,CAAC,CAAC,IAAI,CAAC;IACR,IAAI,OAAO,EAAE,CAAC;QACb,MAAM,SAAS,GAAG,CAAC,OAAO,CAAC,gBAAgB,IAAI,EAAE,CAAkF,CAAC;QACpI,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;QACzD,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC;YAAE,OAAO,sCAAsC,CAAC;QACnH,MAAM,MAAM,GAAG,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAA4B,CAAC;QACjE,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;YAAE,OAAO,iBAAiB,CAAC;IACpD,CAAC;IACD,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACnD,OAAO,OAAO,CAAC,CAAC,CAAC,IAAI,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACvC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,IAAqB;IACpD,MAAM,IAAI,GAAG,iBAAiB,CAAC,MAAM,CAAC;IACtC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACvC,MAAM,IAAI,GAAG,EAAE,EAAE,EAAE,QAAiB,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,CAAC;IAC/G,IAAI,CAAC,SAAS;QAAE,OAAO,EAAE,GAAG,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC;IAE7E,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;IAC5E,MAAM,QAAQ,GAAG,CAAC,QAAQ,EAAE,QAAQ,IAAI,EAAE,CAA4B,CAAC;IACvE,MAAM,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE,CAA4B,CAAC;IAC9D,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,EAAE,CAAC,oBAAoB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC;IAC/I,MAAM,GAAG,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAEtC,IAAI,QAAQ,IAAK,IAAI,CAAC,gBAAsC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACjF,OAAO,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;YACjE,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,4BAA4B,EAAE;YACnE,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,uDAAuD,EAAE,GAAG,EAAE,2CAA2C,EAAE,CAAC;IACpJ,CAAC;IACD,IAAI,QAAQ,KAAK,wBAAwB,IAAI,CAAC,QAAQ,EAAE,CAAC;QACxD,IAAI,GAAG,EAAE,CAAC;YACT,OAAO;gBACN,GAAG,IAAI;gBACP,QAAQ,EAAE,IAAI;gBACd,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,YAAY,GAAG,GAAG,CAAC,CAAC,CAAC,YAAY,GAAG,kDAAkD;aACzG,CAAC;QACH,CAAC;QACD,OAAO;YACN,GAAG,IAAI;YACP,QAAQ,EAAE,KAAK;YACf,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,4DAA4D,CAAC,CAAC,CAAC,gCAAgC;SAClH,CAAC;IACH,CAAC;IACD,kFAAkF;IAClF,OAAO,EAAE,GAAG,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,gBAAgB,QAAQ,cAAc,EAAE,CAAC;AACpF,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAqB;IACrD,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,cAAc,CAAC,IAAI,CAAC,EAAE,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC;AAC7E,CAAC"}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Safe-shutdown helpers for the CLI.
|
|
3
|
+
*
|
|
4
|
+
* The backend drains in-flight agent turns on SIGTERM/SIGINT for up to
|
|
5
|
+
* CREWLY_RESTART_DRAIN_MS (default 120s). Every CLI path that stops it —
|
|
6
|
+
* the `start` parent's signal forwarding, `crewly stop`, `crewly service
|
|
7
|
+
* stop|restart|upgrade` — must wait at least that long (plus a margin for the
|
|
8
|
+
* rest of shutdown) before escalating to SIGKILL or starting a new instance,
|
|
9
|
+
* or it cuts off the very turns the drain is protecting.
|
|
10
|
+
*
|
|
11
|
+
* @module cli/utils/safe-shutdown
|
|
12
|
+
*/
|
|
13
|
+
/** Pause between the two signals of a "skip the drain" request (ms), beyond the backend's dedup window. */
|
|
14
|
+
export declare const SKIP_DRAIN_SIGNAL_GAP_MS: number;
|
|
15
|
+
/** One busy agent as reported by the backend. */
|
|
16
|
+
export interface ReadinessBusyAgent {
|
|
17
|
+
session: string;
|
|
18
|
+
since: string;
|
|
19
|
+
messagePreview: string;
|
|
20
|
+
}
|
|
21
|
+
/** Body of GET /api/system/restart-readiness. */
|
|
22
|
+
export interface RestartReadiness {
|
|
23
|
+
safe: boolean;
|
|
24
|
+
busyAgents: ReadinessBusyAgent[];
|
|
25
|
+
queued: number;
|
|
26
|
+
draining?: boolean;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Resolve the backend's drain timeout from the environment.
|
|
30
|
+
*
|
|
31
|
+
* @param env - Environment
|
|
32
|
+
* @returns Drain timeout in ms (0 = drain disabled)
|
|
33
|
+
*/
|
|
34
|
+
export declare function resolveRestartDrainMs(env?: NodeJS.ProcessEnv): number;
|
|
35
|
+
/**
|
|
36
|
+
* How long a supervisor must wait after SIGTERM before it may SIGKILL.
|
|
37
|
+
*
|
|
38
|
+
* @param env - Environment
|
|
39
|
+
* @returns Drain timeout plus the shutdown margin (ms)
|
|
40
|
+
*
|
|
41
|
+
* @example
|
|
42
|
+
* ```typescript
|
|
43
|
+
* resolveShutdownBudgetMs({}); // 150000
|
|
44
|
+
* ```
|
|
45
|
+
*/
|
|
46
|
+
export declare function resolveShutdownBudgetMs(env?: NodeJS.ProcessEnv): number;
|
|
47
|
+
/**
|
|
48
|
+
* Validate an unknown JSON body as restart readiness.
|
|
49
|
+
*
|
|
50
|
+
* @param body - Parsed response body
|
|
51
|
+
* @returns The readiness, or null if the shape does not match
|
|
52
|
+
*/
|
|
53
|
+
export declare function parseReadiness(body: unknown): RestartReadiness | null;
|
|
54
|
+
/**
|
|
55
|
+
* Ask the running backend whether a restart would cut an agent off.
|
|
56
|
+
*
|
|
57
|
+
* @param port - Backend web port
|
|
58
|
+
* @returns Readiness, or null when the backend does not answer (not running, older version)
|
|
59
|
+
*/
|
|
60
|
+
export declare function fetchRestartReadiness(port?: number | string): Promise<RestartReadiness | null>;
|
|
61
|
+
/**
|
|
62
|
+
* Human-readable lines describing readiness, for printing before a stop.
|
|
63
|
+
*
|
|
64
|
+
* @param readiness - Readiness from the backend
|
|
65
|
+
* @param drainMs - Drain timeout in effect
|
|
66
|
+
* @returns Lines to print
|
|
67
|
+
*/
|
|
68
|
+
export declare function describeReadiness(readiness: RestartReadiness, drainMs: number): string[];
|
|
69
|
+
/** Dependencies of {@link waitForPidExit}. */
|
|
70
|
+
export interface WaitForExitDeps {
|
|
71
|
+
/** Whether the pid is alive */
|
|
72
|
+
isAlive: (pid: number) => boolean | Promise<boolean>;
|
|
73
|
+
/** Sleep */
|
|
74
|
+
sleep?: (ms: number) => Promise<void>;
|
|
75
|
+
/** Clock */
|
|
76
|
+
now?: () => number;
|
|
77
|
+
/** Progress callback, called about every PROGRESS_INTERVAL_MS */
|
|
78
|
+
onProgress?: (waitedMs: number) => void;
|
|
79
|
+
/** Poll interval (ms) */
|
|
80
|
+
pollMs?: number;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Wait for a process to exit.
|
|
84
|
+
*
|
|
85
|
+
* @param pid - Process id
|
|
86
|
+
* @param timeoutMs - Maximum wait
|
|
87
|
+
* @param deps - Liveness check and test hooks
|
|
88
|
+
* @returns True if the process exited within the timeout
|
|
89
|
+
*/
|
|
90
|
+
export declare function waitForPidExit(pid: number, timeoutMs: number, deps: WaitForExitDeps): Promise<boolean>;
|
|
91
|
+
/**
|
|
92
|
+
* Liveness check via signal 0.
|
|
93
|
+
*
|
|
94
|
+
* @param pid - Process id
|
|
95
|
+
* @returns True if the process exists
|
|
96
|
+
*/
|
|
97
|
+
export declare function isPidAlive(pid: number): boolean;
|
|
98
|
+
/** The part of a ChildProcess the shutdown handler uses. */
|
|
99
|
+
export interface ShutdownChild {
|
|
100
|
+
/** True once any signal was sent (Node sets it after a successful kill()) — not "dead" */
|
|
101
|
+
killed: boolean;
|
|
102
|
+
exitCode: number | null;
|
|
103
|
+
signalCode?: NodeJS.Signals | null;
|
|
104
|
+
kill(signal?: NodeJS.Signals | number): boolean;
|
|
105
|
+
once(event: 'exit', listener: (...args: unknown[]) => void): unknown;
|
|
106
|
+
}
|
|
107
|
+
/** Options for {@link createChildShutdownHandler}. */
|
|
108
|
+
export interface ChildShutdownOptions {
|
|
109
|
+
/** Wait after SIGTERM before SIGKILL (ms) — the backend's drain plus margin */
|
|
110
|
+
budgetMs: number;
|
|
111
|
+
/** Progress / status output */
|
|
112
|
+
log: (message: string) => void;
|
|
113
|
+
/** Called once every child is gone (or the hard cap passed) */
|
|
114
|
+
exit: () => void;
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Build the signal handler for a parent process (the `crewly start` CLI)
|
|
118
|
+
* supervising backend children.
|
|
119
|
+
*
|
|
120
|
+
* First signal: SIGTERM each live child, SIGKILL only after `budgetMs`, and
|
|
121
|
+
* exit once all children are gone. Later signals are forwarded as another
|
|
122
|
+
* SIGTERM, which the backend reads as "stop draining now" — so a second
|
|
123
|
+
* `kill -TERM <cli pid>` or Ctrl+C still skips the drain rather than being
|
|
124
|
+
* swallowed here.
|
|
125
|
+
*
|
|
126
|
+
* @param getChildren - Returns the children to stop (the restart loop swaps them)
|
|
127
|
+
* @param options - Budget, logger, exit hook
|
|
128
|
+
* @returns Signal handler
|
|
129
|
+
*
|
|
130
|
+
* @example
|
|
131
|
+
* ```typescript
|
|
132
|
+
* const onSignal = createChildShutdownHandler(() => active, { budgetMs: resolveShutdownBudgetMs(), log, exit: () => process.exit(0) });
|
|
133
|
+
* process.on('SIGTERM', onSignal);
|
|
134
|
+
* ```
|
|
135
|
+
*/
|
|
136
|
+
export declare function createChildShutdownHandler(getChildren: () => readonly (ShutdownChild | null | undefined)[], options: ChildShutdownOptions): () => void;
|
|
137
|
+
//# sourceMappingURL=safe-shutdown.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"safe-shutdown.d.ts","sourceRoot":"","sources":["../../../../../cli/src/utils/safe-shutdown.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAWH,2GAA2G;AAC3G,eAAO,MAAM,wBAAwB,QAAsD,CAAC;AAE5F,iDAAiD;AACjD,MAAM,WAAW,kBAAkB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;CACvB;AAED,iDAAiD;AACjD,MAAM,WAAW,gBAAgB;IAChC,IAAI,EAAE,OAAO,CAAC;IACd,UAAU,EAAE,kBAAkB,EAAE,CAAC;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAMlF;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,uBAAuB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAEpF;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,OAAO,GAAG,gBAAgB,GAAG,IAAI,CAYrE;AAED;;;;;GAKG;AACH,wBAAsB,qBAAqB,CAAC,IAAI,GAAE,MAAM,GAAG,MAA4D,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CASzJ;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAYxF;AAED,8CAA8C;AAC9C,MAAM,WAAW,eAAe;IAC/B,+BAA+B;IAC/B,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACrD,YAAY;IACZ,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,YAAY;IACZ,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,iEAAiE;IACjE,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,yBAAyB;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;GAOG;AACH,wBAAsB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC,CAgB5G;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAQ/C;AAKD,4DAA4D;AAC5D,MAAM,WAAW,aAAa;IAC7B,0FAA0F;IAC1F,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;IACnC,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC;IAChD,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,GAAG,OAAO,CAAC;CACrE;AAED,sDAAsD;AACtD,MAAM,WAAW,oBAAoB;IACpC,+EAA+E;IAC/E,QAAQ,EAAE,MAAM,CAAC;IACjB,+BAA+B;IAC/B,GAAG,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,+DAA+D;IAC/D,IAAI,EAAE,MAAM,IAAI,CAAC;CACjB;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,0BAA0B,CACzC,WAAW,EAAE,MAAM,SAAS,CAAC,aAAa,GAAG,IAAI,GAAG,SAAS,CAAC,EAAE,EAChE,OAAO,EAAE,oBAAoB,GAC3B,MAAM,IAAI,CAiEZ"}
|