@openrig/cli 0.2.0 → 0.3.1

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 (635) hide show
  1. package/daemon/assets/plugins/openrig-core/.claude-plugin/plugin.json +15 -0
  2. package/daemon/assets/plugins/openrig-core/.codex-plugin/plugin.json +24 -0
  3. package/daemon/assets/plugins/openrig-core/LICENSE +200 -0
  4. package/daemon/assets/plugins/openrig-core/README.md +42 -0
  5. package/daemon/assets/plugins/openrig-core/hooks/claude.json +78 -0
  6. package/daemon/assets/plugins/openrig-core/hooks/codex.json +37 -0
  7. package/daemon/assets/{openrig-activity-hook-relay.cjs → plugins/openrig-core/hooks/scripts/activity-relay.cjs} +12 -0
  8. package/daemon/assets/plugins/openrig-core/hooks/scripts/compaction-restore-bridge.cjs +172 -0
  9. package/daemon/assets/plugins/openrig-core/skills/agent-startup-and-context-ingestion/SKILL.md +104 -0
  10. package/daemon/assets/plugins/openrig-core/skills/claude-compaction-restore/SKILL.md +131 -0
  11. package/daemon/assets/plugins/openrig-core/skills/claude-compaction-restore/scripts/precompact-hook.mjs +174 -0
  12. package/daemon/assets/plugins/openrig-core/skills/claude-compaction-restore/scripts/restore-from-jsonl.mjs +433 -0
  13. package/daemon/assets/plugins/openrig-core/skills/claude-compaction-restore/templates/compact-instruction.md +1 -0
  14. package/daemon/assets/plugins/openrig-core/skills/claude-compaction-restore/templates/post-compact-restore-instruction.md +1 -0
  15. package/daemon/assets/plugins/openrig-core/skills/forming-an-openrig-mental-model/SKILL.md +305 -0
  16. package/daemon/{specs/agents/shared/skills/rig-architect → assets/plugins/openrig-core/skills/openrig-architect}/SKILL.md +38 -19
  17. package/daemon/assets/plugins/openrig-core/skills/openrig-operator/SKILL.md +222 -0
  18. package/daemon/assets/plugins/openrig-core/skills/openrig-user/SKILL.md +597 -0
  19. package/daemon/assets/plugins/openrig-core/skills/queue-handoff/SKILL.md +122 -0
  20. package/daemon/assets/plugins/openrig-core/skills/seat-continuity-and-handover/SKILL.md +137 -0
  21. package/daemon/assets/vm-preview-fixtures/README.md +48 -0
  22. package/daemon/assets/vm-preview-fixtures/workflows/sample-basic-loop.yaml +79 -0
  23. package/daemon/dist/adapters/claude-code-adapter.d.ts +11 -3
  24. package/daemon/dist/adapters/claude-code-adapter.d.ts.map +1 -1
  25. package/daemon/dist/adapters/claude-code-adapter.js +58 -60
  26. package/daemon/dist/adapters/claude-code-adapter.js.map +1 -1
  27. package/daemon/dist/adapters/cmux-transport.d.ts.map +1 -1
  28. package/daemon/dist/adapters/cmux-transport.js +81 -2
  29. package/daemon/dist/adapters/cmux-transport.js.map +1 -1
  30. package/daemon/dist/adapters/cmux.d.ts +4 -0
  31. package/daemon/dist/adapters/cmux.d.ts.map +1 -1
  32. package/daemon/dist/adapters/cmux.js +87 -0
  33. package/daemon/dist/adapters/cmux.js.map +1 -1
  34. package/daemon/dist/adapters/codex-runtime-adapter.d.ts +14 -3
  35. package/daemon/dist/adapters/codex-runtime-adapter.d.ts.map +1 -1
  36. package/daemon/dist/adapters/codex-runtime-adapter.js +43 -57
  37. package/daemon/dist/adapters/codex-runtime-adapter.js.map +1 -1
  38. package/daemon/dist/builtins/workflow-specs/basic-loop.yaml +76 -0
  39. package/daemon/dist/builtins/workflow-specs/conveyor.yaml +80 -0
  40. package/daemon/dist/db/migrations/026_inbox_entries.d.ts +1 -1
  41. package/daemon/dist/db/migrations/026_inbox_entries.js +1 -1
  42. package/daemon/dist/db/migrations/029_classifier_leases.d.ts +1 -1
  43. package/daemon/dist/db/migrations/029_classifier_leases.js +1 -1
  44. package/daemon/dist/db/migrations/037_mission_control_actions.d.ts +51 -0
  45. package/daemon/dist/db/migrations/037_mission_control_actions.d.ts.map +1 -0
  46. package/daemon/dist/db/migrations/037_mission_control_actions.js +74 -0
  47. package/daemon/dist/db/migrations/037_mission_control_actions.js.map +1 -0
  48. package/daemon/dist/db/migrations/038_workspace_primitive.d.ts +16 -0
  49. package/daemon/dist/db/migrations/038_workspace_primitive.d.ts.map +1 -0
  50. package/daemon/dist/db/migrations/038_workspace_primitive.js +20 -0
  51. package/daemon/dist/db/migrations/038_workspace_primitive.js.map +1 -0
  52. package/daemon/dist/db/migrations/039_queue_target_repo.d.ts +16 -0
  53. package/daemon/dist/db/migrations/039_queue_target_repo.d.ts.map +1 -0
  54. package/daemon/dist/db/migrations/039_queue_target_repo.js +21 -0
  55. package/daemon/dist/db/migrations/039_queue_target_repo.js.map +1 -0
  56. package/daemon/dist/db/migrations/040_workflow_specs_diagnostic.d.ts +32 -0
  57. package/daemon/dist/db/migrations/040_workflow_specs_diagnostic.d.ts.map +1 -0
  58. package/daemon/dist/db/migrations/040_workflow_specs_diagnostic.js +37 -0
  59. package/daemon/dist/db/migrations/040_workflow_specs_diagnostic.js.map +1 -0
  60. package/daemon/dist/domain/active-lens-store.d.ts +23 -0
  61. package/daemon/dist/domain/active-lens-store.d.ts.map +1 -0
  62. package/daemon/dist/domain/active-lens-store.js +87 -0
  63. package/daemon/dist/domain/active-lens-store.js.map +1 -0
  64. package/daemon/dist/domain/agent-images/agent-image-library-service.d.ts +68 -0
  65. package/daemon/dist/domain/agent-images/agent-image-library-service.d.ts.map +1 -0
  66. package/daemon/dist/domain/agent-images/agent-image-library-service.js +339 -0
  67. package/daemon/dist/domain/agent-images/agent-image-library-service.js.map +1 -0
  68. package/daemon/dist/domain/agent-images/agent-image-types.d.ts +113 -0
  69. package/daemon/dist/domain/agent-images/agent-image-types.d.ts.map +1 -0
  70. package/daemon/dist/domain/agent-images/agent-image-types.js +24 -0
  71. package/daemon/dist/domain/agent-images/agent-image-types.js.map +1 -0
  72. package/daemon/dist/domain/agent-images/evidence-guard.d.ts +26 -0
  73. package/daemon/dist/domain/agent-images/evidence-guard.d.ts.map +1 -0
  74. package/daemon/dist/domain/agent-images/evidence-guard.js +185 -0
  75. package/daemon/dist/domain/agent-images/evidence-guard.js.map +1 -0
  76. package/daemon/dist/domain/agent-images/manifest-parser.d.ts +3 -0
  77. package/daemon/dist/domain/agent-images/manifest-parser.d.ts.map +1 -0
  78. package/daemon/dist/domain/agent-images/manifest-parser.js +114 -0
  79. package/daemon/dist/domain/agent-images/manifest-parser.js.map +1 -0
  80. package/daemon/dist/domain/agent-images/resume-token-discovery.d.ts +28 -0
  81. package/daemon/dist/domain/agent-images/resume-token-discovery.d.ts.map +1 -0
  82. package/daemon/dist/domain/agent-images/resume-token-discovery.js +83 -0
  83. package/daemon/dist/domain/agent-images/resume-token-discovery.js.map +1 -0
  84. package/daemon/dist/domain/agent-images/snapshot-capturer.d.ts +36 -0
  85. package/daemon/dist/domain/agent-images/snapshot-capturer.d.ts.map +1 -0
  86. package/daemon/dist/domain/agent-images/snapshot-capturer.js +58 -0
  87. package/daemon/dist/domain/agent-images/snapshot-capturer.js.map +1 -0
  88. package/daemon/dist/domain/agent-manifest.d.ts.map +1 -1
  89. package/daemon/dist/domain/agent-manifest.js +116 -37
  90. package/daemon/dist/domain/agent-manifest.js.map +1 -1
  91. package/daemon/dist/domain/agent-resolver.js +1 -1
  92. package/daemon/dist/domain/agent-resolver.js.map +1 -1
  93. package/daemon/dist/domain/agent-starter-resolver.d.ts +10 -16
  94. package/daemon/dist/domain/agent-starter-resolver.d.ts.map +1 -1
  95. package/daemon/dist/domain/agent-starter-resolver.js +11 -13
  96. package/daemon/dist/domain/agent-starter-resolver.js.map +1 -1
  97. package/daemon/dist/domain/classifier-lease-manager.d.ts +1 -1
  98. package/daemon/dist/domain/classifier-lease-manager.js +1 -1
  99. package/daemon/dist/domain/claude-compaction-enforcer.d.ts +81 -0
  100. package/daemon/dist/domain/claude-compaction-enforcer.d.ts.map +1 -0
  101. package/daemon/dist/domain/claude-compaction-enforcer.js +242 -0
  102. package/daemon/dist/domain/claude-compaction-enforcer.js.map +1 -0
  103. package/daemon/dist/domain/cmux-layout-service.d.ts +41 -0
  104. package/daemon/dist/domain/cmux-layout-service.d.ts.map +1 -0
  105. package/daemon/dist/domain/cmux-layout-service.js +184 -0
  106. package/daemon/dist/domain/cmux-layout-service.js.map +1 -0
  107. package/daemon/dist/domain/conflict-detector.d.ts.map +1 -1
  108. package/daemon/dist/domain/conflict-detector.js +6 -3
  109. package/daemon/dist/domain/conflict-detector.js.map +1 -1
  110. package/daemon/dist/domain/context-monitor.d.ts +20 -5
  111. package/daemon/dist/domain/context-monitor.d.ts.map +1 -1
  112. package/daemon/dist/domain/context-monitor.js +63 -13
  113. package/daemon/dist/domain/context-monitor.js.map +1 -1
  114. package/daemon/dist/domain/context-packs/bundle-assembler.d.ts +49 -0
  115. package/daemon/dist/domain/context-packs/bundle-assembler.d.ts.map +1 -0
  116. package/daemon/dist/domain/context-packs/bundle-assembler.js +81 -0
  117. package/daemon/dist/domain/context-packs/bundle-assembler.js.map +1 -0
  118. package/daemon/dist/domain/context-packs/context-pack-library-service.d.ts +41 -0
  119. package/daemon/dist/domain/context-packs/context-pack-library-service.d.ts.map +1 -0
  120. package/daemon/dist/domain/context-packs/context-pack-library-service.js +148 -0
  121. package/daemon/dist/domain/context-packs/context-pack-library-service.js.map +1 -0
  122. package/daemon/dist/domain/context-packs/context-pack-types.d.ts +64 -0
  123. package/daemon/dist/domain/context-packs/context-pack-types.d.ts.map +1 -0
  124. package/daemon/dist/domain/context-packs/context-pack-types.js +22 -0
  125. package/daemon/dist/domain/context-packs/context-pack-types.js.map +1 -0
  126. package/daemon/dist/domain/context-packs/manifest-parser.d.ts +3 -0
  127. package/daemon/dist/domain/context-packs/manifest-parser.d.ts.map +1 -0
  128. package/daemon/dist/domain/context-packs/manifest-parser.js +74 -0
  129. package/daemon/dist/domain/context-packs/manifest-parser.js.map +1 -0
  130. package/daemon/dist/domain/context-usage-store.d.ts +14 -1
  131. package/daemon/dist/domain/context-usage-store.d.ts.map +1 -1
  132. package/daemon/dist/domain/context-usage-store.js +156 -1
  133. package/daemon/dist/domain/context-usage-store.js.map +1 -1
  134. package/daemon/dist/domain/files/file-write-service.d.ts +61 -0
  135. package/daemon/dist/domain/files/file-write-service.d.ts.map +1 -0
  136. package/daemon/dist/domain/files/file-write-service.js +180 -0
  137. package/daemon/dist/domain/files/file-write-service.js.map +1 -0
  138. package/daemon/dist/domain/files/path-safety.d.ts +47 -0
  139. package/daemon/dist/domain/files/path-safety.d.ts.map +1 -0
  140. package/daemon/dist/domain/files/path-safety.js +176 -0
  141. package/daemon/dist/domain/files/path-safety.js.map +1 -0
  142. package/daemon/dist/domain/graph-projection.d.ts +14 -1
  143. package/daemon/dist/domain/graph-projection.d.ts.map +1 -1
  144. package/daemon/dist/domain/graph-projection.js +8 -0
  145. package/daemon/dist/domain/graph-projection.js.map +1 -1
  146. package/daemon/dist/domain/install-engine.d.ts.map +1 -1
  147. package/daemon/dist/domain/install-engine.js +22 -6
  148. package/daemon/dist/domain/install-engine.js.map +1 -1
  149. package/daemon/dist/domain/install-verifier.d.ts.map +1 -1
  150. package/daemon/dist/domain/install-verifier.js +10 -5
  151. package/daemon/dist/domain/install-verifier.js.map +1 -1
  152. package/daemon/dist/domain/kernel-boot-tracker.d.ts +74 -0
  153. package/daemon/dist/domain/kernel-boot-tracker.d.ts.map +1 -0
  154. package/daemon/dist/domain/kernel-boot-tracker.js +213 -0
  155. package/daemon/dist/domain/kernel-boot-tracker.js.map +1 -0
  156. package/daemon/dist/domain/kernel-boot.d.ts +50 -0
  157. package/daemon/dist/domain/kernel-boot.d.ts.map +1 -0
  158. package/daemon/dist/domain/kernel-boot.js +147 -0
  159. package/daemon/dist/domain/kernel-boot.js.map +1 -0
  160. package/daemon/dist/domain/managed-blocks.d.ts.map +1 -1
  161. package/daemon/dist/domain/managed-blocks.js +22 -3
  162. package/daemon/dist/domain/managed-blocks.js.map +1 -1
  163. package/daemon/dist/domain/mission-control/audit-browse.d.ts +26 -0
  164. package/daemon/dist/domain/mission-control/audit-browse.d.ts.map +1 -0
  165. package/daemon/dist/domain/mission-control/audit-browse.js +101 -0
  166. package/daemon/dist/domain/mission-control/audit-browse.js.map +1 -0
  167. package/daemon/dist/domain/mission-control/mission-control-action-log.d.ts +51 -0
  168. package/daemon/dist/domain/mission-control/mission-control-action-log.d.ts.map +1 -0
  169. package/daemon/dist/domain/mission-control/mission-control-action-log.js +124 -0
  170. package/daemon/dist/domain/mission-control/mission-control-action-log.js.map +1 -0
  171. package/daemon/dist/domain/mission-control/mission-control-fleet-cli-capability.d.ts +131 -0
  172. package/daemon/dist/domain/mission-control/mission-control-fleet-cli-capability.d.ts.map +1 -0
  173. package/daemon/dist/domain/mission-control/mission-control-fleet-cli-capability.js +232 -0
  174. package/daemon/dist/domain/mission-control/mission-control-fleet-cli-capability.js.map +1 -0
  175. package/daemon/dist/domain/mission-control/mission-control-read-layer.d.ts +90 -0
  176. package/daemon/dist/domain/mission-control/mission-control-read-layer.d.ts.map +1 -0
  177. package/daemon/dist/domain/mission-control/mission-control-read-layer.js +279 -0
  178. package/daemon/dist/domain/mission-control/mission-control-read-layer.js.map +1 -0
  179. package/daemon/dist/domain/mission-control/mission-control-write-contract.d.ts +69 -0
  180. package/daemon/dist/domain/mission-control/mission-control-write-contract.d.ts.map +1 -0
  181. package/daemon/dist/domain/mission-control/mission-control-write-contract.js +302 -0
  182. package/daemon/dist/domain/mission-control/mission-control-write-contract.js.map +1 -0
  183. package/daemon/dist/domain/mission-control/notification-adapter-ntfy.d.ts +18 -0
  184. package/daemon/dist/domain/mission-control/notification-adapter-ntfy.d.ts.map +1 -0
  185. package/daemon/dist/domain/mission-control/notification-adapter-ntfy.js +48 -0
  186. package/daemon/dist/domain/mission-control/notification-adapter-ntfy.js.map +1 -0
  187. package/daemon/dist/domain/mission-control/notification-adapter-types.d.ts +25 -0
  188. package/daemon/dist/domain/mission-control/notification-adapter-types.d.ts.map +1 -0
  189. package/daemon/dist/domain/mission-control/notification-adapter-types.js +7 -0
  190. package/daemon/dist/domain/mission-control/notification-adapter-types.js.map +1 -0
  191. package/daemon/dist/domain/mission-control/notification-adapter-webhook.d.ts +27 -0
  192. package/daemon/dist/domain/mission-control/notification-adapter-webhook.d.ts.map +1 -0
  193. package/daemon/dist/domain/mission-control/notification-adapter-webhook.js +47 -0
  194. package/daemon/dist/domain/mission-control/notification-adapter-webhook.js.map +1 -0
  195. package/daemon/dist/domain/mission-control/notification-dispatcher.d.ts +53 -0
  196. package/daemon/dist/domain/mission-control/notification-dispatcher.d.ts.map +1 -0
  197. package/daemon/dist/domain/mission-control/notification-dispatcher.js +181 -0
  198. package/daemon/dist/domain/mission-control/notification-dispatcher.js.map +1 -0
  199. package/daemon/dist/domain/node-inventory.d.ts.map +1 -1
  200. package/daemon/dist/domain/node-inventory.js +24 -0
  201. package/daemon/dist/domain/node-inventory.js.map +1 -1
  202. package/daemon/dist/domain/node-launcher.d.ts.map +1 -1
  203. package/daemon/dist/domain/node-launcher.js +7 -5
  204. package/daemon/dist/domain/node-launcher.js.map +1 -1
  205. package/daemon/dist/domain/plugin-discovery-service.d.ts +150 -0
  206. package/daemon/dist/domain/plugin-discovery-service.d.ts.map +1 -0
  207. package/daemon/dist/domain/plugin-discovery-service.js +468 -0
  208. package/daemon/dist/domain/plugin-discovery-service.js.map +1 -0
  209. package/daemon/dist/domain/plugin-vendor-service.d.ts +54 -0
  210. package/daemon/dist/domain/plugin-vendor-service.d.ts.map +1 -0
  211. package/daemon/dist/domain/plugin-vendor-service.js +111 -0
  212. package/daemon/dist/domain/plugin-vendor-service.js.map +1 -0
  213. package/daemon/dist/domain/preview/preview-rate-limiter.d.ts +20 -0
  214. package/daemon/dist/domain/preview/preview-rate-limiter.d.ts.map +1 -0
  215. package/daemon/dist/domain/preview/preview-rate-limiter.js +46 -0
  216. package/daemon/dist/domain/preview/preview-rate-limiter.js.map +1 -0
  217. package/daemon/dist/domain/profile-resolver.d.ts +8 -3
  218. package/daemon/dist/domain/profile-resolver.d.ts.map +1 -1
  219. package/daemon/dist/domain/profile-resolver.js +69 -15
  220. package/daemon/dist/domain/profile-resolver.js.map +1 -1
  221. package/daemon/dist/domain/progress/progress-indexer.d.ts +73 -0
  222. package/daemon/dist/domain/progress/progress-indexer.d.ts.map +1 -0
  223. package/daemon/dist/domain/progress/progress-indexer.js +210 -0
  224. package/daemon/dist/domain/progress/progress-indexer.js.map +1 -0
  225. package/daemon/dist/domain/project-classifier.d.ts +1 -1
  226. package/daemon/dist/domain/projection-planner.d.ts +7 -1
  227. package/daemon/dist/domain/projection-planner.d.ts.map +1 -1
  228. package/daemon/dist/domain/projection-planner.js +44 -4
  229. package/daemon/dist/domain/projection-planner.js.map +1 -1
  230. package/daemon/dist/domain/queue-repository.d.ts +30 -5
  231. package/daemon/dist/domain/queue-repository.d.ts.map +1 -1
  232. package/daemon/dist/domain/queue-repository.js +94 -27
  233. package/daemon/dist/domain/queue-repository.js.map +1 -1
  234. package/daemon/dist/domain/rehydrate-eligibility.d.ts +16 -0
  235. package/daemon/dist/domain/rehydrate-eligibility.d.ts.map +1 -0
  236. package/daemon/dist/domain/rehydrate-eligibility.js +43 -0
  237. package/daemon/dist/domain/rehydrate-eligibility.js.map +1 -0
  238. package/daemon/dist/domain/restore-check-service.d.ts.map +1 -1
  239. package/daemon/dist/domain/restore-check-service.js +19 -6
  240. package/daemon/dist/domain/restore-check-service.js.map +1 -1
  241. package/daemon/dist/domain/restore-orchestrator.d.ts.map +1 -1
  242. package/daemon/dist/domain/restore-orchestrator.js +4 -2
  243. package/daemon/dist/domain/restore-orchestrator.js.map +1 -1
  244. package/daemon/dist/domain/rig-repository.d.ts +14 -0
  245. package/daemon/dist/domain/rig-repository.d.ts.map +1 -1
  246. package/daemon/dist/domain/rig-repository.js +41 -0
  247. package/daemon/dist/domain/rig-repository.js.map +1 -1
  248. package/daemon/dist/domain/rig-teardown.d.ts.map +1 -1
  249. package/daemon/dist/domain/rig-teardown.js +5 -0
  250. package/daemon/dist/domain/rig-teardown.js.map +1 -1
  251. package/daemon/dist/domain/rigspec-codec.d.ts.map +1 -1
  252. package/daemon/dist/domain/rigspec-codec.js +15 -0
  253. package/daemon/dist/domain/rigspec-codec.js.map +1 -1
  254. package/daemon/dist/domain/rigspec-instantiator.d.ts +29 -0
  255. package/daemon/dist/domain/rigspec-instantiator.d.ts.map +1 -1
  256. package/daemon/dist/domain/rigspec-instantiator.js +136 -4
  257. package/daemon/dist/domain/rigspec-instantiator.js.map +1 -1
  258. package/daemon/dist/domain/rigspec-schema.d.ts.map +1 -1
  259. package/daemon/dist/domain/rigspec-schema.js +157 -4
  260. package/daemon/dist/domain/rigspec-schema.js.map +1 -1
  261. package/daemon/dist/domain/runtime-adapter.d.ts +11 -0
  262. package/daemon/dist/domain/runtime-adapter.d.ts.map +1 -1
  263. package/daemon/dist/domain/runtime-adapter.js.map +1 -1
  264. package/daemon/dist/domain/session-transport.d.ts.map +1 -1
  265. package/daemon/dist/domain/session-transport.js +33 -0
  266. package/daemon/dist/domain/session-transport.js.map +1 -1
  267. package/daemon/dist/domain/skill-discovery.d.ts +51 -0
  268. package/daemon/dist/domain/skill-discovery.d.ts.map +1 -0
  269. package/daemon/dist/domain/skill-discovery.js +144 -0
  270. package/daemon/dist/domain/skill-discovery.js.map +1 -0
  271. package/daemon/dist/domain/skill-library-discovery.d.ts +68 -0
  272. package/daemon/dist/domain/skill-library-discovery.d.ts.map +1 -0
  273. package/daemon/dist/domain/skill-library-discovery.js +144 -0
  274. package/daemon/dist/domain/skill-library-discovery.js.map +1 -0
  275. package/daemon/dist/domain/slices/slice-detail-projector.d.ts +182 -0
  276. package/daemon/dist/domain/slices/slice-detail-projector.d.ts.map +1 -0
  277. package/daemon/dist/domain/slices/slice-detail-projector.js +508 -0
  278. package/daemon/dist/domain/slices/slice-detail-projector.js.map +1 -0
  279. package/daemon/dist/domain/slices/slice-indexer.d.ts +137 -0
  280. package/daemon/dist/domain/slices/slice-indexer.d.ts.map +1 -0
  281. package/daemon/dist/domain/slices/slice-indexer.js +585 -0
  282. package/daemon/dist/domain/slices/slice-indexer.js.map +1 -0
  283. package/daemon/dist/domain/spec-library-service.d.ts +23 -2
  284. package/daemon/dist/domain/spec-library-service.d.ts.map +1 -1
  285. package/daemon/dist/domain/spec-library-service.js +31 -1
  286. package/daemon/dist/domain/spec-library-service.js.map +1 -1
  287. package/daemon/dist/domain/spec-library-workflow-scanner.d.ts +124 -0
  288. package/daemon/dist/domain/spec-library-workflow-scanner.d.ts.map +1 -0
  289. package/daemon/dist/domain/spec-library-workflow-scanner.js +325 -0
  290. package/daemon/dist/domain/spec-library-workflow-scanner.js.map +1 -0
  291. package/daemon/dist/domain/spec-review-service.d.ts +1 -1
  292. package/daemon/dist/domain/spec-review-service.d.ts.map +1 -1
  293. package/daemon/dist/domain/spec-review-service.js +14 -1
  294. package/daemon/dist/domain/spec-review-service.js.map +1 -1
  295. package/daemon/dist/domain/startup-validation.d.ts.map +1 -1
  296. package/daemon/dist/domain/startup-validation.js +57 -11
  297. package/daemon/dist/domain/startup-validation.js.map +1 -1
  298. package/daemon/dist/domain/steering/health-summary.d.ts +39 -0
  299. package/daemon/dist/domain/steering/health-summary.d.ts.map +1 -0
  300. package/daemon/dist/domain/steering/health-summary.js +100 -0
  301. package/daemon/dist/domain/steering/health-summary.js.map +1 -0
  302. package/daemon/dist/domain/steering/steering-composer.d.ts +102 -0
  303. package/daemon/dist/domain/steering/steering-composer.d.ts.map +1 -0
  304. package/daemon/dist/domain/steering/steering-composer.js +263 -0
  305. package/daemon/dist/domain/steering/steering-composer.js.map +1 -0
  306. package/daemon/dist/domain/transcript-capture.d.ts.map +1 -1
  307. package/daemon/dist/domain/transcript-capture.js +7 -4
  308. package/daemon/dist/domain/transcript-capture.js.map +1 -1
  309. package/daemon/dist/domain/transcript-rotation.d.ts +29 -0
  310. package/daemon/dist/domain/transcript-rotation.d.ts.map +1 -0
  311. package/daemon/dist/domain/transcript-rotation.js +109 -0
  312. package/daemon/dist/domain/transcript-rotation.js.map +1 -0
  313. package/daemon/dist/domain/transcript-store.d.ts.map +1 -1
  314. package/daemon/dist/domain/transcript-store.js +7 -1
  315. package/daemon/dist/domain/transcript-store.js.map +1 -1
  316. package/daemon/dist/domain/types.d.ts +128 -9
  317. package/daemon/dist/domain/types.d.ts.map +1 -1
  318. package/daemon/dist/domain/types.js +8 -1
  319. package/daemon/dist/domain/types.js.map +1 -1
  320. package/daemon/dist/domain/user-settings/settings-store.d.ts +66 -0
  321. package/daemon/dist/domain/user-settings/settings-store.d.ts.map +1 -0
  322. package/daemon/dist/domain/user-settings/settings-store.js +546 -0
  323. package/daemon/dist/domain/user-settings/settings-store.js.map +1 -0
  324. package/daemon/dist/domain/view-event-bridge.d.ts.map +1 -1
  325. package/daemon/dist/domain/view-event-bridge.js +2 -3
  326. package/daemon/dist/domain/view-event-bridge.js.map +1 -1
  327. package/daemon/dist/domain/whoami-service.d.ts +29 -0
  328. package/daemon/dist/domain/whoami-service.d.ts.map +1 -1
  329. package/daemon/dist/domain/whoami-service.js +68 -0
  330. package/daemon/dist/domain/whoami-service.js.map +1 -1
  331. package/daemon/dist/domain/workflow/slice-workflow-binding.d.ts +21 -0
  332. package/daemon/dist/domain/workflow/slice-workflow-binding.d.ts.map +1 -0
  333. package/daemon/dist/domain/workflow/slice-workflow-binding.js +103 -0
  334. package/daemon/dist/domain/workflow/slice-workflow-binding.js.map +1 -0
  335. package/daemon/dist/domain/workflow/slice-workflow-projection.d.ts +81 -0
  336. package/daemon/dist/domain/workflow/slice-workflow-projection.d.ts.map +1 -0
  337. package/daemon/dist/domain/workflow/slice-workflow-projection.js +127 -0
  338. package/daemon/dist/domain/workflow/slice-workflow-projection.js.map +1 -0
  339. package/daemon/dist/domain/workflow/starter-spec-loader.d.ts +51 -0
  340. package/daemon/dist/domain/workflow/starter-spec-loader.d.ts.map +1 -0
  341. package/daemon/dist/domain/workflow/starter-spec-loader.js +140 -0
  342. package/daemon/dist/domain/workflow/starter-spec-loader.js.map +1 -0
  343. package/daemon/dist/domain/workflow-projector.js +11 -3
  344. package/daemon/dist/domain/workflow-projector.js.map +1 -1
  345. package/daemon/dist/domain/workflow-spec-cache.d.ts +34 -0
  346. package/daemon/dist/domain/workflow-spec-cache.d.ts.map +1 -1
  347. package/daemon/dist/domain/workflow-spec-cache.js +121 -15
  348. package/daemon/dist/domain/workflow-spec-cache.js.map +1 -1
  349. package/daemon/dist/domain/workspace/default-workspace-scaffold.d.ts +6 -0
  350. package/daemon/dist/domain/workspace/default-workspace-scaffold.d.ts.map +1 -0
  351. package/daemon/dist/domain/workspace/default-workspace-scaffold.js +252 -0
  352. package/daemon/dist/domain/workspace/default-workspace-scaffold.js.map +1 -0
  353. package/daemon/dist/domain/workspace/frontmatter-validator.d.ts +40 -0
  354. package/daemon/dist/domain/workspace/frontmatter-validator.d.ts.map +1 -0
  355. package/daemon/dist/domain/workspace/frontmatter-validator.js +185 -0
  356. package/daemon/dist/domain/workspace/frontmatter-validator.js.map +1 -0
  357. package/daemon/dist/domain/workspace/getting-started-narrative.d.ts +15 -0
  358. package/daemon/dist/domain/workspace/getting-started-narrative.d.ts.map +1 -0
  359. package/daemon/dist/domain/workspace/getting-started-narrative.js +237 -0
  360. package/daemon/dist/domain/workspace/getting-started-narrative.js.map +1 -0
  361. package/daemon/dist/domain/workspace/workspace-resolver.d.ts +25 -0
  362. package/daemon/dist/domain/workspace/workspace-resolver.d.ts.map +1 -0
  363. package/daemon/dist/domain/workspace/workspace-resolver.js +86 -0
  364. package/daemon/dist/domain/workspace/workspace-resolver.js.map +1 -0
  365. package/daemon/dist/index.d.ts +2 -1
  366. package/daemon/dist/index.d.ts.map +1 -1
  367. package/daemon/dist/index.js +56 -12
  368. package/daemon/dist/index.js.map +1 -1
  369. package/daemon/dist/lib/pane-envelope.d.ts +7 -0
  370. package/daemon/dist/lib/pane-envelope.d.ts.map +1 -0
  371. package/daemon/dist/lib/pane-envelope.js +38 -0
  372. package/daemon/dist/lib/pane-envelope.js.map +1 -0
  373. package/daemon/dist/middleware/auth-bearer-token.d.ts +91 -0
  374. package/daemon/dist/middleware/auth-bearer-token.d.ts.map +1 -0
  375. package/daemon/dist/middleware/auth-bearer-token.js +236 -0
  376. package/daemon/dist/middleware/auth-bearer-token.js.map +1 -0
  377. package/daemon/dist/openrig-compat.d.ts +1 -1
  378. package/daemon/dist/openrig-compat.d.ts.map +1 -1
  379. package/daemon/dist/openrig-compat.js +6 -4
  380. package/daemon/dist/openrig-compat.js.map +1 -1
  381. package/daemon/dist/routes/agent-images.d.ts +8 -0
  382. package/daemon/dist/routes/agent-images.d.ts.map +1 -0
  383. package/daemon/dist/routes/agent-images.js +253 -0
  384. package/daemon/dist/routes/agent-images.js.map +1 -0
  385. package/daemon/dist/routes/config.d.ts +3 -0
  386. package/daemon/dist/routes/config.d.ts.map +1 -0
  387. package/daemon/dist/routes/config.js +109 -0
  388. package/daemon/dist/routes/config.js.map +1 -0
  389. package/daemon/dist/routes/context-packs.d.ts +3 -0
  390. package/daemon/dist/routes/context-packs.d.ts.map +1 -0
  391. package/daemon/dist/routes/context-packs.js +129 -0
  392. package/daemon/dist/routes/context-packs.js.map +1 -0
  393. package/daemon/dist/routes/files.d.ts +17 -0
  394. package/daemon/dist/routes/files.d.ts.map +1 -0
  395. package/daemon/dist/routes/files.js +262 -0
  396. package/daemon/dist/routes/files.js.map +1 -0
  397. package/daemon/dist/routes/health-summary.d.ts +9 -0
  398. package/daemon/dist/routes/health-summary.d.ts.map +1 -0
  399. package/daemon/dist/routes/health-summary.js +33 -0
  400. package/daemon/dist/routes/health-summary.js.map +1 -0
  401. package/daemon/dist/routes/kernel-status.d.ts +3 -0
  402. package/daemon/dist/routes/kernel-status.d.ts.map +1 -0
  403. package/daemon/dist/routes/kernel-status.js +40 -0
  404. package/daemon/dist/routes/kernel-status.js.map +1 -0
  405. package/daemon/dist/routes/mission-control.d.ts +37 -0
  406. package/daemon/dist/routes/mission-control.d.ts.map +1 -0
  407. package/daemon/dist/routes/mission-control.js +306 -0
  408. package/daemon/dist/routes/mission-control.js.map +1 -0
  409. package/daemon/dist/routes/missions.d.ts +3 -0
  410. package/daemon/dist/routes/missions.d.ts.map +1 -0
  411. package/daemon/dist/routes/missions.js +195 -0
  412. package/daemon/dist/routes/missions.js.map +1 -0
  413. package/daemon/dist/routes/plugins.d.ts +3 -0
  414. package/daemon/dist/routes/plugins.d.ts.map +1 -0
  415. package/daemon/dist/routes/plugins.js +223 -0
  416. package/daemon/dist/routes/plugins.js.map +1 -0
  417. package/daemon/dist/routes/progress.d.ts +7 -0
  418. package/daemon/dist/routes/progress.d.ts.map +1 -0
  419. package/daemon/dist/routes/progress.js +33 -0
  420. package/daemon/dist/routes/progress.js.map +1 -0
  421. package/daemon/dist/routes/queue.d.ts.map +1 -1
  422. package/daemon/dist/routes/queue.js +52 -1
  423. package/daemon/dist/routes/queue.js.map +1 -1
  424. package/daemon/dist/routes/rig-cmux.d.ts +3 -0
  425. package/daemon/dist/routes/rig-cmux.d.ts.map +1 -0
  426. package/daemon/dist/routes/rig-cmux.js +121 -0
  427. package/daemon/dist/routes/rig-cmux.js.map +1 -0
  428. package/daemon/dist/routes/rigs.d.ts +3 -0
  429. package/daemon/dist/routes/rigs.d.ts.map +1 -1
  430. package/daemon/dist/routes/rigs.js +73 -7
  431. package/daemon/dist/routes/rigs.js.map +1 -1
  432. package/daemon/dist/routes/rigspec.js +6 -3
  433. package/daemon/dist/routes/rigspec.js.map +1 -1
  434. package/daemon/dist/routes/sessions.d.ts.map +1 -1
  435. package/daemon/dist/routes/sessions.js +119 -0
  436. package/daemon/dist/routes/sessions.js.map +1 -1
  437. package/daemon/dist/routes/skills.d.ts +3 -0
  438. package/daemon/dist/routes/skills.d.ts.map +1 -0
  439. package/daemon/dist/routes/skills.js +147 -0
  440. package/daemon/dist/routes/skills.js.map +1 -0
  441. package/daemon/dist/routes/slices.d.ts +9 -0
  442. package/daemon/dist/routes/slices.d.ts.map +1 -0
  443. package/daemon/dist/routes/slices.js +207 -0
  444. package/daemon/dist/routes/slices.js.map +1 -0
  445. package/daemon/dist/routes/spec-library.d.ts.map +1 -1
  446. package/daemon/dist/routes/spec-library.js +87 -5
  447. package/daemon/dist/routes/spec-library.js.map +1 -1
  448. package/daemon/dist/routes/steering.d.ts +7 -0
  449. package/daemon/dist/routes/steering.d.ts.map +1 -0
  450. package/daemon/dist/routes/steering.js +27 -0
  451. package/daemon/dist/routes/steering.js.map +1 -0
  452. package/daemon/dist/routes/up.d.ts.map +1 -1
  453. package/daemon/dist/routes/up.js +21 -3
  454. package/daemon/dist/routes/up.js.map +1 -1
  455. package/daemon/dist/routes/whoami.d.ts.map +1 -1
  456. package/daemon/dist/routes/whoami.js +6 -1
  457. package/daemon/dist/routes/whoami.js.map +1 -1
  458. package/daemon/dist/routes/workflow.d.ts.map +1 -1
  459. package/daemon/dist/routes/workflow.js +43 -0
  460. package/daemon/dist/routes/workflow.js.map +1 -1
  461. package/daemon/dist/routes/workspace.d.ts +3 -0
  462. package/daemon/dist/routes/workspace.d.ts.map +1 -0
  463. package/daemon/dist/routes/workspace.js +53 -0
  464. package/daemon/dist/routes/workspace.js.map +1 -0
  465. package/daemon/dist/server.d.ts +82 -0
  466. package/daemon/dist/server.d.ts.map +1 -1
  467. package/daemon/dist/server.js +82 -1
  468. package/daemon/dist/server.js.map +1 -1
  469. package/daemon/dist/startup.d.ts +9 -0
  470. package/daemon/dist/startup.d.ts.map +1 -1
  471. package/daemon/dist/startup.js +577 -5
  472. package/daemon/dist/startup.js.map +1 -1
  473. package/daemon/docs/reference/agent-spec.md +7 -7
  474. package/daemon/docs/reference/agent-startup-guide.md +2 -2
  475. package/daemon/docs/reference/project-workspace.md +102 -0
  476. package/daemon/specs/agents/apps/vault-specialist/agent.yaml +1 -2
  477. package/daemon/specs/agents/apps/vault-specialist/guidance/role.md +0 -1
  478. package/daemon/specs/agents/conveyor/builder/agent.yaml +34 -0
  479. package/daemon/specs/agents/conveyor/builder/guidance/role.md +31 -0
  480. package/daemon/specs/agents/conveyor/builder/startup/context.md +9 -0
  481. package/daemon/specs/agents/conveyor/lead/agent.yaml +34 -0
  482. package/daemon/specs/agents/conveyor/lead/guidance/role.md +34 -0
  483. package/daemon/specs/agents/conveyor/lead/startup/context.md +15 -0
  484. package/daemon/specs/agents/conveyor/planner/agent.yaml +34 -0
  485. package/daemon/specs/agents/conveyor/planner/guidance/role.md +29 -0
  486. package/daemon/specs/agents/conveyor/planner/startup/context.md +12 -0
  487. package/daemon/specs/agents/conveyor/reviewer/agent.yaml +34 -0
  488. package/daemon/specs/agents/conveyor/reviewer/guidance/role.md +29 -0
  489. package/daemon/specs/agents/conveyor/reviewer/startup/context.md +10 -0
  490. package/daemon/specs/agents/design/product-designer/agent.yaml +0 -1
  491. package/daemon/specs/agents/development/implementer/agent.yaml +1 -2
  492. package/daemon/specs/agents/development/implementer/guidance/role.md +0 -1
  493. package/daemon/specs/agents/development/qa/agent.yaml +0 -1
  494. package/daemon/specs/agents/development/qa/guidance/role.md +0 -2
  495. package/daemon/specs/agents/orchestration/orchestrator/agent.yaml +1 -2
  496. package/daemon/specs/agents/orchestration/orchestrator/guidance/role.md +2 -3
  497. package/daemon/specs/agents/research/analyst/agent.yaml +0 -1
  498. package/daemon/specs/agents/research/synthesizer/agent.yaml +0 -1
  499. package/daemon/specs/agents/review/independent-reviewer/agent.yaml +0 -1
  500. package/daemon/specs/agents/shared/agent.yaml +6 -8
  501. package/daemon/specs/agents/shared/skills/core/openrig-architect/SKILL.md +361 -0
  502. package/daemon/specs/agents/shared/skills/core/openrig-installer/SKILL.md +142 -0
  503. package/daemon/specs/agents/shared/skills/core/openrig-user/SKILL.md +30 -0
  504. package/daemon/specs/agents/shared/skills/core/openrig-user-settings/SKILL.md +153 -0
  505. package/daemon/specs/agents/shared/skills/core/rig-lifecycle/SKILL.md +116 -0
  506. package/daemon/specs/agents/shared/skills/pods/development-team/SKILL.md +0 -1
  507. package/daemon/specs/agents/shared/skills/pods/orchestration-team/SKILL.md +2 -2
  508. package/daemon/specs/agents/shared/skills/process/agent-browser/LOCAL-INSIGHTS.md +6 -6
  509. package/daemon/specs/agents/shared/skills/process/agent-browser/OPENRIG.md +40 -0
  510. package/daemon/specs/agents/shared/skills/process/agent-browser/SKILL.md +10 -0
  511. package/daemon/specs/agents/shared/skills/process/brainstorming/OPENRIG.md +48 -0
  512. package/daemon/specs/agents/shared/skills/process/brainstorming/SKILL.md +11 -0
  513. package/daemon/specs/agents/shared/skills/process/dogfood/SKILL.md +5 -0
  514. package/daemon/specs/agents/shared/skills/process/executing-plans/OPENRIG.md +56 -0
  515. package/daemon/specs/agents/shared/skills/process/executing-plans/SKILL.md +10 -0
  516. package/daemon/specs/agents/shared/skills/process/frontend-design/SKILL.md +5 -0
  517. package/daemon/specs/agents/shared/skills/process/systematic-debugging/SKILL.md +5 -0
  518. package/daemon/specs/agents/shared/skills/process/test-driven-development/SKILL.md +5 -0
  519. package/daemon/specs/agents/shared/skills/process/using-superpowers/OPENRIG.md +48 -0
  520. package/daemon/specs/agents/shared/skills/process/using-superpowers/SKILL.md +11 -0
  521. package/daemon/specs/agents/shared/skills/process/verification-before-completion/SKILL.md +5 -0
  522. package/daemon/specs/agents/shared/skills/process/writing-plans/OPENRIG.md +52 -0
  523. package/daemon/specs/agents/shared/skills/process/writing-plans/SKILL.md +12 -2
  524. package/daemon/specs/rigs/launch/conveyor/CULTURE.md +34 -0
  525. package/daemon/specs/rigs/launch/conveyor/README.md +33 -0
  526. package/daemon/specs/rigs/launch/conveyor/rig.yaml +72 -0
  527. package/daemon/specs/rigs/launch/kernel/agents/advisor/lead/agent.yaml +35 -0
  528. package/daemon/specs/rigs/launch/kernel/agents/advisor/lead/guidance/role.md +50 -0
  529. package/daemon/specs/rigs/launch/kernel/agents/advisor/lead/startup/context.md +37 -0
  530. package/daemon/specs/rigs/launch/kernel/agents/operator/agent/agent.yaml +35 -0
  531. package/daemon/specs/rigs/launch/kernel/agents/operator/agent/guidance/role.md +49 -0
  532. package/daemon/specs/rigs/launch/kernel/agents/operator/agent/startup/context.md +63 -0
  533. package/daemon/specs/rigs/launch/kernel/agents/queue/worker/agent.yaml +35 -0
  534. package/daemon/specs/rigs/launch/kernel/agents/queue/worker/guidance/role.md +33 -0
  535. package/daemon/specs/rigs/launch/kernel/agents/queue/worker/startup/context.md +30 -0
  536. package/daemon/specs/rigs/launch/kernel/culture/CULTURE.md +69 -0
  537. package/daemon/specs/rigs/launch/kernel/rig-claude-only.yaml +59 -0
  538. package/daemon/specs/rigs/launch/kernel/rig-codex-only.yaml +59 -0
  539. package/daemon/specs/rigs/launch/kernel/rig.yaml +69 -0
  540. package/daemon/specs/rigs/preview/product-team/CULTURE.md +2 -2
  541. package/daemon/specs/rigs/preview/product-team/rig.yaml +3 -4
  542. package/dist/commands/agent-image.d.ts +4 -0
  543. package/dist/commands/agent-image.d.ts.map +1 -0
  544. package/dist/commands/agent-image.js +352 -0
  545. package/dist/commands/agent-image.js.map +1 -0
  546. package/dist/commands/config-init-workspace.d.ts +35 -0
  547. package/dist/commands/config-init-workspace.d.ts.map +1 -0
  548. package/dist/commands/config-init-workspace.js +553 -0
  549. package/dist/commands/config-init-workspace.js.map +1 -0
  550. package/dist/commands/config.d.ts.map +1 -1
  551. package/dist/commands/config.js +86 -18
  552. package/dist/commands/config.js.map +1 -1
  553. package/dist/commands/context-pack.d.ts +4 -0
  554. package/dist/commands/context-pack.d.ts.map +1 -0
  555. package/dist/commands/context-pack.js +357 -0
  556. package/dist/commands/context-pack.js.map +1 -0
  557. package/dist/commands/daemon.d.ts.map +1 -1
  558. package/dist/commands/daemon.js +61 -1
  559. package/dist/commands/daemon.js.map +1 -1
  560. package/dist/commands/heartbeat.d.ts.map +1 -1
  561. package/dist/commands/heartbeat.js +0 -5
  562. package/dist/commands/heartbeat.js.map +1 -1
  563. package/dist/commands/import.d.ts.map +1 -1
  564. package/dist/commands/import.js +7 -2
  565. package/dist/commands/import.js.map +1 -1
  566. package/dist/commands/plugin.d.ts +4 -0
  567. package/dist/commands/plugin.d.ts.map +1 -0
  568. package/dist/commands/plugin.js +395 -0
  569. package/dist/commands/plugin.js.map +1 -0
  570. package/dist/commands/ps.d.ts.map +1 -1
  571. package/dist/commands/ps.js +173 -14
  572. package/dist/commands/ps.js.map +1 -1
  573. package/dist/commands/queue.d.ts.map +1 -1
  574. package/dist/commands/queue.js +9 -0
  575. package/dist/commands/queue.js.map +1 -1
  576. package/dist/commands/send.d.ts +15 -0
  577. package/dist/commands/send.d.ts.map +1 -1
  578. package/dist/commands/send.js +32 -1
  579. package/dist/commands/send.js.map +1 -1
  580. package/dist/commands/specs.d.ts +4 -2
  581. package/dist/commands/specs.d.ts.map +1 -1
  582. package/dist/commands/specs.js +12 -8
  583. package/dist/commands/specs.js.map +1 -1
  584. package/dist/commands/up.d.ts.map +1 -1
  585. package/dist/commands/up.js +30 -4
  586. package/dist/commands/up.js.map +1 -1
  587. package/dist/commands/whoami.d.ts.map +1 -1
  588. package/dist/commands/whoami.js +9 -4
  589. package/dist/commands/whoami.js.map +1 -1
  590. package/dist/commands/workflow.d.ts.map +1 -1
  591. package/dist/commands/workflow.js +37 -0
  592. package/dist/commands/workflow.js.map +1 -1
  593. package/dist/commands/workspace.d.ts +6 -0
  594. package/dist/commands/workspace.d.ts.map +1 -0
  595. package/dist/commands/workspace.js +83 -0
  596. package/dist/commands/workspace.js.map +1 -0
  597. package/dist/config-store.d.ts +90 -1
  598. package/dist/config-store.d.ts.map +1 -1
  599. package/dist/config-store.js +477 -42
  600. package/dist/config-store.js.map +1 -1
  601. package/dist/daemon-lifecycle.d.ts +42 -1
  602. package/dist/daemon-lifecycle.d.ts.map +1 -1
  603. package/dist/daemon-lifecycle.js +98 -7
  604. package/dist/daemon-lifecycle.js.map +1 -1
  605. package/dist/host-registry.d.ts +1 -1
  606. package/dist/host-registry.js +1 -1
  607. package/dist/index.d.ts +5 -0
  608. package/dist/index.d.ts.map +1 -1
  609. package/dist/index.js +8 -0
  610. package/dist/index.js.map +1 -1
  611. package/dist/openrig-compat.d.ts +1 -1
  612. package/dist/openrig-compat.d.ts.map +1 -1
  613. package/dist/openrig-compat.js +6 -4
  614. package/dist/openrig-compat.js.map +1 -1
  615. package/dist/restore-packet/claude-transcript-parser.js +1 -1
  616. package/dist/restore-packet/claude-transcript-parser.js.map +1 -1
  617. package/dist/restore-packet/codex-jsonl-parser.js +1 -1
  618. package/dist/restore-packet/codex-jsonl-parser.js.map +1 -1
  619. package/package.json +2 -2
  620. package/ui/dist/assets/index-C_Q5FczU.css +1 -0
  621. package/ui/dist/assets/index-Rl3ZBrUg.js +547 -0
  622. package/ui/dist/graphics/operator-climber-monochrome.png +0 -0
  623. package/ui/dist/index.html +3 -2
  624. package/daemon/specs/agents/shared/skills/claude-compact-in-place/SKILL.md +0 -100
  625. package/daemon/specs/agents/shared/skills/mental-model-ha/SKILL.md +0 -956
  626. package/daemon/specs/agents/shared/skills/process/containerized-e2e/SKILL.md +0 -256
  627. package/daemon/specs/agents/shared/skills/process/containerized-e2e/scripts/Dockerfile +0 -39
  628. package/daemon/specs/agents/shared/skills/process/containerized-e2e/scripts/build-e2e-image.sh +0 -37
  629. package/daemon/specs/agents/shared/skills/process/containerized-e2e/templates/control-plane-test.yaml +0 -40
  630. package/daemon/specs/agents/shared/skills/process/containerized-e2e/templates/e2e-report-template.md +0 -94
  631. package/daemon/specs/agents/shared/skills/process/containerized-e2e/templates/expansion-collision-fragment.yaml +0 -13
  632. package/daemon/specs/agents/shared/skills/process/containerized-e2e/templates/expansion-pod-fragment.yaml +0 -14
  633. package/ui/dist/assets/index-B09doO8H.js +0 -139
  634. package/ui/dist/assets/index-Dec25siz.css +0 -1
  635. package/ui/dist/assets/index-GNYaWmBj.js +0 -225
