@openrig/cli 0.6.5 → 0.6.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1125) hide show
  1. package/README.md +151 -63
  2. package/daemon/assets/claude-team-permissions.cjs +262 -0
  3. package/daemon/assets/onboarding/02-self-and-competent-action.md +46 -2
  4. package/daemon/assets/plugins/openrig-core/.claude-plugin/plugin.json +1 -1
  5. package/daemon/assets/plugins/openrig-core/.codex-plugin/plugin.json +1 -1
  6. package/daemon/assets/plugins/openrig-core/hooks/scripts/refocus-health.cjs +41 -0
  7. package/daemon/assets/plugins/openrig-core/hooks/scripts/refocus.cjs +69 -12
  8. package/daemon/assets/plugins/openrig-core/skills/applying-a-permission-policy/SKILL.md +41 -21
  9. package/daemon/assets/plugins/openrig-core/skills/claude-compaction-restore/SKILL.md +24 -7
  10. package/daemon/assets/plugins/openrig-core/skills/claude-compaction-restore/scripts/precompact-hook.mjs +4 -0
  11. package/daemon/assets/plugins/openrig-core/skills/forming-an-openrig-mental-model/SKILL.md +1 -1
  12. package/daemon/assets/plugins/openrig-core/skills/openrig-skills/SKILL.md +4 -5
  13. package/daemon/assets/plugins/openrig-core/skills/openrig-user/SKILL.md +9 -4
  14. package/daemon/assets/plugins/openrig-core/skills/refocusing/SKILL.md +31 -4
  15. package/daemon/assets/plugins/openrig-core/skills/refocusing/scripts/trace-to-root.py +24 -13
  16. package/daemon/assets/plugins/openrig-core/skills/retiring-and-inheriting-a-seat/SKILL.md +3 -0
  17. package/daemon/assets/plugins/openrig-core/skills/seat-continuity-and-handover/SKILL.md +42 -0
  18. package/daemon/assets/plugins/openrig-core/skills/session-compaction-and-restore/SKILL.md +6 -0
  19. package/daemon/assets/skills/rigs/SKILL.md +133 -0
  20. package/daemon/context-packs/help/help.md +66 -12
  21. package/daemon/context-packs/help/manifest.yaml +1 -1
  22. package/daemon/context-packs/onboarding-width/manifest.yaml +1 -1
  23. package/daemon/context-packs/onboarding-width/public-what-you-can-do.md +218 -38
  24. package/daemon/context-packs/reference/getting-started.md +593 -139
  25. package/daemon/context-packs/reference/manifest.yaml +4 -1
  26. package/daemon/context-packs/reference/rig-spec.md +175 -26
  27. package/daemon/context-packs/reference/whats-new.md +134 -0
  28. package/daemon/context-packs/skills/agent-operated-software/manifest.yaml +1 -1
  29. package/daemon/context-packs/skills/agent-operated-workflows/manifest.yaml +1 -1
  30. package/daemon/context-packs/skills/applying-a-permission-policy/SKILL.md +41 -21
  31. package/daemon/context-packs/skills/applying-a-permission-policy/manifest.yaml +1 -1
  32. package/daemon/context-packs/skills/claude-compaction-restore/SKILL.md +24 -7
  33. package/daemon/context-packs/skills/claude-compaction-restore/manifest.yaml +1 -1
  34. package/daemon/context-packs/skills/claude-compaction-restore/scripts/precompact-hook.mjs +4 -0
  35. package/daemon/context-packs/skills/core/agent-starters/SKILL.md +0 -6
  36. package/daemon/context-packs/skills/core/agent-starters/manifest.yaml +1 -1
  37. package/daemon/context-packs/skills/core/agent-startup-and-context-ingestion/SKILL.md +1 -8
  38. package/daemon/context-packs/skills/core/agent-startup-and-context-ingestion/manifest.yaml +1 -1
  39. package/daemon/context-packs/skills/core/cross-host-rig-commands/manifest.yaml +1 -1
  40. package/daemon/context-packs/skills/core/human-in-the-loop/manifest.yaml +1 -1
  41. package/daemon/context-packs/skills/core/messaging-the-human/manifest.yaml +1 -1
  42. package/daemon/context-packs/skills/core/openrig-architect/SKILL.md +5 -5
  43. package/daemon/context-packs/skills/core/openrig-architect/manifest.yaml +3 -3
  44. package/daemon/context-packs/skills/core/openrig-cmux/manifest.yaml +1 -1
  45. package/daemon/context-packs/skills/core/openrig-herdr/manifest.yaml +1 -1
  46. package/daemon/context-packs/skills/core/openrig-skills/SKILL.md +4 -5
  47. package/daemon/context-packs/skills/core/openrig-skills/manifest.yaml +1 -1
  48. package/daemon/context-packs/skills/core/openrig-software-factory/SKILL.md +31 -21
  49. package/daemon/context-packs/skills/core/openrig-software-factory/manifest.yaml +1 -1
  50. package/daemon/context-packs/skills/core/openrig-software-factory/references/worked-example.md +31 -31
  51. package/daemon/context-packs/skills/core/openrig-upgrade/SKILL.md +2 -0
  52. package/daemon/context-packs/skills/core/openrig-upgrade/manifest.yaml +1 -1
  53. package/daemon/context-packs/skills/core/rig-bundles-and-shareable-artifacts/SKILL.md +0 -1
  54. package/daemon/context-packs/skills/core/rig-bundles-and-shareable-artifacts/manifest.yaml +1 -1
  55. package/daemon/context-packs/skills/core/rig-lifecycle/manifest.yaml +1 -1
  56. package/daemon/context-packs/skills/core/session-source-fork/SKILL.md +0 -5
  57. package/daemon/context-packs/skills/core/session-source-fork/manifest.yaml +1 -1
  58. package/daemon/context-packs/skills/core/specification-system/manifest.yaml +1 -1
  59. package/daemon/context-packs/skills/core/topology-mutation-and-seat-management/manifest.yaml +1 -1
  60. package/daemon/context-packs/skills/core/watchdog/manifest.yaml +1 -1
  61. package/daemon/context-packs/skills/delegating-work/manifest.yaml +1 -1
  62. package/daemon/context-packs/skills/forming-an-openrig-mental-model/SKILL.md +1 -1
  63. package/daemon/context-packs/skills/forming-an-openrig-mental-model/manifest.yaml +1 -1
  64. package/daemon/context-packs/skills/loading-addressable-markdown/manifest.yaml +1 -1
  65. package/daemon/context-packs/skills/mission-slice-sop/manifest.yaml +1 -1
  66. package/daemon/context-packs/skills/openrig-operating-model/manifest.yaml +1 -1
  67. package/daemon/context-packs/skills/openrig-user/SKILL.md +9 -4
  68. package/daemon/context-packs/skills/openrig-user/manifest.yaml +1 -1
  69. package/daemon/context-packs/skills/orienting-to-an-inherited-seat/manifest.yaml +1 -1
  70. package/daemon/context-packs/skills/pm/backlog-capture/manifest.yaml +1 -1
  71. package/daemon/context-packs/skills/pm/context-builder/manifest.yaml +1 -1
  72. package/daemon/context-packs/skills/pm/exec-summary/manifest.yaml +1 -1
  73. package/daemon/context-packs/skills/pm/office-hours/manifest.yaml +1 -1
  74. package/daemon/context-packs/skills/pm/plan-review/manifest.yaml +1 -1
  75. package/daemon/context-packs/skills/pm/requirements-writer/manifest.yaml +1 -1
  76. package/daemon/context-packs/skills/pm/ui-mockup/manifest.yaml +1 -1
  77. package/daemon/context-packs/skills/pods/development-team/manifest.yaml +1 -1
  78. package/daemon/context-packs/skills/pods/orchestration-team/manifest.yaml +1 -1
  79. package/daemon/context-packs/skills/pods/oversight-team/manifest.yaml +1 -1
  80. package/daemon/context-packs/skills/pods/review-team/manifest.yaml +1 -1
  81. package/daemon/context-packs/skills/process/agent-browser/OPENRIG.md +1 -1
  82. package/daemon/context-packs/skills/process/agent-browser/manifest.yaml +1 -1
  83. package/daemon/context-packs/skills/process/context-engineering/manifest.yaml +1 -1
  84. package/daemon/context-packs/skills/process/dogfood/manifest.yaml +1 -1
  85. package/daemon/context-packs/skills/process/frontend-design/manifest.yaml +1 -1
  86. package/daemon/context-packs/skills/process/systematic-debugging/SKILL.md +0 -2
  87. package/daemon/context-packs/skills/process/systematic-debugging/manifest.yaml +1 -1
  88. package/daemon/context-packs/skills/process/test-driven-development/manifest.yaml +1 -1
  89. package/daemon/context-packs/skills/process/verification-before-completion/manifest.yaml +1 -1
  90. package/daemon/context-packs/skills/queue-handoff/manifest.yaml +1 -1
  91. package/daemon/context-packs/skills/refocusing/SKILL.md +31 -4
  92. package/daemon/context-packs/skills/refocusing/manifest.yaml +1 -1
  93. package/daemon/context-packs/skills/refocusing/scripts/trace-to-root.py +24 -13
  94. package/daemon/context-packs/skills/retiring-and-inheriting-a-seat/SKILL.md +3 -0
  95. package/daemon/context-packs/skills/retiring-and-inheriting-a-seat/manifest.yaml +1 -1
  96. package/daemon/context-packs/skills/seat-continuity-and-handover/SKILL.md +42 -0
  97. package/daemon/context-packs/skills/seat-continuity-and-handover/manifest.yaml +1 -1
  98. package/daemon/context-packs/skills/session-compaction-and-restore/SKILL.md +6 -0
  99. package/daemon/context-packs/skills/session-compaction-and-restore/manifest.yaml +1 -1
  100. package/daemon/context-packs/skills/software-for-agents/manifest.yaml +1 -1
  101. package/daemon/context-packs/world-example/manifest.yaml +1 -1
  102. package/daemon/context-packs/world-public/manifest.yaml +1 -1
  103. package/daemon/dist/adapters/claude-code-adapter.d.ts +2 -2
  104. package/daemon/dist/adapters/claude-code-adapter.d.ts.map +1 -1
  105. package/daemon/dist/adapters/claude-code-adapter.js +48 -26
  106. package/daemon/dist/adapters/claude-code-adapter.js.map +1 -1
  107. package/daemon/dist/adapters/claude-resume.d.ts +1 -1
  108. package/daemon/dist/adapters/claude-resume.d.ts.map +1 -1
  109. package/daemon/dist/adapters/claude-resume.js +7 -4
  110. package/daemon/dist/adapters/claude-resume.js.map +1 -1
  111. package/daemon/dist/adapters/codex-resume.d.ts +3 -1
  112. package/daemon/dist/adapters/codex-resume.d.ts.map +1 -1
  113. package/daemon/dist/adapters/codex-resume.js +27 -4
  114. package/daemon/dist/adapters/codex-resume.js.map +1 -1
  115. package/daemon/dist/adapters/codex-runtime-adapter.d.ts +3 -0
  116. package/daemon/dist/adapters/codex-runtime-adapter.d.ts.map +1 -1
  117. package/daemon/dist/adapters/codex-runtime-adapter.js +61 -63
  118. package/daemon/dist/adapters/codex-runtime-adapter.js.map +1 -1
  119. package/daemon/dist/adapters/compose-services-adapter.js +1 -1
  120. package/daemon/dist/adapters/compose-services-adapter.js.map +1 -1
  121. package/daemon/dist/adapters/kernel-authority.d.ts +10 -0
  122. package/daemon/dist/adapters/kernel-authority.d.ts.map +1 -0
  123. package/daemon/dist/adapters/kernel-authority.js +71 -0
  124. package/daemon/dist/adapters/kernel-authority.js.map +1 -0
  125. package/daemon/dist/adapters/non-interruptive.d.ts +14 -0
  126. package/daemon/dist/adapters/non-interruptive.d.ts.map +1 -0
  127. package/daemon/dist/adapters/non-interruptive.js +38 -0
  128. package/daemon/dist/adapters/non-interruptive.js.map +1 -0
  129. package/daemon/dist/adapters/pi-readiness.d.ts +15 -0
  130. package/daemon/dist/adapters/pi-readiness.d.ts.map +1 -0
  131. package/daemon/dist/adapters/pi-readiness.js +90 -0
  132. package/daemon/dist/adapters/pi-readiness.js.map +1 -0
  133. package/daemon/dist/adapters/pi-resume.d.ts +3 -1
  134. package/daemon/dist/adapters/pi-resume.d.ts.map +1 -1
  135. package/daemon/dist/adapters/pi-resume.js +8 -1
  136. package/daemon/dist/adapters/pi-resume.js.map +1 -1
  137. package/daemon/dist/adapters/pi-runner-protocol.d.ts +15 -0
  138. package/daemon/dist/adapters/pi-runner-protocol.d.ts.map +1 -1
  139. package/daemon/dist/adapters/pi-runner-protocol.js +28 -0
  140. package/daemon/dist/adapters/pi-runner-protocol.js.map +1 -1
  141. package/daemon/dist/adapters/pi-runner.d.ts +3 -0
  142. package/daemon/dist/adapters/pi-runner.d.ts.map +1 -1
  143. package/daemon/dist/adapters/pi-runner.js +92 -15
  144. package/daemon/dist/adapters/pi-runner.js.map +1 -1
  145. package/daemon/dist/adapters/pi-runtime-adapter.d.ts +8 -0
  146. package/daemon/dist/adapters/pi-runtime-adapter.d.ts.map +1 -1
  147. package/daemon/dist/adapters/pi-runtime-adapter.js +37 -9
  148. package/daemon/dist/adapters/pi-runtime-adapter.js.map +1 -1
  149. package/daemon/dist/adapters/stub-runner-protocol.d.ts +1 -1
  150. package/daemon/dist/adapters/stub-runner-protocol.d.ts.map +1 -1
  151. package/daemon/dist/adapters/stub-runner.d.ts +1 -1
  152. package/daemon/dist/adapters/stub-runner.d.ts.map +1 -1
  153. package/daemon/dist/adapters/stub-runtime-adapter.d.ts.map +1 -1
  154. package/daemon/dist/adapters/stub-runtime-adapter.js +10 -7
  155. package/daemon/dist/adapters/stub-runtime-adapter.js.map +1 -1
  156. package/daemon/dist/adapters/tmux.d.ts +7 -3
  157. package/daemon/dist/adapters/tmux.d.ts.map +1 -1
  158. package/daemon/dist/adapters/tmux.js +20 -12
  159. package/daemon/dist/adapters/tmux.js.map +1 -1
  160. package/daemon/dist/adapters/yolo-mode.d.ts +1 -1
  161. package/daemon/dist/adapters/yolo-mode.d.ts.map +1 -1
  162. package/daemon/dist/adapters/yolo-mode.js +3 -0
  163. package/daemon/dist/adapters/yolo-mode.js.map +1 -1
  164. package/daemon/dist/build-info.js +3 -3
  165. package/daemon/dist/bundle-behaviour-surface.d.ts +2 -0
  166. package/daemon/dist/bundle-behaviour-surface.d.ts.map +1 -0
  167. package/daemon/dist/bundle-behaviour-surface.js +2 -0
  168. package/daemon/dist/bundle-behaviour-surface.js.map +1 -0
  169. package/daemon/dist/bundle-identity-surface.d.ts +2 -0
  170. package/daemon/dist/bundle-identity-surface.d.ts.map +1 -0
  171. package/daemon/dist/bundle-identity-surface.js +4 -0
  172. package/daemon/dist/bundle-identity-surface.js.map +1 -0
  173. package/daemon/dist/daemon-shutdown.d.ts +1 -1
  174. package/daemon/dist/daemon-shutdown.d.ts.map +1 -1
  175. package/daemon/dist/daemon-shutdown.js +5 -1
  176. package/daemon/dist/daemon-shutdown.js.map +1 -1
  177. package/daemon/dist/db/all-migrations.d.ts.map +1 -1
  178. package/daemon/dist/db/all-migrations.js +6 -0
  179. package/daemon/dist/db/all-migrations.js.map +1 -1
  180. package/daemon/dist/db/migrations/095_rig_non_interruptive.d.ts +3 -0
  181. package/daemon/dist/db/migrations/095_rig_non_interruptive.d.ts.map +1 -0
  182. package/daemon/dist/db/migrations/095_rig_non_interruptive.js +5 -0
  183. package/daemon/dist/db/migrations/095_rig_non_interruptive.js.map +1 -0
  184. package/daemon/dist/db/migrations/096_rig_install_root.d.ts +3 -0
  185. package/daemon/dist/db/migrations/096_rig_install_root.d.ts.map +1 -0
  186. package/daemon/dist/db/migrations/096_rig_install_root.js +5 -0
  187. package/daemon/dist/db/migrations/096_rig_install_root.js.map +1 -0
  188. package/daemon/dist/db/migrations/097_thread_part_map.d.ts +3 -0
  189. package/daemon/dist/db/migrations/097_thread_part_map.d.ts.map +1 -0
  190. package/daemon/dist/db/migrations/097_thread_part_map.js +20 -0
  191. package/daemon/dist/db/migrations/097_thread_part_map.js.map +1 -0
  192. package/daemon/dist/domain/activity-taxonomy.d.ts +7 -0
  193. package/daemon/dist/domain/activity-taxonomy.d.ts.map +1 -1
  194. package/daemon/dist/domain/activity-taxonomy.js.map +1 -1
  195. package/daemon/dist/domain/agent-activity-store.d.ts +12 -0
  196. package/daemon/dist/domain/agent-activity-store.d.ts.map +1 -1
  197. package/daemon/dist/domain/agent-activity-store.js +55 -30
  198. package/daemon/dist/domain/agent-activity-store.js.map +1 -1
  199. package/daemon/dist/domain/agent-images/agent-image-types.d.ts +1 -1
  200. package/daemon/dist/domain/agent-images/agent-image-types.d.ts.map +1 -1
  201. package/daemon/dist/domain/agent-manifest.d.ts.map +1 -1
  202. package/daemon/dist/domain/agent-manifest.js +4 -2
  203. package/daemon/dist/domain/agent-manifest.js.map +1 -1
  204. package/daemon/dist/domain/bootstrap-orchestrator.d.ts +10 -0
  205. package/daemon/dist/domain/bootstrap-orchestrator.d.ts.map +1 -1
  206. package/daemon/dist/domain/bootstrap-orchestrator.js +136 -32
  207. package/daemon/dist/domain/bootstrap-orchestrator.js.map +1 -1
  208. package/daemon/dist/domain/builtin-policy-reference.d.ts +1 -1
  209. package/daemon/dist/domain/builtin-policy-reference.d.ts.map +1 -1
  210. package/daemon/dist/domain/builtin-policy-reference.js +2 -2
  211. package/daemon/dist/domain/builtin-policy-reference.js.map +1 -1
  212. package/daemon/dist/domain/bundle-archive.d.ts +24 -0
  213. package/daemon/dist/domain/bundle-archive.d.ts.map +1 -1
  214. package/daemon/dist/domain/bundle-archive.js +52 -27
  215. package/daemon/dist/domain/bundle-archive.js.map +1 -1
  216. package/daemon/dist/domain/bundle-audit.d.ts +5 -0
  217. package/daemon/dist/domain/bundle-audit.d.ts.map +1 -1
  218. package/daemon/dist/domain/bundle-audit.js.map +1 -1
  219. package/daemon/dist/domain/bundle-behaviour-inspect.d.ts +4 -0
  220. package/daemon/dist/domain/bundle-behaviour-inspect.d.ts.map +1 -0
  221. package/daemon/dist/domain/bundle-behaviour-inspect.js +56 -0
  222. package/daemon/dist/domain/bundle-behaviour-inspect.js.map +1 -0
  223. package/daemon/dist/domain/bundle-behaviour.d.ts +118 -0
  224. package/daemon/dist/domain/bundle-behaviour.d.ts.map +1 -0
  225. package/daemon/dist/domain/bundle-behaviour.js +364 -0
  226. package/daemon/dist/domain/bundle-behaviour.js.map +1 -0
  227. package/daemon/dist/domain/bundle-carried-context-pack.d.ts +16 -0
  228. package/daemon/dist/domain/bundle-carried-context-pack.d.ts.map +1 -0
  229. package/daemon/dist/domain/bundle-carried-context-pack.js +67 -0
  230. package/daemon/dist/domain/bundle-carried-context-pack.js.map +1 -0
  231. package/daemon/dist/domain/bundle-carried-project.d.ts +13 -0
  232. package/daemon/dist/domain/bundle-carried-project.d.ts.map +1 -0
  233. package/daemon/dist/domain/bundle-carried-project.js +71 -0
  234. package/daemon/dist/domain/bundle-carried-project.js.map +1 -0
  235. package/daemon/dist/domain/bundle-conflict-detector.js +3 -3
  236. package/daemon/dist/domain/bundle-conflict-detector.js.map +1 -1
  237. package/daemon/dist/domain/bundle-content-routing.d.ts +49 -0
  238. package/daemon/dist/domain/bundle-content-routing.d.ts.map +1 -0
  239. package/daemon/dist/domain/bundle-content-routing.js +246 -0
  240. package/daemon/dist/domain/bundle-content-routing.js.map +1 -0
  241. package/daemon/dist/domain/bundle-context-packs-router.d.ts +7 -2
  242. package/daemon/dist/domain/bundle-context-packs-router.d.ts.map +1 -1
  243. package/daemon/dist/domain/bundle-context-packs-router.js +19 -0
  244. package/daemon/dist/domain/bundle-context-packs-router.js.map +1 -1
  245. package/daemon/dist/domain/bundle-identity.d.ts +27 -0
  246. package/daemon/dist/domain/bundle-identity.d.ts.map +1 -0
  247. package/daemon/dist/domain/bundle-identity.js +34 -0
  248. package/daemon/dist/domain/bundle-identity.js.map +1 -0
  249. package/daemon/dist/domain/bundle-install-context.d.ts +22 -0
  250. package/daemon/dist/domain/bundle-install-context.d.ts.map +1 -0
  251. package/daemon/dist/domain/bundle-install-context.js +64 -0
  252. package/daemon/dist/domain/bundle-install-context.js.map +1 -0
  253. package/daemon/dist/domain/bundle-integrity.d.ts +1 -0
  254. package/daemon/dist/domain/bundle-integrity.d.ts.map +1 -1
  255. package/daemon/dist/domain/bundle-integrity.js +1 -1
  256. package/daemon/dist/domain/bundle-integrity.js.map +1 -1
  257. package/daemon/dist/domain/bundle-source-resolver.d.ts +4 -1
  258. package/daemon/dist/domain/bundle-source-resolver.d.ts.map +1 -1
  259. package/daemon/dist/domain/bundle-source-resolver.js +73 -19
  260. package/daemon/dist/domain/bundle-source-resolver.js.map +1 -1
  261. package/daemon/dist/domain/bundle-types.d.ts +38 -1
  262. package/daemon/dist/domain/bundle-types.d.ts.map +1 -1
  263. package/daemon/dist/domain/bundle-types.js +78 -0
  264. package/daemon/dist/domain/bundle-types.js.map +1 -1
  265. package/daemon/dist/domain/chat-repository.d.ts +5 -0
  266. package/daemon/dist/domain/chat-repository.d.ts.map +1 -1
  267. package/daemon/dist/domain/chat-repository.js +8 -0
  268. package/daemon/dist/domain/chat-repository.js.map +1 -1
  269. package/daemon/dist/domain/claim-service.d.ts.map +1 -1
  270. package/daemon/dist/domain/claim-service.js +5 -4
  271. package/daemon/dist/domain/claim-service.js.map +1 -1
  272. package/daemon/dist/domain/claude-activity-hooks.d.ts +3 -0
  273. package/daemon/dist/domain/claude-activity-hooks.d.ts.map +1 -1
  274. package/daemon/dist/domain/claude-activity-hooks.js +8 -1
  275. package/daemon/dist/domain/claude-activity-hooks.js.map +1 -1
  276. package/daemon/dist/domain/claude-compaction-enforcer.d.ts +15 -1
  277. package/daemon/dist/domain/claude-compaction-enforcer.d.ts.map +1 -1
  278. package/daemon/dist/domain/claude-compaction-enforcer.js +87 -23
  279. package/daemon/dist/domain/claude-compaction-enforcer.js.map +1 -1
  280. package/daemon/dist/domain/codex-team-workspace.d.ts +8 -0
  281. package/daemon/dist/domain/codex-team-workspace.d.ts.map +1 -0
  282. package/daemon/dist/domain/codex-team-workspace.js +54 -0
  283. package/daemon/dist/domain/codex-team-workspace.js.map +1 -0
  284. package/daemon/dist/domain/codex-thread-id.d.ts.map +1 -1
  285. package/daemon/dist/domain/codex-thread-id.js +4 -2
  286. package/daemon/dist/domain/codex-thread-id.js.map +1 -1
  287. package/daemon/dist/domain/context-monitor.d.ts.map +1 -1
  288. package/daemon/dist/domain/context-monitor.js +9 -1
  289. package/daemon/dist/domain/context-monitor.js.map +1 -1
  290. package/daemon/dist/domain/daemon-version.d.ts +3 -1
  291. package/daemon/dist/domain/daemon-version.d.ts.map +1 -1
  292. package/daemon/dist/domain/daemon-version.js +6 -1
  293. package/daemon/dist/domain/daemon-version.js.map +1 -1
  294. package/daemon/dist/domain/event-loop-monitor.d.ts +6 -0
  295. package/daemon/dist/domain/event-loop-monitor.d.ts.map +1 -1
  296. package/daemon/dist/domain/event-loop-monitor.js +13 -0
  297. package/daemon/dist/domain/event-loop-monitor.js.map +1 -1
  298. package/daemon/dist/domain/execution-view.d.ts.map +1 -1
  299. package/daemon/dist/domain/execution-view.js +57 -11
  300. package/daemon/dist/domain/execution-view.js.map +1 -1
  301. package/daemon/dist/domain/finite-telemetry.d.ts +74 -0
  302. package/daemon/dist/domain/finite-telemetry.d.ts.map +1 -0
  303. package/daemon/dist/domain/finite-telemetry.js +236 -0
  304. package/daemon/dist/domain/finite-telemetry.js.map +1 -0
  305. package/daemon/dist/domain/gateway/connections-projection.d.ts +5 -1
  306. package/daemon/dist/domain/gateway/connections-projection.d.ts.map +1 -1
  307. package/daemon/dist/domain/gateway/connections-projection.js +2 -0
  308. package/daemon/dist/domain/gateway/connections-projection.js.map +1 -1
  309. package/daemon/dist/domain/gateway/destination-resolver.d.ts.map +1 -1
  310. package/daemon/dist/domain/gateway/destination-resolver.js +7 -4
  311. package/daemon/dist/domain/gateway/destination-resolver.js.map +1 -1
  312. package/daemon/dist/domain/gateway/gateway-subsystem.d.ts +2 -0
  313. package/daemon/dist/domain/gateway/gateway-subsystem.d.ts.map +1 -1
  314. package/daemon/dist/domain/gateway/gateway-subsystem.js +4 -0
  315. package/daemon/dist/domain/gateway/gateway-subsystem.js.map +1 -1
  316. package/daemon/dist/domain/gateway/human-readiness.d.ts.map +1 -1
  317. package/daemon/dist/domain/gateway/human-readiness.js +23 -6
  318. package/daemon/dist/domain/gateway/human-readiness.js.map +1 -1
  319. package/daemon/dist/domain/gateway/human-registry.d.ts +2 -2
  320. package/daemon/dist/domain/gateway/human-registry.d.ts.map +1 -1
  321. package/daemon/dist/domain/gateway/human-registry.js +2 -2
  322. package/daemon/dist/domain/gateway/human-registry.js.map +1 -1
  323. package/daemon/dist/domain/gateway/slack/capabilities.d.ts.map +1 -1
  324. package/daemon/dist/domain/gateway/slack/capabilities.js +3 -1
  325. package/daemon/dist/domain/gateway/slack/capabilities.js.map +1 -1
  326. package/daemon/dist/domain/gateway/slack/channel-map.d.ts +39 -0
  327. package/daemon/dist/domain/gateway/slack/channel-map.d.ts.map +1 -0
  328. package/daemon/dist/domain/gateway/slack/channel-map.js +114 -0
  329. package/daemon/dist/domain/gateway/slack/channel-map.js.map +1 -0
  330. package/daemon/dist/domain/gateway/slack/channel-recovery.d.ts +45 -0
  331. package/daemon/dist/domain/gateway/slack/channel-recovery.d.ts.map +1 -0
  332. package/daemon/dist/domain/gateway/slack/channel-recovery.js +176 -0
  333. package/daemon/dist/domain/gateway/slack/channel-recovery.js.map +1 -0
  334. package/daemon/dist/domain/gateway/slack/config.d.ts +7 -0
  335. package/daemon/dist/domain/gateway/slack/config.d.ts.map +1 -1
  336. package/daemon/dist/domain/gateway/slack/config.js +19 -2
  337. package/daemon/dist/domain/gateway/slack/config.js.map +1 -1
  338. package/daemon/dist/domain/gateway/slack/inbound.d.ts +27 -2
  339. package/daemon/dist/domain/gateway/slack/inbound.d.ts.map +1 -1
  340. package/daemon/dist/domain/gateway/slack/inbound.js +123 -11
  341. package/daemon/dist/domain/gateway/slack/inbound.js.map +1 -1
  342. package/daemon/dist/domain/gateway/slack/message.d.ts +7 -0
  343. package/daemon/dist/domain/gateway/slack/message.d.ts.map +1 -1
  344. package/daemon/dist/domain/gateway/slack/message.js +36 -0
  345. package/daemon/dist/domain/gateway/slack/message.js.map +1 -1
  346. package/daemon/dist/domain/gateway/slack/slack-api.d.ts +1 -0
  347. package/daemon/dist/domain/gateway/slack/slack-api.d.ts.map +1 -1
  348. package/daemon/dist/domain/gateway/slack/slack-api.js +3 -1
  349. package/daemon/dist/domain/gateway/slack/slack-api.js.map +1 -1
  350. package/daemon/dist/domain/gateway/slack/slack-delivery.d.ts +30 -7
  351. package/daemon/dist/domain/gateway/slack/slack-delivery.d.ts.map +1 -1
  352. package/daemon/dist/domain/gateway/slack/slack-delivery.js +253 -51
  353. package/daemon/dist/domain/gateway/slack/slack-delivery.js.map +1 -1
  354. package/daemon/dist/domain/gateway/slack/slack-subsystem.d.ts.map +1 -1
  355. package/daemon/dist/domain/gateway/slack/slack-subsystem.js +97 -11
  356. package/daemon/dist/domain/gateway/slack/slack-subsystem.js.map +1 -1
  357. package/daemon/dist/domain/gateway/slack/socket-inbound.d.ts +6 -0
  358. package/daemon/dist/domain/gateway/slack/socket-inbound.d.ts.map +1 -1
  359. package/daemon/dist/domain/gateway/slack/socket-inbound.js +51 -1
  360. package/daemon/dist/domain/gateway/slack/socket-inbound.js.map +1 -1
  361. package/daemon/dist/domain/gateway/slack/state-store.d.ts +24 -0
  362. package/daemon/dist/domain/gateway/slack/state-store.d.ts.map +1 -1
  363. package/daemon/dist/domain/gateway/slack/state-store.js +84 -1
  364. package/daemon/dist/domain/gateway/slack/state-store.js.map +1 -1
  365. package/daemon/dist/domain/gateway/slack/thread-routing.d.ts.map +1 -1
  366. package/daemon/dist/domain/gateway/slack/thread-routing.js +22 -2
  367. package/daemon/dist/domain/gateway/slack/thread-routing.js.map +1 -1
  368. package/daemon/dist/domain/gateway/slack/thread-seat-map.d.ts +14 -0
  369. package/daemon/dist/domain/gateway/slack/thread-seat-map.d.ts.map +1 -1
  370. package/daemon/dist/domain/gateway/slack/thread-seat-map.js +27 -0
  371. package/daemon/dist/domain/gateway/slack/thread-seat-map.js.map +1 -1
  372. package/daemon/dist/domain/generated-file-hygiene.d.ts +3 -0
  373. package/daemon/dist/domain/generated-file-hygiene.d.ts.map +1 -0
  374. package/daemon/dist/domain/generated-file-hygiene.js +145 -0
  375. package/daemon/dist/domain/generated-file-hygiene.js.map +1 -0
  376. package/daemon/dist/domain/install-planner.d.ts.map +1 -1
  377. package/daemon/dist/domain/install-planner.js +17 -0
  378. package/daemon/dist/domain/install-planner.js.map +1 -1
  379. package/daemon/dist/domain/managed-blocks.d.ts +1 -0
  380. package/daemon/dist/domain/managed-blocks.d.ts.map +1 -1
  381. package/daemon/dist/domain/managed-blocks.js +8 -2
  382. package/daemon/dist/domain/managed-blocks.js.map +1 -1
  383. package/daemon/dist/domain/markdown-address.d.ts.map +1 -1
  384. package/daemon/dist/domain/markdown-address.js +23 -6
  385. package/daemon/dist/domain/markdown-address.js.map +1 -1
  386. package/daemon/dist/domain/native-permission-store.d.ts +14 -0
  387. package/daemon/dist/domain/native-permission-store.d.ts.map +1 -1
  388. package/daemon/dist/domain/native-permission-store.js +168 -4
  389. package/daemon/dist/domain/native-permission-store.js.map +1 -1
  390. package/daemon/dist/domain/native-process-executable.d.ts +4 -0
  391. package/daemon/dist/domain/native-process-executable.d.ts.map +1 -0
  392. package/daemon/dist/domain/native-process-executable.js +53 -0
  393. package/daemon/dist/domain/native-process-executable.js.map +1 -0
  394. package/daemon/dist/domain/native-process-lineage.d.ts +2 -0
  395. package/daemon/dist/domain/native-process-lineage.d.ts.map +1 -1
  396. package/daemon/dist/domain/native-process-lineage.js +70 -8
  397. package/daemon/dist/domain/native-process-lineage.js.map +1 -1
  398. package/daemon/dist/domain/native-resume-probe.d.ts +3 -1
  399. package/daemon/dist/domain/native-resume-probe.d.ts.map +1 -1
  400. package/daemon/dist/domain/native-resume-probe.js +38 -7
  401. package/daemon/dist/domain/native-resume-probe.js.map +1 -1
  402. package/daemon/dist/domain/node-inventory.d.ts +2 -2
  403. package/daemon/dist/domain/node-inventory.d.ts.map +1 -1
  404. package/daemon/dist/domain/node-inventory.js +30 -4
  405. package/daemon/dist/domain/node-inventory.js.map +1 -1
  406. package/daemon/dist/domain/node-launcher.d.ts.map +1 -1
  407. package/daemon/dist/domain/node-launcher.js +1 -0
  408. package/daemon/dist/domain/node-launcher.js.map +1 -1
  409. package/daemon/dist/domain/pane-binding-observation.d.ts +1 -0
  410. package/daemon/dist/domain/pane-binding-observation.d.ts.map +1 -1
  411. package/daemon/dist/domain/pane-binding-observation.js +3 -1
  412. package/daemon/dist/domain/pane-binding-observation.js.map +1 -1
  413. package/daemon/dist/domain/permission-policy/policy-ref.d.ts +6 -1
  414. package/daemon/dist/domain/permission-policy/policy-ref.d.ts.map +1 -1
  415. package/daemon/dist/domain/permission-policy/policy-ref.js +16 -4
  416. package/daemon/dist/domain/permission-policy/policy-ref.js.map +1 -1
  417. package/daemon/dist/domain/permission-policy/policy-spec.d.ts +1 -1
  418. package/daemon/dist/domain/permission-policy/policy-spec.d.ts.map +1 -1
  419. package/daemon/dist/domain/permission-policy/policy-spec.js +2 -2
  420. package/daemon/dist/domain/permission-policy/policy-spec.js.map +1 -1
  421. package/daemon/dist/domain/plugin-vendor-service.d.ts +6 -0
  422. package/daemon/dist/domain/plugin-vendor-service.d.ts.map +1 -1
  423. package/daemon/dist/domain/plugin-vendor-service.js +12 -0
  424. package/daemon/dist/domain/plugin-vendor-service.js.map +1 -1
  425. package/daemon/dist/domain/profile-resolver.d.ts +3 -2
  426. package/daemon/dist/domain/profile-resolver.d.ts.map +1 -1
  427. package/daemon/dist/domain/profile-resolver.js +71 -9
  428. package/daemon/dist/domain/profile-resolver.js.map +1 -1
  429. package/daemon/dist/domain/projection-planner.d.ts +11 -0
  430. package/daemon/dist/domain/projection-planner.d.ts.map +1 -1
  431. package/daemon/dist/domain/projection-planner.js +1 -1
  432. package/daemon/dist/domain/projection-planner.js.map +1 -1
  433. package/daemon/dist/domain/ps-projection.d.ts +11 -9
  434. package/daemon/dist/domain/ps-projection.d.ts.map +1 -1
  435. package/daemon/dist/domain/ps-projection.js +15 -12
  436. package/daemon/dist/domain/ps-projection.js.map +1 -1
  437. package/daemon/dist/domain/queue-repository.d.ts +2 -0
  438. package/daemon/dist/domain/queue-repository.d.ts.map +1 -1
  439. package/daemon/dist/domain/queue-repository.js +75 -24
  440. package/daemon/dist/domain/queue-repository.js.map +1 -1
  441. package/daemon/dist/domain/queue-retention.d.ts +2 -2
  442. package/daemon/dist/domain/queue-retention.js +4 -4
  443. package/daemon/dist/domain/queue-transition-log.d.ts.map +1 -1
  444. package/daemon/dist/domain/queue-transition-log.js +12 -10
  445. package/daemon/dist/domain/queue-transition-log.js.map +1 -1
  446. package/daemon/dist/domain/queue-wait-backoff.d.ts.map +1 -1
  447. package/daemon/dist/domain/queue-wait-backoff.js +6 -2
  448. package/daemon/dist/domain/queue-wait-backoff.js.map +1 -1
  449. package/daemon/dist/domain/queue-waiting.d.ts.map +1 -1
  450. package/daemon/dist/domain/queue-waiting.js +7 -2
  451. package/daemon/dist/domain/queue-waiting.js.map +1 -1
  452. package/daemon/dist/domain/queue-wake-ladder.d.ts +15 -2
  453. package/daemon/dist/domain/queue-wake-ladder.d.ts.map +1 -1
  454. package/daemon/dist/domain/queue-wake-ladder.js +29 -6
  455. package/daemon/dist/domain/queue-wake-ladder.js.map +1 -1
  456. package/daemon/dist/domain/readiness-timeout.d.ts +7 -0
  457. package/daemon/dist/domain/readiness-timeout.d.ts.map +1 -0
  458. package/daemon/dist/domain/readiness-timeout.js +19 -0
  459. package/daemon/dist/domain/readiness-timeout.js.map +1 -0
  460. package/daemon/dist/domain/rehydrate-eligibility.d.ts.map +1 -1
  461. package/daemon/dist/domain/rehydrate-eligibility.js +5 -2
  462. package/daemon/dist/domain/rehydrate-eligibility.js.map +1 -1
  463. package/daemon/dist/domain/reply-to-choice.d.ts +6 -2
  464. package/daemon/dist/domain/reply-to-choice.d.ts.map +1 -1
  465. package/daemon/dist/domain/reply-to-choice.js +9 -6
  466. package/daemon/dist/domain/reply-to-choice.js.map +1 -1
  467. package/daemon/dist/domain/request-phase-observer.d.ts +69 -0
  468. package/daemon/dist/domain/request-phase-observer.d.ts.map +1 -0
  469. package/daemon/dist/domain/request-phase-observer.js +206 -0
  470. package/daemon/dist/domain/request-phase-observer.js.map +1 -0
  471. package/daemon/dist/domain/restore-check-service.d.ts +5 -1
  472. package/daemon/dist/domain/restore-check-service.d.ts.map +1 -1
  473. package/daemon/dist/domain/restore-check-service.js +17 -3
  474. package/daemon/dist/domain/restore-check-service.js.map +1 -1
  475. package/daemon/dist/domain/restore-orchestrator.d.ts +2 -0
  476. package/daemon/dist/domain/restore-orchestrator.d.ts.map +1 -1
  477. package/daemon/dist/domain/restore-orchestrator.js +58 -12
  478. package/daemon/dist/domain/restore-orchestrator.js.map +1 -1
  479. package/daemon/dist/domain/rig-mode/operating-posture.d.ts +17 -1
  480. package/daemon/dist/domain/rig-mode/operating-posture.d.ts.map +1 -1
  481. package/daemon/dist/domain/rig-mode/operating-posture.js +53 -15
  482. package/daemon/dist/domain/rig-mode/operating-posture.js.map +1 -1
  483. package/daemon/dist/domain/rig-repository.d.ts +15 -6
  484. package/daemon/dist/domain/rig-repository.d.ts.map +1 -1
  485. package/daemon/dist/domain/rig-repository.js +62 -10
  486. package/daemon/dist/domain/rig-repository.js.map +1 -1
  487. package/daemon/dist/domain/rig-teardown.d.ts.map +1 -1
  488. package/daemon/dist/domain/rig-teardown.js +12 -3
  489. package/daemon/dist/domain/rig-teardown.js.map +1 -1
  490. package/daemon/dist/domain/rigspec-codec.d.ts.map +1 -1
  491. package/daemon/dist/domain/rigspec-codec.js +2 -0
  492. package/daemon/dist/domain/rigspec-codec.js.map +1 -1
  493. package/daemon/dist/domain/rigspec-exporter.d.ts.map +1 -1
  494. package/daemon/dist/domain/rigspec-exporter.js +1 -0
  495. package/daemon/dist/domain/rigspec-exporter.js.map +1 -1
  496. package/daemon/dist/domain/rigspec-instantiator.d.ts +9 -3
  497. package/daemon/dist/domain/rigspec-instantiator.d.ts.map +1 -1
  498. package/daemon/dist/domain/rigspec-instantiator.js +46 -13
  499. package/daemon/dist/domain/rigspec-instantiator.js.map +1 -1
  500. package/daemon/dist/domain/rigspec-preflight.d.ts +3 -2
  501. package/daemon/dist/domain/rigspec-preflight.d.ts.map +1 -1
  502. package/daemon/dist/domain/rigspec-preflight.js +24 -12
  503. package/daemon/dist/domain/rigspec-preflight.js.map +1 -1
  504. package/daemon/dist/domain/rigspec-schema.d.ts.map +1 -1
  505. package/daemon/dist/domain/rigspec-schema.js +24 -5
  506. package/daemon/dist/domain/rigspec-schema.js.map +1 -1
  507. package/daemon/dist/domain/route-timing-recorder.d.ts.map +1 -1
  508. package/daemon/dist/domain/route-timing-recorder.js +2 -0
  509. package/daemon/dist/domain/route-timing-recorder.js.map +1 -1
  510. package/daemon/dist/domain/runtime-adapter.d.ts +12 -3
  511. package/daemon/dist/domain/runtime-adapter.d.ts.map +1 -1
  512. package/daemon/dist/domain/runtime-adapter.js +1 -0
  513. package/daemon/dist/domain/runtime-adapter.js.map +1 -1
  514. package/daemon/dist/domain/seat-activity-service.d.ts.map +1 -1
  515. package/daemon/dist/domain/seat-activity-service.js +16 -6
  516. package/daemon/dist/domain/seat-activity-service.js.map +1 -1
  517. package/daemon/dist/domain/seat-attention-reconciler.d.ts.map +1 -1
  518. package/daemon/dist/domain/seat-attention-reconciler.js +10 -4
  519. package/daemon/dist/domain/seat-attention-reconciler.js.map +1 -1
  520. package/daemon/dist/domain/seat-handover-service.d.ts +2 -0
  521. package/daemon/dist/domain/seat-handover-service.d.ts.map +1 -1
  522. package/daemon/dist/domain/seat-handover-service.js +14 -8
  523. package/daemon/dist/domain/seat-handover-service.js.map +1 -1
  524. package/daemon/dist/domain/seat-launch-environment.d.ts.map +1 -1
  525. package/daemon/dist/domain/seat-launch-environment.js +4 -0
  526. package/daemon/dist/domain/seat-launch-environment.js.map +1 -1
  527. package/daemon/dist/domain/seat-lifecycle-service.d.ts +4 -0
  528. package/daemon/dist/domain/seat-lifecycle-service.d.ts.map +1 -1
  529. package/daemon/dist/domain/seat-lifecycle-service.js +4 -0
  530. package/daemon/dist/domain/seat-lifecycle-service.js.map +1 -1
  531. package/daemon/dist/domain/seat-status-service.d.ts +2 -1
  532. package/daemon/dist/domain/seat-status-service.d.ts.map +1 -1
  533. package/daemon/dist/domain/seat-status-service.js +6 -4
  534. package/daemon/dist/domain/seat-status-service.js.map +1 -1
  535. package/daemon/dist/domain/service-orchestrator.d.ts +1 -0
  536. package/daemon/dist/domain/service-orchestrator.d.ts.map +1 -1
  537. package/daemon/dist/domain/service-orchestrator.js +4 -0
  538. package/daemon/dist/domain/service-orchestrator.js.map +1 -1
  539. package/daemon/dist/domain/session-jsonl.d.ts.map +1 -1
  540. package/daemon/dist/domain/session-jsonl.js +10 -4
  541. package/daemon/dist/domain/session-jsonl.js.map +1 -1
  542. package/daemon/dist/domain/session-transport.d.ts +9 -20
  543. package/daemon/dist/domain/session-transport.d.ts.map +1 -1
  544. package/daemon/dist/domain/session-transport.js +198 -44
  545. package/daemon/dist/domain/session-transport.js.map +1 -1
  546. package/daemon/dist/domain/skill-audit.d.ts +19 -0
  547. package/daemon/dist/domain/skill-audit.d.ts.map +1 -1
  548. package/daemon/dist/domain/skill-audit.js +97 -5
  549. package/daemon/dist/domain/skill-audit.js.map +1 -1
  550. package/daemon/dist/domain/skill-catalog.d.ts +19 -0
  551. package/daemon/dist/domain/skill-catalog.d.ts.map +1 -1
  552. package/daemon/dist/domain/skill-catalog.js +175 -17
  553. package/daemon/dist/domain/skill-catalog.js.map +1 -1
  554. package/daemon/dist/domain/skill-discovery.d.ts +1 -1
  555. package/daemon/dist/domain/skill-discovery.d.ts.map +1 -1
  556. package/daemon/dist/domain/skill-discovery.js +6 -0
  557. package/daemon/dist/domain/skill-discovery.js.map +1 -1
  558. package/daemon/dist/domain/skill-mirror-drift.d.ts +6 -1
  559. package/daemon/dist/domain/skill-mirror-drift.d.ts.map +1 -1
  560. package/daemon/dist/domain/skill-mirror-drift.js +23 -12
  561. package/daemon/dist/domain/skill-mirror-drift.js.map +1 -1
  562. package/daemon/dist/domain/slow-op-recorder.d.ts +5 -0
  563. package/daemon/dist/domain/slow-op-recorder.d.ts.map +1 -1
  564. package/daemon/dist/domain/slow-op-recorder.js +34 -1
  565. package/daemon/dist/domain/slow-op-recorder.js.map +1 -1
  566. package/daemon/dist/domain/snapshot-repository.d.ts.map +1 -1
  567. package/daemon/dist/domain/snapshot-repository.js +12 -32
  568. package/daemon/dist/domain/snapshot-repository.js.map +1 -1
  569. package/daemon/dist/domain/startup-orchestrator.d.ts +30 -5
  570. package/daemon/dist/domain/startup-orchestrator.d.ts.map +1 -1
  571. package/daemon/dist/domain/startup-orchestrator.js +143 -43
  572. package/daemon/dist/domain/startup-orchestrator.js.map +1 -1
  573. package/daemon/dist/domain/startup-proof.d.ts +7 -0
  574. package/daemon/dist/domain/startup-proof.d.ts.map +1 -1
  575. package/daemon/dist/domain/startup-proof.js +7 -0
  576. package/daemon/dist/domain/startup-proof.js.map +1 -1
  577. package/daemon/dist/domain/startup-submission-evidence.d.ts +5 -1
  578. package/daemon/dist/domain/startup-submission-evidence.d.ts.map +1 -1
  579. package/daemon/dist/domain/startup-submission-evidence.js +19 -2
  580. package/daemon/dist/domain/startup-submission-evidence.js.map +1 -1
  581. package/daemon/dist/domain/successor-session-launcher.d.ts +9 -3
  582. package/daemon/dist/domain/successor-session-launcher.d.ts.map +1 -1
  583. package/daemon/dist/domain/successor-session-launcher.js +12 -4
  584. package/daemon/dist/domain/successor-session-launcher.js.map +1 -1
  585. package/daemon/dist/domain/system-world.d.ts +3 -0
  586. package/daemon/dist/domain/system-world.d.ts.map +1 -1
  587. package/daemon/dist/domain/system-world.js +24 -21
  588. package/daemon/dist/domain/system-world.js.map +1 -1
  589. package/daemon/dist/domain/terminal/cmux-provider-adapter.d.ts.map +1 -1
  590. package/daemon/dist/domain/terminal/cmux-provider-adapter.js +2 -3
  591. package/daemon/dist/domain/terminal/cmux-provider-adapter.js.map +1 -1
  592. package/daemon/dist/domain/terminal/herdr-adapter.d.ts +23 -5
  593. package/daemon/dist/domain/terminal/herdr-adapter.d.ts.map +1 -1
  594. package/daemon/dist/domain/terminal/herdr-adapter.js +116 -15
  595. package/daemon/dist/domain/terminal/herdr-adapter.js.map +1 -1
  596. package/daemon/dist/domain/terminal/terminal-provider.d.ts +11 -0
  597. package/daemon/dist/domain/terminal/terminal-provider.d.ts.map +1 -1
  598. package/daemon/dist/domain/terminal/terminal-service.d.ts +14 -0
  599. package/daemon/dist/domain/terminal/terminal-service.d.ts.map +1 -1
  600. package/daemon/dist/domain/terminal/terminal-service.js +91 -10
  601. package/daemon/dist/domain/terminal/terminal-service.js.map +1 -1
  602. package/daemon/dist/domain/terminal/view-composer.d.ts +6 -0
  603. package/daemon/dist/domain/terminal/view-composer.d.ts.map +1 -1
  604. package/daemon/dist/domain/terminal/view-composer.js +4 -2
  605. package/daemon/dist/domain/terminal/view-composer.js.map +1 -1
  606. package/daemon/dist/domain/topology/remote-up-leaf.d.ts +1 -0
  607. package/daemon/dist/domain/topology/remote-up-leaf.d.ts.map +1 -1
  608. package/daemon/dist/domain/topology/remote-up-leaf.js.map +1 -1
  609. package/daemon/dist/domain/transcript-store.d.ts.map +1 -1
  610. package/daemon/dist/domain/transcript-store.js +24 -11
  611. package/daemon/dist/domain/transcript-store.js.map +1 -1
  612. package/daemon/dist/domain/types.d.ts +8 -0
  613. package/daemon/dist/domain/types.d.ts.map +1 -1
  614. package/daemon/dist/domain/types.js.map +1 -1
  615. package/daemon/dist/domain/usage-samples-store.js +2 -2
  616. package/daemon/dist/domain/usage-samples-store.js.map +1 -1
  617. package/daemon/dist/domain/usage-series.d.ts.map +1 -1
  618. package/daemon/dist/domain/usage-series.js +42 -10
  619. package/daemon/dist/domain/usage-series.js.map +1 -1
  620. package/daemon/dist/domain/user-settings/settings-browser.d.ts.map +1 -1
  621. package/daemon/dist/domain/user-settings/settings-browser.js +2 -0
  622. package/daemon/dist/domain/user-settings/settings-browser.js.map +1 -1
  623. package/daemon/dist/domain/user-settings/settings-store.d.ts +1 -1
  624. package/daemon/dist/domain/user-settings/settings-store.d.ts.map +1 -1
  625. package/daemon/dist/domain/user-settings/settings-store.js +14 -1
  626. package/daemon/dist/domain/user-settings/settings-store.js.map +1 -1
  627. package/daemon/dist/domain/watchdog-due.d.ts +17 -0
  628. package/daemon/dist/domain/watchdog-due.d.ts.map +1 -0
  629. package/daemon/dist/domain/watchdog-due.js +45 -0
  630. package/daemon/dist/domain/watchdog-due.js.map +1 -0
  631. package/daemon/dist/domain/watchdog-scheduler.d.ts.map +1 -1
  632. package/daemon/dist/domain/watchdog-scheduler.js +3 -7
  633. package/daemon/dist/domain/watchdog-scheduler.js.map +1 -1
  634. package/daemon/dist/domain/workflow-projector.d.ts.map +1 -1
  635. package/daemon/dist/domain/workflow-projector.js +15 -5
  636. package/daemon/dist/domain/workflow-projector.js.map +1 -1
  637. package/daemon/dist/domain/workflow-runtime.d.ts +1 -1
  638. package/daemon/dist/domain/workflow-runtime.js +1 -1
  639. package/daemon/dist/domain/workflow-runtime.js.map +1 -1
  640. package/daemon/dist/domain/workflow-step-trail-log.d.ts +6 -0
  641. package/daemon/dist/domain/workflow-step-trail-log.d.ts.map +1 -1
  642. package/daemon/dist/domain/workflow-step-trail-log.js +11 -0
  643. package/daemon/dist/domain/workflow-step-trail-log.js.map +1 -1
  644. package/daemon/dist/domain/workspace/project-catalog.d.ts +20 -0
  645. package/daemon/dist/domain/workspace/project-catalog.d.ts.map +1 -1
  646. package/daemon/dist/domain/workspace/project-catalog.js +92 -0
  647. package/daemon/dist/domain/workspace/project-catalog.js.map +1 -1
  648. package/daemon/dist/domain/workspace/project-registration.d.ts +49 -0
  649. package/daemon/dist/domain/workspace/project-registration.d.ts.map +1 -0
  650. package/daemon/dist/domain/workspace/project-registration.js +251 -0
  651. package/daemon/dist/domain/workspace/project-registration.js.map +1 -0
  652. package/daemon/dist/gateway-slack-surface.d.ts +1 -0
  653. package/daemon/dist/gateway-slack-surface.d.ts.map +1 -1
  654. package/daemon/dist/gateway-slack-surface.js +2 -1
  655. package/daemon/dist/gateway-slack-surface.js.map +1 -1
  656. package/daemon/dist/index.d.ts +1 -0
  657. package/daemon/dist/index.d.ts.map +1 -1
  658. package/daemon/dist/index.js +9 -8
  659. package/daemon/dist/index.js.map +1 -1
  660. package/daemon/dist/project-catalog-surface.d.ts +2 -1
  661. package/daemon/dist/project-catalog-surface.d.ts.map +1 -1
  662. package/daemon/dist/project-catalog-surface.js +1 -1
  663. package/daemon/dist/project-catalog-surface.js.map +1 -1
  664. package/daemon/dist/routes/agent-images.js +5 -5
  665. package/daemon/dist/routes/agent-images.js.map +1 -1
  666. package/daemon/dist/routes/bootstrap-failure-response.d.ts +13 -0
  667. package/daemon/dist/routes/bootstrap-failure-response.d.ts.map +1 -0
  668. package/daemon/dist/routes/bootstrap-failure-response.js +52 -0
  669. package/daemon/dist/routes/bootstrap-failure-response.js.map +1 -0
  670. package/daemon/dist/routes/bundles.d.ts.map +1 -1
  671. package/daemon/dist/routes/bundles.js +197 -449
  672. package/daemon/dist/routes/bundles.js.map +1 -1
  673. package/daemon/dist/routes/chat.d.ts.map +1 -1
  674. package/daemon/dist/routes/chat.js +16 -1
  675. package/daemon/dist/routes/chat.js.map +1 -1
  676. package/daemon/dist/routes/compaction.d.ts.map +1 -1
  677. package/daemon/dist/routes/compaction.js +14 -2
  678. package/daemon/dist/routes/compaction.js.map +1 -1
  679. package/daemon/dist/routes/env.d.ts.map +1 -1
  680. package/daemon/dist/routes/env.js +14 -4
  681. package/daemon/dist/routes/env.js.map +1 -1
  682. package/daemon/dist/routes/gateway.d.ts.map +1 -1
  683. package/daemon/dist/routes/gateway.js +5 -0
  684. package/daemon/dist/routes/gateway.js.map +1 -1
  685. package/daemon/dist/routes/projects.d.ts.map +1 -1
  686. package/daemon/dist/routes/projects.js +4 -2
  687. package/daemon/dist/routes/projects.js.map +1 -1
  688. package/daemon/dist/routes/restore-check.d.ts.map +1 -1
  689. package/daemon/dist/routes/restore-check.js +2 -0
  690. package/daemon/dist/routes/restore-check.js.map +1 -1
  691. package/daemon/dist/routes/rigs.d.ts.map +1 -1
  692. package/daemon/dist/routes/rigs.js +5 -4
  693. package/daemon/dist/routes/rigs.js.map +1 -1
  694. package/daemon/dist/routes/rigspec.js +4 -2
  695. package/daemon/dist/routes/rigspec.js.map +1 -1
  696. package/daemon/dist/routes/seat.js +23 -16
  697. package/daemon/dist/routes/seat.js.map +1 -1
  698. package/daemon/dist/routes/sessions.d.ts.map +1 -1
  699. package/daemon/dist/routes/sessions.js +12 -11
  700. package/daemon/dist/routes/sessions.js.map +1 -1
  701. package/daemon/dist/routes/skills.d.ts.map +1 -1
  702. package/daemon/dist/routes/skills.js +15 -7
  703. package/daemon/dist/routes/skills.js.map +1 -1
  704. package/daemon/dist/routes/telemetry.d.ts +2 -0
  705. package/daemon/dist/routes/telemetry.d.ts.map +1 -1
  706. package/daemon/dist/routes/telemetry.js +16 -0
  707. package/daemon/dist/routes/telemetry.js.map +1 -1
  708. package/daemon/dist/routes/terminal-ws.js +15 -2
  709. package/daemon/dist/routes/terminal-ws.js.map +1 -1
  710. package/daemon/dist/routes/terminal.d.ts.map +1 -1
  711. package/daemon/dist/routes/terminal.js +6 -4
  712. package/daemon/dist/routes/terminal.js.map +1 -1
  713. package/daemon/dist/routes/up.d.ts.map +1 -1
  714. package/daemon/dist/routes/up.js +12 -59
  715. package/daemon/dist/routes/up.js.map +1 -1
  716. package/daemon/dist/server.d.ts +1 -0
  717. package/daemon/dist/server.d.ts.map +1 -1
  718. package/daemon/dist/server.js +4 -1
  719. package/daemon/dist/server.js.map +1 -1
  720. package/daemon/dist/spec-validation-surface.d.ts +2 -0
  721. package/daemon/dist/spec-validation-surface.d.ts.map +1 -1
  722. package/daemon/dist/spec-validation-surface.js +2 -0
  723. package/daemon/dist/spec-validation-surface.js.map +1 -1
  724. package/daemon/dist/startup.d.ts.map +1 -1
  725. package/daemon/dist/startup.js +65 -18
  726. package/daemon/dist/startup.js.map +1 -1
  727. package/daemon/dist/system-world-surface.d.ts +1 -1
  728. package/daemon/dist/system-world-surface.d.ts.map +1 -1
  729. package/daemon/dist/system-world-surface.js +1 -1
  730. package/daemon/dist/system-world-surface.js.map +1 -1
  731. package/daemon/dist/terminal/TerminalSessionBroker.d.ts.map +1 -1
  732. package/daemon/dist/terminal/TerminalSessionBroker.js +9 -1
  733. package/daemon/dist/terminal/TerminalSessionBroker.js.map +1 -1
  734. package/daemon/docs/reference/agent-spec.md +114 -68
  735. package/daemon/docs/reference/agent-startup-guide.md +111 -33
  736. package/daemon/docs/reference/agent-state-taxonomy.md +44 -13
  737. package/daemon/docs/reference/browser-access.md +8 -7
  738. package/daemon/docs/reference/bundle-formats.md +209 -0
  739. package/daemon/docs/reference/chain-file-convention.md +18 -9
  740. package/daemon/docs/reference/developing.md +8 -1
  741. package/daemon/docs/reference/edge-types.md +18 -10
  742. package/daemon/docs/reference/getting-started.md +593 -139
  743. package/daemon/docs/reference/health-diagnosis.md +14 -6
  744. package/daemon/docs/reference/help.md +66 -12
  745. package/daemon/docs/reference/host-resources.md +3 -2
  746. package/daemon/docs/reference/inventory-request-diagnostics.md +75 -0
  747. package/daemon/docs/reference/knowledge-maturity.md +3 -1
  748. package/daemon/docs/reference/legacy-topology-migration.md +4 -2
  749. package/daemon/docs/reference/lore-routing.md +3 -1
  750. package/daemon/docs/reference/mission-install.md +3 -1
  751. package/daemon/docs/reference/non-interruptive-mode.md +63 -0
  752. package/daemon/docs/reference/planning-dial.md +2 -1
  753. package/daemon/docs/reference/product-journey-sdlc.md +11 -6
  754. package/daemon/docs/reference/product-management-pass.md +3 -1
  755. package/daemon/docs/reference/project-workspace.md +81 -4
  756. package/daemon/docs/reference/publishing-a-rig-bundle.md +147 -0
  757. package/daemon/docs/reference/refocus-channel.md +28 -7
  758. package/daemon/docs/reference/release-boundary.md +7 -3
  759. package/daemon/docs/reference/rig-bundle.md +292 -43
  760. package/daemon/docs/reference/rig-spec.md +175 -26
  761. package/daemon/docs/reference/rosters.md +61 -0
  762. package/daemon/docs/reference/schemas/bundle-behaviour.v1.schema.json +546 -0
  763. package/daemon/docs/reference/schemas/bundle-common.v1.schema.json +110 -0
  764. package/daemon/docs/reference/schemas/bundle-configurations.v1.schema.json +67 -0
  765. package/daemon/docs/reference/schemas/bundle-status.v1.schema.json +323 -0
  766. package/daemon/docs/reference/schemas/fixtures/identity-vectors.json +80 -0
  767. package/daemon/docs/reference/schemas/fixtures/invalid/behaviour/not-generated-with-sections.json +60 -0
  768. package/daemon/docs/reference/schemas/fixtures/invalid/configurations/spaced-member.configurations.yaml +6 -0
  769. package/daemon/docs/reference/schemas/fixtures/invalid/registry/listed-with-withdrawn-on.yaml +21 -0
  770. package/daemon/docs/reference/schemas/fixtures/invalid/registry/missing-source.yaml +16 -0
  771. package/daemon/docs/reference/schemas/fixtures/invalid/registry/parent-folder.yaml +20 -0
  772. package/daemon/docs/reference/schemas/fixtures/invalid/registry/short-commit.yaml +20 -0
  773. package/daemon/docs/reference/schemas/fixtures/invalid/registry/withdrawn-without-date.yaml +20 -0
  774. package/daemon/docs/reference/schemas/fixtures/invalid/run-record/harness-check-with-configuration.json +75 -0
  775. package/daemon/docs/reference/schemas/fixtures/invalid/run-record/unlabelable-platform.json +97 -0
  776. package/daemon/docs/reference/schemas/fixtures/invalid/status/hand-edited-notice.json +61 -0
  777. package/daemon/docs/reference/schemas/fixtures/invalid/status/tested-with-assistance.json +62 -0
  778. package/daemon/docs/reference/schemas/fixtures/invalid/status/tested-without-records.json +59 -0
  779. package/daemon/docs/reference/schemas/fixtures/invalid/status/unavailable-harness-with-result.json +61 -0
  780. package/daemon/docs/reference/schemas/fixtures/invalid/status/unavailable-listing-with-label.json +61 -0
  781. package/daemon/docs/reference/schemas/fixtures/valid/behaviour/custom-not-generated.json +22 -0
  782. package/daemon/docs/reference/schemas/fixtures/valid/behaviour/legacy-archive-unknown-identity.json +53 -0
  783. package/daemon/docs/reference/schemas/fixtures/valid/behaviour/mixed-runtimes-default.json +101 -0
  784. package/daemon/docs/reference/schemas/fixtures/valid/behaviour/mixed-runtimes-yolo.json +102 -0
  785. package/daemon/docs/reference/schemas/fixtures/valid/behaviour/openrig-dev.recommended.json +258 -0
  786. package/daemon/docs/reference/schemas/fixtures/valid/configurations/openrig-dev.configurations.yaml +12 -0
  787. package/daemon/docs/reference/schemas/fixtures/valid/registry/openrig-dev.yaml +20 -0
  788. package/daemon/docs/reference/schemas/fixtures/valid/registry/withdrawn.yaml +21 -0
  789. package/daemon/docs/reference/schemas/fixtures/valid/run-record/pi-harness-check-blocked.json +74 -0
  790. package/daemon/docs/reference/schemas/fixtures/valid/run-record/team-assisted-pass.json +97 -0
  791. package/daemon/docs/reference/schemas/fixtures/valid/run-record/team-pass.json +97 -0
  792. package/daemon/docs/reference/schemas/fixtures/valid/run-record/withdraws-earlier.json +99 -0
  793. package/daemon/docs/reference/schemas/fixtures/valid/status/status.json +61 -0
  794. package/daemon/docs/reference/schemas/registry-entry.v1.schema.json +139 -0
  795. package/daemon/docs/reference/schemas/run-record.v1.schema.json +315 -0
  796. package/daemon/docs/reference/scoped-operating-posture.md +17 -9
  797. package/daemon/docs/reference/sdlc-conventions.md +46 -28
  798. package/daemon/docs/reference/slack-app-setup.md +112 -11
  799. package/daemon/docs/reference/stream-classifier-worker.md +21 -8
  800. package/daemon/docs/reference/telemetry.md +114 -0
  801. package/daemon/docs/reference/whats-new.md +134 -0
  802. package/daemon/docs/reference/worktree-builds.md +12 -6
  803. package/daemon/policies/builtin/auto.policy.md +24 -0
  804. package/daemon/specs/agents/development/implementer/agent.yaml +2 -2
  805. package/daemon/specs/agents/development/qa/agent.yaml +1 -1
  806. package/daemon/specs/agents/product-management/pm/agent.yaml +10 -0
  807. package/daemon/specs/agents/shared/skills/core/agent-starters/SKILL.md +0 -6
  808. package/daemon/specs/agents/shared/skills/core/agent-startup-and-context-ingestion/SKILL.md +1 -8
  809. package/daemon/specs/agents/shared/skills/core/openrig-architect/SKILL.md +5 -5
  810. package/daemon/specs/agents/shared/skills/core/openrig-skills/SKILL.md +4 -5
  811. package/daemon/specs/agents/shared/skills/core/openrig-software-factory/SKILL.md +31 -21
  812. package/daemon/specs/agents/shared/skills/core/openrig-software-factory/references/worked-example.md +31 -31
  813. package/daemon/specs/agents/shared/skills/core/openrig-upgrade/SKILL.md +2 -0
  814. package/daemon/specs/agents/shared/skills/core/rig-bundles-and-shareable-artifacts/SKILL.md +0 -1
  815. package/daemon/specs/agents/shared/skills/core/session-source-fork/SKILL.md +0 -5
  816. package/daemon/specs/agents/shared/skills/process/agent-browser/OPENRIG.md +1 -1
  817. package/daemon/specs/agents/shared/skills/process/systematic-debugging/SKILL.md +0 -2
  818. package/daemon/specs/rigs/focused/{adversarial-review → code-review}/rig.yaml +1 -1
  819. package/daemon/specs/rigs/focused/pm/CULTURE.md +21 -0
  820. package/daemon/specs/rigs/focused/{pm-team → pm}/rig.yaml +5 -5
  821. package/daemon/specs/rigs/focused/{research-team → research}/rig.yaml +1 -1
  822. package/daemon/specs/rigs/launch/factory/CULTURE.md +96 -0
  823. package/daemon/specs/rigs/launch/factory/guidance/advisor-role.md +10 -0
  824. package/daemon/specs/rigs/launch/factory/guidance/lead-first-move.md +83 -0
  825. package/daemon/specs/rigs/launch/{demo → factory}/rig.yaml +46 -35
  826. package/daemon/specs/rigs/{preview/product-team → launch/factory}/topology/instance/CRAFT.md +1 -1
  827. package/daemon/specs/rigs/{preview/product-team → launch/factory}/topology/rig/CRAFT.md +2 -2
  828. package/daemon/specs/rigs/{preview/product-team → launch/factory}/topology/rig/ORCHESTRATION-CRAFT.md +2 -2
  829. package/daemon/specs/rigs/{preview/product-team/topology/seats/dev1-qa → launch/factory/topology/seats/dev-qa}/CRAFT.md +1 -1
  830. package/daemon/specs/rigs/{preview/product-team/topology/seats/orch1-lead → launch/factory/topology/seats/orch-lead}/CRAFT.md +1 -1
  831. package/daemon/specs/rigs/{preview/product-team/topology/seats/rev1-r1 → launch/factory/topology/seats/review-r1}/CRAFT.md +1 -1
  832. package/daemon/specs/rigs/{preview/product-team/topology/seats/rev1-r2 → launch/factory/topology/seats/review-r2}/CRAFT.md +1 -1
  833. package/daemon/specs/rigs/launch/kernel/agents/advisor/lead/guidance/role.md +37 -0
  834. package/daemon/specs/rigs/launch/kernel/agents/advisor/lead/startup/context.md +12 -13
  835. package/daemon/specs/rigs/launch/kernel/agents/operator/agent/guidance/role.md +258 -9
  836. package/daemon/specs/rigs/launch/kernel/agents/operator/agent/startup/context.md +30 -7
  837. package/daemon/specs/rigs/launch/kernel/agents/queue/worker/guidance/role.md +37 -0
  838. package/daemon/specs/rigs/launch/kernel/culture/CULTURE.md +46 -2
  839. package/daemon/specs/rigs/launch/starter/CULTURE.md +39 -0
  840. package/daemon/specs/rigs/launch/starter/guidance/lead-first-move.md +67 -0
  841. package/daemon/specs/rigs/launch/{first-project-mixed → starter}/rig.yaml +11 -8
  842. package/dist/build-info.js +3 -3
  843. package/dist/bundle-behaviour.d.ts +10 -0
  844. package/dist/bundle-behaviour.d.ts.map +1 -0
  845. package/dist/bundle-behaviour.js +72 -0
  846. package/dist/bundle-behaviour.js.map +1 -0
  847. package/dist/cli-error.d.ts.map +1 -1
  848. package/dist/cli-error.js +11 -3
  849. package/dist/cli-error.js.map +1 -1
  850. package/dist/client.d.ts +2 -0
  851. package/dist/client.d.ts.map +1 -1
  852. package/dist/client.js +2 -0
  853. package/dist/client.js.map +1 -1
  854. package/dist/commands/agent-image.js +2 -2
  855. package/dist/commands/agent-image.js.map +1 -1
  856. package/dist/commands/bootstrap.d.ts.map +1 -1
  857. package/dist/commands/bootstrap.js +30 -5
  858. package/dist/commands/bootstrap.js.map +1 -1
  859. package/dist/commands/bundle.d.ts +12 -0
  860. package/dist/commands/bundle.d.ts.map +1 -1
  861. package/dist/commands/bundle.js +288 -22
  862. package/dist/commands/bundle.js.map +1 -1
  863. package/dist/commands/capture.js +4 -4
  864. package/dist/commands/capture.js.map +1 -1
  865. package/dist/commands/chatroom.d.ts.map +1 -1
  866. package/dist/commands/chatroom.js +21 -1
  867. package/dist/commands/chatroom.js.map +1 -1
  868. package/dist/commands/compact-plan.js +2 -2
  869. package/dist/commands/compact-plan.js.map +1 -1
  870. package/dist/commands/config.d.ts.map +1 -1
  871. package/dist/commands/config.js +3 -0
  872. package/dist/commands/config.js.map +1 -1
  873. package/dist/commands/context.d.ts +3 -1
  874. package/dist/commands/context.d.ts.map +1 -1
  875. package/dist/commands/context.js +70 -20
  876. package/dist/commands/context.js.map +1 -1
  877. package/dist/commands/daemon.js +1 -1
  878. package/dist/commands/daemon.js.map +1 -1
  879. package/dist/commands/doctor.d.ts +3 -1
  880. package/dist/commands/doctor.d.ts.map +1 -1
  881. package/dist/commands/doctor.js +17 -5
  882. package/dist/commands/doctor.js.map +1 -1
  883. package/dist/commands/down.d.ts.map +1 -1
  884. package/dist/commands/down.js +49 -1
  885. package/dist/commands/down.js.map +1 -1
  886. package/dist/commands/env.js +1 -1
  887. package/dist/commands/env.js.map +1 -1
  888. package/dist/commands/gateway.d.ts.map +1 -1
  889. package/dist/commands/gateway.js +4 -3
  890. package/dist/commands/gateway.js.map +1 -1
  891. package/dist/commands/health.d.ts.map +1 -1
  892. package/dist/commands/health.js +4 -1
  893. package/dist/commands/health.js.map +1 -1
  894. package/dist/commands/host.d.ts +11 -0
  895. package/dist/commands/host.d.ts.map +1 -1
  896. package/dist/commands/host.js +25 -1
  897. package/dist/commands/host.js.map +1 -1
  898. package/dist/commands/import.d.ts.map +1 -1
  899. package/dist/commands/import.js +2 -0
  900. package/dist/commands/import.js.map +1 -1
  901. package/dist/commands/mcp.d.ts.map +1 -1
  902. package/dist/commands/mcp.js +25 -12
  903. package/dist/commands/mcp.js.map +1 -1
  904. package/dist/commands/package.d.ts.map +1 -1
  905. package/dist/commands/package.js +6 -3
  906. package/dist/commands/package.js.map +1 -1
  907. package/dist/commands/policy.d.ts.map +1 -1
  908. package/dist/commands/policy.js +9 -7
  909. package/dist/commands/policy.js.map +1 -1
  910. package/dist/commands/project-jev.js +1 -1
  911. package/dist/commands/project-jev.js.map +1 -1
  912. package/dist/commands/project.d.ts.map +1 -1
  913. package/dist/commands/project.js +5 -3
  914. package/dist/commands/project.js.map +1 -1
  915. package/dist/commands/ps.d.ts +1 -0
  916. package/dist/commands/ps.d.ts.map +1 -1
  917. package/dist/commands/ps.js +12 -2
  918. package/dist/commands/ps.js.map +1 -1
  919. package/dist/commands/queue.d.ts.map +1 -1
  920. package/dist/commands/queue.js +10 -5
  921. package/dist/commands/queue.js.map +1 -1
  922. package/dist/commands/restore-packet.d.ts.map +1 -1
  923. package/dist/commands/restore-packet.js +6 -4
  924. package/dist/commands/restore-packet.js.map +1 -1
  925. package/dist/commands/restore.d.ts.map +1 -1
  926. package/dist/commands/restore.js +5 -0
  927. package/dist/commands/restore.js.map +1 -1
  928. package/dist/commands/roster.d.ts +63 -0
  929. package/dist/commands/roster.d.ts.map +1 -0
  930. package/dist/commands/roster.js +169 -0
  931. package/dist/commands/roster.js.map +1 -0
  932. package/dist/commands/scope.js +5 -5
  933. package/dist/commands/scope.js.map +1 -1
  934. package/dist/commands/seat.d.ts.map +1 -1
  935. package/dist/commands/seat.js +57 -8
  936. package/dist/commands/seat.js.map +1 -1
  937. package/dist/commands/send.d.ts.map +1 -1
  938. package/dist/commands/send.js +20 -6
  939. package/dist/commands/send.js.map +1 -1
  940. package/dist/commands/setup.d.ts +7 -16
  941. package/dist/commands/setup.d.ts.map +1 -1
  942. package/dist/commands/setup.js +174 -338
  943. package/dist/commands/setup.js.map +1 -1
  944. package/dist/commands/skill.d.ts.map +1 -1
  945. package/dist/commands/skill.js +6 -1
  946. package/dist/commands/skill.js.map +1 -1
  947. package/dist/commands/slack.d.ts +6 -2
  948. package/dist/commands/slack.d.ts.map +1 -1
  949. package/dist/commands/slack.js +192 -10
  950. package/dist/commands/slack.js.map +1 -1
  951. package/dist/commands/specs.d.ts.map +1 -1
  952. package/dist/commands/specs.js +19 -2
  953. package/dist/commands/specs.js.map +1 -1
  954. package/dist/commands/start.js +1 -1
  955. package/dist/commands/start.js.map +1 -1
  956. package/dist/commands/stream.js +1 -1
  957. package/dist/commands/stream.js.map +1 -1
  958. package/dist/commands/telemetry.d.ts +5 -0
  959. package/dist/commands/telemetry.d.ts.map +1 -0
  960. package/dist/commands/telemetry.js +58 -0
  961. package/dist/commands/telemetry.js.map +1 -0
  962. package/dist/commands/terminal.d.ts +33 -0
  963. package/dist/commands/terminal.d.ts.map +1 -1
  964. package/dist/commands/terminal.js +30 -12
  965. package/dist/commands/terminal.js.map +1 -1
  966. package/dist/commands/tui.js +4 -4
  967. package/dist/commands/tui.js.map +1 -1
  968. package/dist/commands/up.d.ts.map +1 -1
  969. package/dist/commands/up.js +115 -68
  970. package/dist/commands/up.js.map +1 -1
  971. package/dist/commands/whoami.d.ts +3 -0
  972. package/dist/commands/whoami.d.ts.map +1 -1
  973. package/dist/commands/whoami.js +29 -2
  974. package/dist/commands/whoami.js.map +1 -1
  975. package/dist/commands/workflow-follow.d.ts +1 -1
  976. package/dist/commands/workflow-follow.d.ts.map +1 -1
  977. package/dist/commands/workflow-follow.js +4 -3
  978. package/dist/commands/workflow-follow.js.map +1 -1
  979. package/dist/commands/workflow.d.ts.map +1 -1
  980. package/dist/commands/workflow.js +30 -18
  981. package/dist/commands/workflow.js.map +1 -1
  982. package/dist/config-store.d.ts +5 -1
  983. package/dist/config-store.d.ts.map +1 -1
  984. package/dist/config-store.js +17 -2
  985. package/dist/config-store.js.map +1 -1
  986. package/dist/daemon-auto-start.d.ts +8 -0
  987. package/dist/daemon-auto-start.d.ts.map +1 -0
  988. package/dist/daemon-auto-start.js +39 -0
  989. package/dist/daemon-auto-start.js.map +1 -0
  990. package/dist/front-door.d.ts.map +1 -1
  991. package/dist/front-door.js +5 -2
  992. package/dist/front-door.js.map +1 -1
  993. package/dist/herdr-launch-config.d.ts +3 -0
  994. package/dist/herdr-launch-config.d.ts.map +1 -0
  995. package/dist/herdr-launch-config.js +37 -0
  996. package/dist/herdr-launch-config.js.map +1 -0
  997. package/dist/index.d.ts +1 -0
  998. package/dist/index.d.ts.map +1 -1
  999. package/dist/index.js +6 -1
  1000. package/dist/index.js.map +1 -1
  1001. package/dist/lib/bundle-check.d.ts +13 -0
  1002. package/dist/lib/bundle-check.d.ts.map +1 -0
  1003. package/dist/lib/bundle-check.js +191 -0
  1004. package/dist/lib/bundle-check.js.map +1 -0
  1005. package/dist/lib/bundle-configuration.d.ts +60 -0
  1006. package/dist/lib/bundle-configuration.d.ts.map +1 -0
  1007. package/dist/lib/bundle-configuration.js +198 -0
  1008. package/dist/lib/bundle-configuration.js.map +1 -0
  1009. package/dist/lib/bundle-source.d.ts +59 -0
  1010. package/dist/lib/bundle-source.d.ts.map +1 -0
  1011. package/dist/lib/bundle-source.js +366 -0
  1012. package/dist/lib/bundle-source.js.map +1 -0
  1013. package/dist/lib/context-git.d.ts +2 -0
  1014. package/dist/lib/context-git.d.ts.map +1 -1
  1015. package/dist/lib/context-git.js +55 -5
  1016. package/dist/lib/context-git.js.map +1 -1
  1017. package/dist/lib/context-install.d.ts.map +1 -1
  1018. package/dist/lib/context-install.js +2 -3
  1019. package/dist/lib/context-install.js.map +1 -1
  1020. package/dist/lib/permission-policy/policy-ref.d.ts +6 -1
  1021. package/dist/lib/permission-policy/policy-ref.d.ts.map +1 -1
  1022. package/dist/lib/permission-policy/policy-ref.js +16 -4
  1023. package/dist/lib/permission-policy/policy-ref.js.map +1 -1
  1024. package/dist/lib/permission-policy/policy-spec.d.ts +1 -1
  1025. package/dist/lib/permission-policy/policy-spec.d.ts.map +1 -1
  1026. package/dist/lib/permission-policy/policy-spec.js +2 -2
  1027. package/dist/lib/permission-policy/policy-spec.js.map +1 -1
  1028. package/dist/lib/scope/scope-fs.d.ts +3 -2
  1029. package/dist/lib/scope/scope-fs.d.ts.map +1 -1
  1030. package/dist/lib/scope/scope-fs.js +97 -9
  1031. package/dist/lib/scope/scope-fs.js.map +1 -1
  1032. package/dist/lib/scope/templates.d.ts.map +1 -1
  1033. package/dist/lib/scope/templates.js +28 -23
  1034. package/dist/lib/scope/templates.js.map +1 -1
  1035. package/dist/lib/scope-templates/notes.md +1 -1
  1036. package/dist/lib/work-install.d.ts +12 -0
  1037. package/dist/lib/work-install.d.ts.map +1 -1
  1038. package/dist/lib/work-install.js +55 -4
  1039. package/dist/lib/work-install.js.map +1 -1
  1040. package/dist/provider-auth.d.ts +32 -0
  1041. package/dist/provider-auth.d.ts.map +1 -0
  1042. package/dist/provider-auth.js +128 -0
  1043. package/dist/provider-auth.js.map +1 -0
  1044. package/dist/terminal-window.d.ts +19 -0
  1045. package/dist/terminal-window.d.ts.map +1 -0
  1046. package/dist/terminal-window.js +513 -0
  1047. package/dist/terminal-window.js.map +1 -0
  1048. package/package.json +1 -1
  1049. package/tui/dist/commands/registry.d.ts.map +1 -1
  1050. package/tui/dist/commands/registry.js +9 -4
  1051. package/tui/dist/commands/registry.js.map +1 -1
  1052. package/tui/dist/config/config-model.d.ts.map +1 -1
  1053. package/tui/dist/config/config-model.js +1 -0
  1054. package/tui/dist/config/config-model.js.map +1 -1
  1055. package/tui/dist/connections/connections-model.d.ts +5 -0
  1056. package/tui/dist/connections/connections-model.d.ts.map +1 -1
  1057. package/tui/dist/connections/connections-model.js +1 -1
  1058. package/tui/dist/connections/connections-model.js.map +1 -1
  1059. package/tui/dist/daemon-client.d.ts +6 -0
  1060. package/tui/dist/daemon-client.d.ts.map +1 -1
  1061. package/tui/dist/daemon-client.js +5 -2
  1062. package/tui/dist/daemon-client.js.map +1 -1
  1063. package/tui/dist/execution/workflow-model.d.ts.map +1 -1
  1064. package/tui/dist/execution/workflow-model.js +3 -1
  1065. package/tui/dist/execution/workflow-model.js.map +1 -1
  1066. package/tui/dist/hydrate.d.ts +1 -1
  1067. package/tui/dist/hydrate.d.ts.map +1 -1
  1068. package/tui/dist/hydrate.js +3 -1
  1069. package/tui/dist/hydrate.js.map +1 -1
  1070. package/tui/dist/main.js +53 -14
  1071. package/tui/dist/main.js.map +1 -1
  1072. package/tui/dist/page-read.js +1 -1
  1073. package/tui/dist/page-read.js.map +1 -1
  1074. package/tui/dist/pending-address.d.ts +7 -0
  1075. package/tui/dist/pending-address.d.ts.map +1 -0
  1076. package/tui/dist/pending-address.js +11 -0
  1077. package/tui/dist/pending-address.js.map +1 -0
  1078. package/tui/dist/render.d.ts.map +1 -1
  1079. package/tui/dist/render.js +74 -23
  1080. package/tui/dist/render.js.map +1 -1
  1081. package/tui/dist/socket-server.d.ts +3 -1
  1082. package/tui/dist/socket-server.d.ts.map +1 -1
  1083. package/tui/dist/socket-server.js +6 -0
  1084. package/tui/dist/socket-server.js.map +1 -1
  1085. package/tui/dist/specs/graph.d.ts +5 -0
  1086. package/tui/dist/specs/graph.d.ts.map +1 -0
  1087. package/tui/dist/specs/graph.js +16 -0
  1088. package/tui/dist/specs/graph.js.map +1 -0
  1089. package/tui/dist/specs/launch.d.ts +29 -0
  1090. package/tui/dist/specs/launch.d.ts.map +1 -0
  1091. package/tui/dist/specs/launch.js +64 -0
  1092. package/tui/dist/specs/launch.js.map +1 -0
  1093. package/tui/dist/startup.d.ts.map +1 -1
  1094. package/tui/dist/startup.js +15 -6
  1095. package/tui/dist/startup.js.map +1 -1
  1096. package/tui/dist/state.d.ts +2 -2
  1097. package/tui/dist/state.d.ts.map +1 -1
  1098. package/tui/dist/state.js +77 -27
  1099. package/tui/dist/state.js.map +1 -1
  1100. package/tui/dist/stylize.js +1 -1
  1101. package/tui/dist/stylize.js.map +1 -1
  1102. package/tui/dist/terminals/open-window.d.ts +5 -0
  1103. package/tui/dist/terminals/open-window.d.ts.map +1 -0
  1104. package/tui/dist/terminals/open-window.js +55 -0
  1105. package/tui/dist/terminals/open-window.js.map +1 -0
  1106. package/tui/dist/terminals/terminal-model.d.ts +1 -0
  1107. package/tui/dist/terminals/terminal-model.d.ts.map +1 -1
  1108. package/tui/dist/terminals/terminal-model.js +21 -5
  1109. package/tui/dist/terminals/terminal-model.js.map +1 -1
  1110. package/tui/dist/types.d.ts +32 -0
  1111. package/tui/dist/types.d.ts.map +1 -1
  1112. package/ui/dist/assets/{index-HHSvwF97.js → index-D5n8EwkG.js} +1 -1
  1113. package/ui/dist/index.html +1 -1
  1114. package/daemon/specs/rigs/launch/conveyor/README.md +0 -33
  1115. package/daemon/specs/rigs/launch/conveyor/rig.yaml +0 -72
  1116. package/daemon/specs/rigs/launch/demo/project-example/README.md +0 -25
  1117. package/daemon/specs/rigs/launch/demo/project-example/missions/improve-onboarding/SPEC.md +0 -19
  1118. package/daemon/specs/rigs/launch/demo/project-example/missions/improve-onboarding/slices/01-shorten-first-run/PROGRESS.md +0 -6
  1119. package/daemon/specs/rigs/launch/demo/project-example/missions/improve-onboarding/slices/01-shorten-first-run/PROOF.md +0 -7
  1120. package/daemon/specs/rigs/launch/demo/project-example/missions/improve-onboarding/slices/01-shorten-first-run/SPEC.md +0 -31
  1121. package/daemon/specs/rigs/launch/first-project/rig.yaml +0 -31
  1122. package/daemon/specs/rigs/launch/first-project-claude/rig.yaml +0 -30
  1123. package/daemon/specs/rigs/launch/implementation-pair/rig.yaml +0 -27
  1124. package/daemon/specs/rigs/preview/product-team/rig.yaml +0 -90
  1125. /package/daemon/specs/rigs/launch/factory-rsi/{rig.yaml → world-bundle.yaml} +0 -0
