@openrig/cli 0.4.3 → 0.4.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/daemon/assets/guidance/openrig-start.md +6 -0
- package/daemon/assets/plugins/openrig-core/skills/mission-slice-sop/SKILL.md +47 -21
- package/daemon/assets/plugins/openrig-core/skills/openrig-cmux/SKILL.md +86 -0
- package/daemon/assets/plugins/openrig-core/skills/openrig-herdr/SKILL.md +158 -0
- package/daemon/assets/plugins/openrig-core/skills/openrig-user/SKILL.md +742 -94
- package/daemon/dist/adapters/codex-runtime-adapter.d.ts.map +1 -1
- package/daemon/dist/adapters/codex-runtime-adapter.js +12 -8
- package/daemon/dist/adapters/codex-runtime-adapter.js.map +1 -1
- package/daemon/dist/adapters/pi-resume.d.ts +32 -0
- package/daemon/dist/adapters/pi-resume.d.ts.map +1 -0
- package/daemon/dist/adapters/pi-resume.js +125 -0
- package/daemon/dist/adapters/pi-resume.js.map +1 -0
- package/daemon/dist/adapters/pi-runner-protocol.d.ts +88 -0
- package/daemon/dist/adapters/pi-runner-protocol.d.ts.map +1 -0
- package/daemon/dist/adapters/pi-runner-protocol.js +153 -0
- package/daemon/dist/adapters/pi-runner-protocol.js.map +1 -0
- package/daemon/dist/adapters/pi-runner.d.ts +99 -0
- package/daemon/dist/adapters/pi-runner.d.ts.map +1 -0
- package/daemon/dist/adapters/pi-runner.js +519 -0
- package/daemon/dist/adapters/pi-runner.js.map +1 -0
- package/daemon/dist/adapters/pi-runtime-adapter.d.ts +61 -0
- package/daemon/dist/adapters/pi-runtime-adapter.d.ts.map +1 -0
- package/daemon/dist/adapters/pi-runtime-adapter.js +356 -0
- package/daemon/dist/adapters/pi-runtime-adapter.js.map +1 -0
- package/daemon/dist/adapters/tmux.d.ts +22 -1
- package/daemon/dist/adapters/tmux.d.ts.map +1 -1
- package/daemon/dist/adapters/tmux.js +40 -1
- package/daemon/dist/adapters/tmux.js.map +1 -1
- package/daemon/dist/build-info.d.ts +12 -0
- package/daemon/dist/build-info.d.ts.map +1 -0
- package/daemon/dist/build-info.js +11 -0
- package/daemon/dist/build-info.js.map +1 -0
- package/daemon/dist/builtins/workflow-specs/branched-remediation.yaml +31 -0
- package/daemon/dist/builtins/workflow-specs/factory-rsi.yaml +152 -0
- package/daemon/dist/builtins/workflow-specs/gated-release.yaml +26 -0
- package/daemon/dist/builtins/workflow-specs/linear-build.yaml +21 -0
- package/daemon/dist/db/migrations/048_queue_item_evidence_ref.d.ts +18 -0
- package/daemon/dist/db/migrations/048_queue_item_evidence_ref.d.ts.map +1 -0
- package/daemon/dist/db/migrations/048_queue_item_evidence_ref.js +22 -0
- package/daemon/dist/db/migrations/048_queue_item_evidence_ref.js.map +1 -0
- package/daemon/dist/db/migrations/049_workflow_instance_version.d.ts +20 -0
- package/daemon/dist/db/migrations/049_workflow_instance_version.d.ts.map +1 -0
- package/daemon/dist/db/migrations/049_workflow_instance_version.js +24 -0
- package/daemon/dist/db/migrations/049_workflow_instance_version.js.map +1 -0
- package/daemon/dist/db/migrations/050_workflow_spec_json.d.ts +22 -0
- package/daemon/dist/db/migrations/050_workflow_spec_json.d.ts.map +1 -0
- package/daemon/dist/db/migrations/050_workflow_spec_json.js +26 -0
- package/daemon/dist/db/migrations/050_workflow_spec_json.js.map +1 -0
- package/daemon/dist/db/migrations/051_workflow_resume.d.ts +22 -0
- package/daemon/dist/db/migrations/051_workflow_resume.d.ts.map +1 -0
- package/daemon/dist/db/migrations/051_workflow_resume.js +27 -0
- package/daemon/dist/db/migrations/051_workflow_resume.js.map +1 -0
- package/daemon/dist/db/migrations/052_workflow_instance_bound_rig.d.ts +26 -0
- package/daemon/dist/db/migrations/052_workflow_instance_bound_rig.d.ts.map +1 -0
- package/daemon/dist/db/migrations/052_workflow_instance_bound_rig.js +30 -0
- package/daemon/dist/db/migrations/052_workflow_instance_bound_rig.js.map +1 -0
- package/daemon/dist/db/migrations/053_sessions_node_id_index.d.ts +48 -0
- package/daemon/dist/db/migrations/053_sessions_node_id_index.d.ts.map +1 -0
- package/daemon/dist/db/migrations/053_sessions_node_id_index.js +53 -0
- package/daemon/dist/db/migrations/053_sessions_node_id_index.js.map +1 -0
- package/daemon/dist/db/migrations/054_queue_transitions_archive.d.ts +34 -0
- package/daemon/dist/db/migrations/054_queue_transitions_archive.d.ts.map +1 -0
- package/daemon/dist/db/migrations/054_queue_transitions_archive.js +49 -0
- package/daemon/dist/db/migrations/054_queue_transitions_archive.js.map +1 -0
- package/daemon/dist/domain/claim-service.d.ts +11 -0
- package/daemon/dist/domain/claim-service.d.ts.map +1 -1
- package/daemon/dist/domain/claim-service.js +3 -1
- package/daemon/dist/domain/claim-service.js.map +1 -1
- package/daemon/dist/domain/discovery-types.d.ts +1 -1
- package/daemon/dist/domain/discovery-types.d.ts.map +1 -1
- package/daemon/dist/domain/feed/attention-aggregator.d.ts +31 -0
- package/daemon/dist/domain/feed/attention-aggregator.d.ts.map +1 -0
- package/daemon/dist/domain/feed/attention-aggregator.js +119 -0
- package/daemon/dist/domain/feed/attention-aggregator.js.map +1 -0
- package/daemon/dist/domain/files/file-write-service.d.ts +11 -2
- package/daemon/dist/domain/files/file-write-service.d.ts.map +1 -1
- package/daemon/dist/domain/files/file-write-service.js +77 -0
- package/daemon/dist/domain/files/file-write-service.js.map +1 -1
- package/daemon/dist/domain/hosts/fanout-contract.d.ts +33 -0
- package/daemon/dist/domain/hosts/fanout-contract.d.ts.map +1 -0
- package/daemon/dist/domain/hosts/fanout-contract.js +23 -0
- package/daemon/dist/domain/hosts/fanout-contract.js.map +1 -0
- package/daemon/dist/domain/hosts/hosts-registry-reader.d.ts +50 -0
- package/daemon/dist/domain/hosts/hosts-registry-reader.d.ts.map +1 -0
- package/daemon/dist/domain/hosts/hosts-registry-reader.js +184 -0
- package/daemon/dist/domain/hosts/hosts-registry-reader.js.map +1 -0
- package/daemon/dist/domain/hosts/hosts-registry-writer.d.ts +11 -0
- package/daemon/dist/domain/hosts/hosts-registry-writer.d.ts.map +1 -0
- package/daemon/dist/domain/hosts/hosts-registry-writer.js +54 -0
- package/daemon/dist/domain/hosts/hosts-registry-writer.js.map +1 -0
- package/daemon/dist/domain/hosts/read-through.d.ts +28 -0
- package/daemon/dist/domain/hosts/read-through.d.ts.map +1 -0
- package/daemon/dist/domain/hosts/read-through.js +139 -0
- package/daemon/dist/domain/hosts/read-through.js.map +1 -0
- package/daemon/dist/domain/hosts/remote-daemon-http.d.ts +56 -0
- package/daemon/dist/domain/hosts/remote-daemon-http.d.ts.map +1 -0
- package/daemon/dist/domain/hosts/remote-daemon-http.js +154 -0
- package/daemon/dist/domain/hosts/remote-daemon-http.js.map +1 -0
- package/daemon/dist/domain/human-route-enforcer.d.ts +71 -0
- package/daemon/dist/domain/human-route-enforcer.d.ts.map +1 -0
- package/daemon/dist/domain/human-route-enforcer.js +80 -0
- package/daemon/dist/domain/human-route-enforcer.js.map +1 -0
- package/daemon/dist/domain/mission-control/audit-browse.d.ts +8 -0
- package/daemon/dist/domain/mission-control/audit-browse.d.ts.map +1 -1
- package/daemon/dist/domain/mission-control/audit-browse.js +19 -0
- package/daemon/dist/domain/mission-control/audit-browse.js.map +1 -1
- package/daemon/dist/domain/mission-control/mission-control-action-log.d.ts +1 -1
- package/daemon/dist/domain/mission-control/mission-control-action-log.d.ts.map +1 -1
- package/daemon/dist/domain/mission-control/mission-control-action-log.js +4 -0
- package/daemon/dist/domain/mission-control/mission-control-action-log.js.map +1 -1
- package/daemon/dist/domain/mission-control/mission-control-fleet-cli-capability.js +1 -1
- package/daemon/dist/domain/mission-control/mission-control-fleet-cli-capability.js.map +1 -1
- package/daemon/dist/domain/mission-control/mission-control-read-layer.js +1 -1
- package/daemon/dist/domain/mission-control/mission-control-read-layer.js.map +1 -1
- package/daemon/dist/domain/mission-control/mission-control-write-contract.d.ts +28 -0
- package/daemon/dist/domain/mission-control/mission-control-write-contract.d.ts.map +1 -1
- package/daemon/dist/domain/mission-control/mission-control-write-contract.js +125 -0
- package/daemon/dist/domain/mission-control/mission-control-write-contract.js.map +1 -1
- package/daemon/dist/domain/node-inventory.d.ts +18 -0
- package/daemon/dist/domain/node-inventory.d.ts.map +1 -1
- package/daemon/dist/domain/node-inventory.js +206 -95
- package/daemon/dist/domain/node-inventory.js.map +1 -1
- package/daemon/dist/domain/node-launcher.d.ts +11 -0
- package/daemon/dist/domain/node-launcher.d.ts.map +1 -1
- package/daemon/dist/domain/node-launcher.js +10 -0
- package/daemon/dist/domain/node-launcher.js.map +1 -1
- package/daemon/dist/domain/policies/workflow-keepalive.d.ts +7 -0
- package/daemon/dist/domain/policies/workflow-keepalive.d.ts.map +1 -1
- package/daemon/dist/domain/policies/workflow-keepalive.js +93 -13
- package/daemon/dist/domain/policies/workflow-keepalive.js.map +1 -1
- package/daemon/dist/domain/ps-projection.d.ts +28 -1
- package/daemon/dist/domain/ps-projection.d.ts.map +1 -1
- package/daemon/dist/domain/ps-projection.js +76 -26
- package/daemon/dist/domain/ps-projection.js.map +1 -1
- package/daemon/dist/domain/queue-repository.d.ts +130 -1
- package/daemon/dist/domain/queue-repository.d.ts.map +1 -1
- package/daemon/dist/domain/queue-repository.js +304 -11
- package/daemon/dist/domain/queue-repository.js.map +1 -1
- package/daemon/dist/domain/queue-retention.d.ts +130 -0
- package/daemon/dist/domain/queue-retention.d.ts.map +1 -0
- package/daemon/dist/domain/queue-retention.js +224 -0
- package/daemon/dist/domain/queue-retention.js.map +1 -0
- package/daemon/dist/domain/restore-orchestrator.d.ts +5 -0
- package/daemon/dist/domain/restore-orchestrator.d.ts.map +1 -1
- package/daemon/dist/domain/restore-orchestrator.js +29 -2
- package/daemon/dist/domain/restore-orchestrator.js.map +1 -1
- package/daemon/dist/domain/resume-token-capture.d.ts +13 -0
- package/daemon/dist/domain/resume-token-capture.d.ts.map +1 -1
- package/daemon/dist/domain/resume-token-capture.js +14 -1
- package/daemon/dist/domain/resume-token-capture.js.map +1 -1
- package/daemon/dist/domain/resume-token-validation.d.ts +1 -1
- package/daemon/dist/domain/resume-token-validation.d.ts.map +1 -1
- package/daemon/dist/domain/resume-token-validation.js +58 -10
- package/daemon/dist/domain/resume-token-validation.js.map +1 -1
- package/daemon/dist/domain/review/brief-spine.d.ts +19 -0
- package/daemon/dist/domain/review/brief-spine.d.ts.map +1 -0
- package/daemon/dist/domain/review/brief-spine.js +86 -0
- package/daemon/dist/domain/review/brief-spine.js.map +1 -0
- package/daemon/dist/domain/review/compose.d.ts +277 -0
- package/daemon/dist/domain/review/compose.d.ts.map +1 -0
- package/daemon/dist/domain/review/compose.js +862 -0
- package/daemon/dist/domain/review/compose.js.map +1 -0
- package/daemon/dist/domain/review/fleet-compose.d.ts +52 -0
- package/daemon/dist/domain/review/fleet-compose.d.ts.map +1 -0
- package/daemon/dist/domain/review/fleet-compose.js +294 -0
- package/daemon/dist/domain/review/fleet-compose.js.map +1 -0
- package/daemon/dist/domain/review/freeze.d.ts +31 -0
- package/daemon/dist/domain/review/freeze.d.ts.map +1 -0
- package/daemon/dist/domain/review/freeze.js +257 -0
- package/daemon/dist/domain/review/freeze.js.map +1 -0
- package/daemon/dist/domain/review/gather.d.ts +115 -0
- package/daemon/dist/domain/review/gather.d.ts.map +1 -0
- package/daemon/dist/domain/review/gather.js +812 -0
- package/daemon/dist/domain/review/gather.js.map +1 -0
- package/daemon/dist/domain/review/types.d.ts +361 -0
- package/daemon/dist/domain/review/types.d.ts.map +1 -0
- package/daemon/dist/domain/review/types.js +35 -0
- package/daemon/dist/domain/review/types.js.map +1 -0
- package/daemon/dist/domain/rig-expansion-service.d.ts.map +1 -1
- package/daemon/dist/domain/rig-expansion-service.js +3 -0
- package/daemon/dist/domain/rig-expansion-service.js.map +1 -1
- package/daemon/dist/domain/rig-repository.d.ts +7 -6
- package/daemon/dist/domain/rig-repository.d.ts.map +1 -1
- package/daemon/dist/domain/rig-repository.js +33 -11
- package/daemon/dist/domain/rig-repository.js.map +1 -1
- package/daemon/dist/domain/rigspec-codec.d.ts.map +1 -1
- package/daemon/dist/domain/rigspec-codec.js +3 -0
- package/daemon/dist/domain/rigspec-codec.js.map +1 -1
- package/daemon/dist/domain/rigspec-exporter.d.ts.map +1 -1
- package/daemon/dist/domain/rigspec-exporter.js +4 -0
- package/daemon/dist/domain/rigspec-exporter.js.map +1 -1
- package/daemon/dist/domain/rigspec-instantiator.d.ts.map +1 -1
- package/daemon/dist/domain/rigspec-instantiator.js +11 -0
- package/daemon/dist/domain/rigspec-instantiator.js.map +1 -1
- package/daemon/dist/domain/rigspec-preflight.d.ts +6 -0
- package/daemon/dist/domain/rigspec-preflight.d.ts.map +1 -1
- package/daemon/dist/domain/rigspec-preflight.js +26 -1
- package/daemon/dist/domain/rigspec-preflight.js.map +1 -1
- package/daemon/dist/domain/rigspec-schema.d.ts.map +1 -1
- package/daemon/dist/domain/rigspec-schema.js +20 -1
- package/daemon/dist/domain/rigspec-schema.js.map +1 -1
- package/daemon/dist/domain/runtime-verifier.d.ts +7 -1
- package/daemon/dist/domain/runtime-verifier.d.ts.map +1 -1
- package/daemon/dist/domain/runtime-verifier.js +39 -1
- package/daemon/dist/domain/runtime-verifier.js.map +1 -1
- package/daemon/dist/domain/scope/scope-approve.d.ts +64 -0
- package/daemon/dist/domain/scope/scope-approve.d.ts.map +1 -0
- package/daemon/dist/domain/scope/scope-approve.js +153 -0
- package/daemon/dist/domain/scope/scope-approve.js.map +1 -0
- package/daemon/dist/domain/scope/scope-audit.d.ts +9 -1
- package/daemon/dist/domain/scope/scope-audit.d.ts.map +1 -1
- package/daemon/dist/domain/scope/scope-audit.js +173 -1
- package/daemon/dist/domain/scope/scope-audit.js.map +1 -1
- package/daemon/dist/domain/seat-handover-service.d.ts +9 -0
- package/daemon/dist/domain/seat-handover-service.d.ts.map +1 -1
- package/daemon/dist/domain/seat-handover-service.js +2 -0
- package/daemon/dist/domain/seat-handover-service.js.map +1 -1
- package/daemon/dist/domain/seat-identity-store.d.ts +7 -0
- package/daemon/dist/domain/seat-identity-store.d.ts.map +1 -1
- package/daemon/dist/domain/seat-identity-store.js +27 -0
- package/daemon/dist/domain/seat-identity-store.js.map +1 -1
- package/daemon/dist/domain/seat-status-service.d.ts.map +1 -1
- package/daemon/dist/domain/seat-status-service.js +6 -4
- package/daemon/dist/domain/seat-status-service.js.map +1 -1
- package/daemon/dist/domain/session-name.d.ts +22 -0
- package/daemon/dist/domain/session-name.d.ts.map +1 -1
- package/daemon/dist/domain/session-name.js +29 -0
- package/daemon/dist/domain/session-name.js.map +1 -1
- package/daemon/dist/domain/slices/slice-detail-projector.d.ts.map +1 -1
- package/daemon/dist/domain/slices/slice-detail-projector.js +4 -5
- package/daemon/dist/domain/slices/slice-detail-projector.js.map +1 -1
- package/daemon/dist/domain/spec-library-workflow-scanner.d.ts +18 -2
- package/daemon/dist/domain/spec-library-workflow-scanner.d.ts.map +1 -1
- package/daemon/dist/domain/spec-library-workflow-scanner.js +23 -1
- package/daemon/dist/domain/spec-library-workflow-scanner.js.map +1 -1
- package/daemon/dist/domain/startup-proof.d.ts +10 -6
- package/daemon/dist/domain/startup-proof.d.ts.map +1 -1
- package/daemon/dist/domain/startup-proof.js +35 -7
- package/daemon/dist/domain/startup-proof.js.map +1 -1
- package/daemon/dist/domain/successor-session-launcher.d.ts +16 -0
- package/daemon/dist/domain/successor-session-launcher.d.ts.map +1 -1
- package/daemon/dist/domain/successor-session-launcher.js +13 -0
- package/daemon/dist/domain/successor-session-launcher.js.map +1 -1
- package/daemon/dist/domain/terminal/cmux-provider-adapter.d.ts +27 -0
- package/daemon/dist/domain/terminal/cmux-provider-adapter.d.ts.map +1 -0
- package/daemon/dist/domain/terminal/cmux-provider-adapter.js +67 -0
- package/daemon/dist/domain/terminal/cmux-provider-adapter.js.map +1 -0
- package/daemon/dist/domain/terminal/herdr-adapter.d.ts +77 -0
- package/daemon/dist/domain/terminal/herdr-adapter.d.ts.map +1 -0
- package/daemon/dist/domain/terminal/herdr-adapter.js +266 -0
- package/daemon/dist/domain/terminal/herdr-adapter.js.map +1 -0
- package/daemon/dist/domain/terminal/herdr-transport.d.ts +50 -0
- package/daemon/dist/domain/terminal/herdr-transport.d.ts.map +1 -0
- package/daemon/dist/domain/terminal/herdr-transport.js +145 -0
- package/daemon/dist/domain/terminal/herdr-transport.js.map +1 -0
- package/daemon/dist/domain/terminal/terminal-provider.d.ts +88 -0
- package/daemon/dist/domain/terminal/terminal-provider.d.ts.map +1 -0
- package/daemon/dist/domain/terminal/terminal-provider.js +17 -0
- package/daemon/dist/domain/terminal/terminal-provider.js.map +1 -0
- package/daemon/dist/domain/terminal/terminal-service.d.ts +60 -0
- package/daemon/dist/domain/terminal/terminal-service.d.ts.map +1 -0
- package/daemon/dist/domain/terminal/terminal-service.js +174 -0
- package/daemon/dist/domain/terminal/terminal-service.js.map +1 -0
- package/daemon/dist/domain/terminal/terminal-views-store.d.ts +77 -0
- package/daemon/dist/domain/terminal/terminal-views-store.d.ts.map +1 -0
- package/daemon/dist/domain/terminal/terminal-views-store.js +146 -0
- package/daemon/dist/domain/terminal/terminal-views-store.js.map +1 -0
- package/daemon/dist/domain/terminal/view-composer.d.ts +42 -0
- package/daemon/dist/domain/terminal/view-composer.d.ts.map +1 -0
- package/daemon/dist/domain/terminal/view-composer.js +137 -0
- package/daemon/dist/domain/terminal/view-composer.js.map +1 -0
- package/daemon/dist/domain/tmux-option-defaults.d.ts +89 -0
- package/daemon/dist/domain/tmux-option-defaults.d.ts.map +1 -0
- package/daemon/dist/domain/tmux-option-defaults.js +132 -0
- package/daemon/dist/domain/tmux-option-defaults.js.map +1 -0
- package/daemon/dist/domain/topology/multi-rig-launcher.d.ts +49 -0
- package/daemon/dist/domain/topology/multi-rig-launcher.d.ts.map +1 -0
- package/daemon/dist/domain/topology/multi-rig-launcher.js +132 -0
- package/daemon/dist/domain/topology/multi-rig-launcher.js.map +1 -0
- package/daemon/dist/domain/topology/remote-up-leaf.d.ts +29 -0
- package/daemon/dist/domain/topology/remote-up-leaf.d.ts.map +1 -0
- package/daemon/dist/domain/topology/remote-up-leaf.js +60 -0
- package/daemon/dist/domain/topology/remote-up-leaf.js.map +1 -0
- package/daemon/dist/domain/topology/topology-manifest.d.ts +34 -0
- package/daemon/dist/domain/topology/topology-manifest.d.ts.map +1 -0
- package/daemon/dist/domain/topology/topology-manifest.js +195 -0
- package/daemon/dist/domain/topology/topology-manifest.js.map +1 -0
- package/daemon/dist/domain/types.d.ts +39 -1
- package/daemon/dist/domain/types.d.ts.map +1 -1
- package/daemon/dist/domain/types.js.map +1 -1
- package/daemon/dist/domain/up-command-router.d.ts +1 -1
- package/daemon/dist/domain/up-command-router.d.ts.map +1 -1
- package/daemon/dist/domain/up-command-router.js +34 -2
- package/daemon/dist/domain/up-command-router.js.map +1 -1
- package/daemon/dist/domain/user-settings/settings-store.d.ts +18 -1
- package/daemon/dist/domain/user-settings/settings-store.d.ts.map +1 -1
- package/daemon/dist/domain/user-settings/settings-store.js +201 -0
- package/daemon/dist/domain/user-settings/settings-store.js.map +1 -1
- package/daemon/dist/domain/workflow/slice-workflow-projection.d.ts.map +1 -1
- package/daemon/dist/domain/workflow/slice-workflow-projection.js +6 -2
- package/daemon/dist/domain/workflow/slice-workflow-projection.js.map +1 -1
- package/daemon/dist/domain/workflow-boot-sweep.d.ts +28 -0
- package/daemon/dist/domain/workflow-boot-sweep.d.ts.map +1 -0
- package/daemon/dist/domain/workflow-boot-sweep.js +102 -0
- package/daemon/dist/domain/workflow-boot-sweep.js.map +1 -0
- package/daemon/dist/domain/workflow-deadline.d.ts +74 -0
- package/daemon/dist/domain/workflow-deadline.d.ts.map +1 -0
- package/daemon/dist/domain/workflow-deadline.js +165 -0
- package/daemon/dist/domain/workflow-deadline.js.map +1 -0
- package/daemon/dist/domain/workflow-exception-escalation.d.ts +33 -0
- package/daemon/dist/domain/workflow-exception-escalation.d.ts.map +1 -0
- package/daemon/dist/domain/workflow-exception-escalation.js +104 -0
- package/daemon/dist/domain/workflow-exception-escalation.js.map +1 -0
- package/daemon/dist/domain/workflow-exception-router.d.ts +33 -0
- package/daemon/dist/domain/workflow-exception-router.d.ts.map +1 -0
- package/daemon/dist/domain/workflow-exception-router.js +96 -0
- package/daemon/dist/domain/workflow-exception-router.js.map +1 -0
- package/daemon/dist/domain/workflow-exception.d.ts +90 -0
- package/daemon/dist/domain/workflow-exception.d.ts.map +1 -0
- package/daemon/dist/domain/workflow-exception.js +122 -0
- package/daemon/dist/domain/workflow-exception.js.map +1 -0
- package/daemon/dist/domain/workflow-frontier-guard.d.ts +24 -0
- package/daemon/dist/domain/workflow-frontier-guard.d.ts.map +1 -0
- package/daemon/dist/domain/workflow-frontier-guard.js +30 -0
- package/daemon/dist/domain/workflow-frontier-guard.js.map +1 -0
- package/daemon/dist/domain/workflow-instance-store.d.ts +28 -0
- package/daemon/dist/domain/workflow-instance-store.d.ts.map +1 -1
- package/daemon/dist/domain/workflow-instance-store.js +66 -10
- package/daemon/dist/domain/workflow-instance-store.js.map +1 -1
- package/daemon/dist/domain/workflow-keepalive-arming.d.ts +35 -0
- package/daemon/dist/domain/workflow-keepalive-arming.d.ts.map +1 -0
- package/daemon/dist/domain/workflow-keepalive-arming.js +87 -0
- package/daemon/dist/domain/workflow-keepalive-arming.js.map +1 -0
- package/daemon/dist/domain/workflow-projector.d.ts +117 -2
- package/daemon/dist/domain/workflow-projector.d.ts.map +1 -1
- package/daemon/dist/domain/workflow-projector.js +672 -41
- package/daemon/dist/domain/workflow-projector.js.map +1 -1
- package/daemon/dist/domain/workflow-role-context.d.ts +57 -0
- package/daemon/dist/domain/workflow-role-context.d.ts.map +1 -0
- package/daemon/dist/domain/workflow-role-context.js +120 -0
- package/daemon/dist/domain/workflow-role-context.js.map +1 -0
- package/daemon/dist/domain/workflow-role-resolver.d.ts +65 -0
- package/daemon/dist/domain/workflow-role-resolver.d.ts.map +1 -0
- package/daemon/dist/domain/workflow-role-resolver.js +108 -0
- package/daemon/dist/domain/workflow-role-resolver.js.map +1 -0
- package/daemon/dist/domain/workflow-runtime.d.ts +157 -1
- package/daemon/dist/domain/workflow-runtime.d.ts.map +1 -1
- package/daemon/dist/domain/workflow-runtime.js +718 -11
- package/daemon/dist/domain/workflow-runtime.js.map +1 -1
- package/daemon/dist/domain/workflow-spec-cache.d.ts +26 -1
- package/daemon/dist/domain/workflow-spec-cache.d.ts.map +1 -1
- package/daemon/dist/domain/workflow-spec-cache.js +327 -13
- package/daemon/dist/domain/workflow-spec-cache.js.map +1 -1
- package/daemon/dist/domain/workflow-types.d.ts +143 -8
- package/daemon/dist/domain/workflow-types.d.ts.map +1 -1
- package/daemon/dist/domain/workflow-types.js +14 -1
- package/daemon/dist/domain/workflow-types.js.map +1 -1
- package/daemon/dist/domain/workflow-validator.d.ts +11 -1
- package/daemon/dist/domain/workflow-validator.d.ts.map +1 -1
- package/daemon/dist/domain/workflow-validator.js +246 -1
- package/daemon/dist/domain/workflow-validator.js.map +1 -1
- package/daemon/dist/domain/workspace/default-workspace-scaffold.d.ts.map +1 -1
- package/daemon/dist/domain/workspace/default-workspace-scaffold.js +51 -6
- package/daemon/dist/domain/workspace/default-workspace-scaffold.js.map +1 -1
- package/daemon/dist/domain/workspace/workspace-doctor.d.ts +11 -0
- package/daemon/dist/domain/workspace/workspace-doctor.d.ts.map +1 -1
- package/daemon/dist/domain/workspace/workspace-doctor.js +82 -0
- package/daemon/dist/domain/workspace/workspace-doctor.js.map +1 -1
- package/daemon/dist/index.d.ts +17 -0
- package/daemon/dist/index.d.ts.map +1 -1
- package/daemon/dist/index.js +44 -0
- package/daemon/dist/index.js.map +1 -1
- package/daemon/dist/routes/activity.js +22 -0
- package/daemon/dist/routes/activity.js.map +1 -1
- package/daemon/dist/routes/config.d.ts.map +1 -1
- package/daemon/dist/routes/config.js +15 -6
- package/daemon/dist/routes/config.js.map +1 -1
- package/daemon/dist/routes/files.d.ts.map +1 -1
- package/daemon/dist/routes/files.js +45 -1
- package/daemon/dist/routes/files.js.map +1 -1
- package/daemon/dist/routes/hosts.d.ts +5 -0
- package/daemon/dist/routes/hosts.d.ts.map +1 -0
- package/daemon/dist/routes/hosts.js +346 -0
- package/daemon/dist/routes/hosts.js.map +1 -0
- package/daemon/dist/routes/mission-control.d.ts.map +1 -1
- package/daemon/dist/routes/mission-control.js +67 -2
- package/daemon/dist/routes/mission-control.js.map +1 -1
- package/daemon/dist/routes/queue.d.ts +10 -9
- package/daemon/dist/routes/queue.d.ts.map +1 -1
- package/daemon/dist/routes/queue.js +305 -10
- package/daemon/dist/routes/queue.js.map +1 -1
- package/daemon/dist/routes/review.d.ts +3 -0
- package/daemon/dist/routes/review.d.ts.map +1 -0
- package/daemon/dist/routes/review.js +195 -0
- package/daemon/dist/routes/review.js.map +1 -0
- package/daemon/dist/routes/scope-approve.d.ts +3 -0
- package/daemon/dist/routes/scope-approve.d.ts.map +1 -0
- package/daemon/dist/routes/scope-approve.js +55 -0
- package/daemon/dist/routes/scope-approve.js.map +1 -0
- package/daemon/dist/routes/scope-audit.d.ts.map +1 -1
- package/daemon/dist/routes/scope-audit.js +28 -1
- package/daemon/dist/routes/scope-audit.js.map +1 -1
- package/daemon/dist/routes/seat.js +13 -0
- package/daemon/dist/routes/seat.js.map +1 -1
- package/daemon/dist/routes/slices.d.ts.map +1 -1
- package/daemon/dist/routes/slices.js +49 -9
- package/daemon/dist/routes/slices.js.map +1 -1
- package/daemon/dist/routes/terminal-ws.d.ts.map +1 -1
- package/daemon/dist/routes/terminal-ws.js +58 -21
- package/daemon/dist/routes/terminal-ws.js.map +1 -1
- package/daemon/dist/routes/terminal.d.ts +11 -0
- package/daemon/dist/routes/terminal.d.ts.map +1 -0
- package/daemon/dist/routes/terminal.js +104 -0
- package/daemon/dist/routes/terminal.js.map +1 -0
- package/daemon/dist/routes/up.d.ts.map +1 -1
- package/daemon/dist/routes/up.js +84 -0
- package/daemon/dist/routes/up.js.map +1 -1
- package/daemon/dist/routes/workflow.d.ts.map +1 -1
- package/daemon/dist/routes/workflow.js +102 -10
- package/daemon/dist/routes/workflow.js.map +1 -1
- package/daemon/dist/routes/workspace.js +2 -2
- package/daemon/dist/server.d.ts +6 -0
- package/daemon/dist/server.d.ts.map +1 -1
- package/daemon/dist/server.js +36 -1
- package/daemon/dist/server.js.map +1 -1
- package/daemon/dist/startup.d.ts.map +1 -1
- package/daemon/dist/startup.js +238 -14
- package/daemon/dist/startup.js.map +1 -1
- package/daemon/docs/reference/agent-startup-guide.md +1 -1
- package/daemon/docs/reference/product-factory-vps-runbook.md +132 -0
- package/daemon/docs/reference/sdlc-conventions.md +187 -0
- package/daemon/specs/agents/conveyor/builder/agent.yaml +1 -1
- package/daemon/specs/agents/conveyor/builder/guidance/role.md +1 -0
- package/daemon/specs/agents/conveyor/lead/agent.yaml +1 -1
- package/daemon/specs/agents/conveyor/lead/guidance/role.md +1 -0
- package/daemon/specs/agents/conveyor/planner/agent.yaml +1 -1
- package/daemon/specs/agents/conveyor/planner/guidance/role.md +1 -0
- package/daemon/specs/agents/conveyor/reviewer/agent.yaml +1 -1
- package/daemon/specs/agents/conveyor/reviewer/guidance/role.md +1 -0
- package/daemon/specs/agents/design/product-designer/agent.yaml +1 -1
- package/daemon/specs/agents/design/product-designer/guidance/role.md +1 -0
- package/daemon/specs/agents/development/implementer/agent.yaml +1 -1
- package/daemon/specs/agents/development/implementer/guidance/role.md +1 -0
- package/daemon/specs/agents/development/qa/agent.yaml +1 -1
- package/daemon/specs/agents/development/qa/guidance/role.md +1 -0
- package/daemon/specs/agents/factory-rsi/dogfood/agent.yaml +29 -0
- package/daemon/specs/agents/factory-rsi/dogfood/guidance/role.md +37 -0
- package/daemon/specs/agents/factory-rsi/release-manager/agent.yaml +29 -0
- package/daemon/specs/agents/factory-rsi/release-manager/guidance/role.md +40 -0
- package/daemon/specs/agents/orchestration/orchestrator/agent.yaml +1 -1
- package/daemon/specs/agents/orchestration/orchestrator/guidance/role.md +1 -0
- package/daemon/specs/agents/product-management/pm/agent.yaml +1 -0
- package/daemon/specs/agents/product-management/pm/guidance/role.md +13 -0
- package/daemon/specs/agents/review/independent-reviewer/agent.yaml +1 -1
- package/daemon/specs/agents/review/independent-reviewer/guidance/role.md +1 -0
- package/daemon/specs/agents/shared/agent.yaml +2 -0
- package/daemon/specs/agents/shared/skills/core/mission-slice-sop/SKILL.md +113 -0
- package/daemon/specs/agents/shared/skills/core/openrig-cmux/SKILL.md +86 -0
- package/daemon/specs/agents/shared/skills/core/openrig-herdr/SKILL.md +158 -0
- package/daemon/specs/agents/shared/skills/core/openrig-operator/SKILL.md +4 -4
- package/daemon/specs/agents/shared/skills/core/openrig-user/SKILL.md +75 -29
- package/daemon/specs/agents/shared/skills/pods/orchestration-team/SKILL.md +2 -2
- package/daemon/specs/rigs/focused/pm-team/CULTURE.md +4 -0
- package/daemon/specs/rigs/launch/factory-rsi/CULTURE.md +47 -0
- package/daemon/specs/rigs/launch/factory-rsi/rig.yaml +115 -0
- package/daemon/specs/rigs/launch/kernel/agents/operator/agent/guidance/role.md +1 -1
- package/daemon/specs/rigs/launch/kernel/agents/operator/agent/startup/context.md +1 -1
- package/daemon/specs/rigs/preview/product-team/CULTURE.md +4 -0
- package/dist/build-info.d.ts +8 -0
- package/dist/build-info.d.ts.map +1 -0
- package/dist/build-info.js +11 -0
- package/dist/build-info.js.map +1 -0
- package/dist/commands/broadcast.d.ts +6 -1
- package/dist/commands/broadcast.d.ts.map +1 -1
- package/dist/commands/broadcast.js +101 -15
- package/dist/commands/broadcast.js.map +1 -1
- package/dist/commands/capture.d.ts.map +1 -1
- package/dist/commands/capture.js +99 -8
- package/dist/commands/capture.js.map +1 -1
- package/dist/commands/config-init-workspace.d.ts.map +1 -1
- package/dist/commands/config-init-workspace.js +20 -4
- package/dist/commands/config-init-workspace.js.map +1 -1
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +4 -0
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/doctor.js +2 -2
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/down.d.ts.map +1 -1
- package/dist/commands/down.js +5 -0
- package/dist/commands/down.js.map +1 -1
- package/dist/commands/expand.js +1 -1
- package/dist/commands/expand.js.map +1 -1
- package/dist/commands/file.d.ts +7 -0
- package/dist/commands/file.d.ts.map +1 -0
- package/dist/commands/file.js +77 -0
- package/dist/commands/file.js.map +1 -0
- package/dist/commands/host.d.ts +48 -0
- package/dist/commands/host.d.ts.map +1 -0
- package/dist/commands/host.js +772 -0
- package/dist/commands/host.js.map +1 -0
- package/dist/commands/launch.d.ts.map +1 -1
- package/dist/commands/launch.js +5 -0
- package/dist/commands/launch.js.map +1 -1
- package/dist/commands/proof.d.ts +54 -0
- package/dist/commands/proof.d.ts.map +1 -0
- package/dist/commands/proof.js +311 -0
- package/dist/commands/proof.js.map +1 -0
- package/dist/commands/ps.d.ts +41 -7
- package/dist/commands/ps.d.ts.map +1 -1
- package/dist/commands/ps.js +353 -135
- package/dist/commands/ps.js.map +1 -1
- package/dist/commands/queue.d.ts +36 -0
- package/dist/commands/queue.d.ts.map +1 -1
- package/dist/commands/queue.js +149 -7
- package/dist/commands/queue.js.map +1 -1
- package/dist/commands/restore-packet.d.ts.map +1 -1
- package/dist/commands/restore-packet.js +13 -2
- package/dist/commands/restore-packet.js.map +1 -1
- package/dist/commands/scope.d.ts.map +1 -1
- package/dist/commands/scope.js +140 -3
- package/dist/commands/scope.js.map +1 -1
- package/dist/commands/send.d.ts.map +1 -1
- package/dist/commands/send.js +127 -13
- package/dist/commands/send.js.map +1 -1
- package/dist/commands/terminal.d.ts +6 -0
- package/dist/commands/terminal.d.ts.map +1 -0
- package/dist/commands/terminal.js +116 -0
- package/dist/commands/terminal.js.map +1 -0
- package/dist/commands/transcript.d.ts +6 -1
- package/dist/commands/transcript.d.ts.map +1 -1
- package/dist/commands/transcript.js +113 -30
- package/dist/commands/transcript.js.map +1 -1
- package/dist/commands/up.d.ts +2 -0
- package/dist/commands/up.d.ts.map +1 -1
- package/dist/commands/up.js +78 -2
- package/dist/commands/up.js.map +1 -1
- package/dist/commands/whoami.d.ts.map +1 -1
- package/dist/commands/whoami.js +11 -0
- package/dist/commands/whoami.js.map +1 -1
- package/dist/commands/workflow-errors.d.ts +23 -0
- package/dist/commands/workflow-errors.d.ts.map +1 -0
- package/dist/commands/workflow-errors.js +100 -0
- package/dist/commands/workflow-errors.js.map +1 -0
- package/dist/commands/workflow-follow.d.ts +71 -0
- package/dist/commands/workflow-follow.d.ts.map +1 -0
- package/dist/commands/workflow-follow.js +259 -0
- package/dist/commands/workflow-follow.js.map +1 -0
- package/dist/commands/workflow-render.d.ts +114 -0
- package/dist/commands/workflow-render.d.ts.map +1 -0
- package/dist/commands/workflow-render.js +223 -0
- package/dist/commands/workflow-render.js.map +1 -0
- package/dist/commands/workflow.d.ts +1 -0
- package/dist/commands/workflow.d.ts.map +1 -1
- package/dist/commands/workflow.js +278 -14
- package/dist/commands/workflow.js.map +1 -1
- package/dist/commands/workspace.js +6 -6
- package/dist/commands/workspace.js.map +1 -1
- package/dist/config-store.d.ts +19 -1
- package/dist/config-store.d.ts.map +1 -1
- package/dist/config-store.js +171 -0
- package/dist/config-store.js.map +1 -1
- package/dist/cross-host-cli-helpers.d.ts +13 -0
- package/dist/cross-host-cli-helpers.d.ts.map +1 -1
- package/dist/cross-host-cli-helpers.js +27 -0
- package/dist/cross-host-cli-helpers.js.map +1 -1
- package/dist/cross-host-executor.d.ts +1 -0
- package/dist/cross-host-executor.d.ts.map +1 -1
- package/dist/cross-host-executor.js +4 -1
- package/dist/cross-host-executor.js.map +1 -1
- package/dist/cross-host-target.d.ts +49 -0
- package/dist/cross-host-target.d.ts.map +1 -0
- package/dist/cross-host-target.js +35 -0
- package/dist/cross-host-target.js.map +1 -0
- package/dist/daemon-lifecycle.d.ts.map +1 -1
- package/dist/daemon-lifecycle.js +4 -1
- package/dist/daemon-lifecycle.js.map +1 -1
- package/dist/host-registry.d.ts +17 -0
- package/dist/host-registry.d.ts.map +1 -1
- package/dist/host-registry.js +64 -2
- package/dist/host-registry.js.map +1 -1
- package/dist/host-selection.d.ts +13 -0
- package/dist/host-selection.d.ts.map +1 -0
- package/dist/host-selection.js +54 -0
- package/dist/host-selection.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/file-transfer.d.ts +89 -0
- package/dist/lib/file-transfer.d.ts.map +1 -0
- package/dist/lib/file-transfer.js +300 -0
- package/dist/lib/file-transfer.js.map +1 -0
- package/dist/lib/hosts/fanout-contract.d.ts +33 -0
- package/dist/lib/hosts/fanout-contract.d.ts.map +1 -0
- package/dist/lib/hosts/fanout-contract.js +23 -0
- package/dist/lib/hosts/fanout-contract.js.map +1 -0
- package/dist/lib/scope/scope-audit.d.ts +9 -1
- package/dist/lib/scope/scope-audit.d.ts.map +1 -1
- package/dist/lib/scope/scope-audit.js +173 -1
- package/dist/lib/scope/scope-audit.js.map +1 -1
- package/dist/lib/scope/templates.d.ts +1 -0
- package/dist/lib/scope/templates.d.ts.map +1 -1
- package/dist/lib/scope/templates.js +9 -0
- package/dist/lib/scope/templates.js.map +1 -1
- package/dist/lib/scope-templates/backlog-deprecation.md +16 -0
- package/dist/lib/scope-templates/backlog-tech-debt.md +16 -0
- package/dist/lib/scope-templates/bug-fix.md +16 -0
- package/dist/lib/scope-templates/implementation-prd.md +33 -0
- package/dist/lib/scope-templates/mission-placeholder.md +1 -1
- package/dist/lib/scope-templates/mission-progress.md +1 -1
- package/dist/lib/scope-templates/mission-release.md +1 -1
- package/dist/lib/scope-templates/placeholder.md +11 -7
- package/dist/lib/scope-templates/proof.md +5 -1
- package/dist/lib/scope-templates/release-feature.md +14 -6
- package/dist/lib/scope-templates/research.md +16 -0
- package/dist/lib/scope-templates/slice-progress.md +1 -1
- package/dist/remote-host-ops.d.ts +1 -0
- package/dist/remote-host-ops.d.ts.map +1 -1
- package/dist/remote-host-ops.js +11 -4
- package/dist/remote-host-ops.js.map +1 -1
- package/dist/session-name.d.ts +23 -0
- package/dist/session-name.d.ts.map +1 -0
- package/dist/session-name.js +61 -0
- package/dist/session-name.js.map +1 -0
- package/dist/version.d.ts +5 -0
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +11 -1
- package/dist/version.js.map +1 -1
- package/package.json +1 -1
- package/ui/dist/assets/index-CFqxa0zW.css +32 -0
- package/ui/dist/assets/index-zrFqS7gL.js +623 -0
- package/ui/dist/index.html +2 -2
- package/ui/dist/assets/index-DYZniQcc.js +0 -597
- package/ui/dist/assets/index-trcb4Yf_.css +0 -32
|
@@ -39,6 +39,7 @@
|
|
|
39
39
|
// closure_target+handed_off_to=<destination>;
|
|
40
40
|
// creates new qitem at destination (4-step canonical)
|
|
41
41
|
import { MissionControlActionLogError, } from "./mission-control-action-log.js";
|
|
42
|
+
import { isHumanSeatSession } from "../human-route-enforcer.js";
|
|
42
43
|
export class MissionControlWriteContractError extends Error {
|
|
43
44
|
code;
|
|
44
45
|
details;
|
|
@@ -71,6 +72,9 @@ export class MissionControlWriteContract {
|
|
|
71
72
|
if (input.verb === "annotate") {
|
|
72
73
|
return this.annotateOnly(input);
|
|
73
74
|
}
|
|
75
|
+
if (input.verb === "resolve") {
|
|
76
|
+
return this.resolveParked(input);
|
|
77
|
+
}
|
|
74
78
|
const source = this.requireMutableQitem(input.qitemId);
|
|
75
79
|
if ((input.verb === "route" || input.verb === "handoff") && !input.destinationSession) {
|
|
76
80
|
throw new MissionControlWriteContractError("destination_required", `verb=${input.verb} requires destinationSession`, { verb: input.verb });
|
|
@@ -104,6 +108,8 @@ export class MissionControlWriteContract {
|
|
|
104
108
|
body: input.body ?? source.body,
|
|
105
109
|
priority: source.priority,
|
|
106
110
|
tier: source.tier ?? undefined,
|
|
111
|
+
summary: source.summary,
|
|
112
|
+
evidenceRef: source.evidenceRef,
|
|
107
113
|
tags: source.tags
|
|
108
114
|
? [...source.tags, `mission-control:${input.verb}`]
|
|
109
115
|
: [`mission-control:${input.verb}`],
|
|
@@ -227,6 +233,120 @@ export class MissionControlWriteContract {
|
|
|
227
233
|
auditedAt: evaluatedAt,
|
|
228
234
|
};
|
|
229
235
|
}
|
|
236
|
+
/**
|
|
237
|
+
* OPR.0.4.4.19 FR-7 — resolve + unpark (all six arch rails encoded):
|
|
238
|
+
*
|
|
239
|
+
* 1. A verb in the mission-control family (this method), NOT an overload
|
|
240
|
+
* of annotate/route.
|
|
241
|
+
* 2. The decision text lands durably + queryably in
|
|
242
|
+
* queue_transitions.transition_note with actor_session = the
|
|
243
|
+
* resolving session (the composer reads it there forever).
|
|
244
|
+
* 3. Unpark = blocked → in-progress via the Phase-A enum-validated
|
|
245
|
+
* update (no state-machine change) + the existing nudge machinery.
|
|
246
|
+
* 4. Resolution routes BACK to the parked owner — the qitem keeps its
|
|
247
|
+
* destination; no new potato owner is ever created here.
|
|
248
|
+
* 5. Enforcement symmetry: park required summary + evidence_ref;
|
|
249
|
+
* resolve requires NON-EMPTY decision text, daemon-enforced.
|
|
250
|
+
* 6. The human acts on the surface/feed card; this is the ONE write
|
|
251
|
+
* path (POST /api/mission-control/action verb=resolve) — the CLI
|
|
252
|
+
* wrapper is a thin client of the same endpoint.
|
|
253
|
+
*
|
|
254
|
+
* NON-CLOSURE by contract: verbToClosure has NO resolve mapping — a
|
|
255
|
+
* resolved qitem is state=in-progress with closure_reason still null.
|
|
256
|
+
* One transaction: transition + decision note + audit row + events.
|
|
257
|
+
* The owner nudge (carrying the decision text) is post-commit
|
|
258
|
+
* best-effort — the unpark is never lost to a transport failure (BR-8).
|
|
259
|
+
*/
|
|
260
|
+
async resolveParked(input) {
|
|
261
|
+
const decision = input.decision?.trim();
|
|
262
|
+
if (!decision) {
|
|
263
|
+
throw new MissionControlWriteContractError("decision_required", "verb=resolve requires non-empty decision text — a park without a recorded decision is exactly what this primitive exists to kill", { verb: input.verb });
|
|
264
|
+
}
|
|
265
|
+
const source = this.queueRepo.getById(input.qitemId);
|
|
266
|
+
if (!source) {
|
|
267
|
+
throw new MissionControlWriteContractError("qitem_not_found", `qitem ${input.qitemId} not found`, { qitemId: input.qitemId });
|
|
268
|
+
}
|
|
269
|
+
if (source.state !== "blocked" || !isHumanSeatSession(source.blockedOn)) {
|
|
270
|
+
throw new MissionControlWriteContractError("qitem_not_leg1_parked", `verb=resolve requires a leg-1 parked qitem (state=blocked with a human-seat blocked_on); ` +
|
|
271
|
+
`qitem ${input.qitemId} is state=${source.state}, blocked_on=${source.blockedOn ?? "null"}. ` +
|
|
272
|
+
`Re-resolving an already-resolved item is a no-op error, not a double transition.`, { qitemId: input.qitemId, state: source.state, blockedOn: source.blockedOn });
|
|
273
|
+
}
|
|
274
|
+
const evaluatedAt = this.now().toISOString();
|
|
275
|
+
const beforeSnapshot = snapshotQitem(source);
|
|
276
|
+
let actionEntry = null;
|
|
277
|
+
const persistedEvents = [];
|
|
278
|
+
const txn = this.db.transaction(() => {
|
|
279
|
+
// Rail 2+3: blocked → in-progress; decision text = transition_note;
|
|
280
|
+
// actor_session = the resolving human/relay session. Emits
|
|
281
|
+
// queue.updated (the P2 refresh-after-action contract). blocked_on is
|
|
282
|
+
// deliberately retained as provenance of whom it was parked on — the
|
|
283
|
+
// attention query keys on state='blocked', so the resolved item drops
|
|
284
|
+
// out of attention regardless.
|
|
285
|
+
const updateResult = this.queueRepo.updateWithinTransaction({
|
|
286
|
+
qitemId: input.qitemId,
|
|
287
|
+
actorSession: input.actorSession,
|
|
288
|
+
state: "in-progress",
|
|
289
|
+
transitionNote: decision,
|
|
290
|
+
});
|
|
291
|
+
persistedEvents.push(updateResult.persistedEvent);
|
|
292
|
+
const resolvedQitem = this.queueRepo.getById(input.qitemId);
|
|
293
|
+
actionEntry = this.actionLog.record({
|
|
294
|
+
actionVerb: "resolve",
|
|
295
|
+
qitemId: input.qitemId,
|
|
296
|
+
actorSession: input.actorSession,
|
|
297
|
+
actedAt: evaluatedAt,
|
|
298
|
+
beforeState: beforeSnapshot,
|
|
299
|
+
afterState: resolvedQitem ? snapshotQitem(resolvedQitem) : null,
|
|
300
|
+
reason: decision,
|
|
301
|
+
auditNotes: input.auditNotes ?? null,
|
|
302
|
+
});
|
|
303
|
+
persistedEvents.push(this.eventBus.persistWithinTransaction({
|
|
304
|
+
type: "mission_control.action_executed",
|
|
305
|
+
actionId: actionEntry.actionId,
|
|
306
|
+
actionVerb: "resolve",
|
|
307
|
+
qitemId: input.qitemId,
|
|
308
|
+
actorSession: input.actorSession,
|
|
309
|
+
}));
|
|
310
|
+
});
|
|
311
|
+
try {
|
|
312
|
+
txn();
|
|
313
|
+
}
|
|
314
|
+
catch (err) {
|
|
315
|
+
if (err instanceof MissionControlActionLogError) {
|
|
316
|
+
throw new MissionControlWriteContractError(err.code, err.message, err.details);
|
|
317
|
+
}
|
|
318
|
+
throw err;
|
|
319
|
+
}
|
|
320
|
+
for (const e of persistedEvents)
|
|
321
|
+
this.eventBus.notifySubscribers(e);
|
|
322
|
+
// Rail 3 + BR-8: best-effort nudge to the PARKED OWNER carrying the
|
|
323
|
+
// decision text, after the commit — nudge outcome recorded via the
|
|
324
|
+
// existing last_nudge_* mechanics; a failed nudge never unwinds the
|
|
325
|
+
// unpark.
|
|
326
|
+
let notifyAttempted = false;
|
|
327
|
+
let notifyResult = null;
|
|
328
|
+
if (input.notify !== false) {
|
|
329
|
+
try {
|
|
330
|
+
await this.queueRepo.maybeNudge(input.qitemId, source.destinationSession, input.notify, input.actorSession, `Decision resolved on ${input.qitemId}: ${decision} — unparked (blocked → in-progress); you still own it. Check your queue.`);
|
|
331
|
+
notifyAttempted = true;
|
|
332
|
+
notifyResult = "attempted-best-effort";
|
|
333
|
+
}
|
|
334
|
+
catch (err) {
|
|
335
|
+
notifyAttempted = true;
|
|
336
|
+
notifyResult = `failed:${err instanceof Error ? err.message : String(err)}`;
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
return {
|
|
340
|
+
actionId: actionEntry.actionId,
|
|
341
|
+
verb: "resolve",
|
|
342
|
+
qitemId: input.qitemId,
|
|
343
|
+
closedQitem: this.queueRepo.getById(input.qitemId),
|
|
344
|
+
createdQitemId: null,
|
|
345
|
+
notifyAttempted,
|
|
346
|
+
notifyResult,
|
|
347
|
+
auditedAt: evaluatedAt,
|
|
348
|
+
};
|
|
349
|
+
}
|
|
230
350
|
requireMutableQitem(qitemId) {
|
|
231
351
|
const source = this.queueRepo.getById(qitemId);
|
|
232
352
|
if (!source) {
|
|
@@ -282,6 +402,11 @@ function verbToClosure(input) {
|
|
|
282
402
|
case "annotate":
|
|
283
403
|
// Should never reach here — annotate is handled by annotateOnly().
|
|
284
404
|
throw new MissionControlWriteContractError("internal_invariant", "annotate verb should have been routed to annotateOnly");
|
|
405
|
+
case "resolve":
|
|
406
|
+
// OPR.0.4.4.19 FR-7 — resolve deliberately has NO closure mapping
|
|
407
|
+
// (a resolved qitem is state=in-progress, closure_reason null).
|
|
408
|
+
// Handled by resolveParked(); reaching here is a contract violation.
|
|
409
|
+
throw new MissionControlWriteContractError("internal_invariant", "resolve verb is non-closure and should have been routed to resolveParked");
|
|
285
410
|
}
|
|
286
411
|
}
|
|
287
412
|
function snapshotQitem(q) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mission-control-write-contract.js","sourceRoot":"","sources":["../../../src/domain/mission-control/mission-control-write-contract.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"mission-control-write-contract.js","sourceRoot":"","sources":["../../../src/domain/mission-control/mission-control-write-contract.ts"],"names":[],"mappings":"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"}
|
|
@@ -36,6 +36,18 @@ export declare function deriveNodeLifecycleState(input: {
|
|
|
36
36
|
* Single source of truth consumed by CLI, UI, and MCP.
|
|
37
37
|
*/
|
|
38
38
|
export declare function getNodeInventory(db: Database.Database, rigId: string): NodeInventoryEntry[];
|
|
39
|
+
/**
|
|
40
|
+
* FS-1 W1.2 — the rig-level N+1 collapse. Builds inventory for ALL rigs in a
|
|
41
|
+
* bounded, rig-count-INDEPENDENT set of queries: 3 batched setup reads
|
|
42
|
+
* (snapshots / workspaces / identity verdicts) + 1 all-rigs node SELECT, grouped
|
|
43
|
+
* by rig_id. Every entry is built through the SAME `buildInventoryEntry` that the
|
|
44
|
+
* per-rig `getNodeInventory` uses, so `getNodeInventoryForAllRigs(db).get(rigId)`
|
|
45
|
+
* is byte-identical to `getNodeInventory(db, rigId)` — the collapse changes only
|
|
46
|
+
* HOW the context + rows are fetched (batched vs per-rig), never how an entry is
|
|
47
|
+
* derived. Per-node reads inside `buildInventoryEntry` (`deriveRestoreOutcome`
|
|
48
|
+
* etc.) remain per-node and ride the 047 index — NOT the rig-level N+1 removed here.
|
|
49
|
+
*/
|
|
50
|
+
export declare function getNodeInventoryForAllRigs(db: Database.Database): Map<string, NodeInventoryEntry[]>;
|
|
39
51
|
/**
|
|
40
52
|
* Get detailed node information including startup files, resources, and events.
|
|
41
53
|
* The adapter dependency is optional — when provided, uses live listInstalled;
|
|
@@ -76,6 +88,12 @@ export declare function attachTerminalActivityAndWork(entries: NodeInventoryEntr
|
|
|
76
88
|
db: Database.Database;
|
|
77
89
|
seatActivity?: SeatActivityService;
|
|
78
90
|
}): NodeInventoryEntry[];
|
|
91
|
+
/** EXPORTED (OPR.0.4.6.FAC1): the derived canonical coordinate
|
|
92
|
+
* `{pod}-{member}@{rig}` for an inventory entry — the binding layer's
|
|
93
|
+
* ONE string rule (tiebreak key AND recorded destination) reuses
|
|
94
|
+
* exactly this dual-key derivation, never a parallel one. */
|
|
95
|
+
export declare function deriveCanonicalFromEntry(entry: NodeInventoryEntry): string | null;
|
|
96
|
+
export declare function readPendingWorkBySession(db: Database.Database): Map<string, number>;
|
|
79
97
|
export declare function attachAgentActivity(entries: NodeInventoryEntry[], deps: {
|
|
80
98
|
tmuxAdapter: TmuxAdapter;
|
|
81
99
|
activityStore?: AgentActivityStore;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node-inventory.d.ts","sourceRoot":"","sources":["../../src/domain/node-inventory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,EAAE,kBAAkB,EAAE,eAAe,EAAyD,kBAAkB,
|
|
1
|
+
{"version":3,"file":"node-inventory.d.ts","sourceRoot":"","sources":["../../src/domain/node-inventory.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { identityVerdictDownranksRunning } from "./types.js";
|
|
2
2
|
import { SeatIdentityStore } from "./seat-identity-store.js";
|
|
3
|
-
import {
|
|
3
|
+
import { buildOrientedMap } from "./startup-proof.js";
|
|
4
4
|
import { probeSessionActivity } from "./session-transport.js";
|
|
5
|
-
import { findLatestUsableSnapshot } from "./rig-repository.js";
|
|
5
|
+
import { findLatestUsableSnapshot, findLatestUsableSnapshotsForAllRigs } from "./rig-repository.js";
|
|
6
6
|
import { resolveNodeWorkspace } from "./workspace/workspace-resolver.js";
|
|
7
7
|
import { deriveCanonicalSessionName } from "./session-name.js";
|
|
8
8
|
import { buildNativeResumeCommand, buildCodexResumeCore } from "./native-resume-probe.js";
|
|
@@ -142,32 +142,47 @@ function deriveContinuityOutcome(row, restoreOutcome) {
|
|
|
142
142
|
return null;
|
|
143
143
|
return restoreOutcome;
|
|
144
144
|
}
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
145
|
+
// FS-1 W1.3 S1 — hoist restore-outcome derivation to ONCE-PER-RIG.
|
|
146
|
+
// Prior shape: deriveRestoreOutcome(db, rigId, nodeId) fetched + JSON-parsed the
|
|
147
|
+
// rig's ENTIRE restore-event set once PER NODE inside buildInventoryEntry (K
|
|
148
|
+
// nodes x E events per rig per poll = the dominant W3 residual). This builds a
|
|
149
|
+
// nodeId->outcome map in ONE seq-DESC pass and buildInventoryEntry does an O(1)
|
|
150
|
+
// lookup.
|
|
151
|
+
// OPR.0.3.4.11 + 0.4.0.16: per-node-latest across restore.completed,
|
|
152
|
+
// restore.subset_completed, AND restore.outcome_reconciled. reconciled has a
|
|
153
|
+
// different shape (top-level nodeId/to, not result.nodes[]).
|
|
154
|
+
// BYTE-IDENTICAL BY CONSTRUCTION: the prior per-node reader returned the FIRST
|
|
155
|
+
// event in seq-DESC order that referenced the node. This single seq-DESC pass
|
|
156
|
+
// sets a node's outcome ONLY IF ABSENT — so the first (highest-seq) event
|
|
157
|
+
// referencing a node wins, reproducing exactly that (incl.
|
|
158
|
+
// newer-reconcile-overrides-older-failure). rigId given -> WHERE rig_id=? (the
|
|
159
|
+
// prior single-rig filter); rigId omitted -> all rigs in one pass (a nodeId is
|
|
160
|
+
// referenced only by its own rig's events, so the per-node value is identical).
|
|
161
|
+
// [GUARD AT CODE REVIEW: the only-if-absent set is the one load-bearing
|
|
162
|
+
// semantics cell — it is what preserves first/newest-wins.]
|
|
163
|
+
function buildRestoreOutcomeMap(db, rigId) {
|
|
164
|
+
const stmt = db.prepare(`SELECT type, payload, seq FROM events WHERE type IN ('restore.completed', 'restore.subset_completed', 'restore.outcome_reconciled')${rigId ? " AND rig_id = ?" : ""} ORDER BY seq DESC`);
|
|
165
|
+
const rows = (rigId ? stmt.all(rigId) : stmt.all());
|
|
166
|
+
const map = new Map();
|
|
152
167
|
for (const row of rows) {
|
|
153
168
|
try {
|
|
154
169
|
if (row.type === "restore.outcome_reconciled") {
|
|
155
170
|
const event = JSON.parse(row.payload);
|
|
156
|
-
if (event.nodeId
|
|
157
|
-
|
|
158
|
-
|
|
171
|
+
if (!map.has(event.nodeId))
|
|
172
|
+
map.set(event.nodeId, mapStatus(event.to));
|
|
173
|
+
continue;
|
|
159
174
|
}
|
|
160
175
|
const event = JSON.parse(row.payload);
|
|
161
|
-
const nodeResult
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
176
|
+
for (const nodeResult of event.result.nodes) {
|
|
177
|
+
if (!map.has(nodeResult.nodeId))
|
|
178
|
+
map.set(nodeResult.nodeId, mapStatus(nodeResult.status));
|
|
179
|
+
}
|
|
165
180
|
}
|
|
166
181
|
catch {
|
|
167
182
|
continue;
|
|
168
183
|
}
|
|
169
184
|
}
|
|
170
|
-
return
|
|
185
|
+
return map;
|
|
171
186
|
}
|
|
172
187
|
function mapStatus(status) {
|
|
173
188
|
if (status === "resumed")
|
|
@@ -288,6 +303,27 @@ export function getNodeInventory(db, rigId) {
|
|
|
288
303
|
// per projection (cheap indexed read, defensive to a missing table). Gates
|
|
289
304
|
// the running/active green derivations below.
|
|
290
305
|
const identityVerdicts = new SeatIdentityStore(db).getForRig(rigId);
|
|
306
|
+
// FS-1 W1.3 S1/S2 — the per-node restore-outcome + oriented reads built ONCE
|
|
307
|
+
// for the rig (was a query per node inside the rows.map). rig-scoped restore
|
|
308
|
+
// map = the prior WHERE rig_id=? filter; oriented map is node-scoped/global.
|
|
309
|
+
const restoreOutcomes = buildRestoreOutcomeMap(db, rigId);
|
|
310
|
+
const orienteds = buildOrientedMap(db);
|
|
311
|
+
const rows = queryInventoryRows(db, rigId);
|
|
312
|
+
return rows.map((row) => buildInventoryEntry(db, row, { usableSnapshot, workspaceSpec, identityVerdicts, restoreOutcomes, orienteds }));
|
|
313
|
+
}
|
|
314
|
+
/**
|
|
315
|
+
* FS-1 W1.2 — the shared inventory-row query. Extracted verbatim from the prior
|
|
316
|
+
* inline `getNodeInventory` SELECT so the single-rig and all-rigs paths run the
|
|
317
|
+
* IDENTICAL query.
|
|
318
|
+
* - `rigId` given → one rig (`WHERE n.rig_id = ?`, `ORDER BY n.created_at`) —
|
|
319
|
+
* byte-identical to the prior per-rig read.
|
|
320
|
+
* - `rigId` omitted → ALL rigs in one pass (no WHERE; `ORDER BY n.rig_id,
|
|
321
|
+
* n.created_at` so JS grouping preserves each rig's `created_at` order,
|
|
322
|
+
* matching the per-rig ordering exactly).
|
|
323
|
+
* The latest-session subquery (`s2.node_id = n.id ORDER BY id DESC LIMIT 1`)
|
|
324
|
+
* rides the W1.1 index (051, idx_sessions_node_created_id).
|
|
325
|
+
*/
|
|
326
|
+
function queryInventoryRows(db, rigId) {
|
|
291
327
|
// Join nodes with newest session (max ULID = max session.id string comparison)
|
|
292
328
|
// and the rig name
|
|
293
329
|
const hasCodexConfigProfile = db.prepare("PRAGMA table_info(nodes)").all()
|
|
@@ -295,7 +331,7 @@ export function getNodeInventory(db, rigId) {
|
|
|
295
331
|
const codexConfigProfileSelect = hasCodexConfigProfile
|
|
296
332
|
? "n.codex_config_profile"
|
|
297
333
|
: "NULL";
|
|
298
|
-
const
|
|
334
|
+
const stmt = db.prepare(`
|
|
299
335
|
SELECT
|
|
300
336
|
n.id as node_id,
|
|
301
337
|
n.rig_id,
|
|
@@ -303,6 +339,7 @@ export function getNodeInventory(db, rigId) {
|
|
|
303
339
|
n.logical_id,
|
|
304
340
|
n.pod_id,
|
|
305
341
|
p.namespace as pod_namespace,
|
|
342
|
+
n.role,
|
|
306
343
|
n.runtime,
|
|
307
344
|
n.model,
|
|
308
345
|
${codexConfigProfileSelect} as codex_config_profile,
|
|
@@ -332,82 +369,152 @@ export function getNodeInventory(db, rigId) {
|
|
|
332
369
|
LEFT JOIN sessions s ON s.node_id = n.id
|
|
333
370
|
AND s.id = (SELECT s2.id FROM sessions s2 WHERE s2.node_id = n.id ORDER BY s2.id DESC LIMIT 1)
|
|
334
371
|
LEFT JOIN bindings b ON b.node_id = n.id
|
|
335
|
-
WHERE n.rig_id = ?
|
|
336
|
-
ORDER BY n.created_at
|
|
337
|
-
`)
|
|
338
|
-
return
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
podNamespace: row.pod_namespace,
|
|
365
|
-
canonicalSessionName: row.session_name,
|
|
366
|
-
attachmentType: row.binding_attachment_type ?? null,
|
|
367
|
-
nodeKind: deriveNodeKind(row.runtime),
|
|
368
|
-
runtime: row.runtime,
|
|
369
|
-
sessionStatus: row.session_status,
|
|
370
|
-
startupStatus: row.startup_status,
|
|
371
|
-
restoreOutcome,
|
|
372
|
-
oriented: deriveOriented(db, row.node_id),
|
|
373
|
-
lifecycleState,
|
|
374
|
-
occupantLifecycle: deriveOccupantLifecycle(row, identityVerdict?.verdict ?? null),
|
|
375
|
-
continuityOutcome: deriveContinuityOutcome(row, restoreOutcome),
|
|
376
|
-
handoverResult: row.handover_result ?? null,
|
|
377
|
-
previousOccupant: row.previous_occupant,
|
|
378
|
-
handoverAt: row.handover_at,
|
|
379
|
-
tmuxAttachCommand: row.binding_attachment_type === "tmux" && row.session_name ? `tmux attach -t ${row.session_name}` : null,
|
|
380
|
-
resumeCommand: computeResumeCommand(row.runtime, row.resume_token, row.codex_config_profile),
|
|
381
|
-
// OPR.0.4.0.26: recoveryGuidance is NOT inlined per node in the LIST
|
|
382
|
-
// payload. It duplicated ~47KB of templated prose across all nodes and
|
|
383
|
-
// no node-list consumer reads it. The full guidance is recomputed on
|
|
384
|
-
// the single-node detail path (getNodeDetail / GET
|
|
385
|
-
// /api/rigs/:rigId/nodes/:logicalId) — relocation, not loss.
|
|
386
|
-
recoveryGuidance: null,
|
|
387
|
-
latestError: row.startup_status === "ready" ? null : getLatestError(db, rigId, row.node_id),
|
|
388
|
-
// Extended fields
|
|
389
|
-
model: row.model,
|
|
390
|
-
agentRef: row.agent_ref,
|
|
391
|
-
profile: row.profile,
|
|
392
|
-
codexConfigProfile: row.codex_config_profile,
|
|
393
|
-
resolvedSpecName: row.resolved_spec_name,
|
|
394
|
-
resolvedSpecVersion: row.resolved_spec_version,
|
|
395
|
-
resolvedSpecHash: row.resolved_spec_hash,
|
|
396
|
-
cwd: row.cwd,
|
|
397
|
-
restorePolicy: row.restore_policy,
|
|
398
|
-
resumeType: row.resume_type,
|
|
399
|
-
resumeToken: row.resume_token,
|
|
400
|
-
startupCompletedAt: row.startup_completed_at,
|
|
401
|
-
// PL-007 Workspace Primitive — per-node workspace summary derived
|
|
402
|
-
// from cwd against the rig's typed workspace block. null when the
|
|
403
|
-
// rig has no workspace declaration.
|
|
404
|
-
workspace: resolveNodeWorkspace({ spec: workspaceSpec, cwd: row.cwd }),
|
|
405
|
-
// OPR.0.4.3.19 — the liveness identity verdict (third axis). null when
|
|
406
|
-
// never observed; carries evidence on mismatch/missing.
|
|
407
|
-
identityVerdict,
|
|
408
|
-
heldReason: deriveHeldReason(db, rigId, row.node_id, row.session_status),
|
|
409
|
-
};
|
|
372
|
+
${rigId ? "WHERE n.rig_id = ?" : ""}
|
|
373
|
+
ORDER BY ${rigId ? "n.created_at" : "n.rig_id, n.created_at"}
|
|
374
|
+
`);
|
|
375
|
+
return (rigId ? stmt.all(rigId) : stmt.all());
|
|
376
|
+
}
|
|
377
|
+
function buildInventoryEntry(db, row, ctx) {
|
|
378
|
+
const { usableSnapshot, workspaceSpec, identityVerdicts, restoreOutcomes, orienteds } = ctx;
|
|
379
|
+
// FS-1 W1.3 S1 — O(1) lookup into the once-per-rig restore-outcome map
|
|
380
|
+
// (byte-identical to the prior per-node deriveRestoreOutcome; "n-a" when a node
|
|
381
|
+
// is referenced by no restore event, matching the prior fall-through).
|
|
382
|
+
const restoreOutcome = restoreOutcomes.get(row.node_id) ?? "n-a";
|
|
383
|
+
// OPR.0.4.3.19 rev1-r2 B1 — a durable verdict is keyed only by node_id, so
|
|
384
|
+
// after a rebind/relaunch (same node, NEW session + NEW pane) a stale
|
|
385
|
+
// `verified` verdict for the OLD pane would otherwise be served for the new
|
|
386
|
+
// pane until the next 5s reconcile tick, suppressing down-rank and rendering
|
|
387
|
+
// a fresh squat/orphan false-green. Make applicability LOAD-BEARING at read
|
|
388
|
+
// time: a stored verdict applies ONLY when it was computed against the
|
|
389
|
+
// current binding (its sessionName === the latest session AND its
|
|
390
|
+
// registeredPane === the current binding pane). Otherwise treat it as ABSENT
|
|
391
|
+
// (null) — a STALE verdict becomes fail-open (never down-ranks a running
|
|
392
|
+
// seat), it does NOT itself down-rank. Only a MATCHING mismatch/pane_missing
|
|
393
|
+
// verdict down-ranks.
|
|
394
|
+
const identityVerdict = applicableVerdict(identityVerdicts.get(row.node_id) ?? null, row);
|
|
395
|
+
const lifecycleState = deriveNodeLifecycleState({
|
|
396
|
+
sessionStatus: row.session_status,
|
|
397
|
+
restoreOutcome,
|
|
398
|
+
nodeId: row.node_id,
|
|
399
|
+
usableSnapshot,
|
|
400
|
+
identityVerdict: identityVerdict?.verdict ?? null,
|
|
410
401
|
});
|
|
402
|
+
return {
|
|
403
|
+
rigId: row.rig_id,
|
|
404
|
+
rigName: row.rig_name,
|
|
405
|
+
logicalId: row.logical_id,
|
|
406
|
+
podId: row.pod_id,
|
|
407
|
+
podNamespace: row.pod_namespace,
|
|
408
|
+
// OPR.0.4.6.FAC1: the seat-side role dimension (nodes.role,
|
|
409
|
+
// declared in the pod-member spec) — the workflow binding layer's
|
|
410
|
+
// candidate filter. null = role-less (never role-resolved).
|
|
411
|
+
role: row.role,
|
|
412
|
+
canonicalSessionName: row.session_name,
|
|
413
|
+
attachmentType: row.binding_attachment_type ?? null,
|
|
414
|
+
nodeKind: deriveNodeKind(row.runtime),
|
|
415
|
+
runtime: row.runtime,
|
|
416
|
+
sessionStatus: row.session_status,
|
|
417
|
+
startupStatus: row.startup_status,
|
|
418
|
+
restoreOutcome,
|
|
419
|
+
// FS-1 W1.3 S2 — O(1) lookup into the fleet-batched oriented map
|
|
420
|
+
// (byte-identical to the prior per-node deriveOriented; "n-a" when a node has
|
|
421
|
+
// no proof events, matching deriveOriented's no-challenge branch).
|
|
422
|
+
oriented: orienteds.get(row.node_id) ?? "n-a",
|
|
423
|
+
lifecycleState,
|
|
424
|
+
occupantLifecycle: deriveOccupantLifecycle(row, identityVerdict?.verdict ?? null),
|
|
425
|
+
continuityOutcome: deriveContinuityOutcome(row, restoreOutcome),
|
|
426
|
+
handoverResult: row.handover_result ?? null,
|
|
427
|
+
previousOccupant: row.previous_occupant,
|
|
428
|
+
handoverAt: row.handover_at,
|
|
429
|
+
tmuxAttachCommand: row.binding_attachment_type === "tmux" && row.session_name ? `tmux attach -t ${row.session_name}` : null,
|
|
430
|
+
resumeCommand: computeResumeCommand(row.runtime, row.resume_token, row.codex_config_profile),
|
|
431
|
+
// OPR.0.4.0.26: recoveryGuidance is NOT inlined per node in the LIST
|
|
432
|
+
// payload. It duplicated ~47KB of templated prose across all nodes and
|
|
433
|
+
// no node-list consumer reads it. The full guidance is recomputed on
|
|
434
|
+
// the single-node detail path (getNodeDetail / GET
|
|
435
|
+
// /api/rigs/:rigId/nodes/:logicalId) — relocation, not loss.
|
|
436
|
+
recoveryGuidance: null,
|
|
437
|
+
latestError: row.startup_status === "ready" ? null : getLatestError(db, row.rig_id, row.node_id),
|
|
438
|
+
// Extended fields
|
|
439
|
+
model: row.model,
|
|
440
|
+
agentRef: row.agent_ref,
|
|
441
|
+
profile: row.profile,
|
|
442
|
+
codexConfigProfile: row.codex_config_profile,
|
|
443
|
+
resolvedSpecName: row.resolved_spec_name,
|
|
444
|
+
resolvedSpecVersion: row.resolved_spec_version,
|
|
445
|
+
resolvedSpecHash: row.resolved_spec_hash,
|
|
446
|
+
cwd: row.cwd,
|
|
447
|
+
restorePolicy: row.restore_policy,
|
|
448
|
+
resumeType: row.resume_type,
|
|
449
|
+
resumeToken: row.resume_token,
|
|
450
|
+
startupCompletedAt: row.startup_completed_at,
|
|
451
|
+
// PL-007 Workspace Primitive — per-node workspace summary derived
|
|
452
|
+
// from cwd against the rig's typed workspace block. null when the
|
|
453
|
+
// rig has no workspace declaration.
|
|
454
|
+
workspace: resolveNodeWorkspace({ spec: workspaceSpec, cwd: row.cwd }),
|
|
455
|
+
// OPR.0.4.3.19 — the liveness identity verdict (third axis). null when
|
|
456
|
+
// never observed; carries evidence on mismatch/missing.
|
|
457
|
+
identityVerdict,
|
|
458
|
+
heldReason: deriveHeldReason(db, row.rig_id, row.node_id, row.session_status),
|
|
459
|
+
};
|
|
460
|
+
}
|
|
461
|
+
/** FS-1 W1.2 — all-rigs batched form of `readRigWorkspaceJson`: one query,
|
|
462
|
+
* `rigId → WorkspaceSpec`. Rigs with no/malformed workspace are absent (callers
|
|
463
|
+
* default to null — byte-identical to `readRigWorkspaceJson`'s null return). */
|
|
464
|
+
function readAllRigWorkspaceJson(db) {
|
|
465
|
+
const out = new Map();
|
|
466
|
+
try {
|
|
467
|
+
const rows = db.prepare("SELECT id, workspace_json FROM rigs").all();
|
|
468
|
+
for (const row of rows) {
|
|
469
|
+
if (!row.workspace_json)
|
|
470
|
+
continue;
|
|
471
|
+
try {
|
|
472
|
+
out.set(row.id, JSON.parse(row.workspace_json));
|
|
473
|
+
}
|
|
474
|
+
catch { /* malformed → absent → caller null (matches per-rig) */ }
|
|
475
|
+
}
|
|
476
|
+
}
|
|
477
|
+
catch { /* column/table absent → empty → caller null (matches per-rig defensive path) */ }
|
|
478
|
+
return out;
|
|
479
|
+
}
|
|
480
|
+
/**
|
|
481
|
+
* FS-1 W1.2 — the rig-level N+1 collapse. Builds inventory for ALL rigs in a
|
|
482
|
+
* bounded, rig-count-INDEPENDENT set of queries: 3 batched setup reads
|
|
483
|
+
* (snapshots / workspaces / identity verdicts) + 1 all-rigs node SELECT, grouped
|
|
484
|
+
* by rig_id. Every entry is built through the SAME `buildInventoryEntry` that the
|
|
485
|
+
* per-rig `getNodeInventory` uses, so `getNodeInventoryForAllRigs(db).get(rigId)`
|
|
486
|
+
* is byte-identical to `getNodeInventory(db, rigId)` — the collapse changes only
|
|
487
|
+
* HOW the context + rows are fetched (batched vs per-rig), never how an entry is
|
|
488
|
+
* derived. Per-node reads inside `buildInventoryEntry` (`deriveRestoreOutcome`
|
|
489
|
+
* etc.) remain per-node and ride the 047 index — NOT the rig-level N+1 removed here.
|
|
490
|
+
*/
|
|
491
|
+
export function getNodeInventoryForAllRigs(db) {
|
|
492
|
+
const snapshotByRig = findLatestUsableSnapshotsForAllRigs(db);
|
|
493
|
+
const workspaceByRig = readAllRigWorkspaceJson(db);
|
|
494
|
+
const verdictsByRig = new SeatIdentityStore(db).getForAllRigs();
|
|
495
|
+
// FS-1 W1.3 S1/S2 — the per-node reads built ONCE for ALL rigs (O(1) queries,
|
|
496
|
+
// not O(nodes)). Restore map unscoped: a nodeId is referenced only by its own
|
|
497
|
+
// rig's restore events, so each node's value equals the single-rig path.
|
|
498
|
+
const restoreOutcomes = buildRestoreOutcomeMap(db);
|
|
499
|
+
const orienteds = buildOrientedMap(db);
|
|
500
|
+
const rows = queryInventoryRows(db);
|
|
501
|
+
const out = new Map();
|
|
502
|
+
for (const row of rows) {
|
|
503
|
+
const entry = buildInventoryEntry(db, row, {
|
|
504
|
+
usableSnapshot: snapshotByRig.get(row.rig_id) ?? null,
|
|
505
|
+
workspaceSpec: workspaceByRig.get(row.rig_id) ?? null,
|
|
506
|
+
identityVerdicts: verdictsByRig.get(row.rig_id) ?? new Map(),
|
|
507
|
+
restoreOutcomes,
|
|
508
|
+
orienteds,
|
|
509
|
+
});
|
|
510
|
+
let list = out.get(row.rig_id);
|
|
511
|
+
if (!list) {
|
|
512
|
+
list = [];
|
|
513
|
+
out.set(row.rig_id, list);
|
|
514
|
+
}
|
|
515
|
+
list.push(entry);
|
|
516
|
+
}
|
|
517
|
+
return out;
|
|
411
518
|
}
|
|
412
519
|
/** PL-007 — read the rig's typed workspace block from `rigs.workspace_json`
|
|
413
520
|
* defensively. Migration 038 may not yet be applied in older test fixtures
|
|
@@ -689,7 +796,11 @@ function countPendingForEntry(entry, pendingByDest) {
|
|
|
689
796
|
}
|
|
690
797
|
return count;
|
|
691
798
|
}
|
|
692
|
-
|
|
799
|
+
/** EXPORTED (OPR.0.4.6.FAC1): the derived canonical coordinate
|
|
800
|
+
* `{pod}-{member}@{rig}` for an inventory entry — the binding layer's
|
|
801
|
+
* ONE string rule (tiebreak key AND recorded destination) reuses
|
|
802
|
+
* exactly this dual-key derivation, never a parallel one. */
|
|
803
|
+
export function deriveCanonicalFromEntry(entry) {
|
|
693
804
|
if (!entry.rigName || !entry.logicalId)
|
|
694
805
|
return null;
|
|
695
806
|
const dotIdx = entry.logicalId.indexOf(".");
|
|
@@ -699,7 +810,7 @@ function deriveCanonicalFromEntry(entry) {
|
|
|
699
810
|
const member = entry.logicalId.slice(dotIdx + 1);
|
|
700
811
|
return deriveCanonicalSessionName(pod, member, entry.rigName);
|
|
701
812
|
}
|
|
702
|
-
function readPendingWorkBySession(db) {
|
|
813
|
+
export function readPendingWorkBySession(db) {
|
|
703
814
|
const rows = db.prepare(`
|
|
704
815
|
SELECT destination_session, COUNT(*) as c
|
|
705
816
|
FROM queue_items
|