@@ -71,6 +71,14 @@ import { WorkflowRuntime } from "./domain/workflow-runtime.js";
71
71
  import { makeWorkflowKeepalivePolicy } from "./domain/policies/workflow-keepalive.js";
72
72
  import { SpecReviewService } from "./domain/spec-review-service.js";
73
73
  import { SpecLibraryService } from "./domain/spec-library-service.js";
74
+ // Phase 3a slice 3.3 — plugin discovery service.
75
+ import { PluginDiscoveryService } from "./domain/plugin-discovery-service.js";
76
+ // Slice 28 Checkpoint C-3 — skill-library discovery (SC-29 #11 cumulative).
77
+ import { SkillLibraryDiscoveryService } from "./domain/skill-library-discovery.js";
78
+ import { ContextPackLibraryService } from "./domain/context-packs/context-pack-library-service.js";
79
+ import { AgentImageLibraryService } from "./domain/agent-images/agent-image-library-service.js";
80
+ import { SnapshotCapturer } from "./domain/agent-images/snapshot-capturer.js";
81
+ import { SettingsStore as ContextPackSettingsStore } from "./domain/user-settings/settings-store.js";
74
82
  import { WhoamiService } from "./domain/whoami-service.js";
75
83
  import { NodeCmuxService } from "./domain/node-cmux-service.js";
