@openrig/cli 0.1.12 → 0.2.0
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/openrig-activity-hook-relay.cjs +104 -0
- package/daemon/dist/adapters/claude-code-adapter.d.ts +14 -6
- package/daemon/dist/adapters/claude-code-adapter.d.ts.map +1 -1
- package/daemon/dist/adapters/claude-code-adapter.js +183 -65
- package/daemon/dist/adapters/claude-code-adapter.js.map +1 -1
- package/daemon/dist/adapters/claude-resume.d.ts +5 -0
- package/daemon/dist/adapters/claude-resume.d.ts.map +1 -1
- package/daemon/dist/adapters/claude-resume.js +13 -0
- package/daemon/dist/adapters/claude-resume.js.map +1 -1
- package/daemon/dist/adapters/codex-resume.d.ts +8 -1
- package/daemon/dist/adapters/codex-resume.d.ts.map +1 -1
- package/daemon/dist/adapters/codex-resume.js +74 -5
- package/daemon/dist/adapters/codex-resume.js.map +1 -1
- package/daemon/dist/adapters/codex-runtime-adapter.d.ts +9 -5
- package/daemon/dist/adapters/codex-runtime-adapter.d.ts.map +1 -1
- package/daemon/dist/adapters/codex-runtime-adapter.js +255 -28
- package/daemon/dist/adapters/codex-runtime-adapter.js.map +1 -1
- package/daemon/dist/adapters/terminal-adapter.d.ts +2 -1
- package/daemon/dist/adapters/terminal-adapter.d.ts.map +1 -1
- package/daemon/dist/adapters/terminal-adapter.js +7 -1
- package/daemon/dist/adapters/terminal-adapter.js.map +1 -1
- package/daemon/dist/adapters/tmux.d.ts.map +1 -1
- package/daemon/dist/adapters/tmux.js +53 -5
- package/daemon/dist/adapters/tmux.js.map +1 -1
- package/daemon/dist/db/migrations/021_seat_handover_observability.d.ts +3 -0
- package/daemon/dist/db/migrations/021_seat_handover_observability.d.ts.map +1 -0
- package/daemon/dist/db/migrations/021_seat_handover_observability.js +11 -0
- package/daemon/dist/db/migrations/021_seat_handover_observability.js.map +1 -0
- package/daemon/dist/db/migrations/022_node_codex_config_profile.d.ts +3 -0
- package/daemon/dist/db/migrations/022_node_codex_config_profile.d.ts.map +1 -0
- package/daemon/dist/db/migrations/022_node_codex_config_profile.js +7 -0
- package/daemon/dist/db/migrations/022_node_codex_config_profile.js.map +1 -0
- package/daemon/dist/db/migrations/023_stream_items.d.ts +16 -0
- package/daemon/dist/db/migrations/023_stream_items.d.ts.map +1 -0
- package/daemon/dist/db/migrations/023_stream_items.js +37 -0
- package/daemon/dist/db/migrations/023_stream_items.js.map +1 -0
- package/daemon/dist/db/migrations/024_queue_items.d.ts +19 -0
- package/daemon/dist/db/migrations/024_queue_items.d.ts.map +1 -0
- package/daemon/dist/db/migrations/024_queue_items.js +52 -0
- package/daemon/dist/db/migrations/024_queue_items.js.map +1 -0
- package/daemon/dist/db/migrations/025_queue_transitions.d.ts +13 -0
- package/daemon/dist/db/migrations/025_queue_transitions.d.ts.map +1 -0
- package/daemon/dist/db/migrations/025_queue_transitions.js +28 -0
- package/daemon/dist/db/migrations/025_queue_transitions.js.map +1 -0
- package/daemon/dist/db/migrations/026_inbox_entries.d.ts +14 -0
- package/daemon/dist/db/migrations/026_inbox_entries.d.ts.map +1 -0
- package/daemon/dist/db/migrations/026_inbox_entries.js +35 -0
- package/daemon/dist/db/migrations/026_inbox_entries.js.map +1 -0
- package/daemon/dist/db/migrations/027_outbox_entries.d.ts +12 -0
- package/daemon/dist/db/migrations/027_outbox_entries.d.ts.map +1 -0
- package/daemon/dist/db/migrations/027_outbox_entries.js +30 -0
- package/daemon/dist/db/migrations/027_outbox_entries.js.map +1 -0
- package/daemon/dist/db/migrations/028_project_classifications.d.ts +26 -0
- package/daemon/dist/db/migrations/028_project_classifications.d.ts.map +1 -0
- package/daemon/dist/db/migrations/028_project_classifications.js +44 -0
- package/daemon/dist/db/migrations/028_project_classifications.js.map +1 -0
- package/daemon/dist/db/migrations/029_classifier_leases.d.ts +22 -0
- package/daemon/dist/db/migrations/029_classifier_leases.d.ts.map +1 -0
- package/daemon/dist/db/migrations/029_classifier_leases.js +41 -0
- package/daemon/dist/db/migrations/029_classifier_leases.js.map +1 -0
- package/daemon/dist/db/migrations/030_views_custom.d.ts +15 -0
- package/daemon/dist/db/migrations/030_views_custom.d.ts.map +1 -0
- package/daemon/dist/db/migrations/030_views_custom.js +27 -0
- package/daemon/dist/db/migrations/030_views_custom.js.map +1 -0
- package/daemon/dist/db/migrations/031_watchdog_jobs.d.ts +34 -0
- package/daemon/dist/db/migrations/031_watchdog_jobs.d.ts.map +1 -0
- package/daemon/dist/db/migrations/031_watchdog_jobs.js +59 -0
- package/daemon/dist/db/migrations/031_watchdog_jobs.js.map +1 -0
- package/daemon/dist/db/migrations/032_watchdog_history.d.ts +28 -0
- package/daemon/dist/db/migrations/032_watchdog_history.d.ts.map +1 -0
- package/daemon/dist/db/migrations/032_watchdog_history.js +46 -0
- package/daemon/dist/db/migrations/032_watchdog_history.js.map +1 -0
- package/daemon/dist/db/migrations/033_workflow_specs.d.ts +30 -0
- package/daemon/dist/db/migrations/033_workflow_specs.d.ts.map +1 -0
- package/daemon/dist/db/migrations/033_workflow_specs.js +50 -0
- package/daemon/dist/db/migrations/033_workflow_specs.js.map +1 -0
- package/daemon/dist/db/migrations/034_workflow_instances.d.ts +42 -0
- package/daemon/dist/db/migrations/034_workflow_instances.d.ts.map +1 -0
- package/daemon/dist/db/migrations/034_workflow_instances.js +63 -0
- package/daemon/dist/db/migrations/034_workflow_instances.js.map +1 -0
- package/daemon/dist/db/migrations/035_workflow_step_trails.d.ts +29 -0
- package/daemon/dist/db/migrations/035_workflow_step_trails.d.ts.map +1 -0
- package/daemon/dist/db/migrations/035_workflow_step_trails.js +48 -0
- package/daemon/dist/db/migrations/035_workflow_step_trails.js.map +1 -0
- package/daemon/dist/db/migrations/036_watchdog_policy_enum_extension.d.ts +35 -0
- package/daemon/dist/db/migrations/036_watchdog_policy_enum_extension.d.ts.map +1 -0
- package/daemon/dist/db/migrations/036_watchdog_policy_enum_extension.js +43 -0
- package/daemon/dist/db/migrations/036_watchdog_policy_enum_extension.js.map +1 -0
- package/daemon/dist/domain/agent-activity-store.d.ts +42 -0
- package/daemon/dist/domain/agent-activity-store.d.ts.map +1 -0
- package/daemon/dist/domain/agent-activity-store.js +177 -0
- package/daemon/dist/domain/agent-activity-store.js.map +1 -0
- package/daemon/dist/domain/agent-manifest.d.ts.map +1 -1
- package/daemon/dist/domain/agent-manifest.js +3 -0
- package/daemon/dist/domain/agent-manifest.js.map +1 -1
- package/daemon/dist/domain/agent-starter-resolver.d.ts +100 -0
- package/daemon/dist/domain/agent-starter-resolver.d.ts.map +1 -0
- package/daemon/dist/domain/agent-starter-resolver.js +200 -0
- package/daemon/dist/domain/agent-starter-resolver.js.map +1 -0
- package/daemon/dist/domain/classifier-lease-manager.d.ts +130 -0
- package/daemon/dist/domain/classifier-lease-manager.d.ts.map +1 -0
- package/daemon/dist/domain/classifier-lease-manager.js +285 -0
- package/daemon/dist/domain/classifier-lease-manager.js.map +1 -0
- package/daemon/dist/domain/context-usage-store.d.ts +1 -1
- package/daemon/dist/domain/context-usage-store.js +1 -1
- package/daemon/dist/domain/context-usage-store.js.map +1 -1
- package/daemon/dist/domain/hot-potato-enforcer.d.ts +45 -0
- package/daemon/dist/domain/hot-potato-enforcer.d.ts.map +1 -0
- package/daemon/dist/domain/hot-potato-enforcer.js +94 -0
- package/daemon/dist/domain/hot-potato-enforcer.js.map +1 -0
- package/daemon/dist/domain/inbox-handler.d.ts +68 -0
- package/daemon/dist/domain/inbox-handler.d.ts.map +1 -0
- package/daemon/dist/domain/inbox-handler.js +177 -0
- package/daemon/dist/domain/inbox-handler.js.map +1 -0
- package/daemon/dist/domain/native-resume-probe.d.ts +1 -1
- package/daemon/dist/domain/native-resume-probe.d.ts.map +1 -1
- package/daemon/dist/domain/native-resume-probe.js +67 -0
- package/daemon/dist/domain/native-resume-probe.js.map +1 -1
- package/daemon/dist/domain/node-inventory.d.ts +29 -1
- package/daemon/dist/domain/node-inventory.d.ts.map +1 -1
- package/daemon/dist/domain/node-inventory.js +160 -38
- package/daemon/dist/domain/node-inventory.js.map +1 -1
- package/daemon/dist/domain/node-launcher.d.ts +2 -0
- package/daemon/dist/domain/node-launcher.d.ts.map +1 -1
- package/daemon/dist/domain/node-launcher.js +14 -2
- package/daemon/dist/domain/node-launcher.js.map +1 -1
- package/daemon/dist/domain/outbox-handler.d.ts +48 -0
- package/daemon/dist/domain/outbox-handler.d.ts.map +1 -0
- package/daemon/dist/domain/outbox-handler.js +106 -0
- package/daemon/dist/domain/outbox-handler.js.map +1 -0
- package/daemon/dist/domain/policies/artifact-pool-helpers.d.ts +64 -0
- package/daemon/dist/domain/policies/artifact-pool-helpers.d.ts.map +1 -0
- package/daemon/dist/domain/policies/artifact-pool-helpers.js +226 -0
- package/daemon/dist/domain/policies/artifact-pool-helpers.js.map +1 -0
- package/daemon/dist/domain/policies/artifact-pool-ready.d.ts +3 -0
- package/daemon/dist/domain/policies/artifact-pool-ready.d.ts.map +1 -0
- package/daemon/dist/domain/policies/artifact-pool-ready.js +41 -0
- package/daemon/dist/domain/policies/artifact-pool-ready.js.map +1 -0
- package/daemon/dist/domain/policies/edge-artifact-required.d.ts +3 -0
- package/daemon/dist/domain/policies/edge-artifact-required.d.ts.map +1 -0
- package/daemon/dist/domain/policies/edge-artifact-required.js +90 -0
- package/daemon/dist/domain/policies/edge-artifact-required.js.map +1 -0
- package/daemon/dist/domain/policies/periodic-reminder.d.ts +3 -0
- package/daemon/dist/domain/policies/periodic-reminder.d.ts.map +1 -0
- package/daemon/dist/domain/policies/periodic-reminder.js +30 -0
- package/daemon/dist/domain/policies/periodic-reminder.js.map +1 -0
- package/daemon/dist/domain/policies/types.d.ts +51 -0
- package/daemon/dist/domain/policies/types.d.ts.map +1 -0
- package/daemon/dist/domain/policies/types.js +9 -0
- package/daemon/dist/domain/policies/types.js.map +1 -0
- package/daemon/dist/domain/policies/workflow-keepalive.d.ts +7 -0
- package/daemon/dist/domain/policies/workflow-keepalive.d.ts.map +1 -0
- package/daemon/dist/domain/policies/workflow-keepalive.js +123 -0
- package/daemon/dist/domain/policies/workflow-keepalive.js.map +1 -0
- package/daemon/dist/domain/project-classifier.d.ts +75 -0
- package/daemon/dist/domain/project-classifier.d.ts.map +1 -0
- package/daemon/dist/domain/project-classifier.js +132 -0
- package/daemon/dist/domain/project-classifier.js.map +1 -0
- package/daemon/dist/domain/projection-planner.d.ts +1 -0
- package/daemon/dist/domain/projection-planner.d.ts.map +1 -1
- package/daemon/dist/domain/projection-planner.js +3 -0
- package/daemon/dist/domain/projection-planner.js.map +1 -1
- package/daemon/dist/domain/ps-projection.d.ts +31 -0
- package/daemon/dist/domain/ps-projection.d.ts.map +1 -1
- package/daemon/dist/domain/ps-projection.js +38 -0
- package/daemon/dist/domain/ps-projection.js.map +1 -1
- package/daemon/dist/domain/queue-repository.d.ts +322 -0
- package/daemon/dist/domain/queue-repository.d.ts.map +1 -0
- package/daemon/dist/domain/queue-repository.js +686 -0
- package/daemon/dist/domain/queue-repository.js.map +1 -0
- package/daemon/dist/domain/queue-transition-log.d.ts +38 -0
- package/daemon/dist/domain/queue-transition-log.d.ts.map +1 -0
- package/daemon/dist/domain/queue-transition-log.js +52 -0
- package/daemon/dist/domain/queue-transition-log.js.map +1 -0
- package/daemon/dist/domain/restore-check-service.d.ts +203 -0
- package/daemon/dist/domain/restore-check-service.d.ts.map +1 -0
- package/daemon/dist/domain/restore-check-service.js +1047 -0
- package/daemon/dist/domain/restore-check-service.js.map +1 -0
- package/daemon/dist/domain/restore-orchestrator.d.ts +49 -3
- package/daemon/dist/domain/restore-orchestrator.d.ts.map +1 -1
- package/daemon/dist/domain/restore-orchestrator.js +460 -62
- package/daemon/dist/domain/restore-orchestrator.js.map +1 -1
- package/daemon/dist/domain/rig-expansion-service.d.ts.map +1 -1
- package/daemon/dist/domain/rig-expansion-service.js +13 -0
- package/daemon/dist/domain/rig-expansion-service.js.map +1 -1
- package/daemon/dist/domain/rig-repository.d.ts +17 -1
- package/daemon/dist/domain/rig-repository.d.ts.map +1 -1
- package/daemon/dist/domain/rig-repository.js +63 -5
- package/daemon/dist/domain/rig-repository.js.map +1 -1
- package/daemon/dist/domain/rigspec-codec.d.ts.map +1 -1
- package/daemon/dist/domain/rigspec-codec.js +13 -0
- package/daemon/dist/domain/rigspec-codec.js.map +1 -1
- package/daemon/dist/domain/rigspec-exporter.d.ts.map +1 -1
- package/daemon/dist/domain/rigspec-exporter.js +2 -0
- package/daemon/dist/domain/rigspec-exporter.js.map +1 -1
- package/daemon/dist/domain/rigspec-instantiator.d.ts.map +1 -1
- package/daemon/dist/domain/rigspec-instantiator.js +61 -1
- package/daemon/dist/domain/rigspec-instantiator.js.map +1 -1
- package/daemon/dist/domain/rigspec-schema.d.ts.map +1 -1
- package/daemon/dist/domain/rigspec-schema.js +196 -0
- package/daemon/dist/domain/rigspec-schema.js.map +1 -1
- package/daemon/dist/domain/runtime-adapter.d.ts +27 -2
- package/daemon/dist/domain/runtime-adapter.d.ts.map +1 -1
- package/daemon/dist/domain/runtime-adapter.js +5 -0
- package/daemon/dist/domain/runtime-adapter.js.map +1 -1
- package/daemon/dist/domain/seat-handover-planner.d.ts +84 -0
- package/daemon/dist/domain/seat-handover-planner.d.ts.map +1 -0
- package/daemon/dist/domain/seat-handover-planner.js +188 -0
- package/daemon/dist/domain/seat-handover-planner.js.map +1 -0
- package/daemon/dist/domain/seat-handover-service.d.ts +104 -0
- package/daemon/dist/domain/seat-handover-service.d.ts.map +1 -0
- package/daemon/dist/domain/seat-handover-service.js +343 -0
- package/daemon/dist/domain/seat-handover-service.js.map +1 -0
- package/daemon/dist/domain/seat-status-service.d.ts +50 -0
- package/daemon/dist/domain/seat-status-service.d.ts.map +1 -0
- package/daemon/dist/domain/seat-status-service.js +66 -0
- package/daemon/dist/domain/seat-status-service.js.map +1 -0
- package/daemon/dist/domain/session-source-rebuild-resolver.d.ts +53 -0
- package/daemon/dist/domain/session-source-rebuild-resolver.d.ts.map +1 -0
- package/daemon/dist/domain/session-source-rebuild-resolver.js +59 -0
- package/daemon/dist/domain/session-source-rebuild-resolver.js.map +1 -0
- package/daemon/dist/domain/session-transport.d.ts +30 -0
- package/daemon/dist/domain/session-transport.d.ts.map +1 -1
- package/daemon/dist/domain/session-transport.js +322 -12
- package/daemon/dist/domain/session-transport.js.map +1 -1
- package/daemon/dist/domain/snapshot-repository.d.ts +18 -0
- package/daemon/dist/domain/snapshot-repository.d.ts.map +1 -1
- package/daemon/dist/domain/snapshot-repository.js +77 -0
- package/daemon/dist/domain/snapshot-repository.js.map +1 -1
- package/daemon/dist/domain/startup-orchestrator.d.ts +22 -3
- package/daemon/dist/domain/startup-orchestrator.d.ts.map +1 -1
- package/daemon/dist/domain/startup-orchestrator.js +31 -5
- package/daemon/dist/domain/startup-orchestrator.js.map +1 -1
- package/daemon/dist/domain/stream-store.d.ts +56 -0
- package/daemon/dist/domain/stream-store.d.ts.map +1 -0
- package/daemon/dist/domain/stream-store.js +108 -0
- package/daemon/dist/domain/stream-store.js.map +1 -0
- package/daemon/dist/domain/transcript-redaction.d.ts +13 -0
- package/daemon/dist/domain/transcript-redaction.d.ts.map +1 -0
- package/daemon/dist/domain/transcript-redaction.js +34 -0
- package/daemon/dist/domain/transcript-redaction.js.map +1 -0
- package/daemon/dist/domain/transcript-store.d.ts +15 -0
- package/daemon/dist/domain/transcript-store.d.ts.map +1 -1
- package/daemon/dist/domain/transcript-store.js +57 -1
- package/daemon/dist/domain/transcript-store.js.map +1 -1
- package/daemon/dist/domain/types.d.ts +316 -3
- package/daemon/dist/domain/types.d.ts.map +1 -1
- package/daemon/dist/domain/view-event-bridge.d.ts +12 -0
- package/daemon/dist/domain/view-event-bridge.d.ts.map +1 -0
- package/daemon/dist/domain/view-event-bridge.js +92 -0
- package/daemon/dist/domain/view-event-bridge.js.map +1 -0
- package/daemon/dist/domain/view-projector.d.ts +83 -0
- package/daemon/dist/domain/view-projector.d.ts.map +1 -0
- package/daemon/dist/domain/view-projector.js +296 -0
- package/daemon/dist/domain/view-projector.js.map +1 -0
- package/daemon/dist/domain/watchdog-history-log.d.ts +49 -0
- package/daemon/dist/domain/watchdog-history-log.d.ts.map +1 -0
- package/daemon/dist/domain/watchdog-history-log.js +67 -0
- package/daemon/dist/domain/watchdog-history-log.js.map +1 -0
- package/daemon/dist/domain/watchdog-jobs-repository.d.ts +81 -0
- package/daemon/dist/domain/watchdog-jobs-repository.d.ts.map +1 -0
- package/daemon/dist/domain/watchdog-jobs-repository.js +164 -0
- package/daemon/dist/domain/watchdog-jobs-repository.js.map +1 -0
- package/daemon/dist/domain/watchdog-policy-engine.d.ts +92 -0
- package/daemon/dist/domain/watchdog-policy-engine.d.ts.map +1 -0
- package/daemon/dist/domain/watchdog-policy-engine.js +442 -0
- package/daemon/dist/domain/watchdog-policy-engine.js.map +1 -0
- package/daemon/dist/domain/watchdog-scheduler.d.ts +76 -0
- package/daemon/dist/domain/watchdog-scheduler.d.ts.map +1 -0
- package/daemon/dist/domain/watchdog-scheduler.js +112 -0
- package/daemon/dist/domain/watchdog-scheduler.js.map +1 -0
- package/daemon/dist/domain/workflow-instance-store.d.ts +46 -0
- package/daemon/dist/domain/workflow-instance-store.d.ts.map +1 -0
- package/daemon/dist/domain/workflow-instance-store.js +116 -0
- package/daemon/dist/domain/workflow-instance-store.js.map +1 -0
- package/daemon/dist/domain/workflow-projector.d.ts +64 -0
- package/daemon/dist/domain/workflow-projector.d.ts.map +1 -0
- package/daemon/dist/domain/workflow-projector.js +424 -0
- package/daemon/dist/domain/workflow-projector.js.map +1 -0
- package/daemon/dist/domain/workflow-runtime.d.ts +63 -0
- package/daemon/dist/domain/workflow-runtime.d.ts.map +1 -0
- package/daemon/dist/domain/workflow-runtime.js +150 -0
- package/daemon/dist/domain/workflow-runtime.js.map +1 -0
- package/daemon/dist/domain/workflow-spec-cache.d.ts +35 -0
- package/daemon/dist/domain/workflow-spec-cache.d.ts.map +1 -0
- package/daemon/dist/domain/workflow-spec-cache.js +171 -0
- package/daemon/dist/domain/workflow-spec-cache.js.map +1 -0
- package/daemon/dist/domain/workflow-step-trail-log.d.ts +27 -0
- package/daemon/dist/domain/workflow-step-trail-log.d.ts.map +1 -0
- package/daemon/dist/domain/workflow-step-trail-log.js +73 -0
- package/daemon/dist/domain/workflow-step-trail-log.js.map +1 -0
- package/daemon/dist/domain/workflow-types.d.ts +108 -0
- package/daemon/dist/domain/workflow-types.d.ts.map +1 -0
- package/daemon/dist/domain/workflow-types.js +11 -0
- package/daemon/dist/domain/workflow-types.js.map +1 -0
- package/daemon/dist/domain/workflow-validator.d.ts +31 -0
- package/daemon/dist/domain/workflow-validator.d.ts.map +1 -0
- package/daemon/dist/domain/workflow-validator.js +115 -0
- package/daemon/dist/domain/workflow-validator.js.map +1 -0
- package/daemon/dist/index.d.ts.map +1 -1
- package/daemon/dist/index.js +21 -2
- package/daemon/dist/index.js.map +1 -1
- package/daemon/dist/routes/activity.d.ts +3 -0
- package/daemon/dist/routes/activity.d.ts.map +1 -0
- package/daemon/dist/routes/activity.js +47 -0
- package/daemon/dist/routes/activity.js.map +1 -0
- package/daemon/dist/routes/projects.d.ts +12 -0
- package/daemon/dist/routes/projects.d.ts.map +1 -0
- package/daemon/dist/routes/projects.js +178 -0
- package/daemon/dist/routes/projects.js.map +1 -0
- package/daemon/dist/routes/queue.d.ts +10 -0
- package/daemon/dist/routes/queue.d.ts.map +1 -0
- package/daemon/dist/routes/queue.js +374 -0
- package/daemon/dist/routes/queue.js.map +1 -0
- package/daemon/dist/routes/restore-check.d.ts +3 -0
- package/daemon/dist/routes/restore-check.d.ts.map +1 -0
- package/daemon/dist/routes/restore-check.js +200 -0
- package/daemon/dist/routes/restore-check.js.map +1 -0
- package/daemon/dist/routes/rigs.d.ts.map +1 -1
- package/daemon/dist/routes/rigs.js +60 -4
- package/daemon/dist/routes/rigs.js.map +1 -1
- package/daemon/dist/routes/seat.d.ts +3 -0
- package/daemon/dist/routes/seat.d.ts.map +1 -0
- package/daemon/dist/routes/seat.js +69 -0
- package/daemon/dist/routes/seat.js.map +1 -0
- package/daemon/dist/routes/sessions.d.ts.map +1 -1
- package/daemon/dist/routes/sessions.js +25 -4
- package/daemon/dist/routes/sessions.js.map +1 -1
- package/daemon/dist/routes/snapshots.js +66 -29
- package/daemon/dist/routes/snapshots.js.map +1 -1
- package/daemon/dist/routes/stream.d.ts +9 -0
- package/daemon/dist/routes/stream.d.ts.map +1 -0
- package/daemon/dist/routes/stream.js +119 -0
- package/daemon/dist/routes/stream.js.map +1 -0
- package/daemon/dist/routes/transcripts.d.ts.map +1 -1
- package/daemon/dist/routes/transcripts.js +38 -0
- package/daemon/dist/routes/transcripts.js.map +1 -1
- package/daemon/dist/routes/transport.d.ts.map +1 -1
- package/daemon/dist/routes/transport.js +21 -0
- package/daemon/dist/routes/transport.js.map +1 -1
- package/daemon/dist/routes/up.js +24 -3
- package/daemon/dist/routes/up.js.map +1 -1
- package/daemon/dist/routes/views.d.ts +13 -0
- package/daemon/dist/routes/views.d.ts.map +1 -0
- package/daemon/dist/routes/views.js +120 -0
- package/daemon/dist/routes/views.js.map +1 -0
- package/daemon/dist/routes/watchdog.d.ts +18 -0
- package/daemon/dist/routes/watchdog.d.ts.map +1 -0
- package/daemon/dist/routes/watchdog.js +148 -0
- package/daemon/dist/routes/watchdog.js.map +1 -0
- package/daemon/dist/routes/workflow.d.ts +20 -0
- package/daemon/dist/routes/workflow.d.ts.map +1 -0
- package/daemon/dist/routes/workflow.js +184 -0
- package/daemon/dist/routes/workflow.js.map +1 -0
- package/daemon/dist/server.d.ts +30 -0
- package/daemon/dist/server.d.ts.map +1 -1
- package/daemon/dist/server.js +33 -0
- package/daemon/dist/server.js.map +1 -1
- package/daemon/dist/startup.d.ts.map +1 -1
- package/daemon/dist/startup.js +202 -8
- package/daemon/dist/startup.js.map +1 -1
- package/daemon/docs/reference/agent-spec.md +12 -5
- package/daemon/docs/reference/agent-startup-guide.md +9 -9
- package/daemon/specs/agents/apps/vault-specialist/agent.yaml +1 -1
- package/daemon/specs/agents/design/product-designer/agent.yaml +1 -1
- package/daemon/specs/agents/development/implementer/agent.yaml +1 -1
- package/daemon/specs/agents/development/qa/agent.yaml +1 -1
- package/daemon/specs/agents/orchestration/orchestrator/agent.yaml +1 -1
- package/daemon/specs/agents/product-management/pm/agent.yaml +4 -0
- package/daemon/specs/agents/research/analyst/agent.yaml +1 -1
- package/daemon/specs/agents/research/synthesizer/agent.yaml +1 -1
- package/daemon/specs/agents/review/independent-reviewer/agent.yaml +1 -1
- package/daemon/specs/agents/shared/agent.yaml +17 -0
- package/daemon/specs/agents/shared/runtime/claude-mcp.fragment.json +12 -0
- package/daemon/specs/agents/shared/runtime/claude-settings.fragment.json +16 -0
- package/daemon/specs/agents/shared/runtime/codex-config.fragment.toml +5 -0
- package/daemon/specs/agents/shared/skills/claude-compact-in-place/SKILL.md +100 -0
- package/daemon/specs/agents/shared/skills/core/openrig-operator/SKILL.md +110 -0
- package/daemon/specs/agents/shared/skills/core/openrig-user/SKILL.md +44 -1
- package/daemon/specs/agents/shared/skills/mental-model-ha/SKILL.md +3 -0
- package/daemon/specs/agents/shared/skills/pods/orchestration-team/SKILL.md +3 -0
- package/daemon/specs/agents/shared/skills/rig-architect/SKILL.md +11 -1
- package/dist/bin-wrapper.js +0 -0
- package/dist/commands/capture.d.ts +7 -1
- package/dist/commands/capture.d.ts.map +1 -1
- package/dist/commands/capture.js +59 -1
- package/dist/commands/capture.js.map +1 -1
- package/dist/commands/compact-plan.d.ts +9 -0
- package/dist/commands/compact-plan.d.ts.map +1 -0
- package/dist/commands/compact-plan.js +354 -0
- package/dist/commands/compact-plan.js.map +1 -0
- package/dist/commands/context.d.ts +9 -0
- package/dist/commands/context.d.ts.map +1 -0
- package/dist/commands/context.js +220 -0
- package/dist/commands/context.js.map +1 -0
- package/dist/commands/expand.d.ts.map +1 -1
- package/dist/commands/expand.js +15 -4
- package/dist/commands/expand.js.map +1 -1
- package/dist/commands/heartbeat.d.ts +99 -0
- package/dist/commands/heartbeat.d.ts.map +1 -0
- package/dist/commands/heartbeat.js +393 -0
- package/dist/commands/heartbeat.js.map +1 -0
- package/dist/commands/project.d.ts +14 -0
- package/dist/commands/project.d.ts.map +1 -0
- package/dist/commands/project.js +157 -0
- package/dist/commands/project.js.map +1 -0
- package/dist/commands/ps.d.ts +20 -3
- package/dist/commands/ps.d.ts.map +1 -1
- package/dist/commands/ps.js +455 -33
- package/dist/commands/ps.js.map +1 -1
- package/dist/commands/queue.d.ts +16 -0
- package/dist/commands/queue.d.ts.map +1 -0
- package/dist/commands/queue.js +401 -0
- package/dist/commands/queue.js.map +1 -0
- package/dist/commands/restore-check.d.ts +9 -0
- package/dist/commands/restore-check.d.ts.map +1 -0
- package/dist/commands/restore-check.js +234 -0
- package/dist/commands/restore-check.js.map +1 -0
- package/dist/commands/restore-packet.d.ts +9 -0
- package/dist/commands/restore-packet.d.ts.map +1 -0
- package/dist/commands/restore-packet.js +383 -0
- package/dist/commands/restore-packet.js.map +1 -0
- package/dist/commands/restore.d.ts.map +1 -1
- package/dist/commands/restore.js +44 -1
- package/dist/commands/restore.js.map +1 -1
- package/dist/commands/seat.d.ts +5 -0
- package/dist/commands/seat.d.ts.map +1 -0
- package/dist/commands/seat.js +170 -0
- package/dist/commands/seat.js.map +1 -0
- package/dist/commands/send.d.ts +12 -1
- package/dist/commands/send.d.ts.map +1 -1
- package/dist/commands/send.js +93 -5
- package/dist/commands/send.js.map +1 -1
- package/dist/commands/setup.js +3 -3
- package/dist/commands/setup.js.map +1 -1
- package/dist/commands/specs.d.ts.map +1 -1
- package/dist/commands/specs.js +99 -16
- package/dist/commands/specs.js.map +1 -1
- package/dist/commands/stream.d.ts +12 -0
- package/dist/commands/stream.d.ts.map +1 -0
- package/dist/commands/stream.js +111 -0
- package/dist/commands/stream.js.map +1 -0
- package/dist/commands/up.d.ts.map +1 -1
- package/dist/commands/up.js +63 -3
- package/dist/commands/up.js.map +1 -1
- package/dist/commands/view.d.ts +12 -0
- package/dist/commands/view.d.ts.map +1 -0
- package/dist/commands/view.js +82 -0
- package/dist/commands/view.js.map +1 -0
- package/dist/commands/watchdog.d.ts +15 -0
- package/dist/commands/watchdog.d.ts.map +1 -0
- package/dist/commands/watchdog.js +120 -0
- package/dist/commands/watchdog.js.map +1 -0
- package/dist/commands/whoami.d.ts +8 -1
- package/dist/commands/whoami.d.ts.map +1 -1
- package/dist/commands/whoami.js +60 -1
- package/dist/commands/whoami.js.map +1 -1
- package/dist/commands/workflow.d.ts +17 -0
- package/dist/commands/workflow.d.ts.map +1 -0
- package/dist/commands/workflow.js +138 -0
- package/dist/commands/workflow.js.map +1 -0
- package/dist/cross-host-cli-helpers.d.ts +12 -0
- package/dist/cross-host-cli-helpers.d.ts.map +1 -0
- package/dist/cross-host-cli-helpers.js +48 -0
- package/dist/cross-host-cli-helpers.js.map +1 -0
- package/dist/cross-host-executor.d.ts +84 -0
- package/dist/cross-host-executor.d.ts.map +1 -0
- package/dist/cross-host-executor.js +138 -0
- package/dist/cross-host-executor.js.map +1 -0
- package/dist/host-registry.d.ts +50 -0
- package/dist/host-registry.d.ts.map +1 -0
- package/dist/host-registry.js +116 -0
- package/dist/host-registry.js.map +1 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +24 -0
- package/dist/index.js.map +1 -1
- package/dist/mcp-server.d.ts.map +1 -1
- package/dist/mcp-server.js +22 -2
- package/dist/mcp-server.js.map +1 -1
- package/dist/restore-packet/claude-transcript-parser.d.ts +12 -0
- package/dist/restore-packet/claude-transcript-parser.d.ts.map +1 -0
- package/dist/restore-packet/claude-transcript-parser.js +221 -0
- package/dist/restore-packet/claude-transcript-parser.js.map +1 -0
- package/dist/restore-packet/codex-jsonl-parser.d.ts +11 -0
- package/dist/restore-packet/codex-jsonl-parser.d.ts.map +1 -0
- package/dist/restore-packet/codex-jsonl-parser.js +159 -0
- package/dist/restore-packet/codex-jsonl-parser.js.map +1 -0
- package/dist/restore-packet/omitted-records.d.ts +60 -0
- package/dist/restore-packet/omitted-records.d.ts.map +1 -0
- package/dist/restore-packet/omitted-records.js +116 -0
- package/dist/restore-packet/omitted-records.js.map +1 -0
- package/dist/restore-packet/packet-writer.d.ts +59 -0
- package/dist/restore-packet/packet-writer.d.ts.map +1 -0
- package/dist/restore-packet/packet-writer.js +224 -0
- package/dist/restore-packet/packet-writer.js.map +1 -0
- package/dist/restore-packet/redaction.d.ts +30 -0
- package/dist/restore-packet/redaction.d.ts.map +1 -0
- package/dist/restore-packet/redaction.js +71 -0
- package/dist/restore-packet/redaction.js.map +1 -0
- package/dist/restore-packet/runtime-detect.d.ts +19 -0
- package/dist/restore-packet/runtime-detect.d.ts.map +1 -0
- package/dist/restore-packet/runtime-detect.js +81 -0
- package/dist/restore-packet/runtime-detect.js.map +1 -0
- package/dist/restore-packet/schema-validator.d.ts +13 -0
- package/dist/restore-packet/schema-validator.d.ts.map +1 -0
- package/dist/restore-packet/schema-validator.js +245 -0
- package/dist/restore-packet/schema-validator.js.map +1 -0
- package/dist/restore-packet/types.d.ts +76 -0
- package/dist/restore-packet/types.d.ts.map +1 -0
- package/dist/restore-packet/types.js +15 -0
- package/dist/restore-packet/types.js.map +1 -0
- package/dist/schemas/restore-summary.schema.json +98 -0
- package/package.json +10 -3
- package/scripts/check-abi.mjs +123 -0
- package/ui/dist/assets/{index-DlMH-REm.css → index-Dec25siz.css} +1 -1
- package/ui/dist/assets/{index-Ccd-jwRN.js → index-GNYaWmBj.js} +2 -2
- package/ui/dist/index.html +2 -2
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import type Database from "better-sqlite3";
|
|
2
|
+
import type { RigRepository } from "./rig-repository.js";
|
|
3
|
+
import type { SessionRegistry } from "./session-registry.js";
|
|
4
|
+
import type { DiscoveryRepository } from "./discovery-repository.js";
|
|
5
|
+
import type { EventBus } from "./event-bus.js";
|
|
6
|
+
import type { TmuxAdapter } from "../adapters/tmux.js";
|
|
7
|
+
import { type SeatStatusResult } from "./seat-status-service.js";
|
|
8
|
+
import { type SeatHandoverPlan, type SeatHandoverSource } from "./seat-handover-planner.js";
|
|
9
|
+
export interface SeatHandoverMutationResult {
|
|
10
|
+
ok: true;
|
|
11
|
+
dryRun: false;
|
|
12
|
+
mutated: true;
|
|
13
|
+
continuityTransferred: false;
|
|
14
|
+
seat: SeatHandoverPlan["seat"];
|
|
15
|
+
source: SeatHandoverSource & {
|
|
16
|
+
mode: "discovered";
|
|
17
|
+
ref: string;
|
|
18
|
+
};
|
|
19
|
+
reason: string;
|
|
20
|
+
operator: string | null;
|
|
21
|
+
previousOccupant: string;
|
|
22
|
+
currentOccupant: string;
|
|
23
|
+
previousSessionIdsSuperseded: string[];
|
|
24
|
+
newSessionId: string;
|
|
25
|
+
discovery: {
|
|
26
|
+
id: string;
|
|
27
|
+
status: "claimed";
|
|
28
|
+
tmuxSession: string;
|
|
29
|
+
tmuxPane: string | null;
|
|
30
|
+
};
|
|
31
|
+
currentStatus: SeatHandoverPlan["currentStatus"];
|
|
32
|
+
handoverAt: string;
|
|
33
|
+
eventSeq: number;
|
|
34
|
+
sideEffects: {
|
|
35
|
+
departingSessionKilled: false;
|
|
36
|
+
startupContextDelivered: false;
|
|
37
|
+
provenanceRecordWritten: false;
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
export type SeatHandoverResult = {
|
|
41
|
+
ok: true;
|
|
42
|
+
plan: SeatHandoverPlan;
|
|
43
|
+
} | {
|
|
44
|
+
ok: true;
|
|
45
|
+
result: SeatHandoverMutationResult;
|
|
46
|
+
} | {
|
|
47
|
+
ok: false;
|
|
48
|
+
code: "missing_reason" | "invalid_source" | "successor_creation_not_implemented";
|
|
49
|
+
message: string;
|
|
50
|
+
guidance: string;
|
|
51
|
+
} | {
|
|
52
|
+
ok: false;
|
|
53
|
+
code: "current_occupant_required" | "discovered_not_active" | "successor_tmux_absent" | "successor_already_managed" | "successor_is_current" | "runtime_mismatch";
|
|
54
|
+
message: string;
|
|
55
|
+
guidance: string;
|
|
56
|
+
} | {
|
|
57
|
+
ok: false;
|
|
58
|
+
code: "discovered_not_found";
|
|
59
|
+
message: string;
|
|
60
|
+
guidance: string;
|
|
61
|
+
} | {
|
|
62
|
+
ok: false;
|
|
63
|
+
code: "tmux_probe_failed" | "handover_commit_failed";
|
|
64
|
+
message: string;
|
|
65
|
+
guidance: string;
|
|
66
|
+
} | Extract<SeatStatusResult, {
|
|
67
|
+
ok: false;
|
|
68
|
+
}>;
|
|
69
|
+
interface SeatHandoverServiceDeps {
|
|
70
|
+
db: Database.Database;
|
|
71
|
+
rigRepo: RigRepository;
|
|
72
|
+
sessionRegistry: SessionRegistry;
|
|
73
|
+
discoveryRepo: DiscoveryRepository;
|
|
74
|
+
eventBus: EventBus;
|
|
75
|
+
tmuxAdapter: TmuxAdapter;
|
|
76
|
+
now?: () => Date;
|
|
77
|
+
}
|
|
78
|
+
export declare class SeatHandoverService {
|
|
79
|
+
private db;
|
|
80
|
+
private statusService;
|
|
81
|
+
private planner;
|
|
82
|
+
private rigRepo;
|
|
83
|
+
private sessionRegistry;
|
|
84
|
+
private discoveryRepo;
|
|
85
|
+
private eventBus;
|
|
86
|
+
private tmuxAdapter;
|
|
87
|
+
private now;
|
|
88
|
+
constructor(deps: SeatHandoverServiceDeps);
|
|
89
|
+
handover(input: {
|
|
90
|
+
seatRef: string;
|
|
91
|
+
reason?: string | null;
|
|
92
|
+
source?: string | null;
|
|
93
|
+
operator?: string | null;
|
|
94
|
+
dryRun?: boolean;
|
|
95
|
+
}): Promise<SeatHandoverResult>;
|
|
96
|
+
private checkRuntimeMismatch;
|
|
97
|
+
private lookupNode;
|
|
98
|
+
private lookupLatestSession;
|
|
99
|
+
private lookupManagedOwner;
|
|
100
|
+
private commit;
|
|
101
|
+
private upsertBinding;
|
|
102
|
+
}
|
|
103
|
+
export {};
|
|
104
|
+
//# sourceMappingURL=seat-handover-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seat-handover-service.d.ts","sourceRoot":"","sources":["../../src/domain/seat-handover-service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAE3C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAsC,KAAK,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACrG,OAAO,EAA4C,KAAK,gBAAgB,EAAE,KAAK,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAGtI,MAAM,WAAW,0BAA0B;IACzC,EAAE,EAAE,IAAI,CAAC;IACT,MAAM,EAAE,KAAK,CAAC;IACd,OAAO,EAAE,IAAI,CAAC;IACd,qBAAqB,EAAE,KAAK,CAAC;IAC7B,IAAI,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAC/B,MAAM,EAAE,kBAAkB,GAAG;QAAE,IAAI,EAAE,YAAY,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IACjE,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,4BAA4B,EAAE,MAAM,EAAE,CAAC;IACvC,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE;QACT,EAAE,EAAE,MAAM,CAAC;QACX,MAAM,EAAE,SAAS,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;KACzB,CAAC;IACF,aAAa,EAAE,gBAAgB,CAAC,eAAe,CAAC,CAAC;IACjD,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE;QACX,sBAAsB,EAAE,KAAK,CAAC;QAC9B,uBAAuB,EAAE,KAAK,CAAC;QAC/B,uBAAuB,EAAE,KAAK,CAAC;KAChC,CAAC;CACH;AAED,MAAM,MAAM,kBAAkB,GAC1B;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,gBAAgB,CAAA;CAAE,GACpC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,0BAA0B,CAAA;CAAE,GAChD;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,gBAAgB,GAAG,gBAAgB,GAAG,oCAAoC,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAClI;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,2BAA2B,GAAG,uBAAuB,GAAG,uBAAuB,GAAG,2BAA2B,GAAG,sBAAsB,GAAG,kBAAkB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GACnN;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,sBAAsB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAC9E;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,mBAAmB,GAAG,wBAAwB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GACtG,OAAO,CAAC,gBAAgB,EAAE;IAAE,EAAE,EAAE,KAAK,CAAA;CAAE,CAAC,CAAC;AAmB7C,UAAU,uBAAuB;IAC/B,EAAE,EAAE,QAAQ,CAAC,QAAQ,CAAC;IACtB,OAAO,EAAE,aAAa,CAAC;IACvB,eAAe,EAAE,eAAe,CAAC;IACjC,aAAa,EAAE,mBAAmB,CAAC;IACnC,QAAQ,EAAE,QAAQ,CAAC;IACnB,WAAW,EAAE,WAAW,CAAC;IACzB,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;CAClB;AAED,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,EAAE,CAAoB;IAC9B,OAAO,CAAC,aAAa,CAAoB;IACzC,OAAO,CAAC,OAAO,CAAsB;IACrC,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,aAAa,CAAsB;IAC3C,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,GAAG,CAAa;gBAEZ,IAAI,EAAE,uBAAuB;IAgBnC,QAAQ,CAAC,KAAK,EAAE;QACpB,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACvB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACvB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACzB,MAAM,CAAC,EAAE,OAAO,CAAC;KAClB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAmJ/B,OAAO,CAAC,oBAAoB;IAY5B,OAAO,CAAC,UAAU;IAMlB,OAAO,CAAC,mBAAmB;IAM3B,OAAO,CAAC,kBAAkB;IAqB1B,OAAO,CAAC,MAAM;IAmId,OAAO,CAAC,aAAa;CAqBtB"}
|
|
@@ -0,0 +1,343 @@
|
|
|
1
|
+
import { ulid } from "ulid";
|
|
2
|
+
import { SeatStatusService } from "./seat-status-service.js";
|
|
3
|
+
import { SeatHandoverPlanner, parseHandoverSource } from "./seat-handover-planner.js";
|
|
4
|
+
export class SeatHandoverService {
|
|
5
|
+
db;
|
|
6
|
+
statusService;
|
|
7
|
+
planner;
|
|
8
|
+
rigRepo;
|
|
9
|
+
sessionRegistry;
|
|
10
|
+
discoveryRepo;
|
|
11
|
+
eventBus;
|
|
12
|
+
tmuxAdapter;
|
|
13
|
+
now;
|
|
14
|
+
constructor(deps) {
|
|
15
|
+
if (deps.db !== deps.rigRepo.db)
|
|
16
|
+
throw new Error("SeatHandoverService: rigRepo must share the same db handle");
|
|
17
|
+
if (deps.db !== deps.sessionRegistry.db)
|
|
18
|
+
throw new Error("SeatHandoverService: sessionRegistry must share the same db handle");
|
|
19
|
+
if (deps.db !== deps.discoveryRepo.db)
|
|
20
|
+
throw new Error("SeatHandoverService: discoveryRepo must share the same db handle");
|
|
21
|
+
if (deps.db !== deps.eventBus.db)
|
|
22
|
+
throw new Error("SeatHandoverService: eventBus must share the same db handle");
|
|
23
|
+
this.db = deps.db;
|
|
24
|
+
this.rigRepo = deps.rigRepo;
|
|
25
|
+
this.sessionRegistry = deps.sessionRegistry;
|
|
26
|
+
this.discoveryRepo = deps.discoveryRepo;
|
|
27
|
+
this.eventBus = deps.eventBus;
|
|
28
|
+
this.tmuxAdapter = deps.tmuxAdapter;
|
|
29
|
+
this.now = deps.now ?? (() => new Date());
|
|
30
|
+
this.statusService = new SeatStatusService({ rigRepo: deps.rigRepo });
|
|
31
|
+
this.planner = new SeatHandoverPlanner({ rigRepo: deps.rigRepo });
|
|
32
|
+
}
|
|
33
|
+
async handover(input) {
|
|
34
|
+
if (input.dryRun) {
|
|
35
|
+
const planResult = this.planner.plan({ ...input, dryRun: true });
|
|
36
|
+
if (planResult.ok) {
|
|
37
|
+
return { ok: true, plan: planResult.plan };
|
|
38
|
+
}
|
|
39
|
+
switch (planResult.code) {
|
|
40
|
+
case "mutation_disabled":
|
|
41
|
+
return {
|
|
42
|
+
ok: false,
|
|
43
|
+
code: "successor_creation_not_implemented",
|
|
44
|
+
message: "Seat handover mutation is not available through dry-run planning.",
|
|
45
|
+
guidance: "Re-run with --dry-run to inspect the two-phase handover plan without changing topology.",
|
|
46
|
+
};
|
|
47
|
+
case "missing_reason":
|
|
48
|
+
case "invalid_source":
|
|
49
|
+
return {
|
|
50
|
+
ok: false,
|
|
51
|
+
code: planResult.code,
|
|
52
|
+
message: planResult.message,
|
|
53
|
+
guidance: planResult.guidance,
|
|
54
|
+
};
|
|
55
|
+
case "seat_ref_required":
|
|
56
|
+
case "seat_not_found":
|
|
57
|
+
case "seat_ambiguous":
|
|
58
|
+
return planResult;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
const reason = input.reason?.trim() ?? "";
|
|
62
|
+
if (!reason) {
|
|
63
|
+
return {
|
|
64
|
+
ok: false,
|
|
65
|
+
code: "missing_reason",
|
|
66
|
+
message: "Missing required option: --reason <reason>",
|
|
67
|
+
guidance: "Provide an explicit handover reason, for example: --reason context-wall",
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
const parsed = parseHandoverSource(input.source);
|
|
71
|
+
if (!parsed.ok) {
|
|
72
|
+
return parsed;
|
|
73
|
+
}
|
|
74
|
+
if (parsed.source.mode !== "discovered" || !parsed.source.ref) {
|
|
75
|
+
return {
|
|
76
|
+
ok: false,
|
|
77
|
+
code: "successor_creation_not_implemented",
|
|
78
|
+
message: `Seat handover mutation for source "${parsed.source.raw}" is not implemented in this slice.`,
|
|
79
|
+
guidance: "For live mutation in this slice, provide an already-created successor with --source discovered:<id>.",
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
const statusResult = this.statusService.getStatus(input.seatRef);
|
|
83
|
+
if (!statusResult.ok) {
|
|
84
|
+
return statusResult;
|
|
85
|
+
}
|
|
86
|
+
if (!statusResult.status.current_occupant) {
|
|
87
|
+
return {
|
|
88
|
+
ok: false,
|
|
89
|
+
code: "current_occupant_required",
|
|
90
|
+
message: `Seat "${input.seatRef}" has no current occupant to hand over from.`,
|
|
91
|
+
guidance: "Start or claim the current seat occupant first, then retry handover.",
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
const node = this.lookupNode(statusResult.status);
|
|
95
|
+
const latestSession = this.lookupLatestSession(node.id);
|
|
96
|
+
if (!latestSession) {
|
|
97
|
+
return {
|
|
98
|
+
ok: false,
|
|
99
|
+
code: "current_occupant_required",
|
|
100
|
+
message: `Seat "${input.seatRef}" has no session row to supersede.`,
|
|
101
|
+
guidance: "Inspect the seat with: rig seat status <seat>",
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
const discovered = this.discoveryRepo.getDiscoveredSession(parsed.source.ref);
|
|
105
|
+
if (!discovered) {
|
|
106
|
+
return {
|
|
107
|
+
ok: false,
|
|
108
|
+
code: "discovered_not_found",
|
|
109
|
+
message: `Discovery record "${parsed.source.ref}" not found.`,
|
|
110
|
+
guidance: "Run discovery and list active discovered sessions before retrying.",
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
if (discovered.status !== "active") {
|
|
114
|
+
return {
|
|
115
|
+
ok: false,
|
|
116
|
+
code: "discovered_not_active",
|
|
117
|
+
message: `Discovery record "${discovered.id}" is ${discovered.status}, not active.`,
|
|
118
|
+
guidance: "Use an active, unclaimed discovered successor session.",
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
if (discovered.tmuxSession === latestSession.session_name) {
|
|
122
|
+
return {
|
|
123
|
+
ok: false,
|
|
124
|
+
code: "successor_is_current",
|
|
125
|
+
message: "Discovered successor is already the current occupant for this seat.",
|
|
126
|
+
guidance: "Use a distinct successor session.",
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
const runtimeMismatch = this.checkRuntimeMismatch(node.runtime, discovered.runtimeHint);
|
|
130
|
+
if (runtimeMismatch)
|
|
131
|
+
return runtimeMismatch;
|
|
132
|
+
const managedOwner = this.lookupManagedOwner(discovered.tmuxSession, node.id);
|
|
133
|
+
if (managedOwner) {
|
|
134
|
+
return {
|
|
135
|
+
ok: false,
|
|
136
|
+
code: "successor_already_managed",
|
|
137
|
+
message: `Successor tmux session "${discovered.tmuxSession}" is already managed by ${managedOwner.logical_id}@${managedOwner.rig_name}.`,
|
|
138
|
+
guidance: "Use an unclaimed discovered successor session.",
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
let tmuxPresent;
|
|
142
|
+
try {
|
|
143
|
+
tmuxPresent = await this.tmuxAdapter.hasSession(discovered.tmuxSession);
|
|
144
|
+
}
|
|
145
|
+
catch (err) {
|
|
146
|
+
return {
|
|
147
|
+
ok: false,
|
|
148
|
+
code: "tmux_probe_failed",
|
|
149
|
+
message: `Could not verify successor tmux session "${discovered.tmuxSession}": ${err instanceof Error ? err.message : String(err)}`,
|
|
150
|
+
guidance: "Retry after tmux health is known; probe failures are not treated as absence.",
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
if (!tmuxPresent) {
|
|
154
|
+
return {
|
|
155
|
+
ok: false,
|
|
156
|
+
code: "successor_tmux_absent",
|
|
157
|
+
message: `Successor tmux session "${discovered.tmuxSession}" is not present.`,
|
|
158
|
+
guidance: "Run discovery again or provide a live discovered successor session.",
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
return this.commit({
|
|
162
|
+
seatRef: input.seatRef,
|
|
163
|
+
status: statusResult.status,
|
|
164
|
+
node,
|
|
165
|
+
latestSession,
|
|
166
|
+
source: parsed.source,
|
|
167
|
+
reason,
|
|
168
|
+
operator: input.operator?.trim() || null,
|
|
169
|
+
discovered,
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
checkRuntimeMismatch(nodeRuntime, discoveredRuntime) {
|
|
173
|
+
if (!nodeRuntime || discoveredRuntime === "unknown" || nodeRuntime === discoveredRuntime) {
|
|
174
|
+
return null;
|
|
175
|
+
}
|
|
176
|
+
return {
|
|
177
|
+
ok: false,
|
|
178
|
+
code: "runtime_mismatch",
|
|
179
|
+
message: `Seat expects runtime "${nodeRuntime}", but discovered successor is "${discoveredRuntime}".`,
|
|
180
|
+
guidance: "Use a discovered successor with a matching runtime hint.",
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
lookupNode(status) {
|
|
184
|
+
return this.db.prepare("SELECT id, runtime FROM nodes WHERE rig_id = ? AND logical_id = ?").get(status.rig_id, status.logical_id);
|
|
185
|
+
}
|
|
186
|
+
lookupLatestSession(nodeId) {
|
|
187
|
+
return this.db.prepare("SELECT id, session_name, status FROM sessions WHERE node_id = ? ORDER BY id DESC LIMIT 1").get(nodeId) ?? null;
|
|
188
|
+
}
|
|
189
|
+
lookupManagedOwner(tmuxSession, targetNodeId) {
|
|
190
|
+
const bindingOwner = this.db.prepare(`
|
|
191
|
+
SELECT n.id AS node_id, n.logical_id, r.name AS rig_name
|
|
192
|
+
FROM bindings b
|
|
193
|
+
JOIN nodes n ON n.id = b.node_id
|
|
194
|
+
JOIN rigs r ON r.id = n.rig_id
|
|
195
|
+
WHERE b.tmux_session = ? AND n.id != ?
|
|
196
|
+
LIMIT 1
|
|
197
|
+
`).get(tmuxSession, targetNodeId);
|
|
198
|
+
if (bindingOwner)
|
|
199
|
+
return bindingOwner;
|
|
200
|
+
return this.db.prepare(`
|
|
201
|
+
SELECT n.id AS node_id, n.logical_id, r.name AS rig_name
|
|
202
|
+
FROM sessions s
|
|
203
|
+
JOIN nodes n ON n.id = s.node_id
|
|
204
|
+
JOIN rigs r ON r.id = n.rig_id
|
|
205
|
+
WHERE s.session_name = ? AND n.id != ? AND s.status NOT IN ('superseded', 'detached', 'exited')
|
|
206
|
+
LIMIT 1
|
|
207
|
+
`).get(tmuxSession, targetNodeId) ?? null;
|
|
208
|
+
}
|
|
209
|
+
commit(input) {
|
|
210
|
+
const handoverAt = this.now().toISOString();
|
|
211
|
+
const tx = this.db.transaction(() => {
|
|
212
|
+
const rows = this.db.prepare("SELECT id FROM sessions WHERE node_id = ? AND status NOT IN ('superseded', 'detached', 'exited') ORDER BY id").all(input.node.id);
|
|
213
|
+
const previousSessionIdsSuperseded = rows.map((row) => row.id);
|
|
214
|
+
if (previousSessionIdsSuperseded.length > 0) {
|
|
215
|
+
const placeholders = previousSessionIdsSuperseded.map(() => "?").join(",");
|
|
216
|
+
this.db.prepare(`UPDATE sessions SET status = 'superseded', last_seen_at = datetime('now') WHERE id IN (${placeholders})`).run(...previousSessionIdsSuperseded);
|
|
217
|
+
}
|
|
218
|
+
this.upsertBinding(input.node.id, {
|
|
219
|
+
tmuxSession: input.discovered.tmuxSession,
|
|
220
|
+
tmuxWindow: input.discovered.tmuxWindow,
|
|
221
|
+
tmuxPane: input.discovered.tmuxPane,
|
|
222
|
+
});
|
|
223
|
+
const newSession = this.sessionRegistry.registerClaimedSession(input.node.id, input.discovered.tmuxSession);
|
|
224
|
+
this.discoveryRepo.markClaimed(input.discovered.id, input.node.id);
|
|
225
|
+
this.db.prepare(`
|
|
226
|
+
UPDATE nodes SET
|
|
227
|
+
occupant_lifecycle = 'active',
|
|
228
|
+
continuity_outcome = NULL,
|
|
229
|
+
handover_result = 'complete',
|
|
230
|
+
previous_occupant = ?,
|
|
231
|
+
handover_at = ?
|
|
232
|
+
WHERE id = ?
|
|
233
|
+
`).run(input.latestSession.session_name, handoverAt, input.node.id);
|
|
234
|
+
const event = this.eventBus.persistWithinTransaction({
|
|
235
|
+
type: "seat.handover_completed",
|
|
236
|
+
rigId: input.status.rig_id,
|
|
237
|
+
nodeId: input.node.id,
|
|
238
|
+
logicalId: input.status.logical_id,
|
|
239
|
+
previousOccupant: input.latestSession.session_name,
|
|
240
|
+
currentOccupant: input.discovered.tmuxSession,
|
|
241
|
+
source: input.source.raw,
|
|
242
|
+
reason: input.reason,
|
|
243
|
+
operator: input.operator,
|
|
244
|
+
});
|
|
245
|
+
return { newSessionId: newSession.id, previousSessionIdsSuperseded, event };
|
|
246
|
+
});
|
|
247
|
+
let committed;
|
|
248
|
+
try {
|
|
249
|
+
committed = tx();
|
|
250
|
+
}
|
|
251
|
+
catch (err) {
|
|
252
|
+
return {
|
|
253
|
+
ok: false,
|
|
254
|
+
code: "handover_commit_failed",
|
|
255
|
+
message: `Seat handover commit failed: ${err instanceof Error ? err.message : String(err)}`,
|
|
256
|
+
guidance: "Inspect daemon logs and retry after the seat state is consistent.",
|
|
257
|
+
};
|
|
258
|
+
}
|
|
259
|
+
this.eventBus.notifySubscribers(committed.event);
|
|
260
|
+
const postStatus = this.statusService.getStatus(`${input.status.logical_id}@${input.status.rig_name}`);
|
|
261
|
+
const currentStatus = postStatus.ok
|
|
262
|
+
? {
|
|
263
|
+
sessionStatus: postStatus.status.session_status,
|
|
264
|
+
startupStatus: postStatus.status.startup_status,
|
|
265
|
+
occupantLifecycle: postStatus.status.occupant_lifecycle,
|
|
266
|
+
continuityOutcome: postStatus.status.continuity_outcome,
|
|
267
|
+
handoverResult: postStatus.status.handover_result,
|
|
268
|
+
previousOccupant: postStatus.status.previous_occupant,
|
|
269
|
+
handoverAt: postStatus.status.handover_at,
|
|
270
|
+
restoreOutcome: postStatus.status.restore_outcome,
|
|
271
|
+
}
|
|
272
|
+
: {
|
|
273
|
+
sessionStatus: "running",
|
|
274
|
+
startupStatus: "ready",
|
|
275
|
+
occupantLifecycle: "active",
|
|
276
|
+
continuityOutcome: null,
|
|
277
|
+
handoverResult: "complete",
|
|
278
|
+
previousOccupant: input.latestSession.session_name,
|
|
279
|
+
handoverAt,
|
|
280
|
+
restoreOutcome: input.status.restore_outcome,
|
|
281
|
+
};
|
|
282
|
+
return {
|
|
283
|
+
ok: true,
|
|
284
|
+
result: {
|
|
285
|
+
ok: true,
|
|
286
|
+
dryRun: false,
|
|
287
|
+
mutated: true,
|
|
288
|
+
continuityTransferred: false,
|
|
289
|
+
seat: {
|
|
290
|
+
ref: input.seatRef,
|
|
291
|
+
rigId: input.status.rig_id,
|
|
292
|
+
rigName: input.status.rig_name,
|
|
293
|
+
logicalId: input.status.logical_id,
|
|
294
|
+
podId: input.status.pod_id,
|
|
295
|
+
podNamespace: input.status.pod_namespace,
|
|
296
|
+
runtime: input.status.runtime,
|
|
297
|
+
},
|
|
298
|
+
source: input.source,
|
|
299
|
+
reason: input.reason,
|
|
300
|
+
operator: input.operator,
|
|
301
|
+
previousOccupant: input.latestSession.session_name,
|
|
302
|
+
currentOccupant: input.discovered.tmuxSession,
|
|
303
|
+
previousSessionIdsSuperseded: committed.previousSessionIdsSuperseded,
|
|
304
|
+
newSessionId: committed.newSessionId,
|
|
305
|
+
discovery: {
|
|
306
|
+
id: input.discovered.id,
|
|
307
|
+
status: "claimed",
|
|
308
|
+
tmuxSession: input.discovered.tmuxSession,
|
|
309
|
+
tmuxPane: input.discovered.tmuxPane,
|
|
310
|
+
},
|
|
311
|
+
currentStatus,
|
|
312
|
+
handoverAt,
|
|
313
|
+
eventSeq: committed.event.seq,
|
|
314
|
+
sideEffects: {
|
|
315
|
+
departingSessionKilled: false,
|
|
316
|
+
startupContextDelivered: false,
|
|
317
|
+
provenanceRecordWritten: false,
|
|
318
|
+
},
|
|
319
|
+
},
|
|
320
|
+
};
|
|
321
|
+
}
|
|
322
|
+
upsertBinding(nodeId, fields) {
|
|
323
|
+
const existing = this.db.prepare("SELECT id FROM bindings WHERE node_id = ?").get(nodeId);
|
|
324
|
+
if (existing) {
|
|
325
|
+
this.db.prepare(`
|
|
326
|
+
UPDATE bindings SET
|
|
327
|
+
attachment_type = 'tmux',
|
|
328
|
+
tmux_session = ?,
|
|
329
|
+
tmux_window = ?,
|
|
330
|
+
tmux_pane = ?,
|
|
331
|
+
external_session_name = NULL,
|
|
332
|
+
updated_at = datetime('now')
|
|
333
|
+
WHERE node_id = ?
|
|
334
|
+
`).run(fields.tmuxSession, fields.tmuxWindow, fields.tmuxPane, nodeId);
|
|
335
|
+
return;
|
|
336
|
+
}
|
|
337
|
+
this.db.prepare(`
|
|
338
|
+
INSERT INTO bindings (id, node_id, attachment_type, tmux_session, tmux_window, tmux_pane)
|
|
339
|
+
VALUES (?, ?, 'tmux', ?, ?, ?)
|
|
340
|
+
`).run(ulid(), nodeId, fields.tmuxSession, fields.tmuxWindow, fields.tmuxPane);
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
//# sourceMappingURL=seat-handover-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seat-handover-service.js","sourceRoot":"","sources":["../../src/domain/seat-handover-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import type { RigRepository } from "./rig-repository.js";
|
|
2
|
+
import type { NodeInventoryEntry } from "./types.js";
|
|
3
|
+
export interface SeatStatus {
|
|
4
|
+
seat_ref: string;
|
|
5
|
+
rig_id: string;
|
|
6
|
+
rig_name: string;
|
|
7
|
+
logical_id: string;
|
|
8
|
+
pod_id: string | null;
|
|
9
|
+
pod_namespace: string | null;
|
|
10
|
+
runtime: string | null;
|
|
11
|
+
current_occupant: string | null;
|
|
12
|
+
session_status: string | null;
|
|
13
|
+
startup_status: NodeInventoryEntry["startupStatus"];
|
|
14
|
+
occupant_lifecycle: NodeInventoryEntry["occupantLifecycle"];
|
|
15
|
+
continuity_outcome: NodeInventoryEntry["continuityOutcome"];
|
|
16
|
+
handover_result: NodeInventoryEntry["handoverResult"];
|
|
17
|
+
previous_occupant: string | null;
|
|
18
|
+
handover_at: string | null;
|
|
19
|
+
restore_outcome: NodeInventoryEntry["restoreOutcome"];
|
|
20
|
+
}
|
|
21
|
+
export type SeatStatusResult = {
|
|
22
|
+
ok: true;
|
|
23
|
+
status: SeatStatus;
|
|
24
|
+
} | {
|
|
25
|
+
ok: false;
|
|
26
|
+
code: "seat_ref_required" | "seat_not_found";
|
|
27
|
+
message: string;
|
|
28
|
+
guidance: string;
|
|
29
|
+
} | {
|
|
30
|
+
ok: false;
|
|
31
|
+
code: "seat_ambiguous";
|
|
32
|
+
message: string;
|
|
33
|
+
guidance: string;
|
|
34
|
+
matches: Array<{
|
|
35
|
+
rig_name: string;
|
|
36
|
+
logical_id: string;
|
|
37
|
+
current_occupant: string | null;
|
|
38
|
+
}>;
|
|
39
|
+
};
|
|
40
|
+
export declare class SeatStatusService {
|
|
41
|
+
private rigRepo;
|
|
42
|
+
constructor(deps: {
|
|
43
|
+
rigRepo: RigRepository;
|
|
44
|
+
});
|
|
45
|
+
getStatus(seatRef: string): SeatStatusResult;
|
|
46
|
+
private findMatches;
|
|
47
|
+
private entriesForRig;
|
|
48
|
+
private projectStatus;
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=seat-status-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seat-status-service.d.ts","sourceRoot":"","sources":["../../src/domain/seat-status-service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAIrD,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,cAAc,EAAE,kBAAkB,CAAC,eAAe,CAAC,CAAC;IACpD,kBAAkB,EAAE,kBAAkB,CAAC,mBAAmB,CAAC,CAAC;IAC5D,kBAAkB,EAAE,kBAAkB,CAAC,mBAAmB,CAAC,CAAC;IAC5D,eAAe,EAAE,kBAAkB,CAAC,gBAAgB,CAAC,CAAC;IACtD,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,eAAe,EAAE,kBAAkB,CAAC,gBAAgB,CAAC,CAAC;CACvD;AAED,MAAM,MAAM,gBAAgB,GACxB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,UAAU,CAAA;CAAE,GAChC;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,mBAAmB,GAAG,gBAAgB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAC9F;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,gBAAgB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC;AAMxK,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,OAAO,CAAgB;gBAEnB,IAAI,EAAE;QAAE,OAAO,EAAE,aAAa,CAAA;KAAE;IAI5C,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,gBAAgB;IA2B5C,OAAO,CAAC,WAAW;IAkBnB,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,aAAa;CAoBtB"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { getNodeInventory } from "./node-inventory.js";
|
|
2
|
+
const SEAT_LOOKUP_GUIDANCE = "List seats with: rig ps --nodes";
|
|
3
|
+
export class SeatStatusService {
|
|
4
|
+
rigRepo;
|
|
5
|
+
constructor(deps) {
|
|
6
|
+
this.rigRepo = deps.rigRepo;
|
|
7
|
+
}
|
|
8
|
+
getStatus(seatRef) {
|
|
9
|
+
const ref = seatRef.trim();
|
|
10
|
+
if (!ref) {
|
|
11
|
+
return { ok: false, code: "seat_ref_required", message: "seat reference is required", guidance: SEAT_LOOKUP_GUIDANCE };
|
|
12
|
+
}
|
|
13
|
+
const matches = this.findMatches(ref);
|
|
14
|
+
if (matches.length === 0) {
|
|
15
|
+
return { ok: false, code: "seat_not_found", message: `Seat "${ref}" not found`, guidance: SEAT_LOOKUP_GUIDANCE };
|
|
16
|
+
}
|
|
17
|
+
if (matches.length > 1) {
|
|
18
|
+
return {
|
|
19
|
+
ok: false,
|
|
20
|
+
code: "seat_ambiguous",
|
|
21
|
+
message: `Seat "${ref}" matched multiple nodes`,
|
|
22
|
+
guidance: SEAT_LOOKUP_GUIDANCE,
|
|
23
|
+
matches: matches.map(({ entry }) => ({
|
|
24
|
+
rig_name: entry.rigName,
|
|
25
|
+
logical_id: entry.logicalId,
|
|
26
|
+
current_occupant: entry.canonicalSessionName,
|
|
27
|
+
})),
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
return { ok: true, status: this.projectStatus(ref, matches[0].entry) };
|
|
31
|
+
}
|
|
32
|
+
findMatches(ref) {
|
|
33
|
+
const atIndex = ref.lastIndexOf("@");
|
|
34
|
+
if (atIndex > 0 && atIndex < ref.length - 1) {
|
|
35
|
+
const localRef = ref.slice(0, atIndex);
|
|
36
|
+
const rigName = ref.slice(atIndex + 1);
|
|
37
|
+
const rigs = this.rigRepo.findRigsByName(rigName);
|
|
38
|
+
return rigs.flatMap((rig) => this.entriesForRig(rig.id).filter((entry) => entry.canonicalSessionName === ref || entry.logicalId === localRef).map((entry) => ({ entry })));
|
|
39
|
+
}
|
|
40
|
+
return this.rigRepo.listRigs().flatMap((rig) => this.entriesForRig(rig.id).filter((entry) => entry.canonicalSessionName === ref || entry.logicalId === ref).map((entry) => ({ entry })));
|
|
41
|
+
}
|
|
42
|
+
entriesForRig(rigId) {
|
|
43
|
+
return getNodeInventory(this.rigRepo.db, rigId);
|
|
44
|
+
}
|
|
45
|
+
projectStatus(seatRef, entry) {
|
|
46
|
+
return {
|
|
47
|
+
seat_ref: seatRef,
|
|
48
|
+
rig_id: entry.rigId,
|
|
49
|
+
rig_name: entry.rigName,
|
|
50
|
+
logical_id: entry.logicalId,
|
|
51
|
+
pod_id: entry.podId,
|
|
52
|
+
pod_namespace: entry.podNamespace ?? null,
|
|
53
|
+
runtime: entry.runtime,
|
|
54
|
+
current_occupant: entry.canonicalSessionName,
|
|
55
|
+
session_status: entry.sessionStatus,
|
|
56
|
+
startup_status: entry.startupStatus,
|
|
57
|
+
occupant_lifecycle: entry.occupantLifecycle,
|
|
58
|
+
continuity_outcome: entry.continuityOutcome,
|
|
59
|
+
handover_result: entry.handoverResult,
|
|
60
|
+
previous_occupant: entry.previousOccupant,
|
|
61
|
+
handover_at: entry.handoverAt,
|
|
62
|
+
restore_outcome: entry.restoreOutcome,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=seat-status-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seat-status-service.js","sourceRoot":"","sources":["../../src/domain/seat-status-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import type { ResolvedStartupFile } from "./runtime-adapter.js";
|
|
2
|
+
import type { SessionSourceRebuildSpec } from "./types.js";
|
|
3
|
+
/**
|
|
4
|
+
* Result of resolving a `session_source.mode: rebuild` artifact set into the
|
|
5
|
+
* `ResolvedStartupFile[]` shape that `adapter.deliverStartup` already
|
|
6
|
+
* accepts. Records gaps (paths the operator declared but that don't exist
|
|
7
|
+
* on disk at resolve time) without failing — the operator's other declared
|
|
8
|
+
* artifacts may still carry enough context. The launch only fails if NONE
|
|
9
|
+
* of the declared paths resolved.
|
|
10
|
+
*/
|
|
11
|
+
export interface RebuildArtifactsResult {
|
|
12
|
+
ok: true;
|
|
13
|
+
files: ResolvedStartupFile[];
|
|
14
|
+
/** Paths from `ref.value` that did not resolve to an existing file. */
|
|
15
|
+
gaps: string[];
|
|
16
|
+
}
|
|
17
|
+
export type RebuildArtifactsOutcome = RebuildArtifactsResult | {
|
|
18
|
+
ok: false;
|
|
19
|
+
error: string;
|
|
20
|
+
gaps: string[];
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Test/host injection seam: lets unit tests assert path resolution without
|
|
24
|
+
* touching the real filesystem.
|
|
25
|
+
*/
|
|
26
|
+
export type ExistsFn = (path: string) => boolean;
|
|
27
|
+
/**
|
|
28
|
+
* Resolve operator-declared rebuild artifacts into the orchestrator's
|
|
29
|
+
* existing `ResolvedStartupFile[]` shape, preserving the operator's
|
|
30
|
+
* trust-precedence ordering.
|
|
31
|
+
*
|
|
32
|
+
* Identity-honesty notes:
|
|
33
|
+
* - This function does NOT execute, parse, or evaluate artifact contents.
|
|
34
|
+
* It just records that a path exists and hands the orchestrator the
|
|
35
|
+
* metadata it needs to deliver the bytes via the standard `deliverStartup`
|
|
36
|
+
* seam (which itself only reads + paste-injects via tmux for the
|
|
37
|
+
* `send_text` hint).
|
|
38
|
+
* - The artifacts are tagged `appliesOn: ["fresh_start"]` because rebuild
|
|
39
|
+
* IS a fresh launch from the runtime's perspective; the artifacts seed
|
|
40
|
+
* it with operator context, but the runtime conversation itself is new.
|
|
41
|
+
* `continuityOutcome: rebuilt` (set by the orchestrator) is the only
|
|
42
|
+
* signal that distinguishes this from a vanilla fresh launch.
|
|
43
|
+
*
|
|
44
|
+
* @param spec - the rebuild spec from the member; `ref.value` is the
|
|
45
|
+
* operator-declared list of artifact paths in trust-
|
|
46
|
+
* precedence order (highest-trust first).
|
|
47
|
+
* @param opts.exists - filesystem existence check; defaults to `existsSync`.
|
|
48
|
+
* Tests pass a stub.
|
|
49
|
+
*/
|
|
50
|
+
export declare function resolveRebuildArtifacts(spec: SessionSourceRebuildSpec, opts?: {
|
|
51
|
+
exists?: ExistsFn;
|
|
52
|
+
}): RebuildArtifactsOutcome;
|
|
53
|
+
//# sourceMappingURL=session-source-rebuild-resolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-source-rebuild-resolver.d.ts","sourceRoot":"","sources":["../../src/domain/session-source-rebuild-resolver.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAE3D;;;;;;;GAOG;AACH,MAAM,WAAW,sBAAsB;IACrC,EAAE,EAAE,IAAI,CAAC;IACT,KAAK,EAAE,mBAAmB,EAAE,CAAC;IAC7B,uEAAuE;IACvE,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,MAAM,MAAM,uBAAuB,GAC/B,sBAAsB,GACtB;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC;AAEjD;;;GAGG;AACH,MAAM,MAAM,QAAQ,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;AAEjD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,wBAAwB,EAC9B,IAAI,GAAE;IAAE,MAAM,CAAC,EAAE,QAAQ,CAAA;CAAO,GAC/B,uBAAuB,CAgCzB"}
|