@@ -2,26 +2,28 @@ import fs from "node:fs";
2
2
  import os from "node:os";
3
3
  import nodePath from "node:path";
4
4
  import { Hono } from "hono";
5
+ import { bootstrapFailureResponse } from "./bootstrap-failure-response.js";
5
6
  import { LegacyBundleAssembler as BundleAssembler } from "../domain/bundle-assembler.js";
6
7
  import { PodBundleAssembler } from "../domain/pod-bundle-assembler.js";
7
8
  import { computeIntegrity, writeIntegrity, verifyIntegrity } from "../domain/bundle-integrity.js";
8
- import { pack, unpack, verifyArchiveDigest } from "../domain/bundle-archive.js";
9
+ import { pack, unpack, verifyArchiveDigest, collectUnsafeArchiveEntries, unsafeArchiveEntryReason } from "../domain/bundle-archive.js";
9
10
  import { resolvePackage } from "../domain/package-resolve-helper.js";
10
11
  import { compareSpecToLive, topologyFromRigSpec, topologyFromLiveLogicalIds, bundleExportWarning, topologyFromLegacyRigSpec, topologyFromLiveNodeIds, } from "../domain/spec-live-conformance.js";
11
12
  import { LegacyRigSpecSchema } from "../domain/rigspec-schema.js";