76
84
  import { createApp } from "./server.js";
@@ -111,12 +119,53 @@ import { workflowSpecsSchema } from "./db/migrations/033_workflow_specs.js";
111
119
  import { workflowInstancesSchema } from "./db/migrations/034_workflow_instances.js";
112
120
  import { workflowStepTrailsSchema } from "./db/migrations/035_workflow_step_trails.js";
113
121
  import { watchdogPolicyEnumExtensionSchema } from "./db/migrations/036_watchdog_policy_enum_extension.js";
122
+ import { missionControlActionsSchema } from "./db/migrations/037_mission_control_actions.js";
123
+ import { workspacePrimitiveSchema } from "./db/migrations/038_workspace_primitive.js";
124
+ import { queueTargetRepoSchema } from "./db/migrations/039_queue_target_repo.js";
125
+ // Slice 11 (release-0.3.1 workflow-spec-folder-discovery) — adds
126
+ // status + error_message columns to workflow_specs so the scanner
127
+ // can record diagnostic rows. SC-29 #10 declared verbatim in commit body.
128
+ import { workflowSpecsDiagnosticSchema } from "./db/migrations/040_workflow_specs_diagnostic.js";
129
+ import { MissionControlActionLog } from "./domain/mission-control/mission-control-action-log.js";
130
+ import { MissionControlWriteContract } from "./domain/mission-control/mission-control-write-contract.js";
131
+ import { MissionControlReadLayer } from "./domain/mission-control/mission-control-read-layer.js";
132
+ import { MissionControlFleetCliCapability, makeLocalCliCapabilityProbe, } from "./domain/mission-control/mission-control-fleet-cli-capability.js";
133
+ import { MissionControlAuditBrowse } from "./domain/mission-control/audit-browse.js";
134
+ import { MissionControlNotificationDispatcher } from "./domain/mission-control/notification-dispatcher.js";
135
+ import { NtfyNotificationAdapter } from "./domain/mission-control/notification-adapter-ntfy.js";
136
+ import { WebhookNotificationAdapter } from "./domain/mission-control/notification-adapter-webhook.js";
114
137
  import { OPENRIG_HOME } from "./openrig-compat.js";
