@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 @@
|
|
|
1
|
+
{"version":3,"file":"tmux-option-defaults.js","sourceRoot":"","sources":["../../src/domain/tmux-option-defaults.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAyB/C;;;;;;;;;;;;;;;GAeG;AACH,MAAM,OAAO,yBAAyB;IAC5B,WAAW,CAAc;IACzB,sBAAsB,CAA+B;IACrD,QAAQ,CAAkB;IAC1B,UAAU,CAA2B;IACrC,sBAAsB,GAAG,KAAK,CAAC;IAEvC,YAAY,IAA4B;QACtC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;QACpC,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,sBAAsB,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;QAC5F,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC;QAClD,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,iBAAiB,CAAC;IACzD,CAAC;IAED;;;;;;;;;;;;OAYG;IACH,KAAK,CAAC,mBAAmB,CAAC,WAAmB;QAC3C,MAAM,QAAQ,GAAa,EAAE,CAAC;QAE9B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,WAAW,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;QAClF,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;YACd,QAAQ,CAAC,IAAI,CAAC,mCAAmC,WAAW,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACpF,CAAC;QAED,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,IAAI,CAAC;YACH,SAAS,GAAG,IAAI,CAAC,sBAAsB,EAAE,CAAC,SAAS,KAAK,IAAI,CAAC;QAC/D,CAAC;QAAC,MAAM,CAAC;YACP,SAAS,GAAG,KAAK,CAAC;QACpB,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,WAAW,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACxG,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YACf,QAAQ,CAAC,IAAI,CAAC,oCAAoC,WAAW,KAAK,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;QACtF,CAAC;QAED,MAAM,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;QAC1C,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;;;;;;;;;;;OAYG;IACK,KAAK,CAAC,oBAAoB,CAAC,QAAkB;QACnD,IAAI,IAAI,CAAC,sBAAsB;YAAE,OAAO;QACxC,sEAAsE;QACtE,uBAAuB;QACvB,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC;QAEnC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;QAC3E,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;YACb,QAAQ,CAAC,IAAI,CAAC,+CAA+C,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QAC/E,CAAC;QAED,MAAM,WAAW,GAAG,kBAAkB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QACvE,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;YACzB,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;YAC/E,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBACX,QAAQ,CAAC,IAAI,CAAC,8CAA8C,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;YAC5E,CAAC;QACH,CAAC;IACH,CAAC;CACF;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,kBAAkB,CAChC,QAAyB,EACzB,UAAoC;IAEpC,IAAI,QAAQ,KAAK,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAC3C,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QACzB,IAAI,UAAU,CAAC,SAAS,CAAC;YAAE,OAAO,SAAS,CAAC;QAC5C,IAAI,UAAU,CAAC,OAAO,CAAC;YAAE,OAAO,+BAA+B,CAAC;QAChE,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;GAIG;AACH,SAAS,iBAAiB,CAAC,GAAW;IACpC,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,SAAS,CAAC,cAAc,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC3E,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;IACxB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import type { TopologyManifest } from "./topology-manifest.js";
|
|
2
|
+
import type { HostEntry, HostRegistryLoadResult } from "../hosts/hosts-registry-reader.js";
|
|
3
|
+
export type TopologyEntryStatus = "ok" | "failed" | "skipped";
|
|
4
|
+
export interface TopologyEntryResult {
|
|
5
|
+
rigRef: string;
|
|
6
|
+
/** Uniform on every entry: the placed host id, or the literal "local". */
|
|
7
|
+
host: string;
|
|
8
|
+
status: TopologyEntryStatus;
|
|
9
|
+
error?: string;
|
|
10
|
+
}
|
|
11
|
+
export interface TopologyLaunchResult {
|
|
12
|
+
/** True ONLY when every entry is ok (FR-5 — no false green). */
|
|
13
|
+
ok: boolean;
|
|
14
|
+
entries: TopologyEntryResult[];
|
|
15
|
+
}
|
|
16
|
+
export interface MultiRigLauncherDeps {
|
|
17
|
+
/** The SAME public lock pair the up route uses (bootstrap-orchestrator). */
|
|
18
|
+
tryAcquire: (sourceRef: string) => boolean;
|
|
19
|
+
release: (sourceRef: string) => void;
|
|
20
|
+
/** The existing local single-rig leaf (public bootstrap() via routes/up.ts
|
|
21
|
+
* wiring). Resolves ok:false with the leaf's own error on failure — the
|
|
22
|
+
* launcher invents no failure taxonomy. */
|
|
23
|
+
launchLocal: (source: string) => Promise<{
|
|
24
|
+
ok: boolean;
|
|
25
|
+
error?: string;
|
|
26
|
+
}>;
|
|
27
|
+
/** The shipped remote POST /api/up leaf for a placed entry. */
|
|
28
|
+
launchRemote: (source: string, host: HostEntry) => Promise<{
|
|
29
|
+
ok: boolean;
|
|
30
|
+
error?: string;
|
|
31
|
+
}>;
|
|
32
|
+
/** Lazy hosts-registry read (shared reader) — consulted only when the
|
|
33
|
+
* manifest actually places entries on hosts. */
|
|
34
|
+
loadRegistry: () => HostRegistryLoadResult;
|
|
35
|
+
/** Resolve a local entry's manifest source string to the EXACT ref used
|
|
36
|
+
* for BOTH the lock and the leaf (guard fixback F1): the orchestrator
|
|
37
|
+
* normalizes lock keys with path.resolve, so locking the raw relative
|
|
38
|
+
* string would key against the daemon cwd while the leaf launches the
|
|
39
|
+
* manifest-dir-resolved file — false lock negatives (standalone up of
|
|
40
|
+
* the real path doesn't conflict) AND false positives (two manifests'
|
|
41
|
+
* './a.yaml' collide across different files). Identity when omitted. */
|
|
42
|
+
resolveLocalRef?: (source: string) => string;
|
|
43
|
+
}
|
|
44
|
+
export declare class MultiRigLauncher {
|
|
45
|
+
private deps;
|
|
46
|
+
constructor(deps: MultiRigLauncherDeps);
|
|
47
|
+
launch(manifest: TopologyManifest): Promise<TopologyLaunchResult>;
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=multi-rig-launcher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"multi-rig-launcher.d.ts","sourceRoot":"","sources":["../../../src/domain/topology/multi-rig-launcher.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,KAAK,EAAE,SAAS,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAG3F,MAAM,MAAM,mBAAmB,GAAG,IAAI,GAAG,QAAQ,GAAG,SAAS,CAAC;AAE9D,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,0EAA0E;IAC1E,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,mBAAmB,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,oBAAoB;IACnC,gEAAgE;IAChE,EAAE,EAAE,OAAO,CAAC;IACZ,OAAO,EAAE,mBAAmB,EAAE,CAAC;CAChC;AAED,MAAM,WAAW,oBAAoB;IACnC,4EAA4E;IAC5E,UAAU,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC;IAC3C,OAAO,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC;;gDAE4C;IAC5C,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC1E,+DAA+D;IAC/D,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,KAAK,OAAO,CAAC;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC5F;qDACiD;IACjD,YAAY,EAAE,MAAM,sBAAsB,CAAC;IAC3C;;;;;;6EAMyE;IACzE,eAAe,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC;CAC9C;AAKD,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,IAAI,CAAuB;gBAEvB,IAAI,EAAE,oBAAoB;IAIhC,MAAM,CAAC,QAAQ,EAAE,gBAAgB,GAAG,OAAO,CAAC,oBAAoB,CAAC;CAqGxE"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
// OPR.0.4.4.11 — MultiRigLauncher: the THIN walker (FR-3/FR-4/FR-5).
|
|
2
|
+
//
|
|
3
|
+
// It INVOKES the existing single-rig leaves — it never re-implements stages,
|
|
4
|
+
// locks, provenance, or result shapes. A local entry runs through the SAME
|
|
5
|
+
// public bootstrap() entry + tryAcquire/release lock pair routes/up.ts uses
|
|
6
|
+
// (guard G-2: the per-sourceRef lock is ROUTE-side today — bootstrap() never
|
|
7
|
+
// acquires; the launcher explicitly participates in that same lock set,
|
|
8
|
+
// acquire before the leaf, release in finally on success AND failure). A
|
|
9
|
+
// host-placed entry runs through the shipped remote POST /api/up leaf. Both
|
|
10
|
+
// leaves are injected so this module stays testable and the wiring in
|
|
11
|
+
// routes/up.ts (the ONLY production caller) binds the real seams.
|
|
12
|
+
//
|
|
13
|
+
// Aggregate contract (arch ruling 5, verbatim): status is the CLOSED enum
|
|
14
|
+
// {ok | failed | skipped}; entries after the failed one report `skipped`
|
|
15
|
+
// EXPLICITLY (never absent — omission-proof); `host` is present uniformly on
|
|
16
|
+
// every entry (the literal "local" for local entries); overall success =
|
|
17
|
+
// every entry ok. Stop-on-failure is the ONLY v0 behavior (FR-5): no new
|
|
18
|
+
// entry starts after a failure; already-started rigs are reported honestly
|
|
19
|
+
// (mixed state, no rollback ceremony).
|
|
20
|
+
import { resolvePlacementHost } from "../hosts/hosts-registry-reader.js";
|
|
21
|
+
/** Mirrors the route's 409 lock-conflict semantics for a topology entry. */
|
|
22
|
+
const LOCK_CONFLICT_ERROR = "Already in progress for this source (conflict): a concurrent up holds this rig's launch lock";
|
|
23
|
+
export class MultiRigLauncher {
|
|
24
|
+
deps;
|
|
25
|
+
constructor(deps) {
|
|
26
|
+
this.deps = deps;
|
|
27
|
+
}
|
|
28
|
+
async launch(manifest) {
|
|
29
|
+
const entries = manifest.rigs;
|
|
30
|
+
// Every entry starts explicitly skipped — an entry the walk never
|
|
31
|
+
// reaches is REPORTED, not absent (omission-proof aggregate).
|
|
32
|
+
const results = entries.map((e) => ({
|
|
33
|
+
rigRef: e.source,
|
|
34
|
+
host: e.host ?? "local",
|
|
35
|
+
status: "skipped",
|
|
36
|
+
}));
|
|
37
|
+
// ── Pre-launch placement validation (FR-1/FR-4: per-entry structured
|
|
38
|
+
// errors BEFORE any launch attempt). Registry is read once, only if a
|
|
39
|
+
// host-placed entry exists. Any placement failure aborts the whole run
|
|
40
|
+
// before the first leaf call: bad entries report failed, the rest stay
|
|
41
|
+
// skipped.
|
|
42
|
+
const placed = new Map();
|
|
43
|
+
if (entries.some((e) => e.host !== undefined)) {
|
|
44
|
+
const reg = this.deps.loadRegistry();
|
|
45
|
+
let placementFailed = false;
|
|
46
|
+
for (let i = 0; i < entries.length; i++) {
|
|
47
|
+
const hostId = entries[i].host;
|
|
48
|
+
if (hostId === undefined)
|
|
49
|
+
continue;
|
|
50
|
+
if (!reg.ok) {
|
|
51
|
+
results[i] = { ...results[i], status: "failed", error: reg.error };
|
|
52
|
+
placementFailed = true;
|
|
53
|
+
continue;
|
|
54
|
+
}
|
|
55
|
+
const res = resolvePlacementHost(reg.registry, hostId);
|
|
56
|
+
if (!res.ok) {
|
|
57
|
+
results[i] = { ...results[i], status: "failed", error: res.error };
|
|
58
|
+
placementFailed = true;
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
placed.set(i, res.host);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
if (placementFailed)
|
|
65
|
+
return { ok: false, entries: results };
|
|
66
|
+
}
|
|
67
|
+
// ── Staged walk: entries START in manifest order under the fixed cap
|
|
68
|
+
// (default 1 = strictly sequential); a failure stops all further starts
|
|
69
|
+
// while in-flight entries complete and report honestly.
|
|
70
|
+
let nextIndex = 0;
|
|
71
|
+
let stopped = false;
|
|
72
|
+
const runEntry = async (i) => {
|
|
73
|
+
const entry = entries[i];
|
|
74
|
+
const hostEntry = placed.get(i);
|
|
75
|
+
try {
|
|
76
|
+
if (hostEntry) {
|
|
77
|
+
const res = await this.deps.launchRemote(entry.source, hostEntry);
|
|
78
|
+
results[i] = {
|
|
79
|
+
rigRef: entry.source,
|
|
80
|
+
host: hostEntry.id,
|
|
81
|
+
status: res.ok ? "ok" : "failed",
|
|
82
|
+
...(res.ok ? {} : { error: res.error ?? "remote up failed" }),
|
|
83
|
+
};
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
// Local: the route-side lock discipline, explicitly (guard G-2).
|
|
87
|
+
// Lock key and launch ref are the SAME resolved string (guard F1) —
|
|
88
|
+
// the aggregate's rigRef stays the raw manifest string for display.
|
|
89
|
+
const launchRef = this.deps.resolveLocalRef ? this.deps.resolveLocalRef(entry.source) : entry.source;
|
|
90
|
+
if (!this.deps.tryAcquire(launchRef)) {
|
|
91
|
+
results[i] = { rigRef: entry.source, host: "local", status: "failed", error: LOCK_CONFLICT_ERROR };
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
try {
|
|
95
|
+
const res = await this.deps.launchLocal(launchRef);
|
|
96
|
+
results[i] = {
|
|
97
|
+
rigRef: entry.source,
|
|
98
|
+
host: "local",
|
|
99
|
+
status: res.ok ? "ok" : "failed",
|
|
100
|
+
...(res.ok ? {} : { error: res.error ?? "bootstrap failed" }),
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
finally {
|
|
104
|
+
this.deps.release(launchRef);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
catch (err) {
|
|
108
|
+
results[i] = {
|
|
109
|
+
rigRef: entry.source,
|
|
110
|
+
host: hostEntry ? hostEntry.id : "local",
|
|
111
|
+
status: "failed",
|
|
112
|
+
error: err.message,
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
};
|
|
116
|
+
const cap = Math.max(1, manifest.concurrency);
|
|
117
|
+
const workers = Array.from({ length: Math.min(cap, entries.length) }, async () => {
|
|
118
|
+
while (!stopped) {
|
|
119
|
+
const i = nextIndex;
|
|
120
|
+
if (i >= entries.length)
|
|
121
|
+
return;
|
|
122
|
+
nextIndex += 1;
|
|
123
|
+
await runEntry(i);
|
|
124
|
+
if (results[i].status === "failed")
|
|
125
|
+
stopped = true; // FR-5: stop at the failed entry
|
|
126
|
+
}
|
|
127
|
+
});
|
|
128
|
+
await Promise.all(workers);
|
|
129
|
+
return { ok: results.every((r) => r.status === "ok"), entries: results };
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=multi-rig-launcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"multi-rig-launcher.js","sourceRoot":"","sources":["../../../src/domain/topology/multi-rig-launcher.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,EAAE;AACF,6EAA6E;AAC7E,2EAA2E;AAC3E,4EAA4E;AAC5E,6EAA6E;AAC7E,wEAAwE;AACxE,yEAAyE;AACzE,4EAA4E;AAC5E,sEAAsE;AACtE,kEAAkE;AAClE,EAAE;AACF,0EAA0E;AAC1E,yEAAyE;AACzE,6EAA6E;AAC7E,yEAAyE;AACzE,yEAAyE;AACzE,2EAA2E;AAC3E,uCAAuC;AAIvC,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AAyCzE,4EAA4E;AAC5E,MAAM,mBAAmB,GAAG,8FAA8F,CAAC;AAE3H,MAAM,OAAO,gBAAgB;IACnB,IAAI,CAAuB;IAEnC,YAAY,IAA0B;QACpC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,QAA0B;QACrC,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC;QAC9B,kEAAkE;QAClE,8DAA8D;QAC9D,MAAM,OAAO,GAA0B,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACzD,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,OAAO;YACvB,MAAM,EAAE,SAAgC;SACzC,CAAC,CAAC,CAAC;QAEJ,sEAAsE;QACtE,sEAAsE;QACtE,uEAAuE;QACvE,uEAAuE;QACvE,WAAW;QACX,MAAM,MAAM,GAAG,IAAI,GAAG,EAAqB,CAAC;QAC5C,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,EAAE,CAAC;YAC9C,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACrC,IAAI,eAAe,GAAG,KAAK,CAAC;YAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACxC,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAE,CAAC,IAAI,CAAC;gBAChC,IAAI,MAAM,KAAK,SAAS;oBAAE,SAAS;gBACnC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;oBACZ,OAAO,CAAC,CAAC,CAAE,GAAG,EAAE,GAAG,OAAO,CAAC,CAAC,CAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC;oBACrE,eAAe,GAAG,IAAI,CAAC;oBACvB,SAAS;gBACX,CAAC;gBACD,MAAM,GAAG,GAAG,oBAAoB,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;gBACvD,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;oBACZ,OAAO,CAAC,CAAC,CAAE,GAAG,EAAE,GAAG,OAAO,CAAC,CAAC,CAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC;oBACrE,eAAe,GAAG,IAAI,CAAC;gBACzB,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;gBAC1B,CAAC;YACH,CAAC;YACD,IAAI,eAAe;gBAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;QAC9D,CAAC;QAED,sEAAsE;QACtE,wEAAwE;QACxE,wDAAwD;QACxD,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,IAAI,OAAO,GAAG,KAAK,CAAC;QAEpB,MAAM,QAAQ,GAAG,KAAK,EAAE,CAAS,EAAiB,EAAE;YAClD,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAE,CAAC;YAC1B,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAChC,IAAI,CAAC;gBACH,IAAI,SAAS,EAAE,CAAC;oBACd,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;oBAClE,OAAO,CAAC,CAAC,CAAC,GAAG;wBACX,MAAM,EAAE,KAAK,CAAC,MAAM;wBACpB,IAAI,EAAE,SAAS,CAAC,EAAE;wBAClB,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ;wBAChC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,kBAAkB,EAAE,CAAC;qBAC9D,CAAC;oBACF,OAAO;gBACT,CAAC;gBACD,iEAAiE;gBACjE,oEAAoE;gBACpE,oEAAoE;gBACpE,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;gBACrG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;oBACrC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,mBAAmB,EAAE,CAAC;oBACnG,OAAO;gBACT,CAAC;gBACD,IAAI,CAAC;oBACH,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;oBACnD,OAAO,CAAC,CAAC,CAAC,GAAG;wBACX,MAAM,EAAE,KAAK,CAAC,MAAM;wBACpB,IAAI,EAAE,OAAO;wBACb,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ;wBAChC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,kBAAkB,EAAE,CAAC;qBAC9D,CAAC;gBACJ,CAAC;wBAAS,CAAC;oBACT,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;gBAC/B,CAAC;YACH,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,CAAC,CAAC,GAAG;oBACX,MAAM,EAAE,KAAK,CAAC,MAAM;oBACpB,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO;oBACxC,MAAM,EAAE,QAAQ;oBAChB,KAAK,EAAG,GAAa,CAAC,OAAO;iBAC9B,CAAC;YACJ,CAAC;QACH,CAAC,CAAC;QAEF,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC;QAC9C,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,IAAI,EAAE;YAC/E,OAAO,CAAC,OAAO,EAAE,CAAC;gBAChB,MAAM,CAAC,GAAG,SAAS,CAAC;gBACpB,IAAI,CAAC,IAAI,OAAO,CAAC,MAAM;oBAAE,OAAO;gBAChC,SAAS,IAAI,CAAC,CAAC;gBACf,MAAM,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAClB,IAAI,OAAO,CAAC,CAAC,CAAE,CAAC,MAAM,KAAK,QAAQ;oBAAE,OAAO,GAAG,IAAI,CAAC,CAAC,iCAAiC;YACxF,CAAC;QACH,CAAC,CAAC,CAAC;QACH,MAAM,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAE3B,OAAO,EAAE,EAAE,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;IAC3E,CAAC;CACF"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { HttpHostEntry } from "../hosts/hosts-registry-reader.js";
|
|
2
|
+
export interface RemoteUpLeafDeps {
|
|
3
|
+
/** Injected for tests; defaults to global fetch. */
|
|
4
|
+
fetchImpl?: typeof fetch;
|
|
5
|
+
env?: Record<string, string | undefined>;
|
|
6
|
+
readFile?: (path: string) => string;
|
|
7
|
+
/** Bounded remote-up deadline (rev1-r2 R2-B1). Defaults to the
|
|
8
|
+
* long-running rig-up budget — remote bootstrap legitimately runs
|
|
9
|
+
* minutes, but never forever. Passed EXPLICITLY to the shared core
|
|
10
|
+
* (the deadline class is this call-site's decision, per the arch
|
|
11
|
+
* required-argument sharpening). */
|
|
12
|
+
timeoutMs?: number;
|
|
13
|
+
}
|
|
14
|
+
/** Matches the CLI's LONG_RUNNING_UP_TIMEOUT_MS for standalone remote ups. */
|
|
15
|
+
export declare const REMOTE_UP_TIMEOUT_MS = 120000;
|
|
16
|
+
export interface RemoteUpBody {
|
|
17
|
+
sourceRef: string;
|
|
18
|
+
autoApprove?: boolean;
|
|
19
|
+
}
|
|
20
|
+
/** POST the placed entry to the remote daemon's shipped /api/up. Returns the
|
|
21
|
+
* launcher's normalized {ok, error?} shape; the remote daemon's own error
|
|
22
|
+
* text rides through verbatim where available. Never hangs: the shared
|
|
23
|
+
* core holds ONE deadline through request AND body parse (the G-R2B1-1
|
|
24
|
+
* class is structurally closed there). */
|
|
25
|
+
export declare function remoteUpLeaf(body: RemoteUpBody, host: HttpHostEntry, deps?: RemoteUpLeafDeps): Promise<{
|
|
26
|
+
ok: boolean;
|
|
27
|
+
error?: string;
|
|
28
|
+
}>;
|
|
29
|
+
//# sourceMappingURL=remote-up-leaf.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remote-up-leaf.d.ts","sourceRoot":"","sources":["../../../src/domain/topology/remote-up-leaf.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAGvE,MAAM,WAAW,gBAAgB;IAC/B,oDAAoD;IACpD,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IACzC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IACpC;;;;yCAIqC;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,8EAA8E;AAC9E,eAAO,MAAM,oBAAoB,SAAU,CAAC;AAE5C,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED;;;;2CAI2C;AAC3C,wBAAsB,YAAY,CAChC,IAAI,EAAE,YAAY,EAClB,IAAI,EAAE,aAAa,EACnB,IAAI,GAAE,gBAAqB,GAC1B,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAsC1C"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
// OPR.0.4.4.11 — the daemon-side remote single-rig leaf (FR-4).
|
|
2
|
+
//
|
|
3
|
+
// A host-placed topology entry launches by POSTing the SHIPPED remote-up
|
|
4
|
+
// surface: POST {host.url}/api/up with the same body shape the CLI's
|
|
5
|
+
// --host path sends. Since OPR.0.4.4.15 this is a THIN CONSUMER of the
|
|
6
|
+
// shared daemon→daemon transport core (domain/hosts/remote-daemon-http.ts
|
|
7
|
+
// — arch cell 1: ONE copy of the security-adjacent bearer/bounded-abort/
|
|
8
|
+
// classification code for the whole P3/P4 family). This module keeps its
|
|
9
|
+
// shipped error-string surface byte-for-byte; only the transport plumbing
|
|
10
|
+
// moved. The failure classes remain the EXISTING ones ([permission-gate] /
|
|
11
|
+
// [remote-command-failed] / [remote-daemon-unreachable]) — no new taxonomy
|
|
12
|
+
// (FR-4 negative AC).
|
|
13
|
+
import { remoteJsonRequest } from "../hosts/remote-daemon-http.js";
|
|
14
|
+
/** Matches the CLI's LONG_RUNNING_UP_TIMEOUT_MS for standalone remote ups. */
|
|
15
|
+
export const REMOTE_UP_TIMEOUT_MS = 120_000;
|
|
16
|
+
/** POST the placed entry to the remote daemon's shipped /api/up. Returns the
|
|
17
|
+
* launcher's normalized {ok, error?} shape; the remote daemon's own error
|
|
18
|
+
* text rides through verbatim where available. Never hangs: the shared
|
|
19
|
+
* core holds ONE deadline through request AND body parse (the G-R2B1-1
|
|
20
|
+
* class is structurally closed there). */
|
|
21
|
+
export async function remoteUpLeaf(body, host, deps = {}) {
|
|
22
|
+
const timeoutMs = deps.timeoutMs ?? REMOTE_UP_TIMEOUT_MS;
|
|
23
|
+
const url = `${host.url.replace(/\/$/, "")}/api/up`;
|
|
24
|
+
const res = await remoteJsonRequest(host, "/api/up", {
|
|
25
|
+
method: "POST",
|
|
26
|
+
body,
|
|
27
|
+
timeoutMs,
|
|
28
|
+
fetchImpl: deps.fetchImpl,
|
|
29
|
+
env: deps.env,
|
|
30
|
+
readFile: deps.readFile,
|
|
31
|
+
});
|
|
32
|
+
if (res.ok)
|
|
33
|
+
return { ok: true };
|
|
34
|
+
switch (res.kind) {
|
|
35
|
+
case "bearer":
|
|
36
|
+
return { ok: false, error: `[permission-gate] ${res.detail}` };
|
|
37
|
+
case "timeout":
|
|
38
|
+
// R2-B1 / G-R2B1-1: a stalled remote /api/up — before OR after
|
|
39
|
+
// headers — is a STRUCTURED per-entry failure, never a hung walk.
|
|
40
|
+
return res.phase === "body"
|
|
41
|
+
? {
|
|
42
|
+
ok: false,
|
|
43
|
+
error: `[remote-daemon-unreachable] POST ${url} timed out after ${timeoutMs}ms for host ${host.id}: response headers arrived (HTTP ${res.status}) but the error body never completed`,
|
|
44
|
+
}
|
|
45
|
+
: {
|
|
46
|
+
ok: false,
|
|
47
|
+
error: `[remote-daemon-unreachable] POST ${url} timed out after ${timeoutMs}ms for host ${host.id}: the remote daemon never settled the request within the rig-up budget`,
|
|
48
|
+
};
|
|
49
|
+
case "network":
|
|
50
|
+
return { ok: false, error: `[remote-daemon-unreachable] POST ${url} failed for host ${host.id}: ${res.detail}` };
|
|
51
|
+
case "http": {
|
|
52
|
+
// Same classification vocabulary as the CLI transport (classifyHttpFailedStep).
|
|
53
|
+
const status = res.status ?? 0;
|
|
54
|
+
const cls = status === 401 || status === 403 ? "permission-gate" : status >= 400 && status < 600 ? "remote-command-failed" : "remote-daemon-unreachable";
|
|
55
|
+
const detail = res.detail ? `HTTP ${res.status}: ${res.detail}` : `HTTP ${res.status}`;
|
|
56
|
+
return { ok: false, error: `[${cls}] remote up on host ${host.id} failed: ${detail}` };
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=remote-up-leaf.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remote-up-leaf.js","sourceRoot":"","sources":["../../../src/domain/topology/remote-up-leaf.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAChE,EAAE;AACF,yEAAyE;AACzE,qEAAqE;AACrE,uEAAuE;AACvE,0EAA0E;AAC1E,yEAAyE;AACzE,yEAAyE;AACzE,0EAA0E;AAC1E,2EAA2E;AAC3E,2EAA2E;AAC3E,sBAAsB;AAGtB,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAenE,8EAA8E;AAC9E,MAAM,CAAC,MAAM,oBAAoB,GAAG,OAAO,CAAC;AAO5C;;;;2CAI2C;AAC3C,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,IAAkB,EAClB,IAAmB,EACnB,OAAyB,EAAE;IAE3B,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,oBAAoB,CAAC;IACzD,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,SAAS,CAAC;IACpD,MAAM,GAAG,GAAG,MAAM,iBAAiB,CAAC,IAAI,EAAE,SAAS,EAAE;QACnD,MAAM,EAAE,MAAM;QACd,IAAI;QACJ,SAAS;QACT,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,GAAG,EAAE,IAAI,CAAC,GAAG;QACb,QAAQ,EAAE,IAAI,CAAC,QAAQ;KACxB,CAAC,CAAC;IACH,IAAI,GAAG,CAAC,EAAE;QAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;IAEhC,QAAQ,GAAG,CAAC,IAAI,EAAE,CAAC;QACjB,KAAK,QAAQ;YACX,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,qBAAqB,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC;QACjE,KAAK,SAAS;YACZ,+DAA+D;YAC/D,kEAAkE;YAClE,OAAO,GAAG,CAAC,KAAK,KAAK,MAAM;gBACzB,CAAC,CAAC;oBACE,EAAE,EAAE,KAAK;oBACT,KAAK,EAAE,oCAAoC,GAAG,oBAAoB,SAAS,eAAe,IAAI,CAAC,EAAE,oCAAoC,GAAG,CAAC,MAAM,sCAAsC;iBACtL;gBACH,CAAC,CAAC;oBACE,EAAE,EAAE,KAAK;oBACT,KAAK,EAAE,oCAAoC,GAAG,oBAAoB,SAAS,eAAe,IAAI,CAAC,EAAE,wEAAwE;iBAC1K,CAAC;QACR,KAAK,SAAS;YACZ,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,oCAAoC,GAAG,oBAAoB,IAAI,CAAC,EAAE,KAAK,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC;QACnH,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,gFAAgF;YAChF,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC;YAC/B,MAAM,GAAG,GAAG,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,MAAM,IAAI,GAAG,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,2BAA2B,CAAC;YACzJ,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,MAAM,KAAK,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,MAAM,EAAE,CAAC;YACvF,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,GAAG,uBAAuB,IAAI,CAAC,EAAE,YAAY,MAAM,EAAE,EAAE,CAAC;QACzF,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
export interface TopologyRigEntry {
|
|
2
|
+
source: string;
|
|
3
|
+
host?: string;
|
|
4
|
+
}
|
|
5
|
+
export interface TopologyManifest {
|
|
6
|
+
rigs: TopologyRigEntry[];
|
|
7
|
+
/** Normalized: the manifest's cap, or the default 1 (sequential). */
|
|
8
|
+
concurrency: number;
|
|
9
|
+
}
|
|
10
|
+
export type TopologyManifestResult = {
|
|
11
|
+
ok: true;
|
|
12
|
+
manifest: TopologyManifest;
|
|
13
|
+
} | {
|
|
14
|
+
ok: false;
|
|
15
|
+
errors: string[];
|
|
16
|
+
};
|
|
17
|
+
/** Validate an already-parsed YAML document as a topology manifest.
|
|
18
|
+
* Collects EVERY structural error (per-entry, what/why/fix) rather than
|
|
19
|
+
* failing fast — FR-1 reports them all before any launch. */
|
|
20
|
+
export declare function validateTopologyManifest(parsed: unknown, sourcePath: string): TopologyManifestResult;
|
|
21
|
+
/** Load + parse + validate a topology manifest file. Parse failures error AS
|
|
22
|
+
* a topology (arch ruling 1: the declared kind binds — no rig-spec
|
|
23
|
+
* fall-through). */
|
|
24
|
+
export declare function loadTopologyManifest(path: string): TopologyManifestResult;
|
|
25
|
+
/** Detection sniff (FR-1 + guard G-1/yaml folds): a parsed YAML document is
|
|
26
|
+
* topology-SHAPED iff it carries a top-level `rigs:` LIST. A rig spec never
|
|
27
|
+
* carries top-level `rigs`, so the sniff is unambiguous. Shape only — full
|
|
28
|
+
* validation still runs (and rejects) as a topology afterwards. */
|
|
29
|
+
export declare function hasTopLevelRigsList(parsed: unknown): boolean;
|
|
30
|
+
/** Raw-text form of the sniff for router branches that have not parsed yet
|
|
31
|
+
* (the extensionless path-form fallback). Unparseable YAML sniffs false —
|
|
32
|
+
* it then flows to the existing non-topology handling unchanged. */
|
|
33
|
+
export declare function yamlTextHasTopLevelRigsList(raw: string): boolean;
|
|
34
|
+
//# sourceMappingURL=topology-manifest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"topology-manifest.d.ts","sourceRoot":"","sources":["../../../src/domain/topology/topology-manifest.ts"],"names":[],"mappings":"AA0BA,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,gBAAgB,EAAE,CAAC;IACzB,qEAAqE;IACrE,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,MAAM,sBAAsB,GAC9B;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,EAAE,gBAAgB,CAAA;CAAE,GACxC;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC;AAoCpC;;8DAE8D;AAC9D,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,GAAG,sBAAsB,CA+FpG;AAED;;qBAEqB;AACrB,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,sBAAsB,CAsBzE;AAED;;;oEAGoE;AACpE,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAG5D;AAED;;qEAEqE;AACrE,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAMhE"}
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
// OPR.0.4.4.11 — the topology manifest: the SHAREABLE artifact (FR-1).
|
|
2
|
+
//
|
|
3
|
+
// The key set is CLOSED (arch return R11-1 — this IS the thin-manifest
|
|
4
|
+
// enforcement): an ordered `rigs[]` of entries {source, host?} plus an
|
|
5
|
+
// optional manifest-level `concurrency` cap (default 1 = sequential).
|
|
6
|
+
// NOTHING ELSE. Unknown keys reject loudly — silently ignoring one would
|
|
7
|
+
// reopen the founder's ratified non-goal by stealth. Cross-rig
|
|
8
|
+
// edge/routing/dependency keys reject with a message NAMING that non-goal
|
|
9
|
+
// (thin manifest; inter-rig routing is deferred topology-Q1). `on_failure`
|
|
10
|
+
// was considered and REMOVED for v0 (spec-guard + arch fold): stop-on-failure
|
|
11
|
+
// is the only behavior; re-adding it is an explicit pm-lead decision.
|
|
12
|
+
//
|
|
13
|
+
// Detection contract (PRD FR-1 + guard G-1 folds; the router consumes the
|
|
14
|
+
// exported sniffs): `.rigtopology` extension OR a YAML document with a
|
|
15
|
+
// top-level `rigs:` LIST. Extension wins when both could apply (arch ruling
|
|
16
|
+
// 1 — declared kind binds); a `.rigtopology` file failing validation errors
|
|
17
|
+
// AS a topology, never falls through to rig-spec parsing.
|
|
18
|
+
//
|
|
19
|
+
// Unknown-host-id validation (the FR-1 fourth structural class) resolves
|
|
20
|
+
// against the hosts registry via the shared hosts-registry-reader at the
|
|
21
|
+
// launcher's pre-launch validation pass — still before any launch attempt;
|
|
22
|
+
// this module is filesystem/registry-free by design.
|
|
23
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
24
|
+
import { parse as parseYaml } from "yaml";
|
|
25
|
+
/** The ratified non-goal family: any key that would smuggle cross-rig
|
|
26
|
+
* edges/routing/dependency semantics into the thin manifest. */
|
|
27
|
+
const EDGE_ROUTING_KEYS = new Set([
|
|
28
|
+
"edge",
|
|
29
|
+
"edges",
|
|
30
|
+
"route",
|
|
31
|
+
"routes",
|
|
32
|
+
"routing",
|
|
33
|
+
"dependency",
|
|
34
|
+
"dependencies",
|
|
35
|
+
"deps",
|
|
36
|
+
"depends_on",
|
|
37
|
+
"dependsOn",
|
|
38
|
+
"needs",
|
|
39
|
+
"after",
|
|
40
|
+
"links",
|
|
41
|
+
"wires",
|
|
42
|
+
"connections",
|
|
43
|
+
]);
|
|
44
|
+
const MANIFEST_KEYS = new Set(["rigs", "concurrency"]);
|
|
45
|
+
const ENTRY_KEYS = new Set(["source", "host"]);
|
|
46
|
+
function edgeRoutingRejection(prefix, key) {
|
|
47
|
+
return `${prefix}: '${key}' is a cross-rig edge/routing/dependency key — REJECTED. The topology manifest is deliberately THIN (founder-ratified non-goal: no cross-rig edges, no routing semantics; inter-rig routing is the deferred topology-Q1 decision). Remove the key; the manifest carries only rigs[]{source, host?} + concurrency.`;
|
|
48
|
+
}
|
|
49
|
+
function unknownKeyRejection(prefix, key, allowed) {
|
|
50
|
+
if (key === "on_failure") {
|
|
51
|
+
return `${prefix}: 'on_failure' was removed for v0 — stop-on-failure is the only behavior (the walk stops at the first failed entry; already-started rigs are reported honestly). Re-adding the key is an explicit pm-lead decision. Remove it.`;
|
|
52
|
+
}
|
|
53
|
+
return `${prefix}: unknown key '${key}' — the manifest key set is CLOSED (${allowed}). Remove or fix the key.`;
|
|
54
|
+
}
|
|
55
|
+
/** Validate an already-parsed YAML document as a topology manifest.
|
|
56
|
+
* Collects EVERY structural error (per-entry, what/why/fix) rather than
|
|
57
|
+
* failing fast — FR-1 reports them all before any launch. */
|
|
58
|
+
export function validateTopologyManifest(parsed, sourcePath) {
|
|
59
|
+
const where = `topology manifest at ${sourcePath}`;
|
|
60
|
+
if (parsed === null || typeof parsed !== "object" || Array.isArray(parsed)) {
|
|
61
|
+
return { ok: false, errors: [`${where}: must be a YAML object with a top-level 'rigs' list`] };
|
|
62
|
+
}
|
|
63
|
+
const obj = parsed;
|
|
64
|
+
const errors = [];
|
|
65
|
+
for (const key of Object.keys(obj)) {
|
|
66
|
+
if (MANIFEST_KEYS.has(key))
|
|
67
|
+
continue;
|
|
68
|
+
if (EDGE_ROUTING_KEYS.has(key)) {
|
|
69
|
+
errors.push(edgeRoutingRejection(where, key));
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
errors.push(unknownKeyRejection(where, key, "'rigs' + optional 'concurrency'"));
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
let concurrency = 1;
|
|
76
|
+
const rawConcurrency = obj["concurrency"];
|
|
77
|
+
if (rawConcurrency !== undefined) {
|
|
78
|
+
if (typeof rawConcurrency !== "number" || !Number.isInteger(rawConcurrency) || rawConcurrency < 1) {
|
|
79
|
+
errors.push(`${where}: 'concurrency' must be a positive integer (a fixed staged-launch cap; default 1 = sequential; adaptive throttling is out of scope) — got ${JSON.stringify(rawConcurrency)}`);
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
concurrency = rawConcurrency;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
const rigs = obj["rigs"];
|
|
86
|
+
if (!Array.isArray(rigs)) {
|
|
87
|
+
errors.push(`${where}: 'rigs' must be a list of entries {source, host?} — the ordered launch plan`);
|
|
88
|
+
return { ok: false, errors };
|
|
89
|
+
}
|
|
90
|
+
if (rigs.length === 0) {
|
|
91
|
+
errors.push(`${where}: 'rigs' is empty — a topology must name at least one rig to launch`);
|
|
92
|
+
return { ok: false, errors };
|
|
93
|
+
}
|
|
94
|
+
const validated = [];
|
|
95
|
+
for (let i = 0; i < rigs.length; i++) {
|
|
96
|
+
const raw = rigs[i];
|
|
97
|
+
const prefix = `${where}: rigs[${i}]`;
|
|
98
|
+
if (raw === null || typeof raw !== "object" || Array.isArray(raw)) {
|
|
99
|
+
errors.push(`${prefix}: must be an object with a 'source' rig ref (spec path, library name, or .rigbundle path) and optional 'host'`);
|
|
100
|
+
continue;
|
|
101
|
+
}
|
|
102
|
+
const entry = raw;
|
|
103
|
+
for (const key of Object.keys(entry)) {
|
|
104
|
+
if (ENTRY_KEYS.has(key))
|
|
105
|
+
continue;
|
|
106
|
+
if (EDGE_ROUTING_KEYS.has(key)) {
|
|
107
|
+
errors.push(edgeRoutingRejection(prefix, key));
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
errors.push(unknownKeyRejection(prefix, key, "'source' + optional 'host'"));
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
const source = entry["source"];
|
|
114
|
+
if (typeof source !== "string" || source.trim() === "") {
|
|
115
|
+
errors.push(`${prefix}.source: required non-empty string — a rig SPEC PATH (v0 boundary; see the per-form rejections below)`);
|
|
116
|
+
continue;
|
|
117
|
+
}
|
|
118
|
+
// ── v0 source-form boundary (arch ruling 2026-07-05, guard F2/F3 fold):
|
|
119
|
+
// topology entries are SPEC PATHS ONLY, rejected at PARSE time — uniform
|
|
120
|
+
// entry semantics beat mid-walk failure, and neither widening is free:
|
|
121
|
+
// bundle targetRoot is a pm-gated closed-key extension (R11-1); library
|
|
122
|
+
// names need a daemon resolution seam (P4-adjacent+). Both are NAMED
|
|
123
|
+
// DEFERRALS. Direct-to-rig-up forms are untouched (FR-2 stands).
|
|
124
|
+
if (/\.rigbundle$/i.test(source)) {
|
|
125
|
+
errors.push(`${prefix}.source: '.rigbundle' entries are not supported in v0 — topology entries are SPEC PATHS ONLY (a bundle entry needs an explicit per-entry targetRoot, a pm-gated extension of the closed key set; deferred). Workaround: launch that rig directly — single-rig 'rig up ${source}' accepts all source kinds unchanged.`);
|
|
126
|
+
continue;
|
|
127
|
+
}
|
|
128
|
+
if (/\.rigtopology$/i.test(source)) {
|
|
129
|
+
errors.push(`${prefix}.source: nested topology manifests are not supported — every entry must be a single-rig spec path.`);
|
|
130
|
+
continue;
|
|
131
|
+
}
|
|
132
|
+
if (!source.includes("/") && !/\.ya?ml$/i.test(source)) {
|
|
133
|
+
errors.push(`${prefix}.source: '${source}' is a bare library/rig name — v0 topology entries are SPEC PATHS ONLY (name entries need a daemon-side resolution seam; deferred). Workaround: run 'rig up ${source}' individually, or reference its spec file by path.`);
|
|
134
|
+
continue;
|
|
135
|
+
}
|
|
136
|
+
const host = entry["host"];
|
|
137
|
+
if (host !== undefined && (typeof host !== "string" || host.trim() === "")) {
|
|
138
|
+
errors.push(`${prefix}.host: optional, but if present must be a non-empty registered host id (per-entry 'host:' is the ONLY topology placement mechanism)`);
|
|
139
|
+
continue;
|
|
140
|
+
}
|
|
141
|
+
validated.push({ source, ...(host !== undefined ? { host: host } : {}) });
|
|
142
|
+
}
|
|
143
|
+
if (errors.length > 0)
|
|
144
|
+
return { ok: false, errors };
|
|
145
|
+
return { ok: true, manifest: { rigs: validated, concurrency } };
|
|
146
|
+
}
|
|
147
|
+
/** Load + parse + validate a topology manifest file. Parse failures error AS
|
|
148
|
+
* a topology (arch ruling 1: the declared kind binds — no rig-spec
|
|
149
|
+
* fall-through). */
|
|
150
|
+
export function loadTopologyManifest(path) {
|
|
151
|
+
if (!existsSync(path)) {
|
|
152
|
+
return {
|
|
153
|
+
ok: false,
|
|
154
|
+
errors: [
|
|
155
|
+
`topology manifest not found at ${path}. Create a .rigtopology YAML file with a top-level 'rigs:' list of {source, host?} entries (+ optional 'concurrency').`,
|
|
156
|
+
],
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
let raw;
|
|
160
|
+
try {
|
|
161
|
+
raw = readFileSync(path, "utf-8");
|
|
162
|
+
}
|
|
163
|
+
catch (err) {
|
|
164
|
+
return { ok: false, errors: [`failed to read topology manifest at ${path}: ${err.message}`] };
|
|
165
|
+
}
|
|
166
|
+
let parsed;
|
|
167
|
+
try {
|
|
168
|
+
parsed = parseYaml(raw);
|
|
169
|
+
}
|
|
170
|
+
catch (err) {
|
|
171
|
+
return { ok: false, errors: [`failed to parse topology manifest YAML at ${path}: ${err.message}`] };
|
|
172
|
+
}
|
|
173
|
+
return validateTopologyManifest(parsed, path);
|
|
174
|
+
}
|
|
175
|
+
/** Detection sniff (FR-1 + guard G-1/yaml folds): a parsed YAML document is
|
|
176
|
+
* topology-SHAPED iff it carries a top-level `rigs:` LIST. A rig spec never
|
|
177
|
+
* carries top-level `rigs`, so the sniff is unambiguous. Shape only — full
|
|
178
|
+
* validation still runs (and rejects) as a topology afterwards. */
|
|
179
|
+
export function hasTopLevelRigsList(parsed) {
|
|
180
|
+
if (parsed === null || typeof parsed !== "object" || Array.isArray(parsed))
|
|
181
|
+
return false;
|
|
182
|
+
return Array.isArray(parsed["rigs"]);
|
|
183
|
+
}
|
|
184
|
+
/** Raw-text form of the sniff for router branches that have not parsed yet
|
|
185
|
+
* (the extensionless path-form fallback). Unparseable YAML sniffs false —
|
|
186
|
+
* it then flows to the existing non-topology handling unchanged. */
|
|
187
|
+
export function yamlTextHasTopLevelRigsList(raw) {
|
|
188
|
+
try {
|
|
189
|
+
return hasTopLevelRigsList(parseYaml(raw));
|
|
190
|
+
}
|
|
191
|
+
catch {
|
|
192
|
+
return false;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
//# sourceMappingURL=topology-manifest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"topology-manifest.js","sourceRoot":"","sources":["../../../src/domain/topology/topology-manifest.ts"],"names":[],"mappings":"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"}
|