@openrig/cli 0.4.7 → 0.5.0

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.
Files changed (463) hide show
  1. package/daemon/assets/claude-statusline-context.cjs +40 -8
  2. package/daemon/assets/plugins/openrig-core/hooks/scripts/activity-relay.cjs +0 -0
  3. package/daemon/assets/plugins/openrig-core/skills/applying-a-permission-policy/SKILL.md +120 -0
  4. package/daemon/assets/plugins/openrig-core/skills/claude-compaction-restore/scripts/precompact-hook.mjs +0 -0
  5. package/daemon/assets/plugins/openrig-core/skills/claude-compaction-restore/scripts/restore-from-jsonl.mjs +0 -0
  6. package/daemon/assets/plugins/openrig-core/skills/delegating-work/SKILL.md +43 -0
  7. package/daemon/assets/plugins/openrig-core/skills/forming-an-openrig-mental-model/SKILL.md +2 -0
  8. package/daemon/assets/plugins/openrig-core/skills/openrig-skills/SKILL.md +50 -57
  9. package/daemon/assets/plugins/openrig-core/skills/openrig-user/SKILL.md +84 -19
  10. package/daemon/assets/plugins/openrig-core/skills/queue-handoff/SKILL.md +2 -0
  11. package/daemon/assets/plugins/openrig-core/skills/seat-continuity-and-handover/SKILL.md +2 -1
  12. package/daemon/assets/plugins/openrig-core/skills/session-compaction-and-restore/SKILL.md +1 -0
  13. package/daemon/dist/adapters/claude-code-adapter.d.ts +36 -9
  14. package/daemon/dist/adapters/claude-code-adapter.d.ts.map +1 -1
  15. package/daemon/dist/adapters/claude-code-adapter.js +216 -49
  16. package/daemon/dist/adapters/claude-code-adapter.js.map +1 -1
  17. package/daemon/dist/adapters/claude-resume.d.ts +1 -1
  18. package/daemon/dist/adapters/claude-resume.d.ts.map +1 -1
  19. package/daemon/dist/adapters/claude-resume.js +8 -2
  20. package/daemon/dist/adapters/claude-resume.js.map +1 -1
  21. package/daemon/dist/adapters/codex-resume.d.ts +1 -1
  22. package/daemon/dist/adapters/codex-resume.d.ts.map +1 -1
  23. package/daemon/dist/adapters/codex-resume.js +4 -2
  24. package/daemon/dist/adapters/codex-resume.js.map +1 -1
  25. package/daemon/dist/adapters/codex-runtime-adapter.d.ts +12 -0
  26. package/daemon/dist/adapters/codex-runtime-adapter.d.ts.map +1 -1
  27. package/daemon/dist/adapters/codex-runtime-adapter.js +34 -7
  28. package/daemon/dist/adapters/codex-runtime-adapter.js.map +1 -1
  29. package/daemon/dist/adapters/pi-resume.d.ts +1 -1
  30. package/daemon/dist/adapters/pi-resume.d.ts.map +1 -1
  31. package/daemon/dist/adapters/pi-resume.js +7 -2
  32. package/daemon/dist/adapters/pi-resume.js.map +1 -1
  33. package/daemon/dist/adapters/pi-runtime-adapter.d.ts.map +1 -1
  34. package/daemon/dist/adapters/pi-runtime-adapter.js +4 -1
  35. package/daemon/dist/adapters/pi-runtime-adapter.js.map +1 -1
  36. package/daemon/dist/adapters/yolo-mode.d.ts +23 -0
  37. package/daemon/dist/adapters/yolo-mode.d.ts.map +1 -0
  38. package/daemon/dist/adapters/yolo-mode.js +49 -0
  39. package/daemon/dist/adapters/yolo-mode.js.map +1 -0
  40. package/daemon/dist/build-info.js +3 -3
  41. package/daemon/dist/db/migrations/055_node_permission_policy.d.ts +13 -0
  42. package/daemon/dist/db/migrations/055_node_permission_policy.d.ts.map +1 -0
  43. package/daemon/dist/db/migrations/055_node_permission_policy.js +17 -0
  44. package/daemon/dist/db/migrations/055_node_permission_policy.js.map +1 -0
  45. package/daemon/dist/db/migrations/056_rig_permission_policy.d.ts +13 -0
  46. package/daemon/dist/db/migrations/056_rig_permission_policy.d.ts.map +1 -0
  47. package/daemon/dist/db/migrations/056_rig_permission_policy.js +17 -0
  48. package/daemon/dist/db/migrations/056_rig_permission_policy.js.map +1 -0
  49. package/daemon/dist/db/migrations/057_node_policy_provenance.d.ts +19 -0
  50. package/daemon/dist/db/migrations/057_node_policy_provenance.d.ts.map +1 -0
  51. package/daemon/dist/db/migrations/057_node_policy_provenance.js +26 -0
  52. package/daemon/dist/db/migrations/057_node_policy_provenance.js.map +1 -0
  53. package/daemon/dist/db/migrations/058_rig_policy_provenance.d.ts +15 -0
  54. package/daemon/dist/db/migrations/058_rig_policy_provenance.d.ts.map +1 -0
  55. package/daemon/dist/db/migrations/058_rig_policy_provenance.js +22 -0
  56. package/daemon/dist/db/migrations/058_rig_policy_provenance.js.map +1 -0
  57. package/daemon/dist/domain/agent-activity-store.d.ts +1 -0
  58. package/daemon/dist/domain/agent-activity-store.d.ts.map +1 -1
  59. package/daemon/dist/domain/agent-activity-store.js +2 -2
  60. package/daemon/dist/domain/agent-activity-store.js.map +1 -1
  61. package/daemon/dist/domain/builtin-policy-reference.d.ts +13 -0
  62. package/daemon/dist/domain/builtin-policy-reference.d.ts.map +1 -0
  63. package/daemon/dist/domain/builtin-policy-reference.js +58 -0
  64. package/daemon/dist/domain/builtin-policy-reference.js.map +1 -0
  65. package/daemon/dist/domain/claude-activity-hooks.d.ts +33 -0
  66. package/daemon/dist/domain/claude-activity-hooks.d.ts.map +1 -0
  67. package/daemon/dist/domain/claude-activity-hooks.js +60 -0
  68. package/daemon/dist/domain/claude-activity-hooks.js.map +1 -0
  69. package/daemon/dist/domain/context-packs/bundle-assembler.d.ts +30 -0
  70. package/daemon/dist/domain/context-packs/bundle-assembler.d.ts.map +1 -1
  71. package/daemon/dist/domain/context-packs/bundle-assembler.js +31 -1
  72. package/daemon/dist/domain/context-packs/bundle-assembler.js.map +1 -1
  73. package/daemon/dist/domain/context-packs/context-pack-library-service.d.ts +69 -14
  74. package/daemon/dist/domain/context-packs/context-pack-library-service.d.ts.map +1 -1
  75. package/daemon/dist/domain/context-packs/context-pack-library-service.js +263 -48
  76. package/daemon/dist/domain/context-packs/context-pack-library-service.js.map +1 -1
  77. package/daemon/dist/domain/context-packs/context-pack-types.d.ts +2 -2
  78. package/daemon/dist/domain/context-packs/context-pack-types.d.ts.map +1 -1
  79. package/daemon/dist/domain/context-packs/context-pack-types.js.map +1 -1
  80. package/daemon/dist/domain/context-packs/manifest-parser.d.ts.map +1 -1
  81. package/daemon/dist/domain/context-packs/manifest-parser.js +11 -0
  82. package/daemon/dist/domain/context-packs/manifest-parser.js.map +1 -1
  83. package/daemon/dist/domain/context-packs/ref-safety.d.ts +11 -0
  84. package/daemon/dist/domain/context-packs/ref-safety.d.ts.map +1 -0
  85. package/daemon/dist/domain/context-packs/ref-safety.js +46 -0
  86. package/daemon/dist/domain/context-packs/ref-safety.js.map +1 -0
  87. package/daemon/dist/domain/context-packs/token-estimate.d.ts +3 -0
  88. package/daemon/dist/domain/context-packs/token-estimate.d.ts.map +1 -0
  89. package/daemon/dist/domain/context-packs/token-estimate.js +5 -0
  90. package/daemon/dist/domain/context-packs/token-estimate.js.map +1 -0
  91. package/daemon/dist/domain/native-resume-probe.d.ts +1 -1
  92. package/daemon/dist/domain/native-resume-probe.d.ts.map +1 -1
  93. package/daemon/dist/domain/native-resume-probe.js +11 -4
  94. package/daemon/dist/domain/native-resume-probe.js.map +1 -1
  95. package/daemon/dist/domain/node-inventory.js +2 -2
  96. package/daemon/dist/domain/node-inventory.js.map +1 -1
  97. package/daemon/dist/domain/permission-policy/policy-ref.d.ts +89 -0
  98. package/daemon/dist/domain/permission-policy/policy-ref.d.ts.map +1 -0
  99. package/daemon/dist/domain/permission-policy/policy-ref.js +171 -0
  100. package/daemon/dist/domain/permission-policy/policy-ref.js.map +1 -0
  101. package/daemon/dist/domain/permission-policy/policy-spec.d.ts +34 -0
  102. package/daemon/dist/domain/permission-policy/policy-spec.d.ts.map +1 -0
  103. package/daemon/dist/domain/permission-policy/policy-spec.js +106 -0
  104. package/daemon/dist/domain/permission-policy/policy-spec.js.map +1 -0
  105. package/daemon/dist/domain/plugin-vendor-service.d.ts +14 -0
  106. package/daemon/dist/domain/plugin-vendor-service.d.ts.map +1 -1
  107. package/daemon/dist/domain/plugin-vendor-service.js +26 -2
  108. package/daemon/dist/domain/plugin-vendor-service.js.map +1 -1
  109. package/daemon/dist/domain/provider/claude-usage-reader.d.ts +44 -0
  110. package/daemon/dist/domain/provider/claude-usage-reader.d.ts.map +1 -0
  111. package/daemon/dist/domain/provider/claude-usage-reader.js +112 -0
  112. package/daemon/dist/domain/provider/claude-usage-reader.js.map +1 -0
  113. package/daemon/dist/domain/provider/codex-auth-reader.d.ts +18 -0
  114. package/daemon/dist/domain/provider/codex-auth-reader.d.ts.map +1 -0
  115. package/daemon/dist/domain/provider/codex-auth-reader.js +64 -0
  116. package/daemon/dist/domain/provider/codex-auth-reader.js.map +1 -0
  117. package/daemon/dist/domain/provider/host-usage-rollup.d.ts +51 -0
  118. package/daemon/dist/domain/provider/host-usage-rollup.d.ts.map +1 -0
  119. package/daemon/dist/domain/provider/host-usage-rollup.js +162 -0
  120. package/daemon/dist/domain/provider/host-usage-rollup.js.map +1 -0
  121. package/daemon/dist/domain/provider/provider-collect.d.ts +22 -0
  122. package/daemon/dist/domain/provider/provider-collect.d.ts.map +1 -0
  123. package/daemon/dist/domain/provider/provider-collect.js +74 -0
  124. package/daemon/dist/domain/provider/provider-collect.js.map +1 -0
  125. package/daemon/dist/domain/provider/provider-policy.d.ts +38 -0
  126. package/daemon/dist/domain/provider/provider-policy.d.ts.map +1 -0
  127. package/daemon/dist/domain/provider/provider-policy.js +76 -0
  128. package/daemon/dist/domain/provider/provider-policy.js.map +1 -0
  129. package/daemon/dist/domain/provider/provider-read-model.d.ts +28 -0
  130. package/daemon/dist/domain/provider/provider-read-model.d.ts.map +1 -0
  131. package/daemon/dist/domain/provider/provider-read-model.js +68 -0
  132. package/daemon/dist/domain/provider/provider-read-model.js.map +1 -0
  133. package/daemon/dist/domain/provider/provider-service-impl.d.ts +26 -0
  134. package/daemon/dist/domain/provider/provider-service-impl.d.ts.map +1 -0
  135. package/daemon/dist/domain/provider/provider-service-impl.js +83 -0
  136. package/daemon/dist/domain/provider/provider-service-impl.js.map +1 -0
  137. package/daemon/dist/domain/provider/provider-service.d.ts +33 -0
  138. package/daemon/dist/domain/provider/provider-service.d.ts.map +1 -0
  139. package/daemon/dist/domain/provider/provider-service.js +6 -0
  140. package/daemon/dist/domain/provider/provider-service.js.map +1 -0
  141. package/daemon/dist/domain/provider/provider-signals.d.ts +76 -0
  142. package/daemon/dist/domain/provider/provider-signals.d.ts.map +1 -0
  143. package/daemon/dist/domain/provider/provider-signals.js +144 -0
  144. package/daemon/dist/domain/provider/provider-signals.js.map +1 -0
  145. package/daemon/dist/domain/provider/provider-types.d.ts +101 -0
  146. package/daemon/dist/domain/provider/provider-types.d.ts.map +1 -0
  147. package/daemon/dist/domain/provider/provider-types.js +7 -0
  148. package/daemon/dist/domain/provider/provider-types.js.map +1 -0
  149. package/daemon/dist/domain/provider/reactive-tap.d.ts +29 -0
  150. package/daemon/dist/domain/provider/reactive-tap.d.ts.map +1 -0
  151. package/daemon/dist/domain/provider/reactive-tap.js +80 -0
  152. package/daemon/dist/domain/provider/reactive-tap.js.map +1 -0
  153. package/daemon/dist/domain/restore-orchestrator.d.ts +14 -0
  154. package/daemon/dist/domain/restore-orchestrator.d.ts.map +1 -1
  155. package/daemon/dist/domain/restore-orchestrator.js +90 -6
  156. package/daemon/dist/domain/restore-orchestrator.js.map +1 -1
  157. package/daemon/dist/domain/rig-expansion-service.d.ts.map +1 -1
  158. package/daemon/dist/domain/rig-expansion-service.js +10 -1
  159. package/daemon/dist/domain/rig-expansion-service.js.map +1 -1
  160. package/daemon/dist/domain/rig-repository.d.ts +45 -0
  161. package/daemon/dist/domain/rig-repository.d.ts.map +1 -1
  162. package/daemon/dist/domain/rig-repository.js +75 -1
  163. package/daemon/dist/domain/rig-repository.js.map +1 -1
  164. package/daemon/dist/domain/rigspec-codec.d.ts.map +1 -1
  165. package/daemon/dist/domain/rigspec-codec.js +6 -0
  166. package/daemon/dist/domain/rigspec-codec.js.map +1 -1
  167. package/daemon/dist/domain/rigspec-exporter.d.ts.map +1 -1
  168. package/daemon/dist/domain/rigspec-exporter.js +8 -0
  169. package/daemon/dist/domain/rigspec-exporter.js.map +1 -1
  170. package/daemon/dist/domain/rigspec-instantiator.d.ts +25 -24
  171. package/daemon/dist/domain/rigspec-instantiator.d.ts.map +1 -1
  172. package/daemon/dist/domain/rigspec-instantiator.js +190 -69
  173. package/daemon/dist/domain/rigspec-instantiator.js.map +1 -1
  174. package/daemon/dist/domain/rigspec-preflight.d.ts +22 -0
  175. package/daemon/dist/domain/rigspec-preflight.d.ts.map +1 -1
  176. package/daemon/dist/domain/rigspec-preflight.js +76 -0
  177. package/daemon/dist/domain/rigspec-preflight.js.map +1 -1
  178. package/daemon/dist/domain/rigspec-schema.d.ts.map +1 -1
  179. package/daemon/dist/domain/rigspec-schema.js +25 -0
  180. package/daemon/dist/domain/rigspec-schema.js.map +1 -1
  181. package/daemon/dist/domain/runtime-adapter.d.ts +7 -11
  182. package/daemon/dist/domain/runtime-adapter.d.ts.map +1 -1
  183. package/daemon/dist/domain/runtime-adapter.js.map +1 -1
  184. package/daemon/dist/domain/scope/attestation-lineage.generated.d.ts +14 -0
  185. package/daemon/dist/domain/scope/attestation-lineage.generated.d.ts.map +1 -0
  186. package/daemon/dist/domain/scope/attestation-lineage.generated.js +26 -0
  187. package/daemon/dist/domain/scope/attestation-lineage.generated.js.map +1 -0
  188. package/daemon/dist/domain/scope/scope-approve.d.ts +13 -0
  189. package/daemon/dist/domain/scope/scope-approve.d.ts.map +1 -1
  190. package/daemon/dist/domain/scope/scope-approve.js +50 -10
  191. package/daemon/dist/domain/scope/scope-approve.js.map +1 -1
  192. package/daemon/dist/domain/seat-handover-service.d.ts.map +1 -1
  193. package/daemon/dist/domain/seat-handover-service.js +7 -1
  194. package/daemon/dist/domain/seat-handover-service.js.map +1 -1
  195. package/daemon/dist/domain/startup-validation.d.ts.map +1 -1
  196. package/daemon/dist/domain/startup-validation.js +18 -54
  197. package/daemon/dist/domain/startup-validation.js.map +1 -1
  198. package/daemon/dist/domain/stream-store.d.ts +4 -0
  199. package/daemon/dist/domain/stream-store.d.ts.map +1 -1
  200. package/daemon/dist/domain/stream-store.js +15 -2
  201. package/daemon/dist/domain/stream-store.js.map +1 -1
  202. package/daemon/dist/domain/successor-session-launcher.d.ts +4 -0
  203. package/daemon/dist/domain/successor-session-launcher.d.ts.map +1 -1
  204. package/daemon/dist/domain/successor-session-launcher.js +2 -0
  205. package/daemon/dist/domain/successor-session-launcher.js.map +1 -1
  206. package/daemon/dist/domain/types.d.ts +19 -9
  207. package/daemon/dist/domain/types.d.ts.map +1 -1
  208. package/daemon/dist/domain/types.js.map +1 -1
  209. package/daemon/dist/domain/workspace/default-workspace-scaffold.js +1 -1
  210. package/daemon/dist/routes/agent-images.d.ts.map +1 -1
  211. package/daemon/dist/routes/agent-images.js +2 -0
  212. package/daemon/dist/routes/agent-images.js.map +1 -1
  213. package/daemon/dist/routes/context-packs.d.ts.map +1 -1
  214. package/daemon/dist/routes/context-packs.js +157 -75
  215. package/daemon/dist/routes/context-packs.js.map +1 -1
  216. package/daemon/dist/routes/provider.d.ts +3 -0
  217. package/daemon/dist/routes/provider.d.ts.map +1 -0
  218. package/daemon/dist/routes/provider.js +124 -0
  219. package/daemon/dist/routes/provider.js.map +1 -0
  220. package/daemon/dist/routes/rigs.js +8 -0
  221. package/daemon/dist/routes/rigs.js.map +1 -1
  222. package/daemon/dist/routes/scope-approve.d.ts.map +1 -1
  223. package/daemon/dist/routes/scope-approve.js +6 -3
  224. package/daemon/dist/routes/scope-approve.js.map +1 -1
  225. package/daemon/dist/routes/scope-audit.d.ts.map +1 -1
  226. package/daemon/dist/routes/scope-audit.js +4 -1
  227. package/daemon/dist/routes/scope-audit.js.map +1 -1
  228. package/daemon/dist/routes/stream.d.ts.map +1 -1
  229. package/daemon/dist/routes/stream.js +71 -1
  230. package/daemon/dist/routes/stream.js.map +1 -1
  231. package/daemon/dist/server.d.ts +3 -0
  232. package/daemon/dist/server.d.ts.map +1 -1
  233. package/daemon/dist/server.js +5 -0
  234. package/daemon/dist/server.js.map +1 -1
  235. package/daemon/dist/startup.d.ts.map +1 -1
  236. package/daemon/dist/startup.js +38 -12
  237. package/daemon/dist/startup.js.map +1 -1
  238. package/daemon/docs/reference/developing.md +39 -0
  239. package/daemon/docs/reference/rig-spec.md +19 -0
  240. package/daemon/policies/builtin/locked.policy.md +24 -0
  241. package/daemon/policies/builtin/open.policy.md +24 -0
  242. package/daemon/policies/builtin/standard.policy.md +25 -0
  243. package/daemon/policies/builtin/yolo.policy.md +20 -0
  244. package/daemon/policies/examples/my-cautious-dev.policy.md +40 -0
  245. package/daemon/specs/agents/apps/vault-specialist/agent.yaml +1 -1
  246. package/daemon/specs/agents/conveyor/builder/agent.yaml +1 -1
  247. package/daemon/specs/agents/conveyor/lead/agent.yaml +1 -1
  248. package/daemon/specs/agents/conveyor/planner/agent.yaml +1 -1
  249. package/daemon/specs/agents/conveyor/reviewer/agent.yaml +1 -1
  250. package/daemon/specs/agents/design/product-designer/agent.yaml +1 -1
  251. package/daemon/specs/agents/development/implementer/agent.yaml +1 -1
  252. package/daemon/specs/agents/development/qa/agent.yaml +1 -1
  253. package/daemon/specs/agents/factory-rsi/dogfood/agent.yaml +1 -1
  254. package/daemon/specs/agents/factory-rsi/release-manager/agent.yaml +1 -1
  255. package/daemon/specs/agents/orchestration/orchestrator/agent.yaml +1 -1
  256. package/daemon/specs/agents/product-management/pm/agent.yaml +1 -0
  257. package/daemon/specs/agents/research/analyst/agent.yaml +1 -1
  258. package/daemon/specs/agents/research/synthesizer/agent.yaml +1 -1
  259. package/daemon/specs/agents/review/independent-reviewer/agent.yaml +1 -1
  260. package/daemon/specs/agents/shared/agent.yaml +6 -0
  261. package/daemon/specs/agents/shared/runtime/claude-activity-hooks.json +4 -0
  262. package/daemon/specs/agents/shared/runtime/claude-settings.fragment.json +1 -20
  263. package/daemon/specs/agents/shared/skills/core/openrig-architect/SKILL.md +0 -2
  264. package/daemon/specs/agents/shared/skills/core/watchdog/SKILL.md +1 -0
  265. package/daemon/specs/agents/shared/skills/process/systematic-debugging/find-polluter.sh +0 -0
  266. package/daemon/specs/agents/shared/skills/process/verification-before-completion/SKILL.md +1 -0
  267. package/dist/bin-wrapper.d.ts.map +1 -1
  268. package/dist/bin-wrapper.js +7 -0
  269. package/dist/bin-wrapper.js.map +1 -1
  270. package/dist/build-info.js +3 -3
  271. package/dist/commands/agent-image.d.ts.map +1 -1
  272. package/dist/commands/agent-image.js +2 -1
  273. package/dist/commands/agent-image.js.map +1 -1
  274. package/dist/commands/broadcast.d.ts.map +1 -1
  275. package/dist/commands/broadcast.js +37 -2
  276. package/dist/commands/broadcast.js.map +1 -1
  277. package/dist/commands/context.d.ts +2 -7
  278. package/dist/commands/context.d.ts.map +1 -1
  279. package/dist/commands/context.js +391 -213
  280. package/dist/commands/context.js.map +1 -1
  281. package/dist/commands/provider.d.ts +4 -0
  282. package/dist/commands/provider.d.ts.map +1 -0
  283. package/dist/commands/provider.js +218 -0
  284. package/dist/commands/provider.js.map +1 -0
  285. package/dist/commands/ps.d.ts +7 -0
  286. package/dist/commands/ps.d.ts.map +1 -1
  287. package/dist/commands/ps.js +34 -4
  288. package/dist/commands/ps.js.map +1 -1
  289. package/dist/commands/queue.d.ts.map +1 -1
  290. package/dist/commands/queue.js +38 -8
  291. package/dist/commands/queue.js.map +1 -1
  292. package/dist/commands/scope.d.ts.map +1 -1
  293. package/dist/commands/scope.js +48 -4
  294. package/dist/commands/scope.js.map +1 -1
  295. package/dist/commands/send.d.ts.map +1 -1
  296. package/dist/commands/send.js +70 -11
  297. package/dist/commands/send.js.map +1 -1
  298. package/dist/commands/setup.d.ts +14 -0
  299. package/dist/commands/setup.d.ts.map +1 -1
  300. package/dist/commands/setup.js +131 -8
  301. package/dist/commands/setup.js.map +1 -1
  302. package/dist/commands/stream.d.ts +1 -0
  303. package/dist/commands/stream.d.ts.map +1 -1
  304. package/dist/commands/stream.js +93 -0
  305. package/dist/commands/stream.js.map +1 -1
  306. package/dist/commands/tui.d.ts +4 -0
  307. package/dist/commands/tui.d.ts.map +1 -0
  308. package/dist/commands/tui.js +29 -0
  309. package/dist/commands/tui.js.map +1 -0
  310. package/dist/commands/walk.d.ts +19 -0
  311. package/dist/commands/walk.d.ts.map +1 -0
  312. package/dist/commands/walk.js +139 -0
  313. package/dist/commands/walk.js.map +1 -0
  314. package/dist/context-resolve.d.ts +14 -0
  315. package/dist/context-resolve.d.ts.map +1 -0
  316. package/dist/context-resolve.js +40 -0
  317. package/dist/context-resolve.js.map +1 -0
  318. package/dist/front-door.d.ts +31 -0
  319. package/dist/front-door.d.ts.map +1 -0
  320. package/dist/front-door.js +114 -0
  321. package/dist/front-door.js.map +1 -0
  322. package/dist/index.d.ts +3 -1
  323. package/dist/index.d.ts.map +1 -1
  324. package/dist/index.js +19 -6
  325. package/dist/index.js.map +1 -1
  326. package/dist/lib/scope/attestation-lineage.d.ts +14 -0
  327. package/dist/lib/scope/attestation-lineage.d.ts.map +1 -0
  328. package/dist/lib/scope/attestation-lineage.js +34 -0
  329. package/dist/lib/scope/attestation-lineage.js.map +1 -0
  330. package/package.json +4 -2
  331. package/tui/dist/daemon-client.d.ts +56 -0
  332. package/tui/dist/daemon-client.d.ts.map +1 -0
  333. package/tui/dist/daemon-client.js +99 -0
  334. package/tui/dist/daemon-client.js.map +1 -0
  335. package/tui/dist/demo-data.d.ts +3 -0
  336. package/tui/dist/demo-data.d.ts.map +1 -0
  337. package/tui/dist/demo-data.js +52 -0
  338. package/tui/dist/demo-data.js.map +1 -0
  339. package/tui/dist/detail.d.ts +34 -0
  340. package/tui/dist/detail.d.ts.map +1 -0
  341. package/tui/dist/detail.js +47 -0
  342. package/tui/dist/detail.js.map +1 -0
  343. package/tui/dist/grammar.d.ts +3 -0
  344. package/tui/dist/grammar.d.ts.map +1 -0
  345. package/tui/dist/grammar.js +66 -0
  346. package/tui/dist/grammar.js.map +1 -0
  347. package/tui/dist/hydrate.d.ts +78 -0
  348. package/tui/dist/hydrate.d.ts.map +1 -0
  349. package/tui/dist/hydrate.js +294 -0
  350. package/tui/dist/hydrate.js.map +1 -0
  351. package/tui/dist/index.d.ts +12 -0
  352. package/tui/dist/index.d.ts.map +1 -0
  353. package/tui/dist/index.js +12 -0
  354. package/tui/dist/index.js.map +1 -0
  355. package/tui/dist/input.d.ts +21 -0
  356. package/tui/dist/input.d.ts.map +1 -0
  357. package/tui/dist/input.js +128 -0
  358. package/tui/dist/input.js.map +1 -0
  359. package/tui/dist/live.d.ts +20 -0
  360. package/tui/dist/live.d.ts.map +1 -0
  361. package/tui/dist/live.js +67 -0
  362. package/tui/dist/live.js.map +1 -0
  363. package/tui/dist/main.d.ts +3 -0
  364. package/tui/dist/main.d.ts.map +1 -0
  365. package/tui/dist/main.js +184 -0
  366. package/tui/dist/main.js.map +1 -0
  367. package/tui/dist/motion.d.ts +13 -0
  368. package/tui/dist/motion.d.ts.map +1 -0
  369. package/tui/dist/motion.js +31 -0
  370. package/tui/dist/motion.js.map +1 -0
  371. package/tui/dist/navigator.d.ts +21 -0
  372. package/tui/dist/navigator.d.ts.map +1 -0
  373. package/tui/dist/navigator.js +168 -0
  374. package/tui/dist/navigator.js.map +1 -0
  375. package/tui/dist/refresh.d.ts +3 -0
  376. package/tui/dist/refresh.d.ts.map +1 -0
  377. package/tui/dist/refresh.js +9 -0
  378. package/tui/dist/refresh.js.map +1 -0
  379. package/tui/dist/render.d.ts +21 -0
  380. package/tui/dist/render.d.ts.map +1 -0
  381. package/tui/dist/render.js +807 -0
  382. package/tui/dist/render.js.map +1 -0
  383. package/tui/dist/sections.d.ts +4 -0
  384. package/tui/dist/sections.d.ts.map +1 -0
  385. package/tui/dist/sections.js +19 -0
  386. package/tui/dist/sections.js.map +1 -0
  387. package/tui/dist/socket-server.d.ts +24 -0
  388. package/tui/dist/socket-server.d.ts.map +1 -0
  389. package/tui/dist/socket-server.js +85 -0
  390. package/tui/dist/socket-server.js.map +1 -0
  391. package/tui/dist/state.d.ts +51 -0
  392. package/tui/dist/state.d.ts.map +1 -0
  393. package/tui/dist/state.js +480 -0
  394. package/tui/dist/state.js.map +1 -0
  395. package/tui/dist/stylize.d.ts +4 -0
  396. package/tui/dist/stylize.d.ts.map +1 -0
  397. package/tui/dist/stylize.js +248 -0
  398. package/tui/dist/stylize.js.map +1 -0
  399. package/tui/dist/theme.d.ts +19 -0
  400. package/tui/dist/theme.d.ts.map +1 -0
  401. package/tui/dist/theme.js +86 -0
  402. package/tui/dist/theme.js.map +1 -0
  403. package/tui/dist/topology/canvas.d.ts +43 -0
  404. package/tui/dist/topology/canvas.d.ts.map +1 -0
  405. package/tui/dist/topology/canvas.js +131 -0
  406. package/tui/dist/topology/canvas.js.map +1 -0
  407. package/tui/dist/topology/fixture.d.ts +4 -0
  408. package/tui/dist/topology/fixture.d.ts.map +1 -0
  409. package/tui/dist/topology/fixture.js +71 -0
  410. package/tui/dist/topology/fixture.js.map +1 -0
  411. package/tui/dist/topology/glyphs.d.ts +21 -0
  412. package/tui/dist/topology/glyphs.d.ts.map +1 -0
  413. package/tui/dist/topology/glyphs.js +49 -0
  414. package/tui/dist/topology/glyphs.js.map +1 -0
  415. package/tui/dist/topology/graph-types.d.ts +39 -0
  416. package/tui/dist/topology/graph-types.d.ts.map +1 -0
  417. package/tui/dist/topology/graph-types.js +2 -0
  418. package/tui/dist/topology/graph-types.js.map +1 -0
  419. package/tui/dist/topology/layout.d.ts +52 -0
  420. package/tui/dist/topology/layout.d.ts.map +1 -0
  421. package/tui/dist/topology/layout.js +118 -0
  422. package/tui/dist/topology/layout.js.map +1 -0
  423. package/tui/dist/topology/render-graph.d.ts +8 -0
  424. package/tui/dist/topology/render-graph.d.ts.map +1 -0
  425. package/tui/dist/topology/render-graph.js +20 -0
  426. package/tui/dist/topology/render-graph.js.map +1 -0
  427. package/tui/dist/topology/runtime-marks.d.ts +53 -0
  428. package/tui/dist/topology/runtime-marks.d.ts.map +1 -0
  429. package/tui/dist/topology/runtime-marks.js +185 -0
  430. package/tui/dist/topology/runtime-marks.js.map +1 -0
  431. package/tui/dist/topology/styles/braille.d.ts +5 -0
  432. package/tui/dist/topology/styles/braille.d.ts.map +1 -0
  433. package/tui/dist/topology/styles/braille.js +84 -0
  434. package/tui/dist/topology/styles/braille.js.map +1 -0
  435. package/tui/dist/topology/styles/hatchet.d.ts +41 -0
  436. package/tui/dist/topology/styles/hatchet.d.ts.map +1 -0
  437. package/tui/dist/topology/styles/hatchet.js +146 -0
  438. package/tui/dist/topology/styles/hatchet.js.map +1 -0
  439. package/tui/dist/types.d.ts +362 -0
  440. package/tui/dist/types.d.ts.map +1 -0
  441. package/tui/dist/types.js +6 -0
  442. package/tui/dist/types.js.map +1 -0
  443. package/ui/dist/assets/{index-DkNi0RT8.js → index-Dv5VaLCN.js} +135 -135
  444. package/ui/dist/index.html +1 -1
  445. package/daemon/specs/agents/shared/skills/pm/backlog-capture/SKILL.md +0 -43
  446. package/daemon/specs/agents/shared/skills/pm/context-builder/SKILL.md +0 -87
  447. package/daemon/specs/agents/shared/skills/pm/exec-summary/SKILL.md +0 -84
  448. package/daemon/specs/agents/shared/skills/pm/office-hours/SKILL.md +0 -129
  449. package/daemon/specs/agents/shared/skills/pm/plan-review/SKILL.md +0 -98
  450. package/daemon/specs/agents/shared/skills/pm/requirements-writer/SKILL.md +0 -113
  451. package/daemon/specs/agents/shared/skills/pm/ui-mockup/SKILL.md +0 -76
  452. package/daemon/specs/agents/shared/skills/pods/development-team/SKILL.md +0 -148
  453. package/daemon/specs/agents/shared/skills/pods/orchestration-team/SKILL.md +0 -266
  454. package/daemon/specs/agents/shared/skills/pods/review-team/SKILL.md +0 -213
  455. package/daemon/specs/agents/shared/skills/process/systematic-debugging/CREATION-LOG.md +0 -119
  456. package/daemon/specs/agents/shared/skills/process/systematic-debugging/test-academic.md +0 -14
  457. package/daemon/specs/agents/shared/skills/process/systematic-debugging/test-pressure-1.md +0 -58
  458. package/daemon/specs/agents/shared/skills/process/systematic-debugging/test-pressure-2.md +0 -68
  459. package/daemon/specs/agents/shared/skills/process/systematic-debugging/test-pressure-3.md +0 -69
  460. package/dist/commands/context-pack.d.ts +0 -4
  461. package/dist/commands/context-pack.d.ts.map +0 -1
  462. package/dist/commands/context-pack.js +0 -357
  463. package/dist/commands/context-pack.js.map +0 -1
