@openrig/cli 0.4.3 → 0.4.6
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 +6 -0
- package/daemon/assets/plugins/openrig-core/skills/mission-slice-sop/SKILL.md +47 -21
- package/daemon/assets/plugins/openrig-core/skills/openrig-cmux/SKILL.md +86 -0
- package/daemon/assets/plugins/openrig-core/skills/openrig-herdr/SKILL.md +158 -0
- package/daemon/assets/plugins/openrig-core/skills/openrig-user/SKILL.md +742 -94
- package/daemon/dist/adapters/codex-runtime-adapter.d.ts.map +1 -1
- package/daemon/dist/adapters/codex-runtime-adapter.js +12 -8
- package/daemon/dist/adapters/codex-runtime-adapter.js.map +1 -1
- package/daemon/dist/adapters/pi-resume.d.ts +32 -0
- package/daemon/dist/adapters/pi-resume.d.ts.map +1 -0
- package/daemon/dist/adapters/pi-resume.js +125 -0
- package/daemon/dist/adapters/pi-resume.js.map +1 -0
- package/daemon/dist/adapters/pi-runner-protocol.d.ts +88 -0
- package/daemon/dist/adapters/pi-runner-protocol.d.ts.map +1 -0
- package/daemon/dist/adapters/pi-runner-protocol.js +153 -0
- package/daemon/dist/adapters/pi-runner-protocol.js.map +1 -0
- package/daemon/dist/adapters/pi-runner.d.ts +99 -0
- package/daemon/dist/adapters/pi-runner.d.ts.map +1 -0
- package/daemon/dist/adapters/pi-runner.js +519 -0
- package/daemon/dist/adapters/pi-runner.js.map +1 -0
- package/daemon/dist/adapters/pi-runtime-adapter.d.ts +61 -0
- package/daemon/dist/adapters/pi-runtime-adapter.d.ts.map +1 -0
- package/daemon/dist/adapters/pi-runtime-adapter.js +356 -0
- package/daemon/dist/adapters/pi-runtime-adapter.js.map +1 -0
- package/daemon/dist/adapters/tmux.d.ts +22 -1
- package/daemon/dist/adapters/tmux.d.ts.map +1 -1
- package/daemon/dist/adapters/tmux.js +40 -1
- package/daemon/dist/adapters/tmux.js.map +1 -1
- package/daemon/dist/build-info.d.ts +12 -0
- package/daemon/dist/build-info.d.ts.map +1 -0
- package/daemon/dist/build-info.js +11 -0
- package/daemon/dist/build-info.js.map +1 -0
- package/daemon/dist/builtins/workflow-specs/branched-remediation.yaml +31 -0
- package/daemon/dist/builtins/workflow-specs/factory-rsi.yaml +152 -0
- package/daemon/dist/builtins/workflow-specs/gated-release.yaml +26 -0
- package/daemon/dist/builtins/workflow-specs/linear-build.yaml +21 -0
- package/daemon/dist/db/migrations/048_queue_item_evidence_ref.d.ts +18 -0
- package/daemon/dist/db/migrations/048_queue_item_evidence_ref.d.ts.map +1 -0
- package/daemon/dist/db/migrations/048_queue_item_evidence_ref.js +22 -0
- package/daemon/dist/db/migrations/048_queue_item_evidence_ref.js.map +1 -0
- package/daemon/dist/db/migrations/049_workflow_instance_version.d.ts +20 -0
- package/daemon/dist/db/migrations/049_workflow_instance_version.d.ts.map +1 -0
- package/daemon/dist/db/migrations/049_workflow_instance_version.js +24 -0
- package/daemon/dist/db/migrations/049_workflow_instance_version.js.map +1 -0
- package/daemon/dist/db/migrations/050_workflow_spec_json.d.ts +22 -0
- package/daemon/dist/db/migrations/050_workflow_spec_json.d.ts.map +1 -0
- package/daemon/dist/db/migrations/050_workflow_spec_json.js +26 -0
- package/daemon/dist/db/migrations/050_workflow_spec_json.js.map +1 -0
- package/daemon/dist/db/migrations/051_workflow_resume.d.ts +22 -0
- package/daemon/dist/db/migrations/051_workflow_resume.d.ts.map +1 -0
- package/daemon/dist/db/migrations/051_workflow_resume.js +27 -0
- package/daemon/dist/db/migrations/051_workflow_resume.js.map +1 -0
- package/daemon/dist/db/migrations/052_workflow_instance_bound_rig.d.ts +26 -0
- package/daemon/dist/db/migrations/052_workflow_instance_bound_rig.d.ts.map +1 -0
- package/daemon/dist/db/migrations/052_workflow_instance_bound_rig.js +30 -0
- package/daemon/dist/db/migrations/052_workflow_instance_bound_rig.js.map +1 -0
- package/daemon/dist/db/migrations/053_sessions_node_id_index.d.ts +48 -0
- package/daemon/dist/db/migrations/053_sessions_node_id_index.d.ts.map +1 -0
- package/daemon/dist/db/migrations/053_sessions_node_id_index.js +53 -0
- package/daemon/dist/db/migrations/053_sessions_node_id_index.js.map +1 -0
- package/daemon/dist/db/migrations/054_queue_transitions_archive.d.ts +34 -0
- package/daemon/dist/db/migrations/054_queue_transitions_archive.d.ts.map +1 -0
- package/daemon/dist/db/migrations/054_queue_transitions_archive.js +49 -0
- package/daemon/dist/db/migrations/054_queue_transitions_archive.js.map +1 -0
- package/daemon/dist/domain/claim-service.d.ts +11 -0
- package/daemon/dist/domain/claim-service.d.ts.map +1 -1
- package/daemon/dist/domain/claim-service.js +3 -1
- package/daemon/dist/domain/claim-service.js.map +1 -1
- package/daemon/dist/domain/discovery-types.d.ts +1 -1
- package/daemon/dist/domain/discovery-types.d.ts.map +1 -1
- package/daemon/dist/domain/feed/attention-aggregator.d.ts +31 -0
- package/daemon/dist/domain/feed/attention-aggregator.d.ts.map +1 -0
- package/daemon/dist/domain/feed/attention-aggregator.js +119 -0
- package/daemon/dist/domain/feed/attention-aggregator.js.map +1 -0
- package/daemon/dist/domain/files/file-write-service.d.ts +11 -2
- package/daemon/dist/domain/files/file-write-service.d.ts.map +1 -1
- package/daemon/dist/domain/files/file-write-service.js +77 -0
- package/daemon/dist/domain/files/file-write-service.js.map +1 -1
- package/daemon/dist/domain/hosts/fanout-contract.d.ts +33 -0
- package/daemon/dist/domain/hosts/fanout-contract.d.ts.map +1 -0
- package/daemon/dist/domain/hosts/fanout-contract.js +23 -0
- package/daemon/dist/domain/hosts/fanout-contract.js.map +1 -0
- package/daemon/dist/domain/hosts/hosts-registry-reader.d.ts +50 -0
- package/daemon/dist/domain/hosts/hosts-registry-reader.d.ts.map +1 -0
- package/daemon/dist/domain/hosts/hosts-registry-reader.js +184 -0
- package/daemon/dist/domain/hosts/hosts-registry-reader.js.map +1 -0
- package/daemon/dist/domain/hosts/hosts-registry-writer.d.ts +11 -0
- package/daemon/dist/domain/hosts/hosts-registry-writer.d.ts.map +1 -0
- package/daemon/dist/domain/hosts/hosts-registry-writer.js +54 -0
- package/daemon/dist/domain/hosts/hosts-registry-writer.js.map +1 -0
- package/daemon/dist/domain/hosts/read-through.d.ts +28 -0
- package/daemon/dist/domain/hosts/read-through.d.ts.map +1 -0
- package/daemon/dist/domain/hosts/read-through.js +139 -0
- package/daemon/dist/domain/hosts/read-through.js.map +1 -0
- package/daemon/dist/domain/hosts/remote-daemon-http.d.ts +56 -0
- package/daemon/dist/domain/hosts/remote-daemon-http.d.ts.map +1 -0
- package/daemon/dist/domain/hosts/remote-daemon-http.js +154 -0
- package/daemon/dist/domain/hosts/remote-daemon-http.js.map +1 -0
- package/daemon/dist/domain/human-route-enforcer.d.ts +71 -0
- package/daemon/dist/domain/human-route-enforcer.d.ts.map +1 -0
- package/daemon/dist/domain/human-route-enforcer.js +80 -0
- package/daemon/dist/domain/human-route-enforcer.js.map +1 -0
- package/daemon/dist/domain/mission-control/audit-browse.d.ts +8 -0
- package/daemon/dist/domain/mission-control/audit-browse.d.ts.map +1 -1
- package/daemon/dist/domain/mission-control/audit-browse.js +19 -0
- package/daemon/dist/domain/mission-control/audit-browse.js.map +1 -1
- package/daemon/dist/domain/mission-control/mission-control-action-log.d.ts +1 -1
- package/daemon/dist/domain/mission-control/mission-control-action-log.d.ts.map +1 -1
- package/daemon/dist/domain/mission-control/mission-control-action-log.js +4 -0
- package/daemon/dist/domain/mission-control/mission-control-action-log.js.map +1 -1
- package/daemon/dist/domain/mission-control/mission-control-fleet-cli-capability.js +1 -1
- package/daemon/dist/domain/mission-control/mission-control-fleet-cli-capability.js.map +1 -1
- package/daemon/dist/domain/mission-control/mission-control-read-layer.js +1 -1
- package/daemon/dist/domain/mission-control/mission-control-read-layer.js.map +1 -1
- package/daemon/dist/domain/mission-control/mission-control-write-contract.d.ts +28 -0
- package/daemon/dist/domain/mission-control/mission-control-write-contract.d.ts.map +1 -1
- package/daemon/dist/domain/mission-control/mission-control-write-contract.js +125 -0
- package/daemon/dist/domain/mission-control/mission-control-write-contract.js.map +1 -1
- package/daemon/dist/domain/node-inventory.d.ts +18 -0
- package/daemon/dist/domain/node-inventory.d.ts.map +1 -1
- package/daemon/dist/domain/node-inventory.js +206 -95
- package/daemon/dist/domain/node-inventory.js.map +1 -1
- package/daemon/dist/domain/node-launcher.d.ts +11 -0
- package/daemon/dist/domain/node-launcher.d.ts.map +1 -1
- package/daemon/dist/domain/node-launcher.js +10 -0
- package/daemon/dist/domain/node-launcher.js.map +1 -1
- package/daemon/dist/domain/policies/workflow-keepalive.d.ts +7 -0
- package/daemon/dist/domain/policies/workflow-keepalive.d.ts.map +1 -1
- package/daemon/dist/domain/policies/workflow-keepalive.js +93 -13
- package/daemon/dist/domain/policies/workflow-keepalive.js.map +1 -1
- package/daemon/dist/domain/ps-projection.d.ts +28 -1
- package/daemon/dist/domain/ps-projection.d.ts.map +1 -1
- package/daemon/dist/domain/ps-projection.js +76 -26
- package/daemon/dist/domain/ps-projection.js.map +1 -1
- package/daemon/dist/domain/queue-repository.d.ts +130 -1
- package/daemon/dist/domain/queue-repository.d.ts.map +1 -1
- package/daemon/dist/domain/queue-repository.js +304 -11
- package/daemon/dist/domain/queue-repository.js.map +1 -1
- package/daemon/dist/domain/queue-retention.d.ts +130 -0
- package/daemon/dist/domain/queue-retention.d.ts.map +1 -0
- package/daemon/dist/domain/queue-retention.js +224 -0
- package/daemon/dist/domain/queue-retention.js.map +1 -0
- package/daemon/dist/domain/restore-orchestrator.d.ts +5 -0
- package/daemon/dist/domain/restore-orchestrator.d.ts.map +1 -1
- package/daemon/dist/domain/restore-orchestrator.js +29 -2
- package/daemon/dist/domain/restore-orchestrator.js.map +1 -1
- package/daemon/dist/domain/resume-token-capture.d.ts +13 -0
- package/daemon/dist/domain/resume-token-capture.d.ts.map +1 -1
- package/daemon/dist/domain/resume-token-capture.js +14 -1
- package/daemon/dist/domain/resume-token-capture.js.map +1 -1
- package/daemon/dist/domain/resume-token-validation.d.ts +1 -1
- package/daemon/dist/domain/resume-token-validation.d.ts.map +1 -1
- package/daemon/dist/domain/resume-token-validation.js +58 -10
- package/daemon/dist/domain/resume-token-validation.js.map +1 -1
- package/daemon/dist/domain/review/brief-spine.d.ts +19 -0
- package/daemon/dist/domain/review/brief-spine.d.ts.map +1 -0
- package/daemon/dist/domain/review/brief-spine.js +86 -0
- package/daemon/dist/domain/review/brief-spine.js.map +1 -0
- package/daemon/dist/domain/review/compose.d.ts +277 -0
- package/daemon/dist/domain/review/compose.d.ts.map +1 -0
- package/daemon/dist/domain/review/compose.js +862 -0
- package/daemon/dist/domain/review/compose.js.map +1 -0
- package/daemon/dist/domain/review/fleet-compose.d.ts +52 -0
- package/daemon/dist/domain/review/fleet-compose.d.ts.map +1 -0
- package/daemon/dist/domain/review/fleet-compose.js +294 -0
- package/daemon/dist/domain/review/fleet-compose.js.map +1 -0
- package/daemon/dist/domain/review/freeze.d.ts +31 -0
- package/daemon/dist/domain/review/freeze.d.ts.map +1 -0
- package/daemon/dist/domain/review/freeze.js +257 -0
- package/daemon/dist/domain/review/freeze.js.map +1 -0
- package/daemon/dist/domain/review/gather.d.ts +115 -0
- package/daemon/dist/domain/review/gather.d.ts.map +1 -0
- package/daemon/dist/domain/review/gather.js +812 -0
- package/daemon/dist/domain/review/gather.js.map +1 -0
- package/daemon/dist/domain/review/types.d.ts +361 -0
- package/daemon/dist/domain/review/types.d.ts.map +1 -0
- package/daemon/dist/domain/review/types.js +35 -0
- package/daemon/dist/domain/review/types.js.map +1 -0
- package/daemon/dist/domain/rig-expansion-service.d.ts.map +1 -1
- package/daemon/dist/domain/rig-expansion-service.js +3 -0
- package/daemon/dist/domain/rig-expansion-service.js.map +1 -1
- package/daemon/dist/domain/rig-repository.d.ts +7 -6
- package/daemon/dist/domain/rig-repository.d.ts.map +1 -1
- package/daemon/dist/domain/rig-repository.js +33 -11
- 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 +3 -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 +4 -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 +11 -0
- package/daemon/dist/domain/rigspec-instantiator.js.map +1 -1
- package/daemon/dist/domain/rigspec-preflight.d.ts +6 -0
- package/daemon/dist/domain/rigspec-preflight.d.ts.map +1 -1
- package/daemon/dist/domain/rigspec-preflight.js +26 -1
- package/daemon/dist/domain/rigspec-preflight.js.map +1 -1
- package/daemon/dist/domain/rigspec-schema.d.ts.map +1 -1
- package/daemon/dist/domain/rigspec-schema.js +20 -1
- package/daemon/dist/domain/rigspec-schema.js.map +1 -1
- package/daemon/dist/domain/runtime-verifier.d.ts +7 -1
- package/daemon/dist/domain/runtime-verifier.d.ts.map +1 -1
- package/daemon/dist/domain/runtime-verifier.js +39 -1
- package/daemon/dist/domain/runtime-verifier.js.map +1 -1
- package/daemon/dist/domain/scope/scope-approve.d.ts +64 -0
- package/daemon/dist/domain/scope/scope-approve.d.ts.map +1 -0
- package/daemon/dist/domain/scope/scope-approve.js +153 -0
- package/daemon/dist/domain/scope/scope-approve.js.map +1 -0
- package/daemon/dist/domain/scope/scope-audit.d.ts +9 -1
- package/daemon/dist/domain/scope/scope-audit.d.ts.map +1 -1
- package/daemon/dist/domain/scope/scope-audit.js +173 -1
- package/daemon/dist/domain/scope/scope-audit.js.map +1 -1
- package/daemon/dist/domain/seat-handover-service.d.ts +9 -0
- package/daemon/dist/domain/seat-handover-service.d.ts.map +1 -1
- package/daemon/dist/domain/seat-handover-service.js +2 -0
- package/daemon/dist/domain/seat-handover-service.js.map +1 -1
- package/daemon/dist/domain/seat-identity-store.d.ts +7 -0
- package/daemon/dist/domain/seat-identity-store.d.ts.map +1 -1
- package/daemon/dist/domain/seat-identity-store.js +27 -0
- package/daemon/dist/domain/seat-identity-store.js.map +1 -1
- package/daemon/dist/domain/seat-status-service.d.ts.map +1 -1
- package/daemon/dist/domain/seat-status-service.js +6 -4
- package/daemon/dist/domain/seat-status-service.js.map +1 -1
- package/daemon/dist/domain/session-name.d.ts +22 -0
- package/daemon/dist/domain/session-name.d.ts.map +1 -1
- package/daemon/dist/domain/session-name.js +29 -0
- package/daemon/dist/domain/session-name.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 +4 -5
- package/daemon/dist/domain/slices/slice-detail-projector.js.map +1 -1
- package/daemon/dist/domain/spec-library-workflow-scanner.d.ts +18 -2
- package/daemon/dist/domain/spec-library-workflow-scanner.d.ts.map +1 -1
- package/daemon/dist/domain/spec-library-workflow-scanner.js +23 -1
- package/daemon/dist/domain/spec-library-workflow-scanner.js.map +1 -1
- package/daemon/dist/domain/startup-proof.d.ts +10 -6
- package/daemon/dist/domain/startup-proof.d.ts.map +1 -1
- package/daemon/dist/domain/startup-proof.js +35 -7
- package/daemon/dist/domain/startup-proof.js.map +1 -1
- package/daemon/dist/domain/successor-session-launcher.d.ts +16 -0
- package/daemon/dist/domain/successor-session-launcher.d.ts.map +1 -1
- package/daemon/dist/domain/successor-session-launcher.js +13 -0
- package/daemon/dist/domain/successor-session-launcher.js.map +1 -1
- package/daemon/dist/domain/terminal/cmux-provider-adapter.d.ts +27 -0
- package/daemon/dist/domain/terminal/cmux-provider-adapter.d.ts.map +1 -0
- package/daemon/dist/domain/terminal/cmux-provider-adapter.js +67 -0
- package/daemon/dist/domain/terminal/cmux-provider-adapter.js.map +1 -0
- package/daemon/dist/domain/terminal/herdr-adapter.d.ts +77 -0
- package/daemon/dist/domain/terminal/herdr-adapter.d.ts.map +1 -0
- package/daemon/dist/domain/terminal/herdr-adapter.js +266 -0
- package/daemon/dist/domain/terminal/herdr-adapter.js.map +1 -0
- package/daemon/dist/domain/terminal/herdr-transport.d.ts +50 -0
- package/daemon/dist/domain/terminal/herdr-transport.d.ts.map +1 -0
- package/daemon/dist/domain/terminal/herdr-transport.js +145 -0
- package/daemon/dist/domain/terminal/herdr-transport.js.map +1 -0
- package/daemon/dist/domain/terminal/terminal-provider.d.ts +88 -0
- package/daemon/dist/domain/terminal/terminal-provider.d.ts.map +1 -0
- package/daemon/dist/domain/terminal/terminal-provider.js +17 -0
- package/daemon/dist/domain/terminal/terminal-provider.js.map +1 -0
- package/daemon/dist/domain/terminal/terminal-service.d.ts +60 -0
- package/daemon/dist/domain/terminal/terminal-service.d.ts.map +1 -0
- package/daemon/dist/domain/terminal/terminal-service.js +174 -0
- package/daemon/dist/domain/terminal/terminal-service.js.map +1 -0
- package/daemon/dist/domain/terminal/terminal-views-store.d.ts +77 -0
- package/daemon/dist/domain/terminal/terminal-views-store.d.ts.map +1 -0
- package/daemon/dist/domain/terminal/terminal-views-store.js +146 -0
- package/daemon/dist/domain/terminal/terminal-views-store.js.map +1 -0
- package/daemon/dist/domain/terminal/view-composer.d.ts +42 -0
- package/daemon/dist/domain/terminal/view-composer.d.ts.map +1 -0
- package/daemon/dist/domain/terminal/view-composer.js +137 -0
- package/daemon/dist/domain/terminal/view-composer.js.map +1 -0
- package/daemon/dist/domain/tmux-option-defaults.d.ts +89 -0
- package/daemon/dist/domain/tmux-option-defaults.d.ts.map +1 -0
- package/daemon/dist/domain/tmux-option-defaults.js +132 -0
- package/daemon/dist/domain/tmux-option-defaults.js.map +1 -0
- package/daemon/dist/domain/topology/multi-rig-launcher.d.ts +49 -0
- package/daemon/dist/domain/topology/multi-rig-launcher.d.ts.map +1 -0
- package/daemon/dist/domain/topology/multi-rig-launcher.js +132 -0
- package/daemon/dist/domain/topology/multi-rig-launcher.js.map +1 -0
- package/daemon/dist/domain/topology/remote-up-leaf.d.ts +29 -0
- package/daemon/dist/domain/topology/remote-up-leaf.d.ts.map +1 -0
- package/daemon/dist/domain/topology/remote-up-leaf.js +60 -0
- package/daemon/dist/domain/topology/remote-up-leaf.js.map +1 -0
- package/daemon/dist/domain/topology/topology-manifest.d.ts +34 -0
- package/daemon/dist/domain/topology/topology-manifest.d.ts.map +1 -0
- package/daemon/dist/domain/topology/topology-manifest.js +195 -0
- package/daemon/dist/domain/topology/topology-manifest.js.map +1 -0
- package/daemon/dist/domain/types.d.ts +39 -1
- package/daemon/dist/domain/types.d.ts.map +1 -1
- package/daemon/dist/domain/types.js.map +1 -1
- package/daemon/dist/domain/up-command-router.d.ts +1 -1
- package/daemon/dist/domain/up-command-router.d.ts.map +1 -1
- package/daemon/dist/domain/up-command-router.js +34 -2
- package/daemon/dist/domain/up-command-router.js.map +1 -1
- package/daemon/dist/domain/user-settings/settings-store.d.ts +18 -1
- package/daemon/dist/domain/user-settings/settings-store.d.ts.map +1 -1
- package/daemon/dist/domain/user-settings/settings-store.js +201 -0
- package/daemon/dist/domain/user-settings/settings-store.js.map +1 -1
- package/daemon/dist/domain/workflow/slice-workflow-projection.d.ts.map +1 -1
- package/daemon/dist/domain/workflow/slice-workflow-projection.js +6 -2
- package/daemon/dist/domain/workflow/slice-workflow-projection.js.map +1 -1
- package/daemon/dist/domain/workflow-boot-sweep.d.ts +28 -0
- package/daemon/dist/domain/workflow-boot-sweep.d.ts.map +1 -0
- package/daemon/dist/domain/workflow-boot-sweep.js +102 -0
- package/daemon/dist/domain/workflow-boot-sweep.js.map +1 -0
- package/daemon/dist/domain/workflow-deadline.d.ts +74 -0
- package/daemon/dist/domain/workflow-deadline.d.ts.map +1 -0
- package/daemon/dist/domain/workflow-deadline.js +165 -0
- package/daemon/dist/domain/workflow-deadline.js.map +1 -0
- package/daemon/dist/domain/workflow-exception-escalation.d.ts +33 -0
- package/daemon/dist/domain/workflow-exception-escalation.d.ts.map +1 -0
- package/daemon/dist/domain/workflow-exception-escalation.js +104 -0
- package/daemon/dist/domain/workflow-exception-escalation.js.map +1 -0
- package/daemon/dist/domain/workflow-exception-router.d.ts +33 -0
- package/daemon/dist/domain/workflow-exception-router.d.ts.map +1 -0
- package/daemon/dist/domain/workflow-exception-router.js +96 -0
- package/daemon/dist/domain/workflow-exception-router.js.map +1 -0
- package/daemon/dist/domain/workflow-exception.d.ts +90 -0
- package/daemon/dist/domain/workflow-exception.d.ts.map +1 -0
- package/daemon/dist/domain/workflow-exception.js +122 -0
- package/daemon/dist/domain/workflow-exception.js.map +1 -0
- package/daemon/dist/domain/workflow-frontier-guard.d.ts +24 -0
- package/daemon/dist/domain/workflow-frontier-guard.d.ts.map +1 -0
- package/daemon/dist/domain/workflow-frontier-guard.js +30 -0
- package/daemon/dist/domain/workflow-frontier-guard.js.map +1 -0
- package/daemon/dist/domain/workflow-instance-store.d.ts +28 -0
- package/daemon/dist/domain/workflow-instance-store.d.ts.map +1 -1
- package/daemon/dist/domain/workflow-instance-store.js +66 -10
- package/daemon/dist/domain/workflow-instance-store.js.map +1 -1
- package/daemon/dist/domain/workflow-keepalive-arming.d.ts +35 -0
- package/daemon/dist/domain/workflow-keepalive-arming.d.ts.map +1 -0
- package/daemon/dist/domain/workflow-keepalive-arming.js +87 -0
- package/daemon/dist/domain/workflow-keepalive-arming.js.map +1 -0
- package/daemon/dist/domain/workflow-projector.d.ts +117 -2
- package/daemon/dist/domain/workflow-projector.d.ts.map +1 -1
- package/daemon/dist/domain/workflow-projector.js +672 -41
- package/daemon/dist/domain/workflow-projector.js.map +1 -1
- package/daemon/dist/domain/workflow-role-context.d.ts +57 -0
- package/daemon/dist/domain/workflow-role-context.d.ts.map +1 -0
- package/daemon/dist/domain/workflow-role-context.js +120 -0
- package/daemon/dist/domain/workflow-role-context.js.map +1 -0
- package/daemon/dist/domain/workflow-role-resolver.d.ts +65 -0
- package/daemon/dist/domain/workflow-role-resolver.d.ts.map +1 -0
- package/daemon/dist/domain/workflow-role-resolver.js +108 -0
- package/daemon/dist/domain/workflow-role-resolver.js.map +1 -0
- package/daemon/dist/domain/workflow-runtime.d.ts +157 -1
- package/daemon/dist/domain/workflow-runtime.d.ts.map +1 -1
- package/daemon/dist/domain/workflow-runtime.js +718 -11
- package/daemon/dist/domain/workflow-runtime.js.map +1 -1
- package/daemon/dist/domain/workflow-spec-cache.d.ts +26 -1
- package/daemon/dist/domain/workflow-spec-cache.d.ts.map +1 -1
- package/daemon/dist/domain/workflow-spec-cache.js +327 -13
- package/daemon/dist/domain/workflow-spec-cache.js.map +1 -1
- package/daemon/dist/domain/workflow-types.d.ts +143 -8
- package/daemon/dist/domain/workflow-types.d.ts.map +1 -1
- package/daemon/dist/domain/workflow-types.js +14 -1
- package/daemon/dist/domain/workflow-types.js.map +1 -1
- package/daemon/dist/domain/workflow-validator.d.ts +11 -1
- package/daemon/dist/domain/workflow-validator.d.ts.map +1 -1
- package/daemon/dist/domain/workflow-validator.js +246 -1
- package/daemon/dist/domain/workflow-validator.js.map +1 -1
- package/daemon/dist/domain/workspace/default-workspace-scaffold.d.ts.map +1 -1
- package/daemon/dist/domain/workspace/default-workspace-scaffold.js +51 -6
- package/daemon/dist/domain/workspace/default-workspace-scaffold.js.map +1 -1
- package/daemon/dist/domain/workspace/workspace-doctor.d.ts +11 -0
- package/daemon/dist/domain/workspace/workspace-doctor.d.ts.map +1 -1
- package/daemon/dist/domain/workspace/workspace-doctor.js +82 -0
- package/daemon/dist/domain/workspace/workspace-doctor.js.map +1 -1
- package/daemon/dist/index.d.ts +17 -0
- package/daemon/dist/index.d.ts.map +1 -1
- package/daemon/dist/index.js +44 -0
- package/daemon/dist/index.js.map +1 -1
- package/daemon/dist/routes/activity.js +22 -0
- package/daemon/dist/routes/activity.js.map +1 -1
- package/daemon/dist/routes/config.d.ts.map +1 -1
- package/daemon/dist/routes/config.js +15 -6
- package/daemon/dist/routes/config.js.map +1 -1
- package/daemon/dist/routes/files.d.ts.map +1 -1
- package/daemon/dist/routes/files.js +45 -1
- package/daemon/dist/routes/files.js.map +1 -1
- package/daemon/dist/routes/hosts.d.ts +5 -0
- package/daemon/dist/routes/hosts.d.ts.map +1 -0
- package/daemon/dist/routes/hosts.js +346 -0
- package/daemon/dist/routes/hosts.js.map +1 -0
- package/daemon/dist/routes/mission-control.d.ts.map +1 -1
- package/daemon/dist/routes/mission-control.js +67 -2
- package/daemon/dist/routes/mission-control.js.map +1 -1
- package/daemon/dist/routes/queue.d.ts +10 -9
- package/daemon/dist/routes/queue.d.ts.map +1 -1
- package/daemon/dist/routes/queue.js +305 -10
- package/daemon/dist/routes/queue.js.map +1 -1
- package/daemon/dist/routes/review.d.ts +3 -0
- package/daemon/dist/routes/review.d.ts.map +1 -0
- package/daemon/dist/routes/review.js +195 -0
- package/daemon/dist/routes/review.js.map +1 -0
- package/daemon/dist/routes/scope-approve.d.ts +3 -0
- package/daemon/dist/routes/scope-approve.d.ts.map +1 -0
- package/daemon/dist/routes/scope-approve.js +55 -0
- package/daemon/dist/routes/scope-approve.js.map +1 -0
- package/daemon/dist/routes/scope-audit.d.ts.map +1 -1
- package/daemon/dist/routes/scope-audit.js +28 -1
- package/daemon/dist/routes/scope-audit.js.map +1 -1
- package/daemon/dist/routes/seat.js +13 -0
- package/daemon/dist/routes/seat.js.map +1 -1
- package/daemon/dist/routes/slices.d.ts.map +1 -1
- package/daemon/dist/routes/slices.js +49 -9
- package/daemon/dist/routes/slices.js.map +1 -1
- package/daemon/dist/routes/terminal-ws.d.ts.map +1 -1
- package/daemon/dist/routes/terminal-ws.js +58 -21
- package/daemon/dist/routes/terminal-ws.js.map +1 -1
- package/daemon/dist/routes/terminal.d.ts +11 -0
- package/daemon/dist/routes/terminal.d.ts.map +1 -0
- package/daemon/dist/routes/terminal.js +104 -0
- package/daemon/dist/routes/terminal.js.map +1 -0
- package/daemon/dist/routes/up.d.ts.map +1 -1
- package/daemon/dist/routes/up.js +84 -0
- package/daemon/dist/routes/up.js.map +1 -1
- package/daemon/dist/routes/workflow.d.ts.map +1 -1
- package/daemon/dist/routes/workflow.js +102 -10
- package/daemon/dist/routes/workflow.js.map +1 -1
- package/daemon/dist/routes/workspace.js +2 -2
- package/daemon/dist/server.d.ts +6 -0
- package/daemon/dist/server.d.ts.map +1 -1
- package/daemon/dist/server.js +36 -1
- package/daemon/dist/server.js.map +1 -1
- package/daemon/dist/startup.d.ts.map +1 -1
- package/daemon/dist/startup.js +238 -14
- package/daemon/dist/startup.js.map +1 -1
- package/daemon/docs/reference/agent-startup-guide.md +1 -1
- package/daemon/docs/reference/product-factory-vps-runbook.md +132 -0
- package/daemon/docs/reference/sdlc-conventions.md +187 -0
- package/daemon/specs/agents/conveyor/builder/agent.yaml +1 -1
- package/daemon/specs/agents/conveyor/builder/guidance/role.md +1 -0
- package/daemon/specs/agents/conveyor/lead/agent.yaml +1 -1
- package/daemon/specs/agents/conveyor/lead/guidance/role.md +1 -0
- package/daemon/specs/agents/conveyor/planner/agent.yaml +1 -1
- package/daemon/specs/agents/conveyor/planner/guidance/role.md +1 -0
- package/daemon/specs/agents/conveyor/reviewer/agent.yaml +1 -1
- package/daemon/specs/agents/conveyor/reviewer/guidance/role.md +1 -0
- package/daemon/specs/agents/design/product-designer/agent.yaml +1 -1
- package/daemon/specs/agents/design/product-designer/guidance/role.md +1 -0
- package/daemon/specs/agents/development/implementer/agent.yaml +1 -1
- package/daemon/specs/agents/development/implementer/guidance/role.md +1 -0
- package/daemon/specs/agents/development/qa/agent.yaml +1 -1
- package/daemon/specs/agents/development/qa/guidance/role.md +1 -0
- package/daemon/specs/agents/factory-rsi/dogfood/agent.yaml +29 -0
- package/daemon/specs/agents/factory-rsi/dogfood/guidance/role.md +37 -0
- package/daemon/specs/agents/factory-rsi/release-manager/agent.yaml +29 -0
- package/daemon/specs/agents/factory-rsi/release-manager/guidance/role.md +40 -0
- package/daemon/specs/agents/orchestration/orchestrator/agent.yaml +1 -1
- package/daemon/specs/agents/orchestration/orchestrator/guidance/role.md +1 -0
- package/daemon/specs/agents/product-management/pm/agent.yaml +1 -0
- package/daemon/specs/agents/product-management/pm/guidance/role.md +13 -0
- package/daemon/specs/agents/review/independent-reviewer/agent.yaml +1 -1
- package/daemon/specs/agents/review/independent-reviewer/guidance/role.md +1 -0
- package/daemon/specs/agents/shared/agent.yaml +2 -0
- package/daemon/specs/agents/shared/skills/core/mission-slice-sop/SKILL.md +113 -0
- package/daemon/specs/agents/shared/skills/core/openrig-cmux/SKILL.md +86 -0
- package/daemon/specs/agents/shared/skills/core/openrig-herdr/SKILL.md +158 -0
- package/daemon/specs/agents/shared/skills/core/openrig-operator/SKILL.md +4 -4
- package/daemon/specs/agents/shared/skills/core/openrig-user/SKILL.md +75 -29
- package/daemon/specs/agents/shared/skills/pods/orchestration-team/SKILL.md +2 -2
- package/daemon/specs/rigs/focused/pm-team/CULTURE.md +4 -0
- package/daemon/specs/rigs/launch/factory-rsi/CULTURE.md +47 -0
- package/daemon/specs/rigs/launch/factory-rsi/rig.yaml +115 -0
- package/daemon/specs/rigs/launch/kernel/agents/operator/agent/guidance/role.md +1 -1
- package/daemon/specs/rigs/launch/kernel/agents/operator/agent/startup/context.md +1 -1
- package/daemon/specs/rigs/preview/product-team/CULTURE.md +4 -0
- package/dist/build-info.d.ts +8 -0
- package/dist/build-info.d.ts.map +1 -0
- package/dist/build-info.js +11 -0
- package/dist/build-info.js.map +1 -0
- package/dist/commands/broadcast.d.ts +6 -1
- package/dist/commands/broadcast.d.ts.map +1 -1
- package/dist/commands/broadcast.js +101 -15
- package/dist/commands/broadcast.js.map +1 -1
- package/dist/commands/capture.d.ts.map +1 -1
- package/dist/commands/capture.js +99 -8
- package/dist/commands/capture.js.map +1 -1
- package/dist/commands/config-init-workspace.d.ts.map +1 -1
- package/dist/commands/config-init-workspace.js +20 -4
- package/dist/commands/config-init-workspace.js.map +1 -1
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +4 -0
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/doctor.js +2 -2
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/down.d.ts.map +1 -1
- package/dist/commands/down.js +5 -0
- package/dist/commands/down.js.map +1 -1
- package/dist/commands/expand.js +1 -1
- package/dist/commands/expand.js.map +1 -1
- package/dist/commands/file.d.ts +7 -0
- package/dist/commands/file.d.ts.map +1 -0
- package/dist/commands/file.js +77 -0
- package/dist/commands/file.js.map +1 -0
- package/dist/commands/host.d.ts +48 -0
- package/dist/commands/host.d.ts.map +1 -0
- package/dist/commands/host.js +772 -0
- package/dist/commands/host.js.map +1 -0
- package/dist/commands/launch.d.ts.map +1 -1
- package/dist/commands/launch.js +5 -0
- package/dist/commands/launch.js.map +1 -1
- package/dist/commands/proof.d.ts +54 -0
- package/dist/commands/proof.d.ts.map +1 -0
- package/dist/commands/proof.js +311 -0
- package/dist/commands/proof.js.map +1 -0
- package/dist/commands/ps.d.ts +41 -7
- package/dist/commands/ps.d.ts.map +1 -1
- package/dist/commands/ps.js +353 -135
- package/dist/commands/ps.js.map +1 -1
- package/dist/commands/queue.d.ts +36 -0
- package/dist/commands/queue.d.ts.map +1 -1
- package/dist/commands/queue.js +149 -7
- package/dist/commands/queue.js.map +1 -1
- package/dist/commands/restore-packet.d.ts.map +1 -1
- package/dist/commands/restore-packet.js +13 -2
- package/dist/commands/restore-packet.js.map +1 -1
- package/dist/commands/scope.d.ts.map +1 -1
- package/dist/commands/scope.js +140 -3
- package/dist/commands/scope.js.map +1 -1
- package/dist/commands/send.d.ts.map +1 -1
- package/dist/commands/send.js +127 -13
- package/dist/commands/send.js.map +1 -1
- package/dist/commands/terminal.d.ts +6 -0
- package/dist/commands/terminal.d.ts.map +1 -0
- package/dist/commands/terminal.js +116 -0
- package/dist/commands/terminal.js.map +1 -0
- package/dist/commands/transcript.d.ts +6 -1
- package/dist/commands/transcript.d.ts.map +1 -1
- package/dist/commands/transcript.js +113 -30
- package/dist/commands/transcript.js.map +1 -1
- package/dist/commands/up.d.ts +2 -0
- package/dist/commands/up.d.ts.map +1 -1
- package/dist/commands/up.js +78 -2
- package/dist/commands/up.js.map +1 -1
- package/dist/commands/whoami.d.ts.map +1 -1
- package/dist/commands/whoami.js +11 -0
- package/dist/commands/whoami.js.map +1 -1
- package/dist/commands/workflow-errors.d.ts +23 -0
- package/dist/commands/workflow-errors.d.ts.map +1 -0
- package/dist/commands/workflow-errors.js +100 -0
- package/dist/commands/workflow-errors.js.map +1 -0
- package/dist/commands/workflow-follow.d.ts +71 -0
- package/dist/commands/workflow-follow.d.ts.map +1 -0
- package/dist/commands/workflow-follow.js +259 -0
- package/dist/commands/workflow-follow.js.map +1 -0
- package/dist/commands/workflow-render.d.ts +114 -0
- package/dist/commands/workflow-render.d.ts.map +1 -0
- package/dist/commands/workflow-render.js +223 -0
- package/dist/commands/workflow-render.js.map +1 -0
- package/dist/commands/workflow.d.ts +1 -0
- package/dist/commands/workflow.d.ts.map +1 -1
- package/dist/commands/workflow.js +278 -14
- package/dist/commands/workflow.js.map +1 -1
- package/dist/commands/workspace.js +6 -6
- package/dist/commands/workspace.js.map +1 -1
- package/dist/config-store.d.ts +19 -1
- package/dist/config-store.d.ts.map +1 -1
- package/dist/config-store.js +171 -0
- package/dist/config-store.js.map +1 -1
- package/dist/cross-host-cli-helpers.d.ts +13 -0
- package/dist/cross-host-cli-helpers.d.ts.map +1 -1
- package/dist/cross-host-cli-helpers.js +27 -0
- package/dist/cross-host-cli-helpers.js.map +1 -1
- package/dist/cross-host-executor.d.ts +1 -0
- package/dist/cross-host-executor.d.ts.map +1 -1
- package/dist/cross-host-executor.js +4 -1
- package/dist/cross-host-executor.js.map +1 -1
- package/dist/cross-host-target.d.ts +49 -0
- package/dist/cross-host-target.d.ts.map +1 -0
- package/dist/cross-host-target.js +35 -0
- package/dist/cross-host-target.js.map +1 -0
- package/dist/daemon-lifecycle.d.ts.map +1 -1
- package/dist/daemon-lifecycle.js +4 -1
- package/dist/daemon-lifecycle.js.map +1 -1
- package/dist/host-registry.d.ts +17 -0
- package/dist/host-registry.d.ts.map +1 -1
- package/dist/host-registry.js +64 -2
- package/dist/host-registry.js.map +1 -1
- package/dist/host-selection.d.ts +13 -0
- package/dist/host-selection.d.ts.map +1 -0
- package/dist/host-selection.js +54 -0
- package/dist/host-selection.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/file-transfer.d.ts +89 -0
- package/dist/lib/file-transfer.d.ts.map +1 -0
- package/dist/lib/file-transfer.js +300 -0
- package/dist/lib/file-transfer.js.map +1 -0
- package/dist/lib/hosts/fanout-contract.d.ts +33 -0
- package/dist/lib/hosts/fanout-contract.d.ts.map +1 -0
- package/dist/lib/hosts/fanout-contract.js +23 -0
- package/dist/lib/hosts/fanout-contract.js.map +1 -0
- package/dist/lib/scope/scope-audit.d.ts +9 -1
- package/dist/lib/scope/scope-audit.d.ts.map +1 -1
- package/dist/lib/scope/scope-audit.js +173 -1
- package/dist/lib/scope/scope-audit.js.map +1 -1
- package/dist/lib/scope/templates.d.ts +1 -0
- package/dist/lib/scope/templates.d.ts.map +1 -1
- package/dist/lib/scope/templates.js +9 -0
- package/dist/lib/scope/templates.js.map +1 -1
- package/dist/lib/scope-templates/backlog-deprecation.md +16 -0
- package/dist/lib/scope-templates/backlog-tech-debt.md +16 -0
- package/dist/lib/scope-templates/bug-fix.md +16 -0
- package/dist/lib/scope-templates/implementation-prd.md +33 -0
- package/dist/lib/scope-templates/mission-placeholder.md +1 -1
- package/dist/lib/scope-templates/mission-progress.md +1 -1
- package/dist/lib/scope-templates/mission-release.md +1 -1
- package/dist/lib/scope-templates/placeholder.md +11 -7
- package/dist/lib/scope-templates/proof.md +5 -1
- package/dist/lib/scope-templates/release-feature.md +14 -6
- package/dist/lib/scope-templates/research.md +16 -0
- package/dist/lib/scope-templates/slice-progress.md +1 -1
- package/dist/remote-host-ops.d.ts +1 -0
- package/dist/remote-host-ops.d.ts.map +1 -1
- package/dist/remote-host-ops.js +11 -4
- package/dist/remote-host-ops.js.map +1 -1
- package/dist/session-name.d.ts +23 -0
- package/dist/session-name.d.ts.map +1 -0
- package/dist/session-name.js +61 -0
- package/dist/session-name.js.map +1 -0
- package/dist/version.d.ts +5 -0
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +11 -1
- package/dist/version.js.map +1 -1
- package/package.json +1 -1
- package/ui/dist/assets/index-CFqxa0zW.css +32 -0
- package/ui/dist/assets/index-zrFqS7gL.js +623 -0
- package/ui/dist/index.html +2 -2
- package/ui/dist/assets/index-DYZniQcc.js +0 -597
- package/ui/dist/assets/index-trcb4Yf_.css +0 -32
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/** A herdr socket result body — always carries a `type` discriminator. */
|
|
2
|
+
export interface HerdrResult {
|
|
3
|
+
type: string;
|
|
4
|
+
[k: string]: unknown;
|
|
5
|
+
}
|
|
6
|
+
export interface HerdrProbeResult {
|
|
7
|
+
/** Is the herdr control socket reachable + answering `ping`? */
|
|
8
|
+
alive: boolean;
|
|
9
|
+
version: string | null;
|
|
10
|
+
protocol: number | null;
|
|
11
|
+
}
|
|
12
|
+
/** One socket round-trip: send {id,method,params}, resolve the matching response body. */
|
|
13
|
+
export type HerdrSocketRpc = (req: {
|
|
14
|
+
id: string;
|
|
15
|
+
method: string;
|
|
16
|
+
params: unknown;
|
|
17
|
+
}) => Promise<HerdrResult>;
|
|
18
|
+
export interface HerdrTransport {
|
|
19
|
+
/** Liveness + version/protocol via the socket `ping` (not the absent CLI). */
|
|
20
|
+
probe(): Promise<HerdrProbeResult>;
|
|
21
|
+
/** Send a socket request; resolve the `result` body, reject on error / no result / unreachable. */
|
|
22
|
+
request(method: string, params: unknown): Promise<HerdrResult>;
|
|
23
|
+
}
|
|
24
|
+
export type HerdrTransportFactory = () => HerdrTransport;
|
|
25
|
+
/** Resolve the herdr control socket path: env override → per-session → default. */
|
|
26
|
+
export declare function resolveHerdrSocketPath(env?: NodeJS.ProcessEnv): string;
|
|
27
|
+
/** Extract a version token (e.g. from a ping result's `version`, or `herdr --version`). */
|
|
28
|
+
export declare function parseHerdrVersion(out: unknown): string | null;
|
|
29
|
+
/**
|
|
30
|
+
* Normalize a parsed response line to its result body. Accepts BOTH the wrapped
|
|
31
|
+
* `{id,result:{type,…}}` (layout.apply/workspace.create) and a bare `{type,…}`
|
|
32
|
+
* (ping) shape, and treats an `{…,error:…}` (uncaptured shape, handled
|
|
33
|
+
* defensively) or a shapeless line as an error.
|
|
34
|
+
*/
|
|
35
|
+
export declare function unwrapHerdrResponse(raw: unknown): HerdrResult;
|
|
36
|
+
/**
|
|
37
|
+
* The REAL unix-socket RPC (node:net). One-shot per request: connect, send one
|
|
38
|
+
* newline-delimited JSON line, read lines until the one whose `id` matches (or a
|
|
39
|
+
* bare typed response), then close. Rejects on ENOENT (herdr not running),
|
|
40
|
+
* timeout, connection error, socket close before a response, or a herdr error.
|
|
41
|
+
* Injectable so the adapter/tests never open a real socket.
|
|
42
|
+
*/
|
|
43
|
+
export declare function createHerdrSocketRpc(socketPath?: string, timeoutMs?: number): HerdrSocketRpc;
|
|
44
|
+
/**
|
|
45
|
+
* The socket transport. `request` sends through the injected RPC with a fresh
|
|
46
|
+
* id; `probe` sends `ping` and reads `{type:"pong",version,protocol}`
|
|
47
|
+
* (unreachable / non-pong → alive:false, the honest answer).
|
|
48
|
+
*/
|
|
49
|
+
export declare function createHerdrSocketTransport(rpc: HerdrSocketRpc): HerdrTransportFactory;
|
|
50
|
+
//# sourceMappingURL=herdr-transport.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"herdr-transport.d.ts","sourceRoot":"","sources":["../../../src/domain/terminal/herdr-transport.ts"],"names":[],"mappings":"AA6BA,0EAA0E;AAC1E,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,gBAAgB;IAC/B,gEAAgE;IAChE,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,0FAA0F;AAC1F,MAAM,MAAM,cAAc,GAAG,CAAC,GAAG,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,KAAK,OAAO,CAAC,WAAW,CAAC,CAAC;AAE5G,MAAM,WAAW,cAAc;IAC7B,8EAA8E;IAC9E,KAAK,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACnC,mGAAmG;IACnG,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;CAChE;AAED,MAAM,MAAM,qBAAqB,GAAG,MAAM,cAAc,CAAC;AAEzD,mFAAmF;AACnF,wBAAgB,sBAAsB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAKnF;AAED,2FAA2F;AAC3F,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAI7D;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,OAAO,GAAG,WAAW,CAY7D;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,UAAU,GAAE,MAAiC,EAC7C,SAAS,SAAO,GACf,cAAc,CA6ChB;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,cAAc,GAAG,qBAAqB,CAoBrF"}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
// OPR.0.4.6.02 FB4 — the herdr SOCKET transport (arm's-length AGPL boundary).
|
|
2
|
+
//
|
|
3
|
+
// herdr is an AGPL terminal multiplexer. OpenRig integrates it at ARM'S LENGTH:
|
|
4
|
+
// we talk to its local unix-domain CONTROL SOCKET (a runtime IPC endpoint the
|
|
5
|
+
// operator's installed herdr exposes) exactly the way we shell out to tmux/cmux
|
|
6
|
+
// — a local IPC client, NEVER importing, linking, embedding, or vendoring herdr
|
|
7
|
+
// code. This file only frames JSON on a socket the operator's herdr owns.
|
|
8
|
+
//
|
|
9
|
+
// Why a socket, not the CLI (the FB4 correction): herdr 0.7.1 has NO `layout`
|
|
10
|
+
// CLI command — the prior CLI transport (`herdr layout apply …`) could never
|
|
11
|
+
// tile a view (the VM proof at e373f741 hit `herdr_layout_unsupported`). herdr
|
|
12
|
+
// 0.7.1's layout mechanism is the socket JSON-RPC `layout.apply`, which the
|
|
13
|
+
// slice research validated over the raw socket. The wire protocol here is
|
|
14
|
+
// grounded in the VERBATIM captures preserved at
|
|
15
|
+
// research/herdr-socket-captures/herdr-phase3-*.json:
|
|
16
|
+
// - socket: ~/.config/herdr/herdr.sock (HERDR_SOCKET_PATH / HERDR_SESSION overrides)
|
|
17
|
+
// - framing: newline-delimited JSON (one object per line)
|
|
18
|
+
// - envelope: request {id,method,params} → success {id,result:{type,…}}
|
|
19
|
+
// (NOT JSON-RPC 2.0 — there is no `jsonrpc` field; some methods, e.g. ping,
|
|
20
|
+
// may answer with a bare {type,…})
|
|
21
|
+
// The error-response envelope, the exact socket lifecycle, and workspace.create
|
|
22
|
+
// were not captured verbatim; they are handled DEFENSIVELY here and are the
|
|
23
|
+
// first-run-empirical items the fresh VM re-proof must confirm (unproven until
|
|
24
|
+
// that proof artifact lands).
|
|
25
|
+
import net from "node:net";
|
|
26
|
+
import { homedir } from "node:os";
|
|
27
|
+
import path from "node:path";
|
|
28
|
+
/** Resolve the herdr control socket path: env override → per-session → default. */
|
|
29
|
+
export function resolveHerdrSocketPath(env = process.env) {
|
|
30
|
+
if (env["HERDR_SOCKET_PATH"])
|
|
31
|
+
return env["HERDR_SOCKET_PATH"];
|
|
32
|
+
const base = path.join(homedir(), ".config", "herdr");
|
|
33
|
+
const session = env["HERDR_SESSION"];
|
|
34
|
+
return session ? path.join(base, "sessions", session, "herdr.sock") : path.join(base, "herdr.sock");
|
|
35
|
+
}
|
|
36
|
+
/** Extract a version token (e.g. from a ping result's `version`, or `herdr --version`). */
|
|
37
|
+
export function parseHerdrVersion(out) {
|
|
38
|
+
if (typeof out !== "string")
|
|
39
|
+
return null;
|
|
40
|
+
const m = out.match(/(\d+\.\d+\.\d+(?:[-.][0-9A-Za-z]+)*)/);
|
|
41
|
+
return m?.[1] ?? null;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Normalize a parsed response line to its result body. Accepts BOTH the wrapped
|
|
45
|
+
* `{id,result:{type,…}}` (layout.apply/workspace.create) and a bare `{type,…}`
|
|
46
|
+
* (ping) shape, and treats an `{…,error:…}` (uncaptured shape, handled
|
|
47
|
+
* defensively) or a shapeless line as an error.
|
|
48
|
+
*/
|
|
49
|
+
export function unwrapHerdrResponse(raw) {
|
|
50
|
+
if (raw && typeof raw === "object") {
|
|
51
|
+
const obj = raw;
|
|
52
|
+
if (obj["error"] != null) {
|
|
53
|
+
const e = obj["error"];
|
|
54
|
+
throw new Error(`herdr error: ${typeof e === "string" ? e : JSON.stringify(e)}`);
|
|
55
|
+
}
|
|
56
|
+
const result = obj["result"];
|
|
57
|
+
if (result && typeof result === "object")
|
|
58
|
+
return result;
|
|
59
|
+
if (typeof obj["type"] === "string")
|
|
60
|
+
return obj; // bare {type,…} (e.g. pong)
|
|
61
|
+
}
|
|
62
|
+
throw new Error(`herdr: unrecognized socket response ${JSON.stringify(raw)}`);
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* The REAL unix-socket RPC (node:net). One-shot per request: connect, send one
|
|
66
|
+
* newline-delimited JSON line, read lines until the one whose `id` matches (or a
|
|
67
|
+
* bare typed response), then close. Rejects on ENOENT (herdr not running),
|
|
68
|
+
* timeout, connection error, socket close before a response, or a herdr error.
|
|
69
|
+
* Injectable so the adapter/tests never open a real socket.
|
|
70
|
+
*/
|
|
71
|
+
export function createHerdrSocketRpc(socketPath = resolveHerdrSocketPath(), timeoutMs = 5000) {
|
|
72
|
+
return (req) => new Promise((resolve, reject) => {
|
|
73
|
+
const conn = net.createConnection({ path: socketPath });
|
|
74
|
+
let buf = "";
|
|
75
|
+
let settled = false;
|
|
76
|
+
const finish = (fn) => {
|
|
77
|
+
if (settled)
|
|
78
|
+
return;
|
|
79
|
+
settled = true;
|
|
80
|
+
clearTimeout(timer);
|
|
81
|
+
conn.destroy();
|
|
82
|
+
fn();
|
|
83
|
+
};
|
|
84
|
+
const timer = setTimeout(() => finish(() => reject(new Error(`herdr socket timeout after ${timeoutMs}ms (${socketPath})`))), timeoutMs);
|
|
85
|
+
conn.on("connect", () => conn.write(`${JSON.stringify(req)}\n`));
|
|
86
|
+
conn.on("data", (chunk) => {
|
|
87
|
+
buf += chunk.toString("utf8");
|
|
88
|
+
let nl;
|
|
89
|
+
while ((nl = buf.indexOf("\n")) >= 0) {
|
|
90
|
+
const line = buf.slice(0, nl).trim();
|
|
91
|
+
buf = buf.slice(nl + 1);
|
|
92
|
+
if (!line)
|
|
93
|
+
continue;
|
|
94
|
+
let parsed;
|
|
95
|
+
try {
|
|
96
|
+
parsed = JSON.parse(line);
|
|
97
|
+
}
|
|
98
|
+
catch {
|
|
99
|
+
continue; // a partial/foreign line — keep reading
|
|
100
|
+
}
|
|
101
|
+
const id = parsed?.id;
|
|
102
|
+
if (id != null && id !== req.id)
|
|
103
|
+
continue; // a subscription/other message, not our reply
|
|
104
|
+
try {
|
|
105
|
+
const body = unwrapHerdrResponse(parsed);
|
|
106
|
+
finish(() => resolve(body));
|
|
107
|
+
}
|
|
108
|
+
catch (err) {
|
|
109
|
+
finish(() => reject(err instanceof Error ? err : new Error(String(err))));
|
|
110
|
+
}
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
conn.on("error", (err) => finish(() => reject(err)));
|
|
115
|
+
conn.on("end", () => finish(() => reject(new Error("herdr socket closed before a response"))));
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* The socket transport. `request` sends through the injected RPC with a fresh
|
|
120
|
+
* id; `probe` sends `ping` and reads `{type:"pong",version,protocol}`
|
|
121
|
+
* (unreachable / non-pong → alive:false, the honest answer).
|
|
122
|
+
*/
|
|
123
|
+
export function createHerdrSocketTransport(rpc) {
|
|
124
|
+
return () => {
|
|
125
|
+
let counter = 0;
|
|
126
|
+
const nextId = () => `openrig-${(counter += 1)}`;
|
|
127
|
+
return {
|
|
128
|
+
async probe() {
|
|
129
|
+
try {
|
|
130
|
+
const pong = await rpc({ id: nextId(), method: "ping", params: {} });
|
|
131
|
+
const version = parseHerdrVersion(pong["version"]);
|
|
132
|
+
const protocol = typeof pong["protocol"] === "number" ? pong["protocol"] : null;
|
|
133
|
+
return { alive: pong["type"] === "pong" || version != null || protocol != null, version, protocol };
|
|
134
|
+
}
|
|
135
|
+
catch {
|
|
136
|
+
return { alive: false, version: null, protocol: null };
|
|
137
|
+
}
|
|
138
|
+
},
|
|
139
|
+
request(method, params) {
|
|
140
|
+
return rpc({ id: nextId(), method, params });
|
|
141
|
+
},
|
|
142
|
+
};
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
//# sourceMappingURL=herdr-transport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"herdr-transport.js","sourceRoot":"","sources":["../../../src/domain/terminal/herdr-transport.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A single provider-neutral pane, fully composed. `paneCommand` is the exact
|
|
3
|
+
* shell command the provider runs inside the pane (e.g. `tmux attach -t 's'`
|
|
4
|
+
* or `ssh host tmux attach -r -t 's'`); the provider does not modify it.
|
|
5
|
+
*/
|
|
6
|
+
export interface ComposedPane {
|
|
7
|
+
/** Canonical session name of the seat this pane attaches to. */
|
|
8
|
+
seat: string;
|
|
9
|
+
/** Human pane label — `<agent> · <slice>` per AC-7. */
|
|
10
|
+
label: string;
|
|
11
|
+
/** The provider-neutral shell command the pane runs. Composed upstream. */
|
|
12
|
+
paneCommand: string;
|
|
13
|
+
/** True when the attach is view-only (`tmux attach -r`) — cross-rig / saved read-only. */
|
|
14
|
+
readOnly: boolean;
|
|
15
|
+
}
|
|
16
|
+
/** A seat that could not be tiled because it has no live/attachable session. Named, never dropped. */
|
|
17
|
+
export interface AbsentSeat {
|
|
18
|
+
seat: string;
|
|
19
|
+
/** Structured host id when the seat is remote; null for a local seat. */
|
|
20
|
+
host: string | null;
|
|
21
|
+
reason: string;
|
|
22
|
+
}
|
|
23
|
+
/** A seat that is honestly degraded (e.g. an http-registered host that tiles cannot reach over ssh). */
|
|
24
|
+
export interface DegradedSeat {
|
|
25
|
+
seat: string;
|
|
26
|
+
/** Structured host id (degrade is always host-driven). */
|
|
27
|
+
host: string;
|
|
28
|
+
reason: string;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* A fully-composed view: the provider-neutral output of `composeView`.
|
|
32
|
+
* `opened` is the flat tiled set; `pages` is that same set chunked into
|
|
33
|
+
* fixed-size grids (one provider tab/workspace per page).
|
|
34
|
+
*/
|
|
35
|
+
export interface ComposedView {
|
|
36
|
+
id: string;
|
|
37
|
+
opened: ComposedPane[];
|
|
38
|
+
absent: AbsentSeat[];
|
|
39
|
+
degraded: DegradedSeat[];
|
|
40
|
+
/** `opened` chunked into ≤ PANES_PER_PAGE grids; a provider renders one tab per page. */
|
|
41
|
+
pages: ComposedPane[][];
|
|
42
|
+
}
|
|
43
|
+
/** Provider availability + version + capability map (from a version-adaptive probe). */
|
|
44
|
+
export interface ProviderStatus {
|
|
45
|
+
provider: string;
|
|
46
|
+
available: boolean;
|
|
47
|
+
/** Provider version when the probe could determine it; omitted when unknown. */
|
|
48
|
+
version?: string;
|
|
49
|
+
capabilities: Record<string, boolean>;
|
|
50
|
+
}
|
|
51
|
+
/** Liveness of the provider surface itself (herdr: `herdr status`; NOT a daemon ping). */
|
|
52
|
+
export interface ProviderLiveness {
|
|
53
|
+
alive: boolean;
|
|
54
|
+
/** Optional honest detail (why not alive / probe note). */
|
|
55
|
+
detail?: string;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* The result of rendering a composed view. `opened` lists the seats that were
|
|
59
|
+
* actually placed into panes; `absent`/`degraded` carry forward the composer's
|
|
60
|
+
* honest-partial classification (a provider may add its own degrades, e.g. a
|
|
61
|
+
* pane that failed to render). `pages` is the number of grid pages painted.
|
|
62
|
+
*/
|
|
63
|
+
export interface OpenViewResult {
|
|
64
|
+
provider: string;
|
|
65
|
+
ok: boolean;
|
|
66
|
+
opened: string[];
|
|
67
|
+
absent: AbsentSeat[];
|
|
68
|
+
degraded: DegradedSeat[];
|
|
69
|
+
pages: number;
|
|
70
|
+
/** Present only on a hard provider failure (surface unreachable, layout apply refused). */
|
|
71
|
+
error?: string;
|
|
72
|
+
code?: string;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* The provider contract. Three methods only:
|
|
76
|
+
* - `status()` — availability + version + capabilities (version-adaptive probe).
|
|
77
|
+
* - `liveness()` — is the provider surface itself up right now.
|
|
78
|
+
* - `openView()` — render an already-composed view into the provider surface.
|
|
79
|
+
*
|
|
80
|
+
* Pane-command composition is deliberately NOT part of this interface.
|
|
81
|
+
*/
|
|
82
|
+
export interface TerminalProvider {
|
|
83
|
+
readonly name: string;
|
|
84
|
+
status(): Promise<ProviderStatus>;
|
|
85
|
+
liveness(): Promise<ProviderLiveness>;
|
|
86
|
+
openView(view: ComposedView): Promise<OpenViewResult>;
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=terminal-provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terminal-provider.d.ts","sourceRoot":"","sources":["../../../src/domain/terminal/terminal-provider.ts"],"names":[],"mappings":"AAgBA;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,gEAAgE;IAChE,IAAI,EAAE,MAAM,CAAC;IACb,uDAAuD;IACvD,KAAK,EAAE,MAAM,CAAC;IACd,2EAA2E;IAC3E,WAAW,EAAE,MAAM,CAAC;IACpB,0FAA0F;IAC1F,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,sGAAsG;AACtG,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,yEAAyE;IACzE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wGAAwG;AACxG,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,0DAA0D;IAC1D,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,yFAAyF;IACzF,KAAK,EAAE,YAAY,EAAE,EAAE,CAAC;CACzB;AAED,wFAAwF;AACxF,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,gFAAgF;IAChF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACvC;AAED,0FAA0F;AAC1F,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,2DAA2D;IAC3D,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;GAKG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,2FAA2F;IAC3F,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,MAAM,IAAI,OAAO,CAAC,cAAc,CAAC,CAAC;IAClC,QAAQ,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACtC,QAAQ,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;CACvD"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
// OPR.0.4.6.02 C2 — the TerminalProvider abstraction (the CORE seam of the
|
|
2
|
+
// terminal-provider ride).
|
|
3
|
+
//
|
|
4
|
+
// A provider renders an ALREADY-COMPOSED view into its own surface model
|
|
5
|
+
// (herdr workspace/tab/pane; cmux workspace/surface). It NEVER composes the
|
|
6
|
+
// pane command itself — pane-command composition lives entirely in
|
|
7
|
+
// `view-composer.ts`, which emits provider-neutral `ComposedPane.paneCommand`
|
|
8
|
+
// strings. The provider's only job is placement + labeling + liveness. This
|
|
9
|
+
// split keeps the composition rules (local vs ssh vs http honest-degrade,
|
|
10
|
+
// read-only `-r`, paging) in one pure, testable place regardless of which
|
|
11
|
+
// provider paints the tiles.
|
|
12
|
+
//
|
|
13
|
+
// The one shared result shape is `{ opened, absent, degraded }` (BR-6
|
|
14
|
+
// honest-partial): a view that can only partially render says so explicitly —
|
|
15
|
+
// never a silent omission.
|
|
16
|
+
export {};
|
|
17
|
+
//# sourceMappingURL=terminal-provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terminal-provider.js","sourceRoot":"","sources":["../../../src/domain/terminal/terminal-provider.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,2BAA2B;AAC3B,EAAE;AACF,yEAAyE;AACzE,4EAA4E;AAC5E,mEAAmE;AACnE,8EAA8E;AAC9E,4EAA4E;AAC5E,0EAA0E;AAC1E,0EAA0E;AAC1E,6BAA6B;AAC7B,EAAE;AACF,sEAAsE;AACtE,8EAA8E;AAC9E,2BAA2B"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import type { LiveSeatRow, SavedView, TerminalViewsStore } from "./terminal-views-store.js";
|
|
2
|
+
import type { HostEntry } from "../hosts/hosts-registry-reader.js";
|
|
3
|
+
import type { OpenViewResult, ProviderLiveness, ProviderStatus, TerminalProvider } from "./terminal-provider.js";
|
|
4
|
+
/** The v1 provider name set (herdr = proof-gated primary; cmux = best-effort). */
|
|
5
|
+
export type TerminalProviderName = "herdr" | "cmux";
|
|
6
|
+
export declare const DEFAULT_PROVIDER: TerminalProviderName;
|
|
7
|
+
export interface OpenViewRequest {
|
|
8
|
+
/** Provider name; defaults to herdr when omitted. */
|
|
9
|
+
provider?: string;
|
|
10
|
+
/** The view argument: a rig name | `mission:<id>` | `slice:<id>` | a saved-view id. */
|
|
11
|
+
view: string;
|
|
12
|
+
}
|
|
13
|
+
/** The `rig terminal views` payload: saved views + the live rig names you can open. */
|
|
14
|
+
export interface ListViewsResult {
|
|
15
|
+
saved: SavedView[];
|
|
16
|
+
/** Rig names openable as per-rig derived views (live from the inventory). */
|
|
17
|
+
rigs: string[];
|
|
18
|
+
}
|
|
19
|
+
/** One provider's doctor line for `rig terminal status`. */
|
|
20
|
+
export interface ProviderStatusReport {
|
|
21
|
+
name: string;
|
|
22
|
+
status: ProviderStatus;
|
|
23
|
+
liveness: ProviderLiveness;
|
|
24
|
+
}
|
|
25
|
+
export interface TerminalStatusResult {
|
|
26
|
+
providers: ProviderStatusReport[];
|
|
27
|
+
}
|
|
28
|
+
export interface TerminalServiceDeps {
|
|
29
|
+
/** Resolve a provider name to its adapter, or null for an unknown name. */
|
|
30
|
+
resolveProvider(name: string): TerminalProvider | null;
|
|
31
|
+
/** The saved-views store (read paths only from this service). */
|
|
32
|
+
viewsStore: Pick<TerminalViewsStore, "get" | "list">;
|
|
33
|
+
/** Live seats of a rig BY NAME; null when no such rig is known (vs [] = a known-but-empty rig). */
|
|
34
|
+
listRigSeats(rigName: string): Promise<LiveSeatRow[] | null> | LiveSeatRow[] | null;
|
|
35
|
+
/** Live seats of a pod within a rig (by rig name-or-id + pod namespace); null when the rig/pod is unknown. */
|
|
36
|
+
listPodSeats(rigArg: string, podNamespace: string): Promise<LiveSeatRow[] | null> | LiveSeatRow[] | null;
|
|
37
|
+
/** Live seats for a derived scope (`mission:<id>` | `slice:<id>`); null when the scope is unknown/invalid. */
|
|
38
|
+
listScopeSeats(scope: string): Promise<LiveSeatRow[] | null> | LiveSeatRow[] | null;
|
|
39
|
+
/** Known rig names (for the `views` listing). */
|
|
40
|
+
listRigNames(): Promise<string[]> | string[];
|
|
41
|
+
/** Read-only host resolution for the composer (registry unavailable → null for every id). */
|
|
42
|
+
resolveHost(id: string): HostEntry | null;
|
|
43
|
+
/** Local liveness refine — has-session for a local tmux session; remote members are not probed here. */
|
|
44
|
+
hasSession(tmuxSession: string): Promise<boolean> | boolean;
|
|
45
|
+
}
|
|
46
|
+
export declare class TerminalService {
|
|
47
|
+
private readonly deps;
|
|
48
|
+
constructor(deps: TerminalServiceDeps);
|
|
49
|
+
/** Open a view in the chosen provider. Always returns the one shared result shape. */
|
|
50
|
+
openView(req: OpenViewRequest): Promise<OpenViewResult>;
|
|
51
|
+
/** List saved views + the rig names openable as derived views. */
|
|
52
|
+
listViews(): Promise<ListViewsResult>;
|
|
53
|
+
/** Provider availability + liveness (doctor). Unknown named provider → empty report for it. */
|
|
54
|
+
status(providerName?: string): Promise<TerminalStatusResult>;
|
|
55
|
+
/** Resolve a view argument into composer-ready members (precedence in the file header). */
|
|
56
|
+
private resolveView;
|
|
57
|
+
/** Refine local members' liveness with a real has-session probe (a dead seat → absent, honest-partial). */
|
|
58
|
+
private refineLiveness;
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=terminal-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terminal-service.d.ts","sourceRoot":"","sources":["../../../src/domain/terminal/terminal-service.ts"],"names":[],"mappings":"AAmCA,OAAO,KAAK,EACV,WAAW,EACX,SAAS,EAET,kBAAkB,EACnB,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAC;AACnE,OAAO,KAAK,EACV,cAAc,EACd,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EACjB,MAAM,wBAAwB,CAAC;AAEhC,kFAAkF;AAClF,MAAM,MAAM,oBAAoB,GAAG,OAAO,GAAG,MAAM,CAAC;AACpD,eAAO,MAAM,gBAAgB,EAAE,oBAA8B,CAAC;AAE9D,MAAM,WAAW,eAAe;IAC9B,qDAAqD;IACrD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,uFAAuF;IACvF,IAAI,EAAE,MAAM,CAAC;CACd;AAED,uFAAuF;AACvF,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,6EAA6E;IAC7E,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,4DAA4D;AAC5D,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,cAAc,CAAC;IACvB,QAAQ,EAAE,gBAAgB,CAAC;CAC5B;AAED,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,oBAAoB,EAAE,CAAC;CACnC;AAED,MAAM,WAAW,mBAAmB;IAClC,2EAA2E;IAC3E,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI,CAAC;IACvD,iEAAiE;IACjE,UAAU,EAAE,IAAI,CAAC,kBAAkB,EAAE,KAAK,GAAG,MAAM,CAAC,CAAC;IACrD,mGAAmG;IACnG,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,GAAG,WAAW,EAAE,GAAG,IAAI,CAAC;IACpF,8GAA8G;IAC9G,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,GAAG,WAAW,EAAE,GAAG,IAAI,CAAC;IACzG,8GAA8G;IAC9G,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,GAAG,WAAW,EAAE,GAAG,IAAI,CAAC;IACpF,iDAAiD;IACjD,YAAY,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC;IAC7C,6FAA6F;IAC7F,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;IAC1C,wGAAwG;IACxG,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;CAC7D;AA0BD,qBAAa,eAAe;IACd,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE,mBAAmB;IAEtD,sFAAsF;IAChF,QAAQ,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC;IA4B7D,kEAAkE;IAC5D,SAAS,IAAI,OAAO,CAAC,eAAe,CAAC;IAO3C,+FAA+F;IACzF,MAAM,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAkBlE,2FAA2F;YAC7E,WAAW;IAyDzB,2GAA2G;YAC7F,cAAc;CAW7B"}
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
// OPR.0.4.6.02 C3 — the TerminalService orchestrator.
|
|
2
|
+
//
|
|
3
|
+
// ONE daemon-side composer for EVERY view kind (arch R1 / guard b1): the
|
|
4
|
+
// canonical route and the CLI both call this, so there is never a second
|
|
5
|
+
// composition path. It resolves a view ARGUMENT into composer-ready members,
|
|
6
|
+
// composes them into a provider-neutral `ComposedView` (the pure `composeView`
|
|
7
|
+
// owns the local/ssh/http/read-only partition rules), and hands that to the
|
|
8
|
+
// chosen `TerminalProvider`. It adds no pixel logic and no provider-specific
|
|
9
|
+
// branching — the provider paints, the composer partitions, this service only
|
|
10
|
+
// RESOLVES + ROUTES.
|
|
11
|
+
//
|
|
12
|
+
// View argument resolution (precedence):
|
|
13
|
+
// 1. `mission:<id>` / `slice:<id>` → derived, LIVE from the review agents
|
|
14
|
+
// band; READ-ONLY by construction (a cross-rig observational grouping —
|
|
15
|
+
// AC-3 "another rig's agents ... read-only"). Never persisted (A3).
|
|
16
|
+
// 2. a rig NAME → per-rig derived, LIVE from the node
|
|
17
|
+
// inventory; INTERACTIVE (you asked for that rig, you drive it — AC-1c).
|
|
18
|
+
// 3. a saved-view id → from `terminal-views.yaml`; per-member
|
|
19
|
+
// read-only as the operator saved it.
|
|
20
|
+
// Anything else → a named `view_not_found` (never a silent empty open).
|
|
21
|
+
//
|
|
22
|
+
// The read-only policy above is a v1 build decision grounded in AC-1c/AC-3
|
|
23
|
+
// (interactive rig view vs read-only cross-rig/derived view); it is NAMED here
|
|
24
|
+
// for the guard/QA gates, not silently absorbed. Saved views carry their own
|
|
25
|
+
// per-member read-only, so an operator can save an interactive multi-rig view
|
|
26
|
+
// deliberately.
|
|
27
|
+
//
|
|
28
|
+
// The one shared result shape is `OpenViewResult { opened, absent, degraded }`
|
|
29
|
+
// (arch Q3): this service returns it for resolution failures too (view/provider
|
|
30
|
+
// not found), so the route JSON and the CLI JSON carry ONE contract for every
|
|
31
|
+
// outcome.
|
|
32
|
+
import { composeView } from "./view-composer.js";
|
|
33
|
+
// deriveViewMembers is a VALUE exported by the views store (not the composer).
|
|
34
|
+
import { deriveViewMembers } from "./terminal-views-store.js";
|
|
35
|
+
export const DEFAULT_PROVIDER = "herdr";
|
|
36
|
+
/** Build the one shared result shape for a pre-provider failure (view/provider not found). */
|
|
37
|
+
function errorResult(provider, code, error) {
|
|
38
|
+
return { provider, ok: false, opened: [], absent: [], degraded: [], pages: 0, error, code };
|
|
39
|
+
}
|
|
40
|
+
/** Map a persisted saved-view member to a composer input (defaults filled; alive refined later). */
|
|
41
|
+
function savedMemberToInput(m) {
|
|
42
|
+
return {
|
|
43
|
+
seat: m.seat,
|
|
44
|
+
label: m.label ?? m.seat,
|
|
45
|
+
// A local saved member without an explicit tmuxSession falls back to the
|
|
46
|
+
// seat's canonical name (the common local seat == session case); a wrong
|
|
47
|
+
// guess simply lands the seat in absent[] at compose time (honest).
|
|
48
|
+
tmuxSession: m.tmuxSession ?? m.seat,
|
|
49
|
+
host: m.host ?? null,
|
|
50
|
+
readOnly: m.readOnly === true,
|
|
51
|
+
// Refined by refineLiveness for local members; remote members are routed by
|
|
52
|
+
// the composer regardless (ssh reachability is not a has-session concern).
|
|
53
|
+
alive: true,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
export class TerminalService {
|
|
57
|
+
deps;
|
|
58
|
+
constructor(deps) {
|
|
59
|
+
this.deps = deps;
|
|
60
|
+
}
|
|
61
|
+
/** Open a view in the chosen provider. Always returns the one shared result shape. */
|
|
62
|
+
async openView(req) {
|
|
63
|
+
const providerName = (req.provider ?? DEFAULT_PROVIDER).trim() || DEFAULT_PROVIDER;
|
|
64
|
+
const provider = this.deps.resolveProvider(providerName);
|
|
65
|
+
if (!provider) {
|
|
66
|
+
return errorResult(providerName, "unknown_provider", `unknown provider '${providerName}' — expected herdr or cmux`);
|
|
67
|
+
}
|
|
68
|
+
const view = (req.view ?? "").trim();
|
|
69
|
+
if (!view) {
|
|
70
|
+
return errorResult(providerName, "view_required", "a view argument is required (a rig name, mission:<id>, slice:<id>, or a saved-view id)");
|
|
71
|
+
}
|
|
72
|
+
const resolved = await this.resolveView(view);
|
|
73
|
+
if ("code" in resolved) {
|
|
74
|
+
return errorResult(providerName, resolved.code, resolved.error);
|
|
75
|
+
}
|
|
76
|
+
const refined = await this.refineLiveness(resolved.members);
|
|
77
|
+
const composed = composeView(resolved.id, refined, {
|
|
78
|
+
resolveHost: (id) => this.deps.resolveHost(id),
|
|
79
|
+
});
|
|
80
|
+
return provider.openView(composed);
|
|
81
|
+
}
|
|
82
|
+
/** List saved views + the rig names openable as derived views. */
|
|
83
|
+
async listViews() {
|
|
84
|
+
return {
|
|
85
|
+
saved: this.deps.viewsStore.list(),
|
|
86
|
+
rigs: await this.deps.listRigNames(),
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
/** Provider availability + liveness (doctor). Unknown named provider → empty report for it. */
|
|
90
|
+
async status(providerName) {
|
|
91
|
+
const names = providerName ? [providerName] : ["herdr", "cmux"];
|
|
92
|
+
const providers = [];
|
|
93
|
+
for (const name of names) {
|
|
94
|
+
const p = this.deps.resolveProvider(name);
|
|
95
|
+
if (!p) {
|
|
96
|
+
providers.push({
|
|
97
|
+
name,
|
|
98
|
+
status: { provider: name, available: false, capabilities: {} },
|
|
99
|
+
liveness: { alive: false, detail: `unknown provider '${name}'` },
|
|
100
|
+
});
|
|
101
|
+
continue;
|
|
102
|
+
}
|
|
103
|
+
providers.push({ name, status: await p.status(), liveness: await p.liveness() });
|
|
104
|
+
}
|
|
105
|
+
return { providers };
|
|
106
|
+
}
|
|
107
|
+
/** Resolve a view argument into composer-ready members (precedence in the file header). */
|
|
108
|
+
async resolveView(view) {
|
|
109
|
+
// 1. derived scope prefixes → live, read-only, never persisted.
|
|
110
|
+
if (view.startsWith("mission:") || view.startsWith("slice:")) {
|
|
111
|
+
const rows = await this.deps.listScopeSeats(view);
|
|
112
|
+
if (rows == null) {
|
|
113
|
+
return { code: "view_not_found", error: `unknown or invalid scope '${view}'` };
|
|
114
|
+
}
|
|
115
|
+
return {
|
|
116
|
+
id: view,
|
|
117
|
+
members: deriveViewMembers(rows, { readOnly: true, labelSuffix: view }),
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
// 2. a pod within a rig — `pod:<rig-id-or-name>/<podNamespace>` (AC-5 launcher
|
|
121
|
+
// target). Interactive (a subset of your own rig).
|
|
122
|
+
if (view.startsWith("pod:")) {
|
|
123
|
+
const rest = view.slice("pod:".length);
|
|
124
|
+
const slash = rest.lastIndexOf("/");
|
|
125
|
+
if (slash <= 0 || slash === rest.length - 1) {
|
|
126
|
+
return { code: "view_not_found", error: `malformed pod view '${view}' — expected pod:<rig>/<pod>` };
|
|
127
|
+
}
|
|
128
|
+
const rows = await this.deps.listPodSeats(rest.slice(0, slash), rest.slice(slash + 1));
|
|
129
|
+
if (rows == null) {
|
|
130
|
+
return { code: "view_not_found", error: `unknown pod '${rest.slice(slash + 1)}' in rig '${rest.slice(0, slash)}'` };
|
|
131
|
+
}
|
|
132
|
+
return { id: view, members: deriveViewMembers(rows, { readOnly: false }) };
|
|
133
|
+
}
|
|
134
|
+
// 3. a rig — either the bare name (the common case: `rig terminal open acme`)
|
|
135
|
+
// or the explicit `rig:<id-or-name>` form the rig-scoped route alias
|
|
136
|
+
// composes (arch R1: the alias just prefixes `rig:<rigId>` and delegates,
|
|
137
|
+
// zero composition logic of its own). `listRigSeats` resolves the arg as
|
|
138
|
+
// a rig name first, then as a rig id.
|
|
139
|
+
const explicitRig = view.startsWith("rig:");
|
|
140
|
+
const rigArg = explicitRig ? view.slice("rig:".length) : view;
|
|
141
|
+
const rigRows = await this.deps.listRigSeats(rigArg);
|
|
142
|
+
if (rigRows != null) {
|
|
143
|
+
return { id: `rig:${rigArg}`, members: deriveViewMembers(rigRows, { readOnly: false }) };
|
|
144
|
+
}
|
|
145
|
+
// An explicit `rig:<x>` that resolves to no rig is a named not-found — it must
|
|
146
|
+
// NOT fall through to the saved-view lookup (the caller asked for a rig).
|
|
147
|
+
if (explicitRig) {
|
|
148
|
+
return { code: "view_not_found", error: `unknown rig '${rigArg}'` };
|
|
149
|
+
}
|
|
150
|
+
// 4. a saved-view id.
|
|
151
|
+
const saved = this.deps.viewsStore.get(view);
|
|
152
|
+
if (saved) {
|
|
153
|
+
return { id: saved.id, members: saved.members.map(savedMemberToInput) };
|
|
154
|
+
}
|
|
155
|
+
return {
|
|
156
|
+
code: "view_not_found",
|
|
157
|
+
error: `unknown view '${view}' — not a known rig, a mission:/slice: scope, or a saved-view id`,
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
/** Refine local members' liveness with a real has-session probe (a dead seat → absent, honest-partial). */
|
|
161
|
+
async refineLiveness(members) {
|
|
162
|
+
const out = [];
|
|
163
|
+
for (const m of members) {
|
|
164
|
+
if (m.host === null && m.tmuxSession) {
|
|
165
|
+
out.push({ ...m, alive: await this.deps.hasSession(m.tmuxSession) });
|
|
166
|
+
}
|
|
167
|
+
else {
|
|
168
|
+
out.push(m);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
return out;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
//# sourceMappingURL=terminal-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terminal-service.js","sourceRoot":"","sources":["../../../src/domain/terminal/terminal-service.ts"],"names":[],"mappings":"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"}
|