@openrig/cli 0.4.6 → 0.4.8
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/applying-a-permission-policy/SKILL.md +120 -0
- 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/claude-compaction-restore/scripts/restore-from-jsonl.mjs +0 -0
- package/daemon/assets/plugins/openrig-core/skills/delegating-work/SKILL.md +43 -0
- package/daemon/assets/plugins/openrig-core/skills/forming-an-openrig-mental-model/SKILL.md +36 -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 +7 -13
- package/daemon/assets/plugins/openrig-core/skills/openrig-skills/SKILL.md +88 -0
- package/daemon/assets/plugins/openrig-core/skills/openrig-user/SKILL.md +189 -105
- 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/claude-code-adapter.d.ts +0 -9
- package/daemon/dist/adapters/claude-code-adapter.d.ts.map +1 -1
- package/daemon/dist/adapters/claude-code-adapter.js +13 -46
- package/daemon/dist/adapters/claude-code-adapter.js.map +1 -1
- package/daemon/dist/adapters/claude-resume.d.ts +1 -1
- package/daemon/dist/adapters/claude-resume.d.ts.map +1 -1
- package/daemon/dist/adapters/claude-resume.js +8 -2
- package/daemon/dist/adapters/claude-resume.js.map +1 -1
- 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-resume.d.ts +1 -1
- package/daemon/dist/adapters/codex-resume.d.ts.map +1 -1
- package/daemon/dist/adapters/codex-resume.js +4 -2
- package/daemon/dist/adapters/codex-resume.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 +30 -9
- package/daemon/dist/adapters/codex-runtime-adapter.js.map +1 -1
- package/daemon/dist/adapters/pi-resume.d.ts +1 -1
- package/daemon/dist/adapters/pi-resume.d.ts.map +1 -1
- package/daemon/dist/adapters/pi-resume.js +7 -2
- package/daemon/dist/adapters/pi-resume.js.map +1 -1
- package/daemon/dist/adapters/pi-runtime-adapter.d.ts.map +1 -1
- package/daemon/dist/adapters/pi-runtime-adapter.js +4 -1
- package/daemon/dist/adapters/pi-runtime-adapter.js.map +1 -1
- package/daemon/dist/adapters/yolo-mode.d.ts +23 -0
- package/daemon/dist/adapters/yolo-mode.d.ts.map +1 -0
- package/daemon/dist/adapters/yolo-mode.js +49 -0
- package/daemon/dist/adapters/yolo-mode.js.map +1 -0
- package/daemon/dist/build-info.js +3 -3
- package/daemon/dist/db/migrations/055_node_permission_policy.d.ts +13 -0
- package/daemon/dist/db/migrations/055_node_permission_policy.d.ts.map +1 -0
- package/daemon/dist/db/migrations/055_node_permission_policy.js +17 -0
- package/daemon/dist/db/migrations/055_node_permission_policy.js.map +1 -0
- package/daemon/dist/db/migrations/056_rig_permission_policy.d.ts +13 -0
- package/daemon/dist/db/migrations/056_rig_permission_policy.d.ts.map +1 -0
- package/daemon/dist/db/migrations/056_rig_permission_policy.js +17 -0
- package/daemon/dist/db/migrations/056_rig_permission_policy.js.map +1 -0
- package/daemon/dist/db/migrations/057_node_policy_provenance.d.ts +19 -0
- package/daemon/dist/db/migrations/057_node_policy_provenance.d.ts.map +1 -0
- package/daemon/dist/db/migrations/057_node_policy_provenance.js +26 -0
- package/daemon/dist/db/migrations/057_node_policy_provenance.js.map +1 -0
- package/daemon/dist/db/migrations/058_rig_policy_provenance.d.ts +15 -0
- package/daemon/dist/db/migrations/058_rig_policy_provenance.d.ts.map +1 -0
- package/daemon/dist/db/migrations/058_rig_policy_provenance.js +22 -0
- package/daemon/dist/db/migrations/058_rig_policy_provenance.js.map +1 -0
- package/daemon/dist/domain/builtin-policy-reference.d.ts +13 -0
- package/daemon/dist/domain/builtin-policy-reference.d.ts.map +1 -0
- package/daemon/dist/domain/builtin-policy-reference.js +58 -0
- package/daemon/dist/domain/builtin-policy-reference.js.map +1 -0
- 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/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.map +1 -1
- package/daemon/dist/domain/hosts/hosts-registry-reader.js +12 -10
- package/daemon/dist/domain/hosts/hosts-registry-reader.js.map +1 -1
- package/daemon/dist/domain/hosts/hosts-registry-writer.d.ts.map +1 -1
- package/daemon/dist/domain/hosts/hosts-registry-writer.js +3 -2
- package/daemon/dist/domain/hosts/hosts-registry-writer.js.map +1 -1
- package/daemon/dist/domain/hosts/read-through.js +1 -1
- package/daemon/dist/domain/hosts/read-through.js.map +1 -1
- package/daemon/dist/domain/hosts/remote-daemon-http.d.ts.map +1 -1
- package/daemon/dist/domain/hosts/remote-daemon-http.js +8 -5
- package/daemon/dist/domain/hosts/remote-daemon-http.js.map +1 -1
- package/daemon/dist/domain/native-resume-probe.d.ts +1 -1
- package/daemon/dist/domain/native-resume-probe.d.ts.map +1 -1
- package/daemon/dist/domain/native-resume-probe.js +11 -4
- package/daemon/dist/domain/native-resume-probe.js.map +1 -1
- package/daemon/dist/domain/node-inventory.d.ts +3 -12
- package/daemon/dist/domain/node-inventory.d.ts.map +1 -1
- package/daemon/dist/domain/node-inventory.js +57 -15
- package/daemon/dist/domain/node-inventory.js.map +1 -1
- package/daemon/dist/domain/permission-policy/policy-ref.d.ts +89 -0
- package/daemon/dist/domain/permission-policy/policy-ref.d.ts.map +1 -0
- package/daemon/dist/domain/permission-policy/policy-ref.js +171 -0
- package/daemon/dist/domain/permission-policy/policy-ref.js.map +1 -0
- package/daemon/dist/domain/permission-policy/policy-spec.d.ts +34 -0
- package/daemon/dist/domain/permission-policy/policy-spec.d.ts.map +1 -0
- package/daemon/dist/domain/permission-policy/policy-spec.js +106 -0
- package/daemon/dist/domain/permission-policy/policy-spec.js.map +1 -0
- 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/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 +46 -6
- package/daemon/dist/domain/ps-projection.js.map +1 -1
- package/daemon/dist/domain/queue-repository.d.ts +14 -10
- package/daemon/dist/domain/queue-repository.d.ts.map +1 -1
- package/daemon/dist/domain/queue-repository.js +33 -12
- package/daemon/dist/domain/queue-repository.js.map +1 -1
- package/daemon/dist/domain/restore-orchestrator.d.ts +14 -0
- package/daemon/dist/domain/restore-orchestrator.d.ts.map +1 -1
- package/daemon/dist/domain/restore-orchestrator.js +90 -6
- package/daemon/dist/domain/restore-orchestrator.js.map +1 -1
- package/daemon/dist/domain/review/compose.d.ts +77 -4
- package/daemon/dist/domain/review/compose.d.ts.map +1 -1
- package/daemon/dist/domain/review/compose.js +152 -16
- package/daemon/dist/domain/review/compose.js.map +1 -1
- package/daemon/dist/domain/review/fleet-compose.js +1 -1
- package/daemon/dist/domain/review/fleet-compose.js.map +1 -1
- package/daemon/dist/domain/review/gather.d.ts +1 -1
- package/daemon/dist/domain/review/gather.d.ts.map +1 -1
- package/daemon/dist/domain/review/gather.js +92 -67
- 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/rig-expansion-service.d.ts.map +1 -1
- package/daemon/dist/domain/rig-expansion-service.js +10 -1
- package/daemon/dist/domain/rig-expansion-service.js.map +1 -1
- package/daemon/dist/domain/rig-repository.d.ts +45 -0
- package/daemon/dist/domain/rig-repository.d.ts.map +1 -1
- package/daemon/dist/domain/rig-repository.js +75 -1
- 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 +6 -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 +8 -0
- package/daemon/dist/domain/rigspec-exporter.js.map +1 -1
- package/daemon/dist/domain/rigspec-instantiator.d.ts +18 -1
- package/daemon/dist/domain/rigspec-instantiator.d.ts.map +1 -1
- package/daemon/dist/domain/rigspec-instantiator.js +202 -10
- package/daemon/dist/domain/rigspec-instantiator.js.map +1 -1
- package/daemon/dist/domain/rigspec-preflight.d.ts +11 -0
- package/daemon/dist/domain/rigspec-preflight.d.ts.map +1 -1
- package/daemon/dist/domain/rigspec-preflight.js +35 -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 +25 -0
- package/daemon/dist/domain/rigspec-schema.js.map +1 -1
- package/daemon/dist/domain/runtime-adapter.d.ts +5 -0
- package/daemon/dist/domain/runtime-adapter.d.ts.map +1 -1
- package/daemon/dist/domain/runtime-adapter.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.map +1 -1
- package/daemon/dist/domain/seat-handover-service.js +7 -1
- package/daemon/dist/domain/seat-handover-service.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 +157 -11
- 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/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/successor-session-launcher.d.ts +4 -0
- package/daemon/dist/domain/successor-session-launcher.d.ts.map +1 -1
- package/daemon/dist/domain/successor-session-launcher.js +2 -0
- package/daemon/dist/domain/successor-session-launcher.js.map +1 -1
- package/daemon/dist/domain/terminal/cmux-provider-adapter.d.ts +12 -11
- package/daemon/dist/domain/terminal/cmux-provider-adapter.d.ts.map +1 -1
- package/daemon/dist/domain/terminal/cmux-provider-adapter.js +61 -28
- package/daemon/dist/domain/terminal/cmux-provider-adapter.js.map +1 -1
- package/daemon/dist/domain/terminal/herdr-adapter.d.ts +27 -10
- package/daemon/dist/domain/terminal/herdr-adapter.d.ts.map +1 -1
- package/daemon/dist/domain/terminal/herdr-adapter.js +74 -33
- package/daemon/dist/domain/terminal/herdr-adapter.js.map +1 -1
- 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 +21 -0
- package/daemon/dist/domain/types.d.ts.map +1 -1
- package/daemon/dist/domain/types.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/routes/agent-images.d.ts.map +1 -1
- package/daemon/dist/routes/agent-images.js +2 -0
- package/daemon/dist/routes/agent-images.js.map +1 -1
- 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.map +1 -1
- package/daemon/dist/routes/queue.js +9 -2
- package/daemon/dist/routes/queue.js.map +1 -1
- package/daemon/dist/routes/rigs.d.ts.map +1 -1
- package/daemon/dist/routes/rigs.js +29 -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/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/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/startup.d.ts.map +1 -1
- package/daemon/dist/startup.js +42 -12
- package/daemon/dist/startup.js.map +1 -1
- package/daemon/docs/reference/agent-startup-guide.md +1 -0
- package/daemon/docs/reference/rig-spec.md +19 -0
- package/daemon/policies/builtin/locked.policy.md +24 -0
- package/daemon/policies/builtin/open.policy.md +24 -0
- package/daemon/policies/builtin/standard.policy.md +25 -0
- package/daemon/policies/builtin/yolo.policy.md +20 -0
- package/daemon/policies/examples/my-cautious-dev.policy.md +40 -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 +2 -1
- package/daemon/specs/agents/factory-rsi/release-manager/agent.yaml +2 -1
- 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 +1 -8
- 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 +23 -8
- package/daemon/specs/agents/shared/skills/core/openrig-cmux/SKILL.md +0 -5
- package/daemon/specs/agents/shared/skills/core/openrig-herdr/SKILL.md +1 -6
- 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/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/systematic-debugging/find-polluter.sh +0 -0
- 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 +13 -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/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/config-init-workspace.js +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/host.d.ts.map +1 -1
- package/dist/commands/host.js +24 -10
- package/dist/commands/host.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 +16 -2
- package/dist/commands/ps.js.map +1 -1
- package/dist/commands/queue.d.ts.map +1 -1
- package/dist/commands/queue.js +103 -24
- package/dist/commands/queue.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 +118 -24
- package/dist/commands/send.js.map +1 -1
- package/dist/commands/setup.d.ts +14 -0
- package/dist/commands/setup.d.ts.map +1 -1
- package/dist/commands/setup.js +131 -8
- package/dist/commands/setup.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/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.js +1 -1
- package/dist/commands/up.js.map +1 -1
- package/dist/commands/whoami.d.ts.map +1 -1
- package/dist/commands/whoami.js +3 -3
- package/dist/commands/whoami.js.map +1 -1
- 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 +6 -1
- package/dist/host-registry.d.ts.map +1 -1
- package/dist/host-registry.js +15 -6
- package/dist/host-registry.js.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -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.map +1 -1
- package/dist/remote-host-ops.js +2 -2
- package/dist/remote-host-ops.js.map +1 -1
- 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-zrFqS7gL.js → index-DkNi0RT8.js} +184 -184
- 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-cmux/SKILL.md +0 -86
- package/daemon/assets/plugins/openrig-core/skills/openrig-herdr/SKILL.md +0 -158
- 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 -113
- 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/daemon/specs/agents/shared/skills/pm/backlog-capture/SKILL.md +0 -43
- package/daemon/specs/agents/shared/skills/pm/context-builder/SKILL.md +0 -87
- package/daemon/specs/agents/shared/skills/pm/exec-summary/SKILL.md +0 -84
- package/daemon/specs/agents/shared/skills/pm/office-hours/SKILL.md +0 -129
- package/daemon/specs/agents/shared/skills/pm/plan-review/SKILL.md +0 -98
- package/daemon/specs/agents/shared/skills/pm/requirements-writer/SKILL.md +0 -113
- package/daemon/specs/agents/shared/skills/pm/ui-mockup/SKILL.md +0 -76
- package/daemon/specs/agents/shared/skills/pods/development-team/SKILL.md +0 -148
- package/daemon/specs/agents/shared/skills/pods/orchestration-team/SKILL.md +0 -266
- package/daemon/specs/agents/shared/skills/pods/review-team/SKILL.md +0 -210
- package/daemon/specs/agents/shared/skills/process/systematic-debugging/CREATION-LOG.md +0 -119
- package/daemon/specs/agents/shared/skills/process/systematic-debugging/test-academic.md +0 -14
- package/daemon/specs/agents/shared/skills/process/systematic-debugging/test-pressure-1.md +0 -58
- package/daemon/specs/agents/shared/skills/process/systematic-debugging/test-pressure-2.md +0 -68
- package/daemon/specs/agents/shared/skills/process/systematic-debugging/test-pressure-3.md +0 -69
- package/ui/dist/assets/index-CFqxa0zW.css +0 -32
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import nodePath from "node:path";
|
|
2
2
|
import { mkdirSync, writeFileSync } from "node:fs";
|
|
3
3
|
import { assembleBundle } from "./context-packs/bundle-assembler.js";
|
|
4
|
+
import { resolvePermissionPolicyAttachment, resolvePermissionPolicyRefValue, } from "./permission-policy/policy-ref.js";
|
|
4
5
|
import { deriveCanonicalSessionName, validateSessionComponents } from "./session-name.js";
|
|
5
6
|
import { LegacyRigSpecSchema as RigSpecSchema } from "./rigspec-schema.js"; // TODO: AS-T08b — migrate to pod-aware RigSpec
|
|
6
7
|
import { LegacyRigSpecCodec as RigSpecCodec } from "./rigspec-codec.js"; // TODO: AS-T08b — migrate to pod-aware RigSpec
|
|
@@ -247,6 +248,17 @@ import { resolveNodeConfig } from "./profile-resolver.js";
|
|
|
247
248
|
import { resolveStartup } from "./startup-resolver.js";
|
|
248
249
|
import { planProjection } from "./projection-planner.js";
|
|
249
250
|
import { resolveConcreteHint } from "./runtime-adapter.js";
|
|
251
|
+
function defaultCultureStartupFile() {
|
|
252
|
+
const assetsRoot = nodePath.resolve(import.meta.dirname, "../../assets");
|
|
253
|
+
return {
|
|
254
|
+
path: "CULTURE-default.md",
|
|
255
|
+
absolutePath: nodePath.join(assetsRoot, "guidance/CULTURE-default.md"),
|
|
256
|
+
ownerRoot: assetsRoot,
|
|
257
|
+
deliveryHint: "guidance_merge",
|
|
258
|
+
required: true,
|
|
259
|
+
appliesOn: ["fresh_start", "restore"],
|
|
260
|
+
};
|
|
261
|
+
}
|
|
250
262
|
/**
|
|
251
263
|
* Pod-aware rig instantiator. Creates pods, nodes, edges, and runs
|
|
252
264
|
* startup orchestration per node with resolved agent specs.
|
|
@@ -266,6 +278,20 @@ export class PodRigInstantiator {
|
|
|
266
278
|
this.db = deps.db;
|
|
267
279
|
this.deps = deps;
|
|
268
280
|
}
|
|
281
|
+
inheritedPermissionPolicy(targetRigId) {
|
|
282
|
+
if (!targetRigId)
|
|
283
|
+
return undefined;
|
|
284
|
+
const provenance = this.deps.rigRepo.getRigPolicyProvenance(targetRigId);
|
|
285
|
+
if (!provenance?.rigRef)
|
|
286
|
+
return undefined;
|
|
287
|
+
return {
|
|
288
|
+
ref: provenance.rigRef,
|
|
289
|
+
origin: provenance.origin,
|
|
290
|
+
launchPosture: provenance.launchPosture,
|
|
291
|
+
...(provenance.resolvedTarget ? { resolvedTarget: provenance.resolvedTarget } : {}),
|
|
292
|
+
...(provenance.declaringDir ? { declaringDir: provenance.declaringDir } : {}),
|
|
293
|
+
};
|
|
294
|
+
}
|
|
269
295
|
async materialize(rigSpecYaml, rigRoot, opts) {
|
|
270
296
|
let raw;
|
|
271
297
|
try {
|
|
@@ -292,6 +318,7 @@ export class PodRigInstantiator {
|
|
|
292
318
|
fsOps: this.deps.fsOps,
|
|
293
319
|
rigNameOverride: targetRig?.rig.name,
|
|
294
320
|
externalQualifiedIds: targetRig?.nodes.map((node) => node.logicalId),
|
|
321
|
+
inheritedPermissionPolicy: this.inheritedPermissionPolicy(opts?.targetRigId),
|
|
295
322
|
exec: this.deps.exec,
|
|
296
323
|
});
|
|
297
324
|
if (!preflight.ready) {
|
|
@@ -301,7 +328,7 @@ export class PodRigInstantiator {
|
|
|
301
328
|
// persistence CORE (createPod + create-node + edges + events, in one tx)
|
|
302
329
|
// takes the already-parsed+validated spec so `expand` and the `add_member`
|
|
303
330
|
// converge op compose it WITHOUT fabricating a synthetic rig spec.
|
|
304
|
-
return this.materializeValidatedSpec(rigSpec, rigRoot, opts);
|
|
331
|
+
return this.materializeValidatedSpec(rigSpec, rigRoot, preflight.warnings, opts);
|
|
305
332
|
}
|
|
306
333
|
/**
|
|
307
334
|
* materialize with a STRUCTURED front (OPR.0.3.3.24): the YAML-free sibling of
|
|
@@ -331,12 +358,13 @@ export class PodRigInstantiator {
|
|
|
331
358
|
cwdOverride: opts?.cwdOverride,
|
|
332
359
|
fsOps: this.deps.fsOps,
|
|
333
360
|
rigNameOverride: targetRig?.rig.name,
|
|
361
|
+
inheritedPermissionPolicy: this.inheritedPermissionPolicy(opts?.targetRigId),
|
|
334
362
|
exec: this.deps.exec,
|
|
335
363
|
});
|
|
336
364
|
if (!preflight.ready) {
|
|
337
365
|
return { ok: false, code: "preflight_failed", errors: preflight.errors, warnings: preflight.warnings };
|
|
338
366
|
}
|
|
339
|
-
return this.materializeValidatedSpec(rigSpec, rigRoot, opts);
|
|
367
|
+
return this.materializeValidatedSpec(rigSpec, rigRoot, preflight.warnings, opts);
|
|
340
368
|
}
|
|
341
369
|
/**
|
|
342
370
|
* materialize CORE (OPR.0.3.3.24): the persistence body of materialize, taking
|
|
@@ -348,7 +376,7 @@ export class PodRigInstantiator {
|
|
|
348
376
|
* `add_member` reuse the exact create path — create+launch only, no identity
|
|
349
377
|
* migration.
|
|
350
378
|
*/
|
|
351
|
-
async materializeValidatedSpec(rigSpec, rigRoot, opts) {
|
|
379
|
+
async materializeValidatedSpec(rigSpec, rigRoot, preflightWarnings, opts) {
|
|
352
380
|
const persistedEvents = [];
|
|
353
381
|
const nodeResults = [];
|
|
354
382
|
try {
|
|
@@ -363,6 +391,24 @@ export class PodRigInstantiator {
|
|
|
363
391
|
if (rigSpec.workspace) {
|
|
364
392
|
this.deps.rigRepo.setRigWorkspace(materializedRigId, rigSpec.workspace);
|
|
365
393
|
}
|
|
394
|
+
// OPR.0.4.8.3 Seam B: persist the rig-level permission_policy REF (raw, like role) —
|
|
395
|
+
// this is ONE of TWO rig-persist sites (materializeValidatedSpec + instantiate); missing
|
|
396
|
+
// either drops the rig ref on that path (map correction, independently verified).
|
|
397
|
+
// Guard-F1: the RESOLVED rig attachment persists too (declaringDir = THIS rigRoot,
|
|
398
|
+
// the original declaring RigSpec dir) — restart-complete for organic seats,
|
|
399
|
+
// add-member under a different root, and successor continuity. STRICT (load-bearing).
|
|
400
|
+
if (rigSpec.permissionPolicy) {
|
|
401
|
+
this.deps.rigRepo.setRigPermissionPolicy(materializedRigId, rigSpec.permissionPolicy);
|
|
402
|
+
const rigAttachment = resolvePermissionPolicyAttachment(rigSpec.permissionPolicy, rigRoot, {
|
|
403
|
+
readFile: (p) => this.deps.fsOps.readFile(p),
|
|
404
|
+
});
|
|
405
|
+
this.deps.rigRepo.setRigPolicyProvenance(materializedRigId, {
|
|
406
|
+
origin: rigAttachment.origin,
|
|
407
|
+
resolvedTarget: rigAttachment.resolvedTarget ?? null,
|
|
408
|
+
declaringDir: rigAttachment.origin === "custom" ? rigRoot : null,
|
|
409
|
+
launchPosture: rigAttachment.launchPosture,
|
|
410
|
+
});
|
|
411
|
+
}
|
|
366
412
|
const currentRig = this.deps.rigRepo.getRig(materializedRigId);
|
|
367
413
|
const logicalIdToNodeId = new Map(currentRig.nodes.map((node) => [node.logicalId, node.id]));
|
|
368
414
|
const existingPodIds = new Set(currentRig.nodes
|
|
@@ -404,6 +450,26 @@ export class PodRigInstantiator {
|
|
|
404
450
|
cwdOverride: opts?.cwdOverride,
|
|
405
451
|
});
|
|
406
452
|
logicalIdToNodeId.set(qualifiedId, node.id);
|
|
453
|
+
// Seam B R2: restart-stable provenance persists AT MATERIALIZE (a
|
|
454
|
+
// materialized-but-never-launched seat must still restore its posture).
|
|
455
|
+
// R2 HIGH-1: expansion into an EXISTING rig materializes through a SYNTHETIC
|
|
456
|
+
// fragment with no rig-level ref — a ref-less member must inherit the
|
|
457
|
+
// PERSISTED target-rig attachment (original declaring dir), never lose it.
|
|
458
|
+
const materializeAttachment = this.resolveMemberPolicyAttachment(member.permissionPolicy, rigSpec.permissionPolicy, rigRoot);
|
|
459
|
+
if (materializeAttachment) {
|
|
460
|
+
this.persistNodePolicyProvenanceStrict(node.id, materializeAttachment);
|
|
461
|
+
}
|
|
462
|
+
else if (opts?.targetRigId) {
|
|
463
|
+
const rigProv = this.deps.rigRepo.getRigPolicyProvenance(materializedRigId);
|
|
464
|
+
if (rigProv) {
|
|
465
|
+
this.deps.rigRepo.setNodePolicyProvenance(node.id, {
|
|
466
|
+
origin: rigProv.origin,
|
|
467
|
+
resolvedTarget: rigProv.resolvedTarget,
|
|
468
|
+
declaringDir: rigProv.declaringDir,
|
|
469
|
+
launchPosture: rigProv.launchPosture,
|
|
470
|
+
});
|
|
471
|
+
}
|
|
472
|
+
}
|
|
407
473
|
nodeResults.push({ logicalId: qualifiedId, status: "materialized" });
|
|
408
474
|
persistedEvents.push(event);
|
|
409
475
|
}
|
|
@@ -446,6 +512,7 @@ export class PodRigInstantiator {
|
|
|
446
512
|
specName: rigSpec.name,
|
|
447
513
|
specVersion: rigSpec.version,
|
|
448
514
|
nodes: nodeResults,
|
|
515
|
+
warnings: preflightWarnings,
|
|
449
516
|
},
|
|
450
517
|
};
|
|
451
518
|
}
|
|
@@ -621,6 +688,7 @@ export class PodRigInstantiator {
|
|
|
621
688
|
cwdOverride: opts?.cwdOverride,
|
|
622
689
|
fsOps: this.deps.fsOps,
|
|
623
690
|
rigNameOverride: rig.rig.name,
|
|
691
|
+
inheritedPermissionPolicy: this.inheritedPermissionPolicy(rigId),
|
|
624
692
|
exec: this.deps.exec,
|
|
625
693
|
});
|
|
626
694
|
if (!preflight.ready) {
|
|
@@ -681,6 +749,28 @@ export class PodRigInstantiator {
|
|
|
681
749
|
});
|
|
682
750
|
createdNodeId = node.id;
|
|
683
751
|
createdEvent = event;
|
|
752
|
+
// Seam B Guard-F1: add_member runs under the CURRENT operation's root, which may
|
|
753
|
+
// differ from the ORIGINAL declaring RigSpec dir. A member OVERRIDE resolves against
|
|
754
|
+
// this operation's root (it is declared HERE); an INHERITED rig policy must reuse the
|
|
755
|
+
// PERSISTED rig attachment (original declaring root) — never re-resolve the raw rig
|
|
756
|
+
// ref against an unrelated root. STRICT persistence (load-bearing).
|
|
757
|
+
if (member.permissionPolicy) {
|
|
758
|
+
const memberAttachment = resolvePermissionPolicyAttachment(member.permissionPolicy, rigRoot, {
|
|
759
|
+
readFile: (p) => this.deps.fsOps.readFile(p),
|
|
760
|
+
});
|
|
761
|
+
this.persistNodePolicyProvenanceStrict(node.id, memberAttachment);
|
|
762
|
+
}
|
|
763
|
+
else {
|
|
764
|
+
const rigProv = this.deps.rigRepo.getRigPolicyProvenance(rigId);
|
|
765
|
+
if (rigProv) {
|
|
766
|
+
this.deps.rigRepo.setNodePolicyProvenance(node.id, {
|
|
767
|
+
origin: rigProv.origin,
|
|
768
|
+
resolvedTarget: rigProv.resolvedTarget,
|
|
769
|
+
declaringDir: rigProv.declaringDir,
|
|
770
|
+
launchPosture: rigProv.launchPosture,
|
|
771
|
+
});
|
|
772
|
+
}
|
|
773
|
+
}
|
|
684
774
|
if (resolvedEdges.length > 0) {
|
|
685
775
|
const logicalIdToNodeId = new Map(rig.nodes.map((n) => [n.logicalId, n.id]));
|
|
686
776
|
logicalIdToNodeId.set(qualifiedId, node.id);
|
|
@@ -719,7 +809,7 @@ export class PodRigInstantiator {
|
|
|
719
809
|
sessionName: launched.sessionName,
|
|
720
810
|
},
|
|
721
811
|
edges: resolvedEdges,
|
|
722
|
-
warnings: launched.warnings,
|
|
812
|
+
warnings: [...preflight.warnings, ...(launched.warnings ?? [])],
|
|
723
813
|
},
|
|
724
814
|
};
|
|
725
815
|
}
|
|
@@ -766,6 +856,21 @@ export class PodRigInstantiator {
|
|
|
766
856
|
if (rigSpec.workspace) {
|
|
767
857
|
this.deps.rigRepo.setRigWorkspace(rigId, rigSpec.workspace);
|
|
768
858
|
}
|
|
859
|
+
// OPR.0.4.8.3 Seam B: the SECOND rig-persist site (bootstrap instantiate path) —
|
|
860
|
+
// both sites must write or the rig ref silently drops on one instantiate path.
|
|
861
|
+
// Guard-F1: resolved rig attachment persists here too (declaringDir = rigRoot).
|
|
862
|
+
if (rigSpec.permissionPolicy) {
|
|
863
|
+
this.deps.rigRepo.setRigPermissionPolicy(rigId, rigSpec.permissionPolicy);
|
|
864
|
+
const rigAttachment = resolvePermissionPolicyAttachment(rigSpec.permissionPolicy, rigRoot, {
|
|
865
|
+
readFile: (p) => this.deps.fsOps.readFile(p),
|
|
866
|
+
});
|
|
867
|
+
this.deps.rigRepo.setRigPolicyProvenance(rigId, {
|
|
868
|
+
origin: rigAttachment.origin,
|
|
869
|
+
resolvedTarget: rigAttachment.resolvedTarget ?? null,
|
|
870
|
+
declaringDir: rigAttachment.origin === "custom" ? rigRoot : null,
|
|
871
|
+
launchPosture: rigAttachment.launchPosture,
|
|
872
|
+
});
|
|
873
|
+
}
|
|
769
874
|
}
|
|
770
875
|
catch (err) {
|
|
771
876
|
return { ok: false, code: "instantiate_error", message: err.message };
|
|
@@ -774,7 +879,7 @@ export class PodRigInstantiator {
|
|
|
774
879
|
const nodeResults = [];
|
|
775
880
|
const nodeIdMap = {}; // "pod.member" -> node DB id
|
|
776
881
|
const launchedSessionNames = []; // Track for orphan cleanup on total failure
|
|
777
|
-
const podInstantiateWarnings =
|
|
882
|
+
const podInstantiateWarnings = preflight.warnings;
|
|
778
883
|
// Store per-member context for deferred launch
|
|
779
884
|
const memberContext = new Map();
|
|
780
885
|
// Phase 1: Create all pods and collect member entries
|
|
@@ -847,8 +952,7 @@ export class PodRigInstantiator {
|
|
|
847
952
|
continue;
|
|
848
953
|
}
|
|
849
954
|
// Create node
|
|
850
|
-
|
|
851
|
-
try {
|
|
955
|
+
const createUnit = this.db.transaction(() => {
|
|
852
956
|
const node = this.deps.rigRepo.addNode(rigId, qualifiedId, {
|
|
853
957
|
// OPR.0.4.6.FAC1 (VM-caught): the pod-aware bootstrap
|
|
854
958
|
// instantiate-from-YAML path (`rig up <spec>`) creates agent
|
|
@@ -863,6 +967,10 @@ export class PodRigInstantiator {
|
|
|
863
967
|
runtime: member.runtime,
|
|
864
968
|
model: member.model,
|
|
865
969
|
codexConfigProfile: member.codexConfigProfile,
|
|
970
|
+
// OPR.0.4.8.3 Seam B: bootstrap inline addNode is the FOURTH node-creation
|
|
971
|
+
// site (see the role wire note above) — same member-ref persistence as
|
|
972
|
+
// createMemberNode or `rig up <spec>` seats lose their policy ref.
|
|
973
|
+
permissionPolicy: member.permissionPolicy,
|
|
866
974
|
cwd: configResult.config.cwd,
|
|
867
975
|
restorePolicy: configResult.config.restorePolicy,
|
|
868
976
|
podId,
|
|
@@ -873,7 +981,21 @@ export class PodRigInstantiator {
|
|
|
873
981
|
resolvedSpecVersion: configResult.config.resolvedSpecVersion,
|
|
874
982
|
resolvedSpecHash: configResult.config.resolvedSpecHash,
|
|
875
983
|
});
|
|
876
|
-
|
|
984
|
+
// Guard multi-seat correction (16e853a7): node creation + required provenance
|
|
985
|
+
// are ONE ATOMIC UNIT (SQLite savepoint). A setter fault rolls the INSERT back
|
|
986
|
+
// too — under partial-success semantics the sibling may proceed, but a failed
|
|
987
|
+
// member can never survive as a half-created node whose restore posture would
|
|
988
|
+
// widen to the rig attachment. (Previously the row survived with provenance
|
|
989
|
+
// null, and resolveRestorePosture fell through to rig full_bypass.)
|
|
990
|
+
const bootstrapAttachment = this.resolveMemberPolicyAttachment(member.permissionPolicy, rigSpec.permissionPolicy, rigRoot);
|
|
991
|
+
if (bootstrapAttachment)
|
|
992
|
+
this.persistNodePolicyProvenanceStrict(node.id, bootstrapAttachment);
|
|
993
|
+
return node.id;
|
|
994
|
+
});
|
|
995
|
+
let nodeId;
|
|
996
|
+
try {
|
|
997
|
+
nodeId = createUnit();
|
|
998
|
+
// nodeIdMap only AFTER the atomic unit succeeds (Guard contract item 2).
|
|
877
999
|
nodeIdMap[qualifiedId] = nodeId;
|
|
878
1000
|
}
|
|
879
1001
|
catch (err) {
|
|
@@ -1147,6 +1269,9 @@ export class PodRigInstantiator {
|
|
|
1147
1269
|
runtime: input.member.runtime,
|
|
1148
1270
|
model: input.member.model,
|
|
1149
1271
|
codexConfigProfile: input.member.codexConfigProfile,
|
|
1272
|
+
// OPR.0.4.8.3 Seam B: the member's OWN raw ref persists on the node (like role);
|
|
1273
|
+
// rig-level lives on the rig row; precedence applies at RESOLUTION, not storage.
|
|
1274
|
+
permissionPolicy: input.member.permissionPolicy,
|
|
1150
1275
|
cwd: effectiveCwd,
|
|
1151
1276
|
restorePolicy: input.member.restorePolicy,
|
|
1152
1277
|
podId: input.podId,
|
|
@@ -1176,6 +1301,40 @@ export class PodRigInstantiator {
|
|
|
1176
1301
|
? this.launchExistingTerminalMember(input)
|
|
1177
1302
|
: this.launchExistingAgentMember(input);
|
|
1178
1303
|
}
|
|
1304
|
+
/**
|
|
1305
|
+
* OPR.0.4.8.3 Seam B — the ONE precedence + resolution point for a seat's permission
|
|
1306
|
+
* policy at launch: member ref > rig ref > absent (undefined = the env-driven floor).
|
|
1307
|
+
* Custom refs resolve relative to the rig root (the declaring RigSpec's directory in a
|
|
1308
|
+
* materialized rig). Returns undefined when no ref is attached at either level.
|
|
1309
|
+
*/
|
|
1310
|
+
resolveMemberPolicyAttachment(memberRef, rigRef, rigRoot) {
|
|
1311
|
+
const ref = resolvePermissionPolicyRefValue(memberRef, rigRef);
|
|
1312
|
+
if (!ref)
|
|
1313
|
+
return undefined;
|
|
1314
|
+
return resolvePermissionPolicyAttachment(ref, rigRoot, {
|
|
1315
|
+
readFile: (p) => this.deps.fsOps.readFile(p),
|
|
1316
|
+
});
|
|
1317
|
+
}
|
|
1318
|
+
/** Seam B Guard-F2: the STRICT materialize/add-member persist — provenance here is
|
|
1319
|
+
* LOAD-BEARING restart state; a real write failure must fail the surrounding
|
|
1320
|
+
* transaction, never commit a node without it. (The repository setter itself still
|
|
1321
|
+
* no-ops on pre-057 legacy fixture DBs — that narrow compatibility is preserved.) */
|
|
1322
|
+
persistNodePolicyProvenanceStrict(nodeId, attachment) {
|
|
1323
|
+
this.deps.rigRepo.setNodePolicyProvenance(nodeId, {
|
|
1324
|
+
origin: attachment.origin,
|
|
1325
|
+
resolvedTarget: attachment.resolvedTarget ?? null,
|
|
1326
|
+
declaringDir: attachment.declaringDir ?? null,
|
|
1327
|
+
launchPosture: attachment.launchPosture,
|
|
1328
|
+
});
|
|
1329
|
+
}
|
|
1330
|
+
/** Seam B: the LAUNCH-time refresh stays best-effort (idempotent re-write on an already-
|
|
1331
|
+
* materialized node; a transient failure must not block a launch). */
|
|
1332
|
+
persistNodePolicyProvenance(nodeId, attachment) {
|
|
1333
|
+
try {
|
|
1334
|
+
this.persistNodePolicyProvenanceStrict(nodeId, attachment);
|
|
1335
|
+
}
|
|
1336
|
+
catch { /* best-effort on launch refresh only */ }
|
|
1337
|
+
}
|
|
1179
1338
|
async launchExistingAgentMember(input) {
|
|
1180
1339
|
const resolveResult = input.resolveResult ?? resolveAgentRef(input.member.agentRef, input.rigRoot, this.deps.fsOps);
|
|
1181
1340
|
if (!resolveResult.ok) {
|
|
@@ -1199,6 +1358,24 @@ export class PodRigInstantiator {
|
|
|
1199
1358
|
return { status: "failed", error: configResult.errors.join("; ") };
|
|
1200
1359
|
}
|
|
1201
1360
|
this.updateNodeResolvedConfig(input.nodeId, configResult.config);
|
|
1361
|
+
// OPR.0.4.8.3 Seam B: resolve the seat's permission-policy attachment once for this
|
|
1362
|
+
// launch (member > rig precedence; declaring dir = the rig root, where the declaring
|
|
1363
|
+
// RigSpec + its relative policy files live). Also persists restart-stable provenance.
|
|
1364
|
+
// R2 HIGH-1: the LIVE binding must AGREE with persisted provenance — structured
|
|
1365
|
+
// add-member/expansion launch with a SYNTHETIC minimal spec (no rig-level ref), so
|
|
1366
|
+
// when the in-memory spec resolves nothing, the PERSISTED node provenance (written in
|
|
1367
|
+
// the creation tx) and then the PERSISTED rig attachment are the binding's truth.
|
|
1368
|
+
const policyAttachment = this.resolveMemberPolicyAttachment(input.member.permissionPolicy, input.rigSpec.permissionPolicy, input.rigRoot);
|
|
1369
|
+
if (policyAttachment)
|
|
1370
|
+
this.persistNodePolicyProvenance(input.nodeId, policyAttachment);
|
|
1371
|
+
// R2 terminal (954d97a0): TRUE ABSENCE binds the locked MINIMUM FLOOR explicitly
|
|
1372
|
+
// (README v4 "DEFAULT IF NONE ATTACHED = the minimum floor"; FINAL2) — ambient
|
|
1373
|
+
// OPENRIG_YOLO must never widen a seat with no attachment. Absence stays honest
|
|
1374
|
+
// (no fabricated attachment/provenance); only the lifecycle BINDING is explicit.
|
|
1375
|
+
const launchPosture = policyAttachment?.launchPosture
|
|
1376
|
+
?? this.deps.rigRepo.getNodePolicyProvenance(input.nodeId)?.launchPosture
|
|
1377
|
+
?? this.deps.rigRepo.getRigPolicyProvenance(input.rigId)?.launchPosture
|
|
1378
|
+
?? "floor";
|
|
1202
1379
|
const sessionNameErrors = validateSessionComponents(input.pod.id, input.member.id, input.rigSpec.name);
|
|
1203
1380
|
if (sessionNameErrors.length > 0) {
|
|
1204
1381
|
return { status: "failed", error: sessionNameErrors.join("; ") };
|
|
@@ -1245,6 +1422,9 @@ export class PodRigInstantiator {
|
|
|
1245
1422
|
cwd: configResult.config.cwd,
|
|
1246
1423
|
model: configResult.config.model,
|
|
1247
1424
|
codexConfigProfile: input.member.codexConfigProfile,
|
|
1425
|
+
// OPR.0.4.8.3 Seam B: resolved launch posture (member > rig > persisted > FLOOR)
|
|
1426
|
+
// binds per-seat explicitly; adapters thread it into the yolo-mode helpers.
|
|
1427
|
+
launchPosture,
|
|
1248
1428
|
};
|
|
1249
1429
|
// session_source dispatch: fork (native runtime fork) vs rebuild (artifact-
|
|
1250
1430
|
// injected fresh launch) vs agent_image (PL-016 Item 4: dispatch through
|
|
@@ -1407,6 +1587,13 @@ export class PodRigInstantiator {
|
|
|
1407
1587
|
}
|
|
1408
1588
|
async launchExistingTerminalMember(input) {
|
|
1409
1589
|
const effectiveCwd = resolveLaunchCwd(input.member.cwd, input.rigRoot, input.cwdOverride);
|
|
1590
|
+
const terminalPolicyAttachment = this.resolveMemberPolicyAttachment(input.member.permissionPolicy, input.rigSpec.permissionPolicy, input.rigRoot);
|
|
1591
|
+
if (terminalPolicyAttachment)
|
|
1592
|
+
this.persistNodePolicyProvenance(input.nodeId, terminalPolicyAttachment);
|
|
1593
|
+
const terminalLaunchPosture = terminalPolicyAttachment?.launchPosture
|
|
1594
|
+
?? this.deps.rigRepo.getNodePolicyProvenance(input.nodeId)?.launchPosture
|
|
1595
|
+
?? this.deps.rigRepo.getRigPolicyProvenance(input.rigId)?.launchPosture
|
|
1596
|
+
?? "floor"; // R2 terminal: absence = the locked floor, explicitly
|
|
1410
1597
|
const sessionNameErrors = validateSessionComponents(input.pod.id, input.member.id, input.rigSpec.name);
|
|
1411
1598
|
if (sessionNameErrors.length > 0) {
|
|
1412
1599
|
return { status: "failed", error: sessionNameErrors.join("; ") };
|
|
@@ -1446,6 +1633,9 @@ export class PodRigInstantiator {
|
|
|
1446
1633
|
cmuxSurface: null,
|
|
1447
1634
|
updatedAt: "",
|
|
1448
1635
|
cwd: effectiveCwd,
|
|
1636
|
+
// Seam B: a terminal seat has no harness posture flag, but the resolved/persisted
|
|
1637
|
+
// posture (floor when absent) still binds for provenance-consuming consumers.
|
|
1638
|
+
launchPosture: terminalLaunchPosture,
|
|
1449
1639
|
};
|
|
1450
1640
|
const adapter = this.deps.adapters["terminal"];
|
|
1451
1641
|
if (!adapter) {
|
|
@@ -1493,7 +1683,8 @@ export class PodRigInstantiator {
|
|
|
1493
1683
|
buildTerminalResolvedStartupFiles(rigSpec, rigRoot, pod, member) {
|
|
1494
1684
|
const files = [];
|
|
1495
1685
|
// Skip layers 1-2 (agent base, profile) — terminal nodes have no agent spec
|
|
1496
|
-
// Layer 3:
|
|
1686
|
+
// Layer 3: OpenRig culture floor, then the rig-specific overlay.
|
|
1687
|
+
files.push(defaultCultureStartupFile());
|
|
1497
1688
|
if (rigSpec.cultureFile) {
|
|
1498
1689
|
files.push({
|
|
1499
1690
|
path: rigSpec.cultureFile,
|
|
@@ -1538,7 +1729,8 @@ export class PodRigInstantiator {
|
|
|
1538
1729
|
files.push({ ...f, absolutePath: nodePath.resolve(agentSourcePath, f.path), ownerRoot: agentSourcePath });
|
|
1539
1730
|
}
|
|
1540
1731
|
}
|
|
1541
|
-
// 3.
|
|
1732
|
+
// 3. OpenRig culture floor, then the rig-specific overlay.
|
|
1733
|
+
files.push(defaultCultureStartupFile());
|
|
1542
1734
|
if (rigSpec.cultureFile) {
|
|
1543
1735
|
files.push({
|
|
1544
1736
|
path: rigSpec.cultureFile,
|