@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,294 @@
|
|
|
1
|
+
// OPR.0.4.6.MH5 — the daemon-side FLEET composer (the ONE net-new core).
|
|
2
|
+
//
|
|
3
|
+
// Arch Q1 (ruled): each host's OWN composer is authoritative for its own
|
|
4
|
+
// time-derived ▲/● set — this module fans out each registered host's
|
|
5
|
+
// ALREADY-COMPOSED rig root (`GET /api/review/rig`, the parameterless
|
|
6
|
+
// host-wide altitude root) and only UNIONS + HOST-DIMENSIONS + COUNTS.
|
|
7
|
+
// It never recomputes exception truth (no clock, no thresholds, no random
|
|
8
|
+
// here — cross-host clock skew can never distort a ▲).
|
|
9
|
+
//
|
|
10
|
+
// Arch Q2/Q3 (ruled): FLEET is a SIBLING aggregate — the local composer
|
|
11
|
+
// files stay pure; THIS module is the ONLY review-domain place that
|
|
12
|
+
// imports hosts/transport (the C1 boundary, pinned mechanical by the C5
|
|
13
|
+
// import-audit test). One daemon-side composer; every consumer (UI now,
|
|
14
|
+
// TUI/CLI follow-ups) reads the same one.
|
|
15
|
+
//
|
|
16
|
+
// Arch Q4 (ruled): the one-count Set on `${hostId}|${identity}` lives HERE
|
|
17
|
+
// — the one place. Within-host N-altitude duplicates collapse to one fleet
|
|
18
|
+
// row (seenFrom records the altitudes actually read); two hosts' same-shaped
|
|
19
|
+
// identities stay two rows. An MH-3-forwarded qitem lives in its ORIGIN
|
|
20
|
+
// host's DB only (source closed on handoff), so no fleet double-count by
|
|
21
|
+
// construction.
|
|
22
|
+
//
|
|
23
|
+
// D-7: per-host reads run concurrently under the named read-class deadline
|
|
24
|
+
// (the attention-aggregator discipline) — a slow host degrades to its honest
|
|
25
|
+
// per-host status; the glance NEVER stalls on the slowest host. The LOCAL
|
|
26
|
+
// host joins via the in-process composer directly (D-1 — one fleet member
|
|
27
|
+
// with zero self-transport).
|
|
28
|
+
import { LOCAL_HOST_ID } from "../hosts/fanout-contract.js";
|
|
29
|
+
import { resolveHost } from "../hosts/hosts-registry-reader.js";
|
|
30
|
+
import { remoteJsonRequest } from "../hosts/remote-daemon-http.js";
|
|
31
|
+
/** The fleet aggregation READ deadline class (per-host bound) — same class
|
|
32
|
+
* as the shipped feed aggregation (a poll, not a bootstrap). Named here,
|
|
33
|
+
* passed explicitly at the call-site (D-7). */
|
|
34
|
+
export const FLEET_READ_TIMEOUT_MS = 5_000;
|
|
35
|
+
/** Fixed fan-out cap — a poll across a handful of hosts (the shipped
|
|
36
|
+
* aggregator's v1 posture; adaptive throttling out of scope). */
|
|
37
|
+
export const FLEET_FANOUT_CONCURRENCY = 4;
|
|
38
|
+
const PRIORITY_RANK = { urgent: 0, high: 1, normal: 2, low: 3 };
|
|
39
|
+
/** Total order over deduped fleet rows: priority rank, then age, then the
|
|
40
|
+
* fleet key — a TOTAL tiebreak, so permuting the inputs can never change
|
|
41
|
+
* the output order (the C5 permutation-stability vector). */
|
|
42
|
+
function compareFleetRows(a, b) {
|
|
43
|
+
const ra = PRIORITY_RANK[a.priority ?? "normal"] ?? 2;
|
|
44
|
+
const rb = PRIORITY_RANK[b.priority ?? "normal"] ?? 2;
|
|
45
|
+
if (ra !== rb)
|
|
46
|
+
return ra - rb;
|
|
47
|
+
const aa = a.ageIso ?? "9999";
|
|
48
|
+
const ba = b.ageIso ?? "9999";
|
|
49
|
+
if (aa !== ba)
|
|
50
|
+
return aa < ba ? -1 : 1;
|
|
51
|
+
return a.fleetKey < b.fleetKey ? -1 : a.fleetKey > b.fleetKey ? 1 : 0;
|
|
52
|
+
}
|
|
53
|
+
/** The BR-1 session grammar is member@rig (the @host form never exists in
|
|
54
|
+
* session strings) — distinct rig names across a host's agent rows is a
|
|
55
|
+
* structured parse of that grammar, never prose. */
|
|
56
|
+
function distinctRigCount(agents) {
|
|
57
|
+
const rigs = new Set();
|
|
58
|
+
for (const a of agents) {
|
|
59
|
+
const at = a.sessionName.lastIndexOf("@");
|
|
60
|
+
if (at > 0 && at < a.sessionName.length - 1)
|
|
61
|
+
rigs.add(a.sessionName.slice(at + 1));
|
|
62
|
+
}
|
|
63
|
+
return rigs.size;
|
|
64
|
+
}
|
|
65
|
+
/** The worst line for a host — spoken-aloud, derived deterministically from
|
|
66
|
+
* its own deduped rows (already in total order; row 0 is the worst). */
|
|
67
|
+
function hostTopLine(rows) {
|
|
68
|
+
if (rows.length === 0)
|
|
69
|
+
return "quiet";
|
|
70
|
+
const worst = rows[0];
|
|
71
|
+
return worst.derived ? `▲ ${worst.derived.kind} — ${worst.summary}` : `● ${worst.summary}`;
|
|
72
|
+
}
|
|
73
|
+
/** Union + host-dimension + count (the ONLY things the fleet root does).
|
|
74
|
+
* `statuses` must carry EVERY fleet member (omission-proof); `inputs`
|
|
75
|
+
* carries only the members whose composed set was actually read. */
|
|
76
|
+
export function unionFleet(inputs, statuses, composedAt, registryError) {
|
|
77
|
+
// The Q4 one-count Set — the one place. Key = `${hostId}|${identity}`.
|
|
78
|
+
const seen = new Map();
|
|
79
|
+
const perHostRows = new Map();
|
|
80
|
+
for (const host of inputs) {
|
|
81
|
+
for (const scoped of host.scopedNeedsYou) {
|
|
82
|
+
for (const item of scoped.items) {
|
|
83
|
+
const fleetKey = `${host.hostId}|${item.identity}`;
|
|
84
|
+
const existing = seen.get(fleetKey);
|
|
85
|
+
if (existing) {
|
|
86
|
+
if (!existing.seenFrom.includes(scoped.scope))
|
|
87
|
+
existing.seenFrom.push(scoped.scope);
|
|
88
|
+
continue;
|
|
89
|
+
}
|
|
90
|
+
const row = { ...item, hostId: host.hostId, fleetKey, seenFrom: [scoped.scope] };
|
|
91
|
+
seen.set(fleetKey, row);
|
|
92
|
+
if (!perHostRows.has(host.hostId))
|
|
93
|
+
perHostRows.set(host.hostId, []);
|
|
94
|
+
perHostRows.get(host.hostId).push(row);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
const rows = [...seen.values()].sort(compareFleetRows);
|
|
99
|
+
for (const hostRows of perHostRows.values())
|
|
100
|
+
hostRows.sort(compareFleetRows);
|
|
101
|
+
// Rollup math computed FROM the deduped rows (header-math-checkable).
|
|
102
|
+
const byKind = new Map();
|
|
103
|
+
let needsYouCount = 0;
|
|
104
|
+
let exceptionCount = 0;
|
|
105
|
+
for (const r of rows) {
|
|
106
|
+
if (r.derived) {
|
|
107
|
+
exceptionCount += 1;
|
|
108
|
+
byKind.set(r.derived.kind, (byKind.get(r.derived.kind) ?? 0) + 1);
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
needsYouCount += 1;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
const rollup = {
|
|
115
|
+
needsYouCount,
|
|
116
|
+
exceptionCount,
|
|
117
|
+
exceptionsByKind: [...byKind.entries()].sort(([a], [b]) => (a < b ? -1 : 1)).map(([kind, count]) => ({ kind, count })),
|
|
118
|
+
hostCount: statuses.length,
|
|
119
|
+
unreachableCount: statuses.filter((s) => s.status !== "ok").length,
|
|
120
|
+
};
|
|
121
|
+
// HOSTS band rows: statuses order (local first, then registry order);
|
|
122
|
+
// counts present ONLY on read members (absent-not-zero on failures).
|
|
123
|
+
const inputByHost = new Map(inputs.map((h) => [h.hostId, h]));
|
|
124
|
+
const hosts = statuses.map((status) => {
|
|
125
|
+
const input = inputByHost.get(status.hostId);
|
|
126
|
+
const base = {
|
|
127
|
+
hostId: status.hostId,
|
|
128
|
+
kind: status.hostId === LOCAL_HOST_ID ? "local" : "remote",
|
|
129
|
+
status,
|
|
130
|
+
};
|
|
131
|
+
if (!input || status.status !== "ok")
|
|
132
|
+
return base;
|
|
133
|
+
const hostRows = perHostRows.get(status.hostId) ?? [];
|
|
134
|
+
const hostKinds = new Map();
|
|
135
|
+
let hostNeedsYou = 0;
|
|
136
|
+
for (const r of hostRows) {
|
|
137
|
+
if (r.derived)
|
|
138
|
+
hostKinds.set(r.derived.kind, (hostKinds.get(r.derived.kind) ?? 0) + 1);
|
|
139
|
+
else
|
|
140
|
+
hostNeedsYou += 1;
|
|
141
|
+
}
|
|
142
|
+
return {
|
|
143
|
+
...base,
|
|
144
|
+
needsYouCount: hostNeedsYou,
|
|
145
|
+
exceptionsByKind: [...hostKinds.entries()].sort(([a], [b]) => (a < b ? -1 : 1)).map(([kind, count]) => ({ kind, count })),
|
|
146
|
+
seatCount: input.agents.length,
|
|
147
|
+
rigCount: distinctRigCount(input.agents),
|
|
148
|
+
topLine: hostTopLine(hostRows),
|
|
149
|
+
};
|
|
150
|
+
});
|
|
151
|
+
// SETTLED minimal (D-5), host-chipped, deterministic order (closed-at
|
|
152
|
+
// desc, then qitem id — a total tiebreak).
|
|
153
|
+
const settled = inputs
|
|
154
|
+
.flatMap((h) => h.settled.map((s) => ({ ...s, hostId: h.hostId })))
|
|
155
|
+
.sort((a, b) => (a.closedAtIso !== b.closedAtIso ? (a.closedAtIso > b.closedAtIso ? -1 : 1) : a.qitemId < b.qitemId ? -1 : 1));
|
|
156
|
+
const composingCount = statuses.filter((s) => s.status === "ok").length;
|
|
157
|
+
return {
|
|
158
|
+
rollup,
|
|
159
|
+
needsYou: {
|
|
160
|
+
items: rows,
|
|
161
|
+
provenance: `fleet union of each host's own composed set · counted once per identity+host · ${composingCount}/${statuses.length} hosts composing${rollup.unreachableCount > 0 ? " (a failed host's items are ABSENT, not zero)" : ""}`,
|
|
162
|
+
},
|
|
163
|
+
hosts,
|
|
164
|
+
settled,
|
|
165
|
+
settledProvenance: settled.length === 0 ? `0 settled handoffs across ${composingCount} composing hosts` : `today's closed handoffs across ${composingCount} composing hosts`,
|
|
166
|
+
...(registryError !== undefined ? { registryError } : {}),
|
|
167
|
+
composedAt,
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
/** Minimal structural check on a remote's composed payload — a 200 carrying
|
|
171
|
+
* the wrong shape degrades to the honest per-host status, never a crash
|
|
172
|
+
* and never silently-empty "ok" data. */
|
|
173
|
+
function parseComposedRig(payload) {
|
|
174
|
+
if (payload === null || typeof payload !== "object")
|
|
175
|
+
return null;
|
|
176
|
+
const p = payload;
|
|
177
|
+
const needsYou = p["needsYou"];
|
|
178
|
+
const agents = p["agents"];
|
|
179
|
+
if (!needsYou || !Array.isArray(needsYou["items"]))
|
|
180
|
+
return null;
|
|
181
|
+
if (!agents || !Array.isArray(agents["rows"]))
|
|
182
|
+
return null;
|
|
183
|
+
if (!Array.isArray(p["settled"]))
|
|
184
|
+
return null;
|
|
185
|
+
return payload;
|
|
186
|
+
}
|
|
187
|
+
async function readHostComposedRig(hostId, reg, deps) {
|
|
188
|
+
if (!reg.ok) {
|
|
189
|
+
return { status: { hostId, status: "unreachable", error: reg.error }, input: null };
|
|
190
|
+
}
|
|
191
|
+
const resolved = resolveHost(reg.registry, hostId);
|
|
192
|
+
if (!resolved.ok) {
|
|
193
|
+
return { status: { hostId, status: "unreachable", error: resolved.error }, input: null };
|
|
194
|
+
}
|
|
195
|
+
if (resolved.host.transport !== "http") {
|
|
196
|
+
return {
|
|
197
|
+
status: { hostId, status: "unsupported-transport", error: `host '${hostId}' is SSH-declared; the fleet composed read requires an http-transport registry entry (url + bearer)` },
|
|
198
|
+
input: null,
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
const res = await remoteJsonRequest(resolved.host, "/api/review/rig", {
|
|
202
|
+
method: "GET",
|
|
203
|
+
timeoutMs: deps.timeoutMs ?? FLEET_READ_TIMEOUT_MS,
|
|
204
|
+
fetchImpl: deps.fetchImpl,
|
|
205
|
+
env: deps.env,
|
|
206
|
+
readFile: deps.readFile,
|
|
207
|
+
});
|
|
208
|
+
if (res.ok) {
|
|
209
|
+
const composed = parseComposedRig(res.payload);
|
|
210
|
+
if (!composed) {
|
|
211
|
+
return { status: { hostId, status: "unreachable", error: "remote /api/review/rig returned a malformed composed payload", failedStep: "remote-command-failed" }, input: null };
|
|
212
|
+
}
|
|
213
|
+
return {
|
|
214
|
+
status: { hostId, status: "ok" },
|
|
215
|
+
input: {
|
|
216
|
+
hostId,
|
|
217
|
+
kind: "remote",
|
|
218
|
+
scopedNeedsYou: [{ scope: "rig", items: composed.needsYou.items }],
|
|
219
|
+
agents: composed.agents.rows,
|
|
220
|
+
settled: composed.settled,
|
|
221
|
+
},
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
switch (res.kind) {
|
|
225
|
+
case "bearer":
|
|
226
|
+
return { status: { hostId, status: "auth-failed", error: res.detail, failedStep: "permission-gate" }, input: null };
|
|
227
|
+
case "http":
|
|
228
|
+
if (res.status === 401 || res.status === 403) {
|
|
229
|
+
return { status: { hostId, status: "auth-failed", error: `HTTP ${res.status}${res.detail ? `: ${res.detail}` : ""}`, failedStep: "permission-gate" }, input: null };
|
|
230
|
+
}
|
|
231
|
+
return { status: { hostId, status: "unreachable", error: `HTTP ${res.status}${res.detail ? `: ${res.detail}` : ""}`, failedStep: "remote-command-failed" }, input: null };
|
|
232
|
+
case "timeout":
|
|
233
|
+
return {
|
|
234
|
+
status: {
|
|
235
|
+
hostId,
|
|
236
|
+
status: "unreachable",
|
|
237
|
+
error: res.phase === "body" ? `read timed out: response headers arrived (HTTP ${res.status}) but the body never completed` : `read timed out after ${deps.timeoutMs ?? FLEET_READ_TIMEOUT_MS}ms`,
|
|
238
|
+
failedStep: "remote-daemon-unreachable",
|
|
239
|
+
},
|
|
240
|
+
input: null,
|
|
241
|
+
};
|
|
242
|
+
case "network":
|
|
243
|
+
return { status: { hostId, status: "unreachable", error: res.detail, failedStep: "remote-daemon-unreachable" }, input: null };
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
/** ONE composed fleet: local always included (in-process, D-1), every
|
|
247
|
+
* registered host fanned out concurrently under the named deadline (D-7),
|
|
248
|
+
* per-host status complete by construction, union deduped on the Q4 key. */
|
|
249
|
+
export async function composeFleet(deps) {
|
|
250
|
+
const local = deps.composeLocalRig();
|
|
251
|
+
const localInput = {
|
|
252
|
+
hostId: LOCAL_HOST_ID,
|
|
253
|
+
kind: "local",
|
|
254
|
+
scopedNeedsYou: [{ scope: "rig", items: local.needsYou.items }],
|
|
255
|
+
agents: local.agents.rows,
|
|
256
|
+
settled: local.settled,
|
|
257
|
+
};
|
|
258
|
+
const statuses = [{ hostId: LOCAL_HOST_ID, status: "ok" }];
|
|
259
|
+
const inputs = [localInput];
|
|
260
|
+
if (!deps.registryExists()) {
|
|
261
|
+
// No registry file = a single-host operator: a clean local-only fleet
|
|
262
|
+
// (the C4 band renders nothing new in this state).
|
|
263
|
+
return unionFleet(inputs, statuses, deps.nowIso);
|
|
264
|
+
}
|
|
265
|
+
const reg = deps.loadRegistry();
|
|
266
|
+
if (!reg.ok) {
|
|
267
|
+
// The registry EXISTS but cannot be read/parsed: there is no host list
|
|
268
|
+
// to attribute per-host statuses to — surface the error honestly at the
|
|
269
|
+
// payload level, never a silently-local-only fleet.
|
|
270
|
+
return unionFleet(inputs, statuses, deps.nowIso, reg.error);
|
|
271
|
+
}
|
|
272
|
+
const hostIds = reg.registry.hosts.map((h) => h.id);
|
|
273
|
+
const outcomes = new Array(hostIds.length);
|
|
274
|
+
let next = 0;
|
|
275
|
+
const cap = Math.max(1, Math.min(deps.concurrency ?? FLEET_FANOUT_CONCURRENCY, Math.max(hostIds.length, 1)));
|
|
276
|
+
const workers = Array.from({ length: cap }, async () => {
|
|
277
|
+
while (true) {
|
|
278
|
+
const i = next;
|
|
279
|
+
if (i >= hostIds.length)
|
|
280
|
+
return;
|
|
281
|
+
next += 1;
|
|
282
|
+
outcomes[i] = await readHostComposedRig(hostIds[i], reg, deps);
|
|
283
|
+
}
|
|
284
|
+
});
|
|
285
|
+
await Promise.all(workers);
|
|
286
|
+
// Registry order preserved (deterministic payload).
|
|
287
|
+
for (const outcome of outcomes) {
|
|
288
|
+
statuses.push(outcome.status);
|
|
289
|
+
if (outcome.input)
|
|
290
|
+
inputs.push(outcome.input);
|
|
291
|
+
}
|
|
292
|
+
return unionFleet(inputs, statuses, deps.nowIso);
|
|
293
|
+
}
|
|
294
|
+
//# sourceMappingURL=fleet-compose.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fleet-compose.js","sourceRoot":"","sources":["../../../src/domain/review/fleet-compose.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type Database from "better-sqlite3";
|
|
2
2
|
import type { SliceIndexer } from "../slices/slice-indexer.js";
|
|
3
3
|
import { type SliceComposeInputs } from "./compose.js";
|
|
4
|
-
import type { AgentsBand, AgentsScope, ComposedMissionReview, ComposedRigAgents, ComposedSliceReview } from "./types.js";
|
|
4
|
+
import type { AgentsBand, AgentsScope, ComposedMissionReview, ComposedRigAgents, ComposedSliceReview, WorkflowRowRef } from "./types.js";
|
|
5
5
|
import type { AgentActivityStore } from "../agent-activity-store.js";
|
|
6
6
|
export interface ReviewGathererDeps {
|
|
7
7
|
db: Database.Database;
|
|
@@ -15,6 +15,14 @@ export interface ReviewGathererDeps {
|
|
|
15
15
|
/** Injected clock so composition stays reproducible in tests. */
|
|
16
16
|
now?: () => string;
|
|
17
17
|
}
|
|
18
|
+
/** OPR.0.4.6.WF4 Q6 — the ● (agent-leg) workflow-identity stamp, derived from
|
|
19
|
+
* the item's OWN STRUCTURED TAGS (`workflow:<name>` / `instance:<id>` /
|
|
20
|
+
* `step:<id>` — the WF-5-ratified queryable identity), NEVER from summary /
|
|
21
|
+
* identity / evidenceRef prose. Returns the pointer only when BOTH required
|
|
22
|
+
* keys are present; a non-workflow row (no `instance:`/`workflow:` tag) →
|
|
23
|
+
* `undefined`, so its AttentionInput stays byte-identical (omit-when-absent).
|
|
24
|
+
* Pointer-only: the three identity keys, never status/deadline/class. */
|
|
25
|
+
export declare function workflowRefFromTags(tagsJson: string | null): WorkflowRowRef | undefined;
|
|
18
26
|
export declare class ReviewGatherer {
|
|
19
27
|
private readonly db;
|
|
20
28
|
private readonly indexer;
|
|
@@ -63,6 +71,13 @@ export declare class ReviewGatherer {
|
|
|
63
71
|
/** Human-routed attention rows carrying the given tag (the §5 predicate is
|
|
64
72
|
* Packet 1's; until it lands, human-tier/human-dest/park-on-human rows are
|
|
65
73
|
* selected with the same shape). */
|
|
74
|
+
/** OPR.0.4.6.WF5 FR-3 — recorded workflow-instance views for the ▲
|
|
75
|
+
* band: failed + in-flight instances, the WF-1 evaluator verdict
|
|
76
|
+
* (consumed, never recomputed — the module import IS the single
|
|
77
|
+
* home), the open exception item by TAG QUERY (never summary
|
|
78
|
+
* parsing), and the non-open-frontier anomaly check. Read-only;
|
|
79
|
+
* absent tables (pre-workflow DBs) return []. */
|
|
80
|
+
private gatherWorkflowExceptions;
|
|
66
81
|
private attentionForTag;
|
|
67
82
|
/** Sessions holding active work on the named slices (null = rig-wide).
|
|
68
83
|
* Region membership derives from work-on-scope, never rig co-residency.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gather.d.ts","sourceRoot":"","sources":["../../../src/domain/review/gather.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"gather.d.ts","sourceRoot":"","sources":["../../../src/domain/review/gather.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,10 +10,44 @@ import * as fs from "node:fs";
|
|
|
10
10
|
import * as path from "node:path";
|
|
11
11
|
import { execFileSync } from "node:child_process";
|
|
12
12
|
import YAML from "yaml";
|
|
13
|
+
import { sessionMemberLabel } from "../session-name.js";
|
|
13
14
|
import { composeMissionReview, composeRecordedGreenForSlice, composeSliceReview, deriveCandidateSha, extractMediaRefs, extractSection, parseC1Header, } from "./compose.js";
|
|
14
15
|
import { composeAgentsBand, composeRigAgents } from "./compose.js";
|
|
16
|
+
import { evaluateStepDeadline } from "../workflow-deadline.js";
|
|
15
17
|
import { isHumanSeatSession } from "../human-route-enforcer.js";
|
|
16
18
|
const ACTIVE_STATES = ["pending", "in-progress", "claimed", "blocked", "handed-off"];
|
|
19
|
+
/** OPR.0.4.6.WF4 Q6 — the ● (agent-leg) workflow-identity stamp, derived from
|
|
20
|
+
* the item's OWN STRUCTURED TAGS (`workflow:<name>` / `instance:<id>` /
|
|
21
|
+
* `step:<id>` — the WF-5-ratified queryable identity), NEVER from summary /
|
|
22
|
+
* identity / evidenceRef prose. Returns the pointer only when BOTH required
|
|
23
|
+
* keys are present; a non-workflow row (no `instance:`/`workflow:` tag) →
|
|
24
|
+
* `undefined`, so its AttentionInput stays byte-identical (omit-when-absent).
|
|
25
|
+
* Pointer-only: the three identity keys, never status/deadline/class. */
|
|
26
|
+
export function workflowRefFromTags(tagsJson) {
|
|
27
|
+
if (!tagsJson)
|
|
28
|
+
return undefined;
|
|
29
|
+
let tags;
|
|
30
|
+
try {
|
|
31
|
+
tags = JSON.parse(tagsJson) ?? [];
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
return undefined;
|
|
35
|
+
}
|
|
36
|
+
let instanceId;
|
|
37
|
+
let workflowName;
|
|
38
|
+
let stepId;
|
|
39
|
+
for (const t of tags) {
|
|
40
|
+
if (t.startsWith("instance:"))
|
|
41
|
+
instanceId = t.slice("instance:".length);
|
|
42
|
+
else if (t.startsWith("workflow:"))
|
|
43
|
+
workflowName = t.slice("workflow:".length);
|
|
44
|
+
else if (t.startsWith("step:"))
|
|
45
|
+
stepId = t.slice("step:".length);
|
|
46
|
+
}
|
|
47
|
+
if (!instanceId || !workflowName)
|
|
48
|
+
return undefined;
|
|
49
|
+
return { instanceId, workflowName, ...(stepId ? { stepId } : {}) };
|
|
50
|
+
}
|
|
17
51
|
export class ReviewGatherer {
|
|
18
52
|
db;
|
|
19
53
|
indexer;
|
|
@@ -89,6 +123,7 @@ export class ReviewGatherer {
|
|
|
89
123
|
handoffsToday,
|
|
90
124
|
overdueCount: overdue.length,
|
|
91
125
|
rosterWindow: "today",
|
|
126
|
+
workflows: this.gatherWorkflowExceptions(nowIso),
|
|
92
127
|
nowIso,
|
|
93
128
|
});
|
|
94
129
|
}
|
|
@@ -140,6 +175,7 @@ export class ReviewGatherer {
|
|
|
140
175
|
proofDirExists: fs.existsSync(path.join(slice.slicePath, "proof")),
|
|
141
176
|
attention,
|
|
142
177
|
agents,
|
|
178
|
+
workflows: this.gatherWorkflowExceptions(this.now()),
|
|
143
179
|
activeQitemPresent: this.hasActiveQitem(name, slice),
|
|
144
180
|
git: this.gatherGitFacts(frontmatter, candidateRef),
|
|
145
181
|
approval,
|
|
@@ -270,6 +306,88 @@ export class ReviewGatherer {
|
|
|
270
306
|
/** Human-routed attention rows carrying the given tag (the §5 predicate is
|
|
271
307
|
* Packet 1's; until it lands, human-tier/human-dest/park-on-human rows are
|
|
272
308
|
* selected with the same shape). */
|
|
309
|
+
/** OPR.0.4.6.WF5 FR-3 — recorded workflow-instance views for the ▲
|
|
310
|
+
* band: failed + in-flight instances, the WF-1 evaluator verdict
|
|
311
|
+
* (consumed, never recomputed — the module import IS the single
|
|
312
|
+
* home), the open exception item by TAG QUERY (never summary
|
|
313
|
+
* parsing), and the non-open-frontier anomaly check. Read-only;
|
|
314
|
+
* absent tables (pre-workflow DBs) return []. */
|
|
315
|
+
gatherWorkflowExceptions(nowIso) {
|
|
316
|
+
try {
|
|
317
|
+
const instances = this.db
|
|
318
|
+
.prepare(`SELECT instance_id, workflow_name, status, current_step_id, current_frontier_json
|
|
319
|
+
FROM workflow_instances WHERE status IN ('failed','active','waiting')`)
|
|
320
|
+
.all();
|
|
321
|
+
const now = new Date(nowIso);
|
|
322
|
+
const out = [];
|
|
323
|
+
for (const row of instances) {
|
|
324
|
+
let frontier = [];
|
|
325
|
+
try {
|
|
326
|
+
frontier = JSON.parse(row.current_frontier_json) ?? [];
|
|
327
|
+
}
|
|
328
|
+
catch {
|
|
329
|
+
frontier = [];
|
|
330
|
+
}
|
|
331
|
+
const packets = frontier.map((id) => this.db
|
|
332
|
+
.prepare(`SELECT qitem_id, state, destination_session, ts_created, claimed_at, closure_required_at
|
|
333
|
+
FROM queue_items WHERE qitem_id = ?`)
|
|
334
|
+
.get(id));
|
|
335
|
+
const frontierRefsNonOpenPacket = (row.status === "active" || row.status === "waiting") &&
|
|
336
|
+
packets.some((p) => p && !["pending", "in-progress", "blocked"].includes(p.state));
|
|
337
|
+
const verdict = evaluateStepDeadline({
|
|
338
|
+
instanceId: row.instance_id,
|
|
339
|
+
status: row.status,
|
|
340
|
+
currentFrontier: frontier,
|
|
341
|
+
currentStepId: row.current_step_id,
|
|
342
|
+
}, packets.map((p) => p
|
|
343
|
+
? {
|
|
344
|
+
qitemId: p.qitem_id,
|
|
345
|
+
state: p.state,
|
|
346
|
+
destinationSession: p.destination_session,
|
|
347
|
+
tsCreated: p.ts_created,
|
|
348
|
+
claimedAt: p.claimed_at,
|
|
349
|
+
closureRequiredAt: p.closure_required_at,
|
|
350
|
+
}
|
|
351
|
+
: null), now);
|
|
352
|
+
const item = this.db
|
|
353
|
+
.prepare(`SELECT qitem_id, destination_session, tier, ts_created, summary
|
|
354
|
+
FROM queue_items
|
|
355
|
+
WHERE state IN ('pending','in-progress','blocked')
|
|
356
|
+
AND tags LIKE ? AND tags LIKE ?
|
|
357
|
+
ORDER BY ts_created DESC LIMIT 1`)
|
|
358
|
+
.get(`%"instance:${row.instance_id}"%`, `%"workflow-exception"%`);
|
|
359
|
+
out.push({
|
|
360
|
+
instanceId: row.instance_id,
|
|
361
|
+
workflowName: row.workflow_name,
|
|
362
|
+
status: row.status,
|
|
363
|
+
currentStepId: row.current_step_id,
|
|
364
|
+
deadlineState: verdict.state,
|
|
365
|
+
deadlineEvidence: verdict.evidence
|
|
366
|
+
? `step ${verdict.evidence.stepId ?? "?"} packet ${verdict.evidence.packetId} held by ${verdict.evidence.ownerSession} — ${verdict.evidence.overdueBySeconds}s past the ${verdict.evidence.anchor} anchor`
|
|
367
|
+
: null,
|
|
368
|
+
frontierRefsNonOpenPacket,
|
|
369
|
+
openItem: item
|
|
370
|
+
? {
|
|
371
|
+
qitemId: item.qitem_id,
|
|
372
|
+
destinationSession: item.destination_session,
|
|
373
|
+
humanRouted: item.tier === "human-gate" || /^human(?:-[A-Za-z0-9._-]+)?@(kernel|host)$/.test(item.destination_session),
|
|
374
|
+
createdAtIso: item.ts_created,
|
|
375
|
+
summary: item.summary,
|
|
376
|
+
}
|
|
377
|
+
: null,
|
|
378
|
+
});
|
|
379
|
+
}
|
|
380
|
+
return out;
|
|
381
|
+
}
|
|
382
|
+
catch (err) {
|
|
383
|
+
// Pre-workflow DBs (no tables) compose byte-identically to
|
|
384
|
+
// pre-WF-5; anything else fails LOUD (the WF-3 narrowed-catch
|
|
385
|
+
// lesson — a broad catch here would silently blind the band).
|
|
386
|
+
if (err instanceof Error && /no such table/i.test(err.message))
|
|
387
|
+
return [];
|
|
388
|
+
throw err;
|
|
389
|
+
}
|
|
390
|
+
}
|
|
273
391
|
attentionForTag(tag, excludeTagPrefix) {
|
|
274
392
|
if (!this.tableExists("queue_items"))
|
|
275
393
|
return [];
|
|
@@ -297,19 +415,25 @@ export class ReviewGatherer {
|
|
|
297
415
|
return true;
|
|
298
416
|
}
|
|
299
417
|
})
|
|
300
|
-
.map((r) =>
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
418
|
+
.map((r) => {
|
|
419
|
+
// OPR.0.4.6.WF4 Q6 — stamp the ● workflow pointer from the item's own
|
|
420
|
+
// tags; OMITTED for non-workflow rows (byte-identity-by-omission).
|
|
421
|
+
const workflow = workflowRefFromTags(r.tags);
|
|
422
|
+
return {
|
|
423
|
+
qitemId: r.qitem_id,
|
|
424
|
+
summary: r.summary,
|
|
425
|
+
leg: r.state === "blocked" ? "park-on-human" : "human-routed",
|
|
426
|
+
where: r.destination_session,
|
|
427
|
+
createdAtIso: r.ts_created,
|
|
428
|
+
priority: r.priority,
|
|
429
|
+
tier: r.tier,
|
|
430
|
+
evidenceRef: r.evidence_ref ?? null,
|
|
431
|
+
unblocks: r.state === "blocked" ? r.qitem_id : null,
|
|
432
|
+
destinationSession: r.destination_session,
|
|
433
|
+
closureRequiredAtIso: r.closure_required_at,
|
|
434
|
+
...(workflow ? { workflow } : {}),
|
|
435
|
+
};
|
|
436
|
+
});
|
|
313
437
|
}
|
|
314
438
|
/** Sessions holding active work on the named slices (null = rig-wide).
|
|
315
439
|
* Region membership derives from work-on-scope, never rig co-residency.
|
|
@@ -352,7 +476,7 @@ export class ReviewGatherer {
|
|
|
352
476
|
.filter((r) => !!r.blocked_on)
|
|
353
477
|
.reduce((acc, r) => (!acc || r.ts_updated > acc.ts_updated ? r : acc), null);
|
|
354
478
|
return {
|
|
355
|
-
agentName: session.
|
|
479
|
+
agentName: sessionMemberLabel(session), // OPR.0.4.6.MH1 FR-8: shared contract
|
|
356
480
|
sessionName: session,
|
|
357
481
|
runtime: "unknown",
|
|
358
482
|
parkedOn: parked?.blocked_on ?? null,
|
|
@@ -412,7 +536,7 @@ export class ReviewGatherer {
|
|
|
412
536
|
const recentInputs = [...recent.entries()]
|
|
413
537
|
.sort(([a], [b]) => a.localeCompare(b))
|
|
414
538
|
.map(([session, e]) => ({
|
|
415
|
-
agentName: session.
|
|
539
|
+
agentName: sessionMemberLabel(session), // OPR.0.4.6.MH1 FR-8: shared contract
|
|
416
540
|
sessionName: session,
|
|
417
541
|
runtime: "unknown",
|
|
418
542
|
parkedOn: null,
|
|
@@ -491,19 +615,25 @@ export class ReviewGatherer {
|
|
|
491
615
|
OR destination_session LIKE 'human%'
|
|
492
616
|
OR (state = 'blocked' AND blocked_on LIKE 'human%'))`)
|
|
493
617
|
.all(...ACTIVE_STATES);
|
|
494
|
-
return rows.map((r) =>
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
618
|
+
return rows.map((r) => {
|
|
619
|
+
// OPR.0.4.6.WF4 Q6 — stamp the ● workflow pointer from the item's own
|
|
620
|
+
// tags; OMITTED for non-workflow rows (byte-identity-by-omission).
|
|
621
|
+
const workflow = workflowRefFromTags(r.tags);
|
|
622
|
+
return {
|
|
623
|
+
qitemId: r.qitem_id,
|
|
624
|
+
summary: r.summary,
|
|
625
|
+
leg: r.state === "blocked" ? "park-on-human" : "human-routed",
|
|
626
|
+
where: r.destination_session,
|
|
627
|
+
createdAtIso: r.ts_created,
|
|
628
|
+
priority: r.priority,
|
|
629
|
+
tier: r.tier,
|
|
630
|
+
evidenceRef: r.evidence_ref ?? null,
|
|
631
|
+
unblocks: r.state === "blocked" ? r.qitem_id : null,
|
|
632
|
+
destinationSession: r.destination_session,
|
|
633
|
+
closureRequiredAtIso: r.closure_required_at,
|
|
634
|
+
...(workflow ? { workflow } : {}),
|
|
635
|
+
};
|
|
636
|
+
});
|
|
507
637
|
}
|
|
508
638
|
/** FR-4: today's closed handoffs from the transitions log — the SETTLED
|
|
509
639
|
* band and the health line's handoff count come from the SAME query
|
|
@@ -552,19 +682,25 @@ export class ReviewGatherer {
|
|
|
552
682
|
AND closure_required_at < ?
|
|
553
683
|
AND tags LIKE '%"slice:%'`)
|
|
554
684
|
.all(nowIso);
|
|
555
|
-
return rows.map((r) =>
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
685
|
+
return rows.map((r) => {
|
|
686
|
+
// OPR.0.4.6.WF4 Q6 — stamp the ● workflow pointer from the item's own
|
|
687
|
+
// tags; OMITTED for non-workflow rows (byte-identity-by-omission).
|
|
688
|
+
const workflow = workflowRefFromTags(r.tags);
|
|
689
|
+
return {
|
|
690
|
+
qitemId: r.qitem_id,
|
|
691
|
+
summary: r.summary,
|
|
692
|
+
leg: "overdue",
|
|
693
|
+
where: r.destination_session,
|
|
694
|
+
createdAtIso: r.ts_created,
|
|
695
|
+
priority: r.priority,
|
|
696
|
+
tier: r.tier,
|
|
697
|
+
evidenceRef: null,
|
|
698
|
+
unblocks: null,
|
|
699
|
+
destinationSession: r.destination_session,
|
|
700
|
+
closureRequiredAtIso: r.closure_required_at,
|
|
701
|
+
...(workflow ? { workflow } : {}),
|
|
702
|
+
};
|
|
703
|
+
});
|
|
568
704
|
}
|
|
569
705
|
catch {
|
|
570
706
|
return [];
|