@cydm/happy-elves 0.1.0-beta.7 → 0.1.0-beta.71
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 +9 -1
- package/apps/cli/dist/commands/account.d.ts +4 -0
- package/apps/cli/dist/commands/account.js +349 -35
- package/apps/cli/dist/commands/app.js +32 -21
- package/apps/cli/dist/commands/collect.js +8 -3
- package/apps/cli/dist/commands/command.js +0 -1
- package/apps/cli/dist/commands/config.js +12 -5
- package/apps/cli/dist/commands/daemon.js +386 -87
- package/apps/cli/dist/commands/gateway.d.ts +2 -0
- package/apps/cli/dist/commands/gateway.js +1252 -0
- package/apps/cli/dist/commands/interaction.d.ts +2 -0
- package/apps/cli/dist/commands/interaction.js +416 -0
- package/apps/cli/dist/commands/lib/args.js +86 -2
- package/apps/cli/dist/commands/lib/audit.js +2 -2
- package/apps/cli/dist/commands/lib/bootstrap-config.d.ts +26 -13
- package/apps/cli/dist/commands/lib/bootstrap-config.js +94 -80
- package/apps/cli/dist/commands/lib/bootstrap-daemon.d.ts +61 -10
- package/apps/cli/dist/commands/lib/bootstrap-daemon.js +408 -30
- package/apps/cli/dist/commands/lib/bootstrap-join.d.ts +1 -0
- package/apps/cli/dist/commands/lib/bootstrap-join.js +199 -0
- package/apps/cli/dist/commands/lib/bootstrap-output.d.ts +2 -5
- package/apps/cli/dist/commands/lib/bootstrap-output.js +7 -11
- package/apps/cli/dist/commands/lib/bootstrap.js +241 -43
- package/apps/cli/dist/commands/lib/cli-exit.d.ts +6 -0
- package/apps/cli/dist/commands/lib/cli-exit.js +15 -0
- package/apps/cli/dist/commands/lib/config.d.ts +34 -3
- package/apps/cli/dist/commands/lib/config.js +781 -27
- package/apps/cli/dist/commands/lib/daemon-enrollment-intent.d.ts +47 -0
- package/apps/cli/dist/commands/lib/daemon-enrollment-intent.js +257 -0
- package/apps/cli/dist/commands/lib/doctor.d.ts +14 -0
- package/apps/cli/dist/commands/lib/doctor.js +297 -34
- package/apps/cli/dist/commands/lib/exit.d.ts +1 -0
- package/apps/cli/dist/commands/lib/exit.js +143 -14
- package/apps/cli/dist/commands/lib/index.d.ts +7 -3
- package/apps/cli/dist/commands/lib/index.js +7 -4
- package/apps/cli/dist/commands/lib/json.d.ts +2 -2
- package/apps/cli/dist/commands/lib/json.js +8 -3
- package/apps/cli/dist/commands/lib/local-daemon.d.ts +53 -8
- package/apps/cli/dist/commands/lib/local-daemon.js +168 -72
- package/apps/cli/dist/commands/lib/loop-store.d.ts +4 -0
- package/apps/cli/dist/commands/lib/loop-store.js +29 -19
- package/apps/cli/dist/commands/lib/orchestrator.d.ts +41 -0
- package/apps/cli/dist/commands/lib/orchestrator.js +205 -0
- package/apps/cli/dist/commands/lib/paths.d.ts +2 -3
- package/apps/cli/dist/commands/lib/paths.js +8 -5
- package/apps/cli/dist/commands/lib/relay-http.d.ts +5 -6
- package/apps/cli/dist/commands/lib/relay-http.js +22 -31
- package/apps/cli/dist/commands/lib/scope.d.ts +17 -5
- package/apps/cli/dist/commands/lib/scope.js +68 -12
- package/apps/cli/dist/commands/lib/session-output.d.ts +42 -1
- package/apps/cli/dist/commands/lib/session-output.js +243 -15
- package/apps/cli/dist/commands/lib/session-view.d.ts +38 -7
- package/apps/cli/dist/commands/lib/session-view.js +116 -22
- package/apps/cli/dist/commands/lib/status.js +56 -17
- package/apps/cli/dist/commands/lib/types.d.ts +48 -6
- package/apps/cli/dist/commands/lib/types.js +0 -1
- package/apps/cli/dist/commands/lib/usage.d.ts +1 -0
- package/apps/cli/dist/commands/lib/usage.js +337 -145
- package/apps/cli/dist/commands/lib/version.d.ts +8 -0
- package/apps/cli/dist/commands/lib/version.js +69 -0
- package/apps/cli/dist/commands/lib/workspace.d.ts +5 -9
- package/apps/cli/dist/commands/lib/workspace.js +52 -35
- package/apps/cli/dist/commands/loop.js +274 -117
- package/apps/cli/dist/commands/machine.js +240 -44
- package/apps/cli/dist/commands/memory.d.ts +3 -0
- package/apps/cli/dist/commands/memory.js +250 -0
- package/apps/cli/dist/commands/orchestrator.d.ts +22 -0
- package/apps/cli/dist/commands/orchestrator.js +1281 -0
- package/apps/cli/dist/commands/relay.js +37 -11
- package/apps/cli/dist/commands/remote.js +143 -27
- package/apps/cli/dist/commands/session.d.ts +26 -0
- package/apps/cli/dist/commands/session.js +922 -108
- package/apps/cli/dist/commands/skill.d.ts +10 -0
- package/apps/cli/dist/commands/skill.js +351 -0
- package/apps/cli/dist/commands/token.js +25 -3
- package/apps/cli/dist/commands/turn.d.ts +2 -0
- package/apps/cli/dist/commands/turn.js +268 -0
- package/apps/cli/dist/errors.js +0 -1
- package/apps/cli/dist/index.js +13 -3
- package/apps/cli/dist/skills/registry.d.ts +21 -0
- package/apps/cli/dist/skills/registry.js +312 -0
- package/apps/daemon/dist/account-config-lock.d.ts +14 -0
- package/apps/daemon/dist/account-config-lock.js +360 -0
- package/apps/daemon/dist/agent-interaction-ipc.d.ts +45 -0
- package/apps/daemon/dist/agent-interaction-ipc.js +578 -0
- package/apps/daemon/dist/agent-interaction-mcp.d.ts +6 -0
- package/apps/daemon/dist/agent-interaction-mcp.js +259 -0
- package/apps/daemon/dist/app.js +0 -1
- package/apps/daemon/dist/args.js +1 -2
- package/apps/daemon/dist/audit.d.ts +1 -1
- package/apps/daemon/dist/audit.js +4 -3
- package/apps/daemon/dist/cli.js +0 -1
- package/apps/daemon/dist/config.d.ts +3 -2
- package/apps/daemon/dist/config.js +91 -11
- package/apps/daemon/dist/errors.js +0 -1
- package/apps/daemon/dist/gateway/adapters.d.ts +45 -0
- package/apps/daemon/dist/gateway/adapters.js +1 -0
- package/apps/daemon/dist/gateway/commands.d.ts +3 -0
- package/apps/daemon/dist/gateway/commands.js +542 -0
- package/apps/daemon/dist/gateway/fake.d.ts +2 -0
- package/apps/daemon/dist/gateway/fake.js +24 -0
- package/apps/daemon/dist/gateway/feishu.d.ts +81 -0
- package/apps/daemon/dist/gateway/feishu.js +546 -0
- package/apps/daemon/dist/gateway/format.d.ts +9 -0
- package/apps/daemon/dist/gateway/format.js +33 -0
- package/apps/daemon/dist/gateway/runtime.d.ts +33 -0
- package/apps/daemon/dist/gateway/runtime.js +2207 -0
- package/apps/daemon/dist/gateway/store.d.ts +29 -0
- package/apps/daemon/dist/gateway/store.js +64 -0
- package/apps/daemon/dist/gateway/telegram.d.ts +9 -0
- package/apps/daemon/dist/gateway/telegram.js +387 -0
- package/apps/daemon/dist/interaction-claim-history.d.ts +4 -0
- package/apps/daemon/dist/interaction-claim-history.js +51 -0
- package/apps/daemon/dist/interaction-claim-journal.d.ts +20 -0
- package/apps/daemon/dist/interaction-claim-journal.js +139 -0
- package/apps/daemon/dist/interaction-local-state.d.ts +3 -0
- package/apps/daemon/dist/interaction-local-state.js +12 -0
- package/apps/daemon/dist/interaction-privacy.d.ts +10 -0
- package/apps/daemon/dist/interaction-privacy.js +23 -0
- package/apps/daemon/dist/interaction-prompt-redaction-cache.d.ts +7 -0
- package/apps/daemon/dist/interaction-prompt-redaction-cache.js +254 -0
- package/apps/daemon/dist/interaction-runtime.d.ts +58 -0
- package/apps/daemon/dist/interaction-runtime.js +674 -0
- package/apps/daemon/dist/lifecycle/artifacts.d.ts +44 -0
- package/apps/daemon/dist/lifecycle/artifacts.js +588 -0
- package/apps/daemon/dist/lifecycle/capability.d.ts +25 -0
- package/apps/daemon/dist/lifecycle/capability.js +290 -0
- package/apps/daemon/dist/lifecycle/detached-helper-bundle.mjs +18505 -0
- package/apps/daemon/dist/lifecycle/detached-helper-cli.d.ts +1 -0
- package/apps/daemon/dist/lifecycle/detached-helper-cli.js +11 -0
- package/apps/daemon/dist/lifecycle/errors.d.ts +3 -0
- package/apps/daemon/dist/lifecycle/errors.js +10 -0
- package/apps/daemon/dist/lifecycle/helper.d.ts +39 -0
- package/apps/daemon/dist/lifecycle/helper.js +403 -0
- package/apps/daemon/dist/lifecycle/index.d.ts +7 -0
- package/apps/daemon/dist/lifecycle/index.js +6 -0
- package/apps/daemon/dist/lifecycle/journal.d.ts +21 -0
- package/apps/daemon/dist/lifecycle/journal.js +389 -0
- package/apps/daemon/dist/lifecycle/npm.d.ts +37 -0
- package/apps/daemon/dist/lifecycle/npm.js +164 -0
- package/apps/daemon/dist/lifecycle/operation.d.ts +19 -0
- package/apps/daemon/dist/lifecycle/operation.js +175 -0
- package/apps/daemon/dist/lifecycle/relay.d.ts +5 -0
- package/apps/daemon/dist/lifecycle/relay.js +72 -0
- package/apps/daemon/dist/lifecycle/reporter.d.ts +29 -0
- package/apps/daemon/dist/lifecycle/reporter.js +402 -0
- package/apps/daemon/dist/lifecycle/restart.d.ts +127 -0
- package/apps/daemon/dist/lifecycle/restart.js +650 -0
- package/apps/daemon/dist/lifecycle/runtime.d.ts +36 -0
- package/apps/daemon/dist/lifecycle/runtime.js +210 -0
- package/apps/daemon/dist/lifecycle/types.d.ts +110 -0
- package/apps/daemon/dist/lifecycle/types.js +3 -0
- package/apps/daemon/dist/loop/handlers.d.ts +5 -0
- package/apps/daemon/dist/loop/handlers.js +406 -0
- package/apps/daemon/dist/loop/runner.js +670 -62
- package/apps/daemon/dist/loop/schedule.d.ts +34 -0
- package/apps/daemon/dist/loop/schedule.js +161 -0
- package/apps/daemon/dist/loop/store.d.ts +11 -2
- package/apps/daemon/dist/loop/store.js +119 -35
- package/apps/daemon/dist/memory/access-lifecycle.d.ts +15 -0
- package/apps/daemon/dist/memory/access-lifecycle.js +85 -0
- package/apps/daemon/dist/memory/commands.d.ts +3 -0
- package/apps/daemon/dist/memory/commands.js +184 -0
- package/apps/daemon/dist/memory/config.d.ts +7 -0
- package/apps/daemon/dist/memory/config.js +24 -0
- package/apps/daemon/dist/memory/flush.d.ts +10 -0
- package/apps/daemon/dist/memory/flush.js +158 -0
- package/apps/daemon/dist/memory/inject.d.ts +23 -0
- package/apps/daemon/dist/memory/inject.js +57 -0
- package/apps/daemon/dist/memory/instructions.d.ts +9 -0
- package/apps/daemon/dist/memory/instructions.js +47 -0
- package/apps/daemon/dist/memory/managers.d.ts +8 -0
- package/apps/daemon/dist/memory/managers.js +68 -0
- package/apps/daemon/dist/pair.js +149 -23
- package/apps/daemon/dist/paths.d.ts +10 -3
- package/apps/daemon/dist/paths.js +10 -4
- package/apps/daemon/dist/process.d.ts +44 -8
- package/apps/daemon/dist/process.js +526 -47
- package/apps/daemon/dist/relay/connection-diagnostics.d.ts +30 -0
- package/apps/daemon/dist/relay/connection-diagnostics.js +60 -0
- package/apps/daemon/dist/relay/connection.d.ts +1 -1
- package/apps/daemon/dist/relay/connection.js +218 -18
- package/apps/daemon/dist/relay/devtools.d.ts +4 -0
- package/apps/daemon/dist/relay/devtools.js +359 -0
- package/apps/daemon/dist/relay/register.d.ts +3 -0
- package/apps/daemon/dist/relay/register.js +84 -3
- package/apps/daemon/dist/relay/send.d.ts +26 -5
- package/apps/daemon/dist/relay/send.js +178 -21
- package/apps/daemon/dist/relay-http.d.ts +1 -1
- package/apps/daemon/dist/relay-http.js +4 -13
- package/apps/daemon/dist/runtime/cancel-settlement.d.ts +19 -0
- package/apps/daemon/dist/runtime/cancel-settlement.js +191 -0
- package/apps/daemon/dist/runtime/errors.d.ts +3 -0
- package/apps/daemon/dist/runtime/errors.js +37 -0
- package/apps/daemon/dist/runtime/event-pump.d.ts +14 -0
- package/apps/daemon/dist/runtime/event-pump.js +38 -0
- package/apps/daemon/dist/runtime/external-provider.d.ts +20 -0
- package/apps/daemon/dist/runtime/external-provider.js +941 -0
- package/apps/daemon/dist/runtime/selection.d.ts +10 -0
- package/apps/daemon/dist/runtime/selection.js +33 -0
- package/apps/daemon/dist/runtime/session-recovery.d.ts +10 -0
- package/apps/daemon/dist/runtime/session-recovery.js +130 -0
- package/apps/daemon/dist/runtime.d.ts +3 -1
- package/apps/daemon/dist/runtime.js +24 -6
- package/apps/daemon/dist/session/create-session.d.ts +1 -1
- package/apps/daemon/dist/session/create-session.js +9 -3
- package/apps/daemon/dist/session/directory.d.ts +7 -2
- package/apps/daemon/dist/session/directory.js +117 -16
- package/apps/daemon/dist/session/events.d.ts +33 -3
- package/apps/daemon/dist/session/events.js +194 -16
- package/apps/daemon/dist/session/file-preview.d.ts +4 -0
- package/apps/daemon/dist/session/file-preview.js +169 -0
- package/apps/daemon/dist/session/lifecycle.d.ts +26 -3
- package/apps/daemon/dist/session/lifecycle.js +773 -90
- package/apps/daemon/dist/session/metadata.d.ts +6 -2
- package/apps/daemon/dist/session/metadata.js +149 -11
- package/apps/daemon/dist/session/primitives.d.ts +1 -1
- package/apps/daemon/dist/session/primitives.js +132 -18
- package/apps/daemon/dist/session/prompt.d.ts +1 -1
- package/apps/daemon/dist/session/prompt.js +559 -124
- package/apps/daemon/dist/session/runtime-handle.d.ts +1 -1
- package/apps/daemon/dist/session/runtime-handle.js +6 -2
- package/apps/daemon/dist/session/workspace-paths.d.ts +3 -0
- package/apps/daemon/dist/session/workspace-paths.js +30 -0
- package/apps/daemon/dist/start.js +268 -17
- package/apps/daemon/dist/state.d.ts +10 -2
- package/apps/daemon/dist/state.js +0 -1
- package/apps/daemon/dist/turn-coordinator.d.ts +10 -1
- package/apps/daemon/dist/turn-coordinator.js +31 -2
- package/apps/daemon/dist/types.d.ts +137 -9
- package/apps/daemon/dist/types.js +0 -1
- package/apps/daemon/dist/utils.js +0 -1
- package/apps/daemon/package.json +3 -23
- package/apps/relay/dist/account-access-revocation.d.ts +39 -0
- package/apps/relay/dist/account-access-revocation.js +67 -0
- package/apps/relay/dist/account-http-routes.d.ts +3 -0
- package/apps/relay/dist/account-http-routes.js +650 -0
- package/apps/relay/dist/account-projections.d.ts +40 -0
- package/apps/relay/dist/account-projections.js +96 -0
- package/apps/relay/dist/auth.js +13 -3
- package/apps/relay/dist/connections.d.ts +56 -5
- package/apps/relay/dist/connections.js +1 -1
- package/apps/relay/dist/controller-handlers.d.ts +89 -10
- package/apps/relay/dist/controller-handlers.js +1614 -72
- package/apps/relay/dist/db.d.ts +6 -0
- package/apps/relay/dist/db.js +357 -6
- package/apps/relay/dist/enrollment-repository.d.ts +61 -0
- package/apps/relay/dist/enrollment-repository.js +113 -0
- package/apps/relay/dist/errors.js +0 -1
- package/apps/relay/dist/event-visibility.d.ts +7 -0
- package/apps/relay/dist/event-visibility.js +46 -0
- package/apps/relay/dist/http-routes.d.ts +1 -1
- package/apps/relay/dist/http-routes.js +781 -78
- package/apps/relay/dist/http-schemas.d.ts +98 -11
- package/apps/relay/dist/http-schemas.js +40 -13
- package/apps/relay/dist/index.js +60 -11
- package/apps/relay/dist/machine-command-result-handlers.d.ts +24 -0
- package/apps/relay/dist/machine-command-result-handlers.js +1010 -0
- package/apps/relay/dist/machine-handler-context.d.ts +85 -0
- package/apps/relay/dist/machine-handler-context.js +1 -0
- package/apps/relay/dist/machine-handlers.d.ts +3 -33
- package/apps/relay/dist/machine-handlers.js +9 -235
- package/apps/relay/dist/machine-reliability.d.ts +7 -0
- package/apps/relay/dist/machine-reliability.js +12 -0
- package/apps/relay/dist/metadata-source.d.ts +3 -0
- package/apps/relay/dist/metadata-source.js +16 -0
- package/apps/relay/dist/projection-repository.d.ts +80 -0
- package/apps/relay/dist/projection-repository.js +214 -0
- package/apps/relay/dist/projections.d.ts +2 -2
- package/apps/relay/dist/projections.js +91 -5
- package/apps/relay/dist/relay-context.d.ts +104 -14
- package/apps/relay/dist/relay-context.js +729 -83
- package/apps/relay/dist/repositories.d.ts +5 -3
- package/apps/relay/dist/repositories.js +38 -14
- package/apps/relay/dist/retention.d.ts +6 -0
- package/apps/relay/dist/retention.js +26 -3
- package/apps/relay/dist/scope.d.ts +15 -2
- package/apps/relay/dist/scope.js +177 -15
- package/apps/relay/dist/security.js +0 -1
- package/apps/relay/dist/session-projection-reducer.d.ts +4 -0
- package/apps/relay/dist/session-projection-reducer.js +541 -0
- package/apps/relay/dist/session-record-handlers.d.ts +15 -0
- package/apps/relay/dist/session-record-handlers.js +148 -0
- package/apps/relay/dist/session-record-repository.d.ts +38 -0
- package/apps/relay/dist/session-record-repository.js +312 -0
- package/apps/relay/dist/types.d.ts +53 -12
- package/apps/relay/dist/types.js +0 -1
- package/apps/relay/dist/websocket.js +122 -25
- package/build-identity.json +6 -0
- package/npm-shrinkwrap.json +2226 -0
- package/package.json +32 -14
- package/packages/agent-sdk/dist/index.d.ts +130 -0
- package/packages/agent-sdk/dist/index.js +198 -0
- package/packages/client/dist/account-management.d.ts +64 -0
- package/packages/client/dist/account-management.js +486 -0
- package/packages/client/dist/account.d.ts +11 -5
- package/packages/client/dist/account.js +57 -31
- package/packages/client/dist/client.d.ts +100 -6
- package/packages/client/dist/client.js +1051 -26
- package/packages/client/dist/errors.d.ts +26 -3
- package/packages/client/dist/errors.js +25 -3
- package/packages/client/dist/http.d.ts +2 -2
- package/packages/client/dist/http.js +29 -21
- package/packages/client/dist/index.d.ts +10 -2
- package/packages/client/dist/index.js +5 -1
- package/packages/client/dist/live-session-state.d.ts +15 -0
- package/packages/client/dist/live-session-state.js +60 -0
- package/packages/client/dist/live-state.d.ts +8 -0
- package/packages/client/dist/live-state.js +37 -0
- package/packages/client/dist/live-types.d.ts +155 -0
- package/packages/client/dist/live-types.js +1 -0
- package/packages/client/dist/live.d.ts +118 -0
- package/packages/client/dist/live.js +1654 -0
- package/packages/client/dist/parsers.d.ts +3 -5
- package/packages/client/dist/parsers.js +34 -37
- package/packages/client/dist/schedule-presets.d.ts +17 -0
- package/packages/client/dist/schedule-presets.js +33 -0
- package/packages/client/dist/session-event-order.d.ts +16 -0
- package/packages/client/dist/session-event-order.js +83 -0
- package/packages/client/dist/session-event-window.d.ts +5 -0
- package/packages/client/dist/session-event-window.js +54 -0
- package/packages/client/dist/transport.d.ts +35 -7
- package/packages/client/dist/transport.js +426 -81
- package/packages/client/dist/types.d.ts +305 -5
- package/packages/client/dist/types.js +0 -1
- package/packages/client/dist/validation.d.ts +2 -2
- package/packages/client/dist/validation.js +11 -1
- package/packages/memory/dist/access.d.ts +44 -0
- package/packages/memory/dist/access.js +357 -0
- package/packages/memory/dist/chunk.d.ts +16 -0
- package/packages/memory/dist/chunk.js +51 -0
- package/packages/memory/dist/embeddings.d.ts +10 -0
- package/packages/memory/dist/embeddings.js +77 -0
- package/packages/memory/dist/index.d.ts +6 -0
- package/packages/memory/dist/index.js +6 -0
- package/packages/memory/dist/manager.d.ts +53 -0
- package/packages/memory/dist/manager.js +689 -0
- package/packages/memory/dist/paths.d.ts +11 -0
- package/packages/memory/dist/paths.js +42 -0
- package/packages/memory/dist/store.d.ts +19 -0
- package/packages/memory/dist/store.js +210 -0
- package/packages/memory/dist/types.d.ts +70 -0
- package/packages/memory/dist/types.js +8 -0
- package/packages/pie-provider/dist/index.d.ts +2 -0
- package/packages/pie-provider/dist/index.js +1228 -0
- package/packages/provider-protocol/dist/index.d.ts +920 -0
- package/packages/provider-protocol/dist/index.js +355 -0
- package/packages/runtime/dist/index.d.ts +48 -98
- package/packages/runtime/dist/index.js +0 -1
- package/packages/runtime-acpx/dist/index.d.ts +2 -3
- package/packages/runtime-acpx/dist/index.js +70 -2
- package/packages/runtime-cli/dist/async-queue.d.ts +0 -1
- package/packages/runtime-cli/dist/async-queue.js +0 -1
- package/packages/runtime-cli/dist/backend-session-lease.d.ts +40 -0
- package/packages/runtime-cli/dist/backend-session-lease.js +561 -0
- package/packages/runtime-cli/dist/claude-history.d.ts +2 -3
- package/packages/runtime-cli/dist/claude-history.js +137 -18
- package/packages/runtime-cli/dist/claude-json.d.ts +7 -1
- package/packages/runtime-cli/dist/claude-json.js +7 -1
- package/packages/runtime-cli/dist/claude-rename.d.ts +0 -1
- package/packages/runtime-cli/dist/claude-rename.js +0 -1
- package/packages/runtime-cli/dist/claude-session-store.d.ts +3 -3
- package/packages/runtime-cli/dist/claude-session-store.js +28 -12
- package/packages/runtime-cli/dist/claude-turn.d.ts +13 -3
- package/packages/runtime-cli/dist/claude-turn.js +281 -17
- package/packages/runtime-cli/dist/codex-app-server.d.ts +56 -7
- package/packages/runtime-cli/dist/codex-app-server.js +829 -46
- package/packages/runtime-cli/dist/codex-approvals.d.ts +0 -1
- package/packages/runtime-cli/dist/codex-approvals.js +0 -1
- package/packages/runtime-cli/dist/codex-history.d.ts +13 -4
- package/packages/runtime-cli/dist/codex-history.js +592 -15
- package/packages/runtime-cli/dist/codex-json-rpc.d.ts +30 -2
- package/packages/runtime-cli/dist/codex-json-rpc.js +282 -16
- package/packages/runtime-cli/dist/codex-lifecycle.d.ts +0 -1
- package/packages/runtime-cli/dist/codex-lifecycle.js +16 -4
- package/packages/runtime-cli/dist/codex-protocol.d.ts +4 -4
- package/packages/runtime-cli/dist/codex-protocol.js +43 -8
- package/packages/runtime-cli/dist/command-resolver.d.ts +23 -0
- package/packages/runtime-cli/dist/command-resolver.js +100 -0
- package/packages/runtime-cli/dist/history-merge.d.ts +17 -0
- package/packages/runtime-cli/dist/history-merge.js +286 -0
- package/packages/runtime-cli/dist/index.d.ts +7 -3
- package/packages/runtime-cli/dist/index.js +385 -59
- package/packages/runtime-cli/dist/permissions.d.ts +1 -2
- package/packages/runtime-cli/dist/permissions.js +3 -4
- package/packages/runtime-cli/dist/process-identity.d.ts +15 -0
- package/packages/runtime-cli/dist/process-identity.js +102 -0
- package/packages/runtime-cli/dist/runtime-status.d.ts +20 -0
- package/packages/runtime-cli/dist/runtime-status.js +133 -0
- package/packages/runtime-cli/dist/session-environment.d.ts +7 -0
- package/packages/runtime-cli/dist/session-environment.js +24 -0
- package/packages/runtime-cli/dist/session-store.d.ts +41 -2
- package/packages/runtime-cli/dist/session-store.js +232 -22
- package/packages/shared/dist/account.d.ts +184 -0
- package/packages/shared/dist/account.js +205 -0
- package/packages/shared/dist/args.d.ts +0 -1
- package/packages/shared/dist/args.js +4 -1
- package/packages/shared/dist/crypto.d.ts +234 -1
- package/packages/shared/dist/crypto.js +547 -1
- package/packages/shared/dist/daemon-lifecycle.d.ts +85 -0
- package/packages/shared/dist/daemon-lifecycle.js +66 -0
- package/packages/shared/dist/diagnostics.d.ts +21 -0
- package/packages/shared/dist/diagnostics.js +156 -0
- package/packages/shared/dist/ids.d.ts +0 -1
- package/packages/shared/dist/ids.js +0 -1
- package/packages/shared/dist/index.d.ts +5 -1
- package/packages/shared/dist/index.js +5 -1
- package/packages/shared/dist/interaction.d.ts +95 -0
- package/packages/shared/dist/interaction.js +169 -0
- package/packages/shared/dist/node/daemon-process.d.ts +91 -0
- package/packages/shared/dist/node/daemon-process.js +485 -0
- package/packages/shared/dist/node/gateway-store.d.ts +265 -0
- package/packages/shared/dist/node/gateway-store.js +2413 -0
- package/packages/shared/dist/process-command.d.ts +6 -0
- package/packages/shared/dist/process-command.js +113 -0
- package/packages/shared/dist/protocol-schemas.d.ts +467 -15
- package/packages/shared/dist/protocol-schemas.js +242 -1
- package/packages/shared/dist/protocol-types.d.ts +413 -1
- package/packages/shared/dist/protocol-types.js +0 -1
- package/packages/shared/dist/protocol.d.ts +416 -7
- package/packages/shared/dist/protocol.js +467 -5
- package/packages/shared/dist/relay-url.d.ts +8 -0
- package/packages/shared/dist/relay-url.js +37 -0
- package/packages/shared/dist/session-name.d.ts +0 -1
- package/packages/shared/dist/session-name.js +0 -1
- package/packages/shared/dist/session-record.d.ts +2 -0
- package/packages/shared/dist/session-record.js +4 -0
- package/packages/shared/dist/session-state.d.ts +0 -1
- package/packages/shared/dist/session-state.js +3 -2
- package/apps/cli/dist/args.d.ts +0 -5
- package/apps/cli/dist/args.js +0 -73
- package/apps/cli/dist/args.js.map +0 -1
- package/apps/cli/dist/commands/account.js.map +0 -1
- package/apps/cli/dist/commands/app.js.map +0 -1
- package/apps/cli/dist/commands/cancel.d.ts +0 -2
- package/apps/cli/dist/commands/cancel.js +0 -15
- package/apps/cli/dist/commands/cancel.js.map +0 -1
- package/apps/cli/dist/commands/collect.js.map +0 -1
- package/apps/cli/dist/commands/command.js.map +0 -1
- package/apps/cli/dist/commands/config.js.map +0 -1
- package/apps/cli/dist/commands/daemon.js.map +0 -1
- package/apps/cli/dist/commands/lib/args.js.map +0 -1
- package/apps/cli/dist/commands/lib/audit.js.map +0 -1
- package/apps/cli/dist/commands/lib/bootstrap-config.js.map +0 -1
- package/apps/cli/dist/commands/lib/bootstrap-daemon.js.map +0 -1
- package/apps/cli/dist/commands/lib/bootstrap-output.js.map +0 -1
- package/apps/cli/dist/commands/lib/bootstrap.js.map +0 -1
- package/apps/cli/dist/commands/lib/config.js.map +0 -1
- package/apps/cli/dist/commands/lib/doctor.js.map +0 -1
- package/apps/cli/dist/commands/lib/exit.js.map +0 -1
- package/apps/cli/dist/commands/lib/index.js.map +0 -1
- package/apps/cli/dist/commands/lib/json.js.map +0 -1
- package/apps/cli/dist/commands/lib/local-daemon.js.map +0 -1
- package/apps/cli/dist/commands/lib/loop-store.js.map +0 -1
- package/apps/cli/dist/commands/lib/paths.js.map +0 -1
- package/apps/cli/dist/commands/lib/relay-http.js.map +0 -1
- package/apps/cli/dist/commands/lib/scope.js.map +0 -1
- package/apps/cli/dist/commands/lib/session-output.js.map +0 -1
- package/apps/cli/dist/commands/lib/session-view.js.map +0 -1
- package/apps/cli/dist/commands/lib/status.js.map +0 -1
- package/apps/cli/dist/commands/lib/types.js.map +0 -1
- package/apps/cli/dist/commands/lib/usage.js.map +0 -1
- package/apps/cli/dist/commands/lib/workspace.js.map +0 -1
- package/apps/cli/dist/commands/loop.js.map +0 -1
- package/apps/cli/dist/commands/machine.js.map +0 -1
- package/apps/cli/dist/commands/relay.js.map +0 -1
- package/apps/cli/dist/commands/remote.js.map +0 -1
- package/apps/cli/dist/commands/result.d.ts +0 -2
- package/apps/cli/dist/commands/result.js +0 -19
- package/apps/cli/dist/commands/result.js.map +0 -1
- package/apps/cli/dist/commands/run.d.ts +0 -2
- package/apps/cli/dist/commands/run.js +0 -47
- package/apps/cli/dist/commands/run.js.map +0 -1
- package/apps/cli/dist/commands/session.js.map +0 -1
- package/apps/cli/dist/commands/token.js.map +0 -1
- package/apps/cli/dist/commands/wait.d.ts +0 -2
- package/apps/cli/dist/commands/wait.js +0 -20
- package/apps/cli/dist/commands/wait.js.map +0 -1
- package/apps/cli/dist/commands/workspace.d.ts +0 -2
- package/apps/cli/dist/commands/workspace.js +0 -30
- package/apps/cli/dist/commands/workspace.js.map +0 -1
- package/apps/cli/dist/errors.js.map +0 -1
- package/apps/cli/dist/index.js.map +0 -1
- package/apps/daemon/dist/app.js.map +0 -1
- package/apps/daemon/dist/args.js.map +0 -1
- package/apps/daemon/dist/audit.js.map +0 -1
- package/apps/daemon/dist/cli.js.map +0 -1
- package/apps/daemon/dist/config.js.map +0 -1
- package/apps/daemon/dist/errors.js.map +0 -1
- package/apps/daemon/dist/loop/runner.js.map +0 -1
- package/apps/daemon/dist/loop/store.js.map +0 -1
- package/apps/daemon/dist/pair.js.map +0 -1
- package/apps/daemon/dist/paths.js.map +0 -1
- package/apps/daemon/dist/process.js.map +0 -1
- package/apps/daemon/dist/relay/connection.js.map +0 -1
- package/apps/daemon/dist/relay/register.js.map +0 -1
- package/apps/daemon/dist/relay/send.js.map +0 -1
- package/apps/daemon/dist/relay-http.js.map +0 -1
- package/apps/daemon/dist/runtime.js.map +0 -1
- package/apps/daemon/dist/session/create-session.js.map +0 -1
- package/apps/daemon/dist/session/directory.js.map +0 -1
- package/apps/daemon/dist/session/events.js.map +0 -1
- package/apps/daemon/dist/session/lifecycle.js.map +0 -1
- package/apps/daemon/dist/session/metadata.js.map +0 -1
- package/apps/daemon/dist/session/primitives.js.map +0 -1
- package/apps/daemon/dist/session/prompt.js.map +0 -1
- package/apps/daemon/dist/session/runtime-handle.js.map +0 -1
- package/apps/daemon/dist/start.js.map +0 -1
- package/apps/daemon/dist/state.js.map +0 -1
- package/apps/daemon/dist/turn-coordinator.js.map +0 -1
- package/apps/daemon/dist/types.js.map +0 -1
- package/apps/daemon/dist/utils.js.map +0 -1
- package/apps/relay/dist/auth.js.map +0 -1
- package/apps/relay/dist/connections.js.map +0 -1
- package/apps/relay/dist/controller-handlers.js.map +0 -1
- package/apps/relay/dist/db.js.map +0 -1
- package/apps/relay/dist/errors.js.map +0 -1
- package/apps/relay/dist/http-routes.js.map +0 -1
- package/apps/relay/dist/http-schemas.js.map +0 -1
- package/apps/relay/dist/index.js.map +0 -1
- package/apps/relay/dist/machine-handlers.js.map +0 -1
- package/apps/relay/dist/projections.js.map +0 -1
- package/apps/relay/dist/relay-context.js.map +0 -1
- package/apps/relay/dist/repositories.js.map +0 -1
- package/apps/relay/dist/retention.js.map +0 -1
- package/apps/relay/dist/scope.js.map +0 -1
- package/apps/relay/dist/security.js.map +0 -1
- package/apps/relay/dist/types.js.map +0 -1
- package/apps/relay/dist/websocket.js.map +0 -1
- package/apps/relay/package.json +0 -29
- package/packages/client/dist/account.d.ts.map +0 -1
- package/packages/client/dist/account.js.map +0 -1
- package/packages/client/dist/client.d.ts.map +0 -1
- package/packages/client/dist/client.js.map +0 -1
- package/packages/client/dist/errors.d.ts.map +0 -1
- package/packages/client/dist/errors.js.map +0 -1
- package/packages/client/dist/http.d.ts.map +0 -1
- package/packages/client/dist/http.js.map +0 -1
- package/packages/client/dist/index.d.ts.map +0 -1
- package/packages/client/dist/index.js.map +0 -1
- package/packages/client/dist/parsers.d.ts.map +0 -1
- package/packages/client/dist/parsers.js.map +0 -1
- package/packages/client/dist/transport.d.ts.map +0 -1
- package/packages/client/dist/transport.js.map +0 -1
- package/packages/client/dist/types.d.ts.map +0 -1
- package/packages/client/dist/types.js.map +0 -1
- package/packages/client/dist/validation.d.ts.map +0 -1
- package/packages/client/dist/validation.js.map +0 -1
- package/packages/client/package.json +0 -22
- package/packages/runtime/dist/index.d.ts.map +0 -1
- package/packages/runtime/dist/index.js.map +0 -1
- package/packages/runtime/package.json +0 -19
- package/packages/runtime-acpx/dist/index.d.ts.map +0 -1
- package/packages/runtime-acpx/dist/index.js.map +0 -1
- package/packages/runtime-acpx/package.json +0 -23
- package/packages/runtime-cli/dist/async-queue.d.ts.map +0 -1
- package/packages/runtime-cli/dist/async-queue.js.map +0 -1
- package/packages/runtime-cli/dist/claude-history.d.ts.map +0 -1
- package/packages/runtime-cli/dist/claude-history.js.map +0 -1
- package/packages/runtime-cli/dist/claude-json.d.ts.map +0 -1
- package/packages/runtime-cli/dist/claude-json.js.map +0 -1
- package/packages/runtime-cli/dist/claude-rename.d.ts.map +0 -1
- package/packages/runtime-cli/dist/claude-rename.js.map +0 -1
- package/packages/runtime-cli/dist/claude-session-store.d.ts.map +0 -1
- package/packages/runtime-cli/dist/claude-session-store.js.map +0 -1
- package/packages/runtime-cli/dist/claude-turn.d.ts.map +0 -1
- package/packages/runtime-cli/dist/claude-turn.js.map +0 -1
- package/packages/runtime-cli/dist/codex-app-server.d.ts.map +0 -1
- package/packages/runtime-cli/dist/codex-app-server.js.map +0 -1
- package/packages/runtime-cli/dist/codex-approvals.d.ts.map +0 -1
- package/packages/runtime-cli/dist/codex-approvals.js.map +0 -1
- package/packages/runtime-cli/dist/codex-history.d.ts.map +0 -1
- package/packages/runtime-cli/dist/codex-history.js.map +0 -1
- package/packages/runtime-cli/dist/codex-json-rpc.d.ts.map +0 -1
- package/packages/runtime-cli/dist/codex-json-rpc.js.map +0 -1
- package/packages/runtime-cli/dist/codex-lifecycle.d.ts.map +0 -1
- package/packages/runtime-cli/dist/codex-lifecycle.js.map +0 -1
- package/packages/runtime-cli/dist/codex-protocol.d.ts.map +0 -1
- package/packages/runtime-cli/dist/codex-protocol.js.map +0 -1
- package/packages/runtime-cli/dist/index.d.ts.map +0 -1
- package/packages/runtime-cli/dist/index.js.map +0 -1
- package/packages/runtime-cli/dist/permissions.d.ts.map +0 -1
- package/packages/runtime-cli/dist/permissions.js.map +0 -1
- package/packages/runtime-cli/dist/session-store.d.ts.map +0 -1
- package/packages/runtime-cli/dist/session-store.js.map +0 -1
- package/packages/runtime-cli/package.json +0 -22
- package/packages/shared/dist/args.d.ts.map +0 -1
- package/packages/shared/dist/args.js.map +0 -1
- package/packages/shared/dist/crypto.d.ts.map +0 -1
- package/packages/shared/dist/crypto.js.map +0 -1
- package/packages/shared/dist/ids.d.ts.map +0 -1
- package/packages/shared/dist/ids.js.map +0 -1
- package/packages/shared/dist/index.d.ts.map +0 -1
- package/packages/shared/dist/index.js.map +0 -1
- package/packages/shared/dist/protocol-schemas.d.ts.map +0 -1
- package/packages/shared/dist/protocol-schemas.js.map +0 -1
- package/packages/shared/dist/protocol-types.d.ts.map +0 -1
- package/packages/shared/dist/protocol-types.js.map +0 -1
- package/packages/shared/dist/protocol.d.ts.map +0 -1
- package/packages/shared/dist/protocol.js.map +0 -1
- package/packages/shared/dist/relay-responses.d.ts +0 -7
- package/packages/shared/dist/relay-responses.d.ts.map +0 -1
- package/packages/shared/dist/relay-responses.js +0 -24
- package/packages/shared/dist/relay-responses.js.map +0 -1
- package/packages/shared/dist/session-name.d.ts.map +0 -1
- package/packages/shared/dist/session-name.js.map +0 -1
- package/packages/shared/dist/session-state.d.ts.map +0 -1
- package/packages/shared/dist/session-state.js.map +0 -1
- package/packages/shared/package.json +0 -24
|
@@ -1,6 +1,204 @@
|
|
|
1
|
+
import { createHash, timingSafeEqual } from "node:crypto";
|
|
1
2
|
import os from "node:os";
|
|
2
3
|
import path from "node:path";
|
|
3
|
-
import {
|
|
4
|
+
import { daemonLifecycleRequestIdV1Schema, } from "../../../../packages/shared/dist/index.js";
|
|
5
|
+
import { assertLocalDaemonRuntimeMatchesConfig, assertLocalDaemonVerified, canonicalRelayUrl, cliErrorFromFetch, CliError, compactText, ControllerClient, configDir, configPath, daemonPidPath, deriveOrchestration, diagnoseInstallation, emitDoctorResult, ensureDaemonRunning, idleSessionStatuses, localDaemonStatus, ok, parsePairingClaimResponse, randomId, readConfig, readDaemonConfig, readDaemonProjectionBaseline, readLocalAuditLog, readOptionalControllerConfig, readRelayJson, redactedDaemonConfig, requirePositional, requireRelayUrl, requireString, showMachine, startDaemonTimeoutMs, stopLocalDaemon, stopSpawnedDaemon, throwRelayHttpError, waitForDaemonReadiness, waitForDaemonSelfReadiness, wantsJson, withAccountConfigTransaction } from "./lib/index.js";
|
|
6
|
+
function positiveLimit(flags, fallback) {
|
|
7
|
+
const value = flags.limit;
|
|
8
|
+
if (value === undefined)
|
|
9
|
+
return fallback;
|
|
10
|
+
if (typeof value !== "string")
|
|
11
|
+
throw new CliError("Missing --limit value", "MISSING_ARGUMENT");
|
|
12
|
+
const parsed = Number(value);
|
|
13
|
+
if (!Number.isInteger(parsed) || parsed <= 0 || parsed > 200)
|
|
14
|
+
throw new CliError(`Invalid --limit: ${value}`, "INVALID_ARGUMENT");
|
|
15
|
+
return parsed;
|
|
16
|
+
}
|
|
17
|
+
async function boundedMap(values, concurrency, map) {
|
|
18
|
+
const result = new Array(values.length);
|
|
19
|
+
let nextIndex = 0;
|
|
20
|
+
await Promise.all(Array.from({ length: Math.min(concurrency, values.length) }, async () => {
|
|
21
|
+
while (nextIndex < values.length) {
|
|
22
|
+
const index = nextIndex;
|
|
23
|
+
nextIndex += 1;
|
|
24
|
+
result[index] = await map(values[index]);
|
|
25
|
+
}
|
|
26
|
+
}));
|
|
27
|
+
return result;
|
|
28
|
+
}
|
|
29
|
+
function overviewUnsupported(error) {
|
|
30
|
+
return error.code === "OVERVIEW_UNSUPPORTED";
|
|
31
|
+
}
|
|
32
|
+
function assertControllerCanObserveDaemon(controllerConfig, daemonConfig) {
|
|
33
|
+
if (canonicalRelayUrl(controllerConfig.relayUrl, "Controller config") !==
|
|
34
|
+
canonicalRelayUrl(daemonConfig.relayUrl, "Daemon config") ||
|
|
35
|
+
!pairSecretsEqual(controllerConfig.accountSecret, daemonConfig.accountSecret)) {
|
|
36
|
+
throw new CliError("Controller and daemon configurations belong to different workspaces. Local daemon readiness cannot be verified and no process was changed.", "CONFIG_SPLIT_BRAIN");
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
async function waitForLocalDaemonReadiness(client, config, baseline, daemon, requireFreshProjection) {
|
|
40
|
+
try {
|
|
41
|
+
if (!client) {
|
|
42
|
+
const local = await localDaemonStatus();
|
|
43
|
+
assertLocalDaemonVerified(local);
|
|
44
|
+
if (!local.running) {
|
|
45
|
+
throw new CliError("Daemon exited before its local runtime identity became ready. Run happy-elves daemon doctor and happy-elves daemon logs.", "DAEMON_START_FAILED");
|
|
46
|
+
}
|
|
47
|
+
await assertLocalDaemonRuntimeMatchesConfig(config);
|
|
48
|
+
await waitForDaemonSelfReadiness(config, daemon.instanceGeneration, { timeoutMs: startDaemonTimeoutMs });
|
|
49
|
+
return { local, relayAuthenticated: "verified" };
|
|
50
|
+
}
|
|
51
|
+
const readiness = await waitForDaemonReadiness(client, config.machineId, {
|
|
52
|
+
baseline,
|
|
53
|
+
expectedInstanceGeneration: daemon.instanceGeneration,
|
|
54
|
+
requireFreshProjection,
|
|
55
|
+
timeoutMs: startDaemonTimeoutMs,
|
|
56
|
+
});
|
|
57
|
+
if (readiness.phase === "process-exited" || readiness.phase === "owner-changed") {
|
|
58
|
+
throw new CliError("Daemon exited before it authenticated with the relay. Run happy-elves daemon doctor and happy-elves daemon logs.", "DAEMON_START_FAILED");
|
|
59
|
+
}
|
|
60
|
+
if (readiness.phase !== "relay-authenticated" || !readiness.machine?.online) {
|
|
61
|
+
const relayDetail = readiness.lastRelayErrorCode ? ` Last relay error: ${readiness.lastRelayErrorCode}.` : "";
|
|
62
|
+
throw new CliError(`Daemon is running, but it did not authenticate with the relay before the startup deadline.${relayDetail} Run happy-elves daemon doctor and happy-elves daemon logs.`, "DAEMON_ONLINE_TIMEOUT");
|
|
63
|
+
}
|
|
64
|
+
return { ...readiness, relayAuthenticated: "verified" };
|
|
65
|
+
}
|
|
66
|
+
catch (error) {
|
|
67
|
+
if (daemon.startedHandle) {
|
|
68
|
+
try {
|
|
69
|
+
await stopSpawnedDaemon(daemon.startedHandle);
|
|
70
|
+
}
|
|
71
|
+
catch (cleanupError) {
|
|
72
|
+
throw new CliError(`Daemon readiness failed and its owned child could not be cleaned up: ${cleanupError instanceof Error ? cleanupError.message : String(cleanupError)}`, "DAEMON_START_CLEANUP_FAILED");
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
throw error;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
async function remoteDaemonLifecycle(flags, action) {
|
|
79
|
+
const machineId = requireString(flags, "machine");
|
|
80
|
+
if (flags["request-id"] === true)
|
|
81
|
+
throw new CliError("Missing --request-id value", "MISSING_ARGUMENT");
|
|
82
|
+
const explicitRequestId = typeof flags["request-id"] === "string" ? flags["request-id"] : undefined;
|
|
83
|
+
const requestId = explicitRequestId ?? randomId("life");
|
|
84
|
+
if (!daemonLifecycleRequestIdV1Schema.safeParse(requestId).success) {
|
|
85
|
+
throw new CliError("Invalid --request-id", "INVALID_ARGUMENT");
|
|
86
|
+
}
|
|
87
|
+
const config = await readConfig(flags);
|
|
88
|
+
const client = new ControllerClient(config);
|
|
89
|
+
if (explicitRequestId !== undefined) {
|
|
90
|
+
const retained = await client.queryDaemonLifecycleOperation(machineId, requestId);
|
|
91
|
+
if (retained) {
|
|
92
|
+
const semanticsMatch = retained.daemonId === machineId &&
|
|
93
|
+
retained.action === action &&
|
|
94
|
+
(action === "upgrade" ? retained.channel === "beta" : retained.channel === undefined);
|
|
95
|
+
if (!semanticsMatch) {
|
|
96
|
+
throw new CliError(`Lifecycle request id is already bound to another operation: ${requestId}`, "REQUEST_ID_CONFLICT");
|
|
97
|
+
}
|
|
98
|
+
ok(`daemon.${action}`, { operation: retained }, { requestId, machineId });
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
const snapshot = await client.snapshot();
|
|
103
|
+
const matches = snapshot.machines.filter((machine) => machine.id === machineId);
|
|
104
|
+
const machine = matches[0];
|
|
105
|
+
if (!machine)
|
|
106
|
+
throw new CliError(`Daemon not found: ${machineId}`, "MACHINE_NOT_FOUND");
|
|
107
|
+
if (matches.length !== 1) {
|
|
108
|
+
throw new CliError(`Relay returned duplicate Daemon identities: ${machineId}`, "RELAY_RESPONSE_INVALID");
|
|
109
|
+
}
|
|
110
|
+
if (!machine.online)
|
|
111
|
+
throw new CliError(`Daemon is offline: ${machineId}`, "MACHINE_OFFLINE");
|
|
112
|
+
const capability = machine.capabilities.daemonLifecycleV1;
|
|
113
|
+
const expectedInstanceGeneration = machine.capabilities.daemonInstanceGeneration;
|
|
114
|
+
const supported = capability !== undefined &&
|
|
115
|
+
expectedInstanceGeneration !== undefined &&
|
|
116
|
+
capability[action] &&
|
|
117
|
+
(action !== "upgrade" || (capability.installKind === "npm-global" && capability.channel === "beta"));
|
|
118
|
+
if (!supported) {
|
|
119
|
+
throw new CliError(`Daemon does not support remote ${action}: ${machineId}`, "DAEMON_LIFECYCLE_UNSUPPORTED");
|
|
120
|
+
}
|
|
121
|
+
const request = action === "upgrade"
|
|
122
|
+
? {
|
|
123
|
+
version: 1,
|
|
124
|
+
requestId,
|
|
125
|
+
daemonId: machineId,
|
|
126
|
+
expectedInstanceGeneration,
|
|
127
|
+
action,
|
|
128
|
+
channel: "beta",
|
|
129
|
+
}
|
|
130
|
+
: {
|
|
131
|
+
version: 1,
|
|
132
|
+
requestId,
|
|
133
|
+
daemonId: machineId,
|
|
134
|
+
expectedInstanceGeneration,
|
|
135
|
+
action,
|
|
136
|
+
};
|
|
137
|
+
const operation = await client.startDaemonLifecycleOperation(request);
|
|
138
|
+
ok(`daemon.${action}`, { operation }, { requestId, machineId });
|
|
139
|
+
}
|
|
140
|
+
async function daemonOverview(client, input) {
|
|
141
|
+
try {
|
|
142
|
+
const sessions = [];
|
|
143
|
+
let cursor = input.cursor;
|
|
144
|
+
let first;
|
|
145
|
+
let loadNextPage = true;
|
|
146
|
+
while (loadNextPage) {
|
|
147
|
+
const page = await client.overview({
|
|
148
|
+
machineId: input.machineId,
|
|
149
|
+
limit: input.includeSessions ? (input.all ? 200 : input.limit) : 0,
|
|
150
|
+
cursor,
|
|
151
|
+
});
|
|
152
|
+
first ??= page;
|
|
153
|
+
if (input.includeSessions)
|
|
154
|
+
sessions.push(...page.sessions);
|
|
155
|
+
cursor = page.page.nextCursor;
|
|
156
|
+
loadNextPage = input.all && page.page.hasMore && Boolean(cursor);
|
|
157
|
+
}
|
|
158
|
+
const overview = first;
|
|
159
|
+
if (!overview)
|
|
160
|
+
throw new CliError("Overview response is empty", "RELAY_RESPONSE_INVALID");
|
|
161
|
+
return {
|
|
162
|
+
machines: overview.machines,
|
|
163
|
+
sessions,
|
|
164
|
+
counts: overview.sessionCounts,
|
|
165
|
+
page: {
|
|
166
|
+
returned: sessions.length,
|
|
167
|
+
total: overview.page.total,
|
|
168
|
+
hasMore: input.includeSessions && !input.all ? overview.page.hasMore : false,
|
|
169
|
+
...(input.includeSessions && !input.all ? { limit: input.limit } : {}),
|
|
170
|
+
...(!input.all && overview.page.nextCursor ? { nextCursor: overview.page.nextCursor } : {}),
|
|
171
|
+
source: "overview",
|
|
172
|
+
},
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
catch (error) {
|
|
176
|
+
if (!overviewUnsupported(error))
|
|
177
|
+
throw error;
|
|
178
|
+
if (input.cursor)
|
|
179
|
+
throw new CliError("This relay does not support daemon status cursors; retry without --cursor", "OVERVIEW_CURSOR_UNSUPPORTED");
|
|
180
|
+
const snapshot = await client.snapshot();
|
|
181
|
+
const machines = input.machineId ? snapshot.machines.filter((machine) => machine.id === input.machineId) : snapshot.machines;
|
|
182
|
+
const machineIds = new Set(machines.map((machine) => machine.id));
|
|
183
|
+
const allSessions = snapshot.sessions.filter((session) => machineIds.has(session.machineId));
|
|
184
|
+
const counts = {};
|
|
185
|
+
for (const session of allSessions)
|
|
186
|
+
counts[session.status] = (counts[session.status] ?? 0) + 1;
|
|
187
|
+
const sessions = input.includeSessions ? (input.all ? allSessions : allSessions.slice(0, input.limit)) : [];
|
|
188
|
+
return {
|
|
189
|
+
machines,
|
|
190
|
+
sessions,
|
|
191
|
+
counts,
|
|
192
|
+
page: {
|
|
193
|
+
returned: sessions.length,
|
|
194
|
+
total: allSessions.length,
|
|
195
|
+
hasMore: input.includeSessions && sessions.length < allSessions.length,
|
|
196
|
+
...(input.includeSessions && !input.all ? { limit: input.limit } : {}),
|
|
197
|
+
source: "bootstrap-fallback",
|
|
198
|
+
},
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
}
|
|
4
202
|
export async function handleDaemon({ domain, action, flags }) {
|
|
5
203
|
if (domain === "daemon" && action === "pair") {
|
|
6
204
|
const relayUrl = requireRelayUrl(flags);
|
|
@@ -8,58 +206,57 @@ export async function handleDaemon({ domain, action, flags }) {
|
|
|
8
206
|
const accountSecret = requireString(flags, "secret");
|
|
9
207
|
const machineName = typeof flags.name === "string" && flags.name.trim() ? flags.name.trim() : os.hostname();
|
|
10
208
|
const machineId = typeof flags["machine-id"] === "string" ? flags["machine-id"] : randomId("mach");
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
209
|
+
let daemonConfig;
|
|
210
|
+
await withAccountConfigTransaction(async (transaction) => {
|
|
211
|
+
if (await transaction.daemonExists()) {
|
|
212
|
+
throw new CliError(`Daemon configuration already exists at ${transaction.daemonPath}. Pairing never replaces an existing machine identity; use an explicit account recovery or migration flow.`, "CONFIG_EXISTS");
|
|
213
|
+
}
|
|
214
|
+
const existingController = await transaction.readController();
|
|
215
|
+
if (existingController && (canonicalRelayUrl(existingController.relayUrl, "Controller config") !== canonicalRelayUrl(relayUrl) ||
|
|
216
|
+
!pairSecretsEqual(existingController.accountSecret, accountSecret))) {
|
|
217
|
+
throw new CliError("Daemon pairing does not match the existing controller relay/account. No relay request was sent and no configuration was changed.", "CONFIG_SPLIT_BRAIN");
|
|
218
|
+
}
|
|
219
|
+
let response;
|
|
220
|
+
try {
|
|
221
|
+
response = await fetch(`${relayUrl}/api/pairing/claim`, {
|
|
222
|
+
method: "POST",
|
|
223
|
+
headers: { "content-type": "application/json" },
|
|
224
|
+
body: JSON.stringify({ code, machineId }),
|
|
225
|
+
signal: AbortSignal.timeout(10_000),
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
catch (error) {
|
|
229
|
+
if (error.name === "TimeoutError" || error.name === "AbortError") {
|
|
230
|
+
throw new CliError("Pairing claim timed out; daemon configuration was not changed.", "PAIRING_TIMEOUT");
|
|
231
|
+
}
|
|
232
|
+
throw cliErrorFromFetch(error, "RELAY_UNREACHABLE", `Could not reach relay while pairing ${relayUrl}`);
|
|
233
|
+
}
|
|
234
|
+
if (!response.ok) {
|
|
235
|
+
await throwRelayHttpError(response, "Pairing failed");
|
|
236
|
+
}
|
|
237
|
+
const claimed = parsePairingClaimResponse(await readRelayJson(response, "Pairing response is not valid JSON"));
|
|
238
|
+
daemonConfig = {
|
|
239
|
+
relayUrl,
|
|
240
|
+
accountId: claimed.accountId,
|
|
241
|
+
machineId: claimed.machineId,
|
|
242
|
+
machineName,
|
|
243
|
+
machineToken: claimed.machineToken,
|
|
244
|
+
accountSecret,
|
|
245
|
+
};
|
|
246
|
+
await transaction.writeDaemon(daemonConfig, "create");
|
|
15
247
|
});
|
|
16
|
-
if (!
|
|
17
|
-
|
|
18
|
-
}
|
|
19
|
-
const claimed = parsePairingClaimResponse(await readRelayJson(response, "Pairing response is not valid JSON"));
|
|
20
|
-
const daemonConfig = {
|
|
21
|
-
relayUrl,
|
|
22
|
-
accountId: claimed.accountId,
|
|
23
|
-
machineId: claimed.machineId,
|
|
24
|
-
machineName,
|
|
25
|
-
machineToken: claimed.machineToken,
|
|
26
|
-
accountSecret,
|
|
27
|
-
};
|
|
28
|
-
const daemonConfigPath = await writeDaemonConfig(daemonConfig);
|
|
248
|
+
if (!daemonConfig)
|
|
249
|
+
throw new CliError("Pairing did not produce daemon configuration", "PAIRING_FAILED");
|
|
29
250
|
ok("daemon.pair", {
|
|
30
|
-
path:
|
|
251
|
+
path: path.join(configDir, "daemon.json"),
|
|
31
252
|
config: redactedDaemonConfig(daemonConfig),
|
|
32
253
|
});
|
|
33
254
|
return true;
|
|
34
255
|
}
|
|
35
256
|
if (domain === "daemon" && action === "doctor") {
|
|
36
|
-
const
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
config = await readConfig(flags);
|
|
40
|
-
checks.push({ name: "config", ok: true, message: configPath });
|
|
41
|
-
}
|
|
42
|
-
catch (error) {
|
|
43
|
-
checks.push({ name: "config", ok: false, message: error instanceof Error ? error.message : String(error) });
|
|
44
|
-
}
|
|
45
|
-
if (config) {
|
|
46
|
-
try {
|
|
47
|
-
const response = await fetch(`${config.relayUrl}/health`);
|
|
48
|
-
checks.push({ name: "relay", ok: response.ok, message: response.ok ? "reachable" : await response.text() });
|
|
49
|
-
}
|
|
50
|
-
catch (error) {
|
|
51
|
-
checks.push({ name: "relay", ok: false, message: error instanceof Error ? error.message : String(error) });
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
const data = { ok: checks.every((check) => check.ok), checks };
|
|
55
|
-
if (!wantsJson(flags)) {
|
|
56
|
-
console.log(`Daemon doctor: ${data.ok ? "ok" : "issues found"}`);
|
|
57
|
-
for (const check of checks) {
|
|
58
|
-
console.log(`${check.ok ? "ok" : "fail"} ${check.name}: ${check.message}`);
|
|
59
|
-
}
|
|
60
|
-
return true;
|
|
61
|
-
}
|
|
62
|
-
ok("daemon.doctor", data);
|
|
257
|
+
const requestedRelay = typeof flags.relay === "string" ? requireRelayUrl(flags) : undefined;
|
|
258
|
+
const data = await diagnoseInstallation("daemon", requestedRelay);
|
|
259
|
+
emitDoctorResult("daemon.doctor", "Daemon doctor", data, flags);
|
|
63
260
|
return true;
|
|
64
261
|
}
|
|
65
262
|
if (domain === "daemon" && action === "config") {
|
|
@@ -69,8 +266,8 @@ export async function handleDaemon({ domain, action, flags }) {
|
|
|
69
266
|
console.log(`Config: ${path.join(configDir, "daemon.json")}`);
|
|
70
267
|
console.log(`Relay: ${redacted.relayUrl}`);
|
|
71
268
|
console.log(`Account: ${redacted.accountId}`);
|
|
72
|
-
console.log(`
|
|
73
|
-
console.log(`
|
|
269
|
+
console.log(`Daemon: ${redacted.machineName} (${redacted.machineId})`);
|
|
270
|
+
console.log(`Daemon credential: ${redacted.hasMachineToken ? "configured" : "missing"}`);
|
|
74
271
|
console.log(`Account secret: ${redacted.hasAccountSecret ? "configured" : "missing"}`);
|
|
75
272
|
return true;
|
|
76
273
|
}
|
|
@@ -112,33 +309,78 @@ export async function handleDaemon({ domain, action, flags }) {
|
|
|
112
309
|
return true;
|
|
113
310
|
}
|
|
114
311
|
if (domain === "daemon" && action === "start") {
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
const
|
|
122
|
-
const
|
|
123
|
-
|
|
312
|
+
assertLocalDaemonVerified(await localDaemonStatus());
|
|
313
|
+
const config = await readDaemonConfig();
|
|
314
|
+
assertDaemonRelayOverrideMatches(flags, config);
|
|
315
|
+
const controllerConfig = await readOptionalControllerConfig();
|
|
316
|
+
if (controllerConfig)
|
|
317
|
+
assertControllerCanObserveDaemon(controllerConfig, config);
|
|
318
|
+
const client = controllerConfig ? new ControllerClient(controllerConfig) : undefined;
|
|
319
|
+
const baseline = client
|
|
320
|
+
? await readDaemonProjectionBaseline(client, config.machineId, { timeoutMs: startDaemonTimeoutMs })
|
|
321
|
+
: undefined;
|
|
322
|
+
const daemon = await ensureDaemonRunning(config);
|
|
323
|
+
const readiness = await waitForLocalDaemonReadiness(client, config, baseline, daemon, daemon.started);
|
|
324
|
+
const data = {
|
|
325
|
+
...readiness.local,
|
|
326
|
+
started: daemon.started,
|
|
327
|
+
machineId: readiness.machine?.id ?? config.machineId,
|
|
328
|
+
relayAuthenticated: readiness.relayAuthenticated,
|
|
329
|
+
...(readiness.relayAuthenticated === "verified" ? { online: true } : {}),
|
|
330
|
+
};
|
|
331
|
+
if (wantsJson(flags))
|
|
332
|
+
ok("daemon.start", data);
|
|
333
|
+
else
|
|
334
|
+
writeHumanDaemonStartOutput(data);
|
|
124
335
|
return true;
|
|
125
336
|
}
|
|
126
337
|
if (domain === "daemon" && action === "stop") {
|
|
127
338
|
ok("daemon.stop", await stopLocalDaemon());
|
|
128
339
|
return true;
|
|
129
340
|
}
|
|
341
|
+
if (domain === "daemon" && action === "restart" && flags.machine === true) {
|
|
342
|
+
throw new CliError("Missing --machine value", "MISSING_ARGUMENT");
|
|
343
|
+
}
|
|
344
|
+
if (domain === "daemon" && action === "restart" && typeof flags.machine === "string") {
|
|
345
|
+
await remoteDaemonLifecycle(flags, "restart");
|
|
346
|
+
return true;
|
|
347
|
+
}
|
|
348
|
+
if (domain === "daemon" && action === "upgrade") {
|
|
349
|
+
await remoteDaemonLifecycle(flags, "upgrade");
|
|
350
|
+
return true;
|
|
351
|
+
}
|
|
130
352
|
if (domain === "daemon" && action === "restart") {
|
|
131
|
-
await
|
|
353
|
+
assertLocalDaemonVerified(await localDaemonStatus());
|
|
354
|
+
const config = await readDaemonConfig();
|
|
355
|
+
assertDaemonRelayOverrideMatches(flags, config);
|
|
356
|
+
const controllerConfig = await readOptionalControllerConfig();
|
|
357
|
+
if (controllerConfig)
|
|
358
|
+
assertControllerCanObserveDaemon(controllerConfig, config);
|
|
359
|
+
const client = controllerConfig ? new ControllerClient(controllerConfig) : undefined;
|
|
360
|
+
const baseline = client
|
|
361
|
+
? await readDaemonProjectionBaseline(client, config.machineId, { timeoutMs: startDaemonTimeoutMs })
|
|
362
|
+
: undefined;
|
|
132
363
|
const stop = await stopLocalDaemon();
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
364
|
+
if (stop.running || stop.alive) {
|
|
365
|
+
throw new CliError("Daemon did not stop before the restart deadline; no replacement process was started.", "DAEMON_STOP_FAILED");
|
|
366
|
+
}
|
|
367
|
+
const daemon = await ensureDaemonRunning(config);
|
|
368
|
+
const readiness = await waitForLocalDaemonReadiness(client, config, baseline, daemon, true);
|
|
369
|
+
ok("daemon.restart", {
|
|
370
|
+
stop,
|
|
371
|
+
startedPid: daemon.startedPid ?? readiness.local.pid,
|
|
372
|
+
pidPath: daemonPidPath,
|
|
373
|
+
local: readiness.local,
|
|
374
|
+
machineId: readiness.machine?.id ?? config.machineId,
|
|
375
|
+
relayAuthenticated: readiness.relayAuthenticated,
|
|
376
|
+
...(readiness.relayAuthenticated === "verified" ? { online: true } : {}),
|
|
377
|
+
});
|
|
136
378
|
return true;
|
|
137
379
|
}
|
|
138
380
|
if (domain === "daemon" && action === "status" && flags.local === true) {
|
|
139
381
|
const local = await localDaemonStatus();
|
|
140
382
|
if (!wantsJson(flags)) {
|
|
141
|
-
console.log(local.running ? `Daemon: running${local.pid ? ` pid ${local.pid}` : ""}` : "Daemon: stopped");
|
|
383
|
+
console.log(local.running ? `Daemon: running${local.pid ? ` pid ${local.pid}` : ""}` : local.state === "unverified" ? `Daemon: unverified live pid${local.pid ? ` ${local.pid}` : ""}` : "Daemon: stopped");
|
|
142
384
|
console.log(`Pid file: ${local.pidPath}`);
|
|
143
385
|
return true;
|
|
144
386
|
}
|
|
@@ -150,17 +392,30 @@ export async function handleDaemon({ domain, action, flags }) {
|
|
|
150
392
|
const client = new ControllerClient(config);
|
|
151
393
|
const local = await localDaemonStatus();
|
|
152
394
|
const response = await fetch(`${config.relayUrl}/health`);
|
|
153
|
-
const snapshot = await client.snapshot();
|
|
154
395
|
const machineFilter = flags.machine === true ? requirePositional(undefined, "machineId") : typeof flags.machine === "string" ? flags.machine : undefined;
|
|
155
|
-
const
|
|
156
|
-
|
|
157
|
-
|
|
396
|
+
const includeSessions = flags.verbose === true || flags.all === true;
|
|
397
|
+
const all = flags.all === true;
|
|
398
|
+
const cursor = typeof flags.cursor === "string" && flags.cursor.trim() ? flags.cursor.trim() : undefined;
|
|
399
|
+
if (all && flags.limit !== undefined)
|
|
400
|
+
throw new CliError("--all and --limit are mutually exclusive", "INVALID_ARGUMENT");
|
|
401
|
+
if (all && cursor)
|
|
402
|
+
throw new CliError("--all and --cursor are mutually exclusive", "INVALID_ARGUMENT");
|
|
403
|
+
if (cursor && !includeSessions)
|
|
404
|
+
throw new CliError("--cursor requires --verbose", "INVALID_ARGUMENT");
|
|
405
|
+
if (!all && flags.limit !== undefined && flags.verbose !== true) {
|
|
406
|
+
throw new CliError("--limit requires --verbose", "INVALID_ARGUMENT");
|
|
407
|
+
}
|
|
408
|
+
const limit = positiveLimit(flags, 20);
|
|
409
|
+
const overview = await daemonOverview(client, { machineId: machineFilter, includeSessions, all, limit, cursor });
|
|
410
|
+
const machines = overview.machines;
|
|
158
411
|
if (machineFilter && machines.length === 0)
|
|
159
|
-
throw new CliError("
|
|
160
|
-
const
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
412
|
+
throw new CliError("Daemon not found", "MACHINE_NOT_FOUND");
|
|
413
|
+
const projectedMachines = includeSessions
|
|
414
|
+
? await Promise.all((await client.snapshot()).machines
|
|
415
|
+
.filter((machine) => machines.some((summary) => summary.id === machine.id))
|
|
416
|
+
.map((machine) => showMachine(client, machine)))
|
|
417
|
+
: [];
|
|
418
|
+
const projectedSessions = includeSessions ? await boundedMap(overview.sessions, 4, async (session) => ({
|
|
164
419
|
sessionId: session.id,
|
|
165
420
|
machineId: session.machineId,
|
|
166
421
|
agent: session.agent,
|
|
@@ -168,46 +423,66 @@ export async function handleDaemon({ domain, action, flags }) {
|
|
|
168
423
|
orchestration: deriveOrchestration(session, await client.history(session.id, 20)),
|
|
169
424
|
updatedAt: session.updatedAt,
|
|
170
425
|
capabilities: session.capabilities,
|
|
171
|
-
}))
|
|
426
|
+
})) : [];
|
|
427
|
+
const sessionCount = overview.page.total;
|
|
428
|
+
const runningSessionCount = overview.counts.running ?? 0;
|
|
429
|
+
const idleSessionCount = idleSessionStatuses.reduce((sum, status) => sum + (overview.counts[status] ?? 0), 0);
|
|
172
430
|
const data = {
|
|
173
431
|
configPath,
|
|
174
432
|
local,
|
|
175
433
|
relayUrl: config.relayUrl,
|
|
176
434
|
relayReachable: response.ok,
|
|
177
435
|
relay: response.ok ? await response.json() : await response.text(),
|
|
178
|
-
machines: projectedMachines.map((machine) => ({
|
|
436
|
+
machines: includeSessions ? projectedMachines.map((machine) => ({
|
|
179
437
|
machineId: machine.id,
|
|
180
438
|
name: machine.metadata.name ?? machine.name,
|
|
181
439
|
online: machine.online,
|
|
182
440
|
lastSeen: machine.lastSeen,
|
|
183
|
-
defaultCwd: machine.defaultCwd,
|
|
184
441
|
daemonVersion: machine.capabilities.daemonVersion,
|
|
442
|
+
defaultCwd: machine.defaultCwd,
|
|
185
443
|
acpxVersion: machine.capabilities.acpxVersion,
|
|
186
444
|
sessionPrimitives: machine.capabilities.sessionPrimitives,
|
|
187
445
|
agents: machine.capabilities.agents,
|
|
188
446
|
metadata: machine.metadata,
|
|
447
|
+
})) : machines.map((machine) => ({
|
|
448
|
+
machineId: machine.id,
|
|
449
|
+
name: machine.name,
|
|
450
|
+
online: machine.online,
|
|
451
|
+
lastSeen: machine.lastSeen,
|
|
189
452
|
})),
|
|
190
|
-
sessions: projectedSessions,
|
|
453
|
+
...(includeSessions ? { sessions: projectedSessions, page: overview.page } : {}),
|
|
191
454
|
summary: {
|
|
192
455
|
machineCount: machines.length,
|
|
193
456
|
onlineMachineCount: machines.filter((machine) => machine.online).length,
|
|
194
|
-
sessionCount
|
|
195
|
-
runningSessionCount
|
|
196
|
-
idleSessionCount
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
457
|
+
sessionCount,
|
|
458
|
+
runningSessionCount,
|
|
459
|
+
idleSessionCount,
|
|
460
|
+
statusCounts: overview.counts,
|
|
461
|
+
...(includeSessions ? {
|
|
462
|
+
blockedSessionCount: projectedSessions.filter((session) => session.orchestration.blocked).length,
|
|
463
|
+
activeSessionCount: projectedSessions.filter((session) => session.orchestration.state === "active").length,
|
|
464
|
+
completedSessionCount: projectedSessions.filter((session) => session.orchestration.completed).length,
|
|
465
|
+
needsUserSessionCount: projectedSessions.filter((session) => session.orchestration.needsUser).length,
|
|
466
|
+
} : {}),
|
|
201
467
|
},
|
|
202
468
|
};
|
|
203
469
|
if (!wantsJson(flags)) {
|
|
204
|
-
console.log(`
|
|
470
|
+
console.log(`Account: ${data.relayReachable ? "connected" : "unavailable"}`);
|
|
205
471
|
console.log(data.local.running ? `Local daemon: running${data.local.pid ? ` pid ${data.local.pid}` : ""}` : "Local daemon: stopped");
|
|
206
|
-
console.log(`
|
|
207
|
-
console.log(`Sessions: ${data.summary.sessionCount} total, ${data.summary.runningSessionCount} running
|
|
472
|
+
console.log(`Daemons: ${data.summary.onlineMachineCount}/${data.summary.machineCount} online`);
|
|
473
|
+
console.log(`Sessions: ${data.summary.sessionCount} total, ${data.summary.runningSessionCount} running`);
|
|
208
474
|
for (const machine of data.machines) {
|
|
209
475
|
console.log(`- ${machine.name} (${machine.machineId}) ${machine.online ? "online" : "offline"}`);
|
|
210
|
-
|
|
476
|
+
if ("defaultCwd" in machine)
|
|
477
|
+
console.log(` cwd: ${machine.defaultCwd ?? "-"}`);
|
|
478
|
+
}
|
|
479
|
+
if (includeSessions) {
|
|
480
|
+
for (const session of projectedSessions) {
|
|
481
|
+
console.log(`- ${session.sessionId} ${session.status} ${session.orchestration.state} ${session.agent} daemon:${session.machineId}`);
|
|
482
|
+
}
|
|
483
|
+
console.log(`Page: ${overview.page.returned} of ${overview.page.total} sessions${overview.page.hasMore ? "; more available" : "; complete"}`);
|
|
484
|
+
if (overview.page.nextCursor)
|
|
485
|
+
console.log(`Next cursor: ${overview.page.nextCursor}`);
|
|
211
486
|
}
|
|
212
487
|
return true;
|
|
213
488
|
}
|
|
@@ -216,4 +491,28 @@ export async function handleDaemon({ domain, action, flags }) {
|
|
|
216
491
|
}
|
|
217
492
|
return false;
|
|
218
493
|
}
|
|
219
|
-
|
|
494
|
+
function pairSecretsEqual(left, right) {
|
|
495
|
+
const leftDigest = createHash("sha256").update(left).digest();
|
|
496
|
+
const rightDigest = createHash("sha256").update(right).digest();
|
|
497
|
+
return timingSafeEqual(leftDigest, rightDigest);
|
|
498
|
+
}
|
|
499
|
+
function writeHumanDaemonStartOutput(data) {
|
|
500
|
+
if (data.started) {
|
|
501
|
+
console.log(`Daemon start requested${data.pid ? ` (pid ${data.pid})` : ""}.`);
|
|
502
|
+
}
|
|
503
|
+
else {
|
|
504
|
+
console.log(`Daemon is already running${data.pid ? ` (pid ${data.pid})` : ""}.`);
|
|
505
|
+
}
|
|
506
|
+
if (data.relayAuthenticated === "unverified") {
|
|
507
|
+
console.log("Local daemon identity is ready; relay authentication was not verified because this host has no matching Device credential.");
|
|
508
|
+
}
|
|
509
|
+
console.log("This command manages only the paired background daemon; it does not open a browser page.");
|
|
510
|
+
console.log("For setup or browser onboarding, run: happy-elves start");
|
|
511
|
+
}
|
|
512
|
+
function assertDaemonRelayOverrideMatches(flags, config) {
|
|
513
|
+
if (typeof flags.relay !== "string")
|
|
514
|
+
return;
|
|
515
|
+
if (canonicalRelayUrl(flags.relay) === canonicalRelayUrl(config.relayUrl))
|
|
516
|
+
return;
|
|
517
|
+
throw new CliError("daemon start/restart cannot change the enrolled Account. Use a one-time Re-enroll invite from the Account UI.", "CONFIG_SPLIT_BRAIN");
|
|
518
|
+
}
|