115
138
  import { getCompatibleOpenRigPath, getDefaultOpenRigPath, readOpenRigEnv, } from "./openrig-compat.js";
139
+ const KNOWN_PROVIDER_AUTH_ENV = new Set([
140
+ "ANTHROPIC_API_KEY",
141
+ "ANTHROPIC_AUTH_TOKEN",
142
+ "CLAUDE_CODE_OAUTH_TOKEN",
143
+ "OPENAI_API_KEY",
144
+ "OPENAI_BASE_URL",
145
+ "OPENAI_ORG_ID",
146
+ "OPENAI_PROJECT_ID",
147
+ ]);
148
+ export function collectAllowlistedProviderAuthEnv(raw, env) {
149
+ const out = {};
150
+ for (const item of (raw ?? "").split(",")) {
151
+ const name = item.trim();
152
+ if (!name)
153
+ continue;
154
+ if (!/^[A-Z_][A-Z0-9_]*$/.test(name))
155
+ continue;
156
+ if (!KNOWN_PROVIDER_AUTH_ENV.has(name))
157
+ continue;
158
+ const value = env[name];
159
+ if (typeof value === "string" && value.length > 0) {
160
+ out[name] = value;
161
+ }
162
+ }
163
+ return out;
164
+ }
116
165
  export async function createDaemon(opts) {
117
166
  const dbPath = opts?.dbPath ?? ":memory:";
118
167
  const db = createDb(dbPath);
119
- migrate(db, [coreSchema, bindingsSessionsSchema, eventsSchema, snapshotsSchema, checkpointsSchema, resumeMetadataSchema, nodeSpecFieldsSchema, packagesSchema, installJournalSchema, journalSeqSchema, bootstrapSchema, discoverySchema, discoveryFkFix, agentspecRebootSchema, startupContextSchema, chatMessagesSchema, podNamespaceSchema, contextUsageSchema, externalCliAttachmentSchema, rigServicesSchema, seatHandoverObservabilitySchema, nodeCodexConfigProfileSchema, streamItemsSchema, queueItemsSchema, queueTransitionsSchema, inboxEntriesSchema, outboxEntriesSchema, projectClassificationsSchema, classifierLeasesSchema, viewsCustomSchema, watchdogJobsSchema, watchdogHistorySchema, workflowSpecsSchema, workflowInstancesSchema, workflowStepTrailsSchema, watchdogPolicyEnumExtensionSchema]);
168
+ migrate(db, [coreSchema, bindingsSessionsSchema, eventsSchema, snapshotsSchema, checkpointsSchema, resumeMetadataSchema, nodeSpecFieldsSchema, packagesSchema, installJournalSchema, journalSeqSchema, bootstrapSchema, discoverySchema, discoveryFkFix, agentspecRebootSchema, startupContextSchema, chatMessagesSchema, podNamespaceSchema, contextUsageSchema, externalCliAttachmentSchema, rigServicesSchema, seatHandoverObservabilitySchema, nodeCodexConfigProfileSchema, streamItemsSchema, queueItemsSchema, queueTransitionsSchema, inboxEntriesSchema, outboxEntriesSchema, projectClassificationsSchema, classifierLeasesSchema, viewsCustomSchema, watchdogJobsSchema, watchdogHistorySchema, workflowSpecsSchema, workflowInstancesSchema, workflowStepTrailsSchema, watchdogPolicyEnumExtensionSchema, missionControlActionsSchema, workspacePrimitiveSchema, queueTargetRepoSchema, workflowSpecsDiagnosticSchema]);
120
169
  const rigRepo = new RigRepository(db);
121
170
  const sessionRegistry = new SessionRegistry(db);
122
171
  const eventBus = new EventBus(db);
@@ -124,7 +173,12 @@ export async function createDaemon(opts) {
124
173
  // Reject `<member>@<unknown-rig>` shapes by checking the rig portion
125
174
  // against the rig registry. Bare ids without `@` are also rejected
126
175
  // (no canonical rig binding).
176
+ const isHumanSeatSessionRef = (sessionRef) => {
177
+ return /^human(?:-[A-Za-z0-9._-]+)?@(kernel|host)$/.test(sessionRef);
178
+ };
127
179
  const topologyValidateRig = (sessionRef) => {
180
+ if (isHumanSeatSessionRef(sessionRef))
181
+ return true;
128
182
  const m = /^[^@]+@(.+)$/.exec(sessionRef);
129
183
  if (!m)
130
184
  return false;
@@ -167,6 +221,8 @@ export async function createDaemon(opts) {
167
221
  const activityHookUrl = readOpenRigEnv("OPENRIG_URL", "RIGGED_URL") || undefined;
168
222
  const openRigPort = readOpenRigEnv("OPENRIG_PORT", "RIGGED_PORT") || undefined;
169
223
  const openRigHost = readOpenRigEnv("OPENRIG_HOST", "RIGGED_HOST") || undefined;
224
+ const startupSettings = new ContextPackSettingsStore().resolveConfig();
225
+ const providerAuthEnv = collectAllowlistedProviderAuthEnv(startupSettings.recoveryProviderAuthEnvAllowlistRaw, process.env);
170
226
  const transcriptStore = new TranscriptStore({
171
227
  enabled: transcriptsEnabled,
172
228
  transcriptsRoot: transcriptsPath,
@@ -185,6 +241,7 @@ export async function createDaemon(opts) {
185
241
  OPENRIG_HOST: openRigHost,
186
242
  OPENRIG_URL: activityHookUrl,
187
243
  OPENRIG_ACTIVITY_HOOK_TOKEN: activityHookToken,
244
+ ...providerAuthEnv,
188
245
  },
189
246
  });
190
247
  const snapshotRepo = new SnapshotRepository(db);
@@ -297,25 +354,161 @@ export async function createDaemon(opts) {
297
354
  const { ClaudeCodeAdapter } = await import("./adapters/claude-code-adapter.js");
298
355
  const { CodexRuntimeAdapter } = await import("./adapters/codex-runtime-adapter.js");
299
356
  const startupOrchestrator = new StartupOrchestrator({ db, sessionRegistry, eventBus, tmuxAdapter, readFile: (p) => fs.readFileSync(p, "utf-8") });
300
- const activityHookRelayAssetPath = nodePath.resolve(import.meta.dirname, "../assets/openrig-activity-hook-relay.cjs");
357
+ const runtimeSettings = new ContextPackSettingsStore().resolveConfig();
301
358
  const claudeAdapter = new ClaudeCodeAdapter({ tmux: tmuxAdapter, fsOps: { readFile: (p) => fs.readFileSync(p, "utf-8"), writeFile: (p, c) => fs.writeFileSync(p, c, "utf-8"), exists: (p) => fs.existsSync(p), mkdirp: (p) => fs.mkdirSync(p, { recursive: true }), copyFile: (src, dest) => fs.copyFileSync(src, dest), listFiles: (dir) => { const r = []; function w(d, pre) { for (const e of fs.readdirSync(d, { withFileTypes: true })) {
302
359
  if (e.isDirectory())
303
360
  w(nodePath.join(d, e.name), nodePath.join(pre, e.name));
304
361
  else
305
362
  r.push(pre ? nodePath.join(pre, e.name) : e.name);
306
- } } w(dir, ""); return r; }, readdir: (dir) => fs.readdirSync(dir), homedir: os.homedir() }, stateDir: OPENRIG_HOME, collectorAssetPath: nodePath.resolve(import.meta.dirname, "../assets/claude-statusline-context.cjs"), activityHookRelayAssetPath });
363
+ } } w(dir, ""); return r; }, readdir: (dir) => fs.readdirSync(dir), homedir: os.homedir() }, stateDir: OPENRIG_HOME, collectorAssetPath: nodePath.resolve(import.meta.dirname, "../assets/claude-statusline-context.cjs"), autoDriveProviderPrompts: runtimeSettings.recoveryAutoDriveProviderPrompts });
307
364
  const codexAdapter = new CodexRuntimeAdapter({ tmux: tmuxAdapter, fsOps: { readFile: (p) => fs.readFileSync(p, "utf-8"), writeFile: (p, c) => fs.writeFileSync(p, c, "utf-8"), exists: (p) => fs.existsSync(p), mkdirp: (p) => fs.mkdirSync(p, { recursive: true }), listFiles: (dir) => { const r = []; function w(d, pre) { for (const e of fs.readdirSync(d, { withFileTypes: true })) {
308
365
  if (e.isDirectory())
309
366
  w(nodePath.join(d, e.name), nodePath.join(pre, e.name));
310
367
  else
311
368
  r.push(pre ? nodePath.join(pre, e.name) : e.name);
312
- } } w(dir, ""); return r; } }, activityHookRelayAssetPath });
369
+ } } w(dir, ""); return r; }, homedir: os.homedir() } });
370
+ // plugin-primitive Phase 3a slice 3.5 — ensure Codex feature flag
371
+ // codex_hooks = true is set in ~/.codex/config.toml so plugin-shipped
372
+ // hooks fire on Codex runtime. Slice 27 also creates the default
373
+ // user-owned Claude compaction extra-instructions placeholder.
374
+ // Operator can disable Codex hooks via OPENRIG_RUNTIME_CODEX_HOOKS_ENABLED
375
+ // or rig config set runtime.codex.hooks_enabled false.
376
+ try {
377
+ const { SettingsStore, ensureDefaultClaudeCompactionFiles, } = await import("./domain/user-settings/settings-store.js");
378
+ ensureDefaultClaudeCompactionFiles(OPENRIG_HOME);
379
+ const settingsStore = new SettingsStore();
380
+ const enabled = settingsStore.resolveOne("runtime.codex.hooks_enabled").value;
381
+ codexAdapter.ensureCodexFeatureFlag(enabled);
382
+ }
383
+ catch (err) {
384
+ console.error(`[openrig] runtime setup warning: ${err.message}`);
385
+ }
386
+ // plugin-primitive Phase 3a slice 3.2 — vendor openrig-core plugin to
387
+ // ~/.openrig/plugins/openrig-core/ on first launch. Auto-fetch from
388
+ // github.com/mvschwarz/openrig-plugins is best-effort + 404-tolerant
389
+ // (repo currently empty per founder authorization 2026-05-10; vendored
390
+ // copy is the source of truth at v0).
391
+ try {
392
+ const { PluginVendorService } = await import("./domain/plugin-vendor-service.js");
393
+ const vendoredAssetsDir = nodePath.resolve(import.meta.dirname, "../assets/plugins");
394
+ const userPluginsDir = getDefaultOpenRigPath("plugins");
395
+ const realFs = {
396
+ readFile: (p) => fs.readFileSync(p, "utf-8"),
397
+ writeFile: (p, c) => fs.writeFileSync(p, c, "utf-8"),
398
+ exists: (p) => fs.existsSync(p),
399
+ mkdirp: (p) => fs.mkdirSync(p, { recursive: true }),
400
+ listFiles: (dir) => {
401
+ const r = [];
402
+ function w(d, pre) {
403
+ for (const e of fs.readdirSync(d, { withFileTypes: true })) {
404
+ if (e.isDirectory())
405
+ w(nodePath.join(d, e.name), nodePath.join(pre, e.name));
406
+ else
407
+ r.push(pre ? nodePath.join(pre, e.name) : e.name);
408
+ }
409
+ }
410
+ w(dir, "");
411
+ return r;
412
+ },
413
+ };
414
+ const httpClient = async (url, opts) => {
415
+ const ctrl = new AbortController();
416
+ const timer = setTimeout(() => ctrl.abort(), opts?.timeoutMs ?? 5000);
417
+ try {
418
+ const resp = await fetch(url, { signal: ctrl.signal });
419
+ return { ok: resp.ok, status: resp.status };
420
+ }
421
+ finally {
422
+ clearTimeout(timer);
423
+ }
424
+ };
425
+ const vendorService = new PluginVendorService({
426
+ vendoredAssetsDir,
427
+ userPluginsDir,
428
+ fs: realFs,
429
+ httpClient,
430
+ logger: (...args) => console.log("[openrig]", ...args),
431
+ });
432
+ await vendorService.ensureLatest("openrig-core");
433
+ }
434
+ catch (err) {
435
+ console.error(`[openrig] plugin vendor setup warning: ${err.message}`);
436
+ }
437
+ // PL-014 Item 6: hoist ContextPackLibraryService construction so the
438
+ // PodRigInstantiator can resolve `kind: context_pack` startup_files
439
+ // entries at materialize time. Same instance is returned to deps
440
+ // below so /api/context-packs/* shares it.
441
+ const contextPackLibrary = (() => {
442
+ const userPacksRoot = getDefaultOpenRigPath("context-packs");
443
+ try {
444
+ fs.mkdirSync(userPacksRoot, { recursive: true });
445
+ }
446
+ catch { /* best-effort */ }
447
+ const roots = [
448
+ { path: userPacksRoot, sourceType: "user_file" },
449
+ ];
450
+ try {
451
+ const settingsStore = new ContextPackSettingsStore();
452
+ const cfg = settingsStore.resolveConfig();
453
+ const workspacePacksRoot = nodePath.join(cfg.workspaceRoot, ".openrig", "context-packs");
454
+ if (workspacePacksRoot !== userPacksRoot && fs.existsSync(workspacePacksRoot)) {
455
+ roots.push({ path: workspacePacksRoot, sourceType: "workspace" });
456
+ }
457
+ }
458
+ catch { /* settings unavailable; fall through with user-file root only */ }
459
+ const builtinPacksRoot = nodePath.resolve(import.meta.dirname, "../context-packs");
460
+ if (fs.existsSync(builtinPacksRoot)) {
461
+ roots.unshift({ path: builtinPacksRoot, sourceType: "builtin" });
462
+ }
463
+ const lib = new ContextPackLibraryService({ roots });
464
+ lib.scan();
465
+ return lib;
466
+ })();
467
+ // PL-016 Item 2 + Item 4: hoist AgentImageLibraryService construction
468
+ // so the PodRigInstantiator can resolve `session_source: mode:
469
+ // agent_image` at materialize time. Same instance returned to deps
470
+ // below so /api/agent-images/* + the SnapshotCapturer share it.
471
+ const agentImageRootBuilder = () => {
472
+ const userImagesRoot = getDefaultOpenRigPath("agent-images");
473
+ try {
474
+ fs.mkdirSync(userImagesRoot, { recursive: true });
475
+ }
476
+ catch { /* best-effort */ }
477
+ const roots = [
478
+ { path: userImagesRoot, sourceType: "user_file" },
479
+ ];
480
+ try {
481
+ const settingsStore = new ContextPackSettingsStore();
482
+ const cfg = settingsStore.resolveConfig();
483
+ const workspaceImagesRoot = nodePath.join(cfg.workspaceRoot, ".openrig", "agent-images");
484
+ if (workspaceImagesRoot !== userImagesRoot && fs.existsSync(workspaceImagesRoot)) {
485
+ roots.push({ path: workspaceImagesRoot, sourceType: "workspace" });
486
+ }
487
+ }
488
+ catch { /* settings unavailable */ }
489
+ return { userImagesRoot, roots };
490
+ };
491
+ const agentImageLibrary = (() => {
492
+ const { roots } = agentImageRootBuilder();
493
+ const lib = new AgentImageLibraryService({ roots });
494
+ lib.scan();
495
+ return lib;
496
+ })();
497
+ const snapshotCapturer = new SnapshotCapturer({
498
+ db,
499
+ rigRepo,
500
+ sessionRegistry,
501
+ agentImageLibrary,
502
+ targetRoot: getDefaultOpenRigPath("agent-images"),
503
+ });
313
504
  const podInstantiator = new PodRigInstantiator({
314
505
  db, rigRepo, podRepo,
315
506
  sessionRegistry, eventBus, nodeLauncher, startupOrchestrator,
316
507
  fsOps: { readFile: (p) => fs.readFileSync(p, "utf-8"), exists: (p) => fs.existsSync(p) },
317
508
  adapters: { "claude-code": claudeAdapter, "codex": codexAdapter, "terminal": new (await import("./adapters/terminal-adapter.js")).TerminalAdapter() },
318
509
  tmuxAdapter,
510
+ contextPackLibrary,
511
+ agentImageLibrary,
319
512
  });