@@ -1,6 +1,5 @@
1
1
  import nodePath from "node:path";
2
- import { mkdirSync, writeFileSync } from "node:fs";
3
- import { assembleBundle } from "./context-packs/bundle-assembler.js";
2
+ import { resolvePermissionPolicyAttachment, resolvePermissionPolicyRefValue, } from "./permission-policy/policy-ref.js";
4
3
  import { deriveCanonicalSessionName, validateSessionComponents } from "./session-name.js";
5
4
  import { LegacyRigSpecSchema as RigSpecSchema } from "./rigspec-schema.js"; // TODO: AS-T08b — migrate to pod-aware RigSpec
6
5
  import { LegacyRigSpecCodec as RigSpecCodec } from "./rigspec-codec.js"; // TODO: AS-T08b — migrate to pod-aware RigSpec
@@ -277,6 +276,20 @@ export class PodRigInstantiator {
277
276
  this.db = deps.db;
278
277
  this.deps = deps;
279
278
  }
279
+ inheritedPermissionPolicy(targetRigId) {
280
+ if (!targetRigId)
281
+ return undefined;
282
+ const provenance = this.deps.rigRepo.getRigPolicyProvenance(targetRigId);
283
+ if (!provenance?.rigRef)
284
+ return undefined;
285
+ return {
286
+ ref: provenance.rigRef,
287
+ origin: provenance.origin,
288
+ launchPosture: provenance.launchPosture,
289
+ ...(provenance.resolvedTarget ? { resolvedTarget: provenance.resolvedTarget } : {}),
290
+ ...(provenance.declaringDir ? { declaringDir: provenance.declaringDir } : {}),
291
+ };
292
+ }
280
293
  async materialize(rigSpecYaml, rigRoot, opts) {
281
294
  let raw;
282
295
  try {
@@ -303,7 +316,9 @@ export class PodRigInstantiator {
303
316
  fsOps: this.deps.fsOps,
304
317
  rigNameOverride: targetRig?.rig.name,
305
318
  externalQualifiedIds: targetRig?.nodes.map((node) => node.logicalId),
319
+ inheritedPermissionPolicy: this.inheritedPermissionPolicy(opts?.targetRigId),
306
320
  exec: this.deps.exec,
321
+ claudeActivityAssets: this.deps.claudeActivityAssets, // §6: restore main's activity-hook asset threading
307
322
  });
308
323
  if (!preflight.ready) {
309
324
  return { ok: false, code: "preflight_failed", errors: preflight.errors, warnings: preflight.warnings };
@@ -312,7 +327,7 @@ export class PodRigInstantiator {
312
327
  // persistence CORE (createPod + create-node + edges + events, in one tx)
313
328
  // takes the already-parsed+validated spec so `expand` and the `add_member`
314
329
  // converge op compose it WITHOUT fabricating a synthetic rig spec.
315
- return this.materializeValidatedSpec(rigSpec, rigRoot, opts);
330
+ return this.materializeValidatedSpec(rigSpec, rigRoot, preflight.warnings, opts);
316
331
  }
317
332
  /**
318
333
  * materialize with a STRUCTURED front (OPR.0.3.3.24): the YAML-free sibling of
@@ -342,12 +357,14 @@ export class PodRigInstantiator {
342
357
  cwdOverride: opts?.cwdOverride,
343
358
  fsOps: this.deps.fsOps,
344
359
  rigNameOverride: targetRig?.rig.name,
360
+ inheritedPermissionPolicy: this.inheritedPermissionPolicy(opts?.targetRigId),
345
361
  exec: this.deps.exec,
362
+ claudeActivityAssets: this.deps.claudeActivityAssets, // §6: restore main's activity-hook asset threading
346
363
  });
347
364
  if (!preflight.ready) {
348
365
  return { ok: false, code: "preflight_failed", errors: preflight.errors, warnings: preflight.warnings };
349
366
  }
350
- return this.materializeValidatedSpec(rigSpec, rigRoot, opts);
367
+ return this.materializeValidatedSpec(rigSpec, rigRoot, preflight.warnings, opts);
351
368
  }
352
369
  /**
353
370
  * materialize CORE (OPR.0.3.3.24): the persistence body of materialize, taking
@@ -359,7 +376,7 @@ export class PodRigInstantiator {
359
376
  * `add_member` reuse the exact create path — create+launch only, no identity
360
377
  * migration.
361
378
  */
362
- async materializeValidatedSpec(rigSpec, rigRoot, opts) {
379
+ async materializeValidatedSpec(rigSpec, rigRoot, preflightWarnings, opts) {
363
380
  const persistedEvents = [];
364
381
  const nodeResults = [];
365
382
  try {
@@ -374,6 +391,24 @@ export class PodRigInstantiator {
374
391
  if (rigSpec.workspace) {
375
392
  this.deps.rigRepo.setRigWorkspace(materializedRigId, rigSpec.workspace);
376
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
+ }
377
412
  const currentRig = this.deps.rigRepo.getRig(materializedRigId);
378
413
  const logicalIdToNodeId = new Map(currentRig.nodes.map((node) => [node.logicalId, node.id]));
379
414
  const existingPodIds = new Set(currentRig.nodes
@@ -415,6 +450,26 @@ export class PodRigInstantiator {
415
450
  cwdOverride: opts?.cwdOverride,
416
451
  });
417
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
+ }
418
473
  nodeResults.push({ logicalId: qualifiedId, status: "materialized" });
419
474
  persistedEvents.push(event);
420
475
  }
@@ -457,6 +512,7 @@ export class PodRigInstantiator {
457
512
  specName: rigSpec.name,
458
513
  specVersion: rigSpec.version,
459
514
  nodes: nodeResults,
515
+ warnings: preflightWarnings,
460
516
  },
461
517
  };
462
518
  }
@@ -632,6 +688,7 @@ export class PodRigInstantiator {
632
688
  cwdOverride: opts?.cwdOverride,
633
689
  fsOps: this.deps.fsOps,
634
690
  rigNameOverride: rig.rig.name,
691
+ inheritedPermissionPolicy: this.inheritedPermissionPolicy(rigId),
635
692
  exec: this.deps.exec,
636
693
  });
637
694
  if (!preflight.ready) {
@@ -692,6 +749,28 @@ export class PodRigInstantiator {
692
749
  });
693
750
  createdNodeId = node.id;
694
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
+ }
695
774
  if (resolvedEdges.length > 0) {
696
775
  const logicalIdToNodeId = new Map(rig.nodes.map((n) => [n.logicalId, n.id]));
697
776
  logicalIdToNodeId.set(qualifiedId, node.id);
@@ -730,7 +809,7 @@ export class PodRigInstantiator {
730
809
  sessionName: launched.sessionName,
731
810
  },
732
811
  edges: resolvedEdges,
733
- warnings: launched.warnings,
812
+ warnings: [...preflight.warnings, ...(launched.warnings ?? [])],
734
813
  },
