@openrig/cli 0.4.4 → 0.4.7
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/CULTURE-default.md +19 -0
- package/daemon/assets/guidance/openrig-start.md +20 -5
- package/daemon/assets/plugins/openrig-core/README.md +1 -1
- package/daemon/assets/plugins/openrig-core/skills/claude-compaction-restore/SKILL.md +9 -6
- package/daemon/assets/plugins/openrig-core/skills/claude-compaction-restore/scripts/precompact-hook.mjs +11 -72
- package/daemon/assets/plugins/openrig-core/skills/forming-an-openrig-mental-model/SKILL.md +34 -22
- package/daemon/assets/plugins/openrig-core/skills/messaging-the-human/SKILL.md +108 -0
- package/daemon/assets/plugins/openrig-core/skills/mission-slice-sop/SKILL.md +11 -16
- package/daemon/assets/plugins/openrig-core/skills/openrig-skills/SKILL.md +95 -0
- package/daemon/assets/plugins/openrig-core/skills/openrig-user/SKILL.md +819 -101
- package/daemon/assets/plugins/openrig-core/skills/queue-handoff/SKILL.md +26 -9
- package/daemon/assets/plugins/openrig-core/skills/seat-continuity-and-handover/SKILL.md +11 -9
- package/daemon/assets/plugins/openrig-core/skills/session-compaction-and-restore/SKILL.md +162 -0
- package/daemon/assets/plugins/openrig-core/skills/software-for-agents/SKILL.md +165 -0
- package/daemon/dist/adapters/cmux-transport.d.ts.map +1 -1
- package/daemon/dist/adapters/cmux-transport.js +8 -1
- package/daemon/dist/adapters/cmux-transport.js.map +1 -1
- package/daemon/dist/adapters/cmux.d.ts +9 -0
- package/daemon/dist/adapters/cmux.d.ts.map +1 -1
- package/daemon/dist/adapters/cmux.js +21 -0
- package/daemon/dist/adapters/cmux.js.map +1 -1
- package/daemon/dist/adapters/codex-runtime-adapter.d.ts +3 -0
- package/daemon/dist/adapters/codex-runtime-adapter.d.ts.map +1 -1
- package/daemon/dist/adapters/codex-runtime-adapter.js +32 -12
- 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.js +3 -3
- 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/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/claude-compaction-enforcer.d.ts +3 -0
- package/daemon/dist/domain/claude-compaction-enforcer.d.ts.map +1 -1
- package/daemon/dist/domain/claude-compaction-enforcer.js +19 -3
- package/daemon/dist/domain/claude-compaction-enforcer.js.map +1 -1
- package/daemon/dist/domain/cmux-layout-service.d.ts +36 -0
- package/daemon/dist/domain/cmux-layout-service.d.ts.map +1 -1
- package/daemon/dist/domain/cmux-layout-service.js +100 -28
- package/daemon/dist/domain/cmux-layout-service.js.map +1 -1
- package/daemon/dist/domain/context-monitor.d.ts +2 -0
- package/daemon/dist/domain/context-monitor.d.ts.map +1 -1
- package/daemon/dist/domain/context-monitor.js +14 -0
- package/daemon/dist/domain/context-monitor.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.js +1 -1
- package/daemon/dist/domain/feed/attention-aggregator.js.map +1 -1
- package/daemon/dist/domain/hosts/hosts-registry-reader.d.ts +1 -0
- package/daemon/dist/domain/hosts/hosts-registry-reader.d.ts.map +1 -1
- package/daemon/dist/domain/hosts/hosts-registry-reader.js +31 -10
- package/daemon/dist/domain/hosts/hosts-registry-reader.js.map +1 -1
- 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 +55 -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 +21 -0
- package/daemon/dist/domain/hosts/remote-daemon-http.d.ts.map +1 -1
- package/daemon/dist/domain/hosts/remote-daemon-http.js +56 -4
- package/daemon/dist/domain/hosts/remote-daemon-http.js.map +1 -1
- package/daemon/dist/domain/node-inventory.d.ts +10 -1
- package/daemon/dist/domain/node-inventory.d.ts.map +1 -1
- package/daemon/dist/domain/node-inventory.js +250 -97
- 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/plugin-vendor-service.d.ts +2 -0
- package/daemon/dist/domain/plugin-vendor-service.d.ts.map +1 -1
- package/daemon/dist/domain/plugin-vendor-service.js +23 -0
- package/daemon/dist/domain/plugin-vendor-service.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/projection-lane.d.ts +7 -0
- package/daemon/dist/domain/projection-lane.d.ts.map +1 -0
- package/daemon/dist/domain/projection-lane.js +28 -0
- package/daemon/dist/domain/projection-lane.js.map +1 -0
- package/daemon/dist/domain/ps-projection.d.ts +19 -0
- package/daemon/dist/domain/ps-projection.d.ts.map +1 -1
- package/daemon/dist/domain/ps-projection.js +81 -30
- package/daemon/dist/domain/ps-projection.js.map +1 -1
- package/daemon/dist/domain/queue-repository.d.ts +116 -7
- package/daemon/dist/domain/queue-repository.d.ts.map +1 -1
- package/daemon/dist/domain/queue-repository.js +226 -16
- 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/compose.d.ts +127 -5
- package/daemon/dist/domain/review/compose.d.ts.map +1 -1
- package/daemon/dist/domain/review/compose.js +244 -19
- package/daemon/dist/domain/review/compose.js.map +1 -1
- 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/gather.d.ts +17 -2
- package/daemon/dist/domain/review/gather.d.ts.map +1 -1
- package/daemon/dist/domain/review/gather.js +269 -108
- package/daemon/dist/domain/review/gather.js.map +1 -1
- package/daemon/dist/domain/review/proof-io.d.ts +2 -0
- package/daemon/dist/domain/review/proof-io.d.ts.map +1 -0
- package/daemon/dist/domain/review/proof-io.js +38 -0
- package/daemon/dist/domain/review/proof-io.js.map +1 -0
- package/daemon/dist/domain/review/types.d.ts +104 -1
- package/daemon/dist/domain/review/types.d.ts.map +1 -1
- 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 +26 -2
- 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/plan-lock-artifacts.d.ts +8 -0
- package/daemon/dist/domain/scope/plan-lock-artifacts.d.ts.map +1 -0
- package/daemon/dist/domain/scope/plan-lock-artifacts.js +57 -0
- package/daemon/dist/domain/scope/plan-lock-artifacts.js.map +1 -0
- package/daemon/dist/domain/scope/scaffold-placeholder.d.ts +38 -0
- package/daemon/dist/domain/scope/scaffold-placeholder.d.ts.map +1 -0
- package/daemon/dist/domain/scope/scaffold-placeholder.js +98 -0
- package/daemon/dist/domain/scope/scaffold-placeholder.js.map +1 -0
- package/daemon/dist/domain/scope/scope-approve.d.ts.map +1 -1
- package/daemon/dist/domain/scope/scope-approve.js +22 -1
- package/daemon/dist/domain/scope/scope-approve.js.map +1 -1
- package/daemon/dist/domain/scope/scope-audit.d.ts.map +1 -1
- package/daemon/dist/domain/scope/scope-audit.js +57 -20
- 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/session-transport.d.ts +17 -0
- package/daemon/dist/domain/session-transport.d.ts.map +1 -1
- package/daemon/dist/domain/session-transport.js +44 -0
- package/daemon/dist/domain/session-transport.js.map +1 -1
- package/daemon/dist/domain/slices/qitem-membership.d.ts +17 -0
- package/daemon/dist/domain/slices/qitem-membership.d.ts.map +1 -0
- package/daemon/dist/domain/slices/qitem-membership.js +60 -0
- package/daemon/dist/domain/slices/qitem-membership.js.map +1 -0
- package/daemon/dist/domain/slices/slice-detail-projector.d.ts +5 -0
- package/daemon/dist/domain/slices/slice-detail-projector.d.ts.map +1 -1
- package/daemon/dist/domain/slices/slice-detail-projector.js +161 -16
- package/daemon/dist/domain/slices/slice-detail-projector.js.map +1 -1
- package/daemon/dist/domain/slices/slice-indexer.d.ts +86 -0
- package/daemon/dist/domain/slices/slice-indexer.d.ts.map +1 -1
- package/daemon/dist/domain/slices/slice-indexer.js +422 -45
- package/daemon/dist/domain/slices/slice-indexer.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-orchestrator.d.ts +9 -0
- package/daemon/dist/domain/startup-orchestrator.d.ts.map +1 -1
- package/daemon/dist/domain/startup-orchestrator.js +71 -3
- package/daemon/dist/domain/startup-orchestrator.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 +28 -0
- package/daemon/dist/domain/terminal/cmux-provider-adapter.d.ts.map +1 -0
- package/daemon/dist/domain/terminal/cmux-provider-adapter.js +100 -0
- package/daemon/dist/domain/terminal/cmux-provider-adapter.js.map +1 -0
- package/daemon/dist/domain/terminal/herdr-adapter.d.ts +94 -0
- package/daemon/dist/domain/terminal/herdr-adapter.d.ts.map +1 -0
- package/daemon/dist/domain/terminal/herdr-adapter.js +307 -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/transcript-capture.d.ts +3 -0
- package/daemon/dist/domain/transcript-capture.d.ts.map +1 -1
- package/daemon/dist/domain/transcript-capture.js +28 -0
- package/daemon/dist/domain/transcript-capture.js.map +1 -1
- package/daemon/dist/domain/transcript-store.d.ts +10 -0
- package/daemon/dist/domain/transcript-store.d.ts.map +1 -1
- package/daemon/dist/domain/transcript-store.js +26 -0
- package/daemon/dist/domain/transcript-store.js.map +1 -1
- package/daemon/dist/domain/types.d.ts +38 -1
- package/daemon/dist/domain/types.d.ts.map +1 -1
- package/daemon/dist/domain/types.js.map +1 -1
- package/daemon/dist/domain/user-settings/settings-store.d.ts +1 -1
- package/daemon/dist/domain/user-settings/settings-store.d.ts.map +1 -1
- package/daemon/dist/domain/user-settings/settings-store.js +92 -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 +9 -4
- package/daemon/dist/domain/workspace/default-workspace-scaffold.js.map +1 -1
- package/daemon/dist/domain/workspace/workspace-doctor.js +1 -1
- 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/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.js +1 -1
- package/daemon/dist/routes/mission-control.js.map +1 -1
- package/daemon/dist/routes/missions.d.ts +7 -0
- package/daemon/dist/routes/missions.d.ts.map +1 -1
- package/daemon/dist/routes/missions.js +6 -1
- package/daemon/dist/routes/missions.js.map +1 -1
- package/daemon/dist/routes/ps.d.ts.map +1 -1
- package/daemon/dist/routes/ps.js +5 -1
- package/daemon/dist/routes/ps.js.map +1 -1
- package/daemon/dist/routes/queue.d.ts +2 -7
- package/daemon/dist/routes/queue.d.ts.map +1 -1
- package/daemon/dist/routes/queue.js +272 -10
- package/daemon/dist/routes/queue.js.map +1 -1
- package/daemon/dist/routes/review.d.ts.map +1 -1
- package/daemon/dist/routes/review.js +26 -0
- package/daemon/dist/routes/review.js.map +1 -1
- package/daemon/dist/routes/rigs.d.ts.map +1 -1
- package/daemon/dist/routes/rigs.js +21 -10
- package/daemon/dist/routes/rigs.js.map +1 -1
- package/daemon/dist/routes/scope-audit.d.ts.map +1 -1
- package/daemon/dist/routes/scope-audit.js +141 -135
- 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/sessions.js +2 -1
- package/daemon/dist/routes/sessions.js.map +1 -1
- package/daemon/dist/routes/slices.d.ts.map +1 -1
- package/daemon/dist/routes/slices.js +48 -38
- package/daemon/dist/routes/slices.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/transcripts.d.ts.map +1 -1
- package/daemon/dist/routes/transcripts.js +62 -33
- package/daemon/dist/routes/transcripts.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/server.d.ts +5 -0
- package/daemon/dist/server.d.ts.map +1 -1
- package/daemon/dist/server.js +22 -0
- package/daemon/dist/server.js.map +1 -1
- package/daemon/dist/startup.d.ts.map +1 -1
- package/daemon/dist/startup.js +235 -12
- package/daemon/dist/startup.js.map +1 -1
- package/daemon/docs/reference/agent-startup-guide.md +1 -0
- package/daemon/specs/agents/apps/vault-specialist/agent.yaml +2 -1
- package/daemon/specs/agents/conveyor/builder/agent.yaml +2 -1
- package/daemon/specs/agents/conveyor/lead/agent.yaml +2 -1
- package/daemon/specs/agents/conveyor/planner/agent.yaml +2 -1
- package/daemon/specs/agents/conveyor/reviewer/agent.yaml +2 -1
- package/daemon/specs/agents/design/product-designer/agent.yaml +12 -2
- package/daemon/specs/agents/development/implementer/agent.yaml +12 -2
- package/daemon/specs/agents/development/qa/agent.yaml +12 -2
- package/daemon/specs/agents/development/qa/guidance/role.md +1 -0
- package/daemon/specs/agents/factory-rsi/dogfood/agent.yaml +30 -0
- package/daemon/specs/agents/factory-rsi/dogfood/guidance/role.md +37 -0
- package/daemon/specs/agents/factory-rsi/release-manager/agent.yaml +30 -0
- package/daemon/specs/agents/factory-rsi/release-manager/guidance/role.md +40 -0
- package/daemon/specs/agents/orchestration/orchestrator/agent.yaml +12 -2
- package/daemon/specs/agents/product-management/pm/agent.yaml +1 -2
- package/daemon/specs/agents/research/analyst/agent.yaml +2 -1
- package/daemon/specs/agents/research/synthesizer/agent.yaml +2 -1
- package/daemon/specs/agents/review/independent-reviewer/agent.yaml +12 -2
- package/daemon/specs/agents/shared/agent.yaml +5 -8
- package/daemon/specs/agents/shared/runtime/claude-settings.fragment.json +13 -1
- package/daemon/specs/agents/shared/skills/core/agent-starters/SKILL.md +132 -0
- package/daemon/{assets/plugins/openrig-core/skills → specs/agents/shared/skills/core}/agent-startup-and-context-ingestion/SKILL.md +27 -19
- package/daemon/specs/agents/shared/skills/core/attention-queue/SKILL.md +264 -0
- package/daemon/specs/agents/shared/skills/core/cross-host-rig-commands/SKILL.md +190 -0
- package/daemon/specs/agents/shared/skills/core/human-in-the-loop/SKILL.md +104 -0
- package/daemon/specs/agents/shared/skills/core/openrig-architect/SKILL.md +25 -8
- package/daemon/specs/agents/shared/skills/core/openrig-cmux/SKILL.md +81 -0
- package/daemon/specs/agents/shared/skills/core/openrig-herdr/SKILL.md +153 -0
- package/daemon/specs/agents/shared/skills/core/openrig-upgrade/SKILL.md +460 -0
- package/daemon/specs/agents/shared/skills/core/rig-bundles-and-shareable-artifacts/SKILL.md +101 -0
- package/daemon/specs/agents/shared/skills/core/rig-lifecycle/SKILL.md +22 -11
- package/daemon/specs/agents/shared/skills/core/session-source-fork/SKILL.md +160 -0
- package/daemon/specs/agents/shared/skills/core/specification-system/SKILL.md +103 -0
- package/daemon/specs/agents/shared/skills/core/topology-mutation-and-seat-management/SKILL.md +118 -0
- package/daemon/specs/agents/shared/skills/core/watchdog/SKILL.md +125 -0
- package/daemon/specs/agents/shared/skills/pods/orchestration-team/SKILL.md +4 -4
- package/daemon/specs/agents/shared/skills/pods/review-team/SKILL.md +3 -0
- package/daemon/specs/agents/shared/skills/process/brainstorming/OPENRIG.md +3 -3
- package/daemon/specs/agents/shared/skills/process/executing-plans/OPENRIG.md +1 -1
- package/daemon/specs/agents/shared/skills/process/frontend-design/SKILL.md +6 -3
- package/daemon/specs/agents/shared/skills/process/test-driven-development/SKILL.md +1 -1
- package/daemon/specs/agents/shared/skills/process/using-superpowers/OPENRIG.md +1 -1
- package/daemon/specs/agents/shared/skills/process/verification-before-completion/SKILL.md +12 -2
- package/daemon/specs/agents/shared/skills/process/writing-plans/OPENRIG.md +1 -1
- package/daemon/specs/rigs/focused/pm-team/CULTURE.md +1 -1
- 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/advisor/lead/agent.yaml +2 -2
- package/daemon/specs/rigs/launch/kernel/agents/advisor/lead/guidance/role.md +5 -4
- package/daemon/specs/rigs/launch/kernel/agents/operator/agent/agent.yaml +2 -2
- package/daemon/specs/rigs/launch/kernel/agents/operator/agent/guidance/role.md +3 -5
- package/daemon/specs/rigs/launch/kernel/agents/queue/worker/agent.yaml +2 -2
- package/daemon/specs/rigs/launch/kernel/culture/CULTURE.md +3 -4
- package/daemon/specs/rigs/preview/product-team/CULTURE.md +1 -1
- package/dist/bin-wrapper.d.ts.map +1 -1
- package/dist/bin-wrapper.js +3 -1
- package/dist/bin-wrapper.js.map +1 -1
- package/dist/build-info.js +3 -3
- package/dist/cli-error.d.ts +33 -0
- package/dist/cli-error.d.ts.map +1 -0
- package/dist/cli-error.js +94 -0
- package/dist/cli-error.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.js +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.d.ts +1 -1
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +17 -11
- 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/host.d.ts +14 -0
- package/dist/commands/host.d.ts.map +1 -1
- package/dist/commands/host.js +361 -23
- package/dist/commands/host.js.map +1 -1
- 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.js +1 -1
- package/dist/commands/proof.js.map +1 -1
- package/dist/commands/ps.d.ts.map +1 -1
- package/dist/commands/ps.js +26 -6
- 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 +176 -31
- 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/rig.d.ts.map +1 -1
- package/dist/commands/rig.js +122 -0
- package/dist/commands/rig.js.map +1 -1
- package/dist/commands/scope.js +2 -2
- package/dist/commands/scope.js.map +1 -1
- package/dist/commands/send.d.ts.map +1 -1
- package/dist/commands/send.js +229 -30
- package/dist/commands/send.js.map +1 -1
- package/dist/commands/slack.d.ts +37 -0
- package/dist/commands/slack.d.ts.map +1 -0
- package/dist/commands/slack.js +274 -0
- package/dist/commands/slack.js.map +1 -0
- 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/ui.d.ts +1 -0
- package/dist/commands/ui.d.ts.map +1 -1
- package/dist/commands/ui.js +2 -0
- package/dist/commands/ui.js.map +1 -1
- package/dist/commands/up.d.ts.map +1 -1
- package/dist/commands/up.js +10 -1
- package/dist/commands/up.js.map +1 -1
- package/dist/commands/whoami.d.ts.map +1 -1
- package/dist/commands/whoami.js +14 -3
- 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/config-store.d.ts +15 -1
- package/dist/config-store.d.ts.map +1 -1
- package/dist/config-store.js +103 -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-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 +45 -14
- package/dist/daemon-lifecycle.js.map +1 -1
- package/dist/host-registry.d.ts +14 -1
- package/dist/host-registry.d.ts.map +1 -1
- package/dist/host-registry.js +47 -6
- 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 +5 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/scope/scaffold-placeholder.d.ts +38 -0
- package/dist/lib/scope/scaffold-placeholder.d.ts.map +1 -0
- package/dist/lib/scope/scaffold-placeholder.js +98 -0
- package/dist/lib/scope/scaffold-placeholder.js.map +1 -0
- package/dist/lib/scope/scope-audit.d.ts.map +1 -1
- package/dist/lib/scope/scope-audit.js +57 -20
- package/dist/lib/scope/scope-audit.js.map +1 -1
- package/dist/lib/scope-templates/backlog-deprecation.md +1 -1
- package/dist/lib/scope-templates/backlog-tech-debt.md +1 -1
- package/dist/lib/scope-templates/bug-fix.md +1 -1
- package/dist/lib/scope-templates/implementation-prd.md +1 -1
- package/dist/lib/scope-templates/mission-notes.md +7 -2
- 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 +1 -1
- package/dist/lib/scope-templates/proof.md +1 -1
- package/dist/lib/scope-templates/release-feature.md +1 -1
- package/dist/lib/scope-templates/research.md +1 -1
- 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 +13 -6
- 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/slack/config.d.ts +41 -0
- package/dist/slack/config.d.ts.map +1 -0
- package/dist/slack/config.js +60 -0
- package/dist/slack/config.js.map +1 -0
- package/dist/slack/inbound.d.ts +75 -0
- package/dist/slack/inbound.d.ts.map +1 -0
- package/dist/slack/inbound.js +133 -0
- package/dist/slack/inbound.js.map +1 -0
- package/dist/slack/message.d.ts +26 -0
- package/dist/slack/message.d.ts.map +1 -0
- package/dist/slack/message.js +60 -0
- package/dist/slack/message.js.map +1 -0
- package/dist/slack/outbound.d.ts +39 -0
- package/dist/slack/outbound.d.ts.map +1 -0
- package/dist/slack/outbound.js +52 -0
- package/dist/slack/outbound.js.map +1 -0
- package/dist/slack/queue-bridge.d.ts +56 -0
- package/dist/slack/queue-bridge.d.ts.map +1 -0
- package/dist/slack/queue-bridge.js +114 -0
- package/dist/slack/queue-bridge.js.map +1 -0
- package/dist/slack/secrets.d.ts +21 -0
- package/dist/slack/secrets.d.ts.map +1 -0
- package/dist/slack/secrets.js +73 -0
- package/dist/slack/secrets.js.map +1 -0
- package/dist/slack/slack-api.d.ts +49 -0
- package/dist/slack/slack-api.d.ts.map +1 -0
- package/dist/slack/slack-api.js +110 -0
- package/dist/slack/slack-api.js.map +1 -0
- package/dist/slack/state-store.d.ts +62 -0
- package/dist/slack/state-store.d.ts.map +1 -0
- package/dist/slack/state-store.js +132 -0
- package/dist/slack/state-store.js.map +1 -0
- package/package.json +1 -1
- package/ui/dist/assets/index-DkNi0RT8.js +623 -0
- package/ui/dist/assets/index-N-SdPj-I.css +32 -0
- package/ui/dist/index.html +2 -2
- package/daemon/assets/plugins/openrig-core/skills/openrig-architect/SKILL.md +0 -361
- package/daemon/assets/plugins/openrig-core/skills/openrig-operator/SKILL.md +0 -222
- package/daemon/docs/reference/product-factory-vps-runbook.md +0 -132
- package/daemon/specs/agents/shared/skills/core/mission-slice-sop/SKILL.md +0 -115
- package/daemon/specs/agents/shared/skills/core/openrig-installer/SKILL.md +0 -142
- package/daemon/specs/agents/shared/skills/core/openrig-operator/SKILL.md +0 -110
- package/daemon/specs/agents/shared/skills/core/openrig-user/SKILL.md +0 -1245
- package/daemon/specs/agents/shared/skills/core/openrig-user-settings/SKILL.md +0 -153
- package/ui/dist/assets/index-D69ZhNIr.js +0 -598
- package/ui/dist/assets/index-DJYun-8d.css +0 -32
|
@@ -0,0 +1,307 @@
|
|
|
1
|
+
// OPR.0.4.6.02 C2+FB4 — the herdr TerminalProvider (the proof-gated primary
|
|
2
|
+
// provider). Arm's-length AGPL: it drives the installed herdr's local control
|
|
3
|
+
// SOCKET through the injected `HerdrTransport` (see herdr-transport.ts) and
|
|
4
|
+
// never links herdr.
|
|
5
|
+
//
|
|
6
|
+
// FB4 (the VM-RED correction): herdr 0.7.1 has NO `layout` CLI command — the
|
|
7
|
+
// prior CLI shape (`herdr layout apply …`) could never tile (proven RED in the
|
|
8
|
+
// VM at e373f741). herdr's real layout mechanism is the socket `layout.apply`,
|
|
9
|
+
// validated verbatim in research/herdr-socket-captures/herdr-phase3-*.json:
|
|
10
|
+
// request {id, method:"layout.apply",
|
|
11
|
+
// params:{workspace_id, tab_label, focus, root}}
|
|
12
|
+
// root = {type:"split", direction:"right"|"down", ratio, first, second}
|
|
13
|
+
// | {type:"pane", label, command:[argv…]}
|
|
14
|
+
// response {id, result:{type:"layout_apply", layout:{workspace_id, tab_id,…}}}
|
|
15
|
+
//
|
|
16
|
+
// Behavior contract (unchanged from the guard-cleared shape):
|
|
17
|
+
// - ONE atomic `layout.apply` per grid page — the whole page's panes land in
|
|
18
|
+
// a single request so a page is never half-tiled.
|
|
19
|
+
// - FRESH tab/workspace on every relaunch (BR-5, not-replace-idempotent):
|
|
20
|
+
// each open creates its own workspace (`workspace.create`) and the tab
|
|
21
|
+
// label embeds a per-launch token — and `layout.apply` itself is
|
|
22
|
+
// empirically non-idempotent (the four-reapply capture shows a re-apply
|
|
23
|
+
// minting tab t3, never replacing t2), so a re-open can never clobber a
|
|
24
|
+
// previous view.
|
|
25
|
+
// - Pane labels ride the layout.apply pane nodes' `label` field (AC-7
|
|
26
|
+
// `<agent> · <slice>`) — the captures show the label echoed per pane, so
|
|
27
|
+
// no separate `pane rename` pass is needed (there is no `pane rename` CLI
|
|
28
|
+
// to shell anyway).
|
|
29
|
+
// - The composer's `paneCommand` is a SHELL string (`tmux attach -r -t 's'`,
|
|
30
|
+
// `ssh 'dest' tmux attach …`); the pane node's `command` is an ARGV array —
|
|
31
|
+
// so it is carried as `["sh", "-c", paneCommand]`, preserving the composed
|
|
32
|
+
// quoting byte-for-byte without the adapter re-parsing shell.
|
|
33
|
+
// - Liveness/availability = the socket `ping` (is the multiplexer's OWN
|
|
34
|
+
// control socket answering — NOT a daemon server ping; HERDR-FINDINGS #3's
|
|
35
|
+
// intent, carried to the socket transport). No "layout command" probe: the
|
|
36
|
+
// CLI help surface is irrelevant to the socket API.
|
|
37
|
+
// - EQUAL auto-grid cells (OPR.0.4.7.1). The layout tree matches the UI
|
|
38
|
+
// TerminalLauncher suggestLayout shape exactly — cols=ceil(sqrt(N)),
|
|
39
|
+
// rows=ceil(N/cols): N=2 → 2×1, N=5 → 3×2, N=7 → 3×3 (cols×rows) — built
|
|
40
|
+
// as equal right-strips per row combined by equal down-strips, using
|
|
41
|
+
// first-vs-rest ratios (1/N, then 1/(N-1), …; VM pane.layout-verified).
|
|
42
|
+
// The prior alternating-0.5 BSP is retired: it rendered N=7 as 4×2 with
|
|
43
|
+
// one double-width cell. Incomplete rectangles are padded with inert
|
|
44
|
+
// blank panes (cmux's blank-surface precedent); blanks are never
|
|
45
|
+
// reported as opened seats.
|
|
46
|
+
//
|
|
47
|
+
// The `workspace.create` response envelope is VM-confirmed (OPR.0.4.7.1):
|
|
48
|
+
// `result.workspace.workspace_id` + `result.tab.tab_id` + `result.root_pane`.
|
|
49
|
+
// Extraction stays null-safe/defensive for older builds (extractWorkspaceId).
|
|
50
|
+
// The create's default tab (a blank pane) is deliberately LEFT ALONE — PM
|
|
51
|
+
// ruling: no tab.close unless live evidence shows a user visibly landing on
|
|
52
|
+
// the blank tab (current evidence shows the populated view tab focused).
|
|
53
|
+
import { autoGridCols } from "../cmux-layout-service.js";
|
|
54
|
+
/** Sentinel host for herdr-surface degrades (a pane herdr itself failed to render). */
|
|
55
|
+
const HERDR_SURFACE_HOST = "herdr";
|
|
56
|
+
/**
|
|
57
|
+
* Combine N nodes into an equal N-way strip along one direction. PURE.
|
|
58
|
+
* Equal N-way BSP is first-vs-rest at ratio 1/N, recursively 1/(N-1) —
|
|
59
|
+
* NOT midpoint 0.5 (the VM-reproduced defect: alternating 0.5 splits gave
|
|
60
|
+
* N=7 a 4×2 layout with one double-width cell instead of the promised 3×3).
|
|
61
|
+
*/
|
|
62
|
+
export function equalStrip(nodes, direction) {
|
|
63
|
+
if (nodes.length === 1)
|
|
64
|
+
return nodes[0];
|
|
65
|
+
return {
|
|
66
|
+
type: "split",
|
|
67
|
+
direction,
|
|
68
|
+
ratio: 1 / nodes.length,
|
|
69
|
+
first: nodes[0],
|
|
70
|
+
second: equalStrip(nodes.slice(1), direction),
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
/** An inert blank pane — pads an incomplete grid rectangle (cmux's blank-surface precedent). */
|
|
74
|
+
function blankPane() {
|
|
75
|
+
return { type: "pane", label: "", command: ["sh"] };
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Build the EQUAL auto-grid layout tree for one page of panes. PURE. The grid
|
|
79
|
+
* shape matches the UI TerminalLauncher `suggestLayout` exactly —
|
|
80
|
+
* cols = ceil(sqrt(N)), rows = ceil(N/cols): N=2 → 2×1, N=5 → 3×2, N=7 → 3×3
|
|
81
|
+
* (cols×rows). An incomplete rectangle is padded with inert blank panes so
|
|
82
|
+
* every cell is the same size; blanks are layout filler only — they are never
|
|
83
|
+
* reported as opened seats. Each real leaf runs the composer's shell
|
|
84
|
+
* `paneCommand` via `["sh","-c",…]` so the composed quoting (read-only `-r`,
|
|
85
|
+
* ssh-wrap) is preserved untouched. Rows are built as equal `right` strips,
|
|
86
|
+
* then combined with equal `down` strips.
|
|
87
|
+
*/
|
|
88
|
+
export function buildGridRoot(panes) {
|
|
89
|
+
const cols = autoGridCols(panes.length);
|
|
90
|
+
const rows = Math.ceil(panes.length / cols);
|
|
91
|
+
const blanks = rows * cols - panes.length;
|
|
92
|
+
const leaves = panes.map((pane) => ({
|
|
93
|
+
type: "pane",
|
|
94
|
+
label: pane.label,
|
|
95
|
+
command: ["sh", "-c", pane.paneCommand],
|
|
96
|
+
}));
|
|
97
|
+
for (let i = 0; i < blanks; i++)
|
|
98
|
+
leaves.push(blankPane());
|
|
99
|
+
const rowStrips = [];
|
|
100
|
+
for (let r = 0; r < rows; r++) {
|
|
101
|
+
rowStrips.push(equalStrip(leaves.slice(r * cols, (r + 1) * cols), "right"));
|
|
102
|
+
}
|
|
103
|
+
return { root: equalStrip(rowStrips, "down"), blanks };
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Build the herdr socket plan for a composed view. PURE — no I/O. Each page
|
|
107
|
+
* gets a fresh tab labeled `${tabPrefix}:${view.id}#${launchToken}/<pageIndex>`;
|
|
108
|
+
* two calls with different `launchToken`s produce DIFFERENT labels, which is
|
|
109
|
+
* exactly the fresh-tab-on-relaunch (not-replace) invariant.
|
|
110
|
+
*/
|
|
111
|
+
export function planHerdrLayout(view, launchToken, tabPrefix = "openrig") {
|
|
112
|
+
const base = `${tabPrefix}:${view.id}#${launchToken}`;
|
|
113
|
+
const pages = view.pages.map((page, pageIndex) => {
|
|
114
|
+
const grid = buildGridRoot(page);
|
|
115
|
+
return {
|
|
116
|
+
tabLabel: view.pages.length > 1 ? `${base}/${pageIndex + 1}` : base,
|
|
117
|
+
root: grid.root,
|
|
118
|
+
blanks: grid.blanks,
|
|
119
|
+
};
|
|
120
|
+
});
|
|
121
|
+
return { workspaceLabel: base, pages };
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Extract the created workspace's id from a `workspace.create` result body.
|
|
125
|
+
* The live envelope is VM-confirmed (OPR.0.4.7.1): `result.workspace.
|
|
126
|
+
* workspace_id` + `result.tab.tab_id` + `result.root_pane` — covered by the
|
|
127
|
+
* nested-`workspace` home below. The other defensive homes are retained
|
|
128
|
+
* (top-level `workspace_id`, nested `layout`, bare `id`) for older builds.
|
|
129
|
+
* Returns null when nothing string-shaped is found (the caller degrades
|
|
130
|
+
* honestly rather than guessing).
|
|
131
|
+
*/
|
|
132
|
+
export function extractWorkspaceId(result) {
|
|
133
|
+
const direct = result["workspace_id"];
|
|
134
|
+
if (typeof direct === "string" && direct)
|
|
135
|
+
return direct;
|
|
136
|
+
for (const key of ["workspace", "layout"]) {
|
|
137
|
+
const nested = result[key];
|
|
138
|
+
if (nested && typeof nested === "object") {
|
|
139
|
+
const obj = nested;
|
|
140
|
+
const id = obj["workspace_id"] ?? obj["id"];
|
|
141
|
+
if (typeof id === "string" && id)
|
|
142
|
+
return id;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
const bare = result["id"];
|
|
146
|
+
if (typeof bare === "string" && bare)
|
|
147
|
+
return bare;
|
|
148
|
+
return null;
|
|
149
|
+
}
|
|
150
|
+
export class HerdrAdapter {
|
|
151
|
+
deps;
|
|
152
|
+
name = "herdr";
|
|
153
|
+
transport;
|
|
154
|
+
newLaunchToken;
|
|
155
|
+
tabPrefix;
|
|
156
|
+
launchCounter = 0;
|
|
157
|
+
constructor(deps) {
|
|
158
|
+
this.deps = deps;
|
|
159
|
+
this.transport = deps.transportFactory();
|
|
160
|
+
this.tabPrefix = deps.tabPrefix ?? "openrig";
|
|
161
|
+
this.newLaunchToken =
|
|
162
|
+
deps.newLaunchToken ?? (() => `l${(this.launchCounter += 1)}`);
|
|
163
|
+
}
|
|
164
|
+
async status() {
|
|
165
|
+
try {
|
|
166
|
+
const probe = await this.transport.probe();
|
|
167
|
+
return {
|
|
168
|
+
provider: this.name,
|
|
169
|
+
available: probe.alive,
|
|
170
|
+
...(probe.version ? { version: probe.version } : {}),
|
|
171
|
+
// The socket answering ping IS the capability surface: layout.apply is
|
|
172
|
+
// the protocol's layout verb (there is no per-command discovery on
|
|
173
|
+
// 0.7.1 — `api schema` is absent; HERDR-FINDINGS §3).
|
|
174
|
+
capabilities: { socket: probe.alive, "layout.apply": probe.alive },
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
catch {
|
|
178
|
+
// An unreachable socket (herdr not running) = honestly unavailable.
|
|
179
|
+
return { provider: this.name, available: false, capabilities: {} };
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
async liveness() {
|
|
183
|
+
// Liveness is the multiplexer's OWN control socket answering ping.
|
|
184
|
+
try {
|
|
185
|
+
const probe = await this.transport.probe();
|
|
186
|
+
return probe.alive
|
|
187
|
+
? { alive: true }
|
|
188
|
+
: { alive: false, detail: "herdr control socket is not answering ping" };
|
|
189
|
+
}
|
|
190
|
+
catch (err) {
|
|
191
|
+
return { alive: false, detail: err instanceof Error ? err.message : String(err) };
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
async openView(view) {
|
|
195
|
+
const absent = [...view.absent];
|
|
196
|
+
const degraded = [...view.degraded];
|
|
197
|
+
const opened = [];
|
|
198
|
+
// Gate on the socket being alive — the honest "herdr isn't running" refuse.
|
|
199
|
+
// (No CLI-help "layout command" probe: the socket API is the layout surface.)
|
|
200
|
+
const probe = await this.transport.probe();
|
|
201
|
+
if (!probe.alive) {
|
|
202
|
+
return {
|
|
203
|
+
provider: this.name,
|
|
204
|
+
ok: false,
|
|
205
|
+
opened,
|
|
206
|
+
absent,
|
|
207
|
+
degraded,
|
|
208
|
+
pages: 0,
|
|
209
|
+
error: "herdr control socket is not answering ping; is herdr running?",
|
|
210
|
+
code: "herdr_unavailable",
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
const launchToken = this.newLaunchToken();
|
|
214
|
+
const plan = planHerdrLayout(view, launchToken, this.tabPrefix);
|
|
215
|
+
// Nothing to tile (an all-absent/degraded view) → no workspace side effect.
|
|
216
|
+
if (plan.pages.length === 0) {
|
|
217
|
+
return {
|
|
218
|
+
provider: this.name,
|
|
219
|
+
ok: view.opened.length === 0,
|
|
220
|
+
opened,
|
|
221
|
+
absent,
|
|
222
|
+
degraded,
|
|
223
|
+
pages: 0,
|
|
224
|
+
};
|
|
225
|
+
}
|
|
226
|
+
// A fresh workspace per open (BR-5 fresh-on-relaunch, strongest form).
|
|
227
|
+
// The labeled create is tried first; a failure falls back ONCE to a bare
|
|
228
|
+
// create before degrading.
|
|
229
|
+
let workspaceId = null;
|
|
230
|
+
let createErr = null;
|
|
231
|
+
try {
|
|
232
|
+
workspaceId = extractWorkspaceId(await this.transport.request("workspace.create", {
|
|
233
|
+
focus: false,
|
|
234
|
+
label: plan.workspaceLabel,
|
|
235
|
+
}));
|
|
236
|
+
}
|
|
237
|
+
catch (err) {
|
|
238
|
+
createErr = err;
|
|
239
|
+
}
|
|
240
|
+
if (workspaceId == null) {
|
|
241
|
+
try {
|
|
242
|
+
workspaceId = extractWorkspaceId(await this.transport.request("workspace.create", { focus: false }));
|
|
243
|
+
createErr = null;
|
|
244
|
+
}
|
|
245
|
+
catch (err) {
|
|
246
|
+
createErr = createErr ?? err;
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
if (workspaceId == null) {
|
|
250
|
+
// No workspace → nothing can tile. Degrade every pane honestly.
|
|
251
|
+
const reason = `herdr workspace.create failed: ${createErr instanceof Error
|
|
252
|
+
? createErr.message
|
|
253
|
+
: createErr != null
|
|
254
|
+
? String(createErr)
|
|
255
|
+
: "no workspace id in the response"}`;
|
|
256
|
+
for (const page of view.pages) {
|
|
257
|
+
for (const pane of page) {
|
|
258
|
+
degraded.push({ seat: pane.seat, host: HERDR_SURFACE_HOST, reason });
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
return {
|
|
262
|
+
provider: this.name,
|
|
263
|
+
ok: view.opened.length === 0,
|
|
264
|
+
opened,
|
|
265
|
+
absent,
|
|
266
|
+
degraded,
|
|
267
|
+
pages: 0,
|
|
268
|
+
error: reason,
|
|
269
|
+
code: "herdr_workspace_failed",
|
|
270
|
+
};
|
|
271
|
+
}
|
|
272
|
+
for (let pageIndex = 0; pageIndex < plan.pages.length; pageIndex++) {
|
|
273
|
+
const pagePlan = plan.pages[pageIndex];
|
|
274
|
+
const pagePanes = view.pages[pageIndex];
|
|
275
|
+
try {
|
|
276
|
+
// ONE atomic layout.apply for the whole page (capture-verified shape).
|
|
277
|
+
await this.transport.request("layout.apply", {
|
|
278
|
+
workspace_id: workspaceId,
|
|
279
|
+
tab_label: pagePlan.tabLabel,
|
|
280
|
+
focus: true,
|
|
281
|
+
root: pagePlan.root,
|
|
282
|
+
});
|
|
283
|
+
for (const pane of pagePanes)
|
|
284
|
+
opened.push(pane.seat);
|
|
285
|
+
}
|
|
286
|
+
catch (err) {
|
|
287
|
+
// The whole page failed to apply — degrade its seats honestly.
|
|
288
|
+
for (const pane of pagePanes) {
|
|
289
|
+
degraded.push({
|
|
290
|
+
seat: pane.seat,
|
|
291
|
+
host: HERDR_SURFACE_HOST,
|
|
292
|
+
reason: `herdr layout.apply failed: ${err instanceof Error ? err.message : String(err)}`,
|
|
293
|
+
});
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
return {
|
|
298
|
+
provider: this.name,
|
|
299
|
+
ok: opened.length > 0 || view.opened.length === 0,
|
|
300
|
+
opened,
|
|
301
|
+
absent,
|
|
302
|
+
degraded,
|
|
303
|
+
pages: plan.pages.length,
|
|
304
|
+
};
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
//# sourceMappingURL=herdr-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"herdr-adapter.js","sourceRoot":"","sources":["../../../src/domain/terminal/herdr-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -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"}
|