12
13
  import { RigSpecCodec } from "../domain/rigspec-codec.js";
13
14
  import { RigSpecSchema } from "../domain/rigspec-schema.js";
14
- import { parseLegacyBundleManifest as parseBundleManifest, normalizeLegacyBundleManifest as normalizeBundleManifest, serializePodBundleManifest, parsePodBundleManifest, validatePodBundleManifest, validateLegacyBundleManifest, normalizeProvenanceBlock, normalizeCompatibilityBlock, isRelativeSafePath } from "../domain/bundle-types.js";
15
+ import { parseLegacyBundleManifest as parseBundleManifest, normalizeLegacyBundleManifest as normalizeBundleManifest, serializePodBundleManifest, parsePodBundleManifest, validatePodBundleManifest, validateLegacyBundleManifest, normalizeProvenanceBlock, normalizeBundleSource, normalizeCompatibilityBlock, isRelativeSafePath } from "../domain/bundle-types.js";
15
16
  import { detectBundleConflicts } from "../domain/bundle-conflict-detector.js";
17
+ import { bundleInstallContext, bundleInstallContextLines } from "../domain/bundle-install-context.js";
16
18
  import { BundleAuditReader, BundleAuditWriter } from "../domain/bundle-audit.js";
17
19
  import { getDefaultOpenRigPath } from "../openrig-compat.js";
