@openrig/cli 0.4.4 → 0.4.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/daemon/assets/guidance/CULTURE-default.md +19 -0
- package/daemon/assets/guidance/openrig-start.md +20 -5
- package/daemon/assets/plugins/openrig-core/README.md +1 -1
- package/daemon/assets/plugins/openrig-core/skills/claude-compaction-restore/SKILL.md +9 -6
- package/daemon/assets/plugins/openrig-core/skills/claude-compaction-restore/scripts/precompact-hook.mjs +11 -72
- package/daemon/assets/plugins/openrig-core/skills/forming-an-openrig-mental-model/SKILL.md +34 -22
- package/daemon/assets/plugins/openrig-core/skills/messaging-the-human/SKILL.md +108 -0
- package/daemon/assets/plugins/openrig-core/skills/mission-slice-sop/SKILL.md +11 -16
- package/daemon/assets/plugins/openrig-core/skills/openrig-skills/SKILL.md +95 -0
- package/daemon/assets/plugins/openrig-core/skills/openrig-user/SKILL.md +819 -101
- package/daemon/assets/plugins/openrig-core/skills/queue-handoff/SKILL.md +26 -9
- package/daemon/assets/plugins/openrig-core/skills/seat-continuity-and-handover/SKILL.md +11 -9
- package/daemon/assets/plugins/openrig-core/skills/session-compaction-and-restore/SKILL.md +162 -0
- package/daemon/assets/plugins/openrig-core/skills/software-for-agents/SKILL.md +165 -0
- package/daemon/dist/adapters/cmux-transport.d.ts.map +1 -1
- package/daemon/dist/adapters/cmux-transport.js +8 -1
- package/daemon/dist/adapters/cmux-transport.js.map +1 -1
- package/daemon/dist/adapters/cmux.d.ts +9 -0
- package/daemon/dist/adapters/cmux.d.ts.map +1 -1
- package/daemon/dist/adapters/cmux.js +21 -0
- package/daemon/dist/adapters/cmux.js.map +1 -1
- package/daemon/dist/adapters/codex-runtime-adapter.d.ts +3 -0
- package/daemon/dist/adapters/codex-runtime-adapter.d.ts.map +1 -1
- package/daemon/dist/adapters/codex-runtime-adapter.js +32 -12
- package/daemon/dist/adapters/codex-runtime-adapter.js.map +1 -1
- package/daemon/dist/adapters/pi-resume.d.ts +32 -0
- package/daemon/dist/adapters/pi-resume.d.ts.map +1 -0
- package/daemon/dist/adapters/pi-resume.js +125 -0
- package/daemon/dist/adapters/pi-resume.js.map +1 -0
- package/daemon/dist/adapters/pi-runner-protocol.d.ts +88 -0
- package/daemon/dist/adapters/pi-runner-protocol.d.ts.map +1 -0
- package/daemon/dist/adapters/pi-runner-protocol.js +153 -0
- package/daemon/dist/adapters/pi-runner-protocol.js.map +1 -0
- package/daemon/dist/adapters/pi-runner.d.ts +99 -0
- package/daemon/dist/adapters/pi-runner.d.ts.map +1 -0
- package/daemon/dist/adapters/pi-runner.js +519 -0
- package/daemon/dist/adapters/pi-runner.js.map +1 -0
- package/daemon/dist/adapters/pi-runtime-adapter.d.ts +61 -0
- package/daemon/dist/adapters/pi-runtime-adapter.d.ts.map +1 -0
- package/daemon/dist/adapters/pi-runtime-adapter.js +356 -0
- package/daemon/dist/adapters/pi-runtime-adapter.js.map +1 -0
- package/daemon/dist/adapters/tmux.d.ts +22 -1
- package/daemon/dist/adapters/tmux.d.ts.map +1 -1
- package/daemon/dist/adapters/tmux.js +40 -1
- package/daemon/dist/adapters/tmux.js.map +1 -1
- package/daemon/dist/build-info.js +3 -3
- package/daemon/dist/builtins/workflow-specs/branched-remediation.yaml +31 -0
- package/daemon/dist/builtins/workflow-specs/factory-rsi.yaml +152 -0
- package/daemon/dist/builtins/workflow-specs/gated-release.yaml +26 -0
- package/daemon/dist/builtins/workflow-specs/linear-build.yaml +21 -0
- package/daemon/dist/db/migrations/049_workflow_instance_version.d.ts +20 -0
- package/daemon/dist/db/migrations/049_workflow_instance_version.d.ts.map +1 -0
- package/daemon/dist/db/migrations/049_workflow_instance_version.js +24 -0
- package/daemon/dist/db/migrations/049_workflow_instance_version.js.map +1 -0
- package/daemon/dist/db/migrations/050_workflow_spec_json.d.ts +22 -0
- package/daemon/dist/db/migrations/050_workflow_spec_json.d.ts.map +1 -0
- package/daemon/dist/db/migrations/050_workflow_spec_json.js +26 -0
- package/daemon/dist/db/migrations/050_workflow_spec_json.js.map +1 -0
- package/daemon/dist/db/migrations/051_workflow_resume.d.ts +22 -0
- package/daemon/dist/db/migrations/051_workflow_resume.d.ts.map +1 -0
- package/daemon/dist/db/migrations/051_workflow_resume.js +27 -0
- package/daemon/dist/db/migrations/051_workflow_resume.js.map +1 -0
- package/daemon/dist/db/migrations/052_workflow_instance_bound_rig.d.ts +26 -0
- package/daemon/dist/db/migrations/052_workflow_instance_bound_rig.d.ts.map +1 -0
- package/daemon/dist/db/migrations/052_workflow_instance_bound_rig.js +30 -0
- package/daemon/dist/db/migrations/052_workflow_instance_bound_rig.js.map +1 -0
- package/daemon/dist/db/migrations/053_sessions_node_id_index.d.ts +48 -0
- package/daemon/dist/db/migrations/053_sessions_node_id_index.d.ts.map +1 -0
- package/daemon/dist/db/migrations/053_sessions_node_id_index.js +53 -0
- package/daemon/dist/db/migrations/053_sessions_node_id_index.js.map +1 -0
- package/daemon/dist/db/migrations/054_queue_transitions_archive.d.ts +34 -0
- package/daemon/dist/db/migrations/054_queue_transitions_archive.d.ts.map +1 -0
- package/daemon/dist/db/migrations/054_queue_transitions_archive.js +49 -0
- package/daemon/dist/db/migrations/054_queue_transitions_archive.js.map +1 -0
- package/daemon/dist/domain/claim-service.d.ts +11 -0
- package/daemon/dist/domain/claim-service.d.ts.map +1 -1
- package/daemon/dist/domain/claim-service.js +3 -1
- package/daemon/dist/domain/claim-service.js.map +1 -1
- package/daemon/dist/domain/claude-compaction-enforcer.d.ts +3 -0
- package/daemon/dist/domain/claude-compaction-enforcer.d.ts.map +1 -1
- package/daemon/dist/domain/claude-compaction-enforcer.js +19 -3
- package/daemon/dist/domain/claude-compaction-enforcer.js.map +1 -1
- package/daemon/dist/domain/cmux-layout-service.d.ts +36 -0
- package/daemon/dist/domain/cmux-layout-service.d.ts.map +1 -1
- package/daemon/dist/domain/cmux-layout-service.js +100 -28
- package/daemon/dist/domain/cmux-layout-service.js.map +1 -1
- package/daemon/dist/domain/context-monitor.d.ts +2 -0
- package/daemon/dist/domain/context-monitor.d.ts.map +1 -1
- package/daemon/dist/domain/context-monitor.js +14 -0
- package/daemon/dist/domain/context-monitor.js.map +1 -1
- package/daemon/dist/domain/discovery-types.d.ts +1 -1
- package/daemon/dist/domain/discovery-types.d.ts.map +1 -1
- package/daemon/dist/domain/feed/attention-aggregator.js +1 -1
- package/daemon/dist/domain/feed/attention-aggregator.js.map +1 -1
- package/daemon/dist/domain/hosts/hosts-registry-reader.d.ts +1 -0
- package/daemon/dist/domain/hosts/hosts-registry-reader.d.ts.map +1 -1
- package/daemon/dist/domain/hosts/hosts-registry-reader.js +31 -10
- package/daemon/dist/domain/hosts/hosts-registry-reader.js.map +1 -1
- package/daemon/dist/domain/hosts/hosts-registry-writer.d.ts +11 -0
- package/daemon/dist/domain/hosts/hosts-registry-writer.d.ts.map +1 -0
- package/daemon/dist/domain/hosts/hosts-registry-writer.js +55 -0
- package/daemon/dist/domain/hosts/hosts-registry-writer.js.map +1 -0
- package/daemon/dist/domain/hosts/read-through.d.ts +28 -0
- package/daemon/dist/domain/hosts/read-through.d.ts.map +1 -0
- package/daemon/dist/domain/hosts/read-through.js +139 -0
- package/daemon/dist/domain/hosts/read-through.js.map +1 -0
- package/daemon/dist/domain/hosts/remote-daemon-http.d.ts +21 -0
- package/daemon/dist/domain/hosts/remote-daemon-http.d.ts.map +1 -1
- package/daemon/dist/domain/hosts/remote-daemon-http.js +56 -4
- package/daemon/dist/domain/hosts/remote-daemon-http.js.map +1 -1
- package/daemon/dist/domain/node-inventory.d.ts +10 -1
- package/daemon/dist/domain/node-inventory.d.ts.map +1 -1
- package/daemon/dist/domain/node-inventory.js +250 -97
- package/daemon/dist/domain/node-inventory.js.map +1 -1
- package/daemon/dist/domain/node-launcher.d.ts +11 -0
- package/daemon/dist/domain/node-launcher.d.ts.map +1 -1
- package/daemon/dist/domain/node-launcher.js +10 -0
- package/daemon/dist/domain/node-launcher.js.map +1 -1
- package/daemon/dist/domain/plugin-vendor-service.d.ts +2 -0
- package/daemon/dist/domain/plugin-vendor-service.d.ts.map +1 -1
- package/daemon/dist/domain/plugin-vendor-service.js +23 -0
- package/daemon/dist/domain/plugin-vendor-service.js.map +1 -1
- package/daemon/dist/domain/policies/workflow-keepalive.d.ts +7 -0
- package/daemon/dist/domain/policies/workflow-keepalive.d.ts.map +1 -1
- package/daemon/dist/domain/policies/workflow-keepalive.js +93 -13
- package/daemon/dist/domain/policies/workflow-keepalive.js.map +1 -1
- package/daemon/dist/domain/projection-lane.d.ts +7 -0
- package/daemon/dist/domain/projection-lane.d.ts.map +1 -0
- package/daemon/dist/domain/projection-lane.js +28 -0
- package/daemon/dist/domain/projection-lane.js.map +1 -0
- package/daemon/dist/domain/ps-projection.d.ts +19 -0
- package/daemon/dist/domain/ps-projection.d.ts.map +1 -1
- package/daemon/dist/domain/ps-projection.js +81 -30
- package/daemon/dist/domain/ps-projection.js.map +1 -1
- package/daemon/dist/domain/queue-repository.d.ts +116 -7
- package/daemon/dist/domain/queue-repository.d.ts.map +1 -1
- package/daemon/dist/domain/queue-repository.js +226 -16
- package/daemon/dist/domain/queue-repository.js.map +1 -1
- package/daemon/dist/domain/queue-retention.d.ts +130 -0
- package/daemon/dist/domain/queue-retention.d.ts.map +1 -0
- package/daemon/dist/domain/queue-retention.js +224 -0
- package/daemon/dist/domain/queue-retention.js.map +1 -0
- package/daemon/dist/domain/restore-orchestrator.d.ts +5 -0
- package/daemon/dist/domain/restore-orchestrator.d.ts.map +1 -1
- package/daemon/dist/domain/restore-orchestrator.js +29 -2
- package/daemon/dist/domain/restore-orchestrator.js.map +1 -1
- package/daemon/dist/domain/resume-token-capture.d.ts +13 -0
- package/daemon/dist/domain/resume-token-capture.d.ts.map +1 -1
- package/daemon/dist/domain/resume-token-capture.js +14 -1
- package/daemon/dist/domain/resume-token-capture.js.map +1 -1
- package/daemon/dist/domain/resume-token-validation.d.ts +1 -1
- package/daemon/dist/domain/resume-token-validation.d.ts.map +1 -1
- package/daemon/dist/domain/resume-token-validation.js +58 -10
- package/daemon/dist/domain/resume-token-validation.js.map +1 -1
- package/daemon/dist/domain/review/compose.d.ts +127 -5
- package/daemon/dist/domain/review/compose.d.ts.map +1 -1
- package/daemon/dist/domain/review/compose.js +244 -19
- package/daemon/dist/domain/review/compose.js.map +1 -1
- package/daemon/dist/domain/review/fleet-compose.d.ts +52 -0
- package/daemon/dist/domain/review/fleet-compose.d.ts.map +1 -0
- package/daemon/dist/domain/review/fleet-compose.js +294 -0
- package/daemon/dist/domain/review/fleet-compose.js.map +1 -0
- package/daemon/dist/domain/review/gather.d.ts +17 -2
- package/daemon/dist/domain/review/gather.d.ts.map +1 -1
- package/daemon/dist/domain/review/gather.js +269 -108
- package/daemon/dist/domain/review/gather.js.map +1 -1
- package/daemon/dist/domain/review/proof-io.d.ts +2 -0
- package/daemon/dist/domain/review/proof-io.d.ts.map +1 -0
- package/daemon/dist/domain/review/proof-io.js +38 -0
- package/daemon/dist/domain/review/proof-io.js.map +1 -0
- package/daemon/dist/domain/review/types.d.ts +104 -1
- package/daemon/dist/domain/review/types.d.ts.map +1 -1
- package/daemon/dist/domain/rig-expansion-service.d.ts.map +1 -1
- package/daemon/dist/domain/rig-expansion-service.js +3 -0
- package/daemon/dist/domain/rig-expansion-service.js.map +1 -1
- package/daemon/dist/domain/rig-repository.d.ts +7 -6
- package/daemon/dist/domain/rig-repository.d.ts.map +1 -1
- package/daemon/dist/domain/rig-repository.js +33 -11
- package/daemon/dist/domain/rig-repository.js.map +1 -1
- package/daemon/dist/domain/rigspec-codec.d.ts.map +1 -1
- package/daemon/dist/domain/rigspec-codec.js +3 -0
- package/daemon/dist/domain/rigspec-codec.js.map +1 -1
- package/daemon/dist/domain/rigspec-exporter.d.ts.map +1 -1
- package/daemon/dist/domain/rigspec-exporter.js +4 -0
- package/daemon/dist/domain/rigspec-exporter.js.map +1 -1
- package/daemon/dist/domain/rigspec-instantiator.d.ts.map +1 -1
- package/daemon/dist/domain/rigspec-instantiator.js +26 -2
- package/daemon/dist/domain/rigspec-instantiator.js.map +1 -1
- package/daemon/dist/domain/rigspec-preflight.d.ts +6 -0
- package/daemon/dist/domain/rigspec-preflight.d.ts.map +1 -1
- package/daemon/dist/domain/rigspec-preflight.js +26 -1
- package/daemon/dist/domain/rigspec-preflight.js.map +1 -1
- package/daemon/dist/domain/rigspec-schema.d.ts.map +1 -1
- package/daemon/dist/domain/rigspec-schema.js +20 -1
- package/daemon/dist/domain/rigspec-schema.js.map +1 -1
- package/daemon/dist/domain/runtime-verifier.d.ts +7 -1
- package/daemon/dist/domain/runtime-verifier.d.ts.map +1 -1
- package/daemon/dist/domain/runtime-verifier.js +39 -1
- package/daemon/dist/domain/runtime-verifier.js.map +1 -1
- package/daemon/dist/domain/scope/plan-lock-artifacts.d.ts +8 -0
- package/daemon/dist/domain/scope/plan-lock-artifacts.d.ts.map +1 -0
- package/daemon/dist/domain/scope/plan-lock-artifacts.js +57 -0
- package/daemon/dist/domain/scope/plan-lock-artifacts.js.map +1 -0
- package/daemon/dist/domain/scope/scaffold-placeholder.d.ts +38 -0
- package/daemon/dist/domain/scope/scaffold-placeholder.d.ts.map +1 -0
- package/daemon/dist/domain/scope/scaffold-placeholder.js +98 -0
- package/daemon/dist/domain/scope/scaffold-placeholder.js.map +1 -0
- package/daemon/dist/domain/scope/scope-approve.d.ts.map +1 -1
- package/daemon/dist/domain/scope/scope-approve.js +22 -1
- package/daemon/dist/domain/scope/scope-approve.js.map +1 -1
- package/daemon/dist/domain/scope/scope-audit.d.ts.map +1 -1
- package/daemon/dist/domain/scope/scope-audit.js +57 -20
- package/daemon/dist/domain/scope/scope-audit.js.map +1 -1
- package/daemon/dist/domain/seat-handover-service.d.ts +9 -0
- package/daemon/dist/domain/seat-handover-service.d.ts.map +1 -1
- package/daemon/dist/domain/seat-handover-service.js +2 -0
- package/daemon/dist/domain/seat-handover-service.js.map +1 -1
- package/daemon/dist/domain/seat-identity-store.d.ts +7 -0
- package/daemon/dist/domain/seat-identity-store.d.ts.map +1 -1
- package/daemon/dist/domain/seat-identity-store.js +27 -0
- package/daemon/dist/domain/seat-identity-store.js.map +1 -1
- package/daemon/dist/domain/seat-status-service.d.ts.map +1 -1
- package/daemon/dist/domain/seat-status-service.js +6 -4
- package/daemon/dist/domain/seat-status-service.js.map +1 -1
- package/daemon/dist/domain/session-name.d.ts +22 -0
- package/daemon/dist/domain/session-name.d.ts.map +1 -1
- package/daemon/dist/domain/session-name.js +29 -0
- package/daemon/dist/domain/session-name.js.map +1 -1
- package/daemon/dist/domain/session-transport.d.ts +17 -0
- package/daemon/dist/domain/session-transport.d.ts.map +1 -1
- package/daemon/dist/domain/session-transport.js +44 -0
- package/daemon/dist/domain/session-transport.js.map +1 -1
- package/daemon/dist/domain/slices/qitem-membership.d.ts +17 -0
- package/daemon/dist/domain/slices/qitem-membership.d.ts.map +1 -0
- package/daemon/dist/domain/slices/qitem-membership.js +60 -0
- package/daemon/dist/domain/slices/qitem-membership.js.map +1 -0
- package/daemon/dist/domain/slices/slice-detail-projector.d.ts +5 -0
- package/daemon/dist/domain/slices/slice-detail-projector.d.ts.map +1 -1
- package/daemon/dist/domain/slices/slice-detail-projector.js +161 -16
- package/daemon/dist/domain/slices/slice-detail-projector.js.map +1 -1
- package/daemon/dist/domain/slices/slice-indexer.d.ts +86 -0
- package/daemon/dist/domain/slices/slice-indexer.d.ts.map +1 -1
- package/daemon/dist/domain/slices/slice-indexer.js +422 -45
- package/daemon/dist/domain/slices/slice-indexer.js.map +1 -1
- package/daemon/dist/domain/spec-library-workflow-scanner.d.ts +18 -2
- package/daemon/dist/domain/spec-library-workflow-scanner.d.ts.map +1 -1
- package/daemon/dist/domain/spec-library-workflow-scanner.js +23 -1
- package/daemon/dist/domain/spec-library-workflow-scanner.js.map +1 -1
- package/daemon/dist/domain/startup-orchestrator.d.ts +9 -0
- package/daemon/dist/domain/startup-orchestrator.d.ts.map +1 -1
- package/daemon/dist/domain/startup-orchestrator.js +71 -3
- package/daemon/dist/domain/startup-orchestrator.js.map +1 -1
- package/daemon/dist/domain/startup-proof.d.ts +10 -6
- package/daemon/dist/domain/startup-proof.d.ts.map +1 -1
- package/daemon/dist/domain/startup-proof.js +35 -7
- package/daemon/dist/domain/startup-proof.js.map +1 -1
- package/daemon/dist/domain/successor-session-launcher.d.ts +16 -0
- package/daemon/dist/domain/successor-session-launcher.d.ts.map +1 -1
- package/daemon/dist/domain/successor-session-launcher.js +13 -0
- package/daemon/dist/domain/successor-session-launcher.js.map +1 -1
- package/daemon/dist/domain/terminal/cmux-provider-adapter.d.ts +28 -0
- package/daemon/dist/domain/terminal/cmux-provider-adapter.d.ts.map +1 -0
- package/daemon/dist/domain/terminal/cmux-provider-adapter.js +100 -0
- package/daemon/dist/domain/terminal/cmux-provider-adapter.js.map +1 -0
- package/daemon/dist/domain/terminal/herdr-adapter.d.ts +94 -0
- package/daemon/dist/domain/terminal/herdr-adapter.d.ts.map +1 -0
- package/daemon/dist/domain/terminal/herdr-adapter.js +307 -0
- package/daemon/dist/domain/terminal/herdr-adapter.js.map +1 -0
- package/daemon/dist/domain/terminal/herdr-transport.d.ts +50 -0
- package/daemon/dist/domain/terminal/herdr-transport.d.ts.map +1 -0
- package/daemon/dist/domain/terminal/herdr-transport.js +145 -0
- package/daemon/dist/domain/terminal/herdr-transport.js.map +1 -0
- package/daemon/dist/domain/terminal/terminal-provider.d.ts +88 -0
- package/daemon/dist/domain/terminal/terminal-provider.d.ts.map +1 -0
- package/daemon/dist/domain/terminal/terminal-provider.js +17 -0
- package/daemon/dist/domain/terminal/terminal-provider.js.map +1 -0
- package/daemon/dist/domain/terminal/terminal-service.d.ts +60 -0
- package/daemon/dist/domain/terminal/terminal-service.d.ts.map +1 -0
- package/daemon/dist/domain/terminal/terminal-service.js +174 -0
- package/daemon/dist/domain/terminal/terminal-service.js.map +1 -0
- package/daemon/dist/domain/terminal/terminal-views-store.d.ts +77 -0
- package/daemon/dist/domain/terminal/terminal-views-store.d.ts.map +1 -0
- package/daemon/dist/domain/terminal/terminal-views-store.js +146 -0
- package/daemon/dist/domain/terminal/terminal-views-store.js.map +1 -0
- package/daemon/dist/domain/terminal/view-composer.d.ts +42 -0
- package/daemon/dist/domain/terminal/view-composer.d.ts.map +1 -0
- package/daemon/dist/domain/terminal/view-composer.js +137 -0
- package/daemon/dist/domain/terminal/view-composer.js.map +1 -0
- package/daemon/dist/domain/tmux-option-defaults.d.ts +89 -0
- package/daemon/dist/domain/tmux-option-defaults.d.ts.map +1 -0
- package/daemon/dist/domain/tmux-option-defaults.js +132 -0
- package/daemon/dist/domain/tmux-option-defaults.js.map +1 -0
- package/daemon/dist/domain/transcript-capture.d.ts +3 -0
- package/daemon/dist/domain/transcript-capture.d.ts.map +1 -1
- package/daemon/dist/domain/transcript-capture.js +28 -0
- package/daemon/dist/domain/transcript-capture.js.map +1 -1
- package/daemon/dist/domain/transcript-store.d.ts +10 -0
- package/daemon/dist/domain/transcript-store.d.ts.map +1 -1
- package/daemon/dist/domain/transcript-store.js +26 -0
- package/daemon/dist/domain/transcript-store.js.map +1 -1
- package/daemon/dist/domain/types.d.ts +38 -1
- package/daemon/dist/domain/types.d.ts.map +1 -1
- package/daemon/dist/domain/types.js.map +1 -1
- package/daemon/dist/domain/user-settings/settings-store.d.ts +1 -1
- package/daemon/dist/domain/user-settings/settings-store.d.ts.map +1 -1
- package/daemon/dist/domain/user-settings/settings-store.js +92 -0
- package/daemon/dist/domain/user-settings/settings-store.js.map +1 -1
- package/daemon/dist/domain/workflow/slice-workflow-projection.d.ts.map +1 -1
- package/daemon/dist/domain/workflow/slice-workflow-projection.js +6 -2
- package/daemon/dist/domain/workflow/slice-workflow-projection.js.map +1 -1
- package/daemon/dist/domain/workflow-boot-sweep.d.ts +28 -0
- package/daemon/dist/domain/workflow-boot-sweep.d.ts.map +1 -0
- package/daemon/dist/domain/workflow-boot-sweep.js +102 -0
- package/daemon/dist/domain/workflow-boot-sweep.js.map +1 -0
- package/daemon/dist/domain/workflow-deadline.d.ts +74 -0
- package/daemon/dist/domain/workflow-deadline.d.ts.map +1 -0
- package/daemon/dist/domain/workflow-deadline.js +165 -0
- package/daemon/dist/domain/workflow-deadline.js.map +1 -0
- package/daemon/dist/domain/workflow-exception-escalation.d.ts +33 -0
- package/daemon/dist/domain/workflow-exception-escalation.d.ts.map +1 -0
- package/daemon/dist/domain/workflow-exception-escalation.js +104 -0
- package/daemon/dist/domain/workflow-exception-escalation.js.map +1 -0
- package/daemon/dist/domain/workflow-exception-router.d.ts +33 -0
- package/daemon/dist/domain/workflow-exception-router.d.ts.map +1 -0
- package/daemon/dist/domain/workflow-exception-router.js +96 -0
- package/daemon/dist/domain/workflow-exception-router.js.map +1 -0
- package/daemon/dist/domain/workflow-exception.d.ts +90 -0
- package/daemon/dist/domain/workflow-exception.d.ts.map +1 -0
- package/daemon/dist/domain/workflow-exception.js +122 -0
- package/daemon/dist/domain/workflow-exception.js.map +1 -0
- package/daemon/dist/domain/workflow-frontier-guard.d.ts +24 -0
- package/daemon/dist/domain/workflow-frontier-guard.d.ts.map +1 -0
- package/daemon/dist/domain/workflow-frontier-guard.js +30 -0
- package/daemon/dist/domain/workflow-frontier-guard.js.map +1 -0
- package/daemon/dist/domain/workflow-instance-store.d.ts +28 -0
- package/daemon/dist/domain/workflow-instance-store.d.ts.map +1 -1
- package/daemon/dist/domain/workflow-instance-store.js +66 -10
- package/daemon/dist/domain/workflow-instance-store.js.map +1 -1
- package/daemon/dist/domain/workflow-keepalive-arming.d.ts +35 -0
- package/daemon/dist/domain/workflow-keepalive-arming.d.ts.map +1 -0
- package/daemon/dist/domain/workflow-keepalive-arming.js +87 -0
- package/daemon/dist/domain/workflow-keepalive-arming.js.map +1 -0
- package/daemon/dist/domain/workflow-projector.d.ts +117 -2
- package/daemon/dist/domain/workflow-projector.d.ts.map +1 -1
- package/daemon/dist/domain/workflow-projector.js +672 -41
- package/daemon/dist/domain/workflow-projector.js.map +1 -1
- package/daemon/dist/domain/workflow-role-context.d.ts +57 -0
- package/daemon/dist/domain/workflow-role-context.d.ts.map +1 -0
- package/daemon/dist/domain/workflow-role-context.js +120 -0
- package/daemon/dist/domain/workflow-role-context.js.map +1 -0
- package/daemon/dist/domain/workflow-role-resolver.d.ts +65 -0
- package/daemon/dist/domain/workflow-role-resolver.d.ts.map +1 -0
- package/daemon/dist/domain/workflow-role-resolver.js +108 -0
- package/daemon/dist/domain/workflow-role-resolver.js.map +1 -0
- package/daemon/dist/domain/workflow-runtime.d.ts +157 -1
- package/daemon/dist/domain/workflow-runtime.d.ts.map +1 -1
- package/daemon/dist/domain/workflow-runtime.js +718 -11
- package/daemon/dist/domain/workflow-runtime.js.map +1 -1
- package/daemon/dist/domain/workflow-spec-cache.d.ts +26 -1
- package/daemon/dist/domain/workflow-spec-cache.d.ts.map +1 -1
- package/daemon/dist/domain/workflow-spec-cache.js +327 -13
- package/daemon/dist/domain/workflow-spec-cache.js.map +1 -1
- package/daemon/dist/domain/workflow-types.d.ts +143 -8
- package/daemon/dist/domain/workflow-types.d.ts.map +1 -1
- package/daemon/dist/domain/workflow-types.js +14 -1
- package/daemon/dist/domain/workflow-types.js.map +1 -1
- package/daemon/dist/domain/workflow-validator.d.ts +11 -1
- package/daemon/dist/domain/workflow-validator.d.ts.map +1 -1
- package/daemon/dist/domain/workflow-validator.js +246 -1
- package/daemon/dist/domain/workflow-validator.js.map +1 -1
- package/daemon/dist/domain/workspace/default-workspace-scaffold.d.ts.map +1 -1
- package/daemon/dist/domain/workspace/default-workspace-scaffold.js +9 -4
- package/daemon/dist/domain/workspace/default-workspace-scaffold.js.map +1 -1
- package/daemon/dist/domain/workspace/workspace-doctor.js +1 -1
- package/daemon/dist/domain/workspace/workspace-doctor.js.map +1 -1
- package/daemon/dist/index.d.ts +17 -0
- package/daemon/dist/index.d.ts.map +1 -1
- package/daemon/dist/index.js +44 -0
- package/daemon/dist/index.js.map +1 -1
- package/daemon/dist/routes/activity.js +22 -0
- package/daemon/dist/routes/activity.js.map +1 -1
- package/daemon/dist/routes/hosts.d.ts +5 -0
- package/daemon/dist/routes/hosts.d.ts.map +1 -0
- package/daemon/dist/routes/hosts.js +346 -0
- package/daemon/dist/routes/hosts.js.map +1 -0
- package/daemon/dist/routes/mission-control.js +1 -1
- package/daemon/dist/routes/mission-control.js.map +1 -1
- package/daemon/dist/routes/missions.d.ts +7 -0
- package/daemon/dist/routes/missions.d.ts.map +1 -1
- package/daemon/dist/routes/missions.js +6 -1
- package/daemon/dist/routes/missions.js.map +1 -1
- package/daemon/dist/routes/ps.d.ts.map +1 -1
- package/daemon/dist/routes/ps.js +5 -1
- package/daemon/dist/routes/ps.js.map +1 -1
- package/daemon/dist/routes/queue.d.ts +2 -7
- package/daemon/dist/routes/queue.d.ts.map +1 -1
- package/daemon/dist/routes/queue.js +272 -10
- package/daemon/dist/routes/queue.js.map +1 -1
- package/daemon/dist/routes/review.d.ts.map +1 -1
- package/daemon/dist/routes/review.js +26 -0
- package/daemon/dist/routes/review.js.map +1 -1
- package/daemon/dist/routes/rigs.d.ts.map +1 -1
- package/daemon/dist/routes/rigs.js +21 -10
- package/daemon/dist/routes/rigs.js.map +1 -1
- package/daemon/dist/routes/scope-audit.d.ts.map +1 -1
- package/daemon/dist/routes/scope-audit.js +141 -135
- package/daemon/dist/routes/scope-audit.js.map +1 -1
- package/daemon/dist/routes/seat.js +13 -0
- package/daemon/dist/routes/seat.js.map +1 -1
- package/daemon/dist/routes/sessions.js +2 -1
- package/daemon/dist/routes/sessions.js.map +1 -1
- package/daemon/dist/routes/slices.d.ts.map +1 -1
- package/daemon/dist/routes/slices.js +48 -38
- package/daemon/dist/routes/slices.js.map +1 -1
- package/daemon/dist/routes/terminal.d.ts +11 -0
- package/daemon/dist/routes/terminal.d.ts.map +1 -0
- package/daemon/dist/routes/terminal.js +104 -0
- package/daemon/dist/routes/terminal.js.map +1 -0
- package/daemon/dist/routes/transcripts.d.ts.map +1 -1
- package/daemon/dist/routes/transcripts.js +62 -33
- package/daemon/dist/routes/transcripts.js.map +1 -1
- package/daemon/dist/routes/workflow.d.ts.map +1 -1
- package/daemon/dist/routes/workflow.js +102 -10
- package/daemon/dist/routes/workflow.js.map +1 -1
- package/daemon/dist/server.d.ts +5 -0
- package/daemon/dist/server.d.ts.map +1 -1
- package/daemon/dist/server.js +22 -0
- package/daemon/dist/server.js.map +1 -1
- package/daemon/dist/startup.d.ts.map +1 -1
- package/daemon/dist/startup.js +235 -12
- package/daemon/dist/startup.js.map +1 -1
- package/daemon/docs/reference/agent-startup-guide.md +1 -0
- package/daemon/specs/agents/apps/vault-specialist/agent.yaml +2 -1
- package/daemon/specs/agents/conveyor/builder/agent.yaml +2 -1
- package/daemon/specs/agents/conveyor/lead/agent.yaml +2 -1
- package/daemon/specs/agents/conveyor/planner/agent.yaml +2 -1
- package/daemon/specs/agents/conveyor/reviewer/agent.yaml +2 -1
- package/daemon/specs/agents/design/product-designer/agent.yaml +12 -2
- package/daemon/specs/agents/development/implementer/agent.yaml +12 -2
- package/daemon/specs/agents/development/qa/agent.yaml +12 -2
- package/daemon/specs/agents/development/qa/guidance/role.md +1 -0
- package/daemon/specs/agents/factory-rsi/dogfood/agent.yaml +30 -0
- package/daemon/specs/agents/factory-rsi/dogfood/guidance/role.md +37 -0
- package/daemon/specs/agents/factory-rsi/release-manager/agent.yaml +30 -0
- package/daemon/specs/agents/factory-rsi/release-manager/guidance/role.md +40 -0
- package/daemon/specs/agents/orchestration/orchestrator/agent.yaml +12 -2
- package/daemon/specs/agents/product-management/pm/agent.yaml +1 -2
- package/daemon/specs/agents/research/analyst/agent.yaml +2 -1
- package/daemon/specs/agents/research/synthesizer/agent.yaml +2 -1
- package/daemon/specs/agents/review/independent-reviewer/agent.yaml +12 -2
- package/daemon/specs/agents/shared/agent.yaml +5 -8
- package/daemon/specs/agents/shared/runtime/claude-settings.fragment.json +13 -1
- package/daemon/specs/agents/shared/skills/core/agent-starters/SKILL.md +132 -0
- package/daemon/{assets/plugins/openrig-core/skills → specs/agents/shared/skills/core}/agent-startup-and-context-ingestion/SKILL.md +27 -19
- package/daemon/specs/agents/shared/skills/core/attention-queue/SKILL.md +264 -0
- package/daemon/specs/agents/shared/skills/core/cross-host-rig-commands/SKILL.md +190 -0
- package/daemon/specs/agents/shared/skills/core/human-in-the-loop/SKILL.md +104 -0
- package/daemon/specs/agents/shared/skills/core/openrig-architect/SKILL.md +25 -8
- package/daemon/specs/agents/shared/skills/core/openrig-cmux/SKILL.md +81 -0
- package/daemon/specs/agents/shared/skills/core/openrig-herdr/SKILL.md +153 -0
- package/daemon/specs/agents/shared/skills/core/openrig-upgrade/SKILL.md +460 -0
- package/daemon/specs/agents/shared/skills/core/rig-bundles-and-shareable-artifacts/SKILL.md +101 -0
- package/daemon/specs/agents/shared/skills/core/rig-lifecycle/SKILL.md +22 -11
- package/daemon/specs/agents/shared/skills/core/session-source-fork/SKILL.md +160 -0
- package/daemon/specs/agents/shared/skills/core/specification-system/SKILL.md +103 -0
- package/daemon/specs/agents/shared/skills/core/topology-mutation-and-seat-management/SKILL.md +118 -0
- package/daemon/specs/agents/shared/skills/core/watchdog/SKILL.md +125 -0
- package/daemon/specs/agents/shared/skills/pods/orchestration-team/SKILL.md +4 -4
- package/daemon/specs/agents/shared/skills/pods/review-team/SKILL.md +3 -0
- package/daemon/specs/agents/shared/skills/process/brainstorming/OPENRIG.md +3 -3
- package/daemon/specs/agents/shared/skills/process/executing-plans/OPENRIG.md +1 -1
- package/daemon/specs/agents/shared/skills/process/frontend-design/SKILL.md +6 -3
- package/daemon/specs/agents/shared/skills/process/test-driven-development/SKILL.md +1 -1
- package/daemon/specs/agents/shared/skills/process/using-superpowers/OPENRIG.md +1 -1
- package/daemon/specs/agents/shared/skills/process/verification-before-completion/SKILL.md +12 -2
- package/daemon/specs/agents/shared/skills/process/writing-plans/OPENRIG.md +1 -1
- package/daemon/specs/rigs/focused/pm-team/CULTURE.md +1 -1
- package/daemon/specs/rigs/launch/factory-rsi/CULTURE.md +47 -0
- package/daemon/specs/rigs/launch/factory-rsi/rig.yaml +115 -0
- package/daemon/specs/rigs/launch/kernel/agents/advisor/lead/agent.yaml +2 -2
- package/daemon/specs/rigs/launch/kernel/agents/advisor/lead/guidance/role.md +5 -4
- package/daemon/specs/rigs/launch/kernel/agents/operator/agent/agent.yaml +2 -2
- package/daemon/specs/rigs/launch/kernel/agents/operator/agent/guidance/role.md +3 -5
- package/daemon/specs/rigs/launch/kernel/agents/queue/worker/agent.yaml +2 -2
- package/daemon/specs/rigs/launch/kernel/culture/CULTURE.md +3 -4
- package/daemon/specs/rigs/preview/product-team/CULTURE.md +1 -1
- package/dist/bin-wrapper.d.ts.map +1 -1
- package/dist/bin-wrapper.js +3 -1
- package/dist/bin-wrapper.js.map +1 -1
- package/dist/build-info.js +3 -3
- package/dist/cli-error.d.ts +33 -0
- package/dist/cli-error.d.ts.map +1 -0
- package/dist/cli-error.js +94 -0
- package/dist/cli-error.js.map +1 -0
- package/dist/commands/broadcast.d.ts +6 -1
- package/dist/commands/broadcast.d.ts.map +1 -1
- package/dist/commands/broadcast.js +101 -15
- package/dist/commands/broadcast.js.map +1 -1
- package/dist/commands/capture.d.ts.map +1 -1
- package/dist/commands/capture.js +99 -8
- package/dist/commands/capture.js.map +1 -1
- package/dist/commands/config-init-workspace.js +1 -1
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +4 -0
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/doctor.d.ts +1 -1
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +17 -11
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/down.d.ts.map +1 -1
- package/dist/commands/down.js +5 -0
- package/dist/commands/down.js.map +1 -1
- package/dist/commands/host.d.ts +14 -0
- package/dist/commands/host.d.ts.map +1 -1
- package/dist/commands/host.js +361 -23
- package/dist/commands/host.js.map +1 -1
- package/dist/commands/launch.d.ts.map +1 -1
- package/dist/commands/launch.js +5 -0
- package/dist/commands/launch.js.map +1 -1
- package/dist/commands/proof.js +1 -1
- package/dist/commands/proof.js.map +1 -1
- package/dist/commands/ps.d.ts.map +1 -1
- package/dist/commands/ps.js +26 -6
- package/dist/commands/ps.js.map +1 -1
- package/dist/commands/queue.d.ts +36 -0
- package/dist/commands/queue.d.ts.map +1 -1
- package/dist/commands/queue.js +176 -31
- package/dist/commands/queue.js.map +1 -1
- package/dist/commands/restore-packet.d.ts.map +1 -1
- package/dist/commands/restore-packet.js +13 -2
- package/dist/commands/restore-packet.js.map +1 -1
- package/dist/commands/rig.d.ts.map +1 -1
- package/dist/commands/rig.js +122 -0
- package/dist/commands/rig.js.map +1 -1
- package/dist/commands/scope.js +2 -2
- package/dist/commands/scope.js.map +1 -1
- package/dist/commands/send.d.ts.map +1 -1
- package/dist/commands/send.js +229 -30
- package/dist/commands/send.js.map +1 -1
- package/dist/commands/slack.d.ts +37 -0
- package/dist/commands/slack.d.ts.map +1 -0
- package/dist/commands/slack.js +274 -0
- package/dist/commands/slack.js.map +1 -0
- package/dist/commands/terminal.d.ts +6 -0
- package/dist/commands/terminal.d.ts.map +1 -0
- package/dist/commands/terminal.js +116 -0
- package/dist/commands/terminal.js.map +1 -0
- package/dist/commands/transcript.d.ts +6 -1
- package/dist/commands/transcript.d.ts.map +1 -1
- package/dist/commands/transcript.js +113 -30
- package/dist/commands/transcript.js.map +1 -1
- package/dist/commands/ui.d.ts +1 -0
- package/dist/commands/ui.d.ts.map +1 -1
- package/dist/commands/ui.js +2 -0
- package/dist/commands/ui.js.map +1 -1
- package/dist/commands/up.d.ts.map +1 -1
- package/dist/commands/up.js +10 -1
- package/dist/commands/up.js.map +1 -1
- package/dist/commands/whoami.d.ts.map +1 -1
- package/dist/commands/whoami.js +14 -3
- package/dist/commands/whoami.js.map +1 -1
- package/dist/commands/workflow-errors.d.ts +23 -0
- package/dist/commands/workflow-errors.d.ts.map +1 -0
- package/dist/commands/workflow-errors.js +100 -0
- package/dist/commands/workflow-errors.js.map +1 -0
- package/dist/commands/workflow-follow.d.ts +71 -0
- package/dist/commands/workflow-follow.d.ts.map +1 -0
- package/dist/commands/workflow-follow.js +259 -0
- package/dist/commands/workflow-follow.js.map +1 -0
- package/dist/commands/workflow-render.d.ts +114 -0
- package/dist/commands/workflow-render.d.ts.map +1 -0
- package/dist/commands/workflow-render.js +223 -0
- package/dist/commands/workflow-render.js.map +1 -0
- package/dist/commands/workflow.d.ts +1 -0
- package/dist/commands/workflow.d.ts.map +1 -1
- package/dist/commands/workflow.js +278 -14
- package/dist/commands/workflow.js.map +1 -1
- package/dist/config-store.d.ts +15 -1
- package/dist/config-store.d.ts.map +1 -1
- package/dist/config-store.js +103 -0
- package/dist/config-store.js.map +1 -1
- package/dist/cross-host-cli-helpers.d.ts +13 -0
- package/dist/cross-host-cli-helpers.d.ts.map +1 -1
- package/dist/cross-host-cli-helpers.js +27 -0
- package/dist/cross-host-cli-helpers.js.map +1 -1
- package/dist/cross-host-target.d.ts +49 -0
- package/dist/cross-host-target.d.ts.map +1 -0
- package/dist/cross-host-target.js +35 -0
- package/dist/cross-host-target.js.map +1 -0
- package/dist/daemon-lifecycle.d.ts.map +1 -1
- package/dist/daemon-lifecycle.js +45 -14
- package/dist/daemon-lifecycle.js.map +1 -1
- package/dist/host-registry.d.ts +14 -1
- package/dist/host-registry.d.ts.map +1 -1
- package/dist/host-registry.js +47 -6
- package/dist/host-registry.js.map +1 -1
- package/dist/host-selection.d.ts +13 -0
- package/dist/host-selection.d.ts.map +1 -0
- package/dist/host-selection.js +54 -0
- package/dist/host-selection.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/scope/scaffold-placeholder.d.ts +38 -0
- package/dist/lib/scope/scaffold-placeholder.d.ts.map +1 -0
- package/dist/lib/scope/scaffold-placeholder.js +98 -0
- package/dist/lib/scope/scaffold-placeholder.js.map +1 -0
- package/dist/lib/scope/scope-audit.d.ts.map +1 -1
- package/dist/lib/scope/scope-audit.js +57 -20
- package/dist/lib/scope/scope-audit.js.map +1 -1
- package/dist/lib/scope-templates/backlog-deprecation.md +1 -1
- package/dist/lib/scope-templates/backlog-tech-debt.md +1 -1
- package/dist/lib/scope-templates/bug-fix.md +1 -1
- package/dist/lib/scope-templates/implementation-prd.md +1 -1
- package/dist/lib/scope-templates/mission-notes.md +7 -2
- package/dist/lib/scope-templates/mission-placeholder.md +1 -1
- package/dist/lib/scope-templates/mission-progress.md +1 -1
- package/dist/lib/scope-templates/mission-release.md +1 -1
- package/dist/lib/scope-templates/placeholder.md +1 -1
- package/dist/lib/scope-templates/proof.md +1 -1
- package/dist/lib/scope-templates/release-feature.md +1 -1
- package/dist/lib/scope-templates/research.md +1 -1
- package/dist/lib/scope-templates/slice-progress.md +1 -1
- package/dist/remote-host-ops.d.ts +1 -0
- package/dist/remote-host-ops.d.ts.map +1 -1
- package/dist/remote-host-ops.js +13 -6
- package/dist/remote-host-ops.js.map +1 -1
- package/dist/session-name.d.ts +23 -0
- package/dist/session-name.d.ts.map +1 -0
- package/dist/session-name.js +61 -0
- package/dist/session-name.js.map +1 -0
- package/dist/slack/config.d.ts +41 -0
- package/dist/slack/config.d.ts.map +1 -0
- package/dist/slack/config.js +60 -0
- package/dist/slack/config.js.map +1 -0
- package/dist/slack/inbound.d.ts +75 -0
- package/dist/slack/inbound.d.ts.map +1 -0
- package/dist/slack/inbound.js +133 -0
- package/dist/slack/inbound.js.map +1 -0
- package/dist/slack/message.d.ts +26 -0
- package/dist/slack/message.d.ts.map +1 -0
- package/dist/slack/message.js +60 -0
- package/dist/slack/message.js.map +1 -0
- package/dist/slack/outbound.d.ts +39 -0
- package/dist/slack/outbound.d.ts.map +1 -0
- package/dist/slack/outbound.js +52 -0
- package/dist/slack/outbound.js.map +1 -0
- package/dist/slack/queue-bridge.d.ts +56 -0
- package/dist/slack/queue-bridge.d.ts.map +1 -0
- package/dist/slack/queue-bridge.js +114 -0
- package/dist/slack/queue-bridge.js.map +1 -0
- package/dist/slack/secrets.d.ts +21 -0
- package/dist/slack/secrets.d.ts.map +1 -0
- package/dist/slack/secrets.js +73 -0
- package/dist/slack/secrets.js.map +1 -0
- package/dist/slack/slack-api.d.ts +49 -0
- package/dist/slack/slack-api.d.ts.map +1 -0
- package/dist/slack/slack-api.js +110 -0
- package/dist/slack/slack-api.js.map +1 -0
- package/dist/slack/state-store.d.ts +62 -0
- package/dist/slack/state-store.d.ts.map +1 -0
- package/dist/slack/state-store.js +132 -0
- package/dist/slack/state-store.js.map +1 -0
- package/package.json +1 -1
- package/ui/dist/assets/index-DkNi0RT8.js +623 -0
- package/ui/dist/assets/index-N-SdPj-I.css +32 -0
- package/ui/dist/index.html +2 -2
- package/daemon/assets/plugins/openrig-core/skills/openrig-architect/SKILL.md +0 -361
- package/daemon/assets/plugins/openrig-core/skills/openrig-operator/SKILL.md +0 -222
- package/daemon/docs/reference/product-factory-vps-runbook.md +0 -132
- package/daemon/specs/agents/shared/skills/core/mission-slice-sop/SKILL.md +0 -115
- package/daemon/specs/agents/shared/skills/core/openrig-installer/SKILL.md +0 -142
- package/daemon/specs/agents/shared/skills/core/openrig-operator/SKILL.md +0 -110
- package/daemon/specs/agents/shared/skills/core/openrig-user/SKILL.md +0 -1245
- package/daemon/specs/agents/shared/skills/core/openrig-user-settings/SKILL.md +0 -153
- package/ui/dist/assets/index-D69ZhNIr.js +0 -598
- package/ui/dist/assets/index-DJYun-8d.css +0 -32
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
// `rig slack` — Slice-11 slack-connector-human-queue (OPR.0.4.7.11).
|
|
2
|
+
//
|
|
3
|
+
// Agent-assisted setup/config + the two trusted-host connector runners. The
|
|
4
|
+
// connector accesses the fleet ONLY through `rig queue` (transport-agnostic;
|
|
5
|
+
// connector-host may differ from the queue/alert host — item 10). Secrets load
|
|
6
|
+
// from a 0600 env file / OPENRIG_SLACK_* env at call time, never from config,
|
|
7
|
+
// never from the repo. WebUI setup is OUT of v1.
|
|
8
|
+
import { Command } from "commander";
|
|
9
|
+
import path from "node:path";
|
|
10
|
+
import { getOpenRigHome } from "../openrig-compat.js";
|
|
11
|
+
import { loadConfig, saveConfig, staticReadiness, } from "../slack/config.js";
|
|
12
|
+
import { resolveSecret, checkEnvFilePermissions } from "../slack/secrets.js";
|
|
13
|
+
import { SeenStore, DeadLetterStore } from "../slack/state-store.js";
|
|
14
|
+
import { makeExecRunner } from "../slack/queue-bridge.js";
|
|
15
|
+
import { runOutboundOnce, seedBacklogOnEnable } from "../slack/outbound.js";
|
|
16
|
+
import { InboundRouter, handleEnvelope } from "../slack/inbound.js";
|
|
17
|
+
import { verifyScopes, verifyChannelMembership, openSocketConnection } from "../slack/slack-api.js";
|
|
18
|
+
const SECRET_WEBHOOK = "SLACK_WEBHOOK_URL";
|
|
19
|
+
const SECRET_BOT = "SLACK_BOT_TOKEN";
|
|
20
|
+
const SECRET_APP = "SLACK_APP_TOKEN";
|
|
21
|
+
function stateDir(home) {
|
|
22
|
+
return path.join(home, "state");
|
|
23
|
+
}
|
|
24
|
+
function defaultRunner(cfg) {
|
|
25
|
+
// Remote queue targeting (item 10, connector-host != queue-host) via OPENRIG_URL
|
|
26
|
+
// — supported by ALL queue verbs, unlike `--host` which `queue list`/`show`
|
|
27
|
+
// reject. queueUrl (when set) overrides the ambient OPENRIG_URL for rig calls.
|
|
28
|
+
const env = cfg.queueUrl ? { ...process.env, OPENRIG_URL: cfg.queueUrl } : process.env;
|
|
29
|
+
return makeExecRunner({ rigBin: process.env.OPENRIG_RIG_BIN || "rig", baseArgs: [], env });
|
|
30
|
+
}
|
|
31
|
+
function resolveSecrets(cfg) {
|
|
32
|
+
const envFile = cfg.secretsEnvFile ?? undefined;
|
|
33
|
+
return {
|
|
34
|
+
webhook: resolveSecret(SECRET_WEBHOOK, { envFile }),
|
|
35
|
+
bot: resolveSecret(SECRET_BOT, { envFile }),
|
|
36
|
+
app: resolveSecret(SECRET_APP, { envFile }),
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
export function slackCommand(deps = {}) {
|
|
40
|
+
const home = deps.home ?? getOpenRigHome();
|
|
41
|
+
const log = deps.log ?? ((m) => console.log(m));
|
|
42
|
+
const makeRunner = deps.makeRunner ?? defaultRunner;
|
|
43
|
+
const now = deps.now ?? (() => new Date());
|
|
44
|
+
const cmd = new Command("slack").description("Slice-11 — Slack human-queue connector (outbound alerts + inbound messages)");
|
|
45
|
+
// ---- setup ----
|
|
46
|
+
cmd
|
|
47
|
+
.command("setup")
|
|
48
|
+
.description("Configure the connector (first-class config; secrets stay in the env file, never here)")
|
|
49
|
+
.option("--channel <id>", "Slack channel id the connector app must be a member of")
|
|
50
|
+
.option("--inbound-destination <session>", "where inbound human messages land (default operator-agent@kernel)")
|
|
51
|
+
.option("--alert-tag <tag>", "outbound: qitem tag that alerts a human (default founder-alert)")
|
|
52
|
+
.option("--source-label <label>", "label shown in the posted message footer (where the queue lives)")
|
|
53
|
+
.option("--secrets-env-file <path>", "path to the 0600 env file with SLACK_WEBHOOK_URL / SLACK_BOT_TOKEN / SLACK_APP_TOKEN")
|
|
54
|
+
.option("--queue-url <url>", "OPENRIG_URL of a REMOTE queue daemon (connector-host != queue-host); targets all queue verbs")
|
|
55
|
+
.option("--required-scopes <csv>", "comma-separated bot scopes to require at verify time")
|
|
56
|
+
.action((opts) => {
|
|
57
|
+
const cur = loadConfig(home);
|
|
58
|
+
const next = {
|
|
59
|
+
...cur,
|
|
60
|
+
channel: opts.channel ?? cur.channel,
|
|
61
|
+
inboundDestination: opts.inboundDestination ?? cur.inboundDestination,
|
|
62
|
+
alertTag: opts.alertTag ?? cur.alertTag,
|
|
63
|
+
sourceLabel: opts.sourceLabel ?? cur.sourceLabel,
|
|
64
|
+
secretsEnvFile: opts.secretsEnvFile ?? cur.secretsEnvFile,
|
|
65
|
+
queueUrl: opts.queueUrl ?? cur.queueUrl,
|
|
66
|
+
requiredScopes: opts.requiredScopes ? String(opts.requiredScopes).split(",").map((s) => s.trim()).filter(Boolean) : cur.requiredScopes,
|
|
67
|
+
};
|
|
68
|
+
const p = saveConfig(next, home);
|
|
69
|
+
log(`wrote ${p}`);
|
|
70
|
+
log(`Next: put SLACK_WEBHOOK_URL / SLACK_BOT_TOKEN / SLACK_APP_TOKEN in ${next.secretsEnvFile ?? "<--secrets-env-file> (0600)"}, then \`rig slack verify\`, then \`rig slack enable\`.`);
|
|
71
|
+
});
|
|
72
|
+
// ---- status (honest unconfigured, no network) ----
|
|
73
|
+
cmd
|
|
74
|
+
.command("status")
|
|
75
|
+
.description("Show the connector's configured + resolvable state (honest; no network)")
|
|
76
|
+
.option("--json", "JSON output")
|
|
77
|
+
.action((opts) => {
|
|
78
|
+
const cfg = loadConfig(home);
|
|
79
|
+
const s = resolveSecrets(cfg);
|
|
80
|
+
const readiness = staticReadiness(cfg, s.webhook !== null, s.bot !== null, s.app !== null);
|
|
81
|
+
const permWarn = cfg.secretsEnvFile ? checkEnvFilePermissions(cfg.secretsEnvFile) : null;
|
|
82
|
+
if (opts.json) {
|
|
83
|
+
log(JSON.stringify({ config: { ...cfg }, readiness, permWarning: permWarn }));
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
log(`slack-connector (config: ${cfg.enabled ? "enabled" : "disabled"})`);
|
|
87
|
+
for (const r of readiness)
|
|
88
|
+
log(` ${r.ok ? "✓" : "✗"} ${r.label}: ${r.detail}`);
|
|
89
|
+
if (permWarn)
|
|
90
|
+
log(` ⚠ ${permWarn}`);
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
// ---- verify (live: GRANTED scopes from headers + channel membership) ----
|
|
94
|
+
cmd
|
|
95
|
+
.command("verify")
|
|
96
|
+
.description("Live-verify GRANTED Slack scopes (from response headers) + channel membership (item 5)")
|
|
97
|
+
.option("--json", "JSON output")
|
|
98
|
+
.action(async (opts) => {
|
|
99
|
+
const cfg = loadConfig(home);
|
|
100
|
+
const s = resolveSecrets(cfg);
|
|
101
|
+
if (!s.bot) {
|
|
102
|
+
log("✗ bot token unresolved — set SLACK_BOT_TOKEN (env or secrets env file). Cannot verify.");
|
|
103
|
+
process.exitCode = 1;
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
const scope = await verifyScopes(s.bot, cfg.requiredScopes, deps.fetchImpl);
|
|
107
|
+
let member = null;
|
|
108
|
+
if (cfg.channel)
|
|
109
|
+
member = await verifyChannelMembership(s.bot, cfg.channel, deps.fetchImpl);
|
|
110
|
+
const ready = scope.ok && (member ? member.isMember : false);
|
|
111
|
+
if (opts.json) {
|
|
112
|
+
log(JSON.stringify({ scope, member, ready }));
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
log(`granted scopes: ${scope.granted.join(", ") || "(none)"}`);
|
|
116
|
+
if (!scope.ok)
|
|
117
|
+
log(`✗ MISSING scopes (configured != granted — reinstall the app): ${scope.missing.join(", ")}${scope.error ? ` [${scope.error}]` : ""}`);
|
|
118
|
+
else
|
|
119
|
+
log("✓ all required scopes granted");
|
|
120
|
+
if (member)
|
|
121
|
+
log(member.isMember ? `✓ channel member (${member.name ?? cfg.channel})` : `✗ NOT a member of channel ${cfg.channel} — invite the app`);
|
|
122
|
+
else
|
|
123
|
+
log("… channel not configured — set --channel to verify membership");
|
|
124
|
+
log(ready ? "READY for inbound" : "NOT ready");
|
|
125
|
+
}
|
|
126
|
+
if (!ready)
|
|
127
|
+
process.exitCode = 1;
|
|
128
|
+
});
|
|
129
|
+
// ---- enable (seeds backlog as history, item 9) ----
|
|
130
|
+
cmd
|
|
131
|
+
.command("enable")
|
|
132
|
+
.description("Enable the connector; seeds the current alert backlog as history (no replay storm)")
|
|
133
|
+
.action(async () => {
|
|
134
|
+
const cfg = loadConfig(home);
|
|
135
|
+
const s = resolveSecrets(cfg);
|
|
136
|
+
if (!s.webhook) {
|
|
137
|
+
log("✗ refusing to enable: SLACK_WEBHOOK_URL unresolved (outbound could not post). Configure secrets first.");
|
|
138
|
+
process.exitCode = 1;
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
const runner = makeRunner(cfg);
|
|
142
|
+
const seen = new SeenStore(path.join(stateDir(home), "slack-outbound-seen.jsonl"), undefined, now);
|
|
143
|
+
const res = await seedBacklogOnEnable({ runner, seen, filter: { alertTag: cfg.alertTag, destinations: cfg.outboundDestinations }, log });
|
|
144
|
+
saveConfig({ ...cfg, enabled: true }, home);
|
|
145
|
+
log(res.onlineStatus);
|
|
146
|
+
});
|
|
147
|
+
cmd
|
|
148
|
+
.command("disable")
|
|
149
|
+
.description("Disable the connector")
|
|
150
|
+
.action(() => {
|
|
151
|
+
saveConfig({ ...loadConfig(home), enabled: false }, home);
|
|
152
|
+
log("slack connector disabled");
|
|
153
|
+
});
|
|
154
|
+
// ---- outbound (one-shot sweep; for cron/launchd) ----
|
|
155
|
+
cmd
|
|
156
|
+
.command("outbound")
|
|
157
|
+
.description("One outbound sweep: post fresh human alerts to Slack (fail-visible)")
|
|
158
|
+
.option("--json", "JSON output")
|
|
159
|
+
.action(async (opts) => {
|
|
160
|
+
const cfg = loadConfig(home);
|
|
161
|
+
if (!cfg.enabled) {
|
|
162
|
+
log("slack connector disabled — `rig slack enable` first");
|
|
163
|
+
process.exitCode = 1;
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
const s = resolveSecrets(cfg);
|
|
167
|
+
if (!s.webhook) {
|
|
168
|
+
log("✗ SLACK_WEBHOOK_URL unresolved — cannot post");
|
|
169
|
+
process.exitCode = 1;
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
const runner = makeRunner(cfg);
|
|
173
|
+
const seen = new SeenStore(path.join(stateDir(home), "slack-outbound-seen.jsonl"), undefined, now);
|
|
174
|
+
const res = await runOutboundOnce({
|
|
175
|
+
runner,
|
|
176
|
+
seen,
|
|
177
|
+
webhookUrl: s.webhook,
|
|
178
|
+
fetchImpl: deps.fetchImpl,
|
|
179
|
+
sourceLabel: cfg.sourceLabel,
|
|
180
|
+
filter: { alertTag: cfg.alertTag, destinations: cfg.outboundDestinations },
|
|
181
|
+
log,
|
|
182
|
+
});
|
|
183
|
+
if (opts.json)
|
|
184
|
+
log(JSON.stringify(res));
|
|
185
|
+
if (res.failed.length > 0)
|
|
186
|
+
process.exitCode = 1; // fail-visible
|
|
187
|
+
});
|
|
188
|
+
// ---- inbound (persistent Socket Mode) ----
|
|
189
|
+
cmd
|
|
190
|
+
.command("inbound")
|
|
191
|
+
.description("Run the inbound Socket Mode consumer (persistent; human messages → queue)")
|
|
192
|
+
.action(async () => {
|
|
193
|
+
const cfg = loadConfig(home);
|
|
194
|
+
const s = resolveSecrets(cfg);
|
|
195
|
+
if (!s.app) {
|
|
196
|
+
log("✗ SLACK_APP_TOKEN unresolved — inbound cannot connect");
|
|
197
|
+
process.exitCode = 1;
|
|
198
|
+
return;
|
|
199
|
+
}
|
|
200
|
+
const runner = makeRunner(cfg);
|
|
201
|
+
const seen = new SeenStore(path.join(stateDir(home), "slack-inbound-seen.jsonl"), undefined, now);
|
|
202
|
+
const dead = new DeadLetterStore(path.join(stateDir(home), "slack-inbound-deadletter.jsonl"), undefined, now);
|
|
203
|
+
const router = new InboundRouter({ runner, seen, deadLetter: dead, destination: cfg.inboundDestination, log });
|
|
204
|
+
await runInboundLoop(s.app, router, deps, log);
|
|
205
|
+
});
|
|
206
|
+
return cmd;
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Socket Mode loop: open the ws, FAST-ACK every envelope, route human messages,
|
|
210
|
+
* drain the dead-letter on connect + periodically, reconnect with backoff.
|
|
211
|
+
* `deps.inboundMaxConnects` bounds it for tests; unset = forever.
|
|
212
|
+
*/
|
|
213
|
+
export async function runInboundLoop(appToken, router, deps, log) {
|
|
214
|
+
const wsFactory = deps.wsFactory ?? ((url) => new globalThis.WebSocket(url));
|
|
215
|
+
const retryIntervalMs = deps.retryIntervalMs ?? 5 * 60 * 1000;
|
|
216
|
+
let connects = 0;
|
|
217
|
+
let backoff = 1000;
|
|
218
|
+
await new Promise((resolve) => {
|
|
219
|
+
const connect = async () => {
|
|
220
|
+
connects++;
|
|
221
|
+
const open = await openSocketConnection(appToken, deps.fetchImpl);
|
|
222
|
+
if (!open.ok || !open.url) {
|
|
223
|
+
log(`connect failed: ${open.error}`);
|
|
224
|
+
if (deps.inboundMaxConnects && connects >= deps.inboundMaxConnects)
|
|
225
|
+
return resolve();
|
|
226
|
+
setTimeout(connect, backoff);
|
|
227
|
+
backoff = Math.min(backoff * 2, 60000);
|
|
228
|
+
return;
|
|
229
|
+
}
|
|
230
|
+
const ws = wsFactory(open.url);
|
|
231
|
+
let retryTimer;
|
|
232
|
+
ws.onopen = () => {
|
|
233
|
+
backoff = 1000;
|
|
234
|
+
log("socket connected");
|
|
235
|
+
void router.retryDeadLetters(); // drain on connect…
|
|
236
|
+
// …AND periodically WHILE connected (B1: recovery after a queue outage
|
|
237
|
+
// must not wait for the next Slack reconnect). Cleared on close.
|
|
238
|
+
retryTimer = setInterval(() => void router.retryDeadLetters(), retryIntervalMs);
|
|
239
|
+
if (typeof retryTimer.unref === "function") {
|
|
240
|
+
retryTimer.unref();
|
|
241
|
+
}
|
|
242
|
+
};
|
|
243
|
+
ws.onmessage = (m) => {
|
|
244
|
+
let env;
|
|
245
|
+
try {
|
|
246
|
+
env = JSON.parse(String(m.data));
|
|
247
|
+
}
|
|
248
|
+
catch {
|
|
249
|
+
return;
|
|
250
|
+
}
|
|
251
|
+
void handleEnvelope(env, () => env.envelope_id && ws.send(JSON.stringify({ envelope_id: env.envelope_id })), router, log);
|
|
252
|
+
};
|
|
253
|
+
ws.onclose = () => {
|
|
254
|
+
if (retryTimer)
|
|
255
|
+
clearInterval(retryTimer);
|
|
256
|
+
log(`socket closed; reconnect in ${backoff}ms`);
|
|
257
|
+
if (deps.inboundMaxConnects && connects >= deps.inboundMaxConnects)
|
|
258
|
+
return resolve();
|
|
259
|
+
setTimeout(connect, backoff);
|
|
260
|
+
backoff = Math.min(backoff * 2, 60000);
|
|
261
|
+
};
|
|
262
|
+
ws.onerror = () => {
|
|
263
|
+
try {
|
|
264
|
+
ws.close();
|
|
265
|
+
}
|
|
266
|
+
catch {
|
|
267
|
+
/* ignore */
|
|
268
|
+
}
|
|
269
|
+
};
|
|
270
|
+
};
|
|
271
|
+
void connect();
|
|
272
|
+
});
|
|
273
|
+
}
|
|
274
|
+
//# sourceMappingURL=slack.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slack.js","sourceRoot":"","sources":["../../src/commands/slack.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terminal.d.ts","sourceRoot":"","sources":["../../src/commands/terminal.ts"],"names":[],"mappings":"AAkBA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAG9C,MAAM,WAAW,YAAa,SAAQ,UAAU;CAAG;AA+DnD,wBAAgB,eAAe,CAAC,YAAY,CAAC,EAAE,YAAY,GAAG,OAAO,CAuDpE"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
// OPR.0.4.6.02 C3 — the `rig terminal` command family (the TUI-1 opaque verb +
|
|
2
|
+
// the operator's terminal-provider-ride entry). Three subcommands, all hitting
|
|
3
|
+
// the ONE canonical daemon composer (`/api/terminal/...`):
|
|
4
|
+
//
|
|
5
|
+
// rig terminal open <view> [--provider herdr|cmux] [--json]
|
|
6
|
+
// rig terminal views [--json]
|
|
7
|
+
// rig terminal status [--provider herdr|cmux] [--json]
|
|
8
|
+
//
|
|
9
|
+
// `<view>` resolves daemon-side: a rig name (per-rig derived) | `mission:<id>` |
|
|
10
|
+
// `slice:<id>` (derived) | a saved-view id. The result is the ONE shared
|
|
11
|
+
// `{ opened, absent, degraded }` partition, carried byte-identically here and
|
|
12
|
+
// in the route JSON (arch Q3).
|
|
13
|
+
//
|
|
14
|
+
// Exit semantics (PRD / arch Q3): a partial open WITH NAMES is a SUCCESS with
|
|
15
|
+
// disclosure → exit 0; a ZERO-pane open (nothing tiled: unknown view, provider
|
|
16
|
+
// down, every seat absent/degraded) → non-zero. `views`/`status` are always
|
|
17
|
+
// exit 0 unless the daemon is unreachable.
|
|
18
|
+
import { Command } from "commander";
|
|
19
|
+
import { DaemonClient } from "../client.js";
|
|
20
|
+
import { getDaemonStatus, getDaemonUrl } from "../daemon-lifecycle.js";
|
|
21
|
+
import { realDeps } from "./daemon.js";
|
|
22
|
+
async function withClient(deps, fn) {
|
|
23
|
+
const status = await getDaemonStatus(deps.lifecycleDeps);
|
|
24
|
+
if (status.state !== "running" || status.healthy === false) {
|
|
25
|
+
console.error("Daemon not running. Start it with: rig daemon start");
|
|
26
|
+
process.exitCode = 1;
|
|
27
|
+
return undefined;
|
|
28
|
+
}
|
|
29
|
+
const client = deps.clientFactory(getDaemonUrl(status));
|
|
30
|
+
return fn(client);
|
|
31
|
+
}
|
|
32
|
+
/** Print a plain daemon response (views/status). JSON = compact; human = pretty. */
|
|
33
|
+
function printResult(json, body, status) {
|
|
34
|
+
console.log(json ? JSON.stringify(body) : JSON.stringify(body, null, 2));
|
|
35
|
+
if (status >= 400)
|
|
36
|
+
process.exitCode = status >= 500 ? 2 : 1;
|
|
37
|
+
}
|
|
38
|
+
/** Human-format the honest-partial open result (opened/absent/degraded, each named). */
|
|
39
|
+
function humanOpen(r) {
|
|
40
|
+
const lines = [];
|
|
41
|
+
const tiled = r.opened.length;
|
|
42
|
+
lines.push(tiled > 0
|
|
43
|
+
? `Opened ${tiled} tile(s) in ${r.provider}${r.pages > 1 ? ` across ${r.pages} page(s)` : ""}.`
|
|
44
|
+
: `No tiles opened in ${r.provider}.`);
|
|
45
|
+
if (r.error)
|
|
46
|
+
lines.push(` provider: ${r.error}${r.code ? ` (${r.code})` : ""}`);
|
|
47
|
+
for (const seat of r.opened)
|
|
48
|
+
lines.push(` ● ${seat}`);
|
|
49
|
+
for (const a of r.absent)
|
|
50
|
+
lines.push(` ○ ${a.seat} — absent: ${a.reason}`);
|
|
51
|
+
for (const d of r.degraded)
|
|
52
|
+
lines.push(` ▲ ${d.seat} — skipped (${d.host}): ${d.reason}`);
|
|
53
|
+
return lines.join("\n");
|
|
54
|
+
}
|
|
55
|
+
/** Open exit rule: exit 0 iff at least one pane was tiled (partial-with-names is success). */
|
|
56
|
+
function printOpen(json, r, status) {
|
|
57
|
+
if (json) {
|
|
58
|
+
console.log(JSON.stringify(r));
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
console.log(humanOpen(r));
|
|
62
|
+
}
|
|
63
|
+
// A 4xx/5xx (bad input / unknown view / service down) OR a zero-pane open is a failure.
|
|
64
|
+
if (status >= 400 || r.opened.length === 0) {
|
|
65
|
+
process.exitCode = status >= 500 ? 2 : 1;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
export function terminalCommand(depsOverride) {
|
|
69
|
+
const cmd = new Command("terminal").description("Open OpenRig views (agent terminals) as tiles in a terminal provider (herdr / cmux)");
|
|
70
|
+
const getDeps = () => depsOverride ?? {
|
|
71
|
+
lifecycleDeps: realDeps(),
|
|
72
|
+
clientFactory: (url) => new DaemonClient(url),
|
|
73
|
+
};
|
|
74
|
+
cmd
|
|
75
|
+
.command("open")
|
|
76
|
+
.argument("<view>", "a rig name, mission:<id>, slice:<id>, or a saved-view id")
|
|
77
|
+
.description("Open every live agent in the view as an interactive terminal tile")
|
|
78
|
+
.option("--provider <name>", "terminal provider: herdr (default) or cmux (best-effort)")
|
|
79
|
+
.option("--json", "JSON output for agents")
|
|
80
|
+
.action(async (view, opts) => {
|
|
81
|
+
const deps = getDeps();
|
|
82
|
+
await withClient(deps, async (client) => {
|
|
83
|
+
const body = { view, ...(opts.provider ? { provider: opts.provider } : {}) };
|
|
84
|
+
const res = await client.post("/api/terminal/open", body);
|
|
85
|
+
printOpen(opts.json ?? false, res.data, res.status);
|
|
86
|
+
});
|
|
87
|
+
});
|
|
88
|
+
cmd
|
|
89
|
+
.command("views")
|
|
90
|
+
.description("List saved views + the rigs openable as derived views")
|
|
91
|
+
.option("--json", "JSON output for agents")
|
|
92
|
+
.action(async (opts) => {
|
|
93
|
+
const deps = getDeps();
|
|
94
|
+
await withClient(deps, async (client) => {
|
|
95
|
+
const res = await client.get("/api/terminal/views");
|
|
96
|
+
printResult(opts.json ?? false, res.data, res.status);
|
|
97
|
+
});
|
|
98
|
+
});
|
|
99
|
+
cmd
|
|
100
|
+
.command("status")
|
|
101
|
+
.description("Show terminal provider availability + liveness (doctor)")
|
|
102
|
+
.option("--provider <name>", "restrict to one provider (herdr / cmux)")
|
|
103
|
+
.option("--json", "JSON output for agents")
|
|
104
|
+
.action(async (opts) => {
|
|
105
|
+
const deps = getDeps();
|
|
106
|
+
await withClient(deps, async (client) => {
|
|
107
|
+
const path = opts.provider
|
|
108
|
+
? `/api/terminal/status?provider=${encodeURIComponent(opts.provider)}`
|
|
109
|
+
: "/api/terminal/status";
|
|
110
|
+
const res = await client.get(path);
|
|
111
|
+
printResult(opts.json ?? false, res.data, res.status);
|
|
112
|
+
});
|
|
113
|
+
});
|
|
114
|
+
return cmd;
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=terminal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terminal.js","sourceRoot":"","sources":["../../src/commands/terminal.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,9 @@
|
|
|
1
1
|
import { Command } from "commander";
|
|
2
2
|
import type { StatusDeps } from "./status.js";
|
|
3
|
-
|
|
3
|
+
import { loadHostRegistry } from "../host-registry.js";
|
|
4
|
+
export interface TranscriptDeps extends StatusDeps {
|
|
5
|
+
/** Test seam: inject a registry loader so no real ~/.openrig is touched. */
|
|
6
|
+
hostRegistryLoader?: () => ReturnType<typeof loadHostRegistry>;
|
|
7
|
+
}
|
|
8
|
+
export declare function transcriptCommand(depsOverride?: TranscriptDeps): Command;
|
|
4
9
|
//# sourceMappingURL=transcript.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transcript.d.ts","sourceRoot":"","sources":["../../src/commands/transcript.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"transcript.d.ts","sourceRoot":"","sources":["../../src/commands/transcript.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAkC,MAAM,qBAAqB,CAAC;AAKvF,MAAM,WAAW,cAAe,SAAQ,UAAU;IAChD,4EAA4E;IAC5E,kBAAkB,CAAC,EAAE,MAAM,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC;CAChE;AAED,wBAAgB,iBAAiB,CAAC,YAAY,CAAC,EAAE,cAAc,GAAG,OAAO,CA4FxE"}
|
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
import { Command } from "commander";
|
|
2
|
+
import { resolveEffectiveHost } from "../host-selection.js";
|
|
2
3
|
import { DaemonClient } from "../client.js";
|
|
3
4
|
import { getDaemonStatus, getDaemonUrl } from "../daemon-lifecycle.js";
|
|
4
5
|
import { realDeps } from "./daemon.js";
|
|
6
|
+
import { loadHostRegistry, resolveHost, hostDisplayTarget } from "../host-registry.js";
|
|
7
|
+
import { emitCrossHostError, emitRemoteHttpFailure } from "../cross-host-cli-helpers.js";
|
|
8
|
+
import { resolveCrossHostTarget } from "../cross-host-target.js";
|
|
9
|
+
import { runRemoteHttpOp } from "../remote-host-ops.js";
|
|
5
10
|
export function transcriptCommand(depsOverride) {
|
|
6
11
|
const cmd = new Command("transcript").description("Read agent transcript output");
|
|
7
12
|
const getDeps = () => depsOverride ?? {
|
|
@@ -12,31 +17,60 @@ export function transcriptCommand(depsOverride) {
|
|
|
12
17
|
.argument("<session>", "Session name (e.g. dev-impl@my-rig)")
|
|
13
18
|
.option("--tail <lines>", "Show last N lines (default: 50)", "50")
|
|
14
19
|
.option("--grep <pattern>", "Search for lines matching pattern (regex)")
|
|
20
|
+
.option("--host <id>", "Read from a remote host declared in ~/.openrig/hosts.yaml (http hosts only — CLI-direct to the remote daemon's transcript routes)")
|
|
15
21
|
.option("--json", "JSON output for agents")
|
|
16
22
|
.addHelpText("after", `
|
|
17
23
|
Examples:
|
|
18
24
|
rig transcript dev-impl@my-rig --tail 100
|
|
19
25
|
rig transcript dev-impl@my-rig --grep "decision|architecture"
|
|
20
|
-
rig transcript dev-impl@my-rig --json
|
|
26
|
+
rig transcript dev-impl@my-rig --json
|
|
27
|
+
rig transcript --host vps-b dev-impl@my-rig --tail 100
|
|
28
|
+
rig transcript dev-impl@my-rig@vps-b --grep "handoff"
|
|
29
|
+
|
|
30
|
+
--host reads the transcript from a remote host declared in
|
|
31
|
+
~/.openrig/hosts.yaml, CLI-direct against that daemon's shipped transcript
|
|
32
|
+
routes (http-registered hosts, e.g. pair-registered; an ssh-registered host
|
|
33
|
+
fails with the structured transport-requirement error). Output shape is the
|
|
34
|
+
origin's, verbatim. A session of the form agent@rig@host is sugar for --host
|
|
35
|
+
when the suffix is a REGISTERED host id (explicit --host > sugar > persisted
|
|
36
|
+
selection).`)
|
|
21
37
|
.action(async (session, opts) => {
|
|
38
|
+
// OPR.0.4.6.MH4 C2 — cross-host observe: explicit --host > the
|
|
39
|
+
// `agent@rig@host` target sugar > the persisted host selection
|
|
40
|
+
// (resolveEffectiveHost). The local path below is byte-untouched.
|
|
41
|
+
const explicitHost = opts.host;
|
|
42
|
+
opts.host = resolveEffectiveHost(opts.host);
|
|
22
43
|
const deps = getDeps();
|
|
23
|
-
const
|
|
24
|
-
if (
|
|
25
|
-
console.error(
|
|
44
|
+
const targetResolution = resolveCrossHostTarget(session, explicitHost, deps.hostRegistryLoader);
|
|
45
|
+
if (!targetResolution.ok) {
|
|
46
|
+
console.error(targetResolution.error);
|
|
26
47
|
process.exitCode = 1;
|
|
27
48
|
return;
|
|
28
49
|
}
|
|
29
|
-
|
|
50
|
+
session = targetResolution.target;
|
|
51
|
+
const crossHostHint = targetResolution.hint;
|
|
52
|
+
opts.host = explicitHost ?? targetResolution.sugarHost ?? opts.host;
|
|
30
53
|
// --grep takes precedence over --tail when both given
|
|
31
54
|
const useGrep = !!opts.grep;
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
55
|
+
const tailLines = parseInt(opts.tail ?? "50", 10);
|
|
56
|
+
const apiPath = useGrep
|
|
57
|
+
? `/api/transcripts/${encodeURIComponent(session)}/grep?pattern=${encodeURIComponent(opts.grep)}`
|
|
58
|
+
: `/api/transcripts/${encodeURIComponent(session)}/tail?lines=${isNaN(tailLines) ? 50 : tailLines}`;
|
|
59
|
+
// --- Cross-host path (CLI-direct GET to the remote daemon's shipped
|
|
60
|
+
// transcript routes — the SAME paths the local path builds, origin
|
|
61
|
+
// shape verbatim; read-class deadline; daemon untouched). ---
|
|
62
|
+
if (opts.host) {
|
|
63
|
+
await runCrossHostTranscript(opts.host, apiPath, useGrep, opts, deps, crossHostHint);
|
|
64
|
+
return;
|
|
35
65
|
}
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
66
|
+
const status = await getDaemonStatus(deps.lifecycleDeps);
|
|
67
|
+
if (status.state !== "running" || status.healthy === false) {
|
|
68
|
+
console.error("Daemon not running. Start it with: rig daemon start");
|
|
69
|
+
process.exitCode = 1;
|
|
70
|
+
return;
|
|
39
71
|
}
|
|
72
|
+
const client = deps.clientFactory(getDaemonUrl(status));
|
|
73
|
+
const res = await client.get(apiPath);
|
|
40
74
|
if (opts.json) {
|
|
41
75
|
console.log(JSON.stringify(res.data));
|
|
42
76
|
if (res.status >= 400)
|
|
@@ -46,32 +80,81 @@ Examples:
|
|
|
46
80
|
if (res.status >= 400) {
|
|
47
81
|
const error = res.data["error"];
|
|
48
82
|
console.error(error ?? `Transcript request failed (HTTP ${res.status})`);
|
|
83
|
+
// MH-4 §4 loud-failure hint: 3-part-shaped target, unregistered suffix.
|
|
84
|
+
if (crossHostHint)
|
|
85
|
+
console.error(`hint: ${crossHostHint}`);
|
|
49
86
|
process.exitCode = 1;
|
|
50
87
|
return;
|
|
51
88
|
}
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
89
|
+
renderTranscript(res.data, useGrep);
|
|
90
|
+
});
|
|
91
|
+
return cmd;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* OPR.0.4.6.MH4 C2 — cross-host transcript over http, CLI-DIRECT to the
|
|
95
|
+
* remote daemon's shipped GET /api/transcripts/:session/tail | /grep
|
|
96
|
+
* (zero daemon-side changes; the MH-2 read-through PATTERN, one hop from
|
|
97
|
+
* the bearer-capable CLI). An ssh-registered host surfaces runRemoteHttpOp's
|
|
98
|
+
* structured transport error — never a silent wrong-transport attempt.
|
|
99
|
+
*/
|
|
100
|
+
async function runCrossHostTranscript(hostId, apiPath, useGrep, opts, deps, hint) {
|
|
101
|
+
// Resolve the host in the caller (the send/capture pattern) so an unknown
|
|
102
|
+
// host surfaces as the SAME `unknown-host` step class across all four
|
|
103
|
+
// verbs, and the banner carries the display target uniformly.
|
|
104
|
+
const loader = deps.hostRegistryLoader ?? loadHostRegistry;
|
|
105
|
+
const registry = loader();
|
|
106
|
+
if (!registry.ok) {
|
|
107
|
+
emitCrossHostError(hostId, "registry-load-failed", registry.error, opts.json);
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
const resolved = resolveHost(registry.registry, hostId);
|
|
111
|
+
if (!resolved.ok) {
|
|
112
|
+
emitCrossHostError(hostId, "unknown-host", hint ? `${resolved.error} (${hint})` : resolved.error, opts.json);
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
const host = resolved.host;
|
|
116
|
+
const result = await runRemoteHttpOp(hostId, "GET", apiPath, undefined, deps, {});
|
|
117
|
+
if (opts.json) {
|
|
118
|
+
console.log(JSON.stringify({
|
|
119
|
+
cross_host: { host: host.id, target: hostDisplayTarget(host), transport: "http" },
|
|
120
|
+
result,
|
|
121
|
+
...(!result.ok && hint ? { hint } : {}),
|
|
122
|
+
}));
|
|
123
|
+
if (!result.ok)
|
|
124
|
+
process.exitCode = 1;
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
if (!result.ok) {
|
|
128
|
+
emitRemoteHttpFailure(host.id, hostDisplayTarget(host), result, false, hint);
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
console.log(`[via host=${host.id} (${hostDisplayTarget(host)})]`);
|
|
132
|
+
renderTranscript((result.data ?? {}), useGrep);
|
|
133
|
+
}
|
|
134
|
+
/** One renderer, two callers — the remote output shape is the origin's,
|
|
135
|
+
* so local and cross-host reads render identically. */
|
|
136
|
+
function renderTranscript(data, useGrep) {
|
|
137
|
+
if (useGrep) {
|
|
138
|
+
const matches = data["matches"];
|
|
139
|
+
if (matches && matches.length > 0) {
|
|
140
|
+
for (const line of matches) {
|
|
141
|
+
console.log(line);
|
|
61
142
|
}
|
|
62
143
|
}
|
|
63
144
|
else {
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
145
|
+
console.log("No matches found.");
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
const content = data["content"];
|
|
150
|
+
if (content) {
|
|
151
|
+
// Print each line via console.log for consistent capture in tests and terminal
|
|
152
|
+
const lines = content.split("\n");
|
|
153
|
+
for (const line of lines) {
|
|
154
|
+
if (line)
|
|
155
|
+
console.log(line);
|
|
72
156
|
}
|
|
73
157
|
}
|
|
74
|
-
}
|
|
75
|
-
return cmd;
|
|
158
|
+
}
|
|
76
159
|
}
|
|
77
160
|
//# sourceMappingURL=transcript.js.map
|