320
513
  const podBundleSourceResolver = new PodBundleSourceResolver();
321
514
  const bootstrapOrchestrator = new BootstrapOrchestrator({
@@ -325,6 +518,55 @@ export async function createDaemon(opts) {
325
518
  bundleSourceResolver, podInstantiator, podBundleSourceResolver,
326
519
  serviceOrchestrator, rigRepo,
327
520
  });
521
+ // V0.3.1 slice 05 kernel-rig-as-default — auto-boot the kernel rig
522
+ // on daemon-start. Forward-fix #3 architectural: the bootstrap is
523
+ // FIRED in the background, not awaited. createDaemon completes as
524
+ // soon as the tracker is created so server.ts can bind healthz
525
+ // independent of kernel-agent readiness. A broken kernel agent no
526
+ // longer keeps the daemon HTTP surface from starting.
527
+ //
528
+ // Tracker state is exposed via /api/kernel/status (route below) and
529
+ // the CLI's `rig daemon start --wait-for-kernel` flag polls it.
530
+ // After the configurable degraded-timer window (default 90s; env
531
+ // override OPENRIG_KERNEL_DEGRADED_MS for ops + test fixtures), the
532
+ // tracker emits a single `kernel.agent.degraded` event for
533
+ // observability. The kernel rig is still the only rig the daemon
534
+ // auto-boots; other rigs require explicit operator-initiated
535
+ // `rig up` / `rig restore` per amended IMPL-PRD §16.2.
536
+ let kernelBootTracker;
537
+ try {
538
+ const { bootKernelIfNeeded } = await import("./domain/kernel-boot.js");
539
+ const degradedRaw = readOpenRigEnv("OPENRIG_KERNEL_DEGRADED_MS");
540
+ const degradedTimeoutMs = degradedRaw && /^\d+$/.test(degradedRaw)
541
+ ? parseInt(degradedRaw, 10)
542
+ : undefined;
543
+ kernelBootTracker = await bootKernelIfNeeded({
544
+ rigRepo,
545
+ sessionRegistry,
546
+ eventBus,
547
+ bootstrapOrchestrator,
548
+ specsDir: nodePath.resolve(nodePath.dirname(new URL(import.meta.url).pathname), "..", "specs"),
549
+ // V0.3.1 slice 05 — kernel members run against the operator's
550
+ // workspace, not the daemon installation tree. Without this
551
+ // cwdOverride, BootstrapOrchestrator refuses with
552
+ // "cwd is inside the OpenRig installation". Use the resolved
553
+ // workspace.root setting as the per-operator default.
554
+ cwdOverride: runtimeSettings.workspaceRoot,
555
+ degradedTimeoutMs,
556
+ });
557
+ try {
558
+ // eslint-disable-next-line no-console
559
+ console.log(`kernel-boot: tracker-state=${kernelBootTracker.getStatus().kernelState}`);
560
+ }
561
+ catch { /* logging must never throw */ }
562
+ }
563
+ catch (err) {
564
+ try {
565
+ // eslint-disable-next-line no-console
566
+ console.warn(`kernel-boot: skipped due to error: ${err instanceof Error ? err.message : String(err)}`);
567
+ }
568
+ catch { /* logging must never throw */ }
569
+ }
328
570
  // Discovery services
329
571
  const tmuxScanner = new TmuxDiscoveryScanner({ tmuxAdapter });
330
572
  const sessionFingerprinter = new SessionFingerprinter({
@@ -470,6 +712,7 @@ export async function createDaemon(opts) {
470
712
  contextUsageStore,
471
713
  serviceOrchestrator,
472
714
  composeAdapter,
715
+ kernelBootTracker,
473
716
  specReviewService,
474
717
  specLibraryService: (() => {
475
718
  const userSpecsRoot = getDefaultOpenRigPath("specs");
@@ -494,6 +737,56 @@ export async function createDaemon(opts) {
494
737
  lib.scan();
495
738
  return lib;
496
739
  })(),
740
+ // Phase 3a slice 3.3 — plugin discovery service.
741
+ // SC-29 EXCEPTION #8 verbatim: see packages/daemon/src/routes/plugins.ts
742
+ // header. Filesystem-scan over 3 source roots + agent.yaml-parse for
743
+ // used-by reverse query. No SQL; no mutation. Spec library directory
744
+ // for used-by uses the same default user spec root as SpecLibraryService
745
+ // above; one root at v0 (multi-root expansion deferred to a later slice
746
+ // when spec library hooks its full root list through to discovery).
747
+ // bug-fix slice plugin-discovery-respects-openrig-home: route the
748
+ // openrigPluginsDir through the OPENRIG_HOME-aware resolver so
749
+ // discovery + vendor (which already uses the helper at line 428)
750
+ // resolve to the same root. Operator-level test isolation + the
751
+ // slice 22 populated-VM-env story both depend on this symmetry.
752
+ // claudeCacheDir / codexCacheDir remain homedir-anchored because
753
+ // those cache locations belong to the runtime tools, not to the
754
+ // OpenRig state root.
755
+ pluginDiscoveryService: new PluginDiscoveryService({
756
+ openrigPluginsDir: getDefaultOpenRigPath("plugins"),
757
+ claudeCacheDir: nodePath.join(os.homedir(), ".claude", "plugins", "cache"),
758
+ codexCacheDir: nodePath.join(os.homedir(), ".codex", "plugins", "cache"),
759
+ specLibraryDir: getDefaultOpenRigPath("specs"),
760
+ }),
761
+ // Slice 28 Checkpoint C-3 — skillLibraryDiscoveryService is constructed
762
+ // AFTER filesAllowlist resolution below (deps.skillLibraryDiscoveryService
763
+ // assignment near filesAllowlist binding).
764
+ // PL-014 Item 6: same instance hoisted earlier so the
765
+ // PodRigInstantiator can resolve `kind: context_pack` startup_files
766
+ // entries — sharing the cache means /api/context-packs/* + the
767
+ // instantiator see consistent state.
768
+ contextPackLibrary,
769
+ // PL-016 — agent_image typed primitive. Shared library + capturer
770
+ // + spec-roots supplier across /api/agent-images/* and the
771
+ // PodRigInstantiator's session_source: mode: agent_image dispatch.
772
+ agentImageLibrary,
773
+ snapshotCapturer,
774
+ agentImageSpecRoots: () => {
775
+ // Spec-library roots scanned by the evidence guard. v0: user
776
+ // specs under ~/.openrig/specs + workspace-local specs root
777
+ // (from the SettingsStore-resolved workspace.specsRoot).
778
+ const userSpecsRoot = getDefaultOpenRigPath("specs");
779
+ const roots = [userSpecsRoot];
780
+ try {
781
+ const settingsStore = new ContextPackSettingsStore();
782
+ const cfg = settingsStore.resolveConfig();
783
+ if (cfg.workspaceSpecsRoot && cfg.workspaceSpecsRoot !== userSpecsRoot) {
784
+ roots.push(cfg.workspaceSpecsRoot);
785
+ }
786
+ }
787
+ catch { /* settings unavailable */ }
788
+ return roots;
789
+ },
497
790
  };
498
791
  // Copy bundled reference docs to ~/.openrig/reference/ so agents can find them at a stable path
499
792
  try {
@@ -528,6 +821,278 @@ export async function createDaemon(opts) {
528
821
  queueRepo: queueRepoForWorkflow,
529
822
  });
530
823
  deps.workflowRuntime = workflowRuntime;
824
+ // Seed built-in starter workflow_specs into the cache. Idempotent
825
+ // + workspace-surface-respecting — operator
826
+ // overrides at workspace paths are preserved (skip-if-cached).
827
+ // Errors are collected into the result for diagnostic logging but
828
+ // do NOT block startup; a malformed bundled spec should not bring
829
+ // the daemon down.
830
+ const { loadStarterWorkflowSpecs, defaultBuiltinSpecsDir } = await import("./domain/workflow/starter-spec-loader.js");
831
+ const builtinSpecsDir = defaultBuiltinSpecsDir();
832
+ const starterResult = loadStarterWorkflowSpecs({
833
+ cache: workflowRuntime.specCache,
834
+ builtinDir: builtinSpecsDir,
835
+ });
836
+ // Surface the resolved path to the routes layer so
837
+ // GET /api/workflow/specs can compute the per-row isBuiltIn flag.
838
+ deps.workflowBuiltinSpecsDir = builtinSpecsDir;
839
+ // Slice 11 (workflow-spec-folder-discovery) — expose the shared
840
+ // WorkflowSpecCache + the resolved workspace workflows folder so
841
+ // GET /api/specs/library can opportunistically discover operator-
842
+ // dropped YAML on each list request. Folder path is
843
+ // `<workspace.specs_root>/workflows`; SettingsStore resolves
844
+ // workspaceSpecsRoot from env > config > workspace-default.
845
+ deps.workflowSpecCache = workflowRuntime.specCache;
846
+ try {
847
+ const settingsStore = new ContextPackSettingsStore();
848
+ const cfg = settingsStore.resolveConfig();
849
+ if (cfg.workspaceSpecsRoot) {
850
+ deps.workflowsFolderDir = nodePath.join(cfg.workspaceSpecsRoot, "workflows");
851
+ }
852
+ }
853
+ catch { /* settings unavailable — folder scan stays disabled */ }
854
+ if (starterResult.errors.length > 0) {
855
+ console.warn(`[starter-spec-loader] ${starterResult.errors.length} spec(s) failed to load:`, starterResult.errors);
856
+ }
857
+ }
858
+ // PL-005 Phase A: Mission Control / Queue Observability services.
859
+ // Wired AFTER WorkflowRuntime so all PL-004 daemon-backed coordination
860
+ // surfaces are available. Mission Control reads from queue/view/stream
861
+ // surfaces and writes through the atomic 7-verb contract.
862
+ if (deps.queueRepo && deps.viewProjector) {
863
+ const mcActionLog = new MissionControlActionLog(db);
864
+ const mcWriteContract = new MissionControlWriteContract({
865
+ db,
866
+ eventBus,
867
+ queueRepo: deps.queueRepo,
868
+ actionLog: mcActionLog,
869
+ });
870
+ const mcFleetCliCapability = new MissionControlFleetCliCapability({
871
+ db,
872
+ eventBus,
873
+ rigRepo,
874
+ // R1 fix per guard PL-005 Phase A review: wire the production
875
+ // capability probe so /api/mission-control/cli-capabilities
876
+ // honestly reports drift when MISSION_CONTROL_DESIRED_FIELDS
877
+ // are missing from the local CLI's allow-list. Without this
878
+ // probe injection, the production path defaulted to a no-op
879
+ // that always reported staleCliCount=0 even when the audit-
880
+ // row-5 case (recoveryGuidance not in CLI allow-list) was
881
+ // present.
882
+ probeRig: makeLocalCliCapabilityProbe(),
883
+ });
884
+ // V0.3.1 slice 05 kernel-rig-as-default — cascade the resolved
885
+ // workspace.operator_seat_name setting into the mission-control
886
+ // read layer so my-queue routes to the operator's configured seat
887
+ // (default `operator-${USER}@kernel`) instead of the legacy
888
+ // hardcoded constant. The setting reads OPENRIG_WORKSPACE_OPERATOR_SEAT_NAME
889
+ // env var first, then ~/.openrig/config.json, then the derived
890
+ // default — same cascade as every other typed setting.
891
+ const mcReadLayer = new MissionControlReadLayer({
892
+ db,
893
+ queueRepo: deps.queueRepo,
894
+ viewProjector: deps.viewProjector,
895
+ streamStore: deps.streamStore,
896
+ fleetCliCapability: mcFleetCliCapability,
897
+ defaultOperatorSession: runtimeSettings.workspaceOperatorSeatName,
898
+ });
899
+ deps.missionControlActionLog = mcActionLog;
900
+ deps.missionControlWriteContract = mcWriteContract;
901
+ deps.missionControlFleetCliCapability = mcFleetCliCapability;
902
+ deps.missionControlReadLayer = mcReadLayer;
903
+ // PL-005 Phase B: audit-history browse layer (read-only) +
904
+ // notification dispatcher + bearer-token plumbing.
905
+ const mcAuditBrowse = new MissionControlAuditBrowse(db);
906
+ deps.missionControlAuditBrowse = mcAuditBrowse;
907
+ // Bearer token from createDaemon options is propagated to the
908
+ // routes constructor via deps so the auth middleware is mounted
909
+ // at route mount time (not per-request).
910
+ deps.missionControlBearerToken = opts?.bearerToken ?? null;
911
+ // Notification dispatcher: chosen mechanism via env config.
912
+ // OPENRIG_NOTIFICATIONS_MECHANISM=ntfy|webhook|none (default none).
913
+ // OPENRIG_NOTIFICATIONS_TARGET=<topic url | webhook url>.
914
+ // OPENRIG_NOTIFICATIONS_INCLUDE_VERB_COMPLETION=1 to opt into the
915
+ // verb-completion trigger (default off; only human-gate arrivals
916
+ // trigger by default per planner brief).
917
+ // No legacy alias for these env vars (new in Phase B).
918
+ const mechanism = process.env.OPENRIG_NOTIFICATIONS_MECHANISM ?? "none";
919
+ const target = process.env.OPENRIG_NOTIFICATIONS_TARGET ?? "";
920
+ const missionControlBaseUrl = process.env.OPENRIG_MISSION_CONTROL_BASE_URL ??
921
+ process.env.OPENRIG_URL ??
922
+ process.env.RIGGED_URL;
923
+ const includeVerbCompletion = process.env.OPENRIG_NOTIFICATIONS_INCLUDE_VERB_COMPLETION === "1";
924
+ if (mechanism !== "none" && target.length > 0) {
925
+ let adapter;
926
+ if (mechanism === "ntfy") {
927
+ adapter = new NtfyNotificationAdapter({ topicUrl: target });
928
+ }
929
+ else if (mechanism === "webhook") {
930
+ adapter = new WebhookNotificationAdapter({ endpointUrl: target });
931
+ }
932
+ else {
933
+ throw new Error(`OPENRIG_NOTIFICATIONS_MECHANISM='${mechanism}' is not recognized; supported: ntfy | webhook | none`);
934
+ }
935
+ const dispatcher = new MissionControlNotificationDispatcher({
936
+ db,
937
+ eventBus,
938
+ adapter,
939
+ includeVerbCompletion,
940
+ missionControlBaseUrl,
941
+ });
942
+ dispatcher.start();
943
+ deps.missionControlNotificationDispatcher = dispatcher;
944
+ }
945
+ }
946
+ // Slice Story View v0 — slice indexer + per-tab projector.
947
+ //
948
+ // User Settings v0 graduates `OPENRIG_SLICES_ROOT` env-var into the
949
+ // typed `workspace.slices_root` setting (resolution chain: env >
950
+ // config-file > default `<workspace.root>/missions`). Backward-compat:
951
+ // operators with OPENRIG_SLICES_ROOT set continue to work because the
952
+ // settings store reads env in the same resolution slot. Operators
953
+ // setting via `rig config set workspace.slices_root <path>` or via the
954
+ // System drawer Settings panel UI now flow through the indexer too —
955
+ // closes the PRD § Scenario B requirement that wasn't wired in v0.
956
+ //
957
+ // OPENRIG_SLICES_ROOT legacy short env var (still honored
958
+ // if set; preferred route is settings)
959
+ // OPENRIG_WORKSPACE_SLICES_ROOT typed-key env override
960
+ // workspace.slices_root typed setting in ~/.openrig/config.json
961
+ // workspace.root cascade fallback (default ~/.openrig/workspace)
962
+ // workspace.dogfood_evidence_root typed setting for proof packet assets
963
+ // OPENRIG_DOGFOOD_EVIDENCE_ROOT env override for compatibility
964
+ //
965
+ // When the resolved slicesRoot path doesn't exist on disk, the indexer
966
+ // is still constructed but isReady() returns false — the routes return
967
+ // a clear "slices_root_not_configured" 503 with a setup hint.
968
+ {
969
+ // Prefer the legacy short env var if explicitly set (existing
970
+ // dogfood / test daemons rely on it). Otherwise fall back to the
971
+ // settings-resolved path (env > file > default cascade inside
972
+ // SettingsStore). The SettingsStore is constructed locally here
973
+ // so the slices block doesn't depend on the User Settings v0 wiring
974
+ // block ordering further below.
975
+ const legacyEnvSlicesRoot = readOpenRigEnv("OPENRIG_SLICES_ROOT", "RIGGED_SLICES_ROOT") ?? "";
976
+ let resolvedSlicesRoot = "";
977
+ let resolvedWorkspaceRoot = "";
978
+ let resolvedDogfoodRoot = "";
979
+ if (!legacyEnvSlicesRoot) {
980
+ try {
981
+ const { SettingsStore: SettingsStoreCtor } = await import("./domain/user-settings/settings-store.js");
982
+ const resolvedConfig = new SettingsStoreCtor().resolveConfig();
983
+ resolvedSlicesRoot = resolvedConfig.workspaceSlicesRoot;
984
+ resolvedWorkspaceRoot = resolvedConfig.workspaceRoot;
985
+ resolvedDogfoodRoot = resolvedConfig.workspaceDogfoodEvidenceRoot;
986
+ }
987
+ catch {
988
+ // SettingsStore unavailable — keep slicesRoot empty; routes return 503.
989
+ }
990
+ }
991
+ else {
992
+ try {
993
+ const { SettingsStore: SettingsStoreCtor } = await import("./domain/user-settings/settings-store.js");
994
+ const resolvedConfig = new SettingsStoreCtor().resolveConfig();
995
+ resolvedDogfoodRoot = resolvedConfig.workspaceDogfoodEvidenceRoot;
996
+ }
997
+ catch {
998
+ // SettingsStore unavailable — proof packets remain disabled.
999
+ }
1000
+ }
1001
+ const slicesRoot = legacyEnvSlicesRoot || resolvedSlicesRoot;
1002
+ const additionalSliceRoots = resolvedWorkspaceRoot
1003
+ ? [
1004
+ nodePath.join(resolvedWorkspaceRoot, "missions"),
1005
+ nodePath.join(resolvedWorkspaceRoot, "slices"),
1006
+ ].filter((root) => root !== slicesRoot)
1007
+ : [];
1008
+ const { SliceIndexer } = await import("./domain/slices/slice-indexer.js");
1009
+ const { SliceDetailProjector } = await import("./domain/slices/slice-detail-projector.js");
1010
+ const sliceIndexer = new SliceIndexer({
1011
+ slicesRoot,
1012
+ additionalSliceRoots,
1013
+ dogfoodEvidenceRoot: resolvedDogfoodRoot || null,
1014
+ db,
1015
+ });
1016
+ // Slice Story View v1: pass workflowRuntime.specCache so the
1017
+ // projector can resolve a bound workflow_instance's spec for
1018
+ // spec-graph + phase + current-step projection. When the workflow
1019
+ // runtime is not constructed (queueRepo absent — same condition
1020
+ // already guards the workflowRuntime block above), the projector
1021
+ // silently degrades to v0 behavior (workflowBinding=null,
1022
+ // specGraph=null, phaseDefinitions=null, currentStep=null).
1023
+ const sliceDetailProjector = new SliceDetailProjector({
1024
+ db,
1025
+ indexer: sliceIndexer,
1026
+ workflowSpecCache: workflowRuntime?.specCache,
1027
+ });
1028
+ deps.sliceIndexer = sliceIndexer;
1029
+ deps.sliceDetailProjector = sliceDetailProjector;
1030
+ }
1031
+ // UI Enhancement Pack v0:
1032
+ // - file allowlist (item 3) from OPENRIG_FILES_ALLOWLIST
1033
+ // - atomic write service (item 4) wired only when allowlist non-empty
1034
+ // - progress scan-roots (item 1B) from OPENRIG_PROGRESS_SCAN_ROOTS
1035
+ //
1036
+ // Empty env → empty allowlist / no-roots indexer; routes return 503
1037
+ // with structured config hints so the UI can surface a setup message
1038
+ // instead of a generic error.
1039
+ {
1040
+ const { decodeAllowlist } = await import("./domain/files/path-safety.js");
1041
+ const { FileWriteService } = await import("./domain/files/file-write-service.js");
1042
+ const { ProgressIndexer, decodeProgressScanRoots } = await import("./domain/progress/progress-indexer.js");
1043
+ // User Settings v0 — UEP env-vars graduated to typed settings.
1044
+ // Resolution: env > settings file > empty. SettingsStore handles
1045
+ // the env > file > default precedence; we just decode the raw
1046
+ // string into structured roots.
1047
+ const { SettingsStore } = await import("./domain/user-settings/settings-store.js");
1048
+ const settingsStore = new SettingsStore();
1049
+ deps.settingsStore = settingsStore;
1050
+ const cfg = settingsStore.resolveConfig();
1051
+ // Preview Terminal v0 (PL-018) — per-session rate limiter for the
1052
+ // /preview route. 1-second window per (session, lines) cache key:
1053
+ // short enough that legitimate polling at the operator's refresh
1054
+ // interval (`ui.preview.refresh_interval_seconds`, default 3s) always
1055
+ // sees fresh content, but multiple pinned-pane requests for the same
1056
+ // seat within a single second collapse to one tmux capture.
1057
+ const { PreviewRateLimiter } = await import("./domain/preview/preview-rate-limiter.js");
1058
+ deps.previewRateLimiter = new PreviewRateLimiter(1000);
1059
+ const filesAllowlist = decodeAllowlist(cfg.filesAllowlistRaw);
1060
+ deps.filesAllowlist = filesAllowlist;
1061
+ deps.fileWriteService = filesAllowlist.length > 0
1062
+ ? new FileWriteService({
1063
+ allowlist: filesAllowlist,
1064
+ auditFilePath: nodePath.join(OPENRIG_HOME, "file-edit-audit.jsonl"),
1065
+ })
1066
+ : null;
1067
+ // Slice 28 Checkpoint C-3 — SkillLibraryDiscoveryService. sharedSkillsDir
1068
+ // resolves to the daemon's bundled `specs/agents/shared/skills/`
1069
+ // directory via import.meta.url (independent of operator allowlist
1070
+ // configuration; closes HG-5 on the founder-walk VM where the operator
1071
+ // allowlist doesn't include the daemon source tree). filesAllowlist
1072
+ // is also passed so workspace `.openrig/skills/` skills surface via
1073
+ // the same daemon endpoint.
1074
+ deps.skillLibraryDiscoveryService = new SkillLibraryDiscoveryService({
1075
+ sharedSkillsDir: nodePath.resolve(nodePath.dirname(new URL(import.meta.url).pathname), "..", "specs", "agents", "shared", "skills"),
1076
+ filesAllowlist,
1077
+ });
1078
+ deps.progressIndexer = new ProgressIndexer({ roots: decodeProgressScanRoots(cfg.progressScanRootsRaw) });
1079
+ // Operator Surface Reconciliation v0 — steering composer (item 1).
1080
+ // Reads typed workspace settings by default while preserving the
1081
+ // OPENRIG_STEERING_* env override family for non-canonical layouts.
1082
+ const { SteeringComposer, steeringOptsFromSettings } = await import("./domain/steering/steering-composer.js");
1083
+ deps.steeringComposer = new SteeringComposer(steeringOptsFromSettings({
1084
+ workspaceRoot: cfg.workspaceRoot,
1085
+ workspaceSteeringPath: cfg.workspaceSteeringPath,
1086
+ }));
1087
+ // Workflows in Spec Library + Activation Lens v0 — active lens
1088
+ // persistence under OPENRIG_HOME/active-workflow-lens.json. Same
1089
+ // file-backed pattern as UI Enhancement Pack v0's audit JSONL —
1090
+ // honors OPENRIG_HOME so isolated test/dogfood daemons keep their
1091
+ // own lens state instead of bleeding into the operator's host.
1092
+ const { ActiveLensStore } = await import("./domain/active-lens-store.js");
1093
+ deps.activeLensStore = new ActiveLensStore({
1094
+ filePath: nodePath.join(OPENRIG_HOME, "active-workflow-lens.json"),
1095
+ });
531
1096
  }
532
1097
  const sessionTransport = deps.sessionTransport;
533
1098
  if (sessionTransport) {
@@ -559,8 +1124,15 @@ export async function createDaemon(opts) {
559
1124
  }
560
1125
  // Context monitor — constructed before createApp so routes can access pollOnce for refresh.
561
1126
  // Caller (index.ts) starts polling after listen.
1127
+ // Slice 27: wire ClaudeCompactionEnforcer when sessionTransport is
1128
+ // available (it always is in the assembled deps; the conditional keeps
1129
+ // the type narrow for downstream consumers).
562
1130
  const { ContextMonitor } = await import("./domain/context-monitor.js");
563
- const contextMonitor = new ContextMonitor(db, contextUsageStore, claudeAdapter);
1131
+ const { ClaudeCompactionEnforcer } = await import("./domain/claude-compaction-enforcer.js");
1132
+ const compactionEnforcer = deps.sessionTransport
1133
+ ? new ClaudeCompactionEnforcer(new ContextPackSettingsStore(), deps.sessionTransport)
1134
+ : undefined;
1135
+ const contextMonitor = new ContextMonitor(db, contextUsageStore, claudeAdapter, compactionEnforcer);
564
1136
  deps.contextMonitor = contextMonitor;
565
1137
  const app = createApp(deps);
566
1138
  return { app, db, deps, contextMonitor };