18
- import { routeSkills } from "../domain/bundle-skills-router.js";
19
- import { routePlugins } from "../domain/bundle-plugins-router.js";
20
- import { routeWorkflowSpecs } from "../domain/bundle-workflow-specs-router.js";
21
- import { routeContextPacks } from "../domain/bundle-context-packs-router.js";
22
- import { routeAgentImages } from "../domain/bundle-agent-images-router.js";
23
- import { SettingsStore as ContextPackSettingsStore } from "../domain/user-settings/settings-store.js";
20
+ import { routingFailureWarnings } from "../domain/bundle-content-routing.js";
21
+ import { configurationId, packageDigest } from "../domain/bundle-identity.js";
22
+ import { vendorContextPackDir } from "../domain/bundle-carried-context-pack.js";
23
+ import { vendorProjectDir } from "../domain/bundle-carried-project.js";
24
24
  import { getDaemonVersion } from "../domain/daemon-version.js";
25
+ import { inspectBundleBehaviour } from "../domain/bundle-behaviour-inspect.js";
26
+ import { normalizePreconditionsBlock } from "../domain/bundle-types.js";
25
27
  import { assertShippableSubstance } from "../domain/agent-resolver.js";
26
28
  /**
27
29
  * Compare two dotted numeric version strings (semver-ish). Returns -1 if
@@ -181,6 +183,9 @@ function provenanceFromRequestBody(raw) {
181
183
  return undefined;
182
184
  const p = raw;
183
185
  const result = {};
186
+ const source = normalizeBundleSource(p["source"]);
187
+ if (source)
188
+ result.source = source;
184
189
  if (typeof p["sourceHost"] === "string")
185
190
  result.sourceHost = p["sourceHost"];
186
191
  if (typeof p["authorSession"] === "string")
@@ -361,314 +366,6 @@ function podAssemblerFsOps() {
361
366
  },
362
367
  };
363
368
  }
364
- /** Item 6 / slice-05 Checkpoint 7.3d: real PluginsRouterFsOps backed by node:fs. */
365
- function pluginsRouterFsOps() {
366
- return {
367
- exists: (p) => fs.existsSync(p),
368
- isDirectory: (p) => { try {
369
- return fs.statSync(p).isDirectory();
370
- }
371
- catch {
372
- return false;
373
- } },
374
- mkdirp: (p) => fs.mkdirSync(p, { recursive: true }),
375
- copyDir: (s, d) => fs.cpSync(s, d, { recursive: true }),
376
- };
377
- }
378
- /** Item 6 / slice-05 Checkpoint 7.3e step 3: real WorkflowSpecsRouterFsOps backed by node:fs. */
379
- function workflowSpecsRouterFsOps() {
380
- return {
381
- exists: (p) => fs.existsSync(p),
382
- copyFile: (s, d) => fs.copyFileSync(s, d),
383
- mkdirp: (p) => fs.mkdirSync(p, { recursive: true }),
384
- };
385
- }
386
- /** Item 6 / slice-05 Checkpoint 7.3f step 3: real ContextPacksRouterFsOps backed by node:fs. */
387
- function contextPacksRouterFsOps() {
388
- return {
389
- exists: (p) => fs.existsSync(p),
390
- isDirectory: (p) => { try {
391
- return fs.statSync(p).isDirectory();
392
- }
393
- catch {
394
- return false;
395
- } },
396
- readFile: (p) => fs.readFileSync(p, "utf8"),
397
- listFiles: (dir) => {
398
- const files = [];
399
- const walk = (current, prefix) => {
400
- for (const entry of fs.readdirSync(current, { withFileTypes: true }).sort((a, b) => a.name.localeCompare(b.name))) {
401
- const child = nodePath.join(current, entry.name);
402
- const relativePath = prefix ? `${prefix}/${entry.name}` : entry.name;
403
- if (entry.isDirectory())
404
- walk(child, relativePath);
405
- else if (entry.isFile())
406
- files.push(relativePath);
407
- }
408
- };
409
- walk(dir, "");
410
- return files;
411
- },
412
- mkdirp: (p) => fs.mkdirSync(p, { recursive: true }),
413
- copyDir: (s, d) => fs.cpSync(s, d, { recursive: true }),
414
- };
415
- }
416
- /** Item 6 / slice-05 Checkpoint 7.3g step 3: real AgentImagesRouterFsOps backed by node:fs. */
417
- function agentImagesRouterFsOps() {
418
- return {
419
- exists: (p) => fs.existsSync(p),
420
- isDirectory: (p) => { try {
421
- return fs.statSync(p).isDirectory();
422
- }
423
- catch {
424
- return false;
425
- } },
426
- mkdirp: (p) => fs.mkdirSync(p, { recursive: true }),
427
- copyDir: (s, d) => fs.cpSync(s, d, { recursive: true }),
428
- };
429
- }
430
- /**
431
- * Item 6 / slice-05 Checkpoint 7.3g step 3: extract the bundle safely
432
- * (banked unpack trust boundary) and route any declared agent_images to
433
- * the operator agent-images library. Returns null when bundle has no
434
- * agent_images[] (no-op).
435
- *
436
- * Target resolution: <openrigHome>/agent-images — per startup.ts:523
437
- * (the user-file root the live AgentImageLibraryService is constructed
438
- * against). No SettingsStore complexity; canonical path is OPENRIG_HOME-
439
- * rooted per agent-image-types.ts:9-10.
440
- *
441
- * Per the e7a0b253 PRD-coherent contract: agent_images entries are paths
442
- * to image DIRECTORIES (not manifest paths — distinct shape from
443
- * context_packs). The router enforces sourceAbs isDirectory + manifest.yaml
444
- * inside the dir is a file before copying the whole image dir.
445
- *
446
- * Mirror of routeContextPacksAfterBootstrap pattern with the dir-path
447
- * contract adaptation. bundlePath-only signature per 5f410eee B1 lesson.
448
- */
449
- async function routeAgentImagesAfterBootstrap(bundlePath) {
450
- const targetAgentImagesDir = getDefaultOpenRigPath("agent-images");
451
- const tmpDir = fs.mkdtempSync(nodePath.join(os.tmpdir(), "bundle-agent-images-route-"));
452
- try {
453
- await unpack(bundlePath, tmpDir);
454
- const manifestPath = nodePath.join(tmpDir, "bundle.yaml");
455
- if (!fs.existsSync(manifestPath))
456
- return null;
457
- const manifestYaml = fs.readFileSync(manifestPath, "utf-8");
458
- const manifest = parsePodBundleManifest(manifestYaml);
459
- const rawAgentImages = manifest["agent_images"];
460
- if (!Array.isArray(rawAgentImages) || rawAgentImages.length === 0)
461
- return null;
462
- const declaredAgentImages = rawAgentImages.filter((s) => typeof s === "string" && s.length > 0);
463
- if (declaredAgentImages.length === 0)
464
- return null;
465
- return routeAgentImages({
466
- bundleRoot: tmpDir,
467
- declaredAgentImages,
468
- targetAgentImagesDir,
469
- }, agentImagesRouterFsOps());
470
- }
471
- finally {
472
- fs.rmSync(tmpDir, { recursive: true, force: true });
473
- }
474
- }
475
- /**
476
- * Item 6 / slice-05 Checkpoint 7.3f step 3: extract the bundle safely
477
- * (banked unpack trust boundary) and route any declared context_packs to
478
- * the operator context-packs library. Returns null when bundle has no
479
- * context_packs[] (no-op).
480
- *
481
- * Target resolution uses context.root, exactly like the live
482
- * ContextPackLibraryService. A configured root replaces the default; bundle
483
- * routing must not silently create a second writable library.
484
- *
485
- * Mirror of routeSkillsAfterBootstrap / routePluginsAfterBootstrap /
486
- * routeWorkflowSpecsAfterBootstrap pattern: takes bundlePath only
487
- * (decoupled from installMeta per the 5f410eee B1 lesson; routing must
488
- * fire on the dual-override path too).
489
- */
490
- async function routeContextPacksAfterBootstrap(bundlePath) {
491
- const targetContextPacksDir = new ContextPackSettingsStore().resolveOne("context.root").value;
492
- const tmpDir = fs.mkdtempSync(nodePath.join(os.tmpdir(), "bundle-context-packs-route-"));
493
- try {
494
- await unpack(bundlePath, tmpDir);
495
- const manifestPath = nodePath.join(tmpDir, "bundle.yaml");
496
- if (!fs.existsSync(manifestPath))
497
- return null;
498
- const manifestYaml = fs.readFileSync(manifestPath, "utf-8");
499
- const manifest = parsePodBundleManifest(manifestYaml);
500
- const rawContextPacks = manifest["context_packs"];
501
- if (!Array.isArray(rawContextPacks) || rawContextPacks.length === 0)
502
- return null;
503
- const declaredContextPacks = rawContextPacks.filter((s) => typeof s === "string" && s.length > 0);
504
- if (declaredContextPacks.length === 0)
505
- return null;
506
- return routeContextPacks({
507
- bundleRoot: tmpDir,
508
- declaredContextPacks,
509
- targetContextPacksDir,
510
- }, contextPacksRouterFsOps());
511
- }
512
- finally {
513
- fs.rmSync(tmpDir, { recursive: true, force: true });
514
- }
515
- }
516
- /**
517
- * Item 6 / slice-05 Checkpoint 7.3e step 3: extract the bundle safely
518
- * (banked unpack trust boundary) and route any declared workflow_specs to
519
- * the operator workflow-specs library. Returns null when bundle has no
520
- * workflow_specs[] (no-op), no manifest, or workspaceSpecsRoot unresolved.
521
- *
522
- * Target resolution per the CALLER CONTRACT in
523
- * bundle-workflow-specs-router.ts: SettingsStore is the sole authority.
524
- * Resolved as nodePath.join(workspaceSpecsRoot, "workflows") — the path
525
- * that spec-library-workflow-scanner actually reads (startup.ts:903-916).
526
- * If SettingsStore cannot resolve workspaceSpecsRoot (settings not yet
527
- * initialized / config error), we return null and the install lifecycle
528
- * proceeds without workflow_specs routing — mirror of startup.ts:910-916
529
- * try/catch posture.
530
- *
531
- * Mirror of routeSkillsAfterBootstrap / routePluginsAfterBootstrap pattern:
532
- * takes bundlePath only (decoupled from installMeta per the 5f410eee B1
533
- * lesson; routing must fire on the dual-override path too).
534
- */
535
- async function routeWorkflowSpecsAfterBootstrap(bundlePath) {
536
- let workspaceSpecsRoot;
537
- try {
538
- const settingsStore = new ContextPackSettingsStore();
539
- workspaceSpecsRoot = settingsStore.resolveConfig().workspaceSpecsRoot;
540
- }
541
- catch {
542
- return null; // settings unresolvable; no-op routing
543
- }
544
- if (!workspaceSpecsRoot)
545
- return null;
546
- const targetWorkflowSpecsDir = nodePath.join(workspaceSpecsRoot, "workflows");
547
- const tmpDir = fs.mkdtempSync(nodePath.join(os.tmpdir(), "bundle-workflow-specs-route-"));
548
- try {
549
- await unpack(bundlePath, tmpDir);
550
- const manifestPath = nodePath.join(tmpDir, "bundle.yaml");
551
- if (!fs.existsSync(manifestPath))
552
- return null;
553
- const manifestYaml = fs.readFileSync(manifestPath, "utf-8");
554
- const manifest = parsePodBundleManifest(manifestYaml);
555
- const rawWorkflowSpecs = manifest["workflow_specs"];
556
- if (!Array.isArray(rawWorkflowSpecs) || rawWorkflowSpecs.length === 0)
557
- return null;
558
- const declaredWorkflowSpecs = rawWorkflowSpecs.filter((s) => typeof s === "string" && s.length > 0);
559
- if (declaredWorkflowSpecs.length === 0)
560
- return null;
561
- return routeWorkflowSpecs({
562
- bundleRoot: tmpDir,
563
- declaredWorkflowSpecs,
564
- targetWorkflowSpecsDir,
565
- }, workflowSpecsRouterFsOps());
566
- }
567
- finally {
568
- fs.rmSync(tmpDir, { recursive: true, force: true });
569
- }
570
- }
571
- /**
572
- * Item 6 / slice-05 Checkpoint 7.3d: extract the bundle safely (banked unpack
573
- * trust boundary) and route any declared plugin references to the operator
574
- * plugins library (<OPENRIG_HOME>/plugins/<id>/). Returns null when bundle
575
- * has no plugins[] (no-op). Mirror of routeSkillsAfterBootstrap pattern —
576
- * takes bundlePath only (decoupled from installMeta per the 5f410eee B1
577
- * lesson; routing must fire on the dual-override path too).
578
- */
579
- async function routePluginsAfterBootstrap(bundlePath) {
580
- const tmpDir = fs.mkdtempSync(nodePath.join(os.tmpdir(), "bundle-plugins-route-"));
581
- try {
582
- await unpack(bundlePath, tmpDir);
583
- const manifestPath = nodePath.join(tmpDir, "bundle.yaml");
584
- if (!fs.existsSync(manifestPath))
585
- return null;
586
- const manifestYaml = fs.readFileSync(manifestPath, "utf-8");
587
- const manifest = parsePodBundleManifest(manifestYaml);
588
- const rawPlugins = manifest["plugins"];
589
- if (!Array.isArray(rawPlugins) || rawPlugins.length === 0)
590
- return null;
591
- const declaredPlugins = [];
592
- for (const entry of rawPlugins) {
593
- if (!entry || typeof entry !== "object" || Array.isArray(entry))
594
- continue;
595
- const p = entry;
596
- const s = p["source"];
597
- if (typeof p["id"] !== "string" || !p["id"])
598
- continue;
599
- if (!s || typeof s !== "object" || Array.isArray(s))
600
- continue;
601
- const src = s;
602
- if (src["kind"] !== "local" || typeof src["path"] !== "string" || !src["path"])
603
- continue;
604
- declaredPlugins.push({ id: p["id"], source: { kind: "local", path: src["path"] } });
605
- }
606
- if (declaredPlugins.length === 0)
607
- return null;
608
- return routePlugins({
609
- bundleRoot: tmpDir,
610
- declaredPlugins,
611
- targetPluginsDir: getDefaultOpenRigPath("plugins"),
612
- }, pluginsRouterFsOps());
613
- }
614
- finally {
615
- fs.rmSync(tmpDir, { recursive: true, force: true });
616
- }
617
- }
618
- /** Item 6 / slice-05 Checkpoint 7.3: real SkillsRouterFsOps backed by node:fs. */
619
- function skillsRouterFsOps() {
620
- return {
621
- exists: (p) => fs.existsSync(p),
622
- copyFile: (s, d) => fs.copyFileSync(s, d),
623
- mkdirp: (p) => fs.mkdirSync(p, { recursive: true }),
624
- };
625
- }
626
- /**
627
- * Item 6 / slice-05 Checkpoint 7.3: extract the bundle safely (banked unpack
628
- * trust boundary) and route legacy declared skill files to the package cache.
629
- * S04 keeps this package-shaped payload out of the managed skill catalog;
630
- * importing a complete harness skill into the catalog is a separate action.
631
- * Returns null when bundle has no skills[] (no-op).
632
- *
633
- * B1 repair (qitem-20260518220247-22f5257a): takes bundlePath only and does
634
- * its own safe unpack + parse. Previously coupled to installMeta from the
635
- * pre-check extraction, which is null when operator passes --skip-version-
636
- * check AND --force together; that incorrectly suppressed post-install
637
- * skills routing on the dual-override path. Skills routing is independent
638
- * of the pre-check decisions and should fire whenever an install completes
639
- * successfully with a bundle that declares skills.
640
- *
641
- * Best-effort: returns null on any extract/parse failure (caller has the
642
- * outer try/catch). Single unpack call per invocation; the manifest re-parse
643
- * is cheap vs. the unpack cost which is required either way to access the
644
- * skill source files for routing.
645
- */
646
- async function routeSkillsAfterBootstrap(bundlePath) {
647
- const tmpDir = fs.mkdtempSync(nodePath.join(os.tmpdir(), "bundle-skills-route-"));
648
- try {
649
- await unpack(bundlePath, tmpDir);
650
- const manifestPath = nodePath.join(tmpDir, "bundle.yaml");
651
- if (!fs.existsSync(manifestPath))
652
- return null;
653
- const manifestYaml = fs.readFileSync(manifestPath, "utf-8");
654
- const manifest = parsePodBundleManifest(manifestYaml);
655
- const rawSkills = manifest["skills"];
656
- if (!Array.isArray(rawSkills) || rawSkills.length === 0)
657
- return null;
658
- const declaredSkills = rawSkills.filter((s) => typeof s === "string" && s.length > 0);
659
- if (declaredSkills.length === 0)
660
- return null;
661
- return routeSkills({
662
- bundleRoot: tmpDir,
663
- declaredSkills,
664
- targetSkillsDir: getDefaultOpenRigPath("packages"),
665
- targetPrefixToStrip: "packages/",
666
- }, skillsRouterFsOps());
667
- }
668
- finally {
669
- fs.rmSync(tmpDir, { recursive: true, force: true });
670
- }
671
- }
672
369
  /** Item 4 / slice-05 Checkpoint 5.2: real BundleAuditFsOps backed by node:fs. */
