@openrig/cli 0.4.4 → 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/plugins/openrig-core/skills/mission-slice-sop/SKILL.md +6 -8
- 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 +744 -96
- 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.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/discovery-types.d.ts +1 -1
- package/daemon/dist/domain/discovery-types.d.ts.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 +19 -0
- 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 +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 +21 -0
- package/daemon/dist/domain/hosts/remote-daemon-http.d.ts.map +1 -1
- package/daemon/dist/domain/hosts/remote-daemon-http.js +49 -0
- package/daemon/dist/domain/hosts/remote-daemon-http.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.map +1 -1
- package/daemon/dist/domain/ps-projection.js +37 -26
- package/daemon/dist/domain/ps-projection.js.map +1 -1
- package/daemon/dist/domain/queue-repository.d.ts +105 -0
- package/daemon/dist/domain/queue-repository.d.ts.map +1 -1
- package/daemon/dist/domain/queue-repository.js +193 -4
- 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 +50 -1
- package/daemon/dist/domain/review/compose.d.ts.map +1 -1
- package/daemon/dist/domain/review/compose.js +92 -3
- 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 +16 -1
- package/daemon/dist/domain/review/gather.d.ts.map +1 -1
- package/daemon/dist/domain/review/gather.js +177 -41
- package/daemon/dist/domain/review/gather.js.map +1 -1
- 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 +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/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/types.d.ts +34 -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/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/queue.d.ts +2 -7
- package/daemon/dist/routes/queue.d.ts.map +1 -1
- package/daemon/dist/routes/queue.js +264 -9
- 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/seat.js +13 -0
- package/daemon/dist/routes/seat.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/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 +221 -12
- package/daemon/dist/startup.js.map +1 -1
- 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/shared/skills/core/mission-slice-sop/SKILL.md +6 -8
- 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-user/SKILL.md +6 -6
- package/daemon/specs/rigs/launch/factory-rsi/CULTURE.md +47 -0
- package/daemon/specs/rigs/launch/factory-rsi/rig.yaml +115 -0
- package/dist/build-info.js +3 -3
- 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.d.ts.map +1 -1
- package/dist/commands/config.js +4 -0
- package/dist/commands/config.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 +338 -14
- 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/ps.d.ts.map +1 -1
- package/dist/commands/ps.js +10 -4
- 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 +73 -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/send.d.ts.map +1 -1
- package/dist/commands/send.js +114 -9
- 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.map +1 -1
- package/dist/commands/up.js +9 -0
- 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/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/host-registry.d.ts +8 -0
- package/dist/host-registry.d.ts.map +1 -1
- package/dist/host-registry.js +32 -0
- 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 +2 -0
- package/dist/index.js.map +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/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-D69ZhNIr.js +0 -598
- package/ui/dist/assets/index-DJYun-8d.css +0 -32
|
@@ -0,0 +1,519 @@
|
|
|
1
|
+
// OPR.0.4.6.PI1 — the pane-hosted pi-runner (compiled entry in the daemon dist).
|
|
2
|
+
//
|
|
3
|
+
// The runner is what makes a Pi seat behave like a normal OpenRig tmux seat
|
|
4
|
+
// while everything underneath stays structured RPC:
|
|
5
|
+
//
|
|
6
|
+
// pane stdin (rig send / human typing) ──▶ RPC prompt / steer / follow_up
|
|
7
|
+
// pi RPC events (typed JSONL) ──▶ (a) human-readable pane mirror
|
|
8
|
+
// (b) activity + session_identity
|
|
9
|
+
// POSTs to the daemon
|
|
10
|
+
// (c) runner-state.json sidecar
|
|
11
|
+
//
|
|
12
|
+
// BR-1: activity/session identity derive ONLY from Pi's typed events +
|
|
13
|
+
// get_state — never pane scraping. BR-3: the pi child gets a deny-by-default
|
|
14
|
+
// env allowlist. BR-5: the trust flag is always explicit. Honest failure:
|
|
15
|
+
// a dead pi process prints the EXIT/ERROR marker and records `exited` in the
|
|
16
|
+
// sidecar — never a silently frozen pane.
|
|
17
|
+
//
|
|
18
|
+
// Only node builtins + pi-runner-protocol are imported so the compiled entry
|
|
19
|
+
// stays runnable as `node <dist>/adapters/pi-runner.js` with no daemon deps.
|
|
20
|
+
import fs from "node:fs";
|
|
21
|
+
import nodePath from "node:path";
|
|
22
|
+
import readline from "node:readline";
|
|
23
|
+
import { spawn } from "node:child_process";
|
|
24
|
+
import { pathToFileURL } from "node:url";
|
|
25
|
+
import { piSeatPaths, buildPiChildArgs, buildPiChildEnv, buildPendingRunnerState, parsePiRunnerState, PI_RUNNER_READY_MARKER, PI_RUNNER_EXIT_MARKER, PI_RUNNER_ERROR_MARKER, } from "./pi-runner-protocol.js";
|
|
26
|
+
// ── Paste aggregation (arch n1) ──────────────────────────────────────────────
|
|
27
|
+
// `rig send` delivers a multi-line body via send-keys -l and THEN a separate
|
|
28
|
+
// Enter, so a multi-line paste arrives as several stdin lines in quick
|
|
29
|
+
// succession. The aggregator treats the whole quiet-window batch as ONE
|
|
30
|
+
// prompt — never N prompts.
|
|
31
|
+
export class PasteAggregator {
|
|
32
|
+
onFlush;
|
|
33
|
+
quietMs;
|
|
34
|
+
schedule;
|
|
35
|
+
cancel;
|
|
36
|
+
buffer = [];
|
|
37
|
+
timer = null;
|
|
38
|
+
constructor(onFlush,
|
|
39
|
+
// 600ms: the daemon transport's two-step send pastes the body, waits
|
|
40
|
+
// 200ms, THEN submits Enter — so the final line's newline arrives ~200ms
|
|
41
|
+
// after the paste. A 200ms quiet window raced that gap and split one
|
|
42
|
+
// rig-send envelope into two prompts (VM leg-4 finding); 3x the transport
|
|
43
|
+
// gap absorbs it while staying far below human message cadence.
|
|
44
|
+
quietMs = 600, schedule = setTimeout, cancel = clearTimeout) {
|
|
45
|
+
this.onFlush = onFlush;
|
|
46
|
+
this.quietMs = quietMs;
|
|
47
|
+
this.schedule = schedule;
|
|
48
|
+
this.cancel = cancel;
|
|
49
|
+
}
|
|
50
|
+
addLine(line) {
|
|
51
|
+
this.buffer.push(line);
|
|
52
|
+
if (this.timer !== null)
|
|
53
|
+
this.cancel(this.timer);
|
|
54
|
+
this.timer = this.schedule(() => this.flush(), this.quietMs);
|
|
55
|
+
}
|
|
56
|
+
flush() {
|
|
57
|
+
if (this.timer !== null) {
|
|
58
|
+
this.cancel(this.timer);
|
|
59
|
+
this.timer = null;
|
|
60
|
+
}
|
|
61
|
+
if (this.buffer.length === 0)
|
|
62
|
+
return;
|
|
63
|
+
const block = this.buffer.join("\n").trim();
|
|
64
|
+
this.buffer = [];
|
|
65
|
+
if (block.length > 0)
|
|
66
|
+
this.onFlush(block);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
/** Tolerant text extraction from a Pi message shape (string, {text}, or
|
|
70
|
+
* content-block arrays). Exact field calibration is a VM-proof concern; this
|
|
71
|
+
* covers the documented shapes without throwing on unknowns. */
|
|
72
|
+
export function extractMessageText(message) {
|
|
73
|
+
if (typeof message === "string")
|
|
74
|
+
return message;
|
|
75
|
+
if (message === null || typeof message !== "object")
|
|
76
|
+
return "";
|
|
77
|
+
const m = message;
|
|
78
|
+
if (typeof m.text === "string")
|
|
79
|
+
return m.text;
|
|
80
|
+
if (Array.isArray(m.content)) {
|
|
81
|
+
return m.content
|
|
82
|
+
.map((block) => {
|
|
83
|
+
if (typeof block === "string")
|
|
84
|
+
return block;
|
|
85
|
+
if (block !== null && typeof block === "object" && typeof block.text === "string") {
|
|
86
|
+
return block.text;
|
|
87
|
+
}
|
|
88
|
+
return "";
|
|
89
|
+
})
|
|
90
|
+
.join("");
|
|
91
|
+
}
|
|
92
|
+
if (typeof m.content === "string")
|
|
93
|
+
return m.content;
|
|
94
|
+
return "";
|
|
95
|
+
}
|
|
96
|
+
export function mapPiEvent(event) {
|
|
97
|
+
const type = typeof event.type === "string" ? event.type : "";
|
|
98
|
+
switch (type) {
|
|
99
|
+
case "agent_start":
|
|
100
|
+
return { mirrorLines: [], activity: { hookEvent: "active", subtype: "agent_start" }, streaming: true };
|
|
101
|
+
case "agent_end":
|
|
102
|
+
return { mirrorLines: [""], activity: { hookEvent: "Stop", subtype: "agent_end" }, streaming: false };
|
|
103
|
+
case "turn_start":
|
|
104
|
+
case "turn_end":
|
|
105
|
+
case "message_start":
|
|
106
|
+
return { mirrorLines: [] };
|
|
107
|
+
case "message_update": {
|
|
108
|
+
const delta = extractMessageText(event.message ?? event.delta);
|
|
109
|
+
return delta ? { mirrorLines: [], mirrorAppend: delta } : { mirrorLines: [] };
|
|
110
|
+
}
|
|
111
|
+
case "message_end": {
|
|
112
|
+
// The message text already streamed via message_update appends; this
|
|
113
|
+
// terminates the line. (mapPiEvent is stateless, so a hypothetical
|
|
114
|
+
// updates-carried-nothing case is a VM-calibration follow-up, not
|
|
115
|
+
// silently guessed here.)
|
|
116
|
+
return { mirrorLines: [""] };
|
|
117
|
+
}
|
|
118
|
+
case "tool_execution_start": {
|
|
119
|
+
const tool = typeof event.toolName === "string" ? event.toolName : (typeof event.name === "string" ? event.name : "tool");
|
|
120
|
+
return { mirrorLines: [` ⚙ ${tool} …`], activity: { hookEvent: "PreToolUse", subtype: tool } };
|
|
121
|
+
}
|
|
122
|
+
case "tool_execution_end": {
|
|
123
|
+
const tool = typeof event.toolName === "string" ? event.toolName : (typeof event.name === "string" ? event.name : "tool");
|
|
124
|
+
const failed = event.isError === true || event.error != null;
|
|
125
|
+
return { mirrorLines: [` ⚙ ${tool} ${failed ? "FAILED" : "done"}`] };
|
|
126
|
+
}
|
|
127
|
+
case "queue_update":
|
|
128
|
+
return { mirrorLines: [] };
|
|
129
|
+
case "compaction_start":
|
|
130
|
+
return { mirrorLines: ["[pi] compacting context…"], activity: { hookEvent: "active", subtype: "compaction" } };
|
|
131
|
+
case "compaction_end":
|
|
132
|
+
return { mirrorLines: ["[pi] compaction done"] };
|
|
133
|
+
case "auto_retry_start":
|
|
134
|
+
return { mirrorLines: ["[pi] transient error — retrying"], activity: { hookEvent: "active", subtype: "auto_retry" } };
|
|
135
|
+
case "auto_retry_end":
|
|
136
|
+
return { mirrorLines: [] };
|
|
137
|
+
case "extension_error": {
|
|
138
|
+
const message = typeof event.message === "string" ? event.message : "extension error";
|
|
139
|
+
return { mirrorLines: [`${PI_RUNNER_ERROR_MARKER} extension: ${message}`] };
|
|
140
|
+
}
|
|
141
|
+
default:
|
|
142
|
+
return { mirrorLines: [] };
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
const GET_STATE_ID = "pi-runner-get-state";
|
|
146
|
+
const CATCH_UP_ID = "pi-runner-catch-up";
|
|
147
|
+
const CURSOR_REFRESH_ID = "pi-runner-cursor-refresh";
|
|
148
|
+
export class RunnerCore {
|
|
149
|
+
io;
|
|
150
|
+
identity;
|
|
151
|
+
opts;
|
|
152
|
+
streaming = false;
|
|
153
|
+
sessionFile;
|
|
154
|
+
sessionId;
|
|
155
|
+
lastEntryId;
|
|
156
|
+
ready = false;
|
|
157
|
+
constructor(io, identity, opts = {}) {
|
|
158
|
+
this.io = io;
|
|
159
|
+
this.identity = identity;
|
|
160
|
+
this.opts = opts;
|
|
161
|
+
// The durable cursor seeds from the carried-over value (FR-5) so this
|
|
162
|
+
// instance's own sidecar writes never regress it to undefined before a
|
|
163
|
+
// newer entry supersedes it.
|
|
164
|
+
this.lastEntryId = opts.catchUpSince;
|
|
165
|
+
}
|
|
166
|
+
/** Kick off identity capture. Called once pi's RPC stream is up. */
|
|
167
|
+
start() {
|
|
168
|
+
this.io.sendRpc({ type: "get_state", id: GET_STATE_ID });
|
|
169
|
+
if (this.opts.catchUpSince) {
|
|
170
|
+
// Durable catch-up cursor (FR-5): replay session entries the previous
|
|
171
|
+
// runner instance had not yet projected. Mirror-only; activity states
|
|
172
|
+
// are live-only signals.
|
|
173
|
+
this.io.sendRpc({ type: "get_entries", since: this.opts.catchUpSince, id: CATCH_UP_ID });
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
/** One LF-delimited JSONL record from pi stdout. */
|
|
177
|
+
handlePiLine(rawLine) {
|
|
178
|
+
const line = rawLine.trim();
|
|
179
|
+
if (!line)
|
|
180
|
+
return;
|
|
181
|
+
let record;
|
|
182
|
+
try {
|
|
183
|
+
const parsed = JSON.parse(line);
|
|
184
|
+
if (parsed === null || typeof parsed !== "object" || Array.isArray(parsed))
|
|
185
|
+
return;
|
|
186
|
+
record = parsed;
|
|
187
|
+
}
|
|
188
|
+
catch {
|
|
189
|
+
// Non-JSON noise on pi stdout — mirror it verbatim so nothing hides.
|
|
190
|
+
this.io.mirrorLine(line);
|
|
191
|
+
return;
|
|
192
|
+
}
|
|
193
|
+
if (record.type === "response") {
|
|
194
|
+
this.handleResponse(record);
|
|
195
|
+
return;
|
|
196
|
+
}
|
|
197
|
+
this.handleEvent(record);
|
|
198
|
+
}
|
|
199
|
+
/** One aggregated paste block from pane stdin. */
|
|
200
|
+
handleUserBlock(block) {
|
|
201
|
+
if (block === "/abort") {
|
|
202
|
+
this.io.sendRpc({ type: "abort" });
|
|
203
|
+
this.io.mirrorLine("[pi-runner] abort sent");
|
|
204
|
+
return;
|
|
205
|
+
}
|
|
206
|
+
if (block.startsWith("/followup ")) {
|
|
207
|
+
const message = block.slice("/followup ".length);
|
|
208
|
+
this.io.sendRpc({ type: "follow_up", message });
|
|
209
|
+
this.io.mirrorLine(`you (follow-up) ▸ ${message}`);
|
|
210
|
+
return;
|
|
211
|
+
}
|
|
212
|
+
if (this.streaming) {
|
|
213
|
+
// Mid-stream: steer delivers after the current turn's tool calls,
|
|
214
|
+
// before the next model call (Pi's documented semantics).
|
|
215
|
+
this.io.sendRpc({ type: "steer", message: block });
|
|
216
|
+
this.io.mirrorLine(`you (steer) ▸ ${block}`);
|
|
217
|
+
return;
|
|
218
|
+
}
|
|
219
|
+
this.io.sendRpc({ type: "prompt", message: block });
|
|
220
|
+
this.io.mirrorLine(`you ▸ ${block}`);
|
|
221
|
+
}
|
|
222
|
+
/** Pi process exit — honest, loud, durable. */
|
|
223
|
+
handlePiExit(code) {
|
|
224
|
+
this.ready = false;
|
|
225
|
+
this.io.mirrorLine(`${PI_RUNNER_EXIT_MARKER} pi exited (code ${code ?? "unknown"})`);
|
|
226
|
+
this.writeSidecar({ exited: { code, at: this.io.now() } });
|
|
227
|
+
this.io.postActivity(this.activityPayload("Stop", "pi_exited"));
|
|
228
|
+
}
|
|
229
|
+
handleResponse(record) {
|
|
230
|
+
if (record.id === GET_STATE_ID) {
|
|
231
|
+
const data = (record.data ?? record.state ?? record);
|
|
232
|
+
const sessionFile = typeof data.sessionFile === "string" ? data.sessionFile : undefined;
|
|
233
|
+
const sessionId = typeof data.sessionId === "string" ? data.sessionId : undefined;
|
|
234
|
+
this.sessionFile = sessionFile ?? this.sessionFile;
|
|
235
|
+
this.sessionId = sessionId ?? this.sessionId;
|
|
236
|
+
this.ready = true;
|
|
237
|
+
this.writeSidecar({});
|
|
238
|
+
this.io.mirrorLine(`${PI_RUNNER_READY_MARKER} session=${this.sessionFile ?? "unknown"}`);
|
|
239
|
+
this.io.postActivity({
|
|
240
|
+
eventFamily: "session_identity",
|
|
241
|
+
sessionName: this.identity.sessionName,
|
|
242
|
+
nodeId: this.identity.nodeId ?? null,
|
|
243
|
+
runtime: "pi",
|
|
244
|
+
hookEvent: "SessionStart",
|
|
245
|
+
sessionId: this.sessionId ?? "unknown",
|
|
246
|
+
sessionFile: this.sessionFile ?? null,
|
|
247
|
+
occurredAt: this.io.now(),
|
|
248
|
+
});
|
|
249
|
+
return;
|
|
250
|
+
}
|
|
251
|
+
if (record.id === CURSOR_REFRESH_ID || record.id === CATCH_UP_ID) {
|
|
252
|
+
const data = (record.data ?? record);
|
|
253
|
+
const entries = Array.isArray(data.entries) ? data.entries : (Array.isArray(record.entries) ? record.entries : []);
|
|
254
|
+
const last = entries.at(-1);
|
|
255
|
+
const lastId = last !== null && typeof last === "object" && typeof last.id === "string"
|
|
256
|
+
? last.id
|
|
257
|
+
: undefined;
|
|
258
|
+
if (lastId) {
|
|
259
|
+
this.lastEntryId = lastId;
|
|
260
|
+
this.writeSidecar({});
|
|
261
|
+
}
|
|
262
|
+
return;
|
|
263
|
+
}
|
|
264
|
+
// Other responses (prompt accepted, …) — surface errors.
|
|
265
|
+
if (record.success === false || record.error != null) {
|
|
266
|
+
const message = typeof record.error === "string" ? record.error : "request failed";
|
|
267
|
+
this.io.mirrorLine(`${PI_RUNNER_ERROR_MARKER} rpc: ${message}`);
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
handleEvent(event) {
|
|
271
|
+
// Durable cursor: any event carrying a session-entry id advances it.
|
|
272
|
+
const entryId = typeof event.entryId === "string" ? event.entryId : (typeof event.id === "string" ? event.id : undefined);
|
|
273
|
+
if (entryId) {
|
|
274
|
+
this.lastEntryId = entryId;
|
|
275
|
+
this.writeSidecar({});
|
|
276
|
+
}
|
|
277
|
+
const mapped = mapPiEvent(event);
|
|
278
|
+
if (mapped.streaming !== undefined)
|
|
279
|
+
this.streaming = mapped.streaming;
|
|
280
|
+
if (event.type === "agent_end") {
|
|
281
|
+
// QA RED fold (qitem-20260707020922): live events do not reliably carry
|
|
282
|
+
// session-entry ids, so the durable cursor starved (lastEntryId stayed
|
|
283
|
+
// null in real runs). Refresh it from the source of truth after every
|
|
284
|
+
// completed turn — get_entries returns append-order entries with stable
|
|
285
|
+
// ids; the response handler advances the cursor from the tail.
|
|
286
|
+
this.io.sendRpc({ type: "get_entries", id: CURSOR_REFRESH_ID });
|
|
287
|
+
}
|
|
288
|
+
if (mapped.mirrorAppend)
|
|
289
|
+
this.io.mirrorAppend(mapped.mirrorAppend);
|
|
290
|
+
for (const line of mapped.mirrorLines)
|
|
291
|
+
this.io.mirrorLine(line);
|
|
292
|
+
if (mapped.activity) {
|
|
293
|
+
this.io.postActivity(this.activityPayload(mapped.activity.hookEvent, mapped.activity.subtype));
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
activityPayload(hookEvent, subtype) {
|
|
297
|
+
return {
|
|
298
|
+
sessionName: this.identity.sessionName,
|
|
299
|
+
nodeId: this.identity.nodeId ?? null,
|
|
300
|
+
runtime: "pi",
|
|
301
|
+
hookEvent,
|
|
302
|
+
subtype,
|
|
303
|
+
occurredAt: this.io.now(),
|
|
304
|
+
};
|
|
305
|
+
}
|
|
306
|
+
writeSidecar(patch) {
|
|
307
|
+
this.io.writeSidecar({
|
|
308
|
+
ready: this.ready,
|
|
309
|
+
// Launch-attempt scope: every write is stamped so the daemon can
|
|
310
|
+
// distinguish THIS runner instance's truth from stale artifacts.
|
|
311
|
+
launchId: this.identity.launchId,
|
|
312
|
+
sessionFile: this.sessionFile,
|
|
313
|
+
sessionId: this.sessionId,
|
|
314
|
+
lastEntryId: this.lastEntryId,
|
|
315
|
+
updatedAt: this.io.now(),
|
|
316
|
+
...patch,
|
|
317
|
+
});
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
export function parseRunnerArgs(argv) {
|
|
321
|
+
const args = {};
|
|
322
|
+
for (let i = 0; i < argv.length; i++) {
|
|
323
|
+
const flag = argv[i];
|
|
324
|
+
const next = () => {
|
|
325
|
+
const value = argv[++i];
|
|
326
|
+
if (value === undefined)
|
|
327
|
+
throw new Error(`${flag} requires a value`);
|
|
328
|
+
return value;
|
|
329
|
+
};
|
|
330
|
+
switch (flag) {
|
|
331
|
+
case "--session-name":
|
|
332
|
+
args.sessionName = next();
|
|
333
|
+
break;
|
|
334
|
+
case "--state-root":
|
|
335
|
+
args.stateRoot = next();
|
|
336
|
+
break;
|
|
337
|
+
case "--cwd":
|
|
338
|
+
args.cwd = next();
|
|
339
|
+
break;
|
|
340
|
+
case "--launch-id":
|
|
341
|
+
args.launchId = next();
|
|
342
|
+
break;
|
|
343
|
+
case "--model":
|
|
344
|
+
args.model = next();
|
|
345
|
+
break;
|
|
346
|
+
case "--session":
|
|
347
|
+
args.sessionFile = next();
|
|
348
|
+
break;
|
|
349
|
+
case "--fork":
|
|
350
|
+
args.forkRef = next();
|
|
351
|
+
break;
|
|
352
|
+
case "--approve":
|
|
353
|
+
args.trust = "approve";
|
|
354
|
+
break;
|
|
355
|
+
case "--no-approve":
|
|
356
|
+
args.trust = "no-approve";
|
|
357
|
+
break;
|
|
358
|
+
default: throw new Error(`unknown flag: ${flag}`);
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
if (!args.sessionName)
|
|
362
|
+
throw new Error("--session-name is required");
|
|
363
|
+
if (!args.stateRoot)
|
|
364
|
+
throw new Error("--state-root is required");
|
|
365
|
+
if (!args.cwd)
|
|
366
|
+
throw new Error("--cwd is required");
|
|
367
|
+
if (!args.launchId)
|
|
368
|
+
throw new Error("--launch-id is required (launch-attempt scoping)");
|
|
369
|
+
if (!args.trust)
|
|
370
|
+
throw new Error("an explicit trust flag is required: --approve or --no-approve");
|
|
371
|
+
if (args.sessionFile && args.forkRef)
|
|
372
|
+
throw new Error("--session and --fork are mutually exclusive");
|
|
373
|
+
return args;
|
|
374
|
+
}
|
|
375
|
+
function resolveActivityEndpoint(env) {
|
|
376
|
+
let baseUrl = env.OPENRIG_URL?.trim() || null;
|
|
377
|
+
let token = env.OPENRIG_ACTIVITY_HOOK_TOKEN?.trim() || null;
|
|
378
|
+
if (!baseUrl && env.OPENRIG_PORT) {
|
|
379
|
+
baseUrl = `http://${env.OPENRIG_HOST?.trim() || "127.0.0.1"}:${env.OPENRIG_PORT.trim()}`;
|
|
380
|
+
}
|
|
381
|
+
if (!baseUrl || !token) {
|
|
382
|
+
try {
|
|
383
|
+
const home = env.OPENRIG_HOME?.trim() || nodePath.join(process.env.HOME ?? "", ".openrig");
|
|
384
|
+
const parsed = JSON.parse(fs.readFileSync(nodePath.join(home, "activity-endpoint.json"), "utf8"));
|
|
385
|
+
if (!baseUrl && typeof parsed.baseUrl === "string")
|
|
386
|
+
baseUrl = parsed.baseUrl;
|
|
387
|
+
if (!token && typeof parsed.token === "string")
|
|
388
|
+
token = parsed.token;
|
|
389
|
+
}
|
|
390
|
+
catch {
|
|
391
|
+
// absent/malformed — activity POSTs no-op; the sidecar + mirror still work.
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
return baseUrl && token ? { baseUrl, token } : null;
|
|
395
|
+
}
|
|
396
|
+
/** The runner-side sidecar handshake, extracted for hermetic testing (guard
|
|
397
|
+
* re-verdict, qitem-20260707013815): read the PRIOR record's durable cursor
|
|
398
|
+
* FIRST, then stamp the launch-scoped pending record — the write carries the
|
|
399
|
+
* cursor forward so no reset in the chain can erase it. `catchUpSince` is
|
|
400
|
+
* only surfaced when resuming: a fresh/fork session has no prior projection
|
|
401
|
+
* to catch up. */
|
|
402
|
+
export function prepareRunnerSidecar(fsOps, runnerStatePath, launchId, resuming, now) {
|
|
403
|
+
let prior = null;
|
|
404
|
+
try {
|
|
405
|
+
prior = fsOps.exists(runnerStatePath) ? parsePiRunnerState(fsOps.readFile(runnerStatePath)) : null;
|
|
406
|
+
}
|
|
407
|
+
catch { /* unreadable prior sidecar — treated as absent */ }
|
|
408
|
+
try {
|
|
409
|
+
fsOps.writeFile(runnerStatePath, JSON.stringify(buildPendingRunnerState(launchId, now(), prior)));
|
|
410
|
+
}
|
|
411
|
+
catch { /* best-effort; the adapter pre-writes an equivalent pending record */ }
|
|
412
|
+
return { catchUpSince: resuming ? prior?.lastEntryId : undefined };
|
|
413
|
+
}
|
|
414
|
+
export async function main(argv = process.argv.slice(2)) {
|
|
415
|
+
let args;
|
|
416
|
+
try {
|
|
417
|
+
args = parseRunnerArgs(argv);
|
|
418
|
+
}
|
|
419
|
+
catch (err) {
|
|
420
|
+
console.error(`${PI_RUNNER_ERROR_MARKER} ${err.message}`);
|
|
421
|
+
process.exitCode = 2;
|
|
422
|
+
return;
|
|
423
|
+
}
|
|
424
|
+
const paths = piSeatPaths(args.stateRoot, args.sessionName);
|
|
425
|
+
fs.mkdirSync(paths.agentDir, { recursive: true });
|
|
426
|
+
fs.mkdirSync(paths.sessionsDir, { recursive: true });
|
|
427
|
+
const { catchUpSince } = prepareRunnerSidecar({
|
|
428
|
+
readFile: (p) => fs.readFileSync(p, "utf8"),
|
|
429
|
+
writeFile: (p, c) => fs.writeFileSync(p, c),
|
|
430
|
+
exists: (p) => fs.existsSync(p),
|
|
431
|
+
}, paths.runnerStatePath, args.launchId, !!args.sessionFile, () => new Date().toISOString());
|
|
432
|
+
const endpoint = resolveActivityEndpoint(process.env);
|
|
433
|
+
const childEnv = buildPiChildEnv(process.env, {
|
|
434
|
+
agentDir: paths.agentDir,
|
|
435
|
+
sessionsDir: paths.sessionsDir,
|
|
436
|
+
model: args.model,
|
|
437
|
+
});
|
|
438
|
+
const childArgs = buildPiChildArgs({
|
|
439
|
+
sessionsDir: paths.sessionsDir,
|
|
440
|
+
sessionName: args.sessionName,
|
|
441
|
+
model: args.model,
|
|
442
|
+
trust: args.trust,
|
|
443
|
+
sessionFile: args.sessionFile,
|
|
444
|
+
forkRef: args.forkRef,
|
|
445
|
+
});
|
|
446
|
+
console.log(`[pi-runner] starting pi --mode rpc (seat ${args.sessionName})`);
|
|
447
|
+
console.log(`[pi-runner] send text normally; prefixes: "/followup <text>" queues after the turn, "/abort" cancels`);
|
|
448
|
+
const child = spawn("pi", childArgs, {
|
|
449
|
+
cwd: args.cwd,
|
|
450
|
+
env: childEnv,
|
|
451
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
452
|
+
});
|
|
453
|
+
const io = {
|
|
454
|
+
sendRpc: (cmd) => {
|
|
455
|
+
try {
|
|
456
|
+
child.stdin.write(`${JSON.stringify(cmd)}\n`);
|
|
457
|
+
}
|
|
458
|
+
catch { /* exit handler reports */ }
|
|
459
|
+
},
|
|
460
|
+
mirrorLine: (line) => process.stdout.write(`${line}\n`),
|
|
461
|
+
mirrorAppend: (text) => process.stdout.write(text),
|
|
462
|
+
postActivity: (payload) => {
|
|
463
|
+
if (!endpoint || typeof fetch !== "function")
|
|
464
|
+
return;
|
|
465
|
+
const controller = new AbortController();
|
|
466
|
+
const timeout = setTimeout(() => controller.abort(), 1500);
|
|
467
|
+
fetch(new URL("/api/activity/hooks", endpoint.baseUrl).toString(), {
|
|
468
|
+
method: "POST",
|
|
469
|
+
headers: { "content-type": "application/json", authorization: `Bearer ${endpoint.token}` },
|
|
470
|
+
body: JSON.stringify(payload),
|
|
471
|
+
signal: controller.signal,
|
|
472
|
+
}).catch(() => { }).finally(() => clearTimeout(timeout));
|
|
473
|
+
},
|
|
474
|
+
writeSidecar: (state) => {
|
|
475
|
+
try {
|
|
476
|
+
fs.writeFileSync(paths.runnerStatePath, JSON.stringify(state));
|
|
477
|
+
}
|
|
478
|
+
catch { /* best-effort; adapter falls back to pane markers */ }
|
|
479
|
+
},
|
|
480
|
+
now: () => new Date().toISOString(),
|
|
481
|
+
};
|
|
482
|
+
const core = new RunnerCore(io, { sessionName: args.sessionName, nodeId: process.env.OPENRIG_NODE_ID, launchId: args.launchId }, { catchUpSince });
|
|
483
|
+
const aggregator = new PasteAggregator((block) => core.handleUserBlock(block));
|
|
484
|
+
readline.createInterface({ input: child.stdout }).on("line", (line) => core.handlePiLine(line));
|
|
485
|
+
readline.createInterface({ input: child.stderr }).on("line", (line) => {
|
|
486
|
+
if (line.trim())
|
|
487
|
+
process.stdout.write(`[pi:err] ${line}\n`);
|
|
488
|
+
});
|
|
489
|
+
readline.createInterface({ input: process.stdin }).on("line", (line) => aggregator.addLine(line));
|
|
490
|
+
child.on("error", (err) => {
|
|
491
|
+
console.error(`${PI_RUNNER_ERROR_MARKER} failed to spawn pi: ${err.message}`);
|
|
492
|
+
core.handlePiExit(null);
|
|
493
|
+
process.exitCode = 1;
|
|
494
|
+
});
|
|
495
|
+
child.on("exit", (code) => {
|
|
496
|
+
core.handlePiExit(code);
|
|
497
|
+
process.exitCode = code ?? 1;
|
|
498
|
+
});
|
|
499
|
+
core.start();
|
|
500
|
+
}
|
|
501
|
+
// Compiled-entry guard: run main() only when executed directly (not imported
|
|
502
|
+
// by tests). import.meta.url === file URL of process.argv[1] when direct.
|
|
503
|
+
const invokedDirectly = (() => {
|
|
504
|
+
try {
|
|
505
|
+
const entry = process.argv[1];
|
|
506
|
+
if (!entry)
|
|
507
|
+
return false;
|
|
508
|
+
// pathToFileURL handles percent-encoding (spaces etc.) the way
|
|
509
|
+
// import.meta.url does — a hand-built `file://${path}` string does not.
|
|
510
|
+
return import.meta.url === pathToFileURL(nodePath.resolve(entry)).href;
|
|
511
|
+
}
|
|
512
|
+
catch {
|
|
513
|
+
return false;
|
|
514
|
+
}
|
|
515
|
+
})();
|
|
516
|
+
if (invokedDirectly) {
|
|
517
|
+
void main();
|
|
518
|
+
}
|
|
519
|
+
//# sourceMappingURL=pi-runner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pi-runner.js","sourceRoot":"","sources":["../../src/adapters/pi-runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import type { TmuxAdapter } from "./tmux.js";
|
|
2
|
+
import type { RuntimeAdapter, NodeBinding, ResolvedStartupFile, InstalledResource, ProjectionResult, StartupDeliveryResult, ReadinessResult, HarnessLaunchResult, ForkSource } from "../domain/runtime-adapter.js";
|
|
3
|
+
import type { ProjectionPlan } from "../domain/projection-planner.js";
|
|
4
|
+
export interface PiAdapterFsOps {
|
|
5
|
+
readFile(path: string): string;
|
|
6
|
+
writeFile(path: string, content: string): void;
|
|
7
|
+
exists(path: string): boolean;
|
|
8
|
+
mkdirp(path: string): void;
|
|
9
|
+
listFiles?(dirPath: string): string[];
|
|
10
|
+
}
|
|
11
|
+
export interface PiRuntimeAdapterDeps {
|
|
12
|
+
tmux: TmuxAdapter;
|
|
13
|
+
fsOps: PiAdapterFsOps;
|
|
14
|
+
/** Root under which every Pi seat gets its isolated state dir (FR-7).
|
|
15
|
+
* Typically <OPENRIG_HOME>/state/pi. */
|
|
16
|
+
stateRoot: string;
|
|
17
|
+
/** Absolute path to the compiled pi-runner entry in the daemon dist. */
|
|
18
|
+
runnerEntryPath: string;
|
|
19
|
+
/** Trust posture for managed launches (BR-5 — always explicit; ambient
|
|
20
|
+
* `ask` silently skips in RPC mode). Default: "no-approve" (the
|
|
21
|
+
* conservative floor; seat-level guidance/skills live in the seat's
|
|
22
|
+
* managed agent dir, which needs no project trust). */
|
|
23
|
+
trustPosture?: "approve" | "no-approve";
|
|
24
|
+
sleep?: (ms: number) => Promise<void>;
|
|
25
|
+
/** Launch-attempt id minting (tests inject; defaults to randomUUID). */
|
|
26
|
+
newLaunchId?: () => string;
|
|
27
|
+
}
|
|
28
|
+
export declare class PiRuntimeAdapter implements RuntimeAdapter {
|
|
29
|
+
readonly runtime = "pi";
|
|
30
|
+
private tmux;
|
|
31
|
+
private fs;
|
|
32
|
+
private stateRoot;
|
|
33
|
+
private runnerEntryPath;
|
|
34
|
+
private trustPosture;
|
|
35
|
+
private sleep;
|
|
36
|
+
private newLaunchId;
|
|
37
|
+
constructor(deps: PiRuntimeAdapterDeps);
|
|
38
|
+
/** The pi-runner sidecar reader shape resume-token-capture consumes
|
|
39
|
+
* (deriveResumeToken's piRunnerStateStore dep). */
|
|
40
|
+
readSessionFile(sessionName: string): {
|
|
41
|
+
ok: true;
|
|
42
|
+
sessionFile: string;
|
|
43
|
+
} | {
|
|
44
|
+
ok: false;
|
|
45
|
+
reason: string;
|
|
46
|
+
};
|
|
47
|
+
listInstalled(binding: NodeBinding): Promise<InstalledResource[]>;
|
|
48
|
+
project(plan: ProjectionPlan, binding: NodeBinding): Promise<ProjectionResult>;
|
|
49
|
+
deliverStartup(files: ResolvedStartupFile[], binding: NodeBinding): Promise<StartupDeliveryResult>;
|
|
50
|
+
launchHarness(binding: NodeBinding, opts: {
|
|
51
|
+
name: string;
|
|
52
|
+
resumeToken?: string;
|
|
53
|
+
forkSource?: ForkSource;
|
|
54
|
+
}): Promise<HarnessLaunchResult>;
|
|
55
|
+
checkReady(binding: NodeBinding): Promise<ReadinessResult>;
|
|
56
|
+
private readRunnerState;
|
|
57
|
+
private waitForRunnerReady;
|
|
58
|
+
private projectEntry;
|
|
59
|
+
private mergeGuidance;
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=pi-runtime-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pi-runtime-adapter.d.ts","sourceRoot":"","sources":["../../src/adapters/pi-runtime-adapter.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,KAAK,EACV,cAAc,EAAE,WAAW,EAAE,mBAAmB,EAChD,iBAAiB,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,eAAe,EAC3E,mBAAmB,EAAE,UAAU,EAChC,MAAM,8BAA8B,CAAC;AAEtC,OAAO,KAAK,EAAE,cAAc,EAAmB,MAAM,iCAAiC,CAAC;AAWvF,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IAC/B,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/C,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IAC9B,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,SAAS,CAAC,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;CACvC;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,WAAW,CAAC;IAClB,KAAK,EAAE,cAAc,CAAC;IACtB;6CACyC;IACzC,SAAS,EAAE,MAAM,CAAC;IAClB,wEAAwE;IACxE,eAAe,EAAE,MAAM,CAAC;IACxB;;;4DAGwD;IACxD,YAAY,CAAC,EAAE,SAAS,GAAG,YAAY,CAAC;IACxC,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,wEAAwE;IACxE,WAAW,CAAC,EAAE,MAAM,MAAM,CAAC;CAC5B;AAED,qBAAa,gBAAiB,YAAW,cAAc;IACrD,QAAQ,CAAC,OAAO,QAAQ;IACxB,OAAO,CAAC,IAAI,CAAc;IAC1B,OAAO,CAAC,EAAE,CAAiB;IAC3B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,YAAY,CAA2B;IAC/C,OAAO,CAAC,KAAK,CAAgC;IAC7C,OAAO,CAAC,WAAW,CAAe;gBAEtB,IAAI,EAAE,oBAAoB;IAUtC;wDACoD;IACpD,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG;QAAE,EAAE,EAAE,IAAI,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,GAAG;QAAE,EAAE,EAAE,KAAK,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE;IAYjG,aAAa,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAcjE,OAAO,CAAC,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAwB9E,cAAc,CAAC,KAAK,EAAE,mBAAmB,EAAE,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAkDlG,aAAa,CACjB,OAAO,EAAE,WAAW,EACpB,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,UAAU,CAAA;KAAE,GACpE,OAAO,CAAC,mBAAmB,CAAC;IA+FzB,UAAU,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,eAAe,CAAC;IA6ChE,OAAO,CAAC,eAAe;YAUT,kBAAkB;IAwChC,OAAO,CAAC,YAAY;IAiCpB,OAAO,CAAC,aAAa;CAetB"}
|