735
814
  };
736
815
  }
@@ -749,7 +828,7 @@ export class PodRigInstantiator {
749
828
  return { ok: false, code: "validation_failed", errors: [err.message] };
750
829
  }
751
830
  // 2. Preflight
752
- const preflight = await rigPreflight({ rigSpecYaml, rigRoot, cwdOverride: opts?.cwdOverride, fsOps: this.deps.fsOps, exec: this.deps.exec });
831
+ const preflight = await rigPreflight({ rigSpecYaml, rigRoot, cwdOverride: opts?.cwdOverride, fsOps: this.deps.fsOps, exec: this.deps.exec, claudeActivityAssets: this.deps.claudeActivityAssets });
753
832
  if (!preflight.ready) {
754
833
  return { ok: false, code: "preflight_failed", errors: preflight.errors, warnings: preflight.warnings };
755
834
  }
@@ -777,6 +856,21 @@ export class PodRigInstantiator {
777
856
  if (rigSpec.workspace) {
778
857
  this.deps.rigRepo.setRigWorkspace(rigId, rigSpec.workspace);
779
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
+ }
780
874
  }
781
875
  catch (err) {
782
876
  return { ok: false, code: "instantiate_error", message: err.message };
@@ -785,7 +879,7 @@ export class PodRigInstantiator {
785
879
  const nodeResults = [];
786
880
  const nodeIdMap = {}; // "pod.member" -> node DB id
787
881
  const launchedSessionNames = []; // Track for orphan cleanup on total failure
788
- const podInstantiateWarnings = [];
882
+ const podInstantiateWarnings = preflight.warnings;
789
883
  // Store per-member context for deferred launch
790
884
  const memberContext = new Map();
791
885
  // Phase 1: Create all pods and collect member entries
@@ -858,8 +952,7 @@ export class PodRigInstantiator {
858
952
  continue;
859
953
  }
860
954
  // Create node
861
- let nodeId;
862
- try {
955
+ const createUnit = this.db.transaction(() => {
863
956
  const node = this.deps.rigRepo.addNode(rigId, qualifiedId, {
864
957
  // OPR.0.4.6.FAC1 (VM-caught): the pod-aware bootstrap
865
958
  // instantiate-from-YAML path (`rig up <spec>`) creates agent
@@ -874,6 +967,10 @@ export class PodRigInstantiator {
874
967
  runtime: member.runtime,
875
968
  model: member.model,
876
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,
877
974
  cwd: configResult.config.cwd,
878
975
  restorePolicy: configResult.config.restorePolicy,
879
976
  podId,
@@ -884,7 +981,21 @@ export class PodRigInstantiator {
884
981
  resolvedSpecVersion: configResult.config.resolvedSpecVersion,
885
982
  resolvedSpecHash: configResult.config.resolvedSpecHash,
886
983
  });
887
- nodeId = node.id;
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).
888
999
  nodeIdMap[qualifiedId] = nodeId;
889
1000
  }
890
1001
  catch (err) {
@@ -1158,6 +1269,9 @@ export class PodRigInstantiator {
1158
1269
  runtime: input.member.runtime,
1159
1270
  model: input.member.model,
1160
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,
1161
1275
  cwd: effectiveCwd,
1162
1276
  restorePolicy: input.member.restorePolicy,
1163
1277
  podId: input.podId,
@@ -1187,6 +1301,40 @@ export class PodRigInstantiator {
1187
1301
  ? this.launchExistingTerminalMember(input)
1188
1302
  : this.launchExistingAgentMember(input);
1189
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
+ }
1190
1338
  async launchExistingAgentMember(input) {
1191
1339
  const resolveResult = input.resolveResult ?? resolveAgentRef(input.member.agentRef, input.rigRoot, this.deps.fsOps);
1192
1340
  if (!resolveResult.ok) {
@@ -1210,6 +1358,24 @@ export class PodRigInstantiator {
1210
1358
  return { status: "failed", error: configResult.errors.join("; ") };
1211
1359
  }
1212
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";
1213
1379
  const sessionNameErrors = validateSessionComponents(input.pod.id, input.member.id, input.rigSpec.name);
1214
1380
  if (sessionNameErrors.length > 0) {
1215
1381
  return { status: "failed", error: sessionNameErrors.join("; ") };
@@ -1256,6 +1422,9 @@ export class PodRigInstantiator {
1256
1422
  cwd: configResult.config.cwd,
1257
1423
  model: configResult.config.model,
1258
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,
1259
1428
  };
1260
1429
  // session_source dispatch: fork (native runtime fork) vs rebuild (artifact-
1261
1430
  // injected fresh launch) vs agent_image (PL-016 Item 4: dispatch through
@@ -1418,6 +1587,13 @@ export class PodRigInstantiator {
1418
1587
  }
1419
1588
  async launchExistingTerminalMember(input) {
1420
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
1421
1597
  const sessionNameErrors = validateSessionComponents(input.pod.id, input.member.id, input.rigSpec.name);
1422
1598
  if (sessionNameErrors.length > 0) {
1423
1599
  return { status: "failed", error: sessionNameErrors.join("; ") };
@@ -1457,6 +1633,9 @@ export class PodRigInstantiator {
1457
1633
  cmuxSurface: null,
1458
1634
  updatedAt: "",
1459
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,
1460
1639
  };
1461
1640
  const adapter = this.deps.adapters["terminal"];
1462
1641
  if (!adapter) {
@@ -1534,7 +1713,6 @@ export class PodRigInstantiator {
1534
1713
  files.push({ ...f, absolutePath: nodePath.resolve(rigRoot, f.path), ownerRoot: rigRoot });
1535
1714
  }
1536
1715
  }
1537
- this.expandContextPacks(files, rigRoot);
1538
1716
  return this.resolveAutoHints(files);
1539
1717
  }
1540
1718
  buildResolvedStartupFiles(agentSpec, agentSourcePath, profile, rigSpec, rigRoot, pod, member) {
@@ -1590,65 +1768,8 @@ export class PodRigInstantiator {
1590
1768
  required: false,
1591
1769
  appliesOn: ["fresh_start", "restore"],
1592
1770
  });
1593
- this.expandContextPacks(files, rigRoot);
1594
1771
  return this.resolveAutoHints(files);
1595
1772
  }
1596
- /**
1597
- * PL-014 Item 6: expand any startup_files entries with `kind:
1598
- * "context_pack"` into a real file on disk + adjust the
1599
- * ResolvedStartupFile entry to point to it. Operates in place.
1600
- *
1601
- * Strategy:
1602
- * 1. Look up the pack via the daemon-side ContextPackLibraryService.
1603
- * 2. Assemble the pack into a single coherent paste-ready string.
1604
- * 3. Write the bundle to <rigRoot>/.openrig/resolved-context-packs/
1605
- * <name>-<version>.md.
1606
- * 4. Replace the entry's path/absolutePath/ownerRoot with that
1607
- * written path so the rest of the pipeline (resolveAutoHints +
1608
- * adapter.deliverStartup) treats it as a normal file.
1609
- *
1610
- * Throws on missing pack or absent library service so the
1611
- * materialize path surfaces the failure honestly.
1612
- */
1613
- expandContextPacks(files, rigRoot) {
1614
- const library = this.deps.contextPackLibrary;
1615
- const targetDir = nodePath.join(rigRoot, ".openrig", "resolved-context-packs");
1616
- let madeDir = false;
1617
- for (let i = 0; i < files.length; i++) {
1618
- const f = files[i];
1619
- if (f.kind !== "context_pack")
1620
- continue;
1621
- if (!library) {
1622
- throw new Error(`startup_files entry references kind: context_pack '${f.contextPackName ?? "(missing-name)"}' v${f.contextPackVersion ?? "1"}, but the daemon ContextPackLibraryService is not wired.`);
1623
- }
1624
- const name = f.contextPackName;
1625
- const version = f.contextPackVersion ?? "1";
1626
- if (!name) {
1627
- throw new Error(`startup_files entry kind: context_pack is missing 'name'`);
1628
- }
1629
- const pack = library.getByNameVersion(name, version);
1630
- if (!pack) {
1631
- throw new Error(`Context pack '${name}' v${version} not found in library. Run 'rig context-pack list' to see what's installed.`);
1632
- }
1633
- const bundle = assembleBundle({ packEntry: pack });
1634
- if (!madeDir) {
1635
- mkdirSync(targetDir, { recursive: true });
1636
- madeDir = true;
1637
- }
1638
- const targetPath = nodePath.join(targetDir, `${name}-${version}.md`);
1639
- writeFileSync(targetPath, bundle.text, "utf-8");
1640
- files[i] = {
1641
- ...f,
1642
- kind: "file",
1643
- path: nodePath.relative(rigRoot, targetPath),
1644
- absolutePath: targetPath,
1645
- ownerRoot: rigRoot,
1646
- deliveryHint: f.deliveryHint === "auto" ? "send_text" : f.deliveryHint,
1647
- contextPackName: undefined,
1648
- contextPackVersion: undefined,
1649
- };
1650
- }
1651
- }
1652
1773
  dedupeProjectedManagedStartupFiles(plan, files) {
1653
1774
  const projectedManagedGuidancePaths = new Set(plan.entries
1654
1775
  .filter((entry) => entry.category === "guidance" && entry.mergeStrategy === "managed_block")