@openrig/cli 0.5.2 → 0.5.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/daemon/assets/plugins/openrig-core/.claude-plugin/plugin.json +1 -1
- package/daemon/assets/plugins/openrig-core/.codex-plugin/plugin.json +1 -1
- package/daemon/assets/plugins/openrig-core/README.md +1 -1
- package/daemon/assets/plugins/openrig-core/hooks/claude.json +36 -0
- package/daemon/assets/plugins/openrig-core/hooks/codex.json +27 -0
- package/daemon/assets/plugins/openrig-core/hooks/scripts/refocus.cjs +152 -0
- package/daemon/assets/plugins/openrig-core/skills/claude-compaction-restore/SKILL.md +35 -3
- package/daemon/assets/plugins/openrig-core/skills/claude-compaction-restore/scripts/precompact-hook.mjs +8 -95
- package/daemon/assets/plugins/openrig-core/skills/claude-compaction-restore/scripts/restore-from-jsonl.mjs +63 -20
- package/daemon/assets/plugins/openrig-core/skills/forming-an-openrig-mental-model/SKILL.md +6 -2
- package/daemon/assets/plugins/openrig-core/skills/messaging-the-human/SKILL.md +28 -2
- package/daemon/assets/plugins/openrig-core/skills/mission-slice-sop/SKILL.md +42 -52
- package/daemon/assets/plugins/openrig-core/skills/openrig-skills/SKILL.md +26 -1
- package/daemon/assets/plugins/openrig-core/skills/openrig-user/SKILL.md +7 -2
- package/daemon/assets/plugins/openrig-core/skills/orienting-to-an-inherited-seat/CHANGELOG.md +64 -0
- package/daemon/assets/plugins/openrig-core/skills/orienting-to-an-inherited-seat/SKILL.md +235 -0
- package/daemon/assets/plugins/openrig-core/skills/queue-handoff/SKILL.md +31 -1
- package/daemon/assets/plugins/openrig-core/skills/retiring-and-inheriting-a-seat/CHANGELOG.md +48 -0
- package/daemon/assets/plugins/openrig-core/skills/retiring-and-inheriting-a-seat/SKILL.md +211 -0
- package/daemon/assets/plugins/openrig-core/skills/seat-continuity-and-handover/SKILL.md +8 -0
- package/daemon/assets/plugins/openrig-core/skills/software-for-agents/SKILL.md +31 -9
- package/daemon/context-packs/skills/core/agent-starters/SKILL.md +132 -0
- package/daemon/context-packs/skills/core/agent-starters/manifest.yaml +9 -0
- package/daemon/context-packs/skills/core/agent-startup-and-context-ingestion/SKILL.md +112 -0
- package/daemon/context-packs/skills/core/agent-startup-and-context-ingestion/manifest.yaml +9 -0
- package/daemon/context-packs/skills/core/attention-queue/SKILL.md +264 -0
- package/daemon/context-packs/skills/core/attention-queue/manifest.yaml +9 -0
- package/daemon/context-packs/skills/core/cross-host-rig-commands/SKILL.md +195 -0
- package/daemon/context-packs/skills/core/cross-host-rig-commands/manifest.yaml +9 -0
- package/daemon/context-packs/skills/core/human-in-the-loop/SKILL.md +104 -0
- package/daemon/context-packs/skills/core/human-in-the-loop/manifest.yaml +9 -0
- package/daemon/context-packs/skills/core/openrig-architect/SKILL.md +378 -0
- package/daemon/context-packs/skills/core/openrig-architect/manifest.yaml +9 -0
- package/daemon/context-packs/skills/core/openrig-cmux/SKILL.md +81 -0
- package/daemon/context-packs/skills/core/openrig-cmux/manifest.yaml +9 -0
- package/daemon/context-packs/skills/core/openrig-herdr/SKILL.md +153 -0
- package/daemon/context-packs/skills/core/openrig-herdr/manifest.yaml +9 -0
- package/daemon/context-packs/skills/core/openrig-upgrade/SKILL.md +460 -0
- package/daemon/context-packs/skills/core/openrig-upgrade/manifest.yaml +9 -0
- package/daemon/context-packs/skills/core/rig-bundles-and-shareable-artifacts/SKILL.md +101 -0
- package/daemon/context-packs/skills/core/rig-bundles-and-shareable-artifacts/manifest.yaml +9 -0
- package/daemon/context-packs/skills/core/rig-lifecycle/SKILL.md +127 -0
- package/daemon/context-packs/skills/core/rig-lifecycle/manifest.yaml +9 -0
- package/daemon/context-packs/skills/core/session-source-fork/SKILL.md +160 -0
- package/daemon/context-packs/skills/core/session-source-fork/manifest.yaml +9 -0
- package/daemon/context-packs/skills/core/specification-system/SKILL.md +103 -0
- package/daemon/context-packs/skills/core/specification-system/manifest.yaml +9 -0
- package/daemon/context-packs/skills/core/topology-mutation-and-seat-management/SKILL.md +118 -0
- package/daemon/context-packs/skills/core/topology-mutation-and-seat-management/manifest.yaml +9 -0
- package/daemon/context-packs/skills/core/watchdog/SKILL.md +126 -0
- package/daemon/context-packs/skills/core/watchdog/manifest.yaml +9 -0
- package/daemon/context-packs/skills/pm/backlog-capture/SKILL.md +43 -0
- package/daemon/context-packs/skills/pm/backlog-capture/manifest.yaml +9 -0
- package/daemon/context-packs/skills/pm/context-builder/SKILL.md +87 -0
- package/daemon/context-packs/skills/pm/context-builder/manifest.yaml +9 -0
- package/daemon/context-packs/skills/pm/exec-summary/SKILL.md +84 -0
- package/daemon/context-packs/skills/pm/exec-summary/manifest.yaml +9 -0
- package/daemon/context-packs/skills/pm/office-hours/SKILL.md +129 -0
- package/daemon/context-packs/skills/pm/office-hours/manifest.yaml +9 -0
- package/daemon/context-packs/skills/pm/plan-review/SKILL.md +98 -0
- package/daemon/context-packs/skills/pm/plan-review/manifest.yaml +9 -0
- package/daemon/context-packs/skills/pm/requirements-writer/SKILL.md +113 -0
- package/daemon/context-packs/skills/pm/requirements-writer/manifest.yaml +9 -0
- package/daemon/context-packs/skills/pm/ui-mockup/SKILL.md +76 -0
- package/daemon/context-packs/skills/pm/ui-mockup/manifest.yaml +9 -0
- package/daemon/context-packs/skills/pods/development-team/SKILL.md +156 -0
- package/daemon/context-packs/skills/pods/development-team/manifest.yaml +9 -0
- package/daemon/context-packs/skills/pods/orchestration-team/SKILL.md +307 -0
- package/daemon/context-packs/skills/pods/orchestration-team/manifest.yaml +9 -0
- package/daemon/context-packs/skills/pods/oversight-team/SKILL.md +106 -0
- package/daemon/context-packs/skills/pods/oversight-team/manifest.yaml +9 -0
- package/daemon/context-packs/skills/pods/review-team/SKILL.md +213 -0
- package/daemon/context-packs/skills/pods/review-team/manifest.yaml +9 -0
- package/daemon/context-packs/skills/process/agent-browser/LOCAL-INSIGHTS.md +189 -0
- package/daemon/context-packs/skills/process/agent-browser/OPENRIG.md +40 -0
- package/daemon/context-packs/skills/process/agent-browser/SKILL.md +427 -0
- package/daemon/context-packs/skills/process/agent-browser/manifest.yaml +13 -0
- package/daemon/context-packs/skills/process/brainstorming/OPENRIG.md +48 -0
- package/daemon/context-packs/skills/process/brainstorming/SKILL.md +107 -0
- package/daemon/context-packs/skills/process/brainstorming/manifest.yaml +11 -0
- package/daemon/context-packs/skills/process/context-engineering/SKILL.md +479 -0
- package/daemon/context-packs/skills/process/context-engineering/manifest.yaml +9 -0
- package/daemon/context-packs/skills/process/dogfood/SKILL.md +225 -0
- package/daemon/context-packs/skills/process/dogfood/manifest.yaml +13 -0
- package/daemon/context-packs/skills/process/dogfood/references/issue-taxonomy.md +109 -0
- package/daemon/context-packs/skills/process/dogfood/templates/dogfood-report-template.md +53 -0
- package/daemon/context-packs/skills/process/executing-plans/OPENRIG.md +56 -0
- package/daemon/context-packs/skills/process/executing-plans/SKILL.md +94 -0
- package/daemon/context-packs/skills/process/executing-plans/manifest.yaml +11 -0
- package/daemon/context-packs/skills/process/frontend-design/LICENSE.txt +177 -0
- package/daemon/context-packs/skills/process/frontend-design/SKILL.md +50 -0
- package/daemon/context-packs/skills/process/frontend-design/manifest.yaml +11 -0
- package/daemon/context-packs/skills/process/systematic-debugging/SKILL.md +301 -0
- package/daemon/context-packs/skills/process/systematic-debugging/condition-based-waiting-example.ts +158 -0
- package/daemon/context-packs/skills/process/systematic-debugging/condition-based-waiting.md +115 -0
- package/daemon/context-packs/skills/process/systematic-debugging/defense-in-depth.md +122 -0
- package/daemon/context-packs/skills/process/systematic-debugging/find-polluter.sh +63 -0
- package/daemon/context-packs/skills/process/systematic-debugging/manifest.yaml +19 -0
- package/daemon/context-packs/skills/process/systematic-debugging/root-cause-tracing.md +169 -0
- package/daemon/context-packs/skills/process/test-driven-development/SKILL.md +385 -0
- package/daemon/context-packs/skills/process/test-driven-development/manifest.yaml +11 -0
- package/daemon/context-packs/skills/process/test-driven-development/testing-anti-patterns.md +299 -0
- package/daemon/context-packs/skills/process/using-superpowers/OPENRIG.md +48 -0
- package/daemon/context-packs/skills/process/using-superpowers/SKILL.md +106 -0
- package/daemon/context-packs/skills/process/using-superpowers/manifest.yaml +11 -0
- package/daemon/context-packs/skills/process/verification-before-completion/SKILL.md +155 -0
- package/daemon/context-packs/skills/process/verification-before-completion/manifest.yaml +9 -0
- package/daemon/context-packs/skills/process/writing-plans/OPENRIG.md +52 -0
- package/daemon/context-packs/skills/process/writing-plans/SKILL.md +126 -0
- package/daemon/context-packs/skills/process/writing-plans/manifest.yaml +11 -0
- package/daemon/context-packs/world/install/01-world-from-primitives.md +97 -0
- package/daemon/context-packs/world/install/02-permission-self-sleep.md +141 -0
- package/daemon/context-packs/world/install/03-what-this-is-for.md +86 -0
- package/daemon/context-packs/world/install/04-ontology.md +790 -0
- package/daemon/context-packs/world/install/05-harness-power-use.md +355 -0
- package/daemon/context-packs/world/install/06-a-competent-turn.md +225 -0
- package/daemon/context-packs/world/install/manifest.yaml +125 -0
- package/daemon/context-packs/world/install/reference-material.md +125 -0
- package/daemon/context-packs/world/install/what-you-can-do.md +416 -0
- package/daemon/dist/adapters/claude-code-adapter.d.ts.map +1 -1
- package/daemon/dist/adapters/claude-code-adapter.js +7 -4
- package/daemon/dist/adapters/claude-code-adapter.js.map +1 -1
- package/daemon/dist/adapters/claude-resume.js +2 -2
- package/daemon/dist/adapters/claude-resume.js.map +1 -1
- package/daemon/dist/adapters/tmux.d.ts +41 -2
- package/daemon/dist/adapters/tmux.d.ts.map +1 -1
- package/daemon/dist/adapters/tmux.js +58 -18
- package/daemon/dist/adapters/tmux.js.map +1 -1
- package/daemon/dist/adapters/yolo-mode.d.ts +18 -0
- package/daemon/dist/adapters/yolo-mode.d.ts.map +1 -1
- package/daemon/dist/adapters/yolo-mode.js +21 -0
- package/daemon/dist/adapters/yolo-mode.js.map +1 -1
- package/daemon/dist/build-info.js +3 -3
- package/daemon/dist/daemon-db-path.d.ts.map +1 -1
- package/daemon/dist/daemon-db-path.js +50 -2
- package/daemon/dist/daemon-db-path.js.map +1 -1
- package/daemon/dist/domain/codex-thread-id.d.ts +95 -0
- package/daemon/dist/domain/codex-thread-id.d.ts.map +1 -1
- package/daemon/dist/domain/codex-thread-id.js +171 -2
- package/daemon/dist/domain/codex-thread-id.js.map +1 -1
- package/daemon/dist/domain/context-packs/context-pack-types.d.ts +48 -0
- package/daemon/dist/domain/context-packs/context-pack-types.d.ts.map +1 -1
- package/daemon/dist/domain/context-packs/context-pack-types.js +8 -0
- package/daemon/dist/domain/context-packs/context-pack-types.js.map +1 -1
- package/daemon/dist/domain/context-packs/manifest-parser.d.ts.map +1 -1
- package/daemon/dist/domain/context-packs/manifest-parser.js +234 -2
- package/daemon/dist/domain/context-packs/manifest-parser.js.map +1 -1
- package/daemon/dist/domain/context-packs/probe-eval-bridge.d.ts +34 -0
- package/daemon/dist/domain/context-packs/probe-eval-bridge.d.ts.map +1 -0
- package/daemon/dist/domain/context-packs/probe-eval-bridge.js +38 -0
- package/daemon/dist/domain/context-packs/probe-eval-bridge.js.map +1 -0
- package/daemon/dist/domain/context-packs/profile-composer.d.ts +49 -0
- package/daemon/dist/domain/context-packs/profile-composer.d.ts.map +1 -0
- package/daemon/dist/domain/context-packs/profile-composer.js +125 -0
- package/daemon/dist/domain/context-packs/profile-composer.js.map +1 -0
- package/daemon/dist/domain/context-packs/profile-source-resolver.d.ts +53 -0
- package/daemon/dist/domain/context-packs/profile-source-resolver.d.ts.map +1 -0
- package/daemon/dist/domain/context-packs/profile-source-resolver.js +129 -0
- package/daemon/dist/domain/context-packs/profile-source-resolver.js.map +1 -0
- package/daemon/dist/domain/context-packs/seat-recap-store.d.ts +48 -0
- package/daemon/dist/domain/context-packs/seat-recap-store.d.ts.map +1 -0
- package/daemon/dist/domain/context-packs/seat-recap-store.js +123 -0
- package/daemon/dist/domain/context-packs/seat-recap-store.js.map +1 -0
- package/daemon/dist/domain/markdown-address.d.ts +56 -0
- package/daemon/dist/domain/markdown-address.d.ts.map +1 -0
- package/daemon/dist/domain/markdown-address.js +188 -0
- package/daemon/dist/domain/markdown-address.js.map +1 -0
- package/daemon/dist/domain/model-divergence/current-generation-record.d.ts +8 -2
- package/daemon/dist/domain/model-divergence/current-generation-record.d.ts.map +1 -1
- package/daemon/dist/domain/model-divergence/current-generation-record.js +1 -1
- package/daemon/dist/domain/model-divergence/current-generation-record.js.map +1 -1
- package/daemon/dist/domain/model-divergence/model-divergence-monitor.d.ts +33 -21
- package/daemon/dist/domain/model-divergence/model-divergence-monitor.d.ts.map +1 -1
- package/daemon/dist/domain/model-divergence/model-divergence-monitor.js +64 -55
- package/daemon/dist/domain/model-divergence/model-divergence-monitor.js.map +1 -1
- package/daemon/dist/domain/periodic-snapshot-scheduler.d.ts +4 -0
- package/daemon/dist/domain/periodic-snapshot-scheduler.d.ts.map +1 -1
- package/daemon/dist/domain/periodic-snapshot-scheduler.js +5 -1
- package/daemon/dist/domain/periodic-snapshot-scheduler.js.map +1 -1
- package/daemon/dist/domain/permission-drift-observer.d.ts.map +1 -1
- package/daemon/dist/domain/permission-drift-observer.js +6 -1
- package/daemon/dist/domain/permission-drift-observer.js.map +1 -1
- package/daemon/dist/domain/plugin-discovery-service.d.ts +16 -0
- package/daemon/dist/domain/plugin-discovery-service.d.ts.map +1 -1
- package/daemon/dist/domain/plugin-discovery-service.js +175 -1
- package/daemon/dist/domain/plugin-discovery-service.js.map +1 -1
- package/daemon/dist/domain/plugin-vendor-service.d.ts +9 -5
- package/daemon/dist/domain/plugin-vendor-service.d.ts.map +1 -1
- package/daemon/dist/domain/plugin-vendor-service.js +101 -12
- package/daemon/dist/domain/plugin-vendor-service.js.map +1 -1
- package/daemon/dist/domain/process-census.d.ts +25 -0
- package/daemon/dist/domain/process-census.d.ts.map +1 -0
- package/daemon/dist/domain/process-census.js +47 -0
- package/daemon/dist/domain/process-census.js.map +1 -0
- package/daemon/dist/domain/queue-repository.d.ts +3 -1
- package/daemon/dist/domain/queue-repository.d.ts.map +1 -1
- package/daemon/dist/domain/queue-repository.js +50 -2
- package/daemon/dist/domain/queue-repository.js.map +1 -1
- package/daemon/dist/domain/reconciler.d.ts.map +1 -1
- package/daemon/dist/domain/reconciler.js +6 -1
- package/daemon/dist/domain/reconciler.js.map +1 -1
- package/daemon/dist/domain/resume-metadata-refresher.d.ts +31 -2
- package/daemon/dist/domain/resume-metadata-refresher.d.ts.map +1 -1
- package/daemon/dist/domain/resume-metadata-refresher.js +64 -29
- package/daemon/dist/domain/resume-metadata-refresher.js.map +1 -1
- package/daemon/dist/domain/review/compose.d.ts +5 -26
- package/daemon/dist/domain/review/compose.d.ts.map +1 -1
- package/daemon/dist/domain/review/compose.js +31 -57
- package/daemon/dist/domain/review/compose.js.map +1 -1
- package/daemon/dist/domain/rig-repository.d.ts +4 -0
- package/daemon/dist/domain/rig-repository.d.ts.map +1 -1
- package/daemon/dist/domain/rig-repository.js +9 -0
- package/daemon/dist/domain/rig-repository.js.map +1 -1
- package/daemon/dist/domain/rigspec-instantiator.d.ts +13 -0
- package/daemon/dist/domain/rigspec-instantiator.d.ts.map +1 -1
- package/daemon/dist/domain/rigspec-instantiator.js +71 -0
- package/daemon/dist/domain/rigspec-instantiator.js.map +1 -1
- package/daemon/dist/domain/rigspec-schema.d.ts.map +1 -1
- package/daemon/dist/domain/rigspec-schema.js +19 -3
- package/daemon/dist/domain/rigspec-schema.js.map +1 -1
- package/daemon/dist/domain/running-name-guard.d.ts +52 -0
- package/daemon/dist/domain/running-name-guard.d.ts.map +1 -0
- package/daemon/dist/domain/running-name-guard.js +34 -0
- package/daemon/dist/domain/running-name-guard.js.map +1 -0
- package/daemon/dist/domain/scope/logical-checkbox.d.ts +26 -0
- package/daemon/dist/domain/scope/logical-checkbox.d.ts.map +1 -0
- package/daemon/dist/domain/scope/logical-checkbox.js +65 -0
- package/daemon/dist/domain/scope/logical-checkbox.js.map +1 -0
- package/daemon/dist/domain/scope/plan-lock-artifacts.d.ts +1 -1
- package/daemon/dist/domain/scope/plan-lock-artifacts.d.ts.map +1 -1
- package/daemon/dist/domain/scope/plan-lock-artifacts.js +2 -2
- package/daemon/dist/domain/scope/plan-lock-artifacts.js.map +1 -1
- package/daemon/dist/domain/scope/scaffold-placeholder.d.ts +22 -0
- package/daemon/dist/domain/scope/scaffold-placeholder.d.ts.map +1 -1
- package/daemon/dist/domain/scope/scaffold-placeholder.js +24 -0
- package/daemon/dist/domain/scope/scaffold-placeholder.js.map +1 -1
- package/daemon/dist/domain/seat-activity-service.d.ts +1 -0
- package/daemon/dist/domain/seat-activity-service.d.ts.map +1 -1
- package/daemon/dist/domain/seat-activity-service.js +39 -23
- package/daemon/dist/domain/seat-activity-service.js.map +1 -1
- package/daemon/dist/domain/seat-handover-service.d.ts +22 -0
- package/daemon/dist/domain/seat-handover-service.d.ts.map +1 -1
- package/daemon/dist/domain/seat-handover-service.js +32 -2
- package/daemon/dist/domain/seat-handover-service.js.map +1 -1
- package/daemon/dist/domain/seat-lifecycle-service.d.ts +97 -0
- package/daemon/dist/domain/seat-lifecycle-service.d.ts.map +1 -0
- package/daemon/dist/domain/seat-lifecycle-service.js +312 -0
- package/daemon/dist/domain/seat-lifecycle-service.js.map +1 -0
- package/daemon/dist/domain/session-transport.d.ts +16 -5
- package/daemon/dist/domain/session-transport.d.ts.map +1 -1
- package/daemon/dist/domain/session-transport.js +155 -16
- package/daemon/dist/domain/session-transport.js.map +1 -1
- package/daemon/dist/domain/shell-classifier.d.ts +23 -0
- package/daemon/dist/domain/shell-classifier.d.ts.map +1 -0
- package/daemon/dist/domain/shell-classifier.js +36 -0
- package/daemon/dist/domain/shell-classifier.js.map +1 -0
- package/daemon/dist/domain/slices/slice-detail-projector.d.ts.map +1 -1
- package/daemon/dist/domain/slices/slice-detail-projector.js +10 -1
- package/daemon/dist/domain/slices/slice-detail-projector.js.map +1 -1
- package/daemon/dist/domain/spec-validation-advisory.d.ts +17 -0
- package/daemon/dist/domain/spec-validation-advisory.d.ts.map +1 -0
- package/daemon/dist/domain/spec-validation-advisory.js +38 -0
- package/daemon/dist/domain/spec-validation-advisory.js.map +1 -0
- package/daemon/dist/domain/successor-session-launcher.d.ts +7 -0
- package/daemon/dist/domain/successor-session-launcher.d.ts.map +1 -1
- package/daemon/dist/domain/successor-session-launcher.js +38 -1
- package/daemon/dist/domain/successor-session-launcher.js.map +1 -1
- package/daemon/dist/domain/topology-defaults-installer.d.ts +47 -0
- package/daemon/dist/domain/topology-defaults-installer.d.ts.map +1 -0
- package/daemon/dist/domain/topology-defaults-installer.js +92 -0
- package/daemon/dist/domain/topology-defaults-installer.js.map +1 -0
- package/daemon/dist/domain/transcript-rotation.d.ts +4 -0
- package/daemon/dist/domain/transcript-rotation.d.ts.map +1 -1
- package/daemon/dist/domain/transcript-rotation.js +61 -3
- package/daemon/dist/domain/transcript-rotation.js.map +1 -1
- package/daemon/dist/domain/transcript-store.d.ts.map +1 -1
- package/daemon/dist/domain/transcript-store.js +9 -2
- package/daemon/dist/domain/transcript-store.js.map +1 -1
- package/daemon/dist/domain/types.d.ts +39 -0
- 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 +10 -1
- package/daemon/dist/domain/user-settings/settings-store.d.ts.map +1 -1
- package/daemon/dist/domain/user-settings/settings-store.js +39 -0
- package/daemon/dist/domain/user-settings/settings-store.js.map +1 -1
- package/daemon/dist/routes/context-packs.d.ts.map +1 -1
- package/daemon/dist/routes/context-packs.js +205 -0
- package/daemon/dist/routes/context-packs.js.map +1 -1
- package/daemon/dist/routes/queue.d.ts.map +1 -1
- package/daemon/dist/routes/queue.js +29 -24
- package/daemon/dist/routes/queue.js.map +1 -1
- package/daemon/dist/routes/rigspec.js +20 -6
- package/daemon/dist/routes/rigspec.js.map +1 -1
- package/daemon/dist/routes/seat.d.ts.map +1 -1
- package/daemon/dist/routes/seat.js +69 -0
- package/daemon/dist/routes/seat.js.map +1 -1
- package/daemon/dist/routes/sessions.js +55 -0
- package/daemon/dist/routes/sessions.js.map +1 -1
- package/daemon/dist/routes/transport.d.ts.map +1 -1
- package/daemon/dist/routes/transport.js +52 -39
- package/daemon/dist/routes/transport.js.map +1 -1
- package/daemon/dist/routes/up.js +21 -2
- package/daemon/dist/routes/up.js.map +1 -1
- package/daemon/dist/seat-recap-store-surface.d.ts +2 -0
- package/daemon/dist/seat-recap-store-surface.d.ts.map +1 -0
- package/daemon/dist/seat-recap-store-surface.js +6 -0
- package/daemon/dist/seat-recap-store-surface.js.map +1 -0
- package/daemon/dist/startup.d.ts.map +1 -1
- package/daemon/dist/startup.js +37 -6
- package/daemon/dist/startup.js.map +1 -1
- package/daemon/docs/reference/chain-file-convention.md +115 -0
- package/daemon/docs/reference/legacy-topology-migration.md +53 -0
- package/daemon/docs/reference/refocus-channel.md +80 -0
- package/daemon/docs/reference/sdlc-conventions.md +24 -0
- package/daemon/specs/agents/shared/skills/core/attention-queue/SKILL.md +1 -1
- package/daemon/specs/agents/shared/skills/core/human-in-the-loop/SKILL.md +1 -1
- package/daemon/specs/agents/shared/skills/core/session-source-fork/SKILL.md +1 -1
- package/daemon/specs/agents/shared/skills/core/watchdog/SKILL.md +4 -4
- package/daemon/specs/agents/shared/skills/pods/development-team/SKILL.md +8 -0
- package/daemon/specs/agents/shared/skills/pods/orchestration-team/SKILL.md +72 -31
- package/daemon/specs/agents/shared/skills/pods/oversight-team/SKILL.md +106 -0
- package/daemon/specs/agents/shared/skills/process/context-engineering/SKILL.md +479 -0
- package/daemon/specs/agents/shared/skills/process/test-driven-development/SKILL.md +9 -0
- package/daemon/specs/rigs/launch/demo/project-example/README.md +25 -0
- package/daemon/specs/rigs/launch/demo/project-example/missions/improve-onboarding/SPEC.md +19 -0
- package/daemon/specs/rigs/launch/demo/project-example/missions/improve-onboarding/slices/01-shorten-first-run/PROGRESS.md +6 -0
- package/daemon/specs/rigs/launch/demo/project-example/missions/improve-onboarding/slices/01-shorten-first-run/PROOF.md +7 -0
- package/daemon/specs/rigs/launch/demo/project-example/missions/improve-onboarding/slices/01-shorten-first-run/SPEC.md +31 -0
- package/daemon/specs/rigs/preview/product-team/topology/instance/CRAFT.md +24 -0
- package/daemon/specs/rigs/preview/product-team/topology/rig/CRAFT.md +21 -0
- package/daemon/specs/rigs/preview/product-team/topology/rig/ORCHESTRATION-CRAFT.md +50 -0
- package/daemon/specs/rigs/preview/product-team/topology/seats/dev1-qa/CRAFT.md +13 -0
- package/daemon/specs/rigs/preview/product-team/topology/seats/orch1-lead/CRAFT.md +17 -0
- package/daemon/specs/rigs/preview/product-team/topology/seats/rev1-r1/CRAFT.md +17 -0
- package/daemon/specs/rigs/preview/product-team/topology/seats/rev1-r2/CRAFT.md +15 -0
- package/dist/build-info.js +3 -3
- package/dist/cli-error.js +1 -1
- package/dist/cli-error.js.map +1 -1
- package/dist/commands/broadcast.js +6 -0
- package/dist/commands/broadcast.js.map +1 -1
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +8 -0
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/context.d.ts.map +1 -1
- package/dist/commands/context.js +363 -48
- package/dist/commands/context.js.map +1 -1
- package/dist/commands/daemon.d.ts.map +1 -1
- package/dist/commands/daemon.js +23 -2
- package/dist/commands/daemon.js.map +1 -1
- package/dist/commands/import.d.ts.map +1 -1
- package/dist/commands/import.js +10 -0
- package/dist/commands/import.js.map +1 -1
- package/dist/commands/proof.d.ts.map +1 -1
- package/dist/commands/proof.js +70 -12
- package/dist/commands/proof.js.map +1 -1
- package/dist/commands/queue.d.ts.map +1 -1
- package/dist/commands/queue.js +36 -13
- package/dist/commands/queue.js.map +1 -1
- package/dist/commands/rig.d.ts.map +1 -1
- package/dist/commands/rig.js +5 -0
- package/dist/commands/rig.js.map +1 -1
- package/dist/commands/seat.d.ts.map +1 -1
- package/dist/commands/seat.js +88 -0
- package/dist/commands/seat.js.map +1 -1
- package/dist/commands/send.d.ts.map +1 -1
- package/dist/commands/send.js +224 -20
- package/dist/commands/send.js.map +1 -1
- package/dist/commands/transcript.d.ts.map +1 -1
- package/dist/commands/transcript.js +25 -1
- package/dist/commands/transcript.js.map +1 -1
- package/dist/commands/up.d.ts.map +1 -1
- package/dist/commands/up.js +8 -0
- package/dist/commands/up.js.map +1 -1
- package/dist/commands/walk.d.ts +1 -1
- package/dist/commands/walk.d.ts.map +1 -1
- package/dist/commands/walk.js +293 -30
- package/dist/commands/walk.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 +35 -1
- package/dist/config-store.js.map +1 -1
- package/dist/lib/scope/logical-checkbox.d.ts +26 -0
- package/dist/lib/scope/logical-checkbox.d.ts.map +1 -0
- package/dist/lib/scope/logical-checkbox.js +65 -0
- package/dist/lib/scope/logical-checkbox.js.map +1 -0
- package/dist/lib/scope/scaffold-placeholder.d.ts +22 -0
- package/dist/lib/scope/scaffold-placeholder.d.ts.map +1 -1
- package/dist/lib/scope/scaffold-placeholder.js +24 -0
- package/dist/lib/scope/scaffold-placeholder.js.map +1 -1
- package/dist/lib/topology-trace.d.ts +36 -0
- package/dist/lib/topology-trace.d.ts.map +1 -0
- package/dist/lib/topology-trace.js +91 -0
- package/dist/lib/topology-trace.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/adapters/claude-code-adapter.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/adapters/claude-code-adapter.js +7 -4
- package/node_modules/@openrig/daemon/dist/adapters/claude-code-adapter.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/adapters/claude-resume.js +2 -2
- package/node_modules/@openrig/daemon/dist/adapters/claude-resume.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/adapters/tmux.d.ts +41 -2
- package/node_modules/@openrig/daemon/dist/adapters/tmux.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/adapters/tmux.js +58 -18
- package/node_modules/@openrig/daemon/dist/adapters/tmux.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/adapters/yolo-mode.d.ts +18 -0
- package/node_modules/@openrig/daemon/dist/adapters/yolo-mode.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/adapters/yolo-mode.js +21 -0
- package/node_modules/@openrig/daemon/dist/adapters/yolo-mode.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/build-info.js +3 -3
- package/node_modules/@openrig/daemon/dist/daemon-db-path.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/daemon-db-path.js +50 -2
- package/node_modules/@openrig/daemon/dist/daemon-db-path.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/codex-thread-id.d.ts +95 -0
- package/node_modules/@openrig/daemon/dist/domain/codex-thread-id.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/codex-thread-id.js +171 -2
- package/node_modules/@openrig/daemon/dist/domain/codex-thread-id.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/context-packs/context-pack-types.d.ts +48 -0
- package/node_modules/@openrig/daemon/dist/domain/context-packs/context-pack-types.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/context-packs/context-pack-types.js +8 -0
- package/node_modules/@openrig/daemon/dist/domain/context-packs/context-pack-types.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/context-packs/manifest-parser.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/context-packs/manifest-parser.js +234 -2
- package/node_modules/@openrig/daemon/dist/domain/context-packs/manifest-parser.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/context-packs/probe-eval-bridge.d.ts +34 -0
- package/node_modules/@openrig/daemon/dist/domain/context-packs/probe-eval-bridge.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/context-packs/probe-eval-bridge.js +38 -0
- package/node_modules/@openrig/daemon/dist/domain/context-packs/probe-eval-bridge.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/context-packs/profile-composer.d.ts +49 -0
- package/node_modules/@openrig/daemon/dist/domain/context-packs/profile-composer.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/context-packs/profile-composer.js +125 -0
- package/node_modules/@openrig/daemon/dist/domain/context-packs/profile-composer.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/context-packs/profile-source-resolver.d.ts +53 -0
- package/node_modules/@openrig/daemon/dist/domain/context-packs/profile-source-resolver.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/context-packs/profile-source-resolver.js +129 -0
- package/node_modules/@openrig/daemon/dist/domain/context-packs/profile-source-resolver.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/context-packs/seat-recap-store.d.ts +48 -0
- package/node_modules/@openrig/daemon/dist/domain/context-packs/seat-recap-store.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/context-packs/seat-recap-store.js +123 -0
- package/node_modules/@openrig/daemon/dist/domain/context-packs/seat-recap-store.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/markdown-address.d.ts +56 -0
- package/node_modules/@openrig/daemon/dist/domain/markdown-address.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/markdown-address.js +188 -0
- package/node_modules/@openrig/daemon/dist/domain/markdown-address.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/model-divergence/current-generation-record.d.ts +8 -2
- package/node_modules/@openrig/daemon/dist/domain/model-divergence/current-generation-record.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/model-divergence/current-generation-record.js +1 -1
- package/node_modules/@openrig/daemon/dist/domain/model-divergence/current-generation-record.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/model-divergence/model-divergence-monitor.d.ts +33 -21
- package/node_modules/@openrig/daemon/dist/domain/model-divergence/model-divergence-monitor.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/model-divergence/model-divergence-monitor.js +64 -55
- package/node_modules/@openrig/daemon/dist/domain/model-divergence/model-divergence-monitor.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/periodic-snapshot-scheduler.d.ts +4 -0
- package/node_modules/@openrig/daemon/dist/domain/periodic-snapshot-scheduler.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/periodic-snapshot-scheduler.js +5 -1
- package/node_modules/@openrig/daemon/dist/domain/periodic-snapshot-scheduler.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/permission-drift-observer.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/permission-drift-observer.js +6 -1
- package/node_modules/@openrig/daemon/dist/domain/permission-drift-observer.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/plugin-discovery-service.d.ts +16 -0
- package/node_modules/@openrig/daemon/dist/domain/plugin-discovery-service.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/plugin-discovery-service.js +175 -1
- package/node_modules/@openrig/daemon/dist/domain/plugin-discovery-service.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/plugin-vendor-service.d.ts +9 -5
- package/node_modules/@openrig/daemon/dist/domain/plugin-vendor-service.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/plugin-vendor-service.js +101 -12
- package/node_modules/@openrig/daemon/dist/domain/plugin-vendor-service.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/process-census.d.ts +25 -0
- package/node_modules/@openrig/daemon/dist/domain/process-census.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/process-census.js +47 -0
- package/node_modules/@openrig/daemon/dist/domain/process-census.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/queue-repository.d.ts +3 -1
- package/node_modules/@openrig/daemon/dist/domain/queue-repository.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/queue-repository.js +50 -2
- package/node_modules/@openrig/daemon/dist/domain/queue-repository.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/reconciler.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/reconciler.js +6 -1
- package/node_modules/@openrig/daemon/dist/domain/reconciler.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/resume-metadata-refresher.d.ts +31 -2
- package/node_modules/@openrig/daemon/dist/domain/resume-metadata-refresher.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/resume-metadata-refresher.js +64 -29
- package/node_modules/@openrig/daemon/dist/domain/resume-metadata-refresher.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/review/compose.d.ts +5 -26
- package/node_modules/@openrig/daemon/dist/domain/review/compose.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/review/compose.js +31 -57
- package/node_modules/@openrig/daemon/dist/domain/review/compose.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/rig-repository.d.ts +4 -0
- package/node_modules/@openrig/daemon/dist/domain/rig-repository.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/rig-repository.js +9 -0
- package/node_modules/@openrig/daemon/dist/domain/rig-repository.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/rigspec-instantiator.d.ts +13 -0
- package/node_modules/@openrig/daemon/dist/domain/rigspec-instantiator.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/rigspec-instantiator.js +71 -0
- package/node_modules/@openrig/daemon/dist/domain/rigspec-instantiator.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/rigspec-schema.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/rigspec-schema.js +19 -3
- package/node_modules/@openrig/daemon/dist/domain/rigspec-schema.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/running-name-guard.d.ts +52 -0
- package/node_modules/@openrig/daemon/dist/domain/running-name-guard.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/running-name-guard.js +34 -0
- package/node_modules/@openrig/daemon/dist/domain/running-name-guard.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/scope/logical-checkbox.d.ts +26 -0
- package/node_modules/@openrig/daemon/dist/domain/scope/logical-checkbox.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/scope/logical-checkbox.js +65 -0
- package/node_modules/@openrig/daemon/dist/domain/scope/logical-checkbox.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/scope/plan-lock-artifacts.d.ts +1 -1
- package/node_modules/@openrig/daemon/dist/domain/scope/plan-lock-artifacts.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/scope/plan-lock-artifacts.js +2 -2
- package/node_modules/@openrig/daemon/dist/domain/scope/plan-lock-artifacts.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/scope/scaffold-placeholder.d.ts +22 -0
- package/node_modules/@openrig/daemon/dist/domain/scope/scaffold-placeholder.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/scope/scaffold-placeholder.js +24 -0
- package/node_modules/@openrig/daemon/dist/domain/scope/scaffold-placeholder.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/seat-activity-service.d.ts +1 -0
- package/node_modules/@openrig/daemon/dist/domain/seat-activity-service.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/seat-activity-service.js +39 -23
- package/node_modules/@openrig/daemon/dist/domain/seat-activity-service.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/seat-handover-service.d.ts +22 -0
- package/node_modules/@openrig/daemon/dist/domain/seat-handover-service.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/seat-handover-service.js +32 -2
- package/node_modules/@openrig/daemon/dist/domain/seat-handover-service.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/seat-lifecycle-service.d.ts +97 -0
- package/node_modules/@openrig/daemon/dist/domain/seat-lifecycle-service.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/seat-lifecycle-service.js +312 -0
- package/node_modules/@openrig/daemon/dist/domain/seat-lifecycle-service.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/session-transport.d.ts +16 -5
- package/node_modules/@openrig/daemon/dist/domain/session-transport.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/session-transport.js +155 -16
- package/node_modules/@openrig/daemon/dist/domain/session-transport.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/shell-classifier.d.ts +23 -0
- package/node_modules/@openrig/daemon/dist/domain/shell-classifier.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/shell-classifier.js +36 -0
- package/node_modules/@openrig/daemon/dist/domain/shell-classifier.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/slices/slice-detail-projector.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/slices/slice-detail-projector.js +10 -1
- package/node_modules/@openrig/daemon/dist/domain/slices/slice-detail-projector.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/spec-validation-advisory.d.ts +17 -0
- package/node_modules/@openrig/daemon/dist/domain/spec-validation-advisory.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/spec-validation-advisory.js +38 -0
- package/node_modules/@openrig/daemon/dist/domain/spec-validation-advisory.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/successor-session-launcher.d.ts +7 -0
- package/node_modules/@openrig/daemon/dist/domain/successor-session-launcher.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/successor-session-launcher.js +38 -1
- package/node_modules/@openrig/daemon/dist/domain/successor-session-launcher.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/topology-defaults-installer.d.ts +47 -0
- package/node_modules/@openrig/daemon/dist/domain/topology-defaults-installer.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/topology-defaults-installer.js +92 -0
- package/node_modules/@openrig/daemon/dist/domain/topology-defaults-installer.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/transcript-rotation.d.ts +4 -0
- package/node_modules/@openrig/daemon/dist/domain/transcript-rotation.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/transcript-rotation.js +61 -3
- package/node_modules/@openrig/daemon/dist/domain/transcript-rotation.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/transcript-store.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/transcript-store.js +9 -2
- package/node_modules/@openrig/daemon/dist/domain/transcript-store.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/types.d.ts +39 -0
- package/node_modules/@openrig/daemon/dist/domain/types.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/types.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/user-settings/settings-store.d.ts +10 -1
- package/node_modules/@openrig/daemon/dist/domain/user-settings/settings-store.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/user-settings/settings-store.js +39 -0
- package/node_modules/@openrig/daemon/dist/domain/user-settings/settings-store.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/context-packs.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/context-packs.js +205 -0
- package/node_modules/@openrig/daemon/dist/routes/context-packs.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/queue.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/queue.js +29 -24
- package/node_modules/@openrig/daemon/dist/routes/queue.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/rigspec.js +20 -6
- package/node_modules/@openrig/daemon/dist/routes/rigspec.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/seat.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/seat.js +69 -0
- package/node_modules/@openrig/daemon/dist/routes/seat.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/sessions.js +55 -0
- package/node_modules/@openrig/daemon/dist/routes/sessions.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/transport.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/transport.js +52 -39
- package/node_modules/@openrig/daemon/dist/routes/transport.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/up.js +21 -2
- package/node_modules/@openrig/daemon/dist/routes/up.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/seat-recap-store-surface.d.ts +2 -0
- package/node_modules/@openrig/daemon/dist/seat-recap-store-surface.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/seat-recap-store-surface.js +6 -0
- package/node_modules/@openrig/daemon/dist/seat-recap-store-surface.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/startup.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/startup.js +37 -6
- package/node_modules/@openrig/daemon/dist/startup.js.map +1 -1
- package/node_modules/@openrig/daemon/package.json +6 -1
- package/package.json +1 -1
|
@@ -0,0 +1,312 @@
|
|
|
1
|
+
import { getNodeInventory } from "./node-inventory.js";
|
|
2
|
+
import { parseSessionName } from "./session-name.js";
|
|
3
|
+
/**
|
|
4
|
+
* S5 (OPR.0.5.4.7) — the seat-lifecycle verb surface: set-model, single-seat stop,
|
|
5
|
+
* dead-session clean. One coherent design (KI-5.3-9):
|
|
6
|
+
*
|
|
7
|
+
* - ONE seat-resolution path shared by all three verbs (the SeatStatusService
|
|
8
|
+
* findMatches semantics: parseSessionName greedy first-@ rig; canonical-name or
|
|
9
|
+
* logical-id match; ambiguity returns the match list) — never a per-verb resolver.
|
|
10
|
+
* - Every mutation is transactional and persists its audit event in the SAME
|
|
11
|
+
* transaction (node.model_changed / session.stopped / session.cleaned).
|
|
12
|
+
* - Every refusal names what was actually checked; an indeterminate tmux probe is
|
|
13
|
+
* a refusal, never a guess (the S1 error bar applied at birth).
|
|
14
|
+
*/
|
|
15
|
+
const SEAT_LOOKUP_GUIDANCE = "List seats with: rig ps --nodes";
|
|
16
|
+
/** Terminal session statuses — rows the clean verb must NOT touch (they already
|
|
17
|
+
* record an ended tenancy; the vocabulary is shared with seat-handover-service
|
|
18
|
+
* and the watchdog's TERMINAL_SESSION_STATUSES). */
|
|
19
|
+
const TERMINAL_SESSION_STATUSES = new Set(["superseded", "detached", "exited"]);
|
|
20
|
+
export class SeatLifecycleService {
|
|
21
|
+
db;
|
|
22
|
+
rigRepo;
|
|
23
|
+
sessionRegistry;
|
|
24
|
+
eventBus;
|
|
25
|
+
tmuxAdapter;
|
|
26
|
+
constructor(deps) {
|
|
27
|
+
if (deps.db !== deps.rigRepo.db)
|
|
28
|
+
throw new Error("SeatLifecycleService: rigRepo must share the same db handle");
|
|
29
|
+
if (deps.db !== deps.sessionRegistry.db)
|
|
30
|
+
throw new Error("SeatLifecycleService: sessionRegistry must share the same db handle");
|
|
31
|
+
if (deps.db !== deps.eventBus.db)
|
|
32
|
+
throw new Error("SeatLifecycleService: eventBus must share the same db handle");
|
|
33
|
+
this.db = deps.db;
|
|
34
|
+
this.rigRepo = deps.rigRepo;
|
|
35
|
+
this.sessionRegistry = deps.sessionRegistry;
|
|
36
|
+
this.eventBus = deps.eventBus;
|
|
37
|
+
this.tmuxAdapter = deps.tmuxAdapter;
|
|
38
|
+
}
|
|
39
|
+
async setModel(input) {
|
|
40
|
+
const required = this.requireReason(input.reason);
|
|
41
|
+
if (required)
|
|
42
|
+
return required;
|
|
43
|
+
if (!input.model?.trim()) {
|
|
44
|
+
return { ok: false, code: "missing_model", message: "A target model id is required (--model)." };
|
|
45
|
+
}
|
|
46
|
+
const resolved = this.resolveSeat(input.seatRef);
|
|
47
|
+
if ("code" in resolved)
|
|
48
|
+
return resolved;
|
|
49
|
+
const model = input.model.trim();
|
|
50
|
+
const seat = this.describe(resolved);
|
|
51
|
+
const from = resolved.entry.model ?? null;
|
|
52
|
+
if (from === model) {
|
|
53
|
+
// Honest no-op: the persisted value already IS the target; no event is minted.
|
|
54
|
+
return { ok: true, seat, from, to: model, changed: false };
|
|
55
|
+
}
|
|
56
|
+
let persisted = null;
|
|
57
|
+
const tx = this.db.transaction(() => {
|
|
58
|
+
this.rigRepo.setNodeModel(resolved.nodeId, model);
|
|
59
|
+
persisted = this.eventBus.persistWithinTransaction({
|
|
60
|
+
type: "node.model_changed",
|
|
61
|
+
rigId: seat.rigId,
|
|
62
|
+
nodeId: seat.nodeId,
|
|
63
|
+
logicalId: seat.logicalId,
|
|
64
|
+
from,
|
|
65
|
+
to: model,
|
|
66
|
+
reason: input.reason.trim(),
|
|
67
|
+
operator: input.operator ?? null,
|
|
68
|
+
});
|
|
69
|
+
});
|
|
70
|
+
tx();
|
|
71
|
+
if (persisted)
|
|
72
|
+
this.eventBus.notifySubscribers(persisted);
|
|
73
|
+
return { ok: true, seat, from, to: model, changed: true };
|
|
74
|
+
}
|
|
75
|
+
async stopSeat(input) {
|
|
76
|
+
const required = this.requireReason(input.reason);
|
|
77
|
+
if (required)
|
|
78
|
+
return required;
|
|
79
|
+
const resolved = this.resolveSeat(input.seatRef);
|
|
80
|
+
if ("code" in resolved)
|
|
81
|
+
return resolved;
|
|
82
|
+
const seat = this.describe(resolved);
|
|
83
|
+
const session = this.latestSession(resolved.nodeId);
|
|
84
|
+
if (!session) {
|
|
85
|
+
return { ok: false, code: "no_session", message: `Seat "${input.seatRef}" has no session to stop (checked: latest sessions row for node ${seat.logicalId}).` };
|
|
86
|
+
}
|
|
87
|
+
if (session.origin === "claimed") {
|
|
88
|
+
return {
|
|
89
|
+
ok: false,
|
|
90
|
+
code: "claimed_session",
|
|
91
|
+
message: `Session "${session.session_name}" was adopted (origin=claimed), not launched by OpenRig — stop refuses to kill it.`,
|
|
92
|
+
guidance: "Release an adopted session with: rig unclaim",
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
// Wave-2 fix round 1 (r1 row 9baac99f): consume the CLASSIFIED probe, never the
|
|
96
|
+
// collapsed hasSession view — a transport blip is INDETERMINATE, not absence
|
|
97
|
+
// (KI-5.3-8 fabricated-absence class, destructive direction).
|
|
98
|
+
const probed = await this.probeLiveness(session.session_name, "stop refuses rather than kill blind");
|
|
99
|
+
if ("code" in probed)
|
|
100
|
+
return probed;
|
|
101
|
+
if (probed.state === "absent") {
|
|
102
|
+
return {
|
|
103
|
+
ok: false,
|
|
104
|
+
code: "session_not_live",
|
|
105
|
+
message: `Session "${session.session_name}" is absent in tmux (checked: tmux has-session, POSITIVE absence evidence) — there is nothing to stop.`,
|
|
106
|
+
guidance: "A dead seat with stale records is returned to launchable with: rig seat clean",
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
// Kill exactly this seat's own tmux session — structurally single-seat.
|
|
110
|
+
const kill = await this.tmuxAdapter.killSession(session.session_name);
|
|
111
|
+
if (kill && !kill.ok && kill.code !== "session_not_found") {
|
|
112
|
+
return {
|
|
113
|
+
ok: false,
|
|
114
|
+
code: "tmux_probe_failed",
|
|
115
|
+
message: `tmux kill-session for "${session.session_name}" failed: ${kill.message ?? kill.code}`,
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
let persisted = null;
|
|
119
|
+
const tx = this.db.transaction(() => {
|
|
120
|
+
this.sessionRegistry.updateStatus(session.id, "exited");
|
|
121
|
+
this.sessionRegistry.clearBinding(resolved.nodeId);
|
|
122
|
+
persisted = this.eventBus.persistWithinTransaction({
|
|
123
|
+
type: "session.stopped",
|
|
124
|
+
rigId: seat.rigId,
|
|
125
|
+
nodeId: seat.nodeId,
|
|
126
|
+
sessionName: session.session_name,
|
|
127
|
+
reason: input.reason.trim(),
|
|
128
|
+
operator: input.operator ?? null,
|
|
129
|
+
});
|
|
130
|
+
});
|
|
131
|
+
tx();
|
|
132
|
+
if (persisted)
|
|
133
|
+
this.eventBus.notifySubscribers(persisted);
|
|
134
|
+
return { ok: true, seat, sessionName: session.session_name, sessionId: session.id };
|
|
135
|
+
}
|
|
136
|
+
async cleanSeat(input) {
|
|
137
|
+
const required = this.requireReason(input.reason);
|
|
138
|
+
if (required)
|
|
139
|
+
return required;
|
|
140
|
+
const resolved = this.resolveSeat(input.seatRef);
|
|
141
|
+
if ("code" in resolved)
|
|
142
|
+
return resolved;
|
|
143
|
+
const seat = this.describe(resolved);
|
|
144
|
+
const binding = this.sessionRegistry.getBindingForNode(resolved.nodeId);
|
|
145
|
+
const nonTerminal = this.db.prepare("SELECT id, session_name, status, origin FROM sessions WHERE node_id = ? ORDER BY id").all(resolved.nodeId)
|
|
146
|
+
.filter((s) => !TERMINAL_SESSION_STATUSES.has(s.status));
|
|
147
|
+
// Fix r2-F3 (row 30045f39): clean MUTATES every non-terminal session row, so
|
|
148
|
+
// its safety checks must cover exactly that set — probing only the newest row
|
|
149
|
+
// fabricates safety for the others (older-live/newer-dead under canonical-name
|
|
150
|
+
// churn). Every row that would be touched is checked for adopted origin and
|
|
151
|
+
// probed for POSITIVE absence (r1 discipline); the binding's own tmux session
|
|
152
|
+
// is probed too when it names a session no row carries.
|
|
153
|
+
const mutationTargets = nonTerminal;
|
|
154
|
+
for (const row of mutationTargets) {
|
|
155
|
+
if (row.origin === "claimed") {
|
|
156
|
+
return {
|
|
157
|
+
ok: false,
|
|
158
|
+
code: "claimed_session",
|
|
159
|
+
message: `Session "${row.session_name}" was adopted (origin=claimed) — clean refuses to touch adopted state.`,
|
|
160
|
+
guidance: "Release an adopted session with: rig unclaim",
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
const probeNames = [...new Set([
|
|
165
|
+
...mutationTargets.map((s) => s.session_name),
|
|
166
|
+
...(binding?.tmuxSession ? [binding.tmuxSession] : []),
|
|
167
|
+
])];
|
|
168
|
+
for (const name of probeNames) {
|
|
169
|
+
const probed = await this.probeLiveness(name, "clean refuses rather than clear state under a possibly-live seat");
|
|
170
|
+
if ("code" in probed)
|
|
171
|
+
return probed;
|
|
172
|
+
if (probed.state === "present") {
|
|
173
|
+
return {
|
|
174
|
+
ok: false,
|
|
175
|
+
code: "session_live",
|
|
176
|
+
message: `Session "${name}" is alive in tmux (checked: tmux has-session, against EVERY session row clean would mutate) — clean only operates on dead seats.`,
|
|
177
|
+
guidance: "Stop a live seat first with: rig seat stop",
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
const session = this.latestSession(resolved.nodeId);
|
|
182
|
+
if (!binding && nonTerminal.length === 0) {
|
|
183
|
+
return {
|
|
184
|
+
ok: false,
|
|
185
|
+
code: "nothing_to_clean",
|
|
186
|
+
message: `Seat "${input.seatRef}" is already clean (checked: no binding row for the node, and no session rows outside terminal statuses ${[...TERMINAL_SESSION_STATUSES].join("/")}).`,
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
const sessionsExited = [];
|
|
190
|
+
let persisted = null;
|
|
191
|
+
const tx = this.db.transaction(() => {
|
|
192
|
+
for (const row of nonTerminal) {
|
|
193
|
+
this.sessionRegistry.updateStatus(row.id, "exited");
|
|
194
|
+
sessionsExited.push(row.session_name);
|
|
195
|
+
}
|
|
196
|
+
this.sessionRegistry.clearBinding(resolved.nodeId);
|
|
197
|
+
persisted = this.eventBus.persistWithinTransaction({
|
|
198
|
+
type: "session.cleaned",
|
|
199
|
+
rigId: seat.rigId,
|
|
200
|
+
nodeId: seat.nodeId,
|
|
201
|
+
sessionName: session?.session_name ?? null,
|
|
202
|
+
reason: input.reason.trim(),
|
|
203
|
+
operator: input.operator ?? null,
|
|
204
|
+
actions: { sessionsExited, bindingCleared: binding !== null },
|
|
205
|
+
});
|
|
206
|
+
});
|
|
207
|
+
tx();
|
|
208
|
+
if (persisted)
|
|
209
|
+
this.eventBus.notifySubscribers(persisted);
|
|
210
|
+
return { ok: true, seat, actions: { sessionsExited, bindingCleared: binding !== null } };
|
|
211
|
+
}
|
|
212
|
+
// -- shared internals --
|
|
213
|
+
/**
|
|
214
|
+
* The ONE liveness read both mutating verbs share (fix r1, row 9baac99f):
|
|
215
|
+
* the CLASSIFIED probeSession, never the collapsed hasSession view.
|
|
216
|
+
* present / absent → returned for the verb to act on (absent is
|
|
217
|
+
* POSITIVE tmux evidence, per OPR.0.5.4.2).
|
|
218
|
+
* transport_unavailable → an INDETERMINATE refusal: session existence was
|
|
219
|
+
* NOT determined, so neither verb may act — and the
|
|
220
|
+
* refusal never routes the operator to a
|
|
221
|
+
* destructive verb.
|
|
222
|
+
* unexpected probe throw → the same indeterminate refusal (fail closed).
|
|
223
|
+
*/
|
|
224
|
+
async probeLiveness(sessionName, refusalConsequence) {
|
|
225
|
+
let probe;
|
|
226
|
+
try {
|
|
227
|
+
probe = await this.tmuxAdapter.probeSession(sessionName);
|
|
228
|
+
}
|
|
229
|
+
catch (err) {
|
|
230
|
+
return {
|
|
231
|
+
ok: false,
|
|
232
|
+
code: "tmux_probe_failed",
|
|
233
|
+
message: `tmux liveness probe for "${sessionName}" failed (${err instanceof Error ? err.message : String(err)}) — liveness is INDETERMINATE, so ${refusalConsequence}.`,
|
|
234
|
+
};
|
|
235
|
+
}
|
|
236
|
+
if (probe.state === "transport_unavailable") {
|
|
237
|
+
return {
|
|
238
|
+
ok: false,
|
|
239
|
+
code: "tmux_probe_failed",
|
|
240
|
+
message: `tmux transport unavailable probing "${sessionName}" (${probe.cause}) — session existence was NOT determined (checked: classified tmux probe), so ${refusalConsequence}. Retry when the tmux transport is back.`,
|
|
241
|
+
};
|
|
242
|
+
}
|
|
243
|
+
return { state: probe.state };
|
|
244
|
+
}
|
|
245
|
+
requireReason(reason) {
|
|
246
|
+
if (!reason?.trim()) {
|
|
247
|
+
return { ok: false, code: "missing_reason", message: "An audit reason is required (--reason)." };
|
|
248
|
+
}
|
|
249
|
+
return null;
|
|
250
|
+
}
|
|
251
|
+
describe(resolved) {
|
|
252
|
+
return {
|
|
253
|
+
rigId: resolved.entry.rigId,
|
|
254
|
+
rigName: resolved.entry.rigName,
|
|
255
|
+
logicalId: resolved.entry.logicalId,
|
|
256
|
+
nodeId: resolved.nodeId,
|
|
257
|
+
};
|
|
258
|
+
}
|
|
259
|
+
latestSession(nodeId) {
|
|
260
|
+
const row = this.db.prepare("SELECT id, session_name, status, origin FROM sessions WHERE node_id = ? ORDER BY id DESC LIMIT 1").get(nodeId);
|
|
261
|
+
return row ?? null;
|
|
262
|
+
}
|
|
263
|
+
/** The ONE resolution path, mirroring SeatStatusService.findMatches semantics
|
|
264
|
+
* (seat-status-service.ts) so every seat verb resolves identically: a canonical
|
|
265
|
+
* `name@rig` ref scopes to that rig's inventory; a bare ref scans all rigs;
|
|
266
|
+
* matches are by canonicalSessionName or logicalId; >1 match is a listed
|
|
267
|
+
* ambiguity, never a pick. */
|
|
268
|
+
resolveSeat(seatRef) {
|
|
269
|
+
const ref = seatRef?.trim() ?? "";
|
|
270
|
+
if (!ref) {
|
|
271
|
+
return { ok: false, code: "seat_ref_required", message: "seat reference is required", guidance: SEAT_LOOKUP_GUIDANCE };
|
|
272
|
+
}
|
|
273
|
+
const matches = this.findMatches(ref);
|
|
274
|
+
if (matches.length === 0) {
|
|
275
|
+
return {
|
|
276
|
+
ok: false,
|
|
277
|
+
code: "seat_not_found",
|
|
278
|
+
message: `Seat "${ref}" not found (checked: canonical session names and logical ids across ${parseSessionName(ref).kind === "canonical" ? "the named rig" : "all rigs"}).`,
|
|
279
|
+
guidance: SEAT_LOOKUP_GUIDANCE,
|
|
280
|
+
};
|
|
281
|
+
}
|
|
282
|
+
if (matches.length > 1) {
|
|
283
|
+
return {
|
|
284
|
+
ok: false,
|
|
285
|
+
code: "seat_ambiguous",
|
|
286
|
+
message: `Seat "${ref}" matched multiple nodes`,
|
|
287
|
+
guidance: SEAT_LOOKUP_GUIDANCE,
|
|
288
|
+
matches: matches.map((entry) => ({
|
|
289
|
+
rig_name: entry.rigName,
|
|
290
|
+
logical_id: entry.logicalId,
|
|
291
|
+
current_occupant: entry.canonicalSessionName,
|
|
292
|
+
})),
|
|
293
|
+
};
|
|
294
|
+
}
|
|
295
|
+
const entry = matches[0];
|
|
296
|
+
const nodeRow = this.db.prepare("SELECT id FROM nodes WHERE rig_id = ? AND logical_id = ?").get(entry.rigId, entry.logicalId);
|
|
297
|
+
if (!nodeRow) {
|
|
298
|
+
return { ok: false, code: "seat_not_found", message: `Seat "${ref}" resolved to a node that no longer exists.`, guidance: SEAT_LOOKUP_GUIDANCE };
|
|
299
|
+
}
|
|
300
|
+
return { entry, nodeId: nodeRow.id };
|
|
301
|
+
}
|
|
302
|
+
findMatches(ref) {
|
|
303
|
+
const parsed = parseSessionName(ref);
|
|
304
|
+
if (parsed.kind === "canonical") {
|
|
305
|
+
const localRef = parsed.member;
|
|
306
|
+
const rigs = this.rigRepo.findRigsByName(parsed.rig);
|
|
307
|
+
return rigs.flatMap((rig) => getNodeInventory(this.db, rig.id).filter((entry) => entry.canonicalSessionName === ref || entry.logicalId === localRef));
|
|
308
|
+
}
|
|
309
|
+
return this.rigRepo.listRigs().flatMap((rig) => getNodeInventory(this.db, rig.id).filter((entry) => entry.canonicalSessionName === ref || entry.logicalId === ref));
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
//# sourceMappingURL=seat-lifecycle-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seat-lifecycle-service.js","sourceRoot":"","sources":["../../src/domain/seat-lifecycle-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -57,6 +57,12 @@ export interface SendOpts {
|
|
|
57
57
|
reason?: string;
|
|
58
58
|
actorSession?: string | null;
|
|
59
59
|
stampISO?: string;
|
|
60
|
+
submitOnly?: boolean;
|
|
61
|
+
expectedStagedText?: string;
|
|
62
|
+
/** Round-2 (r2 HIGH-1): the walked piece's own line count — placeholder identity. A large paste
|
|
63
|
+
* renders as "[Pasted text #N +X lines]"; X must match this count for the placeholder to count
|
|
64
|
+
* as evidence of THIS piece. */
|
|
65
|
+
expectedStagedLineCount?: number;
|
|
60
66
|
}
|
|
61
67
|
export interface BroadcastOpts extends SendOpts {
|
|
62
68
|
envelopeSender?: string;
|
|
@@ -83,6 +89,8 @@ export interface SendResult {
|
|
|
83
89
|
warning?: string;
|
|
84
90
|
error?: string;
|
|
85
91
|
reason?: string;
|
|
92
|
+
/** Set on the submit-only (bare Enter) mode's success — no text was typed. */
|
|
93
|
+
submitOnly?: boolean;
|
|
86
94
|
activity?: AgentActivity;
|
|
87
95
|
waitedMs?: number;
|
|
88
96
|
attempts?: number;
|
|
@@ -130,11 +138,14 @@ export declare class SessionTransport {
|
|
|
130
138
|
constructor(deps: SessionTransportDeps);
|
|
131
139
|
/**
|
|
132
140
|
* Slice-05 D5/D6 — when a live transport op (send/capture) observes that the
|
|
133
|
-
* seat's tmux session is genuinely gone (`
|
|
134
|
-
*
|
|
135
|
-
*
|
|
136
|
-
*
|
|
137
|
-
*
|
|
141
|
+
* seat's tmux session is genuinely gone (a `probeSession` result of `absent`
|
|
142
|
+
* — POSITIVE tmux evidence, never a transport failure; OPR.0.5.4.2 mini-req
|
|
143
|
+
* 5), durably record the SAME `session_missing` identity verdict the
|
|
144
|
+
* reconciler would write, so `rig ps` stops reporting the dead seat as
|
|
145
|
+
* running WITHOUT waiting for the next reconciler poll. This is the
|
|
146
|
+
* transport-side writer of the shared verdict bridge; the reconciler is the
|
|
147
|
+
* poll-side writer. Transport-absence must never reach this method: a blip
|
|
148
|
+
* against a live seat would otherwise fabricate a durable absence verdict.
|
|
138
149
|
*
|
|
139
150
|
* Only writes an APPLICABLE verdict: the join is narrowed to the node whose
|
|
140
151
|
* LATEST running session_name equals the probed session (so
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-transport.d.ts","sourceRoot":"","sources":["../../src/domain/session-transport.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAA4C,KAAK,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAGvG,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,uBAAuB,CAAC;AAmE1E,MAAM,WAAW,0BAA0B;IACzC,KAAK,EAAE,cAAc,GAAG,YAAY,GAAG,WAAW,GAAG,SAAS,CAAC;IAC/D,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AA6CD,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,0BAA0B,CAsFpF;AAED,wBAAsB,oBAAoB,CAAC,KAAK,EAAE;IAChD,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,cAAc,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,GAAG,SAAS,CAAC;IAC3D,WAAW,EAAE,WAAW,CAAC;IACzB,GAAG,CAAC,EAAE,IAAI,CAAC;CACZ,GAAG,OAAO,CAAC,aAAa,CAAC,CAiGzB;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,0BAA0B,CAAC,OAAO,CAAC,GAAG,aAAa,CAAC,OAAO,CAAC,CAK/F;AAmBD;;0FAE0F;AAC1F,wBAAgB,cAAc,CAAC,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,aAAa,CAMtF;AAED,MAAM,MAAM,UAAU,GAClB;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,GAInB;IAAE,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,GACtB;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,GACf;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GAC7B;IAAE,MAAM,EAAE,IAAI,CAAA;CAAE,CAAC;AAErB,MAAM,MAAM,aAAa,GACrB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,EAAE,KAAK,CAAC;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,GAC9F;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,WAAW,GAAG,WAAW,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAElE,MAAM,WAAW,QAAQ;IACvB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IAMvB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAG7B,QAAQ,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"session-transport.d.ts","sourceRoot":"","sources":["../../src/domain/session-transport.ts"],"names":[],"mappings":"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"}
|
|
@@ -340,11 +340,14 @@ export class SessionTransport {
|
|
|
340
340
|
}
|
|
341
341
|
/**
|
|
342
342
|
* Slice-05 D5/D6 — when a live transport op (send/capture) observes that the
|
|
343
|
-
* seat's tmux session is genuinely gone (`
|
|
344
|
-
*
|
|
345
|
-
*
|
|
346
|
-
*
|
|
347
|
-
*
|
|
343
|
+
* seat's tmux session is genuinely gone (a `probeSession` result of `absent`
|
|
344
|
+
* — POSITIVE tmux evidence, never a transport failure; OPR.0.5.4.2 mini-req
|
|
345
|
+
* 5), durably record the SAME `session_missing` identity verdict the
|
|
346
|
+
* reconciler would write, so `rig ps` stops reporting the dead seat as
|
|
347
|
+
* running WITHOUT waiting for the next reconciler poll. This is the
|
|
348
|
+
* transport-side writer of the shared verdict bridge; the reconciler is the
|
|
349
|
+
* poll-side writer. Transport-absence must never reach this method: a blip
|
|
350
|
+
* against a live seat would otherwise fabricate a durable absence verdict.
|
|
348
351
|
*
|
|
349
352
|
* Only writes an APPLICABLE verdict: the join is narrowed to the node whose
|
|
350
353
|
* LATEST running session_name equals the probed session (so
|
|
@@ -625,27 +628,153 @@ export class SessionTransport {
|
|
|
625
628
|
};
|
|
626
629
|
}
|
|
627
630
|
}
|
|
628
|
-
// 1.
|
|
631
|
+
// 1. Resolve the session through the classified probe (OPR.0.5.4.2): a
|
|
632
|
+
// transport blip must never read as a dead seat, and absence is only ever
|
|
633
|
+
// asserted on positive tmux evidence.
|
|
629
634
|
try {
|
|
630
|
-
const
|
|
631
|
-
if (
|
|
635
|
+
const probe = await this.tmuxAdapter.probeSession(sessionName);
|
|
636
|
+
if (probe.state === "absent") {
|
|
632
637
|
this.recordSessionMissingVerdict(sessionName);
|
|
633
638
|
return {
|
|
634
639
|
ok: false,
|
|
635
640
|
sessionName,
|
|
636
641
|
reason: "session_missing",
|
|
637
|
-
error: `Session '${sessionName}' not found. Check available sessions with: rig ps --nodes`,
|
|
642
|
+
error: `Session '${sessionName}' not found: tmux reports no session with this name. No text was sent. Check available sessions with: rig ps --nodes`,
|
|
643
|
+
};
|
|
644
|
+
}
|
|
645
|
+
if (probe.state === "transport_unavailable") {
|
|
646
|
+
return {
|
|
647
|
+
ok: false,
|
|
648
|
+
sessionName,
|
|
649
|
+
reason: "tmux_unavailable",
|
|
650
|
+
error: `The tmux server could not be reached (${probe.cause}). Whether session '${sessionName}' exists was not determined. No text was sent.`,
|
|
638
651
|
};
|
|
639
652
|
}
|
|
640
653
|
}
|
|
641
|
-
catch {
|
|
654
|
+
catch (err) {
|
|
642
655
|
return {
|
|
643
656
|
ok: false,
|
|
644
657
|
sessionName,
|
|
645
658
|
reason: "tmux_unavailable",
|
|
646
|
-
error:
|
|
659
|
+
error: `The tmux session probe failed unexpectedly (${err instanceof Error ? err.message : String(err)}). Whether session '${sessionName}' exists was not determined. No text was sent.`,
|
|
647
660
|
};
|
|
648
661
|
}
|
|
662
|
+
// SUBMIT-ONLY (mechanics-gate fix, desk ruling d9b3989a): the single Enter retry for staged
|
|
663
|
+
// text. Types NOTHING; verifies the pane actually holds the expected staged text FIRST, so a
|
|
664
|
+
// bare Enter can never land on anything else (a permission prompt, someone else's input).
|
|
665
|
+
if (opts?.submitOnly) {
|
|
666
|
+
if (text.length > 0) {
|
|
667
|
+
return { ok: false, sessionName, reason: "invalid_submit_only", error: "submitOnly sends no text — the text argument must be empty." };
|
|
668
|
+
}
|
|
669
|
+
const expected = opts.expectedStagedText ?? "";
|
|
670
|
+
if (expected.trim().length === 0) {
|
|
671
|
+
return { ok: false, sessionName, reason: "invalid_submit_only", error: "submitOnly requires expectedStagedText — the Enter is only pressed onto the exact staged content." };
|
|
672
|
+
}
|
|
673
|
+
const norm = (s) => s.replace(/\s+/g, "");
|
|
674
|
+
const pane = await this.runStage("session_transport.submit_only_precheck", () => this.tmuxAdapter.capturePaneContent(sessionName, 50));
|
|
675
|
+
// Round-2 (r2 HIGH-1): the evidence must be the CURRENT ACTIVE INPUT and must identify
|
|
676
|
+
// THIS piece — stale scrollback can carry an old placeholder while a LATER interactive
|
|
677
|
+
// prompt owns the input, and an Enter there approves the prompt. So:
|
|
678
|
+
// 1. Only the pane's LAST input-marker line counts (the current input; everything above
|
|
679
|
+
// is history).
|
|
680
|
+
// 2. A numbered-option line (`❯ 1. …`) is a PROMPT SELECTION, never staged input: refuse.
|
|
681
|
+
// 3. A pasted-text placeholder is identity-qualified: "[Pasted text #N +X lines]" counts
|
|
682
|
+
// only when X matches the expected piece's own line count (±1 for a trailing newline).
|
|
683
|
+
// More than one placeholder is COALESCED staging (several pieces, one Enter): refuse.
|
|
684
|
+
// 4. Otherwise the line must carry the content's own head (24 normalized chars — a short
|
|
685
|
+
// paste renders inline, possibly truncated).
|
|
686
|
+
const paneLines = (pane ?? "").split("\n");
|
|
687
|
+
let currentInputAt = -1;
|
|
688
|
+
for (let i = paneLines.length - 1; i >= 0; i--) {
|
|
689
|
+
if (paneLines[i].trimStart().startsWith("❯")) {
|
|
690
|
+
currentInputAt = i;
|
|
691
|
+
break;
|
|
692
|
+
}
|
|
693
|
+
}
|
|
694
|
+
let stagedEvidence = false;
|
|
695
|
+
if (currentInputAt >= 0) {
|
|
696
|
+
const inputLine = paneLines[currentInputAt].trimStart();
|
|
697
|
+
// The region is the last ❯-line through the input box's closing separator (a box-drawing
|
|
698
|
+
// line) or pane end — wrapped input continues below the marker; everything ABOVE the
|
|
699
|
+
// marker is history and everything below the separator is hint-bar chrome.
|
|
700
|
+
let regionEnd = paneLines.length;
|
|
701
|
+
for (let i = currentInputAt + 1; i < paneLines.length; i++) {
|
|
702
|
+
const t = paneLines[i].trim();
|
|
703
|
+
if (t.length >= 10 && /^[─═-]+$/.test(t)) {
|
|
704
|
+
regionEnd = i;
|
|
705
|
+
break;
|
|
706
|
+
}
|
|
707
|
+
}
|
|
708
|
+
const region = paneLines.slice(currentInputAt, regionEnd).join("\n");
|
|
709
|
+
if (!/^❯\s*\d+\./.test(inputLine)) {
|
|
710
|
+
// Round-3 (r2 R2 HIGH-1, specimen-pinned): Claude renders ONE staged piece as MANY
|
|
711
|
+
// placeholders whose displayed counts are SEGMENT sizes (sum ≤ source lines), followed
|
|
712
|
+
// by the piece's own literal tail wrapped across pane lines — and the placeholder
|
|
713
|
+
// tokens themselves wrap. So: collapse wrapping, then
|
|
714
|
+
// IDENTITY — the literal residual (region minus tokens minus hint chrome) must be a
|
|
715
|
+
// CONTIGUOUS substring of the piece: the visible words are the piece's
|
|
716
|
+
// words. Foreign residual (another piece, stale content) refuses.
|
|
717
|
+
// SANITY — the segment-count sum must not exceed the piece's own line count
|
|
718
|
+
// (small slack), and with NO residual anchor must reach at least 60% of
|
|
719
|
+
// it — a bare unrelated placeholder cannot masquerade as this piece.
|
|
720
|
+
const placeholderRe = /\[Pasted text #\d+ \+(\d+) lines\]/g;
|
|
721
|
+
const regionFlat = region.replace(/\s+/g, " ");
|
|
722
|
+
const counts = [...regionFlat.matchAll(placeholderRe)].map((m) => Number(m[1]));
|
|
723
|
+
if (counts.length === 0) {
|
|
724
|
+
const head = norm(expected).slice(0, 24);
|
|
725
|
+
stagedEvidence = head.length > 0 && norm(region).includes(head);
|
|
726
|
+
}
|
|
727
|
+
else {
|
|
728
|
+
// Round-4 (r2 R3 HIGH-1): identity is the rendering's own structure, specimen-proven —
|
|
729
|
+
// the placeholders are the piece's HEAD chunks and the literal residual is the piece's
|
|
730
|
+
// normalized SUFFIX (524 chars in the preserved capture). Size similarity and short
|
|
731
|
+
// shared phrases are NOT identity: with no residual, or one under 48 normalized chars,
|
|
732
|
+
// or one that is not the piece's own suffix, FAIL CLOSED — the TUI did not expose
|
|
733
|
+
// enough content to identify the staged state, and a bare Enter is never guessed.
|
|
734
|
+
const chrome = /paste again to expand|ctrl\+g to edit( in Vim)?/gi;
|
|
735
|
+
const residual = norm(regionFlat.replace(placeholderRe, "").replace(chrome, "")).replace(/^❯/, "");
|
|
736
|
+
const pieceNorm = norm(expected);
|
|
737
|
+
const sum = counts.reduce((a, b) => a + b, 0);
|
|
738
|
+
// Round-5 (r2 R4 HIGH-1): the suffix anchor is JOINED to the opaque prefix. The
|
|
739
|
+
// placeholder sum identifies the hidden SOURCE BOUNDARY immediately before the
|
|
740
|
+
// visible suffix (specimen: sum 130 = the residual begins after exactly 130 of the
|
|
741
|
+
// piece's 142 source newlines). Compute the boundary from the piece bytes — the
|
|
742
|
+
// number of leading source lines whose normalized text the residual does NOT cover —
|
|
743
|
+
// and require the sum to EQUAL it exactly (round-6, r2 R5: both separately staged
|
|
744
|
+
// preserved pieces are exact — 130=130 and 82=82; a tolerance was unsupported by the
|
|
745
|
+
// renderer evidence). A matched suffix with a non-matching sum is a truncated or
|
|
746
|
+
// wrong prefix: refuse.
|
|
747
|
+
let boundary = -1;
|
|
748
|
+
if (residual.length >= 48 && pieceNorm.endsWith(residual)) {
|
|
749
|
+
const srcLines = expected.split("\n");
|
|
750
|
+
let acc = 0;
|
|
751
|
+
boundary = 0;
|
|
752
|
+
for (let i = srcLines.length - 1; i >= 0; i--) {
|
|
753
|
+
acc += norm(srcLines[i]).length;
|
|
754
|
+
if (acc >= residual.length) {
|
|
755
|
+
boundary = i;
|
|
756
|
+
break;
|
|
757
|
+
}
|
|
758
|
+
}
|
|
759
|
+
}
|
|
760
|
+
stagedEvidence = boundary >= 0 && sum === boundary;
|
|
761
|
+
}
|
|
762
|
+
}
|
|
763
|
+
}
|
|
764
|
+
if (!stagedEvidence) {
|
|
765
|
+
return {
|
|
766
|
+
ok: false,
|
|
767
|
+
sessionName,
|
|
768
|
+
reason: "staged_mismatch",
|
|
769
|
+
error: `submitOnly refused: the pane of '${sessionName}' does not show the expected staged text — pressing Enter here could drive something else entirely. Nothing was submitted.`,
|
|
770
|
+
};
|
|
771
|
+
}
|
|
772
|
+
const submitResult = await this.runStage("session_transport.submit", () => this.tmuxAdapter.sendKeys(sessionName, ["C-m"]), (result) => result.ok ? "ok" : "failed");
|
|
773
|
+
if (!submitResult.ok) {
|
|
774
|
+
return { ok: false, sessionName, reason: "submit_failed", outcome: "failed", error: `submitOnly: Enter did not land on '${sessionName}': ${submitResult.message}` };
|
|
775
|
+
}
|
|
776
|
+
return { ok: true, sessionName, outcome: "rendered-unconfirmed", submitOnly: true };
|
|
777
|
+
}
|
|
649
778
|
if (waitForIdleMs !== undefined) {
|
|
650
779
|
const waitResult = await this.waitForIdle({
|
|
651
780
|
sessionName,
|
|
@@ -1016,24 +1145,34 @@ export class SessionTransport {
|
|
|
1016
1145
|
error: `Session '${sessionName}' is attached as an external CLI node. Inbound tmux capture is unavailable for this target.`,
|
|
1017
1146
|
};
|
|
1018
1147
|
}
|
|
1148
|
+
// Classified probe (OPR.0.5.4.2) — same discipline as the send gate: a
|
|
1149
|
+
// transport blip is a transport answer, never a dead-seat answer.
|
|
1019
1150
|
try {
|
|
1020
|
-
const
|
|
1021
|
-
if (
|
|
1151
|
+
const probe = await this.tmuxAdapter.probeSession(sessionName);
|
|
1152
|
+
if (probe.state === "absent") {
|
|
1022
1153
|
this.recordSessionMissingVerdict(sessionName);
|
|
1023
1154
|
return {
|
|
1024
1155
|
ok: false,
|
|
1025
1156
|
sessionName,
|
|
1026
1157
|
reason: "session_missing",
|
|
1027
|
-
error: `Session '${sessionName}' not found. Check available sessions with: rig ps --nodes`,
|
|
1158
|
+
error: `Session '${sessionName}' not found: tmux reports no session with this name. Nothing was captured. Check available sessions with: rig ps --nodes`,
|
|
1159
|
+
};
|
|
1160
|
+
}
|
|
1161
|
+
if (probe.state === "transport_unavailable") {
|
|
1162
|
+
return {
|
|
1163
|
+
ok: false,
|
|
1164
|
+
sessionName,
|
|
1165
|
+
reason: "tmux_unavailable",
|
|
1166
|
+
error: `The tmux server could not be reached (${probe.cause}). Whether session '${sessionName}' exists was not determined. Nothing was captured.`,
|
|
1028
1167
|
};
|
|
1029
1168
|
}
|
|
1030
1169
|
}
|
|
1031
|
-
catch {
|
|
1170
|
+
catch (err) {
|
|
1032
1171
|
return {
|
|
1033
1172
|
ok: false,
|
|
1034
1173
|
sessionName,
|
|
1035
1174
|
reason: "tmux_unavailable",
|
|
1036
|
-
error:
|
|
1175
|
+
error: `The tmux session probe failed unexpectedly (${err instanceof Error ? err.message : String(err)}). Whether session '${sessionName}' exists was not determined. Nothing was captured.`,
|
|
1037
1176
|
};
|
|
1038
1177
|
}
|
|
1039
1178
|
const lines = opts?.lines ?? 20;
|