@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
package/daemon/dist/startup.js
CHANGED
|
@@ -5,8 +5,10 @@ import { bindingsSessionsSchema } from "./db/migrations/002_bindings_sessions.js
|
|
|
5
5
|
import { eventsSchema } from "./db/migrations/003_events.js";
|
|
6
6
|
import { RigRepository } from "./domain/rig-repository.js";
|
|
7
7
|
import { SessionRegistry } from "./domain/session-registry.js";
|
|
8
|
+
import { isHumanSeatSessionRef, parseSessionName } from "./domain/session-name.js";
|
|
8
9
|
import { EventBus } from "./domain/event-bus.js";
|
|
9
10
|
import { NodeLauncher } from "./domain/node-launcher.js";
|
|
11
|
+
import { TmuxOptionDefaultsApplier } from "./domain/tmux-option-defaults.js";
|
|
10
12
|
import { TmuxAdapter } from "./adapters/tmux.js";
|
|
11
13
|
import { CmuxAdapter } from "./adapters/cmux.js";
|
|
12
14
|
import { execCommand } from "./adapters/tmux-exec.js";
|
|
@@ -17,6 +19,7 @@ import { SnapshotCapture } from "./domain/snapshot-capture.js";
|
|
|
17
19
|
import { RestoreOrchestrator } from "./domain/restore-orchestrator.js";
|
|
18
20
|
import { ClaudeResumeAdapter } from "./adapters/claude-resume.js";
|
|
19
21
|
import { CodexResumeAdapter } from "./adapters/codex-resume.js";
|
|
22
|
+
import { PiResumeAdapter } from "./adapters/pi-resume.js";
|
|
20
23
|
import { RigSpecExporter } from "./domain/rigspec-exporter.js";
|
|
21
24
|
import { PodRepository } from "./domain/pod-repository.js";
|
|
22
25
|
import { RigSpecPreflight } from "./domain/rigspec-preflight.js";
|
|
@@ -59,6 +62,7 @@ import { AskService } from "./domain/ask-service.js";
|
|
|
59
62
|
import { ChatRepository } from "./domain/chat-repository.js";
|
|
60
63
|
import { StreamStore } from "./domain/stream-store.js";
|
|
61
64
|
import { QueueRepository } from "./domain/queue-repository.js";
|
|
65
|
+
import { createWorkflowFrontierPredicate } from "./domain/workflow-frontier-guard.js";
|
|
62
66
|
import { InboxHandler } from "./domain/inbox-handler.js";
|
|
63
67
|
import { OutboxHandler } from "./domain/outbox-handler.js";
|
|
64
68
|
import { ProjectClassifier } from "./domain/project-classifier.js";
|
|
@@ -137,6 +141,12 @@ import { resumeVerificationSchema } from "./db/migrations/045_resume_verificatio
|
|
|
137
141
|
import { seatIdentityVerdictsSchema } from "./db/migrations/046_seat_identity_verdicts.js";
|
|
138
142
|
import { eventsNodeTypeIndexSchema } from "./db/migrations/047_events_node_type_index.js";
|
|
139
143
|
import { queueItemEvidenceRefSchema } from "./db/migrations/048_queue_item_evidence_ref.js";
|
|
144
|
+
import { workflowInstanceVersionSchema } from "./db/migrations/049_workflow_instance_version.js";
|
|
145
|
+
import { workflowSpecJsonSchema } from "./db/migrations/050_workflow_spec_json.js";
|
|
146
|
+
import { workflowResumeSchema } from "./db/migrations/051_workflow_resume.js";
|
|
147
|
+
import { workflowInstanceBoundRigSchema } from "./db/migrations/052_workflow_instance_bound_rig.js";
|
|
148
|
+
import { sessionsNodeIdIndexSchema } from "./db/migrations/053_sessions_node_id_index.js";
|
|
149
|
+
import { queueTransitionsArchiveSchema } from "./db/migrations/054_queue_transitions_archive.js";
|
|
140
150
|
import { RigPolicyStore } from "./domain/rig-policy/rig-policy-store.js";
|
|
141
151
|
import { MissionControlActionLog } from "./domain/mission-control/mission-control-action-log.js";
|
|
142
152
|
import { MissionControlWriteContract } from "./domain/mission-control/mission-control-write-contract.js";
|
|
@@ -157,6 +167,15 @@ const KNOWN_PROVIDER_AUTH_ENV = new Set([
|
|
|
157
167
|
"OPENAI_BASE_URL",
|
|
158
168
|
"OPENAI_ORG_ID",
|
|
159
169
|
"OPENAI_PROJECT_ID",
|
|
170
|
+
// OPR.0.4.6.PI1 FR-7 — Pi seat providers. Without these in the KNOWN set,
|
|
171
|
+
// a daemon-launched Pi seat can never receive its provider key (the
|
|
172
|
+
// pi-runner's own deny-by-default allowlist then has nothing to pass
|
|
173
|
+
// through). Double opt-in preserved: the operator must still name each var
|
|
174
|
+
// in recovery.provider_auth_env_allowlist. OpenRouter is the founder-ruled
|
|
175
|
+
// preferred path (2026-07-06); zai/kimi-coding are the secondary natives.
|
|
176
|
+
"OPENROUTER_API_KEY",
|
|
177
|
+
"ZAI_API_KEY",
|
|
178
|
+
"KIMI_API_KEY",
|
|
160
179
|
]);
|
|
161
180
|
export function collectAllowlistedProviderAuthEnv(raw, env) {
|
|
162
181
|
const out = {};
|
|
@@ -178,7 +197,7 @@ export function collectAllowlistedProviderAuthEnv(raw, env) {
|
|
|
178
197
|
export async function createDaemon(opts) {
|
|
179
198
|
const dbPath = opts?.dbPath ?? ":memory:";
|
|
180
199
|
const db = createDb(dbPath);
|
|
181
|
-
migrate(db, [coreSchema, bindingsSessionsSchema, eventsSchema, snapshotsSchema, checkpointsSchema, resumeMetadataSchema, nodeSpecFieldsSchema, packagesSchema, installJournalSchema, journalSeqSchema, bootstrapSchema, discoverySchema, discoveryFkFix, agentspecRebootSchema, startupContextSchema, chatMessagesSchema, podNamespaceSchema, contextUsageSchema, externalCliAttachmentSchema, rigServicesSchema, seatHandoverObservabilitySchema, nodeCodexConfigProfileSchema, streamItemsSchema, queueItemsSchema, queueTransitionsSchema, inboxEntriesSchema, outboxEntriesSchema, projectClassificationsSchema, classifierLeasesSchema, viewsCustomSchema, watchdogJobsSchema, watchdogHistorySchema, workflowSpecsSchema, workflowInstancesSchema, workflowStepTrailsSchema, watchdogPolicyEnumExtensionSchema, missionControlActionsSchema, workspacePrimitiveSchema, queueTargetRepoSchema, workflowSpecsDiagnosticSchema, rigPolicySchema, rigArchiveSchema, resumeProvenanceSchema, queueItemSummarySchema, resumeVerificationSchema, seatIdentityVerdictsSchema, eventsNodeTypeIndexSchema, queueItemEvidenceRefSchema]);
|
|
200
|
+
migrate(db, [coreSchema, bindingsSessionsSchema, eventsSchema, snapshotsSchema, checkpointsSchema, resumeMetadataSchema, nodeSpecFieldsSchema, packagesSchema, installJournalSchema, journalSeqSchema, bootstrapSchema, discoverySchema, discoveryFkFix, agentspecRebootSchema, startupContextSchema, chatMessagesSchema, podNamespaceSchema, contextUsageSchema, externalCliAttachmentSchema, rigServicesSchema, seatHandoverObservabilitySchema, nodeCodexConfigProfileSchema, streamItemsSchema, queueItemsSchema, queueTransitionsSchema, inboxEntriesSchema, outboxEntriesSchema, projectClassificationsSchema, classifierLeasesSchema, viewsCustomSchema, watchdogJobsSchema, watchdogHistorySchema, workflowSpecsSchema, workflowInstancesSchema, workflowStepTrailsSchema, watchdogPolicyEnumExtensionSchema, missionControlActionsSchema, workspacePrimitiveSchema, queueTargetRepoSchema, workflowSpecsDiagnosticSchema, rigPolicySchema, rigArchiveSchema, resumeProvenanceSchema, queueItemSummarySchema, resumeVerificationSchema, seatIdentityVerdictsSchema, eventsNodeTypeIndexSchema, queueItemEvidenceRefSchema, workflowInstanceVersionSchema, workflowSpecJsonSchema, workflowResumeSchema, workflowInstanceBoundRigSchema, sessionsNodeIdIndexSchema, queueTransitionsArchiveSchema]);
|
|
182
201
|
const rigRepo = new RigRepository(db);
|
|
183
202
|
const sessionRegistry = new SessionRegistry(db);
|
|
184
203
|
const eventBus = new EventBus(db);
|
|
@@ -186,17 +205,17 @@ export async function createDaemon(opts) {
|
|
|
186
205
|
// Reject `<member>@<unknown-rig>` shapes by checking the rig portion
|
|
187
206
|
// against the rig registry. Bare ids without `@` are also rejected
|
|
188
207
|
// (no canonical rig binding).
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
208
|
+
// OPR.0.4.6.MH1 FR-8: this gate is the ARCHETYPE consumer of the shared
|
|
209
|
+
// parse contract — human-seat classification BEFORE parse, then the
|
|
210
|
+
// greedy first-@ rig (so "member@rig@x" looks up rig "rig@x", misses,
|
|
211
|
+
// and rejects with the same unknown_destination_rig as ever — BR-1).
|
|
192
212
|
const topologyValidateRig = (sessionRef) => {
|
|
193
213
|
if (isHumanSeatSessionRef(sessionRef))
|
|
194
214
|
return true;
|
|
195
|
-
const
|
|
196
|
-
if (
|
|
215
|
+
const parsed = parseSessionName(sessionRef);
|
|
216
|
+
if (parsed.kind !== "canonical")
|
|
197
217
|
return false;
|
|
198
|
-
|
|
199
|
-
return rigRepo.findRigsByName(rigName).length > 0;
|
|
218
|
+
return rigRepo.findRigsByName(parsed.rig).length > 0;
|
|
200
219
|
};
|
|
201
220
|
// PL-004 Phase A — shared coordination services. Constructed early so
|
|
202
221
|
// both the queueRepo dep slot and inboxHandler can share one instance.
|
|
@@ -204,6 +223,10 @@ export async function createDaemon(opts) {
|
|
|
204
223
|
// attachTransport().
|
|
205
224
|
const queueRepoInstance = new QueueRepository(db, eventBus, {
|
|
206
225
|
validateRig: topologyValidateRig,
|
|
226
|
+
// OPR.0.4.6.WF3 FR-6 — the frontier close-path guard's predicate,
|
|
227
|
+
// INJECTED here (arch layering pin: the queue never imports the
|
|
228
|
+
// workflow domain; startup wires them — the validateRig precedent).
|
|
229
|
+
workflowFrontierPredicate: createWorkflowFrontierPredicate(db),
|
|
207
230
|
});
|
|
208
231
|
// PL-004 Phase B — classifier lease manager. Constructed early so both
|
|
209
232
|
// the leaseManager dep slot and project-classifier can share one instance.
|
|
@@ -286,6 +309,26 @@ export async function createDaemon(opts) {
|
|
|
286
309
|
OPENRIG_ACTIVITY_HOOK_TOKEN: resolvedActivityHookToken,
|
|
287
310
|
...providerAuthEnv,
|
|
288
311
|
};
|
|
312
|
+
// OPR.0.4.6.02 S1 — ONE shared tmux option-defaults applier, injected into
|
|
313
|
+
// BOTH NodeLauncher and (via AppDeps → the seat-handover route) the fresh
|
|
314
|
+
// successor launcher, so every fresh seat gets the same mouse/status/
|
|
315
|
+
// clipboard defaults and the server-scope defaults assert once per daemon
|
|
316
|
+
// lifetime (shared memo). The status-bar read resolves `terminal.status_bar`
|
|
317
|
+
// FRESH per launch (resolveOne re-reads the config file) so an operator flip
|
|
318
|
+
// applies to the NEXT launch without a daemon restart; a resolution failure
|
|
319
|
+
// falls back to off (bar hidden).
|
|
320
|
+
const tmuxOptionSettings = new ContextPackSettingsStore();
|
|
321
|
+
const tmuxOptionDefaults = new TmuxOptionDefaultsApplier({
|
|
322
|
+
tmuxAdapter,
|
|
323
|
+
readTmuxOptionDefaults: () => {
|
|
324
|
+
try {
|
|
325
|
+
return { statusBar: tmuxOptionSettings.resolveOne("terminal.status_bar").value === true };
|
|
326
|
+
}
|
|
327
|
+
catch {
|
|
328
|
+
return { statusBar: false };
|
|
329
|
+
}
|
|
330
|
+
},
|
|
331
|
+
});
|
|
289
332
|
const nodeLauncher = new NodeLauncher({
|
|
290
333
|
db,
|
|
291
334
|
rigRepo,
|
|
@@ -294,12 +337,19 @@ export async function createDaemon(opts) {
|
|
|
294
337
|
tmuxAdapter,
|
|
295
338
|
transcriptStore,
|
|
296
339
|
sessionEnv: launchSessionEnv,
|
|
340
|
+
tmuxOptionDefaults,
|
|
297
341
|
});
|
|
298
342
|
const snapshotRepo = new SnapshotRepository(db);
|
|
299
343
|
const checkpointStore = new CheckpointStore(db);
|
|
300
344
|
const snapshotCapture = new SnapshotCapture({ db, rigRepo, sessionRegistry, eventBus, snapshotRepo, checkpointStore });
|
|
301
345
|
const claudeResume = new ClaudeResumeAdapter(tmuxAdapter);
|
|
302
346
|
const codexResume = new CodexResumeAdapter(tmuxAdapter);
|
|
347
|
+
// OPR.0.4.6.PI1 — the Pi seat-state root + the compiled runner entry (daemon
|
|
348
|
+
// dist). Shared by the Pi runtime adapter, the resume adapter, and the
|
|
349
|
+
// resume-token capture sidecar reader.
|
|
350
|
+
const piStateRoot = nodePath.join(OPENRIG_HOME, "state", "pi");
|
|
351
|
+
const piRunnerEntryPath = nodePath.resolve(import.meta.dirname, "./adapters/pi-runner.js");
|
|
352
|
+
const piResume = new PiResumeAdapter(tmuxAdapter, { readFile: (p) => fs.readFileSync(p, "utf-8"), writeFile: (p, c) => fs.writeFileSync(p, c, "utf-8"), exists: (p) => fs.existsSync(p), mkdirp: (p) => fs.mkdirSync(p, { recursive: true }) }, { stateRoot: piStateRoot, runnerEntryPath: piRunnerEntryPath });
|
|
303
353
|
// Services infrastructure (RigEnv) — created early so restore/bootstrap can use it
|
|
304
354
|
const { ComposeServicesAdapter } = await import("./adapters/compose-services-adapter.js");
|
|
305
355
|
const { ServiceOrchestrator } = await import("./domain/service-orchestrator.js");
|
|
@@ -307,7 +357,7 @@ export async function createDaemon(opts) {
|
|
|
307
357
|
const serviceOrchestrator = new ServiceOrchestrator({ rigRepo, composeAdapter });
|
|
308
358
|
const restoreOrchestrator = new RestoreOrchestrator({
|
|
309
359
|
db, rigRepo, sessionRegistry, eventBus, snapshotRepo, snapshotCapture,
|
|
310
|
-
checkpointStore, nodeLauncher, tmuxAdapter, claudeResume, codexResume,
|
|
360
|
+
checkpointStore, nodeLauncher, tmuxAdapter, claudeResume, codexResume, piResume,
|
|
311
361
|
transcriptStore, serviceOrchestrator,
|
|
312
362
|
});
|
|
313
363
|
// Connect to cmux at startup — degrades gracefully if absent
|
|
@@ -404,6 +454,7 @@ export async function createDaemon(opts) {
|
|
|
404
454
|
const { StartupOrchestrator } = await import("./domain/startup-orchestrator.js");
|
|
405
455
|
const { ClaudeCodeAdapter } = await import("./adapters/claude-code-adapter.js");
|
|
406
456
|
const { CodexRuntimeAdapter } = await import("./adapters/codex-runtime-adapter.js");
|
|
457
|
+
const { PiRuntimeAdapter } = await import("./adapters/pi-runtime-adapter.js");
|
|
407
458
|
const startupOrchestrator = new StartupOrchestrator({ db, sessionRegistry, eventBus, tmuxAdapter, readFile: (p) => fs.readFileSync(p, "utf-8") });
|
|
408
459
|
const runtimeSettings = new ContextPackSettingsStore().resolveConfig();
|
|
409
460
|
const claudeAdapter = new ClaudeCodeAdapter({ tmux: tmuxAdapter, fsOps: { readFile: (p) => fs.readFileSync(p, "utf-8"), writeFile: (p, c) => fs.writeFileSync(p, c, "utf-8"), exists: (p) => fs.existsSync(p), mkdirp: (p) => fs.mkdirSync(p, { recursive: true }), copyFile: (src, dest) => fs.copyFileSync(src, dest), listFiles: (dir) => { const r = []; function w(d, pre) { for (const e of fs.readdirSync(d, { withFileTypes: true })) {
|
|
@@ -418,6 +469,14 @@ export async function createDaemon(opts) {
|
|
|
418
469
|
else
|
|
419
470
|
r.push(pre ? nodePath.join(pre, e.name) : e.name);
|
|
420
471
|
} } w(dir, ""); return r; }, homedir: os.homedir() }, activityRelayPath: nodePath.resolve(import.meta.dirname, "../assets/plugins/openrig-core/hooks/scripts/activity-relay.cjs") });
|
|
472
|
+
// OPR.0.4.6.PI1 — the RPC-first Pi adapter (runner-in-a-pane). Same fsOps
|
|
473
|
+
// shape as the Codex adapter; seat isolation roots under piStateRoot.
|
|
474
|
+
const piAdapter = new PiRuntimeAdapter({ tmux: tmuxAdapter, fsOps: { readFile: (p) => fs.readFileSync(p, "utf-8"), writeFile: (p, c) => fs.writeFileSync(p, c, "utf-8"), exists: (p) => fs.existsSync(p), mkdirp: (p) => fs.mkdirSync(p, { recursive: true }), listFiles: (dir) => { const r = []; function w(d, pre) { for (const e of fs.readdirSync(d, { withFileTypes: true })) {
|
|
475
|
+
if (e.isDirectory())
|
|
476
|
+
w(nodePath.join(d, e.name), nodePath.join(pre, e.name));
|
|
477
|
+
else
|
|
478
|
+
r.push(pre ? nodePath.join(pre, e.name) : e.name);
|
|
479
|
+
} } w(dir, ""); return r; } }, stateRoot: piStateRoot, runnerEntryPath: piRunnerEntryPath });
|
|
421
480
|
// plugin-primitive Phase 3a slice 3.5 — ensure Codex feature flag
|
|
422
481
|
// codex_hooks = true is set in ~/.codex/config.toml so plugin-shipped
|
|
423
482
|
// hooks fire on Codex runtime. Slice 27 also creates the default
|
|
@@ -579,7 +638,7 @@ export async function createDaemon(opts) {
|
|
|
579
638
|
db, rigRepo, podRepo,
|
|
580
639
|
sessionRegistry, eventBus, nodeLauncher, startupOrchestrator,
|
|
581
640
|
fsOps: { readFile: (p) => fs.readFileSync(p, "utf-8"), exists: (p) => fs.existsSync(p) },
|
|
582
|
-
adapters: { "claude-code": claudeAdapter, "codex": codexAdapter, "terminal": new (await import("./adapters/terminal-adapter.js")).TerminalAdapter() },
|
|
641
|
+
adapters: { "claude-code": claudeAdapter, "codex": codexAdapter, "pi": piAdapter, "terminal": new (await import("./adapters/terminal-adapter.js")).TerminalAdapter() },
|
|
583
642
|
tmuxAdapter,
|
|
584
643
|
contextPackLibrary,
|
|
585
644
|
agentImageLibrary,
|
|
@@ -672,6 +731,8 @@ export async function createDaemon(opts) {
|
|
|
672
731
|
// (Claude sidecar reader + Codex thread-id capturer, both reuse).
|
|
673
732
|
contextUsageStore,
|
|
674
733
|
resumeTokenCapturer: resumeMetadataRefresher,
|
|
734
|
+
// OPR.0.4.6.PI1 FR-6 — pi-runner sidecar reader (the adapter exposes it).
|
|
735
|
+
piRunnerStateStore: piAdapter,
|
|
675
736
|
});
|
|
676
737
|
const selfAttachService = new SelfAttachService({
|
|
677
738
|
db, rigRepo, podRepo, sessionRegistry, eventBus, tmuxAdapter, transcriptStore,
|
|
@@ -709,6 +770,7 @@ export async function createDaemon(opts) {
|
|
|
709
770
|
eventBus,
|
|
710
771
|
nodeLauncher,
|
|
711
772
|
tmuxAdapter,
|
|
773
|
+
tmuxOptionDefaults,
|
|
712
774
|
sessionEnv: launchSessionEnv,
|
|
713
775
|
cmuxAdapter,
|
|
714
776
|
snapshotCapture,
|
|
@@ -751,7 +813,7 @@ export async function createDaemon(opts) {
|
|
|
751
813
|
}),
|
|
752
814
|
podInstantiator,
|
|
753
815
|
podBundleSourceResolver,
|
|
754
|
-
runtimeAdapters: { "claude-code": claudeAdapter, "codex": codexAdapter, "terminal": new (await import("./adapters/terminal-adapter.js")).TerminalAdapter() },
|
|
816
|
+
runtimeAdapters: { "claude-code": claudeAdapter, "codex": codexAdapter, "pi": piAdapter, "terminal": new (await import("./adapters/terminal-adapter.js")).TerminalAdapter() },
|
|
755
817
|
transcriptStore,
|
|
756
818
|
sessionTransport: (() => {
|
|
757
819
|
const t = new SessionTransport({ db, rigRepo, sessionRegistry, tmuxAdapter, agentActivityStore, eventBus });
|
|
@@ -932,13 +994,40 @@ export async function createDaemon(opts) {
|
|
|
932
994
|
// slice IMPL § Write Set / § Driver Handoff Contract).
|
|
933
995
|
const queueRepoForWorkflow = deps.queueRepo;
|
|
934
996
|
let workflowRuntime;
|
|
997
|
+
let workflowExceptionEnsurer;
|
|
935
998
|
if (queueRepoForWorkflow) {
|
|
936
999
|
workflowRuntime = new WorkflowRuntime({
|
|
937
1000
|
db,
|
|
938
1001
|
eventBus,
|
|
939
1002
|
queueRepo: queueRepoForWorkflow,
|
|
1003
|
+
// OPR.0.4.6.WF1 FR-3: instantiate/handoff auto-arm the
|
|
1004
|
+
// per-instance workflow-keepalive job in-txn; terminal disarms.
|
|
1005
|
+
watchdogJobsRepo: watchdogJobsRepoInstance,
|
|
1006
|
+
// OPR.0.4.6.WF5 FR-2: the maturity dial — host default read LIVE
|
|
1007
|
+
// per exception from the settings twin (dial flips affect future
|
|
1008
|
+
// items only, never retroactive re-routing).
|
|
1009
|
+
exceptionDial: {
|
|
1010
|
+
hostDefault: () => {
|
|
1011
|
+
const v = new ContextPackSettingsStore().resolveOne("workflow.exception_routing")
|
|
1012
|
+
.value;
|
|
1013
|
+
return v === "orchestrator" || v === "human_only" ? v : null;
|
|
1014
|
+
},
|
|
1015
|
+
humanFallbackSeat: "human@host",
|
|
1016
|
+
},
|
|
940
1017
|
});
|
|
941
1018
|
deps.workflowRuntime = workflowRuntime;
|
|
1019
|
+
// OPR.0.4.6.WF5 FR-2 class (b): the shared detection-time exception
|
|
1020
|
+
// ensurer — sweep + keepalive both call it; dedup by occurrence tags.
|
|
1021
|
+
{
|
|
1022
|
+
const { makeEnsureStuckExceptionItem } = await import("./domain/workflow-exception-escalation.js");
|
|
1023
|
+
workflowExceptionEnsurer = makeEnsureStuckExceptionItem({
|
|
1024
|
+
db,
|
|
1025
|
+
queueRepo: queueRepoForWorkflow,
|
|
1026
|
+
resolveRoute: (name, version, cls, boundRig) => workflowRuntime.resolveExceptionRouteFor(name, version, cls, boundRig),
|
|
1027
|
+
humanFallbackSeat: "human@host",
|
|
1028
|
+
log: (line) => console.log(line),
|
|
1029
|
+
});
|
|
1030
|
+
}
|
|
942
1031
|
// Seed built-in starter workflow_specs into the cache. Idempotent
|
|
943
1032
|
// + workspace-surface-respecting — operator
|
|
944
1033
|
// overrides at workspace paths are preserved (skip-if-cached).
|
|
@@ -1180,6 +1269,97 @@ export async function createDaemon(opts) {
|
|
|
1180
1269
|
activityStore: agentActivityStore,
|
|
1181
1270
|
});
|
|
1182
1271
|
}
|
|
1272
|
+
// OPR.0.4.6.02 C3 — the terminal-provider-ride service (ONE composer for
|
|
1273
|
+
// every view kind). Built here (post-hoc) so it can read the lazily-built
|
|
1274
|
+
// reviewGatherer for derived mission/slice views; if the gatherer never
|
|
1275
|
+
// built, those scopes honestly return not-found rather than throwing.
|
|
1276
|
+
{
|
|
1277
|
+
const { TerminalService } = await import("./domain/terminal/terminal-service.js");
|
|
1278
|
+
const { HerdrAdapter } = await import("./domain/terminal/herdr-adapter.js");
|
|
1279
|
+
const { createHerdrSocketRpc, createHerdrSocketTransport } = await import("./domain/terminal/herdr-transport.js");
|
|
1280
|
+
const { CmuxProviderAdapter } = await import("./domain/terminal/cmux-provider-adapter.js");
|
|
1281
|
+
const { TerminalViewsStore } = await import("./domain/terminal/terminal-views-store.js");
|
|
1282
|
+
const { getNodeInventory } = await import("./domain/node-inventory.js");
|
|
1283
|
+
const { loadHostRegistry, resolveHost: resolveHostInRegistry } = await import("./domain/hosts/hosts-registry-reader.js");
|
|
1284
|
+
// NodeInventoryEntry → the composer's minimal LiveSeatRow (single-host
|
|
1285
|
+
// inventory: the canonical session name IS the tmux session; no host field).
|
|
1286
|
+
const toLiveSeatRow = (e) => ({
|
|
1287
|
+
canonicalSessionName: e.canonicalSessionName,
|
|
1288
|
+
attachmentType: e.attachmentType ?? null,
|
|
1289
|
+
tmuxSession: e.canonicalSessionName,
|
|
1290
|
+
rigName: e.rigName,
|
|
1291
|
+
logicalId: e.logicalId,
|
|
1292
|
+
});
|
|
1293
|
+
// Resolve a seat (canonical session name) → its rig + node, for the cmux facade.
|
|
1294
|
+
const resolveSeatNode = (seat) => {
|
|
1295
|
+
for (const rig of rigRepo.listRigs()) {
|
|
1296
|
+
for (const e of getNodeInventory(db, rig.id)) {
|
|
1297
|
+
if (e.canonicalSessionName === seat)
|
|
1298
|
+
return { rigId: rig.id, logicalId: e.logicalId };
|
|
1299
|
+
}
|
|
1300
|
+
}
|
|
1301
|
+
return null;
|
|
1302
|
+
};
|
|
1303
|
+
const herdrProvider = new HerdrAdapter({
|
|
1304
|
+
// FB4: herdr speaks its unix control socket (there is no `layout` CLI).
|
|
1305
|
+
transportFactory: createHerdrSocketTransport(createHerdrSocketRpc()),
|
|
1306
|
+
});
|
|
1307
|
+
const cmuxProvider = new CmuxProviderAdapter({ cmuxAdapter, nodeCmuxService, resolveSeatNode });
|
|
1308
|
+
const providerMap = {
|
|
1309
|
+
herdr: herdrProvider,
|
|
1310
|
+
cmux: cmuxProvider,
|
|
1311
|
+
};
|
|
1312
|
+
deps.terminalService = new TerminalService({
|
|
1313
|
+
resolveProvider: (name) => providerMap[name] ?? null,
|
|
1314
|
+
viewsStore: new TerminalViewsStore(),
|
|
1315
|
+
listRigSeats: (rigArg) => {
|
|
1316
|
+
const rigs = rigRepo.listRigs();
|
|
1317
|
+
const rig = rigs.find((r) => r.name === rigArg) ?? rigs.find((r) => r.id === rigArg);
|
|
1318
|
+
if (!rig)
|
|
1319
|
+
return null;
|
|
1320
|
+
return getNodeInventory(db, rig.id).map(toLiveSeatRow);
|
|
1321
|
+
},
|
|
1322
|
+
listPodSeats: (rigArg, pod) => {
|
|
1323
|
+
const rigs = rigRepo.listRigs();
|
|
1324
|
+
const rig = rigs.find((r) => r.name === rigArg) ?? rigs.find((r) => r.id === rigArg);
|
|
1325
|
+
if (!rig)
|
|
1326
|
+
return null;
|
|
1327
|
+
const rows = getNodeInventory(db, rig.id)
|
|
1328
|
+
.filter((e) => e.podNamespace === pod)
|
|
1329
|
+
.map(toLiveSeatRow);
|
|
1330
|
+
// No node carries that pod namespace → an unknown pod (not an empty view).
|
|
1331
|
+
return rows.length > 0 ? rows : null;
|
|
1332
|
+
},
|
|
1333
|
+
listScopeSeats: (scope) => {
|
|
1334
|
+
const gatherer = deps.reviewGatherer;
|
|
1335
|
+
if (!gatherer)
|
|
1336
|
+
return null;
|
|
1337
|
+
// N1 (dev44-driver2 pre-guard): cast to the real AgentsScope union (not
|
|
1338
|
+
// `never`) so the compile guard on the scope grammar is restored.
|
|
1339
|
+
const band = gatherer.composeAgents(scope);
|
|
1340
|
+
if (!band)
|
|
1341
|
+
return null;
|
|
1342
|
+
const wanted = new Set(band.rows.map((r) => r.sessionName));
|
|
1343
|
+
const rows = [];
|
|
1344
|
+
for (const rig of rigRepo.listRigs()) {
|
|
1345
|
+
for (const e of getNodeInventory(db, rig.id)) {
|
|
1346
|
+
if (e.canonicalSessionName && wanted.has(e.canonicalSessionName))
|
|
1347
|
+
rows.push(toLiveSeatRow(e));
|
|
1348
|
+
}
|
|
1349
|
+
}
|
|
1350
|
+
return rows;
|
|
1351
|
+
},
|
|
1352
|
+
listRigNames: () => rigRepo.listRigs().map((r) => r.name),
|
|
1353
|
+
resolveHost: (id) => {
|
|
1354
|
+
const res = loadHostRegistry();
|
|
1355
|
+
if (!res.ok)
|
|
1356
|
+
return null;
|
|
1357
|
+
const r = resolveHostInRegistry(res.registry, id);
|
|
1358
|
+
return r.ok ? r.host : null;
|
|
1359
|
+
},
|
|
1360
|
+
hasSession: (session) => tmuxAdapter.hasSession(session),
|
|
1361
|
+
});
|
|
1362
|
+
}
|
|
1183
1363
|
// UI Enhancement Pack v0:
|
|
1184
1364
|
// - file allowlist (item 3) from OPENRIG_FILES_ALLOWLIST
|
|
1185
1365
|
// - atomic write service (item 4) wired only when allowlist non-empty
|
|
@@ -1270,7 +1450,13 @@ export async function createDaemon(opts) {
|
|
|
1270
1450
|
// shared AgentActivityStore (constructed above, before the engine)
|
|
1271
1451
|
// into one bounded wake. Wakes/flags only; cooldown via engine throttle.
|
|
1272
1452
|
additionalPolicies: [
|
|
1273
|
-
makeWorkflowKeepalivePolicy({
|
|
1453
|
+
makeWorkflowKeepalivePolicy({
|
|
1454
|
+
db,
|
|
1455
|
+
// OPR.0.4.6.WF5 FR-2 class (b): detection-time exception items,
|
|
1456
|
+
// dedup by occurrence; dial resolved via the runtime's cached
|
|
1457
|
+
// spec (never-lost fallback inside the helper).
|
|
1458
|
+
ensureStuckExceptionItem: workflowExceptionEnsurer,
|
|
1459
|
+
}),
|
|
1274
1460
|
makeIdleGateQitemPolicy({ db, agentActivityStore }),
|
|
1275
1461
|
],
|
|
1276
1462
|
});
|
|
@@ -1280,6 +1466,28 @@ export async function createDaemon(opts) {
|
|
|
1280
1466
|
});
|
|
1281
1467
|
deps.watchdogPolicyEngine = watchdogPolicyEngine;
|
|
1282
1468
|
deps.watchdogScheduler = watchdogScheduler;
|
|
1469
|
+
// OPR.0.4.6.WF1 FR-4: the workflow startup resume sweep — re-arm
|
|
1470
|
+
// keepalives, reissue lost post-commit nudges (pending frontier
|
|
1471
|
+
// packets never nudged), surface stuck instances. Runs after the
|
|
1472
|
+
// watchdog + transport are wired so re-nudges actually deliver.
|
|
1473
|
+
// Failures are logged, never fatal: a sweep problem must not
|
|
1474
|
+
// bring the daemon down.
|
|
1475
|
+
if (workflowRuntime && queueRepoForWorkflow) {
|
|
1476
|
+
try {
|
|
1477
|
+
const { runWorkflowBootSweep } = await import("./domain/workflow-boot-sweep.js");
|
|
1478
|
+
await runWorkflowBootSweep({
|
|
1479
|
+
instanceStore: workflowRuntime.instanceStore,
|
|
1480
|
+
queueRepo: queueRepoForWorkflow,
|
|
1481
|
+
watchdogJobsRepo: watchdogJobsRepoInstance,
|
|
1482
|
+
log: (line) => console.log(line),
|
|
1483
|
+
// OPR.0.4.6.WF5 FR-2 class (b): the sweep leg of detection.
|
|
1484
|
+
ensureStuckExceptionItem: workflowExceptionEnsurer,
|
|
1485
|
+
});
|
|
1486
|
+
}
|
|
1487
|
+
catch (err) {
|
|
1488
|
+
console.warn(`workflow boot sweep: failed (non-fatal): ${err instanceof Error ? err.message : String(err)}`);
|
|
1489
|
+
}
|
|
1490
|
+
}
|
|
1283
1491
|
}
|
|
1284
1492
|
// Context monitor — constructed before createApp so routes can access pollOnce for refresh.
|
|
1285
1493
|
// Caller (index.ts) starts polling after listen.
|
|
@@ -1294,6 +1502,7 @@ export async function createDaemon(opts) {
|
|
|
1294
1502
|
const contextMonitor = new ContextMonitor(db, contextUsageStore, claudeAdapter, compactionEnforcer, {
|
|
1295
1503
|
"claude-code": claudeAdapter,
|
|
1296
1504
|
codex: codexAdapter,
|
|
1505
|
+
pi: piAdapter,
|
|
1297
1506
|
});
|
|
1298
1507
|
deps.contextMonitor = contextMonitor;
|
|
1299
1508
|
// OPR.0.4.3.14 — expose the SAME enforcer instance to routes for the manual
|