@openrig/cli 0.5.1 → 0.5.2
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/daemon/assets/guidance/openrig-start.md +21 -64
- package/daemon/dist/adapters/codex-runtime-adapter.d.ts +11 -2
- package/daemon/dist/adapters/codex-runtime-adapter.d.ts.map +1 -1
- package/daemon/dist/adapters/codex-runtime-adapter.js +18 -10
- package/daemon/dist/adapters/codex-runtime-adapter.js.map +1 -1
- package/daemon/dist/build-info.js +3 -3
- package/daemon/dist/domain/codex-thread-id.d.ts +5 -2
- package/daemon/dist/domain/codex-thread-id.d.ts.map +1 -1
- package/daemon/dist/domain/codex-thread-id.js +9 -4
- package/daemon/dist/domain/codex-thread-id.js.map +1 -1
- package/daemon/dist/domain/crash-cart-conductor.d.ts +173 -0
- package/daemon/dist/domain/crash-cart-conductor.d.ts.map +1 -0
- package/daemon/dist/domain/crash-cart-conductor.js +233 -0
- package/daemon/dist/domain/crash-cart-conductor.js.map +1 -0
- package/daemon/dist/domain/crash-cart-probes.d.ts +7 -6
- package/daemon/dist/domain/crash-cart-probes.d.ts.map +1 -1
- package/daemon/dist/domain/crash-cart-probes.js +57 -7
- package/daemon/dist/domain/crash-cart-probes.js.map +1 -1
- package/daemon/dist/domain/hosts/fanout-contract.d.ts +4 -0
- package/daemon/dist/domain/hosts/fanout-contract.d.ts.map +1 -1
- package/daemon/dist/domain/hosts/fanout-contract.js +15 -0
- package/daemon/dist/domain/hosts/fanout-contract.js.map +1 -1
- package/daemon/dist/domain/hosts/hosts-registry-reader.d.ts +11 -0
- package/daemon/dist/domain/hosts/hosts-registry-reader.d.ts.map +1 -1
- package/daemon/dist/domain/hosts/hosts-registry-reader.js +34 -1
- package/daemon/dist/domain/hosts/hosts-registry-reader.js.map +1 -1
- package/daemon/dist/domain/model-divergence/current-generation-record.d.ts +67 -0
- package/daemon/dist/domain/model-divergence/current-generation-record.d.ts.map +1 -0
- package/daemon/dist/domain/model-divergence/current-generation-record.js +204 -0
- package/daemon/dist/domain/model-divergence/current-generation-record.js.map +1 -0
- package/daemon/dist/domain/model-divergence/effective-model-readers.d.ts +13 -0
- package/daemon/dist/domain/model-divergence/effective-model-readers.d.ts.map +1 -0
- package/daemon/dist/domain/model-divergence/effective-model-readers.js +163 -0
- package/daemon/dist/domain/model-divergence/effective-model-readers.js.map +1 -0
- package/daemon/dist/domain/model-divergence/model-divergence-monitor.d.ts +113 -0
- package/daemon/dist/domain/model-divergence/model-divergence-monitor.d.ts.map +1 -0
- package/daemon/dist/domain/model-divergence/model-divergence-monitor.js +190 -0
- package/daemon/dist/domain/model-divergence/model-divergence-monitor.js.map +1 -0
- package/daemon/dist/domain/predecessor-recap-resolver.d.ts +10 -3
- package/daemon/dist/domain/predecessor-recap-resolver.d.ts.map +1 -1
- package/daemon/dist/domain/predecessor-recap-resolver.js +61 -14
- package/daemon/dist/domain/predecessor-recap-resolver.js.map +1 -1
- package/daemon/dist/domain/resume-metadata-refresher.d.ts +11 -2
- package/daemon/dist/domain/resume-metadata-refresher.d.ts.map +1 -1
- package/daemon/dist/domain/resume-metadata-refresher.js +17 -9
- package/daemon/dist/domain/resume-metadata-refresher.js.map +1 -1
- package/daemon/dist/domain/review/gather.d.ts.map +1 -1
- package/daemon/dist/domain/review/gather.js +3 -2
- package/daemon/dist/domain/review/gather.js.map +1 -1
- package/daemon/dist/domain/{rig-policy/rig-policy-defaults.d.ts → rig-mode/rig-mode-defaults.d.ts} +2 -2
- package/daemon/dist/domain/rig-mode/rig-mode-defaults.d.ts.map +1 -0
- package/daemon/dist/domain/{rig-policy/rig-policy-defaults.js → rig-mode/rig-mode-defaults.js} +1 -1
- package/daemon/dist/domain/rig-mode/rig-mode-defaults.js.map +1 -0
- package/{node_modules/@openrig/daemon/dist/domain/rig-policy/rig-policy-store.d.ts → daemon/dist/domain/rig-mode/rig-mode-store.d.ts} +6 -6
- package/daemon/dist/domain/rig-mode/rig-mode-store.d.ts.map +1 -0
- package/daemon/dist/domain/{rig-policy/rig-policy-store.js → rig-mode/rig-mode-store.js} +5 -5
- package/daemon/dist/domain/rig-mode/rig-mode-store.js.map +1 -0
- package/daemon/dist/domain/{rig-policy/rig-policy-types.d.ts → rig-mode/rig-mode-types.d.ts} +1 -1
- package/daemon/dist/domain/rig-mode/rig-mode-types.d.ts.map +1 -0
- package/{node_modules/@openrig/daemon/dist/domain/rig-policy/rig-policy-types.js → daemon/dist/domain/rig-mode/rig-mode-types.js} +1 -1
- package/daemon/dist/domain/rig-mode/rig-mode-types.js.map +1 -0
- package/{node_modules/@openrig/daemon/dist/domain/rig-policy/rig-policy-validator.d.ts → daemon/dist/domain/rig-mode/rig-mode-validator.d.ts} +2 -2
- package/daemon/dist/domain/rig-mode/rig-mode-validator.d.ts.map +1 -0
- package/daemon/dist/domain/{rig-policy/rig-policy-validator.js → rig-mode/rig-mode-validator.js} +3 -3
- package/daemon/dist/domain/rig-mode/rig-mode-validator.js.map +1 -0
- package/daemon/dist/domain/rigspec-schema.d.ts +7 -0
- package/daemon/dist/domain/rigspec-schema.d.ts.map +1 -1
- package/daemon/dist/domain/rigspec-schema.js +7 -0
- package/daemon/dist/domain/rigspec-schema.js.map +1 -1
- package/daemon/dist/domain/scope/node-file.d.ts +37 -0
- package/daemon/dist/domain/scope/node-file.d.ts.map +1 -0
- package/daemon/dist/domain/scope/node-file.js +55 -0
- package/daemon/dist/domain/scope/node-file.js.map +1 -0
- package/daemon/dist/domain/scope/plan-lock-artifacts.d.ts +11 -0
- package/daemon/dist/domain/scope/plan-lock-artifacts.d.ts.map +1 -1
- package/daemon/dist/domain/scope/plan-lock-artifacts.js +40 -0
- package/daemon/dist/domain/scope/plan-lock-artifacts.js.map +1 -1
- package/daemon/dist/domain/scope/scope-approve.d.ts +4 -0
- package/daemon/dist/domain/scope/scope-approve.d.ts.map +1 -1
- package/daemon/dist/domain/scope/scope-approve.js +56 -7
- package/daemon/dist/domain/scope/scope-approve.js.map +1 -1
- package/daemon/dist/domain/scope/scope-audit.d.ts +1 -1
- package/daemon/dist/domain/scope/scope-audit.d.ts.map +1 -1
- package/daemon/dist/domain/scope/scope-audit.js.map +1 -1
- package/daemon/dist/domain/scope/scope-view-projection.d.ts.map +1 -1
- package/daemon/dist/domain/scope/scope-view-projection.js +5 -2
- package/daemon/dist/domain/scope/scope-view-projection.js.map +1 -1
- package/daemon/dist/domain/seat-handover-service.d.ts +32 -15
- package/daemon/dist/domain/seat-handover-service.d.ts.map +1 -1
- package/daemon/dist/domain/seat-handover-service.js +42 -17
- package/daemon/dist/domain/seat-handover-service.js.map +1 -1
- package/daemon/dist/domain/seat-identity-reconciler.d.ts +17 -0
- package/daemon/dist/domain/seat-identity-reconciler.d.ts.map +1 -1
- package/daemon/dist/domain/seat-identity-reconciler.js +22 -0
- package/daemon/dist/domain/seat-identity-reconciler.js.map +1 -1
- package/daemon/dist/domain/session-jsonl.js +1 -1
- package/daemon/dist/domain/session-jsonl.js.map +1 -1
- package/daemon/dist/domain/slices/slice-detail-projector.d.ts.map +1 -1
- package/daemon/dist/domain/slices/slice-detail-projector.js +14 -2
- package/daemon/dist/domain/slices/slice-detail-projector.js.map +1 -1
- package/daemon/dist/domain/slices/slice-indexer.d.ts.map +1 -1
- package/daemon/dist/domain/slices/slice-indexer.js +16 -3
- package/daemon/dist/domain/slices/slice-indexer.js.map +1 -1
- package/daemon/dist/domain/spec-live-conformance.d.ts +22 -0
- package/daemon/dist/domain/spec-live-conformance.d.ts.map +1 -1
- package/daemon/dist/domain/spec-live-conformance.js +35 -0
- package/daemon/dist/domain/spec-live-conformance.js.map +1 -1
- package/daemon/dist/domain/sync-site-wrap.d.ts +9 -0
- package/daemon/dist/domain/sync-site-wrap.d.ts.map +1 -1
- package/daemon/dist/domain/sync-site-wrap.js +11 -0
- package/daemon/dist/domain/sync-site-wrap.js.map +1 -1
- package/daemon/dist/domain/types.d.ts +15 -0
- package/daemon/dist/domain/types.d.ts.map +1 -1
- package/daemon/dist/domain/types.js.map +1 -1
- package/daemon/dist/domain/user-settings/settings-store.d.ts +1 -1
- package/daemon/dist/domain/user-settings/settings-store.d.ts.map +1 -1
- package/daemon/dist/domain/user-settings/settings-store.js +20 -0
- package/daemon/dist/domain/user-settings/settings-store.js.map +1 -1
- package/daemon/dist/domain/watchdog-auto-registration.d.ts +7 -0
- package/daemon/dist/domain/watchdog-auto-registration.d.ts.map +1 -1
- package/daemon/dist/domain/watchdog-auto-registration.js +27 -0
- package/daemon/dist/domain/watchdog-auto-registration.js.map +1 -1
- package/daemon/dist/domain/workspace/workspace-doctor.d.ts.map +1 -1
- package/daemon/dist/domain/workspace/workspace-doctor.js +4 -3
- package/daemon/dist/domain/workspace/workspace-doctor.js.map +1 -1
- package/daemon/dist/routes/activity.js +11 -2
- package/daemon/dist/routes/activity.js.map +1 -1
- package/daemon/dist/routes/bundles.d.ts +27 -0
- package/daemon/dist/routes/bundles.d.ts.map +1 -1
- package/daemon/dist/routes/bundles.js +107 -26
- package/daemon/dist/routes/bundles.js.map +1 -1
- package/daemon/dist/routes/crash-cart.d.ts +4 -0
- package/daemon/dist/routes/crash-cart.d.ts.map +1 -0
- package/daemon/dist/routes/crash-cart.js +144 -0
- package/daemon/dist/routes/crash-cart.js.map +1 -0
- package/daemon/dist/routes/missions.d.ts.map +1 -1
- package/daemon/dist/routes/missions.js +10 -6
- package/daemon/dist/routes/missions.js.map +1 -1
- package/daemon/dist/routes/{rig-policy.d.ts → rig-mode.d.ts} +3 -3
- package/daemon/dist/routes/rig-mode.d.ts.map +1 -0
- package/{node_modules/@openrig/daemon/dist/routes/rig-policy.js → daemon/dist/routes/rig-mode.js} +13 -13
- package/daemon/dist/routes/rig-mode.js.map +1 -0
- package/daemon/dist/routes/scope-approve.d.ts.map +1 -1
- package/daemon/dist/routes/scope-approve.js +4 -0
- package/daemon/dist/routes/scope-approve.js.map +1 -1
- package/daemon/dist/routes/scope-audit.d.ts.map +1 -1
- package/daemon/dist/routes/scope-audit.js +29 -2
- package/daemon/dist/routes/scope-audit.js.map +1 -1
- package/daemon/dist/routes/seat.js +7 -2
- package/daemon/dist/routes/seat.js.map +1 -1
- package/daemon/dist/routes/sessions.d.ts.map +1 -1
- package/daemon/dist/routes/sessions.js +11 -1
- package/daemon/dist/routes/sessions.js.map +1 -1
- package/daemon/dist/server.d.ts +3 -1
- package/daemon/dist/server.d.ts.map +1 -1
- package/daemon/dist/server.js +15 -5
- package/daemon/dist/server.js.map +1 -1
- package/daemon/dist/startup.d.ts.map +1 -1
- package/daemon/dist/startup.js +134 -5
- package/daemon/dist/startup.js.map +1 -1
- package/dist/build-info.js +3 -3
- package/dist/commands/bundle.d.ts.map +1 -1
- package/dist/commands/bundle.js +6 -0
- package/dist/commands/bundle.js.map +1 -1
- package/dist/commands/capture.d.ts.map +1 -1
- package/dist/commands/capture.js +2 -0
- package/dist/commands/capture.js.map +1 -1
- package/dist/commands/crash-cart.d.ts.map +1 -1
- package/dist/commands/crash-cart.js.map +1 -1
- package/dist/commands/host.d.ts +5 -0
- package/dist/commands/host.d.ts.map +1 -1
- package/dist/commands/host.js +59 -3
- package/dist/commands/host.js.map +1 -1
- package/dist/commands/policy.d.ts +5 -0
- package/dist/commands/policy.d.ts.map +1 -0
- package/dist/commands/policy.js +307 -0
- package/dist/commands/policy.js.map +1 -0
- package/dist/commands/ps.d.ts +4 -0
- package/dist/commands/ps.d.ts.map +1 -1
- package/dist/commands/ps.js +4 -0
- package/dist/commands/ps.js.map +1 -1
- package/dist/commands/{rig-policy.d.ts → rig-mode.d.ts} +3 -3
- package/dist/commands/rig-mode.d.ts.map +1 -0
- package/dist/commands/{rig-policy.js → rig-mode.js} +17 -17
- package/dist/commands/rig-mode.js.map +1 -0
- package/dist/commands/scope.d.ts.map +1 -1
- package/dist/commands/scope.js +58 -16
- package/dist/commands/scope.js.map +1 -1
- package/dist/commands/send.d.ts.map +1 -1
- package/dist/commands/send.js +2 -0
- package/dist/commands/send.js.map +1 -1
- package/dist/commands/setup.d.ts +13 -0
- package/dist/commands/setup.d.ts.map +1 -1
- package/dist/commands/setup.js +3 -3
- package/dist/commands/setup.js.map +1 -1
- package/dist/commands/transcript.d.ts.map +1 -1
- package/dist/commands/transcript.js +2 -0
- package/dist/commands/transcript.js.map +1 -1
- package/dist/commands/whoami.d.ts.map +1 -1
- package/dist/commands/whoami.js +11 -1
- package/dist/commands/whoami.js.map +1 -1
- package/dist/config-store.d.ts +3 -1
- package/dist/config-store.d.ts.map +1 -1
- package/dist/config-store.js +18 -0
- package/dist/config-store.js.map +1 -1
- package/dist/cross-host-target.d.ts +8 -1
- package/dist/cross-host-target.d.ts.map +1 -1
- package/dist/cross-host-target.js +23 -4
- package/dist/cross-host-target.js.map +1 -1
- package/dist/daemon-lifecycle.d.ts +10 -1
- package/dist/daemon-lifecycle.d.ts.map +1 -1
- package/dist/daemon-lifecycle.js +26 -1
- package/dist/daemon-lifecycle.js.map +1 -1
- package/dist/front-door.d.ts.map +1 -1
- package/dist/front-door.js +11 -1
- package/dist/front-door.js.map +1 -1
- package/dist/host-bindings.d.ts +62 -0
- package/dist/host-bindings.d.ts.map +1 -0
- package/dist/host-bindings.js +147 -0
- package/dist/host-bindings.js.map +1 -0
- package/dist/host-registry.d.ts +14 -1
- package/dist/host-registry.d.ts.map +1 -1
- package/dist/host-registry.js +30 -2
- package/dist/host-registry.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -2
- package/dist/index.js.map +1 -1
- package/dist/lib/hosts/fanout-contract.d.ts +4 -0
- package/dist/lib/hosts/fanout-contract.d.ts.map +1 -1
- package/dist/lib/hosts/fanout-contract.js +15 -0
- package/dist/lib/hosts/fanout-contract.js.map +1 -1
- package/dist/lib/path-safety.d.ts +8 -0
- package/dist/lib/path-safety.d.ts.map +1 -0
- package/dist/lib/path-safety.js +24 -0
- package/dist/lib/path-safety.js.map +1 -0
- package/dist/lib/permission-policy/policy-ref.d.ts +89 -0
- package/dist/lib/permission-policy/policy-ref.d.ts.map +1 -0
- package/dist/lib/permission-policy/policy-ref.js +171 -0
- package/dist/lib/permission-policy/policy-ref.js.map +1 -0
- package/dist/lib/permission-policy/policy-spec.d.ts +34 -0
- package/dist/lib/permission-policy/policy-spec.d.ts.map +1 -0
- package/dist/lib/permission-policy/policy-spec.js +106 -0
- package/dist/lib/permission-policy/policy-spec.js.map +1 -0
- package/dist/lib/scope/scope-audit.d.ts +1 -1
- package/dist/lib/scope/scope-audit.d.ts.map +1 -1
- package/dist/lib/scope/scope-audit.js.map +1 -1
- package/dist/lib/scope/scope-fs.d.ts +19 -3
- package/dist/lib/scope/scope-fs.d.ts.map +1 -1
- package/dist/lib/scope/scope-fs.js +37 -17
- package/dist/lib/scope/scope-fs.js.map +1 -1
- package/dist/release-surface/extract-surface.js +1 -1
- package/dist/release-surface/extract-surface.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/adapters/codex-runtime-adapter.d.ts +11 -2
- package/node_modules/@openrig/daemon/dist/adapters/codex-runtime-adapter.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/adapters/codex-runtime-adapter.js +18 -10
- package/node_modules/@openrig/daemon/dist/adapters/codex-runtime-adapter.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/build-info.js +3 -3
- package/node_modules/@openrig/daemon/dist/domain/codex-thread-id.d.ts +5 -2
- package/node_modules/@openrig/daemon/dist/domain/codex-thread-id.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/codex-thread-id.js +9 -4
- package/node_modules/@openrig/daemon/dist/domain/codex-thread-id.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/crash-cart-conductor.d.ts +173 -0
- package/node_modules/@openrig/daemon/dist/domain/crash-cart-conductor.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/crash-cart-conductor.js +233 -0
- package/node_modules/@openrig/daemon/dist/domain/crash-cart-conductor.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/crash-cart-probes.d.ts +7 -6
- package/node_modules/@openrig/daemon/dist/domain/crash-cart-probes.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/crash-cart-probes.js +57 -7
- package/node_modules/@openrig/daemon/dist/domain/crash-cart-probes.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/hosts/fanout-contract.d.ts +4 -0
- package/node_modules/@openrig/daemon/dist/domain/hosts/fanout-contract.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/hosts/fanout-contract.js +15 -0
- package/node_modules/@openrig/daemon/dist/domain/hosts/fanout-contract.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/hosts/hosts-registry-reader.d.ts +11 -0
- package/node_modules/@openrig/daemon/dist/domain/hosts/hosts-registry-reader.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/hosts/hosts-registry-reader.js +34 -1
- package/node_modules/@openrig/daemon/dist/domain/hosts/hosts-registry-reader.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/model-divergence/current-generation-record.d.ts +67 -0
- package/node_modules/@openrig/daemon/dist/domain/model-divergence/current-generation-record.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/model-divergence/current-generation-record.js +204 -0
- package/node_modules/@openrig/daemon/dist/domain/model-divergence/current-generation-record.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/model-divergence/effective-model-readers.d.ts +13 -0
- package/node_modules/@openrig/daemon/dist/domain/model-divergence/effective-model-readers.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/model-divergence/effective-model-readers.js +163 -0
- package/node_modules/@openrig/daemon/dist/domain/model-divergence/effective-model-readers.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/model-divergence/model-divergence-monitor.d.ts +113 -0
- package/node_modules/@openrig/daemon/dist/domain/model-divergence/model-divergence-monitor.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/model-divergence/model-divergence-monitor.js +190 -0
- package/node_modules/@openrig/daemon/dist/domain/model-divergence/model-divergence-monitor.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/predecessor-recap-resolver.d.ts +10 -3
- package/node_modules/@openrig/daemon/dist/domain/predecessor-recap-resolver.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/predecessor-recap-resolver.js +61 -14
- package/node_modules/@openrig/daemon/dist/domain/predecessor-recap-resolver.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/resume-metadata-refresher.d.ts +11 -2
- package/node_modules/@openrig/daemon/dist/domain/resume-metadata-refresher.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/resume-metadata-refresher.js +17 -9
- package/node_modules/@openrig/daemon/dist/domain/resume-metadata-refresher.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/review/gather.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/review/gather.js +3 -2
- package/node_modules/@openrig/daemon/dist/domain/review/gather.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/{rig-policy/rig-policy-defaults.d.ts → rig-mode/rig-mode-defaults.d.ts} +2 -2
- package/node_modules/@openrig/daemon/dist/domain/rig-mode/rig-mode-defaults.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/{rig-policy/rig-policy-defaults.js → rig-mode/rig-mode-defaults.js} +1 -1
- package/node_modules/@openrig/daemon/dist/domain/rig-mode/rig-mode-defaults.js.map +1 -0
- package/{daemon/dist/domain/rig-policy/rig-policy-store.d.ts → node_modules/@openrig/daemon/dist/domain/rig-mode/rig-mode-store.d.ts} +6 -6
- package/node_modules/@openrig/daemon/dist/domain/rig-mode/rig-mode-store.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/{rig-policy/rig-policy-store.js → rig-mode/rig-mode-store.js} +5 -5
- package/node_modules/@openrig/daemon/dist/domain/rig-mode/rig-mode-store.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/{rig-policy/rig-policy-types.d.ts → rig-mode/rig-mode-types.d.ts} +1 -1
- package/node_modules/@openrig/daemon/dist/domain/rig-mode/rig-mode-types.d.ts.map +1 -0
- package/{daemon/dist/domain/rig-policy/rig-policy-types.js → node_modules/@openrig/daemon/dist/domain/rig-mode/rig-mode-types.js} +1 -1
- package/node_modules/@openrig/daemon/dist/domain/rig-mode/rig-mode-types.js.map +1 -0
- package/{daemon/dist/domain/rig-policy/rig-policy-validator.d.ts → node_modules/@openrig/daemon/dist/domain/rig-mode/rig-mode-validator.d.ts} +2 -2
- package/node_modules/@openrig/daemon/dist/domain/rig-mode/rig-mode-validator.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/{rig-policy/rig-policy-validator.js → rig-mode/rig-mode-validator.js} +3 -3
- package/node_modules/@openrig/daemon/dist/domain/rig-mode/rig-mode-validator.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/rigspec-schema.d.ts +7 -0
- package/node_modules/@openrig/daemon/dist/domain/rigspec-schema.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/rigspec-schema.js +7 -0
- package/node_modules/@openrig/daemon/dist/domain/rigspec-schema.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/scope/node-file.d.ts +37 -0
- package/node_modules/@openrig/daemon/dist/domain/scope/node-file.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/scope/node-file.js +55 -0
- package/node_modules/@openrig/daemon/dist/domain/scope/node-file.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/scope/plan-lock-artifacts.d.ts +11 -0
- package/node_modules/@openrig/daemon/dist/domain/scope/plan-lock-artifacts.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/scope/plan-lock-artifacts.js +40 -0
- package/node_modules/@openrig/daemon/dist/domain/scope/plan-lock-artifacts.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/scope/scope-approve.d.ts +4 -0
- package/node_modules/@openrig/daemon/dist/domain/scope/scope-approve.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/scope/scope-approve.js +56 -7
- package/node_modules/@openrig/daemon/dist/domain/scope/scope-approve.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/scope/scope-audit.d.ts +1 -1
- package/node_modules/@openrig/daemon/dist/domain/scope/scope-audit.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/scope/scope-audit.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/scope/scope-view-projection.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/scope/scope-view-projection.js +5 -2
- package/node_modules/@openrig/daemon/dist/domain/scope/scope-view-projection.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/seat-handover-service.d.ts +32 -15
- package/node_modules/@openrig/daemon/dist/domain/seat-handover-service.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/seat-handover-service.js +42 -17
- package/node_modules/@openrig/daemon/dist/domain/seat-handover-service.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/seat-identity-reconciler.d.ts +17 -0
- package/node_modules/@openrig/daemon/dist/domain/seat-identity-reconciler.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/seat-identity-reconciler.js +22 -0
- package/node_modules/@openrig/daemon/dist/domain/seat-identity-reconciler.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/session-jsonl.js +1 -1
- package/node_modules/@openrig/daemon/dist/domain/session-jsonl.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/slices/slice-detail-projector.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/slices/slice-detail-projector.js +14 -2
- package/node_modules/@openrig/daemon/dist/domain/slices/slice-detail-projector.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/slices/slice-indexer.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/slices/slice-indexer.js +16 -3
- package/node_modules/@openrig/daemon/dist/domain/slices/slice-indexer.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/spec-live-conformance.d.ts +22 -0
- package/node_modules/@openrig/daemon/dist/domain/spec-live-conformance.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/spec-live-conformance.js +35 -0
- package/node_modules/@openrig/daemon/dist/domain/spec-live-conformance.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/sync-site-wrap.d.ts +9 -0
- package/node_modules/@openrig/daemon/dist/domain/sync-site-wrap.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/sync-site-wrap.js +11 -0
- package/node_modules/@openrig/daemon/dist/domain/sync-site-wrap.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/types.d.ts +15 -0
- package/node_modules/@openrig/daemon/dist/domain/types.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/types.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/user-settings/settings-store.d.ts +1 -1
- package/node_modules/@openrig/daemon/dist/domain/user-settings/settings-store.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/user-settings/settings-store.js +20 -0
- package/node_modules/@openrig/daemon/dist/domain/user-settings/settings-store.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/watchdog-auto-registration.d.ts +7 -0
- package/node_modules/@openrig/daemon/dist/domain/watchdog-auto-registration.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/watchdog-auto-registration.js +27 -0
- package/node_modules/@openrig/daemon/dist/domain/watchdog-auto-registration.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/workspace/workspace-doctor.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/workspace/workspace-doctor.js +4 -3
- package/node_modules/@openrig/daemon/dist/domain/workspace/workspace-doctor.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/activity.js +11 -2
- package/node_modules/@openrig/daemon/dist/routes/activity.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/bundles.d.ts +27 -0
- package/node_modules/@openrig/daemon/dist/routes/bundles.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/bundles.js +107 -26
- package/node_modules/@openrig/daemon/dist/routes/bundles.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/crash-cart.d.ts +4 -0
- package/node_modules/@openrig/daemon/dist/routes/crash-cart.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/routes/crash-cart.js +144 -0
- package/node_modules/@openrig/daemon/dist/routes/crash-cart.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/routes/missions.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/missions.js +10 -6
- package/node_modules/@openrig/daemon/dist/routes/missions.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/{rig-policy.d.ts → rig-mode.d.ts} +3 -3
- package/node_modules/@openrig/daemon/dist/routes/rig-mode.d.ts.map +1 -0
- package/{daemon/dist/routes/rig-policy.js → node_modules/@openrig/daemon/dist/routes/rig-mode.js} +13 -13
- package/node_modules/@openrig/daemon/dist/routes/rig-mode.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/routes/scope-approve.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/scope-approve.js +4 -0
- package/node_modules/@openrig/daemon/dist/routes/scope-approve.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/scope-audit.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/scope-audit.js +29 -2
- package/node_modules/@openrig/daemon/dist/routes/scope-audit.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/seat.js +7 -2
- package/node_modules/@openrig/daemon/dist/routes/seat.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/sessions.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/sessions.js +11 -1
- package/node_modules/@openrig/daemon/dist/routes/sessions.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/server.d.ts +3 -1
- package/node_modules/@openrig/daemon/dist/server.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/server.js +15 -5
- package/node_modules/@openrig/daemon/dist/server.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/startup.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/startup.js +134 -5
- package/node_modules/@openrig/daemon/dist/startup.js.map +1 -1
- package/node_modules/@openrig/daemon/package.json +1 -1
- package/package.json +1 -1
- package/tui/dist/crash-cart/from-emit.d.ts +9 -0
- package/tui/dist/crash-cart/from-emit.d.ts.map +1 -1
- package/tui/dist/crash-cart/from-emit.js.map +1 -1
- package/tui/dist/crash-cart/keys.d.ts +1 -1
- package/tui/dist/crash-cart/keys.d.ts.map +1 -1
- package/tui/dist/crash-cart/keys.js +13 -2
- package/tui/dist/crash-cart/keys.js.map +1 -1
- package/tui/dist/crash-cart/one-click-gate.d.ts +5 -0
- package/tui/dist/crash-cart/one-click-gate.d.ts.map +1 -1
- package/tui/dist/crash-cart/one-click-gate.js +8 -0
- package/tui/dist/crash-cart/one-click-gate.js.map +1 -1
- package/tui/dist/crash-cart/render-crash-cart.d.ts +11 -0
- package/tui/dist/crash-cart/render-crash-cart.d.ts.map +1 -1
- package/tui/dist/crash-cart/render-crash-cart.js +113 -0
- package/tui/dist/crash-cart/render-crash-cart.js.map +1 -1
- package/tui/dist/crash-cart/restore-input.d.ts +32 -0
- package/tui/dist/crash-cart/restore-input.d.ts.map +1 -0
- package/tui/dist/crash-cart/restore-input.js +37 -0
- package/tui/dist/crash-cart/restore-input.js.map +1 -0
- package/tui/dist/crash-cart/restore-lifecycle.d.ts +66 -0
- package/tui/dist/crash-cart/restore-lifecycle.d.ts.map +1 -0
- package/tui/dist/crash-cart/restore-lifecycle.js +96 -0
- package/tui/dist/crash-cart/restore-lifecycle.js.map +1 -0
- package/tui/dist/crash-cart/restore-scroll.d.ts +14 -0
- package/tui/dist/crash-cart/restore-scroll.d.ts.map +1 -0
- package/tui/dist/crash-cart/restore-scroll.js +27 -0
- package/tui/dist/crash-cart/restore-scroll.js.map +1 -0
- package/tui/dist/daemon-client.d.ts +38 -0
- package/tui/dist/daemon-client.d.ts.map +1 -1
- package/tui/dist/daemon-client.js +15 -0
- package/tui/dist/daemon-client.js.map +1 -1
- package/tui/dist/main.js +146 -2
- package/tui/dist/main.js.map +1 -1
- package/tui/dist/render.d.ts +10 -0
- package/tui/dist/render.d.ts.map +1 -1
- package/tui/dist/render.js +63 -10
- package/tui/dist/render.js.map +1 -1
- package/daemon/dist/domain/rig-policy/rig-policy-defaults.d.ts.map +0 -1
- package/daemon/dist/domain/rig-policy/rig-policy-defaults.js.map +0 -1
- package/daemon/dist/domain/rig-policy/rig-policy-store.d.ts.map +0 -1
- package/daemon/dist/domain/rig-policy/rig-policy-store.js.map +0 -1
- package/daemon/dist/domain/rig-policy/rig-policy-types.d.ts.map +0 -1
- package/daemon/dist/domain/rig-policy/rig-policy-types.js.map +0 -1
- package/daemon/dist/domain/rig-policy/rig-policy-validator.d.ts.map +0 -1
- package/daemon/dist/domain/rig-policy/rig-policy-validator.js.map +0 -1
- package/daemon/dist/routes/rig-policy.d.ts.map +0 -1
- package/daemon/dist/routes/rig-policy.js.map +0 -1
- package/dist/commands/rig-policy.d.ts.map +0 -1
- package/dist/commands/rig-policy.js.map +0 -1
- package/node_modules/@openrig/daemon/dist/domain/rig-policy/rig-policy-defaults.d.ts.map +0 -1
- package/node_modules/@openrig/daemon/dist/domain/rig-policy/rig-policy-defaults.js.map +0 -1
- package/node_modules/@openrig/daemon/dist/domain/rig-policy/rig-policy-store.d.ts.map +0 -1
- package/node_modules/@openrig/daemon/dist/domain/rig-policy/rig-policy-store.js.map +0 -1
- package/node_modules/@openrig/daemon/dist/domain/rig-policy/rig-policy-types.d.ts.map +0 -1
- package/node_modules/@openrig/daemon/dist/domain/rig-policy/rig-policy-types.js.map +0 -1
- package/node_modules/@openrig/daemon/dist/domain/rig-policy/rig-policy-validator.d.ts.map +0 -1
- package/node_modules/@openrig/daemon/dist/domain/rig-policy/rig-policy-validator.js.map +0 -1
- package/node_modules/@openrig/daemon/dist/routes/rig-policy.d.ts.map +0 -1
- package/node_modules/@openrig/daemon/dist/routes/rig-policy.js.map +0 -1
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
/** The shipped closed per-rig union (never widened at the fleet layer). `not_attempted`
|
|
2
|
+
* is first-class — a rig the conductor did not reach (no usable snapshot, or cancelled). */
|
|
3
|
+
export type PerRigOutcome = "fully_restored" | "partially_restored" | "failed" | "not_attempted";
|
|
4
|
+
/** One rig's conductor result. `receiptRef` references the durable restore event/attempt
|
|
5
|
+
* seq (the ledger lineage) — the conductor RENDERS receipts, it never re-authors them. */
|
|
6
|
+
export interface ConductorRigResult {
|
|
7
|
+
rigId: string;
|
|
8
|
+
outcome: PerRigOutcome;
|
|
9
|
+
receiptRef?: string | number;
|
|
10
|
+
/** Per-rig triage rows (seats needing operator action) — the fleet
|
|
11
|
+
* attention_required is the UNION of these across the sequence. */
|
|
12
|
+
attention?: AttentionRow[];
|
|
13
|
+
/** R3 — for a `not_attempted` rig, WHY it was skipped (no honest gap left blank). */
|
|
14
|
+
reason?: string;
|
|
15
|
+
/** R3 — the operator action that would let this rig be restored next time. */
|
|
16
|
+
remediation?: string;
|
|
17
|
+
}
|
|
18
|
+
export interface RestoreConductorDeps {
|
|
19
|
+
/** Rigs in restore order — KERNEL FIRST (the supervisor), then the rest. */
|
|
20
|
+
listRigsInOrder: () => Array<{
|
|
21
|
+
rigId: string;
|
|
22
|
+
isKernel: boolean;
|
|
23
|
+
}>;
|
|
24
|
+
/** Restore ONE rig. Default (wired at the route) = findLatestRestoreUsable(rigId) →
|
|
25
|
+
* RestoreOrchestrator.restore(snapshotId) → rollupRestoreRigResult; a rig with no
|
|
26
|
+
* usable snapshot returns `not_attempted` (never a silent older/partial substitute). */
|
|
27
|
+
restoreRig: (rigId: string) => Promise<{
|
|
28
|
+
outcome: PerRigOutcome;
|
|
29
|
+
receiptRef?: string | number;
|
|
30
|
+
attention?: AttentionRow[];
|
|
31
|
+
reason?: string;
|
|
32
|
+
remediation?: string;
|
|
33
|
+
}>;
|
|
34
|
+
/** Cancel signal, polled at each rig BOUNDARY (stop-before-next-rig). Optional. */
|
|
35
|
+
isCancelled?: () => boolean;
|
|
36
|
+
}
|
|
37
|
+
export declare class RestoreConductor {
|
|
38
|
+
private readonly deps;
|
|
39
|
+
constructor(deps: RestoreConductorDeps);
|
|
40
|
+
/** Restore the fleet, kernel-first, best-effort, honoring stop-before-next-rig cancel.
|
|
41
|
+
* Returns the ordered per-rig sequence (Atom C aggregates it into the FleetRollup). */
|
|
42
|
+
restoreFleet(opts?: {
|
|
43
|
+
onRigDone?: (result: ConductorRigResult) => void;
|
|
44
|
+
}): Promise<ConductorRigResult[]>;
|
|
45
|
+
}
|
|
46
|
+
/** Deps for the DEFAULT per-rig restore — structurally typed so the conductor stays
|
|
47
|
+
* decoupled from the full orchestrator (the real wiring passes
|
|
48
|
+
* `snapshotRepo.findLatestRestoreUsable` and `RestoreOrchestrator.restore`, whose
|
|
49
|
+
* RestoreOutcome satisfies this shape). */
|
|
50
|
+
export interface RestoreRigDeps {
|
|
51
|
+
/** Newest restore-usable snapshot for the rig, or null (→ `not_attempted`; never a silent substitute). */
|
|
52
|
+
findLatestRestoreUsable: (rigId: string) => {
|
|
53
|
+
id: string;
|
|
54
|
+
} | null;
|
|
55
|
+
/** The shipped per-rig restore. `onAttemptStarted` yields the restore-started event seq = the receipt ref. */
|
|
56
|
+
restore: (snapshotId: string, opts?: {
|
|
57
|
+
onAttemptStarted?: (attemptId: number) => void;
|
|
58
|
+
}) => Promise<{
|
|
59
|
+
ok: boolean;
|
|
60
|
+
result?: {
|
|
61
|
+
rigResult: PerRigOutcome;
|
|
62
|
+
nodes?: RestoreNodeLite[];
|
|
63
|
+
};
|
|
64
|
+
}>;
|
|
65
|
+
}
|
|
66
|
+
/** One seat of the subset-launch result, structurally the shipped RestoreNodeResult
|
|
67
|
+
* subset the triage mapper reads. */
|
|
68
|
+
export interface AdoptSubsetSeat extends RestoreNodeLite {
|
|
69
|
+
logicalId: string;
|
|
70
|
+
}
|
|
71
|
+
/** Structural slice of RestoreOrchestrator.launchNodeSubset's result — the shipped
|
|
72
|
+
* per-seat resume-verification machinery (FR-7: an unverifiable resume fail-closes
|
|
73
|
+
* to awaiting-decision carrying the exact `--fresh <logicalId>` remediation). */
|
|
74
|
+
export interface AdoptSubsetResult {
|
|
75
|
+
ok: boolean;
|
|
76
|
+
code?: string;
|
|
77
|
+
message?: string;
|
|
78
|
+
launched?: AdoptSubsetSeat[];
|
|
79
|
+
held?: Array<{
|
|
80
|
+
logicalId: string;
|
|
81
|
+
reason: string;
|
|
82
|
+
}>;
|
|
83
|
+
alreadyRunning?: Array<{
|
|
84
|
+
logicalId: string;
|
|
85
|
+
}>;
|
|
86
|
+
failedTargets?: Array<{
|
|
87
|
+
logicalId: string;
|
|
88
|
+
reason: string;
|
|
89
|
+
}>;
|
|
90
|
+
}
|
|
91
|
+
export interface AdoptRigDeps {
|
|
92
|
+
/** The rig's DB-running sessions whose tmux panes are ALIVE — the same
|
|
93
|
+
* classification restore's 409 guard runs (sessionRegistry rows ×
|
|
94
|
+
* tmuxAdapter.hasSession); the conductor never invents a probe. */
|
|
95
|
+
probeLiveSessions: (rigId: string) => Promise<Array<{
|
|
96
|
+
sessionName: string;
|
|
97
|
+
logicalId: string;
|
|
98
|
+
}>>;
|
|
99
|
+
/** The shipped no-launch adopt (ClaimService.reconcileSession — the
|
|
100
|
+
* `rig reconcile-session` precedent): session state only, never input. */
|
|
101
|
+
reconcileSession: (sessionName: string) => Promise<{
|
|
102
|
+
ok: boolean;
|
|
103
|
+
code?: string;
|
|
104
|
+
message?: string;
|
|
105
|
+
}>;
|
|
106
|
+
/** The rig's full seat roster (logical ids) — adoption's complement is what
|
|
107
|
+
* per-seat resume verification must cover. */
|
|
108
|
+
listRigSeats: (rigId: string) => string[];
|
|
109
|
+
/** The shipped subset launcher over the NOT-adopted seats. */
|
|
110
|
+
launchNodeSubset: (rigId: string, logicalIds: string[]) => Promise<AdoptSubsetResult>;
|
|
111
|
+
}
|
|
112
|
+
/** Build the default `restoreRig` dep: COMPOSE findLatestRestoreUsable → restore →
|
|
113
|
+
* rigResult. A rig with no usable snapshot is `not_attempted` (restore never runs);
|
|
114
|
+
* a restore that fails outright is `failed`. Never re-authors restore logic.
|
|
115
|
+
* With `adoptDeps` wired (Amendment 2), a rig whose panes survived takes the ADOPT
|
|
116
|
+
* branch above; DEAD panes (and callers without adoptDeps) run unchanged. */
|
|
117
|
+
export declare function createDefaultRestoreRig(_deps: RestoreRigDeps, adoptDeps?: AdoptRigDeps): (rigId: string) => Promise<{
|
|
118
|
+
outcome: PerRigOutcome;
|
|
119
|
+
receiptRef?: number;
|
|
120
|
+
attention?: AttentionRow[];
|
|
121
|
+
reason?: string;
|
|
122
|
+
remediation?: string;
|
|
123
|
+
}>;
|
|
124
|
+
export interface RigOrderDeps {
|
|
125
|
+
/** All (non-archived) rigs on this host — the conductor's fleet scope, v1. */
|
|
126
|
+
listRigs: () => Array<{
|
|
127
|
+
id: string;
|
|
128
|
+
name: string;
|
|
129
|
+
}>;
|
|
130
|
+
}
|
|
131
|
+
/** R2 — the founder's order: the KERNEL rig (the supervisor, name "kernel") restores
|
|
132
|
+
* FIRST, then the remaining rigs in listRigs order. No kernel rig → all rigs, none
|
|
133
|
+
* flagged kernel (honest, never fabricated). This is the `listRigsInOrder` source the
|
|
134
|
+
* conductor consumes. */
|
|
135
|
+
export declare function listRigsInKernelFirstOrder(deps: RigOrderDeps): Array<{
|
|
136
|
+
rigId: string;
|
|
137
|
+
isKernel: boolean;
|
|
138
|
+
}>;
|
|
139
|
+
/** A triage row: a seat + exactly what it needs (picker/auth/remediation), sourced
|
|
140
|
+
* from the shipped per-rig restore-check attention projection. The fleet
|
|
141
|
+
* `attention_required` is the UNION of these across rigs — a VIEW, not a parallel record. */
|
|
142
|
+
export interface AttentionRow {
|
|
143
|
+
rigId: string;
|
|
144
|
+
seat: string;
|
|
145
|
+
need: string;
|
|
146
|
+
}
|
|
147
|
+
/** Fleet rollup — PURE AGGREGATION over the conductor's per-rig sequence. The per-rig
|
|
148
|
+
* outcome stays the shipped CLOSED union (never widened). NO fleet verdict is stored
|
|
149
|
+
* here — a stored verdict could drift from the per-rig truth; derive it on demand via
|
|
150
|
+
* {@link deriveFleetVerdict}. `not_attempted` is first-class (never folded into failed). */
|
|
151
|
+
export interface FleetRollup {
|
|
152
|
+
counts: Record<PerRigOutcome, number>;
|
|
153
|
+
sequence: ConductorRigResult[];
|
|
154
|
+
attention_required: AttentionRow[];
|
|
155
|
+
}
|
|
156
|
+
/** The fleet verdict is a DERIVED function of the counts — never a stored field. */
|
|
157
|
+
export type FleetVerdict = "all_fully_restored" | "all_failed" | "none_attempted" | "mixed";
|
|
158
|
+
/** A restore node (structural subset of the shipped RestoreNodeResult) — enough to
|
|
159
|
+
* build a triage row from the seats that need operator action. */
|
|
160
|
+
export interface RestoreNodeLite {
|
|
161
|
+
logicalId: string;
|
|
162
|
+
status: string;
|
|
163
|
+
error?: string;
|
|
164
|
+
attentionEvidence?: string | null;
|
|
165
|
+
}
|
|
166
|
+
/** R5 — map a rig's restore nodes → triage rows: the seats needing operator action
|
|
167
|
+
* (a LIVE runtime prompt, an unresumable session, or a hard failure), each with its
|
|
168
|
+
* EXACT need. Running/resumed nodes are excluded. Never fabricates a need. */
|
|
169
|
+
export declare function attentionRowsFromNodes(rigId: string, nodes: RestoreNodeLite[]): AttentionRow[];
|
|
170
|
+
export declare function aggregateFleetRollup(sequence: ConductorRigResult[]): FleetRollup;
|
|
171
|
+
/** DERIVED f(counts) — computed, never stored (a stored verdict could drift). */
|
|
172
|
+
export declare function deriveFleetVerdict(counts: Record<PerRigOutcome, number>): FleetVerdict;
|
|
173
|
+
//# sourceMappingURL=crash-cart-conductor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crash-cart-conductor.d.ts","sourceRoot":"","sources":["../../src/domain/crash-cart-conductor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
// B1 — Crash-cart RESTORE CONDUCTOR (daemon-side batch verb). Plan-locked
|
|
2
|
+
// (workspace/missions/release-0.5.2/B1-CRASH-CART-CONDUCTOR-PLAN-2026-08-21, content-hash 84401cd4).
|
|
3
|
+
//
|
|
4
|
+
// Atom B — the conductor CORE. It restores the fleet's rigs in the founder's
|
|
5
|
+
// order (kernel rig first, then the rest, sequential v1), COMPOSING the shipped
|
|
6
|
+
// per-rig restore (findLatestRestoreUsable + RestoreOrchestrator.restore) via an
|
|
7
|
+
// injectable `restoreRig` dep — it does NOT re-author restore logic. Best-effort:
|
|
8
|
+
// one rig's failure never halts the fleet. Cancel is STOP-BEFORE-NEXT-RIG: the
|
|
9
|
+
// in-flight rig runs to its own outcome; rigs not yet started become
|
|
10
|
+
// `not_attempted` (Atom A/C wire discovery + the fleet rollup; Atom D the TUI ⏎).
|
|
11
|
+
export class RestoreConductor {
|
|
12
|
+
deps;
|
|
13
|
+
constructor(deps) {
|
|
14
|
+
this.deps = deps;
|
|
15
|
+
}
|
|
16
|
+
/** Restore the fleet, kernel-first, best-effort, honoring stop-before-next-rig cancel.
|
|
17
|
+
* Returns the ordered per-rig sequence (Atom C aggregates it into the FleetRollup). */
|
|
18
|
+
async restoreFleet(opts) {
|
|
19
|
+
const rigs = this.deps.listRigsInOrder(); // kernel first, then the rest
|
|
20
|
+
const results = [];
|
|
21
|
+
// Progress "stream": each rig's result is emitted as it completes so the
|
|
22
|
+
// route can update a pollable rollup while the fleet restore continues
|
|
23
|
+
// (the locked async shape — the route answers on-commit, never blocks to
|
|
24
|
+
// completion). onRigDone stubbed until wired below (RED-first).
|
|
25
|
+
const record = (result) => {
|
|
26
|
+
results.push(result);
|
|
27
|
+
opts?.onRigDone?.(result); // emit progress as each rig completes
|
|
28
|
+
};
|
|
29
|
+
for (const rig of rigs) {
|
|
30
|
+
// Stop-before-next-rig: poll cancel at the rig BOUNDARY, before this rig
|
|
31
|
+
// starts. A rig already in flight is never interrupted; rigs not yet
|
|
32
|
+
// reached become `not_attempted` (honest, never silently dropped).
|
|
33
|
+
if (this.deps.isCancelled?.()) {
|
|
34
|
+
record({
|
|
35
|
+
rigId: rig.rigId,
|
|
36
|
+
outcome: "not_attempted",
|
|
37
|
+
reason: "cancelled before this rig started (stop-before-next-rig)",
|
|
38
|
+
remediation: "re-run the fleet restore to attempt this rig",
|
|
39
|
+
});
|
|
40
|
+
continue;
|
|
41
|
+
}
|
|
42
|
+
try {
|
|
43
|
+
const r = await this.deps.restoreRig(rig.rigId);
|
|
44
|
+
record({
|
|
45
|
+
rigId: rig.rigId,
|
|
46
|
+
outcome: r.outcome,
|
|
47
|
+
receiptRef: r.receiptRef,
|
|
48
|
+
attention: r.attention,
|
|
49
|
+
reason: r.reason,
|
|
50
|
+
remediation: r.remediation,
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
// Best-effort continue: one rig's failure never halts the fleet.
|
|
55
|
+
record({ rigId: rig.rigId, outcome: "failed" });
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return results;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
/** LIVE-panes branch: adopt every surviving session, then per-seat resume
|
|
62
|
+
* verification for the rest, folding into the UNCHANGED closed union. A seat is
|
|
63
|
+
* OK iff it yields no triage row (attentionRowsFromNodes is the single non-OK
|
|
64
|
+
* authority, so the fold cannot invent a fifth outcome or a second mapping). */
|
|
65
|
+
async function adoptLivePanesRig(rigId, live, deps) {
|
|
66
|
+
const nodes = [];
|
|
67
|
+
const adoptedIds = new Set();
|
|
68
|
+
for (const seat of live) {
|
|
69
|
+
const adopted = await deps.reconcileSession(seat.sessionName);
|
|
70
|
+
if (adopted.ok) {
|
|
71
|
+
adoptedIds.add(seat.logicalId);
|
|
72
|
+
nodes.push({ logicalId: seat.logicalId, status: "resumed" });
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
nodes.push({
|
|
76
|
+
logicalId: seat.logicalId,
|
|
77
|
+
status: "failed",
|
|
78
|
+
error: `adopt failed for surviving session "${seat.sessionName}": ${adopted.message ?? adopted.code ?? "unknown"}`,
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
if (adoptedIds.size === 0) {
|
|
83
|
+
// The stamped mis-probe analysis: probe-says-LIVE on a dead rig → adopt fails
|
|
84
|
+
// EMPTY (honest). Never proceed to launches on a rig the adoption itself just
|
|
85
|
+
// proved has no surviving session — re-running takes the restore path.
|
|
86
|
+
return {
|
|
87
|
+
outcome: "not_attempted",
|
|
88
|
+
reason: "probe saw live panes but no surviving session could be adopted (panes likely died between probe and adopt)",
|
|
89
|
+
remediation: "re-run the fleet restore — a genuinely stopped rig takes the snapshot-restore path",
|
|
90
|
+
attention: attentionRowsFromNodes(rigId, nodes),
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
const remaining = deps.listRigSeats(rigId).filter((id) => !adoptedIds.has(id));
|
|
94
|
+
if (remaining.length > 0) {
|
|
95
|
+
const subset = await deps.launchNodeSubset(rigId, remaining);
|
|
96
|
+
if (subset.ok) {
|
|
97
|
+
for (const n of subset.launched ?? [])
|
|
98
|
+
nodes.push(n);
|
|
99
|
+
for (const a of subset.alreadyRunning ?? []) {
|
|
100
|
+
// r1 LOW: a seat whose ADOPT failed can still be proven LIVE by the launcher
|
|
101
|
+
// (it classifies targets against tmux itself). The seat is RUNNING — drop the
|
|
102
|
+
// stale adopt-failure node, or triage would name a running seat as its "need".
|
|
103
|
+
const staleFailed = nodes.findIndex((n) => n.logicalId === a.logicalId && n.status === "failed");
|
|
104
|
+
if (staleFailed >= 0)
|
|
105
|
+
nodes.splice(staleFailed, 1);
|
|
106
|
+
nodes.push({ logicalId: a.logicalId, status: "resumed" });
|
|
107
|
+
}
|
|
108
|
+
for (const f of subset.failedTargets ?? [])
|
|
109
|
+
nodes.push({ logicalId: f.logicalId, status: "failed", error: `resume verification could not run: ${f.reason}` });
|
|
110
|
+
for (const h of subset.held ?? [])
|
|
111
|
+
nodes.push({ logicalId: h.logicalId, status: "attention_required", attentionEvidence: `held from launch — ${h.reason}` });
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
// A whole-subset refusal (e.g. no usable snapshot) leaves every remaining seat
|
|
115
|
+
// unverified — each gets a NAMED row; silence here would be the round-10 gap again.
|
|
116
|
+
for (const id of remaining)
|
|
117
|
+
nodes.push({ logicalId: id, status: "failed", error: `per-seat resume verification unavailable: ${subset.message ?? subset.code ?? "launch subset failed"}` });
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
const attention = attentionRowsFromNodes(rigId, nodes);
|
|
121
|
+
// R6 closed union, per the amendment: all seats re-attached+verified →
|
|
122
|
+
// fully_restored; some non-resumable → partially_restored (their exact needs ride
|
|
123
|
+
// the triage rows). adoptedIds.size > 0 guarantees at least one OK seat here.
|
|
124
|
+
return attention.length === 0
|
|
125
|
+
? { outcome: "fully_restored", attention }
|
|
126
|
+
: { outcome: "partially_restored", attention };
|
|
127
|
+
}
|
|
128
|
+
/** Build the default `restoreRig` dep: COMPOSE findLatestRestoreUsable → restore →
|
|
129
|
+
* rigResult. A rig with no usable snapshot is `not_attempted` (restore never runs);
|
|
130
|
+
* a restore that fails outright is `failed`. Never re-authors restore logic.
|
|
131
|
+
* With `adoptDeps` wired (Amendment 2), a rig whose panes survived takes the ADOPT
|
|
132
|
+
* branch above; DEAD panes (and callers without adoptDeps) run unchanged. */
|
|
133
|
+
export function createDefaultRestoreRig(_deps, adoptDeps) {
|
|
134
|
+
return async (rigId) => {
|
|
135
|
+
if (adoptDeps) {
|
|
136
|
+
const live = await adoptDeps.probeLiveSessions(rigId);
|
|
137
|
+
// Adopt has NO restore-attempt receipt: its ledger lineage is the
|
|
138
|
+
// node.reconciled events the shipped adopt emits per seat.
|
|
139
|
+
if (live.length > 0)
|
|
140
|
+
return adoptLivePanesRig(rigId, live, adoptDeps);
|
|
141
|
+
}
|
|
142
|
+
const snapshot = _deps.findLatestRestoreUsable(rigId);
|
|
143
|
+
if (!snapshot)
|
|
144
|
+
// no usable snapshot — never a silent substitute; R3: carry WHY + the fix.
|
|
145
|
+
return {
|
|
146
|
+
outcome: "not_attempted",
|
|
147
|
+
reason: "no restore-usable snapshot for this rig",
|
|
148
|
+
remediation: "take a snapshot (rig snapshot create) or mark an existing one restore-usable",
|
|
149
|
+
};
|
|
150
|
+
let receiptRef;
|
|
151
|
+
const outcome = await _deps.restore(snapshot.id, {
|
|
152
|
+
onAttemptStarted: (attemptId) => {
|
|
153
|
+
receiptRef = attemptId;
|
|
154
|
+
},
|
|
155
|
+
});
|
|
156
|
+
// ok:true → result.rigResult; ok:false WITH a result (e.g. pre-restore validation
|
|
157
|
+
// fail → `not_attempted`) → its rigResult; ok:false with no result (a hard failure:
|
|
158
|
+
// snapshot/rig not found, rig not stopped, restore in progress) → `failed`.
|
|
159
|
+
const outcomeResult = outcome.result?.rigResult ?? "failed";
|
|
160
|
+
// Triage rows for this rig's seats that need operator action (from the restore
|
|
161
|
+
// result's nodes) — the shipped per-rig attention, unioned at the fleet layer.
|
|
162
|
+
const attention = outcome.result?.nodes ? attentionRowsFromNodes(rigId, outcome.result.nodes) : [];
|
|
163
|
+
return { outcome: outcomeResult, receiptRef, attention };
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
/** R2 — the founder's order: the KERNEL rig (the supervisor, name "kernel") restores
|
|
167
|
+
* FIRST, then the remaining rigs in listRigs order. No kernel rig → all rigs, none
|
|
168
|
+
* flagged kernel (honest, never fabricated). This is the `listRigsInOrder` source the
|
|
169
|
+
* conductor consumes. */
|
|
170
|
+
export function listRigsInKernelFirstOrder(deps) {
|
|
171
|
+
const all = deps.listRigs();
|
|
172
|
+
const kernel = all.filter((r) => r.name === "kernel");
|
|
173
|
+
const rest = all.filter((r) => r.name !== "kernel");
|
|
174
|
+
return [...kernel, ...rest].map((r) => ({ rigId: r.id, isKernel: r.name === "kernel" }));
|
|
175
|
+
}
|
|
176
|
+
/** R5 — map a rig's restore nodes → triage rows: the seats needing operator action
|
|
177
|
+
* (a LIVE runtime prompt, an unresumable session, or a hard failure), each with its
|
|
178
|
+
* EXACT need. Running/resumed nodes are excluded. Never fabricates a need. */
|
|
179
|
+
export function attentionRowsFromNodes(rigId, nodes) {
|
|
180
|
+
const rows = [];
|
|
181
|
+
for (const n of nodes) {
|
|
182
|
+
if (n.status === "attention_required") {
|
|
183
|
+
rows.push({
|
|
184
|
+
rigId,
|
|
185
|
+
seat: n.logicalId,
|
|
186
|
+
need: n.attentionEvidence
|
|
187
|
+
? `live runtime prompt — ${n.attentionEvidence}`
|
|
188
|
+
: "live runtime prompt (resume selection / auth) — needs operator",
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
else if (n.status === "awaiting-decision") {
|
|
192
|
+
// BLOCKER 3 — preserve the shipped orchestrator's EXACT error/remediation (it carries the concrete
|
|
193
|
+
// `--fresh <logicalId>` command and reason); only fall back to the generic sentence when the node
|
|
194
|
+
// carried none. The exact need reaching the operator IS the door's "seat + exact need" acceptance.
|
|
195
|
+
rows.push({
|
|
196
|
+
rigId,
|
|
197
|
+
seat: n.logicalId,
|
|
198
|
+
need: n.error ? n.error : "original session not resumable and no --fresh — choose fresh-prime or skip",
|
|
199
|
+
});
|
|
200
|
+
}
|
|
201
|
+
else if (n.status === "failed") {
|
|
202
|
+
rows.push({ rigId, seat: n.logicalId, need: n.error ? `restore failed: ${n.error}` : "restore failed" });
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
return rows;
|
|
206
|
+
}
|
|
207
|
+
export function aggregateFleetRollup(sequence) {
|
|
208
|
+
// All four closed-union keys initialized — `not_attempted` is first-class, never
|
|
209
|
+
// absent and never folded into `failed`.
|
|
210
|
+
const counts = {
|
|
211
|
+
fully_restored: 0,
|
|
212
|
+
partially_restored: 0,
|
|
213
|
+
failed: 0,
|
|
214
|
+
not_attempted: 0,
|
|
215
|
+
};
|
|
216
|
+
for (const r of sequence)
|
|
217
|
+
counts[r.outcome] += 1;
|
|
218
|
+
// attention_required = the UNION of per-rig triage rows carried in the sequence (a view).
|
|
219
|
+
const attention_required = sequence.flatMap((r) => r.attention ?? []);
|
|
220
|
+
return { counts, sequence, attention_required };
|
|
221
|
+
}
|
|
222
|
+
/** DERIVED f(counts) — computed, never stored (a stored verdict could drift). */
|
|
223
|
+
export function deriveFleetVerdict(counts) {
|
|
224
|
+
const total = counts.fully_restored + counts.partially_restored + counts.failed + counts.not_attempted;
|
|
225
|
+
if (total === 0 || counts.not_attempted === total)
|
|
226
|
+
return "none_attempted";
|
|
227
|
+
if (counts.fully_restored === total)
|
|
228
|
+
return "all_fully_restored";
|
|
229
|
+
if (counts.failed === total)
|
|
230
|
+
return "all_failed";
|
|
231
|
+
return "mixed";
|
|
232
|
+
}
|
|
233
|
+
//# sourceMappingURL=crash-cart-conductor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crash-cart-conductor.js","sourceRoot":"","sources":["../../src/domain/crash-cart-conductor.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import type { DaemonStateFile, HealthzProbeResult } from "./crash-cart-detect.js";
|
|
2
|
-
/** Classify a fetch REJECTION into a probe result
|
|
3
|
-
*
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
2
|
+
/** Classify a fetch REJECTION into a probe result — POSITIVE-FORM predicate (guard/orch rail):
|
|
3
|
+
* DOWN (refused) ONLY when (a) at least one terminal attempt exists AND (b) EVERY terminal attempt is
|
|
4
|
+
* recognizably ECONNREFUSED. Anything else — a timeout, an abort, another code, or a CODE-LESS /
|
|
5
|
+
* unrecognized failure — is ambiguous evidence and stays timeout/unverified (a timeout never promotes to
|
|
6
|
+
* a confirmed down; the cart never offers RESTORE on partial evidence). "No known-bad sibling" (a negated
|
|
7
|
+
* code-Set) erased a code-less sibling; "ALL known-good" (this positive form) closes the whole family. */
|
|
8
|
+
export declare function classifyProbeError(err: unknown): HealthzProbeResult;
|
|
8
9
|
export interface ProbeDeps {
|
|
9
10
|
fetch: (url: string, init?: {
|
|
10
11
|
signal?: AbortSignal;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"crash-cart-probes.d.ts","sourceRoot":"","sources":["../../src/domain/crash-cart-probes.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"crash-cart-probes.d.ts","sourceRoot":"","sources":["../../src/domain/crash-cart-probes.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAiDlF;;;;;2GAK2G;AAC3G,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,kBAAkB,CAInE;AAED,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC3E,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;8EAC8E;AAC9E,wBAAsB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAW5F;AAED;mDACmD;AACnD,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAOnD;AAED;8CAC8C;AAC9C,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS,CAY/E"}
|
|
@@ -3,14 +3,64 @@
|
|
|
3
3
|
// proven by the real-daemon-down run.
|
|
4
4
|
import { existsSync, readFileSync } from "node:fs";
|
|
5
5
|
import { join } from "node:path";
|
|
6
|
-
/**
|
|
7
|
-
*
|
|
6
|
+
/** Collect the TERMINAL ATTEMPTS from a rejection tree — the leaf error nodes that represent an actual
|
|
7
|
+
* connect attempt. Node/Undici's global fetch wraps a refused socket as an OUTER `TypeError
|
|
8
|
+
* {message:"fetch failed", code:undefined}` → `cause` (single address), or an `AggregateError` whose
|
|
9
|
+
* `.errors[]` are the per-address attempts. A node WITH a `cause` or non-empty `errors[]` is a WRAPPER
|
|
10
|
+
* (it recurses, never counts as a terminal attempt); a node with neither is a terminal attempt — which
|
|
11
|
+
* may carry a `code` (ECONNREFUSED/ETIMEDOUT/…) or NONE at all. A code-less attempt is retained here,
|
|
12
|
+
* which a flattened code-Set would erase. Depth-bounded (cycle-safe); a node hit at the cap is treated
|
|
13
|
+
* as a terminal attempt (its code, typically absent, then counts — conservatively). */
|
|
14
|
+
const MAX_WALK_DEPTH = 10; // real Undici chains are 2–3 deep; this is generous. Beyond it = UNRESOLVED.
|
|
15
|
+
function collectTerminalAttempts(err) {
|
|
16
|
+
const attempts = [];
|
|
17
|
+
const onPath = new Set(); // cycle detection by IDENTITY (a back-edge cannot be resolved)
|
|
18
|
+
const visit = (e, depth) => {
|
|
19
|
+
// A non-object rejection (string/undefined/…) is not a resolvable terminal → unknown (non-refused).
|
|
20
|
+
if (!e || typeof e !== "object") {
|
|
21
|
+
attempts.push({ unresolved: true });
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
const o = e;
|
|
25
|
+
// CYCLE: this exact object is already on the current path — it cannot be fully resolved → unknown.
|
|
26
|
+
if (onPath.has(o)) {
|
|
27
|
+
attempts.push({ unresolved: true });
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
const children = [];
|
|
31
|
+
if (o.cause)
|
|
32
|
+
children.push(o.cause);
|
|
33
|
+
if (Array.isArray(o.errors))
|
|
34
|
+
children.push(...o.errors);
|
|
35
|
+
if (children.length === 0) {
|
|
36
|
+
// A FULLY-RESOLVED terminal attempt (no cause, no errors): its own code is real evidence.
|
|
37
|
+
attempts.push({ code: typeof o.code === "string" ? o.code : undefined, name: typeof o.name === "string" ? o.name : undefined });
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
// A WRAPPER (has children). If depth is exhausted, we CANNOT resolve it → record an UNKNOWN attempt;
|
|
41
|
+
// NEVER reinterpret an unresolved wrapper's OWN code as terminal evidence (exhaustion is not evidence).
|
|
42
|
+
if (depth >= MAX_WALK_DEPTH) {
|
|
43
|
+
attempts.push({ unresolved: true });
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
onPath.add(o);
|
|
47
|
+
for (const c of children)
|
|
48
|
+
visit(c, depth + 1);
|
|
49
|
+
onPath.delete(o);
|
|
50
|
+
};
|
|
51
|
+
visit(err, 0);
|
|
52
|
+
return attempts;
|
|
53
|
+
}
|
|
54
|
+
/** Classify a fetch REJECTION into a probe result — POSITIVE-FORM predicate (guard/orch rail):
|
|
55
|
+
* DOWN (refused) ONLY when (a) at least one terminal attempt exists AND (b) EVERY terminal attempt is
|
|
56
|
+
* recognizably ECONNREFUSED. Anything else — a timeout, an abort, another code, or a CODE-LESS /
|
|
57
|
+
* unrecognized failure — is ambiguous evidence and stays timeout/unverified (a timeout never promotes to
|
|
58
|
+
* a confirmed down; the cart never offers RESTORE on partial evidence). "No known-bad sibling" (a negated
|
|
59
|
+
* code-Set) erased a code-less sibling; "ALL known-good" (this positive form) closes the whole family. */
|
|
8
60
|
export function classifyProbeError(err) {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
return "timeout";
|
|
13
|
-
return "timeout";
|
|
61
|
+
const attempts = collectTerminalAttempts(err);
|
|
62
|
+
const refusedUnanimous = attempts.length > 0 && attempts.every((a) => a.code === "ECONNREFUSED");
|
|
63
|
+
return refusedUnanimous ? "refused" : "timeout";
|
|
14
64
|
}
|
|
15
65
|
/** Probe `<url>` (a daemon /healthz): 2xx → answered; non-2xx (foreign occupant) → not-openrig; a
|
|
16
66
|
* rejection is classified (refused/timeout). Bounded by an abort timeout. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"crash-cart-probes.js","sourceRoot":"","sources":["../../src/domain/crash-cart-probes.ts"],"names":[],"mappings":"AAAA,sGAAsG;AACtG,kGAAkG;AAClG,sCAAsC;AACtC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC;
|
|
1
|
+
{"version":3,"file":"crash-cart-probes.js","sourceRoot":"","sources":["../../src/domain/crash-cart-probes.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,10 @@ export declare const LOCAL_HOST_ID = "local";
|
|
|
6
6
|
export declare function setSelfHostId(id: string | null): void;
|
|
7
7
|
/** The boot-resolved self-host id, or null before boot has reconciled it. */
|
|
8
8
|
export declare function getSelfHostId(): string | null;
|
|
9
|
+
/** Publish the boot-derived self-host id source (startup, once). null resets (tests). */
|
|
10
|
+
export declare function setSelfHostIdSource(source: string | null): void;
|
|
11
|
+
/** The boot-derived self-host id source, or null before boot has reconciled it. */
|
|
12
|
+
export declare function getSelfHostIdSource(): string | null;
|
|
9
13
|
/**
|
|
10
14
|
* The shared self-resolution convention: does a host token route to THIS host?
|
|
11
15
|
* True for an absent/empty token, the `LOCAL_HOST_ID` positional sentinel, and
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fanout-contract.d.ts","sourceRoot":"","sources":["../../../src/domain/hosts/fanout-contract.ts"],"names":[],"mappings":"AAUA;;kCAEkC;AAClC,eAAO,MAAM,aAAa,UAAU,CAAC;AAerC,mFAAmF;AACnF,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAErD;AAED,6EAA6E;AAC7E,wBAAgB,aAAa,IAAI,MAAM,GAAG,IAAI,CAE7C;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,EACpC,MAAM,GAAE,MAAM,GAAG,IAAiB,GACjC,OAAO,CAIT;AAED;;;;gEAIgE;AAChE,MAAM,MAAM,iBAAiB,GAAG,IAAI,GAAG,aAAa,GAAG,uBAAuB,GAAG,aAAa,CAAC;AAE/F,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,iBAAiB,CAAC;IAC1B,uEAAuE;IACvE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;kEAE8D;IAC9D,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;8BAG8B;AAC9B,MAAM,WAAW,iBAAiB,CAAC,CAAC;IAClC,KAAK,EAAE,CAAC,EAAE,CAAC;IACX,KAAK,EAAE,aAAa,EAAE,CAAC;CACxB;AAED;;iDAEiD;AACjD,wBAAgB,YAAY,CAAC,OAAO,EAAE,iBAAiB,CAAC,OAAO,CAAC,EAAE,eAAe,EAAE,MAAM,EAAE,GAAG,OAAO,CAIpG"}
|
|
1
|
+
{"version":3,"file":"fanout-contract.d.ts","sourceRoot":"","sources":["../../../src/domain/hosts/fanout-contract.ts"],"names":[],"mappings":"AAUA;;kCAEkC;AAClC,eAAO,MAAM,aAAa,UAAU,CAAC;AAerC,mFAAmF;AACnF,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAErD;AAED,6EAA6E;AAC7E,wBAAgB,aAAa,IAAI,MAAM,GAAG,IAAI,CAE7C;AAUD,yFAAyF;AACzF,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAE/D;AAED,mFAAmF;AACnF,wBAAgB,mBAAmB,IAAI,MAAM,GAAG,IAAI,CAEnD;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,EACpC,MAAM,GAAE,MAAM,GAAG,IAAiB,GACjC,OAAO,CAIT;AAED;;;;gEAIgE;AAChE,MAAM,MAAM,iBAAiB,GAAG,IAAI,GAAG,aAAa,GAAG,uBAAuB,GAAG,aAAa,CAAC;AAE/F,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,iBAAiB,CAAC;IAC1B,uEAAuE;IACvE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;kEAE8D;IAC9D,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;8BAG8B;AAC9B,MAAM,WAAW,iBAAiB,CAAC,CAAC;IAClC,KAAK,EAAE,CAAC,EAAE,CAAC;IACX,KAAK,EAAE,aAAa,EAAE,CAAC;CACxB;AAED;;iDAEiD;AACjD,wBAAgB,YAAY,CAAC,OAAO,EAAE,iBAAiB,CAAC,OAAO,CAAC,EAAE,eAAe,EAAE,MAAM,EAAE,GAAG,OAAO,CAIpG"}
|
|
@@ -31,6 +31,21 @@ export function setSelfHostId(id) {
|
|
|
31
31
|
export function getSelfHostId() {
|
|
32
32
|
return selfHostId;
|
|
33
33
|
}
|
|
34
|
+
// Slice 14 §2c — the id's PROVENANCE, resolved once at boot beside the id itself.
|
|
35
|
+
//
|
|
36
|
+
// Deliberately NOT derived per request: it needs the operator's configured `host.name`, and reading
|
|
37
|
+
// settings inside the /healthz handler put file I/O on the hottest path in the daemon and blew the
|
|
38
|
+
// ps+summary burst latency budget (caught by ps-summary-stall-red). Same lifecycle as the id: set
|
|
39
|
+
// once at boot, read for free thereafter.
|
|
40
|
+
let selfHostIdSource = null;
|
|
41
|
+
/** Publish the boot-derived self-host id source (startup, once). null resets (tests). */
|
|
42
|
+
export function setSelfHostIdSource(source) {
|
|
43
|
+
selfHostIdSource = source;
|
|
44
|
+
}
|
|
45
|
+
/** The boot-derived self-host id source, or null before boot has reconciled it. */
|
|
46
|
+
export function getSelfHostIdSource() {
|
|
47
|
+
return selfHostIdSource;
|
|
48
|
+
}
|
|
34
49
|
/**
|
|
35
50
|
* The shared self-resolution convention: does a host token route to THIS host?
|
|
36
51
|
* True for an absent/empty token, the `LOCAL_HOST_ID` positional sentinel, and
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fanout-contract.js","sourceRoot":"","sources":["../../../src/domain/hosts/fanout-contract.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,EAAE;AACF,sEAAsE;AACtE,0EAA0E;AAC1E,4EAA4E;AAC5E,uEAAuE;AACvE,0EAA0E;AAC1E,sEAAsE;AACtE,uEAAuE;AAEvE;;kCAEkC;AAClC,MAAM,CAAC,MAAM,aAAa,GAAG,OAAO,CAAC;AAErC,uEAAuE;AACvE,uEAAuE;AACvE,4DAA4D;AAC5D,uEAAuE;AACvE,8EAA8E;AAC9E,2EAA2E;AAC3E,8EAA8E;AAC9E,8EAA8E;AAC9E,8EAA8E;AAC9E,6EAA6E;AAC7E,iEAAiE;AACjE,IAAI,UAAU,GAAkB,IAAI,CAAC;AAErC,mFAAmF;AACnF,MAAM,UAAU,aAAa,CAAC,EAAiB;IAC7C,UAAU,GAAG,EAAE,CAAC;AAClB,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,aAAa;IAC3B,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,mBAAmB,CACjC,SAAoC,EACpC,SAAwB,UAAU;IAElC,IAAI,SAAS,KAAK,SAAS,IAAI,SAAS,KAAK,IAAI,IAAI,SAAS,KAAK,EAAE;QAAE,OAAO,IAAI,CAAC;IACnF,IAAI,SAAS,KAAK,aAAa;QAAE,OAAO,IAAI,CAAC;IAC7C,OAAO,MAAM,KAAK,IAAI,IAAI,SAAS,KAAK,MAAM,CAAC;AACjD,CAAC;AA6BD;;iDAEiD;AACjD,MAAM,UAAU,YAAY,CAAC,OAAmC,EAAE,eAAyB;IACzF,MAAM,IAAI,GAAG,IAAI,GAAG,EAAkB,CAAC;IACvC,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,KAAK;QAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACjF,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,KAAK,eAAe,CAAC,MAAM,CAAC;AAC9G,CAAC"}
|
|
1
|
+
{"version":3,"file":"fanout-contract.js","sourceRoot":"","sources":["../../../src/domain/hosts/fanout-contract.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,EAAE;AACF,sEAAsE;AACtE,0EAA0E;AAC1E,4EAA4E;AAC5E,uEAAuE;AACvE,0EAA0E;AAC1E,sEAAsE;AACtE,uEAAuE;AAEvE;;kCAEkC;AAClC,MAAM,CAAC,MAAM,aAAa,GAAG,OAAO,CAAC;AAErC,uEAAuE;AACvE,uEAAuE;AACvE,4DAA4D;AAC5D,uEAAuE;AACvE,8EAA8E;AAC9E,2EAA2E;AAC3E,8EAA8E;AAC9E,8EAA8E;AAC9E,8EAA8E;AAC9E,6EAA6E;AAC7E,iEAAiE;AACjE,IAAI,UAAU,GAAkB,IAAI,CAAC;AAErC,mFAAmF;AACnF,MAAM,UAAU,aAAa,CAAC,EAAiB;IAC7C,UAAU,GAAG,EAAE,CAAC;AAClB,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,aAAa;IAC3B,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,kFAAkF;AAClF,EAAE;AACF,oGAAoG;AACpG,mGAAmG;AACnG,kGAAkG;AAClG,0CAA0C;AAC1C,IAAI,gBAAgB,GAAkB,IAAI,CAAC;AAE3C,yFAAyF;AACzF,MAAM,UAAU,mBAAmB,CAAC,MAAqB;IACvD,gBAAgB,GAAG,MAAM,CAAC;AAC5B,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,mBAAmB;IACjC,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,mBAAmB,CACjC,SAAoC,EACpC,SAAwB,UAAU;IAElC,IAAI,SAAS,KAAK,SAAS,IAAI,SAAS,KAAK,IAAI,IAAI,SAAS,KAAK,EAAE;QAAE,OAAO,IAAI,CAAC;IACnF,IAAI,SAAS,KAAK,aAAa;QAAE,OAAO,IAAI,CAAC;IAC7C,OAAO,MAAM,KAAK,IAAI,IAAI,SAAS,KAAK,MAAM,CAAC;AACjD,CAAC;AA6BD;;iDAEiD;AACjD,MAAM,UAAU,YAAY,CAAC,OAAmC,EAAE,eAAyB;IACzF,MAAM,IAAI,GAAG,IAAI,GAAG,EAAkB,CAAC;IACvC,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,KAAK;QAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACjF,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,KAAK,eAAe,CAAC,MAAM,CAAC;AAC9G,CAAC"}
|
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
export interface SshHostEntry {
|
|
2
2
|
id: string;
|
|
3
|
+
/**
|
|
4
|
+
* The observed, immutable self-id of the host this entry points at — the JOIN KEY.
|
|
5
|
+
*
|
|
6
|
+
* `id` is MY label for that machine; `hostId` is what that machine calls itself and stamps into
|
|
7
|
+
* every envelope it sends. Optional because every entry that exists today predates the field:
|
|
8
|
+
* absent means "never learned", which resolves exactly as it does now. Nothing populates this
|
|
9
|
+
* automatically in this slice.
|
|
10
|
+
*/
|
|
11
|
+
hostId?: string;
|
|
3
12
|
transport: "ssh";
|
|
4
13
|
target: string;
|
|
5
14
|
user?: string;
|
|
@@ -7,6 +16,8 @@ export interface SshHostEntry {
|
|
|
7
16
|
}
|
|
8
17
|
export interface HttpHostEntry {
|
|
9
18
|
id: string;
|
|
19
|
+
/** The observed self-id of the host this entry points at — the join key. See SshHostEntry.hostId. */
|
|
20
|
+
hostId?: string;
|
|
10
21
|
transport: "http";
|
|
11
22
|
url: string;
|
|
12
23
|
bearer_env?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hosts-registry-reader.d.ts","sourceRoot":"","sources":["../../../src/domain/hosts/hosts-registry-reader.ts"],"names":[],"mappings":"AAoBA,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,KAAK,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,SAAS,GAAG,YAAY,GAAG,aAAa,CAAC;AAErD,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,SAAS,EAAE,CAAC;CACpB;AAED,MAAM,MAAM,sBAAsB,GAC9B;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,EAAE,YAAY,CAAA;CAAE,GACpC;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEjC,MAAM,MAAM,cAAc,GACtB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,SAAS,CAAA;CAAE,GAC7B;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAOjC,eAAO,MAAM,iBAAiB,aAAiE,CAAC;AAIhG,wBAAgB,uBAAuB,IAAI,MAAM,CAEhD;AAED;0EAC0E;AAC1E,wBAAgB,gBAAgB,CAAC,IAAI,GAAE,MAAkC,GAAG,sBAAsB,CAoBjG;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,GAAG,sBAAsB,
|
|
1
|
+
{"version":3,"file":"hosts-registry-reader.d.ts","sourceRoot":"","sources":["../../../src/domain/hosts/hosts-registry-reader.ts"],"names":[],"mappings":"AAoBA,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX;;;;;;;OAOG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,KAAK,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,qGAAqG;IACrG,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,SAAS,GAAG,YAAY,GAAG,aAAa,CAAC;AAErD,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,SAAS,EAAE,CAAC;CACpB;AAED,MAAM,MAAM,sBAAsB,GAC9B;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,EAAE,YAAY,CAAA;CAAE,GACpC;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEjC,MAAM,MAAM,cAAc,GACtB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,SAAS,CAAA;CAAE,GAC7B;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAOjC,eAAO,MAAM,iBAAiB,aAAiE,CAAC;AAIhG,wBAAgB,uBAAuB,IAAI,MAAM,CAEhD;AAED;0EAC0E;AAC1E,wBAAgB,gBAAgB,CAAC,IAAI,GAAE,MAAkC,GAAG,sBAAsB,CAoBjG;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,GAAG,sBAAsB,CA4HhG;AAED;;sDAEsD;AACtD,wBAAgB,WAAW,CAAC,QAAQ,EAAE,YAAY,EAAE,EAAE,EAAE,MAAM,GAAG,cAAc,CAsB9E;AAED;;;;eAIe;AACf,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,YAAY,EAAE,EAAE,EAAE,MAAM,GAAG,cAAc,CAUvF"}
|