@cydm/happy-elves 0.1.0-beta.8 → 0.1.0-beta.80
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 +403 -35
- package/apps/cli/dist/commands/app.js +34 -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 +16 -5
- package/apps/cli/dist/commands/daemon.js +412 -91
- package/apps/cli/dist/commands/diagnostics.d.ts +2 -0
- package/apps/cli/dist/commands/diagnostics.js +71 -0
- package/apps/cli/dist/commands/gateway.d.ts +2 -0
- package/apps/cli/dist/commands/gateway.js +1271 -0
- package/apps/cli/dist/commands/lib/account-snapshot.d.ts +13 -0
- package/apps/cli/dist/commands/lib/account-snapshot.js +368 -0
- package/apps/cli/dist/commands/lib/args.js +93 -3
- package/apps/cli/dist/commands/lib/audit.js +2 -2
- package/apps/cli/dist/commands/lib/bootstrap-config.d.ts +31 -13
- package/apps/cli/dist/commands/lib/bootstrap-config.js +147 -98
- package/apps/cli/dist/commands/lib/bootstrap-daemon.d.ts +83 -10
- package/apps/cli/dist/commands/lib/bootstrap-daemon.js +481 -30
- package/apps/cli/dist/commands/lib/bootstrap-device-recovery.d.ts +41 -0
- package/apps/cli/dist/commands/lib/bootstrap-device-recovery.js +782 -0
- package/apps/cli/dist/commands/lib/bootstrap-join.d.ts +6 -0
- package/apps/cli/dist/commands/lib/bootstrap-join.js +304 -0
- package/apps/cli/dist/commands/lib/bootstrap-output.d.ts +14 -7
- package/apps/cli/dist/commands/lib/bootstrap-output.js +35 -24
- package/apps/cli/dist/commands/lib/bootstrap.d.ts +2 -0
- package/apps/cli/dist/commands/lib/bootstrap.js +447 -52
- 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 +64 -3
- package/apps/cli/dist/commands/lib/config.js +1163 -28
- package/apps/cli/dist/commands/lib/controller-enrollment-intent.d.ts +53 -0
- package/apps/cli/dist/commands/lib/controller-enrollment-intent.js +308 -0
- package/apps/cli/dist/commands/lib/daemon-enrollment-intent.d.ts +55 -0
- package/apps/cli/dist/commands/lib/daemon-enrollment-intent.js +275 -0
- package/apps/cli/dist/commands/lib/doctor.d.ts +14 -0
- package/apps/cli/dist/commands/lib/doctor.js +347 -34
- package/apps/cli/dist/commands/lib/enrollment-claim-settlement.d.ts +1 -0
- package/apps/cli/dist/commands/lib/enrollment-claim-settlement.js +20 -0
- package/apps/cli/dist/commands/lib/exit.d.ts +1 -0
- package/apps/cli/dist/commands/lib/exit.js +140 -14
- package/apps/cli/dist/commands/lib/fresh-start-intent.d.ts +26 -0
- package/apps/cli/dist/commands/lib/fresh-start-intent.js +169 -0
- package/apps/cli/dist/commands/lib/index.d.ts +11 -3
- package/apps/cli/dist/commands/lib/index.js +11 -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 +70 -8
- package/apps/cli/dist/commands/lib/local-daemon.js +332 -74
- package/apps/cli/dist/commands/lib/machine-state.d.ts +3 -0
- package/apps/cli/dist/commands/lib/machine-state.js +14 -0
- package/apps/cli/dist/commands/lib/orchestrator.d.ts +41 -0
- package/apps/cli/dist/commands/lib/orchestrator.js +208 -0
- package/apps/cli/dist/commands/lib/paths.d.ts +5 -3
- package/apps/cli/dist/commands/lib/paths.js +11 -5
- package/apps/cli/dist/commands/lib/pending-enrollment.d.ts +1 -0
- package/apps/cli/dist/commands/lib/pending-enrollment.js +23 -0
- 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 +49 -1
- package/apps/cli/dist/commands/lib/session-output.js +278 -15
- package/apps/cli/dist/commands/lib/session-view.d.ts +38 -7
- package/apps/cli/dist/commands/lib/session-view.js +138 -46
- package/apps/cli/dist/commands/lib/status.js +63 -18
- package/apps/cli/dist/commands/lib/types.d.ts +53 -7
- package/apps/cli/dist/commands/lib/types.js +1 -2
- package/apps/cli/dist/commands/lib/usage.d.ts +1 -0
- package/apps/cli/dist/commands/lib/usage.js +356 -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 +53 -35
- package/apps/cli/dist/commands/loop.js +274 -117
- package/apps/cli/dist/commands/machine.js +246 -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 +1344 -0
- package/apps/cli/dist/commands/relay.js +37 -11
- package/apps/cli/dist/commands/remote.js +232 -33
- package/apps/cli/dist/commands/session.d.ts +26 -0
- package/apps/cli/dist/commands/session.js +947 -109
- package/apps/cli/dist/commands/skill.d.ts +12 -0
- package/apps/cli/dist/commands/skill.js +380 -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 +360 -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 +323 -0
- package/apps/daemon/dist/account-config-lock.d.ts +14 -0
- package/apps/daemon/dist/account-config-lock.js +361 -0
- package/apps/daemon/dist/app.js +0 -1
- package/apps/daemon/dist/args.js +8 -2
- package/apps/daemon/dist/audit.d.ts +1 -1
- package/apps/daemon/dist/audit.js +4 -3
- package/apps/daemon/dist/cli.js +9 -3
- package/apps/daemon/dist/config.d.ts +8 -2
- package/apps/daemon/dist/config.js +226 -12
- 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 +2405 -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/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 +19224 -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 +405 -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 +202 -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 +654 -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/service.d.ts +16 -0
- package/apps/daemon/dist/lifecycle/service.js +12 -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 +950 -69
- 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 +186 -0
- package/apps/daemon/dist/memory/config.d.ts +7 -0
- package/apps/daemon/dist/memory/config.js +25 -0
- package/apps/daemon/dist/memory/flush.d.ts +10 -0
- package/apps/daemon/dist/memory/flush.js +475 -0
- package/apps/daemon/dist/memory/inject.d.ts +24 -0
- package/apps/daemon/dist/memory/inject.js +59 -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 +10 -0
- package/apps/daemon/dist/memory/managers.js +144 -0
- package/apps/daemon/dist/memory/project-commands.d.ts +3 -0
- package/apps/daemon/dist/memory/project-commands.js +394 -0
- package/apps/daemon/dist/pair.js +151 -24
- package/apps/daemon/dist/paths.d.ts +14 -3
- package/apps/daemon/dist/paths.js +30 -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 +239 -19
- 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 +87 -3
- package/apps/daemon/dist/relay/send.d.ts +37 -5
- package/apps/daemon/dist/relay/send.js +289 -23
- 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 +195 -0
- package/apps/daemon/dist/runtime/catalog.d.ts +18 -0
- package/apps/daemon/dist/runtime/catalog.js +119 -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 +1031 -0
- package/apps/daemon/dist/runtime/provider-start-journal.d.ts +64 -0
- package/apps/daemon/dist/runtime/provider-start-journal.js +208 -0
- package/apps/daemon/dist/runtime/recovery-context.d.ts +4 -0
- package/apps/daemon/dist/runtime/recovery-context.js +28 -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 +8 -0
- package/apps/daemon/dist/runtime/session-recovery.js +125 -0
- package/apps/daemon/dist/runtime/turn-projection.d.ts +27 -0
- package/apps/daemon/dist/runtime/turn-projection.js +117 -0
- package/apps/daemon/dist/runtime/turn-supervision.d.ts +45 -0
- package/apps/daemon/dist/runtime/turn-supervision.js +390 -0
- package/apps/daemon/dist/runtime.d.ts +3 -1
- package/apps/daemon/dist/runtime.js +29 -7
- 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 +213 -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 +29 -3
- package/apps/daemon/dist/session/lifecycle.js +893 -97
- package/apps/daemon/dist/session/metadata.d.ts +8 -3
- package/apps/daemon/dist/session/metadata.js +158 -11
- package/apps/daemon/dist/session/primitives.d.ts +1 -1
- package/apps/daemon/dist/session/primitives.js +138 -18
- package/apps/daemon/dist/session/prompt.d.ts +6 -1
- package/apps/daemon/dist/session/prompt.js +841 -123
- package/apps/daemon/dist/session/reconcile.d.ts +4 -0
- package/apps/daemon/dist/session/reconcile.js +225 -0
- package/apps/daemon/dist/session/retry-recovery.d.ts +3 -0
- package/apps/daemon/dist/session/retry-recovery.js +169 -0
- 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 +314 -17
- package/apps/daemon/dist/state.d.ts +32 -2
- package/apps/daemon/dist/state.js +0 -1
- package/apps/daemon/dist/turn-coordinator.d.ts +53 -2
- package/apps/daemon/dist/turn-coordinator.js +202 -4
- package/apps/daemon/dist/types.d.ts +139 -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 +40 -0
- package/apps/relay/dist/account-access-revocation.js +85 -0
- package/apps/relay/dist/account-http-routes.d.ts +3 -0
- package/apps/relay/dist/account-http-routes.js +1146 -0
- package/apps/relay/dist/account-projections.d.ts +41 -0
- package/apps/relay/dist/account-projections.js +99 -0
- package/apps/relay/dist/auth.js +13 -3
- package/apps/relay/dist/connections.d.ts +60 -5
- package/apps/relay/dist/connections.js +2 -1
- package/apps/relay/dist/controller-handlers.d.ts +93 -10
- package/apps/relay/dist/controller-handlers.js +2237 -86
- package/apps/relay/dist/db.d.ts +6 -0
- package/apps/relay/dist/db.js +904 -7
- package/apps/relay/dist/device-recovery-repository.d.ts +38 -0
- package/apps/relay/dist/device-recovery-repository.js +85 -0
- package/apps/relay/dist/enrollment-repository.d.ts +72 -0
- package/apps/relay/dist/enrollment-repository.js +131 -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 +50 -0
- package/apps/relay/dist/http-routes.d.ts +1 -1
- package/apps/relay/dist/http-routes.js +1081 -130
- package/apps/relay/dist/http-schemas.d.ts +105 -10
- package/apps/relay/dist/http-schemas.js +56 -12
- package/apps/relay/dist/index.js +62 -11
- package/apps/relay/dist/machine-command-result-handlers.d.ts +24 -0
- package/apps/relay/dist/machine-command-result-handlers.js +1202 -0
- package/apps/relay/dist/machine-handler-context.d.ts +96 -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/machine-state.d.ts +27 -0
- package/apps/relay/dist/machine-state.js +39 -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 +236 -0
- package/apps/relay/dist/projections.d.ts +2 -2
- package/apps/relay/dist/projections.js +152 -5
- package/apps/relay/dist/relay-context.d.ts +113 -15
- package/apps/relay/dist/relay-context.js +932 -103
- package/apps/relay/dist/repositories.d.ts +5 -3
- package/apps/relay/dist/repositories.js +50 -14
- package/apps/relay/dist/retention.d.ts +6 -0
- package/apps/relay/dist/retention.js +28 -3
- package/apps/relay/dist/scope.d.ts +15 -2
- package/apps/relay/dist/scope.js +208 -16
- package/apps/relay/dist/security.js +0 -1
- package/apps/relay/dist/session-creation-failure.d.ts +4 -0
- package/apps/relay/dist/session-creation-failure.js +54 -0
- package/apps/relay/dist/session-projection-reducer.d.ts +4 -0
- package/apps/relay/dist/session-projection-reducer.js +873 -0
- package/apps/relay/dist/turn-repository.d.ts +175 -0
- package/apps/relay/dist/turn-repository.js +695 -0
- package/apps/relay/dist/types.d.ts +129 -12
- package/apps/relay/dist/types.js +0 -1
- package/apps/relay/dist/ui-probe-router.d.ts +35 -0
- package/apps/relay/dist/ui-probe-router.js +414 -0
- package/apps/relay/dist/websocket.js +273 -32
- package/build-identity.json +6 -0
- package/npm-shrinkwrap.json +2226 -0
- package/package.json +33 -14
- package/packages/agent-sdk/dist/index.d.ts +155 -0
- package/packages/agent-sdk/dist/index.js +272 -0
- package/packages/client/dist/account-management.d.ts +158 -0
- package/packages/client/dist/account-management.js +892 -0
- package/packages/client/dist/account.d.ts +40 -6
- package/packages/client/dist/account.js +134 -33
- package/packages/client/dist/client.d.ts +145 -7
- package/packages/client/dist/client.js +1560 -37
- 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 +14 -2
- package/packages/client/dist/index.js +7 -1
- package/packages/client/dist/live-session-state.d.ts +15 -0
- package/packages/client/dist/live-session-state.js +69 -0
- package/packages/client/dist/live-state.d.ts +8 -0
- package/packages/client/dist/live-state.js +44 -0
- package/packages/client/dist/live-types.d.ts +161 -0
- package/packages/client/dist/live-types.js +1 -0
- package/packages/client/dist/live.d.ts +122 -0
- package/packages/client/dist/live.js +1712 -0
- package/packages/client/dist/parsers.d.ts +4 -5
- package/packages/client/dist/parsers.js +37 -37
- package/packages/client/dist/recovery-context.d.ts +37 -0
- package/packages/client/dist/recovery-context.js +97 -0
- 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 +57 -8
- package/packages/client/dist/transport.js +483 -87
- package/packages/client/dist/turns.d.ts +9 -0
- package/packages/client/dist/turns.js +34 -0
- package/packages/client/dist/types.d.ts +351 -6
- package/packages/client/dist/types.js +0 -1
- package/packages/client/dist/ui-probe.d.ts +116 -0
- package/packages/client/dist/ui-probe.js +826 -0
- package/packages/client/dist/validation.d.ts +2 -2
- package/packages/client/dist/validation.js +41 -13
- package/packages/daemon-service/dist/index.d.ts +186 -0
- package/packages/daemon-service/dist/index.js +2390 -0
- 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 +7 -0
- package/packages/memory/dist/index.js +7 -0
- package/packages/memory/dist/manager.d.ts +71 -0
- package/packages/memory/dist/manager.js +789 -0
- package/packages/memory/dist/paths.d.ts +11 -0
- package/packages/memory/dist/paths.js +42 -0
- package/packages/memory/dist/projects.d.ts +13 -0
- package/packages/memory/dist/projects.js +211 -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 +1463 -0
- package/packages/pie-provider/dist/turn-observation-store.d.ts +44 -0
- package/packages/pie-provider/dist/turn-observation-store.js +306 -0
- package/packages/provider-protocol/dist/index.d.ts +1439 -0
- package/packages/provider-protocol/dist/index.js +476 -0
- package/packages/runtime/dist/index.d.ts +99 -98
- package/packages/runtime/dist/index.js +66 -2
- package/packages/runtime-acpx/dist/index.d.ts +2 -3
- package/packages/runtime-acpx/dist/index.js +206 -3
- package/packages/runtime-acpx/dist/turn-observation-store.d.ts +40 -0
- package/packages/runtime-acpx/dist/turn-observation-store.js +213 -0
- 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 +101 -20
- 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 +2 -3
- package/packages/runtime-cli/dist/claude-session-store.js +24 -11
- package/packages/runtime-cli/dist/claude-turn.d.ts +17 -4
- package/packages/runtime-cli/dist/claude-turn.js +327 -28
- package/packages/runtime-cli/dist/codex-app-server.d.ts +83 -8
- package/packages/runtime-cli/dist/codex-app-server.js +1303 -56
- 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 +12 -3
- package/packages/runtime-cli/dist/codex-history.js +585 -12
- package/packages/runtime-cli/dist/codex-json-rpc.d.ts +30 -2
- package/packages/runtime-cli/dist/codex-json-rpc.js +306 -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 +47 -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 +15 -3
- package/packages/runtime-cli/dist/index.js +537 -62
- package/packages/runtime-cli/dist/permissions.d.ts +1 -2
- package/packages/runtime-cli/dist/permissions.js +3 -4
- package/packages/runtime-cli/dist/persistent-turn-observation-store.d.ts +50 -0
- package/packages/runtime-cli/dist/persistent-turn-observation-store.js +252 -0
- 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-store.d.ts +43 -2
- package/packages/runtime-cli/dist/session-store.js +264 -22
- package/packages/runtime-cli/dist/turn-observation.d.ts +33 -0
- package/packages/runtime-cli/dist/turn-observation.js +114 -0
- package/packages/shared/dist/account.d.ts +302 -0
- package/packages/shared/dist/account.js +348 -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 +261 -1
- package/packages/shared/dist/crypto.js +635 -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 +7 -1
- package/packages/shared/dist/index.js +7 -1
- 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 +279 -0
- package/packages/shared/dist/node/gateway-store.js +2451 -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 +558 -16
- package/packages/shared/dist/protocol-schemas.js +304 -1
- package/packages/shared/dist/protocol-types.d.ts +524 -1
- package/packages/shared/dist/protocol-types.js +0 -1
- package/packages/shared/dist/protocol.d.ts +664 -7
- package/packages/shared/dist/protocol.js +845 -14
- 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-state.d.ts +1 -2
- package/packages/shared/dist/session-state.js +3 -6
- package/packages/shared/dist/turn-state.d.ts +72 -0
- package/packages/shared/dist/turn-state.js +24 -0
- package/packages/shared/dist/ui-probe.d.ts +459 -0
- package/packages/shared/dist/ui-probe.js +257 -0
- 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.d.ts +0 -5
- package/apps/cli/dist/commands/lib/loop-store.js +0 -78
- 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
package/README.md
CHANGED
|
@@ -5,11 +5,19 @@ Public beta CLI for Happy Elves.
|
|
|
5
5
|
## Hosted relay
|
|
6
6
|
|
|
7
7
|
```bash
|
|
8
|
-
happy-elves
|
|
8
|
+
happy-elves start
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
Reconnect this Device to an existing Account with a one-time invite from Settings → Devices → Add Device (the CLI command name is retained for compatibility):
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
happy-elves remote join-controller --url "<invite-url>" --recover-controller --json
|
|
9
15
|
```
|
|
10
16
|
|
|
11
17
|
## Self-host relay
|
|
12
18
|
|
|
13
19
|
```bash
|
|
20
|
+
HAPPY_ELVES_ENV=production \
|
|
21
|
+
HAPPY_ELVES_ALLOWED_ORIGINS=https://your-controller.example \
|
|
14
22
|
happy-elves relay serve --host 0.0.0.0 --port 8787 --json
|
|
15
23
|
```
|
|
@@ -1,2 +1,6 @@
|
|
|
1
1
|
import type { CommandInput } from "./command.js";
|
|
2
|
+
export declare function confirmReset(flags: Record<string, string | boolean>, testIo?: {
|
|
3
|
+
interactive: boolean;
|
|
4
|
+
question?: () => Promise<string>;
|
|
5
|
+
}): Promise<void>;
|
|
2
6
|
export declare function handleAccount({ domain, action, flags }: CommandInput): Promise<boolean>;
|
|
@@ -1,51 +1,419 @@
|
|
|
1
1
|
import fs from "node:fs/promises";
|
|
2
2
|
import os from "node:os";
|
|
3
3
|
import path from "node:path";
|
|
4
|
-
import {
|
|
4
|
+
import { createInterface } from "node:readline/promises";
|
|
5
|
+
import { accountBindingPath, assertNoPendingEnrollmentAuthority, CliError, configDir, configPath, generateAccountSecret, ok, parseControllerConfig, parseDaemonConfig, parseLocalAccountBinding, parsePairingStartResponse, randomId, readLocalAccountBinding, readRelayJson, requireRelayUrl, stopLocalDaemon, throwRelayHttpError, withAccountConfigTransaction, } from "./lib/index.js";
|
|
6
|
+
import { createLocalAccountBindingV1, localAccountBindingMatchesV1, } from "../../../../packages/shared/dist/index.js";
|
|
7
|
+
import { commitAccountSnapshotMutation, } from "./lib/account-snapshot.js";
|
|
8
|
+
const daemonConfigPath = path.join(configDir, "daemon.json");
|
|
9
|
+
const accountConfigFiles = ["config.json", "daemon.json", "account.json"];
|
|
10
|
+
const accountCreateRelayTimeoutMs = 15_000;
|
|
11
|
+
function accountConfigTarget(file) {
|
|
12
|
+
if (file === "config.json")
|
|
13
|
+
return configPath;
|
|
14
|
+
return file === "daemon.json" ? daemonConfigPath : accountBindingPath;
|
|
15
|
+
}
|
|
16
|
+
export async function confirmReset(flags, testIo) {
|
|
17
|
+
if (flags.json === true) {
|
|
18
|
+
if (flags.yes === true)
|
|
19
|
+
return;
|
|
20
|
+
throw new CliError("account reset --json requires --yes", "CONFIRMATION_REQUIRED");
|
|
21
|
+
}
|
|
22
|
+
const interactive = testIo?.interactive ?? Boolean(process.stdin.isTTY && process.stdout.isTTY);
|
|
23
|
+
if (!interactive) {
|
|
24
|
+
if (flags.yes === true)
|
|
25
|
+
return;
|
|
26
|
+
throw new CliError("account reset requires --yes in non-interactive mode", "CONFIRMATION_REQUIRED");
|
|
27
|
+
}
|
|
28
|
+
if (testIo?.question) {
|
|
29
|
+
const answer = await testIo.question();
|
|
30
|
+
if (answer.trim() !== "RESET")
|
|
31
|
+
throw new CliError("Account reset cancelled", "CONFIRMATION_REQUIRED");
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
const prompt = createInterface({ input: process.stdin, output: process.stdout });
|
|
35
|
+
try {
|
|
36
|
+
const answer = await prompt.question("Type RESET to remove this controller and daemon configuration: ");
|
|
37
|
+
if (answer.trim() !== "RESET")
|
|
38
|
+
throw new CliError("Account reset cancelled", "CONFIRMATION_REQUIRED");
|
|
39
|
+
}
|
|
40
|
+
finally {
|
|
41
|
+
prompt.close();
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
async function confirmRestore(flags, requiresConfirmation, testIo) {
|
|
45
|
+
if (!requiresConfirmation)
|
|
46
|
+
return;
|
|
47
|
+
if (flags.json === true) {
|
|
48
|
+
if (flags.yes === true)
|
|
49
|
+
return;
|
|
50
|
+
throw new CliError("account restore --json requires --yes when replacing or removing configuration", "CONFIRMATION_REQUIRED");
|
|
51
|
+
}
|
|
52
|
+
const interactive = testIo?.interactive ?? Boolean(process.stdin.isTTY && process.stdout.isTTY);
|
|
53
|
+
if (!interactive) {
|
|
54
|
+
if (flags.yes === true)
|
|
55
|
+
return;
|
|
56
|
+
throw new CliError("account restore requires --yes in non-interactive mode when replacing or removing configuration", "CONFIRMATION_REQUIRED");
|
|
57
|
+
}
|
|
58
|
+
if (testIo?.question) {
|
|
59
|
+
const answer = await testIo.question();
|
|
60
|
+
if (answer.trim() !== "RESTORE")
|
|
61
|
+
throw new CliError("Account restore cancelled", "CONFIRMATION_REQUIRED");
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
const prompt = createInterface({ input: process.stdin, output: process.stdout });
|
|
65
|
+
try {
|
|
66
|
+
const answer = await prompt.question("Type RESTORE to replace the current controller and daemon configuration: ");
|
|
67
|
+
if (answer.trim() !== "RESTORE")
|
|
68
|
+
throw new CliError("Account restore cancelled", "CONFIRMATION_REQUIRED");
|
|
69
|
+
}
|
|
70
|
+
finally {
|
|
71
|
+
prompt.close();
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
async function copyConfigIfPresent(source, target) {
|
|
75
|
+
try {
|
|
76
|
+
const stat = await fs.lstat(source);
|
|
77
|
+
if (!stat.isFile() || stat.isSymbolicLink())
|
|
78
|
+
throw new CliError(`Refusing to copy non-regular config file: ${source}`, "CONFIG_BACKUP_UNSAFE");
|
|
79
|
+
const contents = await fs.readFile(source);
|
|
80
|
+
let handle;
|
|
81
|
+
try {
|
|
82
|
+
handle = await fs.open(target, "wx", 0o600);
|
|
83
|
+
await handle.writeFile(contents);
|
|
84
|
+
await handle.chmod(0o600);
|
|
85
|
+
await handle.sync();
|
|
86
|
+
}
|
|
87
|
+
finally {
|
|
88
|
+
await handle?.close().catch(() => undefined);
|
|
89
|
+
}
|
|
90
|
+
return true;
|
|
91
|
+
}
|
|
92
|
+
catch (error) {
|
|
93
|
+
if (error.code === "ENOENT")
|
|
94
|
+
return false;
|
|
95
|
+
throw error;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
const unsupportedWindowsDirectorySyncCodes = new Set(["EINVAL", "ENOTSUP", "EISDIR", "EPERM"]);
|
|
99
|
+
async function syncDirectory(directory) {
|
|
100
|
+
let handle;
|
|
101
|
+
try {
|
|
102
|
+
handle = await fs.open(directory, "r");
|
|
103
|
+
await handle.sync();
|
|
104
|
+
}
|
|
105
|
+
catch (error) {
|
|
106
|
+
if (process.platform !== "win32"
|
|
107
|
+
|| !unsupportedWindowsDirectorySyncCodes.has(error.code ?? ""))
|
|
108
|
+
throw error;
|
|
109
|
+
}
|
|
110
|
+
finally {
|
|
111
|
+
await handle?.close().catch(() => undefined);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
async function writeSyncedBackupManifest(filePath, contents) {
|
|
115
|
+
let handle;
|
|
116
|
+
try {
|
|
117
|
+
handle = await fs.open(filePath, "wx", 0o600);
|
|
118
|
+
await handle.writeFile(contents, "utf8");
|
|
119
|
+
await handle.chmod(0o600);
|
|
120
|
+
await handle.sync();
|
|
121
|
+
}
|
|
122
|
+
finally {
|
|
123
|
+
await handle?.close().catch(() => undefined);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
async function backupAccountConfig(prefix = "account-reset") {
|
|
127
|
+
const stamp = new Date().toISOString().replace(/[:.]/gu, "-");
|
|
128
|
+
const backupsRoot = path.join(configDir, "backups");
|
|
129
|
+
let rootCreated = false;
|
|
130
|
+
try {
|
|
131
|
+
await fs.mkdir(backupsRoot, { mode: 0o700 });
|
|
132
|
+
rootCreated = true;
|
|
133
|
+
}
|
|
134
|
+
catch (error) {
|
|
135
|
+
if (error.code !== "EEXIST")
|
|
136
|
+
throw error;
|
|
137
|
+
}
|
|
138
|
+
const backupsStat = await fs.lstat(backupsRoot);
|
|
139
|
+
if (!backupsStat.isDirectory() || backupsStat.isSymbolicLink()) {
|
|
140
|
+
throw new CliError("Refusing to write an account backup through an unsafe backups path.", "CONFIG_BACKUP_UNSAFE");
|
|
141
|
+
}
|
|
142
|
+
await fs.chmod(backupsRoot, 0o700);
|
|
143
|
+
if (rootCreated)
|
|
144
|
+
await syncDirectory(configDir);
|
|
145
|
+
const backupPath = path.join(backupsRoot, `${prefix}-${stamp}-${randomId("backup")}`);
|
|
146
|
+
const stagingPath = path.join(backupsRoot, `.account-backup-staging-${randomId("backup")}`);
|
|
147
|
+
await fs.mkdir(stagingPath, { mode: 0o700 });
|
|
148
|
+
await fs.chmod(stagingPath, 0o700);
|
|
149
|
+
await syncDirectory(backupsRoot);
|
|
150
|
+
const files = [];
|
|
151
|
+
if (await copyConfigIfPresent(configPath, path.join(stagingPath, "config.json")))
|
|
152
|
+
files.push("config.json");
|
|
153
|
+
if (await copyConfigIfPresent(daemonConfigPath, path.join(stagingPath, "daemon.json")))
|
|
154
|
+
files.push("daemon.json");
|
|
155
|
+
if (await copyConfigIfPresent(accountBindingPath, path.join(stagingPath, "account.json")))
|
|
156
|
+
files.push("account.json");
|
|
157
|
+
await writeSyncedBackupManifest(path.join(stagingPath, "manifest.json"), JSON.stringify({ version: 1, createdAt: new Date().toISOString(), files }, null, 2) + "\n");
|
|
158
|
+
await syncDirectory(stagingPath);
|
|
159
|
+
await fs.rename(stagingPath, backupPath);
|
|
160
|
+
await syncDirectory(backupsRoot);
|
|
161
|
+
return { path: backupPath, files };
|
|
162
|
+
}
|
|
163
|
+
async function requireDaemonStopped() {
|
|
164
|
+
let stop;
|
|
165
|
+
try {
|
|
166
|
+
stop = await stopLocalDaemon();
|
|
167
|
+
}
|
|
168
|
+
catch (error) {
|
|
169
|
+
if (error instanceof CliError && ["DAEMON_PID_UNVERIFIED", "DAEMON_PID_VERSION_UNSUPPORTED", "DAEMON_PID_INVALID"].includes(error.code))
|
|
170
|
+
throw error;
|
|
171
|
+
throw new CliError(`Could not stop the local daemon: ${error instanceof Error ? error.message : String(error)}`, "DAEMON_STOP_FAILED");
|
|
172
|
+
}
|
|
173
|
+
if (stop.running) {
|
|
174
|
+
throw new CliError(`The local daemon${stop.pid ? ` (pid ${stop.pid})` : ""} did not stop. Configuration was not changed; stop it and retry.`, "DAEMON_STOP_FAILED");
|
|
175
|
+
}
|
|
176
|
+
return stop;
|
|
177
|
+
}
|
|
178
|
+
async function requireRegularBackupFile(filePath) {
|
|
179
|
+
let stat;
|
|
180
|
+
try {
|
|
181
|
+
stat = await fs.lstat(filePath);
|
|
182
|
+
}
|
|
183
|
+
catch (error) {
|
|
184
|
+
if (error.code === "ENOENT") {
|
|
185
|
+
throw new CliError(`Account backup is missing ${path.basename(filePath)}.`, "ACCOUNT_BACKUP_INVALID");
|
|
186
|
+
}
|
|
187
|
+
throw error;
|
|
188
|
+
}
|
|
189
|
+
if (!stat.isFile() || stat.isSymbolicLink()) {
|
|
190
|
+
throw new CliError(`Account backup contains an unsafe ${path.basename(filePath)}.`, "ACCOUNT_BACKUP_INVALID");
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
async function stageAccountRestore(backupPath, requestedFiles) {
|
|
194
|
+
await fs.mkdir(configDir, { recursive: true, mode: 0o700 });
|
|
195
|
+
await fs.chmod(configDir, 0o700);
|
|
196
|
+
const stagingPath = await fs.mkdtemp(path.join(configDir, ".account-restore-"));
|
|
197
|
+
await fs.chmod(stagingPath, 0o700);
|
|
198
|
+
let files = [...requestedFiles];
|
|
199
|
+
let controller;
|
|
200
|
+
let daemon;
|
|
201
|
+
let binding;
|
|
202
|
+
try {
|
|
203
|
+
for (const file of files) {
|
|
204
|
+
const source = path.join(backupPath, file);
|
|
205
|
+
await requireRegularBackupFile(source);
|
|
206
|
+
const contents = await fs.readFile(source, "utf8");
|
|
207
|
+
try {
|
|
208
|
+
const parsed = JSON.parse(contents);
|
|
209
|
+
if (file === "config.json")
|
|
210
|
+
controller = parseControllerConfig(parsed);
|
|
211
|
+
else if (file === "daemon.json")
|
|
212
|
+
daemon = parseDaemonConfig(parsed);
|
|
213
|
+
else if (file === "account.json")
|
|
214
|
+
binding = parseLocalAccountBinding(parsed);
|
|
215
|
+
}
|
|
216
|
+
catch {
|
|
217
|
+
throw new CliError(`Account backup ${file} is not valid JSON.`, "ACCOUNT_BACKUP_INVALID");
|
|
218
|
+
}
|
|
219
|
+
const staged = path.join(stagingPath, file);
|
|
220
|
+
await fs.writeFile(staged, contents, { mode: 0o600, flag: "wx" });
|
|
221
|
+
await fs.chmod(staged, 0o600);
|
|
222
|
+
}
|
|
223
|
+
if (controller && daemon &&
|
|
224
|
+
(controller.relayUrl !== daemon.relayUrl ||
|
|
225
|
+
controller.accountSecret !== daemon.accountSecret)) {
|
|
226
|
+
throw new CliError("Account backup Device and Daemon credentials identify different Accounts.", "ACCOUNT_BACKUP_INVALID");
|
|
227
|
+
}
|
|
228
|
+
if (binding) {
|
|
229
|
+
if (controller && !localAccountBindingMatchesV1(binding, {
|
|
230
|
+
relayUrl: controller.relayUrl,
|
|
231
|
+
accountSecret: controller.accountSecret,
|
|
232
|
+
}) ||
|
|
233
|
+
daemon && !localAccountBindingMatchesV1(binding, {
|
|
234
|
+
relayUrl: daemon.relayUrl,
|
|
235
|
+
accountId: daemon.accountId,
|
|
236
|
+
accountSecret: daemon.accountSecret,
|
|
237
|
+
})) {
|
|
238
|
+
throw new CliError("Account backup binding does not match its Device or Daemon credential.", "ACCOUNT_BACKUP_INVALID");
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
else if (controller || daemon) {
|
|
242
|
+
const credential = controller ?? daemon;
|
|
243
|
+
if (!credential)
|
|
244
|
+
throw new CliError("Account backup credential is missing.", "ACCOUNT_BACKUP_INVALID");
|
|
245
|
+
binding = createLocalAccountBindingV1({
|
|
246
|
+
relayUrl: credential.relayUrl,
|
|
247
|
+
accountId: daemon?.accountId ?? null,
|
|
248
|
+
accountSecret: credential.accountSecret,
|
|
249
|
+
});
|
|
250
|
+
const stagedBinding = path.join(stagingPath, "account.json");
|
|
251
|
+
await fs.writeFile(stagedBinding, `${JSON.stringify(binding, null, 2)}\n`, { mode: 0o600, flag: "wx" });
|
|
252
|
+
await fs.chmod(stagedBinding, 0o600);
|
|
253
|
+
files = [...files, "account.json"];
|
|
254
|
+
}
|
|
255
|
+
return { path: stagingPath, files };
|
|
256
|
+
}
|
|
257
|
+
catch (error) {
|
|
258
|
+
await fs.rm(stagingPath, { recursive: true, force: true });
|
|
259
|
+
throw error;
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
async function currentAccountConfigFiles() {
|
|
263
|
+
const existing = [];
|
|
264
|
+
for (const file of accountConfigFiles) {
|
|
265
|
+
const target = accountConfigTarget(file);
|
|
266
|
+
try {
|
|
267
|
+
const stat = await fs.lstat(target);
|
|
268
|
+
if (!stat.isFile() || stat.isSymbolicLink()) {
|
|
269
|
+
throw new CliError(`Refusing to replace unsafe account config: ${target}`, "ACCOUNT_RESTORE_UNSAFE");
|
|
270
|
+
}
|
|
271
|
+
existing.push(file);
|
|
272
|
+
}
|
|
273
|
+
catch (error) {
|
|
274
|
+
if (error.code === "ENOENT")
|
|
275
|
+
continue;
|
|
276
|
+
throw error;
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
return existing;
|
|
280
|
+
}
|
|
5
281
|
export async function handleAccount({ domain, action, flags }) {
|
|
6
282
|
if (domain === "account" && action === "create") {
|
|
7
|
-
const
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
283
|
+
const created = await withAccountConfigTransaction(async (transaction) => {
|
|
284
|
+
await assertNoPendingEnrollmentAuthority();
|
|
285
|
+
// This check intentionally precedes every relay request. Holding the
|
|
286
|
+
// account-wide lease through pairing prevents concurrent creators from
|
|
287
|
+
// producing an orphan remote account and racing the local credential.
|
|
288
|
+
if (await transaction.accountExists() ||
|
|
289
|
+
await transaction.controllerExists() ||
|
|
290
|
+
await transaction.daemonExists()) {
|
|
291
|
+
throw new CliError("Happy Elves account configuration already exists. Use an invite to recover the existing account; account create never replaces credentials.", "CONFIG_EXISTS");
|
|
292
|
+
}
|
|
293
|
+
const relayUrl = requireRelayUrl(flags);
|
|
294
|
+
const deviceId = typeof flags["device-id"] === "string" ? flags["device-id"] : randomId("dev");
|
|
295
|
+
const deviceName = typeof flags["device-name"] === "string" ? flags["device-name"] : os.hostname();
|
|
296
|
+
const accountSecret = generateAccountSecret();
|
|
297
|
+
let response;
|
|
298
|
+
try {
|
|
299
|
+
response = await fetch(`${relayUrl}/api/pairing/start`, {
|
|
300
|
+
method: "POST",
|
|
301
|
+
headers: { "content-type": "application/json" },
|
|
302
|
+
body: JSON.stringify({ deviceId, deviceName, surface: "cli" }),
|
|
303
|
+
signal: AbortSignal.timeout(accountCreateRelayTimeoutMs),
|
|
304
|
+
});
|
|
305
|
+
}
|
|
306
|
+
catch (error) {
|
|
307
|
+
if (error.name === "TimeoutError") {
|
|
308
|
+
throw new CliError("Timed out creating the account at the relay. No local configuration was written.", "RELAY_TIMEOUT");
|
|
309
|
+
}
|
|
310
|
+
throw error;
|
|
311
|
+
}
|
|
312
|
+
if (!response.ok) {
|
|
313
|
+
await throwRelayHttpError(response, "Account creation failed");
|
|
314
|
+
}
|
|
315
|
+
const paired = parsePairingStartResponse(await readRelayJson(response, "Account creation response is not valid JSON"));
|
|
316
|
+
const config = {
|
|
317
|
+
relayUrl,
|
|
318
|
+
controllerToken: paired.controllerToken,
|
|
319
|
+
accountSecret,
|
|
320
|
+
};
|
|
321
|
+
await transaction.writeController(config, "create", paired.accountId);
|
|
322
|
+
return {
|
|
323
|
+
accountId: paired.accountId,
|
|
324
|
+
configPath,
|
|
325
|
+
relayUrl,
|
|
326
|
+
deviceId,
|
|
327
|
+
controllerToken: paired.controllerToken,
|
|
328
|
+
accountSecret,
|
|
329
|
+
pairingCode: paired.pairingCode,
|
|
330
|
+
expiresAt: paired.expiresAt,
|
|
331
|
+
};
|
|
34
332
|
});
|
|
333
|
+
if (flags["reveal-secrets"] === true) {
|
|
334
|
+
ok("account.create", created);
|
|
335
|
+
}
|
|
336
|
+
else {
|
|
337
|
+
const { controllerToken: _controllerToken, accountSecret: _accountSecret, ...safeCreated } = created;
|
|
338
|
+
ok("account.create", safeCreated);
|
|
339
|
+
}
|
|
35
340
|
return true;
|
|
36
341
|
}
|
|
37
342
|
if (domain === "account" && action === "reset") {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
await
|
|
42
|
-
await
|
|
343
|
+
await confirmReset(flags);
|
|
344
|
+
// Reject an unknown or malformed ownership boundary before stopping a
|
|
345
|
+
// healthy Daemon. The locked read below repeats this check at commit.
|
|
346
|
+
await readLocalAccountBinding();
|
|
347
|
+
await assertNoPendingEnrollmentAuthority();
|
|
348
|
+
const { backup, stop } = await withAccountConfigTransaction(async (transaction) => {
|
|
349
|
+
await transaction.readAccountBinding();
|
|
350
|
+
await assertNoPendingEnrollmentAuthority();
|
|
351
|
+
// Lock order is Account config -> verified Daemon lifetime. Local
|
|
352
|
+
// start/restart use the same order, so no process can reload the old
|
|
353
|
+
// credential between this stop and the snapshot commit.
|
|
354
|
+
const stop = await requireDaemonStopped();
|
|
355
|
+
const result = await backupAccountConfig();
|
|
356
|
+
await commitAccountSnapshotMutation({}, "reset");
|
|
357
|
+
return { backup: result, stop };
|
|
358
|
+
});
|
|
43
359
|
ok("account.reset", {
|
|
44
|
-
removed: [configPath,
|
|
360
|
+
removed: [configPath, daemonConfigPath, accountBindingPath],
|
|
361
|
+
backup,
|
|
362
|
+
restoreCommand: `happy-elves account restore --from ${JSON.stringify(backup.path)} --yes --json`,
|
|
45
363
|
stop,
|
|
46
364
|
});
|
|
47
365
|
return true;
|
|
48
366
|
}
|
|
367
|
+
if (domain === "account" && action === "restore") {
|
|
368
|
+
const backupPath = typeof flags.from === "string" && flags.from.trim() ? path.resolve(flags.from) : undefined;
|
|
369
|
+
if (!backupPath)
|
|
370
|
+
throw new CliError("Missing --from", "MISSING_ARGUMENT");
|
|
371
|
+
const manifestPath = path.join(backupPath, "manifest.json");
|
|
372
|
+
let manifest;
|
|
373
|
+
try {
|
|
374
|
+
await requireRegularBackupFile(manifestPath);
|
|
375
|
+
manifest = JSON.parse(await fs.readFile(manifestPath, "utf8"));
|
|
376
|
+
}
|
|
377
|
+
catch (error) {
|
|
378
|
+
throw new CliError(`Invalid account backup: ${error instanceof Error ? error.message : String(error)}`, "ACCOUNT_BACKUP_INVALID");
|
|
379
|
+
}
|
|
380
|
+
if (manifest.version !== 1 ||
|
|
381
|
+
!Array.isArray(manifest.files) ||
|
|
382
|
+
!manifest.files.every((file) => accountConfigFiles.includes(file)) ||
|
|
383
|
+
new Set(manifest.files).size !== manifest.files.length) {
|
|
384
|
+
throw new CliError("Account backup manifest is invalid", "ACCOUNT_BACKUP_INVALID");
|
|
385
|
+
}
|
|
386
|
+
const files = manifest.files;
|
|
387
|
+
const staged = await stageAccountRestore(backupPath, files);
|
|
388
|
+
try {
|
|
389
|
+
const existing = await currentAccountConfigFiles();
|
|
390
|
+
await confirmRestore(flags, files.length === 0 || existing.length > 0);
|
|
391
|
+
await readLocalAccountBinding();
|
|
392
|
+
await assertNoPendingEnrollmentAuthority();
|
|
393
|
+
const { preRestoreBackup, restored, stop } = await withAccountConfigTransaction(async (transaction) => {
|
|
394
|
+
await transaction.readAccountBinding();
|
|
395
|
+
await assertNoPendingEnrollmentAuthority();
|
|
396
|
+
const stop = await requireDaemonStopped();
|
|
397
|
+
const preRestoreBackup = await backupAccountConfig("account-pre-restore");
|
|
398
|
+
const desired = {};
|
|
399
|
+
for (const file of staged.files) {
|
|
400
|
+
desired[file] = await fs.readFile(path.join(staged.path, file), "utf8");
|
|
401
|
+
}
|
|
402
|
+
const restored = await commitAccountSnapshotMutation(desired, "restore");
|
|
403
|
+
return { preRestoreBackup, restored, stop };
|
|
404
|
+
});
|
|
405
|
+
ok("account.restore", {
|
|
406
|
+
backupPath,
|
|
407
|
+
...restored,
|
|
408
|
+
preRestoreBackup,
|
|
409
|
+
restorePreviousCommand: `happy-elves account restore --from ${JSON.stringify(preRestoreBackup.path)} --yes --json`,
|
|
410
|
+
stop,
|
|
411
|
+
});
|
|
412
|
+
}
|
|
413
|
+
finally {
|
|
414
|
+
await fs.rm(staged.path, { recursive: true, force: true });
|
|
415
|
+
}
|
|
416
|
+
return true;
|
|
417
|
+
}
|
|
49
418
|
return false;
|
|
50
419
|
}
|
|
51
|
-
//# sourceMappingURL=account.js.map
|
|
@@ -1,19 +1,20 @@
|
|
|
1
1
|
import { handleAccount } from "./account.js";
|
|
2
|
-
import { handleCancel } from "./cancel.js";
|
|
3
2
|
import { handleCollect } from "./collect.js";
|
|
4
3
|
import { handleConfig } from "./config.js";
|
|
5
4
|
import { handleDaemon } from "./daemon.js";
|
|
5
|
+
import { handleDiagnostics } from "./diagnostics.js";
|
|
6
|
+
import { handleGateway } from "./gateway.js";
|
|
6
7
|
import { handleLoop } from "./loop.js";
|
|
7
8
|
import { handleMachine } from "./machine.js";
|
|
9
|
+
import { handleMemory } from "./memory.js";
|
|
10
|
+
import { handleOrchestrator } from "./orchestrator.js";
|
|
8
11
|
import { handleRelay } from "./relay.js";
|
|
9
12
|
import { handleRemote } from "./remote.js";
|
|
10
|
-
import { handleResult } from "./result.js";
|
|
11
|
-
import { handleRun } from "./run.js";
|
|
12
13
|
import { handleSession } from "./session.js";
|
|
14
|
+
import { handleSkill } from "./skill.js";
|
|
13
15
|
import { handleToken } from "./token.js";
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
16
|
-
import { commandUsage, commandUsageText, handleCliError, parseCliFlags, startBootstrap, topLevelDoctor, topLevelStatus, usage, usageText } from "./lib/index.js";
|
|
16
|
+
import { handleTurn } from "./turn.js";
|
|
17
|
+
import { buildIdentity, cliVersion, commandUsage, commandUsageText, handleCliError, ok, parseCliFlags, skillText, startBootstrap, topLevelDoctor, topLevelStatus, usage, usageText } from "./lib/index.js";
|
|
17
18
|
export { handleCliError };
|
|
18
19
|
const domainHandlers = [
|
|
19
20
|
handleAccount,
|
|
@@ -22,26 +23,43 @@ const domainHandlers = [
|
|
|
22
23
|
handleToken,
|
|
23
24
|
handleLoop,
|
|
24
25
|
handleDaemon,
|
|
26
|
+
handleDiagnostics,
|
|
25
27
|
handleRelay,
|
|
26
28
|
handleMachine,
|
|
27
|
-
|
|
29
|
+
handleMemory,
|
|
30
|
+
handleGateway,
|
|
31
|
+
handleOrchestrator,
|
|
28
32
|
handleSession,
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
handleWait,
|
|
33
|
+
handleSkill,
|
|
34
|
+
handleTurn,
|
|
32
35
|
handleCollect,
|
|
33
|
-
handleCancel,
|
|
34
36
|
];
|
|
35
|
-
const directSessionIdCommands = new Set(["run", "result", "wait", "collect", "cancel"]);
|
|
36
37
|
export async function main() {
|
|
37
|
-
const
|
|
38
|
+
const rawArgv = process.argv.slice(2);
|
|
39
|
+
const argv = rawArgv[0] === "--" ? rawArgv.slice(1) : rawArgv;
|
|
38
40
|
const [domain] = argv;
|
|
39
41
|
if (!domain)
|
|
40
42
|
usage();
|
|
43
|
+
if (domain === "--skill") {
|
|
44
|
+
console.log(skillText());
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
41
47
|
if (domain === "--help" || domain === "-h" || domain === "help") {
|
|
42
48
|
console.log(usageText());
|
|
43
49
|
return;
|
|
44
50
|
}
|
|
51
|
+
if (domain === "--version" || domain === "-v") {
|
|
52
|
+
console.log(cliVersion());
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
if (domain === "version") {
|
|
56
|
+
const { flags } = parseCliFlags(argv.slice(1));
|
|
57
|
+
if (flags.json === true)
|
|
58
|
+
ok("version", buildIdentity());
|
|
59
|
+
else
|
|
60
|
+
console.log(cliVersion());
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
45
63
|
const topLevelHelpRequested = argv[1] === "help" || argv.slice(1).some((arg) => arg === "--help" || arg === "-h");
|
|
46
64
|
if (topLevelHelpRequested && commandUsageText(domain)) {
|
|
47
65
|
console.log(commandUsageText(domain));
|
|
@@ -62,13 +80,9 @@ export async function main() {
|
|
|
62
80
|
await topLevelStatus(flags);
|
|
63
81
|
return;
|
|
64
82
|
}
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
if (
|
|
68
|
-
action = undefined;
|
|
69
|
-
rest = argv.slice(1);
|
|
70
|
-
}
|
|
71
|
-
if (!directSessionIdCommands.has(domain) && (!action || action.startsWith("-")) && commandUsageText(domain)) {
|
|
83
|
+
const action = argv[1];
|
|
84
|
+
const rest = argv.slice(2);
|
|
85
|
+
if ((!action || action.startsWith("-")) && commandUsageText(domain)) {
|
|
72
86
|
commandUsage(domain);
|
|
73
87
|
}
|
|
74
88
|
const { positional, flags } = parseCliFlags(rest);
|
|
@@ -83,4 +97,3 @@ export async function main() {
|
|
|
83
97
|
}
|
|
84
98
|
usage();
|
|
85
99
|
}
|
|
86
|
-
//# sourceMappingURL=app.js.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { CliError, ControllerClient, ok, parseEventCursor, printConciseEvents, readConfig, requirePositional, wantsJson, wantsVerbose } from "./lib/index.js";
|
|
1
|
+
import { CliError, ControllerClient, conciseEvents, ok, parseEventCursor, printConciseEvents, readConfig, requirePositional, wantsJson, wantsVerbose } from "./lib/index.js";
|
|
2
2
|
export async function handleCollect({ domain, action, flags }) {
|
|
3
3
|
if (domain !== "collect")
|
|
4
4
|
return false;
|
|
@@ -14,7 +14,13 @@ export async function handleCollect({ domain, action, flags }) {
|
|
|
14
14
|
const lastEventId = events.at(-1)?.id;
|
|
15
15
|
const nextSince = lastEventId === undefined ? (since ?? null) : `cursor_${lastEventId}`;
|
|
16
16
|
if (wantsJson(flags) || wantsVerbose(flags)) {
|
|
17
|
-
ok("session.collect", {
|
|
17
|
+
ok("session.collect", {
|
|
18
|
+
sessionId,
|
|
19
|
+
debugOnly: true,
|
|
20
|
+
cursor: nextSince,
|
|
21
|
+
nextSince,
|
|
22
|
+
...(wantsVerbose(flags) ? { events } : { events: conciseEvents(events) }),
|
|
23
|
+
}, { sessionId });
|
|
18
24
|
}
|
|
19
25
|
else {
|
|
20
26
|
printConciseEvents(events);
|
|
@@ -22,4 +28,3 @@ export async function handleCollect({ domain, action, flags }) {
|
|
|
22
28
|
}
|
|
23
29
|
return true;
|
|
24
30
|
}
|
|
25
|
-
//# sourceMappingURL=collect.js.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { configPath, ok, readConfig, redactedControllerConfig, requireRelayUrl, requireString, wantsJson,
|
|
1
|
+
import { assertNoPendingEnrollmentAuthority, CliError, configPath, ok, readConfig, redactedControllerConfig, redactedRelayUrl, requireRelayUrl, requireString, wantsJson, withAccountConfigTransaction } from "./lib/index.js";
|
|
2
2
|
export async function handleConfig({ domain, action, flags }) {
|
|
3
3
|
if (domain === "config" && action === "init") {
|
|
4
4
|
const config = {
|
|
@@ -6,8 +6,20 @@ export async function handleConfig({ domain, action, flags }) {
|
|
|
6
6
|
controllerToken: requireString(flags, "token"),
|
|
7
7
|
accountSecret: requireString(flags, "secret"),
|
|
8
8
|
};
|
|
9
|
-
await
|
|
10
|
-
|
|
9
|
+
await withAccountConfigTransaction(async (transaction) => {
|
|
10
|
+
await assertNoPendingEnrollmentAuthority();
|
|
11
|
+
if (await transaction.accountExists()) {
|
|
12
|
+
throw new CliError("Account binding already exists. config init never replaces Account ownership.", "CONFIG_EXISTS");
|
|
13
|
+
}
|
|
14
|
+
if (await transaction.controllerExists()) {
|
|
15
|
+
throw new CliError("Controller configuration already exists. config init never replaces credentials.", "CONFIG_EXISTS");
|
|
16
|
+
}
|
|
17
|
+
if (await transaction.daemonExists()) {
|
|
18
|
+
throw new CliError("A daemon configuration already exists. Recover a controller with a same-account invite instead of creating an unverifiable split configuration.", "CONFIG_SPLIT_BRAIN");
|
|
19
|
+
}
|
|
20
|
+
await transaction.writeController(config, "create");
|
|
21
|
+
});
|
|
22
|
+
ok("config.init", { path: configPath, relayUrl: redactedRelayUrl(config.relayUrl) });
|
|
11
23
|
return true;
|
|
12
24
|
}
|
|
13
25
|
if (domain === "config" && action === "show") {
|
|
@@ -16,7 +28,7 @@ export async function handleConfig({ domain, action, flags }) {
|
|
|
16
28
|
const redacted = redactedControllerConfig(config);
|
|
17
29
|
console.log(`Config: ${configPath}`);
|
|
18
30
|
console.log(`Relay: ${redacted.relayUrl}`);
|
|
19
|
-
console.log(`
|
|
31
|
+
console.log(`Device credential: ${redacted.hasControllerToken ? "configured" : "missing"}`);
|
|
20
32
|
console.log(`Account secret: ${redacted.hasAccountSecret ? "configured" : "missing"}`);
|
|
21
33
|
return true;
|
|
22
34
|
}
|
|
@@ -28,4 +40,3 @@ export async function handleConfig({ domain, action, flags }) {
|
|
|
28
40
|
}
|
|
29
41
|
return false;
|
|
30
42
|
}
|
|
31
|
-
//# sourceMappingURL=config.js.map
|