673
370
  function auditFsOps() {
674
371
  return {
@@ -714,6 +411,8 @@ function writeInstallAudit(opts) {
714
411
  record.daemonVersion = getDaemonVersion();
715
412
  if (provenance?.sourceHost)
716
413
  record.sourceHost = provenance.sourceHost;
414
+ if (opts.routingFailures?.length)
415
+ record.routingFailures = opts.routingFailures;
717
416
  writer.append(record);
718
417
  }
719
418
  catch {
@@ -797,6 +496,14 @@ function consumeAuthorBundleYaml(sourceRoot, staging) {
797
496
  const authorYaml = fs.readFileSync(authorBundlePath, "utf-8");
798
497
  const authorParsed = parsePodBundleManifest(authorYaml);
799
498
  const result = {};
499
+ result.preconditions = normalizePreconditionsBlock(authorParsed["preconditions"], reason => {
500
+ (result.warnings ??= []).push(`Ignored author bundle preconditions: ${reason}; the whole block was omitted.`);
501
+ });
502
+ for (const [index, precondition] of (result.preconditions ?? []).entries()) {
503
+ if (precondition.commands?.some(command => /[;|`<>]|&&|\$\(/.test(command))) {
504
+ (result.warnings ??= []).push(`preconditions[${index}].commands contains shell operators; retained as data, but a site may omit setup commands that fail its plain-command rule.`);
505
+ }
506
+ }
800
507
  const vendorFile = (declared, kindLabel) => {
801
508
  if (!isRelativeSafePath(declared))
802
509
  throw new Error(`author bundle ${kindLabel} path '${declared}' is not safe`);
@@ -859,12 +566,16 @@ function consumeAuthorBundleYaml(sourceRoot, staging) {
859
566
  // written as regular files for tar safety
860
567
  fs.cpSync(sourceAbs, targetAbs, { recursive: true, dereference: true });
861
568
  };
862
- // skills[] — file paths
569
+ // A portable skill includes its helpers/references. Retain the legacy
570
+ // single-file payload contract outside the discovered skills/<name> tree.
863
571
  const rawSkills = authorParsed["skills"];
864
572
  if (Array.isArray(rawSkills) && rawSkills.length > 0) {
865
573
  const skills = rawSkills.filter((s) => typeof s === "string" && s.length > 0);
866
- for (const declared of skills)
574
+ for (const declared of skills) {
867
575
  vendorFile(declared, "skill");
576
+ if (/^skills\/[^/]+\/SKILL\.md$/.test(declared))
577
+ vendorDir(nodePath.dirname(declared), "skill");
578
+ }
868
579
  if (skills.length > 0)
869
580
  result.skills = skills;
870
581
  }
@@ -946,6 +657,16 @@ function assertShippableStagingTree(staging) {
946
657
  walk(staging);
947
658
  assertShippableSubstance(sources);
948
659
  }
660
+ /** Describe this artifact; inspecting an older archive never substitutes the current daemon's version. */
661
+ function bundleBuildIdentity(manifest, archiveHash) {
662
+ return {
663
+ source: manifest.provenance?.source ?? null,
664
+ configurationId: manifest.configuration?.id ?? null,
665
+ packageDigest: manifest.integrity ? packageDigest(manifest.integrity.files) : null,
666
+ archiveHash,
667
+ assembler: manifest.assembler ?? null,
668
+ };
669
+ }
949
670
  // POST /api/bundles/create
950
671
  bundleRoutes.post("/create", async (c) => {
951
672
  const { eventBus } = getDeps(c);
@@ -956,9 +677,23 @@ bundleRoutes.post("/create", async (c) => {
956
677
  const outputPath = typeof body["outputPath"] === "string" ? body["outputPath"] : "";
957
678
  const rigRoot = typeof body["rigRoot"] === "string" ? body["rigRoot"] : undefined;
958
679
  const includePackages = Array.isArray(body["includePackages"]) ? body["includePackages"] : undefined;
680
+ // `rig bundle create --context-pack <dir>`: packs to carry from anywhere the author names, by manifest name
681
+ const contextPackDirs = Array.isArray(body["contextPackDirs"])
682
+ ? body["contextPackDirs"].filter((d) => typeof d === "string" && d.length > 0)
683
+ : [];
684
+ // `rig bundle create --project-dir <dir>`: the project this rig works in (project.yaml and its files)
685
+ const projectDir = typeof body["projectDir"] === "string" && body["projectDir"] ? body["projectDir"] : undefined;
686
+ // `rig bundle create --preset/--seat`: the configuration the CLI staged, recorded in the manifest (outside the package digest)
687
+ const rawConfiguration = body["configuration"];
688
+ const configuration = rawConfiguration && typeof rawConfiguration.id === "string"
689
+ ? { id: rawConfiguration.id, ...(typeof rawConfiguration.preset === "string" ? { preset: rawConfiguration.preset } : {}) }
690
+ : undefined;
959
691
  const allowDrift = body["allowDrift"] === true;
960
692
  // Item 1 / slice-05: build provenance from request body + inject daemonVersion server-side
961
- const clientProvenance = provenanceFromRequestBody(body["provenance"]);
693
+ const rawProvenance = body["provenance"];
694
+ if (rawProvenance?.source !== undefined && !normalizeBundleSource(rawProvenance.source))
695
+ return c.json({ error: "Invalid GitHub bundle source identity" }, 400);
696
+ const clientProvenance = provenanceFromRequestBody(rawProvenance);
962
697
  let provenance = clientProvenance
963
698
  ? { ...clientProvenance, daemonVersion: getDaemonVersion() }
964
699
  : undefined;
@@ -1025,6 +760,8 @@ bundleRoutes.post("/create", async (c) => {
1025
760
  // cross-primitive content into staging + carry the fields onto
1026
761
  // the manifest. computeIntegrity below covers the vendored content.
1027
762
  const authorPrimitives = consumeAuthorBundleYaml(effectiveRigRoot, tmpStaging);
763
+ if (authorPrimitives.preconditions)
764
+ result.manifest.preconditions = authorPrimitives.preconditions;
1028
765
  if (authorPrimitives.skills)
1029
766
  result.manifest.skills = authorPrimitives.skills;
1030
767
  if (authorPrimitives.plugins)
@@ -1035,14 +772,29 @@ bundleRoutes.post("/create", async (c) => {
1035
772
  result.manifest.contextPacks = authorPrimitives.contextPacks;
1036
773
  if (authorPrimitives.agentImages)
1037
774
  result.manifest.agentImages = authorPrimitives.agentImages;
775
+ const actualMapping = {};
776
+ for (const pod of RigSpecSchema.normalize(rawParsed).pods) {
777
+ for (const member of pod.members)
778
+ actualMapping[`${pod.id}.${member.id}`] = member.runtime;
779
+ }
780
+ const actualConfigurationId = configurationId(actualMapping);
781
+ if (configuration && configuration.id !== actualConfigurationId)
782
+ return c.json({ error: "Configuration ID does not match the packaged rig spec" }, 400);
783
+ result.manifest.configuration = { id: actualConfigurationId, ...(configuration?.preset ? { preset: configuration.preset } : {}) };
784
+ result.manifest.assembler = { openrigVersion: getDaemonVersion() };
785
+ const carriedPacks = contextPackDirs.map((dir) => vendorContextPackDir(nodePath.resolve(dir), tmpStaging));
786
+ if (carriedPacks.length > 0)
787
+ result.manifest.contextPacks = [...(result.manifest.contextPacks ?? []), ...carriedPacks];
788
+ if (projectDir)
789
+ result.manifest.project = vendorProjectDir(nodePath.resolve(projectDir), tmpStaging);
1038
790
  const integrity = computeIntegrity(tmpStaging, integrityFsOps());
1039
791
  result.manifest.integrity = integrity;
1040
792
  fs.writeFileSync(nodePath.join(tmpStaging, "bundle.yaml"), serializePodBundleManifest(result.manifest), "utf-8");
1041
793
  assertShippableStagingTree(tmpStaging);
1042
794
  const archiveHash = await pack(tmpStaging, nodePath.resolve(outputPath));
1043
795
  eventBus.emit({ type: "bundle.created", bundleName, bundleVersion, archiveHash });
1044
- const warning = [driftWarning, ...(result.warnings ?? [])].filter(Boolean).join("; ");
1045
- return c.json({ bundleName, bundleVersion, archiveHash, schemaVersion: 2, agents: result.manifest.agents.length, ...(warning ? { warning } : {}) }, 201);
796
+ const warning = [driftWarning, ...(result.warnings ?? []), ...(authorPrimitives.warnings ?? [])].filter(Boolean).join("; ");
797
+ return c.json({ ...bundleBuildIdentity(result.manifest, archiveHash), bundleName, bundleVersion, archiveHash, schemaVersion: 2, agents: result.manifest.agents.length, ...(warning ? { warning } : {}) }, 201);
1046
798
  }
1047
799
  finally {
1048
800
  fs.rmSync(tmpStaging, { recursive: true, force: true });
@@ -1050,6 +802,12 @@ bundleRoutes.post("/create", async (c) => {
1050
802
  }
1051
803
  // Legacy bundle creation
1052
804
  // Validated above, before the drift guard ran.
805
+ if (contextPackDirs.length > 0) {
806
+ return c.json({ error: "--context-pack needs a pod-aware rig spec (one with pods:)" }, 400);
807
+ }
808
+ if (projectDir) {
809
+ return c.json({ error: "--project-dir needs a pod-aware rig spec (one with pods:)" }, 400);
810
+ }
1053
811
  const spec = LegacyRigSpecSchema.normalize(rawParsed);
1054
812
  const specDir = nodePath.dirname(nodePath.resolve(specPath));
1055
813
  const allRefs = new Set();
@@ -1089,14 +847,17 @@ bundleRoutes.post("/create", async (c) => {
1089
847
  const manifest = assembler.assemble({
1090
848
  specPath: nodePath.resolve(specPath), packages, outputDir: tmpStaging, bundleName, bundleVersion, provenance, compatibility,
1091
849
  });
850
+ manifest.assembler = { openrigVersion: getDaemonVersion() };
1092
851
  // Item 6 / Checkpoint 7.5 (QA-20260601 A2 repair, legacy path mirror):
1093
852
  // auto-detect author bundle.yaml in source dir; vendor + carry
1094
853
  // cross-primitive fields before integrity. Re-serialize bundle.yaml
1095
854
  // since the assembler already wrote one without these fields.
1096
855
  const legacyAuthorPrimitives = consumeAuthorBundleYaml(specDir, tmpStaging);
1097
856
  const hasLegacyPrimitives = legacyAuthorPrimitives.skills || legacyAuthorPrimitives.plugins ||
1098
- legacyAuthorPrimitives.workflowSpecs || legacyAuthorPrimitives.contextPacks || legacyAuthorPrimitives.agentImages;
1099
- if (hasLegacyPrimitives) {
857
+ legacyAuthorPrimitives.workflowSpecs || legacyAuthorPrimitives.contextPacks || legacyAuthorPrimitives.agentImages || legacyAuthorPrimitives.preconditions;
858
+ if (hasLegacyPrimitives || manifest.assembler) {
859
+ if (legacyAuthorPrimitives.preconditions)
860
+ manifest.preconditions = legacyAuthorPrimitives.preconditions;
1100
861
  if (legacyAuthorPrimitives.skills)
1101
862
  manifest.skills = legacyAuthorPrimitives.skills;
1102
863
  if (legacyAuthorPrimitives.plugins)
@@ -1112,10 +873,12 @@ bundleRoutes.post("/create", async (c) => {
1112
873
  }
1113
874
  const integrity = computeIntegrity(tmpStaging, integrityFsOps());
1114
875
  writeIntegrity(tmpStaging, integrity, integrityFsOps());
876
+ manifest.integrity = integrity;
1115
877
  assertShippableStagingTree(tmpStaging);
1116
878
  const archiveHash = await pack(tmpStaging, nodePath.resolve(outputPath));
1117
879
  eventBus.emit({ type: "bundle.created", bundleName, bundleVersion, archiveHash });
1118
- return c.json({ bundleName, bundleVersion, archiveHash, packages: manifest.packages.length, ...(driftWarning ? { warning: driftWarning } : {}) }, 201);
880
+ const warning = [driftWarning, ...(legacyAuthorPrimitives.warnings ?? [])].filter(Boolean).join("; ");
881
+ return c.json({ ...bundleBuildIdentity(manifest, archiveHash), bundleName, bundleVersion, archiveHash, packages: manifest.packages.length, ...(warning ? { warning } : {}) }, 201);
1119
882
  }
1120
883
  finally {
1121
884
  fs.rmSync(tmpStaging, { recursive: true, force: true });
@@ -1132,39 +895,59 @@ bundleRoutes.post("/inspect", async (c) => {
1132
895
  if (!bundlePath)
1133
896
  return c.json({ error: "bundlePath is required" }, 400);
1134
897
  let digestValid = false;
898
+ let archiveHash = null;
1135
899
  try {
1136
900
  const dr = verifyArchiveDigest(bundlePath);
1137
901
  digestValid = dr.valid;
902
+ archiveHash = dr.actual;
1138
903
  }
1139
904
  catch { /* missing digest = invalid */ }
1140
905
  const tmpDir = fs.mkdtempSync(nodePath.join(os.tmpdir(), "bundle-inspect-"));
1141
906
  try {
1142
- // Extract with safety pre-scan (same as unpack) but without content integrity verification
907
+ // Extract with the SAME shared safety pre-scan that unpack() uses, but without
908
+ // content integrity verification (inspect must be able to REPORT a broken
909
+ // bundle rather than refuse it). One source of truth: collectUnsafeArchiveEntries
910
+ // rejects symlinks/hardlinks, POSIX-absolute and Windows drive-absolute paths,
911
+ // and dot-dot traversal (POSIX or backslash). Previously this route hand-rolled a
912
+ // weaker scan that missed drive-letter and backslash-traversal entries, so an
913
+ // archive unpack() refuses could be reported safe by inspect.
914
+ const unsafeEntries = await collectUnsafeArchiveEntries(bundlePath);
915
+ if (unsafeEntries.length > 0) {
916
+ return c.json({ error: `Unsafe archive entries: ${unsafeEntries.join("; ")}`, digestValid }, 200);
917
+ }
1143
918
  const tar = await import("tar");
1144
- const unsafeEntries = [];
1145
- await tar.list({
919
+ await tar.extract({
1146
920
  file: bundlePath,
1147
- onReadEntry: (entry) => {
1148
- const p = entry.path;
1149
- const t = entry.type;
1150
- if (t === "SymbolicLink" || t === "Link")
1151
- unsafeEntries.push(`${t}: ${p}`);
1152
- if (p.startsWith("/"))
1153
- unsafeEntries.push(`absolute: ${p}`);
1154
- if (p.split("/").some((s) => s === ".."))
1155
- unsafeEntries.push(`traversal: ${p}`);
921
+ cwd: tmpDir,
922
+ // Same defensive filter unpack() applies: even if the pre-scan above were
923
+ // bypassed, no unsafe entry is written.
924
+ filter: (p, entry) => {
925
+ if ("isSymbolicLink" in entry && typeof entry.isSymbolicLink === "function" && entry.isSymbolicLink())
926
+ return false;
927
+ const type = "type" in entry ? entry.type : undefined;
928
+ return unsafeArchiveEntryReason(p, type) === null;
1156
929
  },
1157
930
  });
1158
- if (unsafeEntries.length > 0) {
1159
- return c.json({ error: `Unsafe archive entries: ${unsafeEntries.join("; ")}`, digestValid }, 200);
1160
- }
1161
- await tar.extract({ file: bundlePath, cwd: tmpDir });
1162
931
  const manifestPath = nodePath.join(tmpDir, "bundle.yaml");
1163
932
  if (!fs.existsSync(manifestPath)) {
1164
933
  return c.json({ error: "Bundle missing bundle.yaml", digestValid }, 200);
1165
934
  }
1166
935
  const manifestYaml = fs.readFileSync(manifestPath, "utf-8");
1167
936
  const rawParsed = parsePodBundleManifest(manifestYaml);
937
+ const describeBehaviour = (identity, filesVerified) => {
938
+ const generator = { openrigVersion: getDaemonVersion() };
939
+ const source = identity.source ? { ...identity.source } : null;
940
+ try {
941
+ return inspectBundleBehaviour(tmpDir, { manifest: rawParsed, ...identity, source, generator, digestValid, filesVerified });
942
+ }
943
+ catch {
944
+ return {
945
+ schema: "openrig.bundle-behaviour/v1", state: "not_generated",
946
+ identity: { source, configurationId: identity.configurationId, packageDigest: identity.packageDigest, assembler: identity.assembler, generator, integrity: { digestValid, filesVerified } },
947
+ reason: "The archive's behaviour could not be described.", localInspectCommand: "rig bundle inspect <archive> --json",
948
+ };
949
+ }
950
+ };
1168
951
  // Detect v2 (pod-aware) vs v1 (legacy)
1169
952
  if (rawParsed && rawParsed["schema_version"] === 2) {
1170
953
  const validation = validatePodBundleManifest(rawParsed);
@@ -1194,10 +977,15 @@ bundleRoutes.post("/inspect", async (c) => {
1194
977
  // (v1 path normalizes through normalizeLegacyBundleManifest below).
1195
978
  // Field is optional; undefined when bundle has no provenance.
1196
979
  provenance: normalizeProvenanceBlock(rawParsed["provenance"]),
980
+ configuration: typeof rawParsed["configuration"]?.id === "string"
981
+ ? rawParsed["configuration"] : undefined,
982
+ assembler: typeof rawParsed["assembler"]?.openrigVersion === "string"
983
+ ? rawParsed["assembler"] : undefined,
1197
984
  // Item 2 / slice-05: surface compatibility normalized to camelCase
1198
985
  // (same single-contract reason as provenance above). v1 already
1199
986
  // surfaces via the normalizer at the end of this handler.
1200
987
  compatibility: normalizeCompatibilityBlock(rawParsed["compatibility"]),
988
+ preconditions: normalizePreconditionsBlock(rawParsed["preconditions"]),
1201
989
  // Item 6 / Checkpoint 7.5 / QA-20260601 C1 repair: surface the 5
1202
990
  // cross-primitive blocks normalized to camelCase so /inspect's
1203
991
  // contract carries the same shape v1's normalizer already
@@ -1218,6 +1006,9 @@ bundleRoutes.post("/inspect", async (c) => {
1218
1006
  agentImages: Array.isArray(rawParsed["agent_images"])
1219
1007
  ? rawParsed["agent_images"].filter((s) => typeof s === "string")
1220
1008
  : undefined,
1009
+ project: rawParsed["project"] && typeof rawParsed["project"] === "object" && !Array.isArray(rawParsed["project"])
1010
+ ? rawParsed["project"]
1011
+ : undefined,
1221
1012
  };
1222
1013
  const integrityCompat = integritySection ? {
1223
1014
  schemaVersion: 2,
@@ -1231,13 +1022,17 @@ bundleRoutes.post("/inspect", async (c) => {
1231
1022
  const integrityResult = integrityCompat
1232
1023
  ? verifyIntegrity(tmpDir, integrityCompat, integrityFsOps())
1233
1024
  : { passed: false, mismatches: [], missing: [], extra: [], errors: ["no integrity section"] };
1234
- return c.json({ manifest: podManifest, digestValid, integrityResult }, 200);
1025
+ const identity = bundleBuildIdentity(podManifest, archiveHash);
1026
+ const behaviour = describeBehaviour(identity, integrityResult.passed);
1027
+ return c.json({ ...identity, manifest: podManifest, digestValid, integrityResult, behaviour }, 200);
1235
1028
  }
1236
1029
  const manifest = normalizeBundleManifest(parseBundleManifest(manifestYaml));
1237
1030
  const integrityResult = manifest.integrity
1238
1031
  ? verifyIntegrity(tmpDir, manifest, integrityFsOps())
1239
1032
  : { passed: false, mismatches: [], missing: [], extra: [], errors: ["no integrity section"] };
1240
- return c.json({ manifest, digestValid, integrityResult }, 200);
1033
+ const identity = bundleBuildIdentity(manifest, archiveHash);
1034
+ const behaviour = describeBehaviour(identity, integrityResult.passed);
1035
+ return c.json({ ...identity, manifest, digestValid, integrityResult, behaviour }, 200);
1241
1036
  }
1242
1037
  catch (err) {
1243
1038
  return c.json({ error: err.message }, 500);
@@ -1271,7 +1066,9 @@ bundleRoutes.post("/install", async (c) => {
1271
1066
  const bundlePath = typeof body["bundlePath"] === "string" ? body["bundlePath"] : "";
1272
1067
  const plan = body["plan"] === true;
1273
1068
  const autoApprove = body["autoApprove"] === true;
1069
+ const nonInterruptive = typeof body["nonInterruptive"] === "boolean" ? body["nonInterruptive"] : undefined;
1274
1070
  const targetRoot = typeof body["targetRoot"] === "string" ? body["targetRoot"] : undefined;
1071
+ const cwdOverride = typeof body["cwdOverride"] === "string" ? body["cwdOverride"] : undefined;
1275
1072
  // Item 2 / slice-05 Checkpoint 3.3: install-time compatibility check inputs
1276
1073
  const skipVersionCheck = body["skipVersionCheck"] === true;
1277
1074
  const clientCliVersion = typeof body["cliVersion"] === "string" ? body["cliVersion"] : undefined;
@@ -1287,30 +1084,26 @@ bundleRoutes.post("/install", async (c) => {
1287
1084
  return c.json({ error: "Bundle install already in progress", code: "conflict" }, 409);
1288
1085
  }
1289
1086
  try {
1290
- // Item 2 / slice-05 Checkpoint 3.3: install-time compatibility check
1291
- // Runs AFTER the lock + BEFORE bootstrap delegation. Mismatch returns a
1292
- // 3-part error and exits the lifecycle (lock releases via the outer
1293
- // finally). Operator override via --skip-version-check (request body
1294
- // skipVersionCheck=true).
1295
1087
  // Item 2 + Item 3 / slice-05: single safe extract pass yields both the
1296
1088
  // bundle manifest (for compat check) and the rig name (for conflict check).
1297
- // Caller can skip the compat check via skipVersionCheck; the conflict check
1298
- // also runs from this same extract pass unless --force bypasses it.
1299
- let installMeta = null;
1300
- if (!skipVersionCheck || !force) {
1301
- try {
1302
- installMeta = await extractInstallTimeMetadata(bundlePath);
1303
- }
1304
- catch (err) {
1305
- return c.json({
1306
- error: "Bundle install pre-check could not run (extraction failed)",
1307
- detail: err.message,
1308
- resolutions: [
1309
- "confirm the bundle path is correct and the archive is readable",
1310
- "pass --skip-version-check and --force to bypass both pre-checks (NOT recommended unless intentional)",
1311
- ],
1312
- }, 400);
1313
- }
1089
+ // This pass also runs the manifest SAFETY validation — the first place
1090
+ // rig_spec/project fields are validated on the install path; the bundle
1091
+ // source resolver validates them again later — so it runs unconditionally:
1092
+ // --skip-version-check and --force override the Item-2 compat check and
1093
+ // the Item-3 conflict check, not the safety validation.
1094
+ let installMeta;
1095
+ try {
1096
+ installMeta = await extractInstallTimeMetadata(bundlePath);
1097
+ }
1098
+ catch (err) {
1099
+ return c.json({
1100
+ error: "Bundle install pre-check could not run (extraction failed)",
1101
+ detail: err.message,
1102
+ resolutions: [
1103
+ "confirm the bundle path is correct and the archive is readable",
1104
+ "--skip-version-check and --force skip the compatibility and conflict checks; the manifest safety check always runs",
1105
+ ],
1106
+ }, 400);
1314
1107
  }
1315
1108
  if (!skipVersionCheck && installMeta) {
1316
1109
  const compatibility = normalizeCompatibilityBlock(installMeta.bundleManifest["compatibility"]);
@@ -1334,7 +1127,12 @@ bundleRoutes.post("/install", async (c) => {
1334
1127
  // The check fails CLOSED on extraction failure (handled above) and
1335
1128
  // fail-OPEN on missing rig name in the bundle (no rig name to compare).
1336
1129
  if (!force && installMeta && rigRepo) {
1337
- const runningRigs = rigRepo.listRigs().map((r) => ({ rigId: r.id, name: r.name }));
1130
+ const context = bundleInstallContext(rigRepo.db, installMeta.rigName ?? "", {
1131
+ name: String(installMeta.bundleManifest.name ?? installMeta.rigName ?? ""),
1132
+ version: typeof installMeta.bundleManifest.version === "string" ? installMeta.bundleManifest.version : null,
1133
+ source: bundlePath,
1134
+ });
1135
+ const runningRigs = context.existing.filter(rig => rig.state === "running");
1338
1136
  const report = detectBundleConflicts({
1339
1137
  bundleRigName: installMeta.rigName ?? "",
1340
1138
  runningRigs,
@@ -1342,11 +1140,11 @@ bundleRoutes.post("/install", async (c) => {
1342
1140
  if (report.hasConflicts) {
1343
1141
  return c.json({
1344
1142
  error: "Bundle install conflict check failed",
1143
+ status: "not_attempted",
1144
+ detail: bundleInstallContextLines(context).slice(0, context.existing.length + 1).join("\n"),
1145
+ bundleInstall: context,
1345
1146
  conflicts: report.conflicts,
1346
- resolutions: [
1347
- "stop the conflicting running rig and re-attempt install",
1348
- "use --force to bypass for an operator-explicit override (NOT recommended for routine use; conflicts may produce partial install state)",
1349
- ],
1147
+ resolutions: context.resolutions,
1350
1148
  }, 400);
1351
1149
  }
1352
1150
  }
@@ -1354,7 +1152,7 @@ bundleRoutes.post("/install", async (c) => {
1354
1152
  // Plan mode: no run lifecycle
1355
1153
  try {
1356
1154
  const result = await bootstrapOrchestrator.bootstrap({
1357
- mode: "plan", sourceRef: bundlePath, sourceKind: "rig_bundle",
1155
+ mode: "plan", sourceRef: bundlePath, sourceKind: "rig_bundle", cwdOverride,
1358
1156
  });
1359
1157
  if (result.status === "planned") {
1360
1158
  eventBus.emit({ type: "bootstrap.planned", runId: result.runId, sourceRef: bundlePath, stages: result.stages.length });
@@ -1362,18 +1160,8 @@ bundleRoutes.post("/install", async (c) => {
1362
1160
  }
1363
1161
  // Plan failed — structured mapping (same as bootstrap plan route)
1364
1162
  eventBus.emit({ type: "bootstrap.failed", runId: result.runId, sourceRef: bundlePath, error: result.errors[0] ?? "plan failed" });
1365
- const failedStage = result.stages.find((s) => s.status === "failed" || s.status === "blocked");
1366
- let httpStatus = 500;
1367
- if (failedStage) {
1368
- if (failedStage.status === "blocked")
1369
- httpStatus = 409;
1370
- else if (failedStage.stage === "resolve_spec") {
1371
- const detail = failedStage.detail;
1372
- if (detail?.code === "file_not_found" || detail?.code === "parse_error" || detail?.code === "validation_failed" || detail?.code === "bundle_error")
1373
- httpStatus = 400;
1374
- }
1375
- }
1376
- return c.json(result, httpStatus);
1163
+ const failure = bootstrapFailureResponse(result, "plan");
1164
+ return c.json(failure.body, failure.status);
1377
1165
  }
1378
1166
  catch (err) {
1379
1167
  return c.json({ error: err.message }, 500);
@@ -1386,87 +1174,47 @@ bundleRoutes.post("/install", async (c) => {
1386
1174
  try {
1387
1175
  const result = await bootstrapOrchestrator.bootstrap({
1388
1176
  mode: "apply", sourceRef: bundlePath, sourceKind: "rig_bundle",
1389
- autoApprove, targetRoot, runId: run.id,
1177
+ autoApprove, nonInterruptive, targetRoot, cwdOverride, runId: run.id,
1390
1178
  });
1391
- if (result.status === "completed") {
1392
- eventBus.emit({ type: "bootstrap.completed", runId: result.runId, rigId: result.rigId, sourceRef: bundlePath });
1393
- writeInstallAudit({
1394
- bundlePath, outcome: "success", targetRigId: result.rigId,
1395
- targetRigName: installMeta?.rigName, cliVersion: clientCliVersion,
1396
- bundleManifest: installMeta?.bundleManifest,
1397
- });
1398
- // Item 6 / Checkpoint 7.3: route any declared skills after successful
1399
- // install. Best-effort: a routing failure does NOT fail the install
1400
- // response (the install already succeeded; skills routing is a side-
1401
- // channel post-install step). Routing result included in response body
1402
- // so operators see what landed.
1403
- let skillsRouting = null;
1404
- let pluginsRouting = null;
1405
- let workflowSpecsRouting = null;
1406
- let contextPacksRouting = null;
1407
- let agentImagesRouting = null;
1408
- try {
1409
- skillsRouting = await routeSkillsAfterBootstrap(bundlePath);
1410
- }
1411
- catch {
1412
- // Side-channel failure; install already succeeded
1413
- }
1414
- try {
1415
- pluginsRouting = await routePluginsAfterBootstrap(bundlePath);
1416
- }
1417
- catch {
1418
- // Side-channel failure; install already succeeded
1419
- }
1420
- try {
1421
- workflowSpecsRouting = await routeWorkflowSpecsAfterBootstrap(bundlePath);
1422
- }
1423
- catch {
1424
- // Side-channel failure; install already succeeded
1179
+ if (result.status === "completed" || result.status === "partial") {
1180
+ // A pod-aware (v2) bundle routes its declared skills, plugins, workflow
1181
+ // specs, context packs and agent images in bootstrap's pre-launch hook,
1182
+ // before any seat launches, and reports the outcome on the result. A
1183
+ // legacy v1 bundle has no hook, so it keeps routing after a completed
1184
+ // install. Routing never fails the install; failures are reported in
1185
+ // routingFailures and the audit.
1186
+ const { bundleRouting, ...bootstrapResult } = result;
1187
+ const routing = bundleRouting
1188
+ ?? (result.status === "completed" ? await bootstrapOrchestrator.routeBundleContents(bundlePath) : undefined);
1189
+ // The hook already put its failures in warnings; the legacy fallback adds its own here.
1190
+ const warnings = bundleRouting ? (result.warnings ?? []) : [...(result.warnings ?? []), ...routingFailureWarnings(routing)];
1191
+ const responseBody = routing ? { ...bootstrapResult, ...routing, warnings } : { ...bootstrapResult, warnings };
1192
+ if (result.status === "completed") {
1193
+ eventBus.emit({ type: "bootstrap.completed", runId: result.runId, rigId: result.rigId, sourceRef: bundlePath });
1425
1194
  }
1426
- try {
1427
- contextPacksRouting = await routeContextPacksAfterBootstrap(bundlePath);
1195
+ else {
1196
+ const ok = result.stages.filter((s) => s.status === "ok").length;
1197
+ const fail = result.stages.filter((s) => s.status === "failed" || s.status === "blocked").length;
1198
+ eventBus.emit({ type: "bootstrap.partial", runId: result.runId, sourceRef: bundlePath, rigId: result.rigId, completed: ok, failed: fail });
1428
1199
  }
1429
- catch {
1430
- // Side-channel failure; install already succeeded
1431
- }
1432
- try {
1433
- agentImagesRouting = await routeAgentImagesAfterBootstrap(bundlePath);
1434
- }
1435
- catch {
1436
- // Side-channel failure; install already succeeded
1437
- }
1438
- const extras = {};
1439
- if (skillsRouting)
1440
- extras.skillsRouting = skillsRouting;
1441
- if (pluginsRouting)
1442
- extras.pluginsRouting = pluginsRouting;
1443
- if (workflowSpecsRouting)
1444
- extras.workflowSpecsRouting = workflowSpecsRouting;
1445
- if (contextPacksRouting)
1446
- extras.contextPacksRouting = contextPacksRouting;
1447
- if (agentImagesRouting)
1448
- extras.agentImagesRouting = agentImagesRouting;
1449
- return c.json(Object.keys(extras).length > 0 ? { ...result, ...extras } : result, 201);
1450
- }
1451
- if (result.status === "partial") {
1452
- const ok = result.stages.filter((s) => s.status === "ok").length;
1453
- const fail = result.stages.filter((s) => s.status === "failed" || s.status === "blocked").length;
1454
- eventBus.emit({ type: "bootstrap.partial", runId: result.runId, sourceRef: bundlePath, rigId: result.rigId, completed: ok, failed: fail });
1455
1200
  writeInstallAudit({
1456
- bundlePath, outcome: "partial", targetRigId: result.rigId,
1201
+ bundlePath, outcome: result.status === "completed" ? "success" : "partial", targetRigId: result.rigId,
1457
1202
  targetRigName: installMeta?.rigName, cliVersion: clientCliVersion,
1458
1203
  bundleManifest: installMeta?.bundleManifest,
1204
+ routingFailures: routing?.routingFailures,
1459
1205
  });
1460
- return c.json(result, 200);
1206
+ return c.json(responseBody, result.status === "completed" ? 201 : 200);
1461
1207
  }
1462
1208
  eventBus.emit({ type: "bootstrap.failed", runId: result.runId, sourceRef: bundlePath, error: result.errors[0] ?? "failed" });
1209
+ // The pre-launch hook may have routed contents before a later failure; the result carries what it did.
1463
1210
  writeInstallAudit({
1464
1211
  bundlePath, outcome: "failed",
1465
1212
  targetRigName: installMeta?.rigName, cliVersion: clientCliVersion,
1466
1213
  bundleManifest: installMeta?.bundleManifest,
1214
+ routingFailures: result.bundleRouting?.routingFailures,
1467
1215
  });
1468
- const hasBlocked = result.stages.some((s) => s.status === "blocked");
1469
- return c.json(result, hasBlocked ? 409 : 500);
1216
+ const failure = bootstrapFailureResponse(result, "apply");
1217
+ return c.json(failure.body, failure.status);
1470
1218
  }
1471
1219
  catch (err) {
1472
1220
  bootstrapRepo.updateRunStatus(run.id, "failed");