@openrig/cli 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (469) hide show
  1. package/daemon/dist/adapters/claude-code-adapter.d.ts +10 -0
  2. package/daemon/dist/adapters/claude-code-adapter.d.ts.map +1 -1
  3. package/daemon/dist/adapters/claude-code-adapter.js +41 -3
  4. package/daemon/dist/adapters/claude-code-adapter.js.map +1 -1
  5. package/daemon/dist/builtins/workflow-specs/basic-loop.yaml +76 -0
  6. package/daemon/dist/builtins/workflow-specs/conveyor.yaml +80 -0
  7. package/daemon/dist/db/migrations/026_inbox_entries.d.ts +1 -1
  8. package/daemon/dist/db/migrations/026_inbox_entries.js +1 -1
  9. package/daemon/dist/db/migrations/029_classifier_leases.d.ts +1 -1
  10. package/daemon/dist/db/migrations/029_classifier_leases.js +1 -1
  11. package/daemon/dist/db/migrations/037_mission_control_actions.d.ts +51 -0
  12. package/daemon/dist/db/migrations/037_mission_control_actions.d.ts.map +1 -0
  13. package/daemon/dist/db/migrations/037_mission_control_actions.js +74 -0
  14. package/daemon/dist/db/migrations/037_mission_control_actions.js.map +1 -0
  15. package/daemon/dist/db/migrations/038_workspace_primitive.d.ts +16 -0
  16. package/daemon/dist/db/migrations/038_workspace_primitive.d.ts.map +1 -0
  17. package/daemon/dist/db/migrations/038_workspace_primitive.js +20 -0
  18. package/daemon/dist/db/migrations/038_workspace_primitive.js.map +1 -0
  19. package/daemon/dist/db/migrations/039_queue_target_repo.d.ts +16 -0
  20. package/daemon/dist/db/migrations/039_queue_target_repo.d.ts.map +1 -0
  21. package/daemon/dist/db/migrations/039_queue_target_repo.js +21 -0
  22. package/daemon/dist/db/migrations/039_queue_target_repo.js.map +1 -0
  23. package/daemon/dist/domain/active-lens-store.d.ts +23 -0
  24. package/daemon/dist/domain/active-lens-store.d.ts.map +1 -0
  25. package/daemon/dist/domain/active-lens-store.js +87 -0
  26. package/daemon/dist/domain/active-lens-store.js.map +1 -0
  27. package/daemon/dist/domain/agent-images/agent-image-library-service.d.ts +68 -0
  28. package/daemon/dist/domain/agent-images/agent-image-library-service.d.ts.map +1 -0
  29. package/daemon/dist/domain/agent-images/agent-image-library-service.js +339 -0
  30. package/daemon/dist/domain/agent-images/agent-image-library-service.js.map +1 -0
  31. package/daemon/dist/domain/agent-images/agent-image-types.d.ts +113 -0
  32. package/daemon/dist/domain/agent-images/agent-image-types.d.ts.map +1 -0
  33. package/daemon/dist/domain/agent-images/agent-image-types.js +24 -0
  34. package/daemon/dist/domain/agent-images/agent-image-types.js.map +1 -0
  35. package/daemon/dist/domain/agent-images/evidence-guard.d.ts +26 -0
  36. package/daemon/dist/domain/agent-images/evidence-guard.d.ts.map +1 -0
  37. package/daemon/dist/domain/agent-images/evidence-guard.js +185 -0
  38. package/daemon/dist/domain/agent-images/evidence-guard.js.map +1 -0
  39. package/daemon/dist/domain/agent-images/manifest-parser.d.ts +3 -0
  40. package/daemon/dist/domain/agent-images/manifest-parser.d.ts.map +1 -0
  41. package/daemon/dist/domain/agent-images/manifest-parser.js +114 -0
  42. package/daemon/dist/domain/agent-images/manifest-parser.js.map +1 -0
  43. package/daemon/dist/domain/agent-images/resume-token-discovery.d.ts +28 -0
  44. package/daemon/dist/domain/agent-images/resume-token-discovery.d.ts.map +1 -0
  45. package/daemon/dist/domain/agent-images/resume-token-discovery.js +83 -0
  46. package/daemon/dist/domain/agent-images/resume-token-discovery.js.map +1 -0
  47. package/daemon/dist/domain/agent-images/snapshot-capturer.d.ts +36 -0
  48. package/daemon/dist/domain/agent-images/snapshot-capturer.d.ts.map +1 -0
  49. package/daemon/dist/domain/agent-images/snapshot-capturer.js +58 -0
  50. package/daemon/dist/domain/agent-images/snapshot-capturer.js.map +1 -0
  51. package/daemon/dist/domain/agent-starter-resolver.d.ts +10 -16
  52. package/daemon/dist/domain/agent-starter-resolver.d.ts.map +1 -1
  53. package/daemon/dist/domain/agent-starter-resolver.js +11 -13
  54. package/daemon/dist/domain/agent-starter-resolver.js.map +1 -1
  55. package/daemon/dist/domain/classifier-lease-manager.d.ts +1 -1
  56. package/daemon/dist/domain/classifier-lease-manager.js +1 -1
  57. package/daemon/dist/domain/conflict-detector.d.ts.map +1 -1
  58. package/daemon/dist/domain/conflict-detector.js +6 -3
  59. package/daemon/dist/domain/conflict-detector.js.map +1 -1
  60. package/daemon/dist/domain/context-monitor.d.ts +5 -4
  61. package/daemon/dist/domain/context-monitor.d.ts.map +1 -1
  62. package/daemon/dist/domain/context-monitor.js +26 -11
  63. package/daemon/dist/domain/context-monitor.js.map +1 -1
  64. package/daemon/dist/domain/context-packs/bundle-assembler.d.ts +49 -0
  65. package/daemon/dist/domain/context-packs/bundle-assembler.d.ts.map +1 -0
  66. package/daemon/dist/domain/context-packs/bundle-assembler.js +81 -0
  67. package/daemon/dist/domain/context-packs/bundle-assembler.js.map +1 -0
  68. package/daemon/dist/domain/context-packs/context-pack-library-service.d.ts +41 -0
  69. package/daemon/dist/domain/context-packs/context-pack-library-service.d.ts.map +1 -0
  70. package/daemon/dist/domain/context-packs/context-pack-library-service.js +148 -0
  71. package/daemon/dist/domain/context-packs/context-pack-library-service.js.map +1 -0
  72. package/daemon/dist/domain/context-packs/context-pack-types.d.ts +64 -0
  73. package/daemon/dist/domain/context-packs/context-pack-types.d.ts.map +1 -0
  74. package/daemon/dist/domain/context-packs/context-pack-types.js +22 -0
  75. package/daemon/dist/domain/context-packs/context-pack-types.js.map +1 -0
  76. package/daemon/dist/domain/context-packs/manifest-parser.d.ts +3 -0
  77. package/daemon/dist/domain/context-packs/manifest-parser.d.ts.map +1 -0
  78. package/daemon/dist/domain/context-packs/manifest-parser.js +74 -0
  79. package/daemon/dist/domain/context-packs/manifest-parser.js.map +1 -0
  80. package/daemon/dist/domain/context-usage-store.d.ts +14 -1
  81. package/daemon/dist/domain/context-usage-store.d.ts.map +1 -1
  82. package/daemon/dist/domain/context-usage-store.js +156 -1
  83. package/daemon/dist/domain/context-usage-store.js.map +1 -1
  84. package/daemon/dist/domain/files/file-write-service.d.ts +61 -0
  85. package/daemon/dist/domain/files/file-write-service.d.ts.map +1 -0
  86. package/daemon/dist/domain/files/file-write-service.js +180 -0
  87. package/daemon/dist/domain/files/file-write-service.js.map +1 -0
  88. package/daemon/dist/domain/files/path-safety.d.ts +47 -0
  89. package/daemon/dist/domain/files/path-safety.d.ts.map +1 -0
  90. package/daemon/dist/domain/files/path-safety.js +176 -0
  91. package/daemon/dist/domain/files/path-safety.js.map +1 -0
  92. package/daemon/dist/domain/graph-projection.d.ts +14 -1
  93. package/daemon/dist/domain/graph-projection.d.ts.map +1 -1
  94. package/daemon/dist/domain/graph-projection.js +8 -0
  95. package/daemon/dist/domain/graph-projection.js.map +1 -1
  96. package/daemon/dist/domain/install-engine.d.ts.map +1 -1
  97. package/daemon/dist/domain/install-engine.js +22 -6
  98. package/daemon/dist/domain/install-engine.js.map +1 -1
  99. package/daemon/dist/domain/install-verifier.d.ts.map +1 -1
  100. package/daemon/dist/domain/install-verifier.js +10 -5
  101. package/daemon/dist/domain/install-verifier.js.map +1 -1
  102. package/daemon/dist/domain/managed-blocks.d.ts.map +1 -1
  103. package/daemon/dist/domain/managed-blocks.js +22 -3
  104. package/daemon/dist/domain/managed-blocks.js.map +1 -1
  105. package/daemon/dist/domain/mission-control/audit-browse.d.ts +26 -0
  106. package/daemon/dist/domain/mission-control/audit-browse.d.ts.map +1 -0
  107. package/daemon/dist/domain/mission-control/audit-browse.js +101 -0
  108. package/daemon/dist/domain/mission-control/audit-browse.js.map +1 -0
  109. package/daemon/dist/domain/mission-control/mission-control-action-log.d.ts +51 -0
  110. package/daemon/dist/domain/mission-control/mission-control-action-log.d.ts.map +1 -0
  111. package/daemon/dist/domain/mission-control/mission-control-action-log.js +124 -0
  112. package/daemon/dist/domain/mission-control/mission-control-action-log.js.map +1 -0
  113. package/daemon/dist/domain/mission-control/mission-control-fleet-cli-capability.d.ts +131 -0
  114. package/daemon/dist/domain/mission-control/mission-control-fleet-cli-capability.d.ts.map +1 -0
  115. package/daemon/dist/domain/mission-control/mission-control-fleet-cli-capability.js +232 -0
  116. package/daemon/dist/domain/mission-control/mission-control-fleet-cli-capability.js.map +1 -0
  117. package/daemon/dist/domain/mission-control/mission-control-read-layer.d.ts +85 -0
  118. package/daemon/dist/domain/mission-control/mission-control-read-layer.d.ts.map +1 -0
  119. package/daemon/dist/domain/mission-control/mission-control-read-layer.js +265 -0
  120. package/daemon/dist/domain/mission-control/mission-control-read-layer.js.map +1 -0
  121. package/daemon/dist/domain/mission-control/mission-control-write-contract.d.ts +69 -0
  122. package/daemon/dist/domain/mission-control/mission-control-write-contract.d.ts.map +1 -0
  123. package/daemon/dist/domain/mission-control/mission-control-write-contract.js +300 -0
  124. package/daemon/dist/domain/mission-control/mission-control-write-contract.js.map +1 -0
  125. package/daemon/dist/domain/mission-control/notification-adapter-ntfy.d.ts +18 -0
  126. package/daemon/dist/domain/mission-control/notification-adapter-ntfy.d.ts.map +1 -0
  127. package/daemon/dist/domain/mission-control/notification-adapter-ntfy.js +48 -0
  128. package/daemon/dist/domain/mission-control/notification-adapter-ntfy.js.map +1 -0
  129. package/daemon/dist/domain/mission-control/notification-adapter-types.d.ts +25 -0
  130. package/daemon/dist/domain/mission-control/notification-adapter-types.d.ts.map +1 -0
  131. package/daemon/dist/domain/mission-control/notification-adapter-types.js +7 -0
  132. package/daemon/dist/domain/mission-control/notification-adapter-types.js.map +1 -0
  133. package/daemon/dist/domain/mission-control/notification-adapter-webhook.d.ts +27 -0
  134. package/daemon/dist/domain/mission-control/notification-adapter-webhook.d.ts.map +1 -0
  135. package/daemon/dist/domain/mission-control/notification-adapter-webhook.js +47 -0
  136. package/daemon/dist/domain/mission-control/notification-adapter-webhook.js.map +1 -0
  137. package/daemon/dist/domain/mission-control/notification-dispatcher.d.ts +53 -0
  138. package/daemon/dist/domain/mission-control/notification-dispatcher.d.ts.map +1 -0
  139. package/daemon/dist/domain/mission-control/notification-dispatcher.js +181 -0
  140. package/daemon/dist/domain/mission-control/notification-dispatcher.js.map +1 -0
  141. package/daemon/dist/domain/node-inventory.d.ts.map +1 -1
  142. package/daemon/dist/domain/node-inventory.js +24 -0
  143. package/daemon/dist/domain/node-inventory.js.map +1 -1
  144. package/daemon/dist/domain/node-launcher.d.ts.map +1 -1
  145. package/daemon/dist/domain/node-launcher.js +7 -5
  146. package/daemon/dist/domain/node-launcher.js.map +1 -1
  147. package/daemon/dist/domain/preview/preview-rate-limiter.d.ts +20 -0
  148. package/daemon/dist/domain/preview/preview-rate-limiter.d.ts.map +1 -0
  149. package/daemon/dist/domain/preview/preview-rate-limiter.js +46 -0
  150. package/daemon/dist/domain/preview/preview-rate-limiter.js.map +1 -0
  151. package/daemon/dist/domain/profile-resolver.d.ts +5 -0
  152. package/daemon/dist/domain/profile-resolver.d.ts.map +1 -1
  153. package/daemon/dist/domain/profile-resolver.js +62 -8
  154. package/daemon/dist/domain/profile-resolver.js.map +1 -1
  155. package/daemon/dist/domain/progress/progress-indexer.d.ts +73 -0
  156. package/daemon/dist/domain/progress/progress-indexer.d.ts.map +1 -0
  157. package/daemon/dist/domain/progress/progress-indexer.js +210 -0
  158. package/daemon/dist/domain/progress/progress-indexer.js.map +1 -0
  159. package/daemon/dist/domain/project-classifier.d.ts +1 -1
  160. package/daemon/dist/domain/queue-repository.d.ts +22 -4
  161. package/daemon/dist/domain/queue-repository.d.ts.map +1 -1
  162. package/daemon/dist/domain/queue-repository.js +80 -22
  163. package/daemon/dist/domain/queue-repository.js.map +1 -1
  164. package/daemon/dist/domain/rehydrate-eligibility.d.ts +16 -0
  165. package/daemon/dist/domain/rehydrate-eligibility.d.ts.map +1 -0
  166. package/daemon/dist/domain/rehydrate-eligibility.js +43 -0
  167. package/daemon/dist/domain/rehydrate-eligibility.js.map +1 -0
  168. package/daemon/dist/domain/restore-check-service.d.ts.map +1 -1
  169. package/daemon/dist/domain/restore-check-service.js +19 -6
  170. package/daemon/dist/domain/restore-check-service.js.map +1 -1
  171. package/daemon/dist/domain/restore-orchestrator.d.ts.map +1 -1
  172. package/daemon/dist/domain/restore-orchestrator.js +4 -2
  173. package/daemon/dist/domain/restore-orchestrator.js.map +1 -1
  174. package/daemon/dist/domain/rig-repository.d.ts +14 -0
  175. package/daemon/dist/domain/rig-repository.d.ts.map +1 -1
  176. package/daemon/dist/domain/rig-repository.js +41 -0
  177. package/daemon/dist/domain/rig-repository.js.map +1 -1
  178. package/daemon/dist/domain/rig-teardown.d.ts.map +1 -1
  179. package/daemon/dist/domain/rig-teardown.js +5 -0
  180. package/daemon/dist/domain/rig-teardown.js.map +1 -1
  181. package/daemon/dist/domain/rigspec-codec.d.ts.map +1 -1
  182. package/daemon/dist/domain/rigspec-codec.js +15 -0
  183. package/daemon/dist/domain/rigspec-codec.js.map +1 -1
  184. package/daemon/dist/domain/rigspec-instantiator.d.ts +29 -0
  185. package/daemon/dist/domain/rigspec-instantiator.d.ts.map +1 -1
  186. package/daemon/dist/domain/rigspec-instantiator.js +136 -4
  187. package/daemon/dist/domain/rigspec-instantiator.js.map +1 -1
  188. package/daemon/dist/domain/rigspec-schema.d.ts.map +1 -1
  189. package/daemon/dist/domain/rigspec-schema.js +157 -4
  190. package/daemon/dist/domain/rigspec-schema.js.map +1 -1
  191. package/daemon/dist/domain/runtime-adapter.d.ts +11 -0
  192. package/daemon/dist/domain/runtime-adapter.d.ts.map +1 -1
  193. package/daemon/dist/domain/runtime-adapter.js.map +1 -1
  194. package/daemon/dist/domain/skill-discovery.d.ts +51 -0
  195. package/daemon/dist/domain/skill-discovery.d.ts.map +1 -0
  196. package/daemon/dist/domain/skill-discovery.js +144 -0
  197. package/daemon/dist/domain/skill-discovery.js.map +1 -0
  198. package/daemon/dist/domain/slices/slice-detail-projector.d.ts +182 -0
  199. package/daemon/dist/domain/slices/slice-detail-projector.d.ts.map +1 -0
  200. package/daemon/dist/domain/slices/slice-detail-projector.js +508 -0
  201. package/daemon/dist/domain/slices/slice-detail-projector.js.map +1 -0
  202. package/daemon/dist/domain/slices/slice-indexer.d.ts +118 -0
  203. package/daemon/dist/domain/slices/slice-indexer.d.ts.map +1 -0
  204. package/daemon/dist/domain/slices/slice-indexer.js +503 -0
  205. package/daemon/dist/domain/slices/slice-indexer.js.map +1 -0
  206. package/daemon/dist/domain/spec-library-service.d.ts +17 -2
  207. package/daemon/dist/domain/spec-library-service.d.ts.map +1 -1
  208. package/daemon/dist/domain/spec-library-service.js +31 -1
  209. package/daemon/dist/domain/spec-library-service.js.map +1 -1
  210. package/daemon/dist/domain/spec-library-workflow-scanner.d.ts +81 -0
  211. package/daemon/dist/domain/spec-library-workflow-scanner.d.ts.map +1 -0
  212. package/daemon/dist/domain/spec-library-workflow-scanner.js +171 -0
  213. package/daemon/dist/domain/spec-library-workflow-scanner.js.map +1 -0
  214. package/daemon/dist/domain/startup-validation.d.ts.map +1 -1
  215. package/daemon/dist/domain/startup-validation.js +57 -11
  216. package/daemon/dist/domain/startup-validation.js.map +1 -1
  217. package/daemon/dist/domain/steering/health-summary.d.ts +39 -0
  218. package/daemon/dist/domain/steering/health-summary.d.ts.map +1 -0
  219. package/daemon/dist/domain/steering/health-summary.js +100 -0
  220. package/daemon/dist/domain/steering/health-summary.js.map +1 -0
  221. package/daemon/dist/domain/steering/steering-composer.d.ts +102 -0
  222. package/daemon/dist/domain/steering/steering-composer.d.ts.map +1 -0
  223. package/daemon/dist/domain/steering/steering-composer.js +263 -0
  224. package/daemon/dist/domain/steering/steering-composer.js.map +1 -0
  225. package/daemon/dist/domain/transcript-capture.d.ts.map +1 -1
  226. package/daemon/dist/domain/transcript-capture.js +7 -4
  227. package/daemon/dist/domain/transcript-capture.js.map +1 -1
  228. package/daemon/dist/domain/transcript-rotation.d.ts +29 -0
  229. package/daemon/dist/domain/transcript-rotation.d.ts.map +1 -0
  230. package/daemon/dist/domain/transcript-rotation.js +109 -0
  231. package/daemon/dist/domain/transcript-rotation.js.map +1 -0
  232. package/daemon/dist/domain/transcript-store.d.ts.map +1 -1
  233. package/daemon/dist/domain/transcript-store.js +7 -1
  234. package/daemon/dist/domain/transcript-store.js.map +1 -1
  235. package/daemon/dist/domain/types.d.ts +101 -2
  236. package/daemon/dist/domain/types.d.ts.map +1 -1
  237. package/daemon/dist/domain/types.js +8 -1
  238. package/daemon/dist/domain/types.js.map +1 -1
  239. package/daemon/dist/domain/user-settings/settings-store.d.ts +42 -0
  240. package/daemon/dist/domain/user-settings/settings-store.d.ts.map +1 -0
  241. package/daemon/dist/domain/user-settings/settings-store.js +364 -0
  242. package/daemon/dist/domain/user-settings/settings-store.js.map +1 -0
  243. package/daemon/dist/domain/view-event-bridge.d.ts.map +1 -1
  244. package/daemon/dist/domain/view-event-bridge.js +2 -3
  245. package/daemon/dist/domain/view-event-bridge.js.map +1 -1
  246. package/daemon/dist/domain/whoami-service.d.ts +29 -0
  247. package/daemon/dist/domain/whoami-service.d.ts.map +1 -1
  248. package/daemon/dist/domain/whoami-service.js +68 -0
  249. package/daemon/dist/domain/whoami-service.js.map +1 -1
  250. package/daemon/dist/domain/workflow/slice-workflow-binding.d.ts +21 -0
  251. package/daemon/dist/domain/workflow/slice-workflow-binding.d.ts.map +1 -0
  252. package/daemon/dist/domain/workflow/slice-workflow-binding.js +103 -0
  253. package/daemon/dist/domain/workflow/slice-workflow-binding.js.map +1 -0
  254. package/daemon/dist/domain/workflow/slice-workflow-projection.d.ts +81 -0
  255. package/daemon/dist/domain/workflow/slice-workflow-projection.d.ts.map +1 -0
  256. package/daemon/dist/domain/workflow/slice-workflow-projection.js +127 -0
  257. package/daemon/dist/domain/workflow/slice-workflow-projection.js.map +1 -0
  258. package/daemon/dist/domain/workflow/starter-spec-loader.d.ts +51 -0
  259. package/daemon/dist/domain/workflow/starter-spec-loader.d.ts.map +1 -0
  260. package/daemon/dist/domain/workflow/starter-spec-loader.js +140 -0
  261. package/daemon/dist/domain/workflow/starter-spec-loader.js.map +1 -0
  262. package/daemon/dist/domain/workflow-projector.js +11 -3
  263. package/daemon/dist/domain/workflow-projector.js.map +1 -1
  264. package/daemon/dist/domain/workflow-spec-cache.d.ts +7 -0
  265. package/daemon/dist/domain/workflow-spec-cache.d.ts.map +1 -1
  266. package/daemon/dist/domain/workflow-spec-cache.js +62 -15
  267. package/daemon/dist/domain/workflow-spec-cache.js.map +1 -1
  268. package/daemon/dist/domain/workspace/default-workspace-scaffold.d.ts +6 -0
  269. package/daemon/dist/domain/workspace/default-workspace-scaffold.d.ts.map +1 -0
  270. package/daemon/dist/domain/workspace/default-workspace-scaffold.js +207 -0
  271. package/daemon/dist/domain/workspace/default-workspace-scaffold.js.map +1 -0
  272. package/daemon/dist/domain/workspace/frontmatter-validator.d.ts +40 -0
  273. package/daemon/dist/domain/workspace/frontmatter-validator.d.ts.map +1 -0
  274. package/daemon/dist/domain/workspace/frontmatter-validator.js +185 -0
  275. package/daemon/dist/domain/workspace/frontmatter-validator.js.map +1 -0
  276. package/daemon/dist/domain/workspace/workspace-resolver.d.ts +25 -0
  277. package/daemon/dist/domain/workspace/workspace-resolver.d.ts.map +1 -0
  278. package/daemon/dist/domain/workspace/workspace-resolver.js +86 -0
  279. package/daemon/dist/domain/workspace/workspace-resolver.js.map +1 -0
  280. package/daemon/dist/index.d.ts.map +1 -1
  281. package/daemon/dist/index.js +10 -1
  282. package/daemon/dist/index.js.map +1 -1
  283. package/daemon/dist/middleware/auth-bearer-token.d.ts +49 -0
  284. package/daemon/dist/middleware/auth-bearer-token.d.ts.map +1 -0
  285. package/daemon/dist/middleware/auth-bearer-token.js +135 -0
  286. package/daemon/dist/middleware/auth-bearer-token.js.map +1 -0
  287. package/daemon/dist/openrig-compat.d.ts +1 -1
  288. package/daemon/dist/openrig-compat.d.ts.map +1 -1
  289. package/daemon/dist/openrig-compat.js +6 -4
  290. package/daemon/dist/openrig-compat.js.map +1 -1
  291. package/daemon/dist/routes/agent-images.d.ts +8 -0
  292. package/daemon/dist/routes/agent-images.d.ts.map +1 -0
  293. package/daemon/dist/routes/agent-images.js +253 -0
  294. package/daemon/dist/routes/agent-images.js.map +1 -0
  295. package/daemon/dist/routes/config.d.ts +3 -0
  296. package/daemon/dist/routes/config.d.ts.map +1 -0
  297. package/daemon/dist/routes/config.js +109 -0
  298. package/daemon/dist/routes/config.js.map +1 -0
  299. package/daemon/dist/routes/context-packs.d.ts +3 -0
  300. package/daemon/dist/routes/context-packs.d.ts.map +1 -0
  301. package/daemon/dist/routes/context-packs.js +129 -0
  302. package/daemon/dist/routes/context-packs.js.map +1 -0
  303. package/daemon/dist/routes/files.d.ts +17 -0
  304. package/daemon/dist/routes/files.d.ts.map +1 -0
  305. package/daemon/dist/routes/files.js +262 -0
  306. package/daemon/dist/routes/files.js.map +1 -0
  307. package/daemon/dist/routes/health-summary.d.ts +9 -0
  308. package/daemon/dist/routes/health-summary.d.ts.map +1 -0
  309. package/daemon/dist/routes/health-summary.js +33 -0
  310. package/daemon/dist/routes/health-summary.js.map +1 -0
  311. package/daemon/dist/routes/mission-control.d.ts +37 -0
  312. package/daemon/dist/routes/mission-control.d.ts.map +1 -0
  313. package/daemon/dist/routes/mission-control.js +283 -0
  314. package/daemon/dist/routes/mission-control.js.map +1 -0
  315. package/daemon/dist/routes/progress.d.ts +7 -0
  316. package/daemon/dist/routes/progress.d.ts.map +1 -0
  317. package/daemon/dist/routes/progress.js +33 -0
  318. package/daemon/dist/routes/progress.js.map +1 -0
  319. package/daemon/dist/routes/queue.d.ts.map +1 -1
  320. package/daemon/dist/routes/queue.js +52 -1
  321. package/daemon/dist/routes/queue.js.map +1 -1
  322. package/daemon/dist/routes/rigs.d.ts +3 -0
  323. package/daemon/dist/routes/rigs.d.ts.map +1 -1
  324. package/daemon/dist/routes/rigs.js +73 -7
  325. package/daemon/dist/routes/rigs.js.map +1 -1
  326. package/daemon/dist/routes/rigspec.js +6 -3
  327. package/daemon/dist/routes/rigspec.js.map +1 -1
  328. package/daemon/dist/routes/sessions.d.ts.map +1 -1
  329. package/daemon/dist/routes/sessions.js +119 -0
  330. package/daemon/dist/routes/sessions.js.map +1 -1
  331. package/daemon/dist/routes/slices.d.ts +9 -0
  332. package/daemon/dist/routes/slices.d.ts.map +1 -0
  333. package/daemon/dist/routes/slices.js +192 -0
  334. package/daemon/dist/routes/slices.js.map +1 -0
  335. package/daemon/dist/routes/spec-library.d.ts.map +1 -1
  336. package/daemon/dist/routes/spec-library.js +72 -5
  337. package/daemon/dist/routes/spec-library.js.map +1 -1
  338. package/daemon/dist/routes/steering.d.ts +7 -0
  339. package/daemon/dist/routes/steering.d.ts.map +1 -0
  340. package/daemon/dist/routes/steering.js +27 -0
  341. package/daemon/dist/routes/steering.js.map +1 -0
  342. package/daemon/dist/routes/up.d.ts.map +1 -1
  343. package/daemon/dist/routes/up.js +21 -3
  344. package/daemon/dist/routes/up.js.map +1 -1
  345. package/daemon/dist/routes/whoami.d.ts.map +1 -1
  346. package/daemon/dist/routes/whoami.js +6 -1
  347. package/daemon/dist/routes/whoami.js.map +1 -1
  348. package/daemon/dist/routes/workflow.d.ts.map +1 -1
  349. package/daemon/dist/routes/workflow.js +43 -0
  350. package/daemon/dist/routes/workflow.js.map +1 -1
  351. package/daemon/dist/routes/workspace.d.ts +3 -0
  352. package/daemon/dist/routes/workspace.d.ts.map +1 -0
  353. package/daemon/dist/routes/workspace.js +53 -0
  354. package/daemon/dist/routes/workspace.js.map +1 -0
  355. package/daemon/dist/server.d.ts +51 -0
  356. package/daemon/dist/server.d.ts.map +1 -1
  357. package/daemon/dist/server.js +52 -1
  358. package/daemon/dist/server.js.map +1 -1
  359. package/daemon/dist/startup.d.ts +9 -0
  360. package/daemon/dist/startup.d.ts.map +1 -1
  361. package/daemon/dist/startup.js +385 -2
  362. package/daemon/dist/startup.js.map +1 -1
  363. package/daemon/docs/reference/agent-spec.md +7 -7
  364. package/daemon/docs/reference/agent-startup-guide.md +2 -2
  365. package/daemon/docs/reference/project-workspace.md +102 -0
  366. package/daemon/specs/agents/apps/vault-specialist/agent.yaml +1 -1
  367. package/daemon/specs/agents/apps/vault-specialist/guidance/role.md +0 -1
  368. package/daemon/specs/agents/conveyor/builder/agent.yaml +35 -0
  369. package/daemon/specs/agents/conveyor/builder/guidance/role.md +31 -0
  370. package/daemon/specs/agents/conveyor/builder/startup/context.md +9 -0
  371. package/daemon/specs/agents/conveyor/lead/agent.yaml +35 -0
  372. package/daemon/specs/agents/conveyor/lead/guidance/role.md +34 -0
  373. package/daemon/specs/agents/conveyor/lead/startup/context.md +15 -0
  374. package/daemon/specs/agents/conveyor/planner/agent.yaml +35 -0
  375. package/daemon/specs/agents/conveyor/planner/guidance/role.md +29 -0
  376. package/daemon/specs/agents/conveyor/planner/startup/context.md +12 -0
  377. package/daemon/specs/agents/conveyor/reviewer/agent.yaml +35 -0
  378. package/daemon/specs/agents/conveyor/reviewer/guidance/role.md +29 -0
  379. package/daemon/specs/agents/conveyor/reviewer/startup/context.md +10 -0
  380. package/daemon/specs/agents/development/implementer/agent.yaml +1 -1
  381. package/daemon/specs/agents/development/implementer/guidance/role.md +0 -1
  382. package/daemon/specs/agents/orchestration/orchestrator/agent.yaml +1 -1
  383. package/daemon/specs/agents/orchestration/orchestrator/guidance/role.md +2 -3
  384. package/daemon/specs/agents/shared/agent.yaml +0 -2
  385. package/daemon/specs/agents/shared/skills/core/openrig-user/SKILL.md +25 -0
  386. package/daemon/specs/agents/shared/skills/core/openrig-user-settings/SKILL.md +153 -0
  387. package/daemon/specs/agents/shared/skills/rig-architect/SKILL.md +1 -1
  388. package/daemon/specs/rigs/launch/conveyor/CULTURE.md +34 -0
  389. package/daemon/specs/rigs/launch/conveyor/README.md +33 -0
  390. package/daemon/specs/rigs/launch/conveyor/rig.yaml +72 -0
  391. package/daemon/specs/rigs/preview/product-team/CULTURE.md +2 -2
  392. package/daemon/specs/rigs/preview/product-team/rig.yaml +3 -4
  393. package/dist/commands/agent-image.d.ts +4 -0
  394. package/dist/commands/agent-image.d.ts.map +1 -0
  395. package/dist/commands/agent-image.js +352 -0
  396. package/dist/commands/agent-image.js.map +1 -0
  397. package/dist/commands/config-init-workspace.d.ts +35 -0
  398. package/dist/commands/config-init-workspace.d.ts.map +1 -0
  399. package/dist/commands/config-init-workspace.js +300 -0
  400. package/dist/commands/config-init-workspace.js.map +1 -0
  401. package/dist/commands/config.d.ts.map +1 -1
  402. package/dist/commands/config.js +78 -18
  403. package/dist/commands/config.js.map +1 -1
  404. package/dist/commands/context-pack.d.ts +4 -0
  405. package/dist/commands/context-pack.d.ts.map +1 -0
  406. package/dist/commands/context-pack.js +357 -0
  407. package/dist/commands/context-pack.js.map +1 -0
  408. package/dist/commands/daemon.d.ts.map +1 -1
  409. package/dist/commands/daemon.js +8 -0
  410. package/dist/commands/daemon.js.map +1 -1
  411. package/dist/commands/import.d.ts.map +1 -1
  412. package/dist/commands/import.js +7 -2
  413. package/dist/commands/import.js.map +1 -1
  414. package/dist/commands/ps.d.ts.map +1 -1
  415. package/dist/commands/ps.js +173 -14
  416. package/dist/commands/ps.js.map +1 -1
  417. package/dist/commands/queue.d.ts.map +1 -1
  418. package/dist/commands/queue.js +9 -0
  419. package/dist/commands/queue.js.map +1 -1
  420. package/dist/commands/send.d.ts +7 -0
  421. package/dist/commands/send.d.ts.map +1 -1
  422. package/dist/commands/send.js +24 -1
  423. package/dist/commands/send.js.map +1 -1
  424. package/dist/commands/specs.d.ts +4 -2
  425. package/dist/commands/specs.d.ts.map +1 -1
  426. package/dist/commands/specs.js +12 -8
  427. package/dist/commands/specs.js.map +1 -1
  428. package/dist/commands/up.d.ts.map +1 -1
  429. package/dist/commands/up.js +17 -3
  430. package/dist/commands/up.js.map +1 -1
  431. package/dist/commands/whoami.d.ts.map +1 -1
  432. package/dist/commands/whoami.js +9 -4
  433. package/dist/commands/whoami.js.map +1 -1
  434. package/dist/commands/workflow.d.ts.map +1 -1
  435. package/dist/commands/workflow.js +37 -0
  436. package/dist/commands/workflow.js.map +1 -1
  437. package/dist/commands/workspace.d.ts +6 -0
  438. package/dist/commands/workspace.d.ts.map +1 -0
  439. package/dist/commands/workspace.js +83 -0
  440. package/dist/commands/workspace.js.map +1 -0
  441. package/dist/config-store.d.ts +73 -1
  442. package/dist/config-store.d.ts.map +1 -1
  443. package/dist/config-store.js +314 -42
  444. package/dist/config-store.js.map +1 -1
  445. package/dist/daemon-lifecycle.d.ts +22 -0
  446. package/dist/daemon-lifecycle.d.ts.map +1 -1
  447. package/dist/daemon-lifecycle.js +41 -0
  448. package/dist/daemon-lifecycle.js.map +1 -1
  449. package/dist/index.d.ts +4 -0
  450. package/dist/index.d.ts.map +1 -1
  451. package/dist/index.js +6 -0
  452. package/dist/index.js.map +1 -1
  453. package/dist/openrig-compat.d.ts +1 -1
  454. package/dist/openrig-compat.d.ts.map +1 -1
  455. package/dist/openrig-compat.js +6 -4
  456. package/dist/openrig-compat.js.map +1 -1
  457. package/dist/restore-packet/claude-transcript-parser.js +1 -1
  458. package/dist/restore-packet/claude-transcript-parser.js.map +1 -1
  459. package/dist/restore-packet/codex-jsonl-parser.js +1 -1
  460. package/dist/restore-packet/codex-jsonl-parser.js.map +1 -1
  461. package/package.json +2 -2
  462. package/ui/dist/assets/index-BDHU1JUK.js +412 -0
  463. package/ui/dist/assets/index-DXTyJSqu.css +1 -0
  464. package/ui/dist/graphics/operator-climber-monochrome.png +0 -0
  465. package/ui/dist/index.html +3 -2
  466. package/daemon/specs/agents/shared/skills/mental-model-ha/SKILL.md +0 -956
  467. package/ui/dist/assets/index-B09doO8H.js +0 -139
  468. package/ui/dist/assets/index-Dec25siz.css +0 -1
  469. package/ui/dist/assets/index-GNYaWmBj.js +0 -225
@@ -0,0 +1 @@
1
+ {"version":3,"file":"039_queue_target_repo.d.ts","sourceRoot":"","sources":["../../../src/db/migrations/039_queue_target_repo.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE/C;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,qBAAqB,EAAE,SAMnC,CAAC"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * PL-007 Workspace Primitive v0 — queue_items.target_repo column.
3
+ *
4
+ * Adds `target_repo TEXT` to the queue_items table. Carries the
5
+ * per-item typed repo scope when an operator passes
6
+ * `rigx queue create --target-repo <name>` etc. Validated at the
7
+ * route layer against the source rig's RigSpec.workspace.repos[].
8
+ * NULL when the qitem is unambiguous against the rig's default_repo
9
+ * or when no workspace is declared. Mission Control views surface
10
+ * the field for cross-rig handoff clarity.
11
+ *
12
+ * Companion to migration 038 which adds rigs.workspace_json.
13
+ */
14
+ export const queueTargetRepoSchema = {
15
+ name: "039_queue_target_repo.sql",
16
+ sql: `
17
+ ALTER TABLE queue_items ADD COLUMN target_repo TEXT;
18
+ CREATE INDEX IF NOT EXISTS idx_queue_items_target_repo ON queue_items(target_repo);
19
+ `,
20
+ };
21
+ //# sourceMappingURL=039_queue_target_repo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"039_queue_target_repo.js","sourceRoot":"","sources":["../../../src/db/migrations/039_queue_target_repo.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAc;IAC9C,IAAI,EAAE,2BAA2B;IACjC,GAAG,EAAE;;;GAGJ;CACF,CAAC"}
@@ -0,0 +1,23 @@
1
+ export interface ActiveLens {
2
+ specName: string;
3
+ specVersion: string;
4
+ /** ISO timestamp of the most recent activation; useful for
5
+ * diagnostics + UI staleness display. */
6
+ activatedAt: string;
7
+ }
8
+ export interface ActiveLensStoreOpts {
9
+ /** Absolute file path. Should fall under the daemon's OPENRIG_HOME so
10
+ * the lens stays isolated per host. */
11
+ filePath: string;
12
+ /** Test seam — defaults to () => new Date(). */
13
+ now?: () => Date;
14
+ }
15
+ export declare class ActiveLensStore {
16
+ private readonly filePath;
17
+ private readonly now;
18
+ constructor(opts: ActiveLensStoreOpts);
19
+ get(): ActiveLens | null;
20
+ set(specName: string, specVersion: string): ActiveLens;
21
+ clear(): void;
22
+ }
23
+ //# sourceMappingURL=active-lens-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"active-lens-store.d.ts","sourceRoot":"","sources":["../../src/domain/active-lens-store.ts"],"names":[],"mappings":"AAuBA,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB;8CAC0C;IAC1C,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,mBAAmB;IAClC;4CACwC;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,gDAAgD;IAChD,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;CAClB;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAa;gBAErB,IAAI,EAAE,mBAAmB;IAKrC,GAAG,IAAI,UAAU,GAAG,IAAI;IAqBxB,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,UAAU;IAuBtD,KAAK,IAAI,IAAI;CAOd"}
@@ -0,0 +1,87 @@
1
+ // Workflows in Spec Library + Activation Lens v0 — active lens persistence.
2
+ //
3
+ // PRD § Item 4: lens selection persists daemon-side across daemon
4
+ // restarts + browser refresh. The PRD bounce conditions explicitly
5
+ // reject ephemeral state.
6
+ //
7
+ // Implementation: a small JSON file under OPENRIG_HOME/active-workflow
8
+ // -lens.json. Same env-var-aware persistence pattern as UI Enhancement
9
+ // Pack v0's file-edit-audit JSONL — no new SQLite table, no new
10
+ // migration. The file is rewritten atomically on every set so concurrent
11
+ // daemons (rare at single-host MVP) don't tear the read.
12
+ //
13
+ // Single-active-lens invariant: setting a lens replaces any prior
14
+ // lens; clearing removes the file entirely. The store does NOT
15
+ // validate that the named workflow_spec actually exists in the
16
+ // workflow_specs cache — that's an upstream concern at the route
17
+ // layer, since the spec might be uncached temporarily during a
18
+ // workspace-surface reconciliation cycle and re-appear before the
19
+ // next read.
20
+ import * as fs from "node:fs";
21
+ import * as path from "node:path";
22
+ export class ActiveLensStore {
23
+ filePath;
24
+ now;
25
+ constructor(opts) {
26
+ this.filePath = opts.filePath;
27
+ this.now = opts.now ?? (() => new Date());
28
+ }
29
+ get() {
30
+ let raw;
31
+ try {
32
+ raw = fs.readFileSync(this.filePath, "utf-8");
33
+ }
34
+ catch {
35
+ return null;
36
+ }
37
+ try {
38
+ const parsed = JSON.parse(raw);
39
+ if (typeof parsed.specName !== "string" || typeof parsed.specVersion !== "string")
40
+ return null;
41
+ return {
42
+ specName: parsed.specName,
43
+ specVersion: parsed.specVersion,
44
+ activatedAt: typeof parsed.activatedAt === "string" ? parsed.activatedAt : this.now().toISOString(),
45
+ };
46
+ }
47
+ catch {
48
+ // Malformed file → treat as no lens. Operator can `rm` to recover.
49
+ return null;
50
+ }
51
+ }
52
+ set(specName, specVersion) {
53
+ const lens = {
54
+ specName,
55
+ specVersion,
56
+ activatedAt: this.now().toISOString(),
57
+ };
58
+ const dir = path.dirname(this.filePath);
59
+ fs.mkdirSync(dir, { recursive: true });
60
+ // Atomic-ish: write to temp + rename. v0 doesn't fsync (the lens
61
+ // is operator UX state, not an audit-record-keeping invariant —
62
+ // losing it across a hard crash is acceptable; the operator
63
+ // re-clicks Activate).
64
+ const tmp = `${this.filePath}.tmp-${process.pid}-${Math.random().toString(36).slice(2, 8)}`;
65
+ try {
66
+ fs.writeFileSync(tmp, JSON.stringify(lens));
67
+ fs.renameSync(tmp, this.filePath);
68
+ }
69
+ catch (err) {
70
+ try {
71
+ fs.unlinkSync(tmp);
72
+ }
73
+ catch { /* best-effort */ }
74
+ throw err;
75
+ }
76
+ return lens;
77
+ }
78
+ clear() {
79
+ try {
80
+ fs.unlinkSync(this.filePath);
81
+ }
82
+ catch {
83
+ // Already absent — no-op.
84
+ }
85
+ }
86
+ }
87
+ //# sourceMappingURL=active-lens-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"active-lens-store.js","sourceRoot":"","sources":["../../src/domain/active-lens-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,68 @@
1
+ import { type AgentImageEntry, type AgentImageManifest, type AgentImageSourceType } from "./agent-image-types.js";
2
+ export interface AgentImageLibraryRoot {
3
+ /** Absolute path to a directory whose immediate children are image dirs. */
4
+ path: string;
5
+ sourceType: AgentImageSourceType;
6
+ }
7
+ export interface AgentImageLibraryOpts {
8
+ roots: AgentImageLibraryRoot[];
9
+ }
10
+ /** Stable id format: agent-image:<name>:<version> (parallel to context-pack:). */
11
+ export declare function agentImageId(name: string, version: string): string;
12
+ export declare function parseAgentImageId(id: string): {
13
+ name: string;
14
+ version: string;
15
+ } | null;
16
+ export declare function estimateTokensFromBytes(bytes: number): number;
17
+ export declare class AgentImageLibraryService {
18
+ private entries;
19
+ private readonly roots;
20
+ constructor(opts: AgentImageLibraryOpts);
21
+ getRoots(): readonly AgentImageLibraryRoot[];
22
+ scan(): {
23
+ count: number;
24
+ errors: Array<{
25
+ source: string;
26
+ error: string;
27
+ }>;
28
+ };
29
+ list(): AgentImageEntry[];
30
+ get(id: string): AgentImageEntry | null;
31
+ getByNameVersion(name: string, version: string): AgentImageEntry | null;
32
+ /**
33
+ * Atomically update stats.json — bump lastUsedAt always; increment
34
+ * forkCount only when `incrementForkCount: true` (default true to
35
+ * preserve back-compat with the first-shipped signature). Used by
36
+ * the instantiator in two phases:
37
+ * 1. Pre-launch (incrementForkCount: false): records the operator's
38
+ * INTENT to consume the image. lastUsedAt updates so the library
39
+ * view shows recent activity even when the launch ultimately
40
+ * fails — operators see "this image was tried" without conflating
41
+ * attempts with successful forks.
42
+ * 2. Post-launch on success (incrementForkCount: true): increments
43
+ * forkCount only when startupResult.ok===true. Prior
44
+ * behavior incremented on intent regardless of outcome, which
45
+ * polluted forkCount with failed-launch noise.
46
+ *
47
+ * Best-effort: a stat-write failure surfaces as an AgentImageError but
48
+ * does NOT abort the consumer (the image consumption path itself does
49
+ * not depend on stats; the operator just loses fork-count visibility
50
+ * on this consumption).
51
+ *
52
+ * Back-compat: legacy `recordConsumption(id, () => new Date())` form
53
+ * still works — a positional function argument is treated as the
54
+ * `now` clock with `incrementForkCount: true`.
55
+ */
56
+ recordConsumption(id: string, optsOrNow?: {
57
+ incrementForkCount?: boolean;
58
+ now?: () => Date;
59
+ } | (() => Date)): void;
60
+ /** Pin an image — creates a `.pinned` sentinel file inside the image directory. */
61
+ pin(id: string): void;
62
+ /** Unpin — removes the `.pinned` sentinel. */
63
+ unpin(id: string): void;
64
+ private readImageEntry;
65
+ /** Write a fresh manifest + empty stats.json + cwd-deltas (if any) to a new image directory. */
66
+ install(targetRootPath: string, manifest: AgentImageManifest, fileContents: Map<string, string>): string;
67
+ }
68
+ //# sourceMappingURL=agent-image-library-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-image-library-service.d.ts","sourceRoot":"","sources":["../../../src/domain/agent-images/agent-image-library-service.ts"],"names":[],"mappings":"AAkBA,OAAO,EAEL,KAAK,eAAe,EAEpB,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EAE1B,MAAM,wBAAwB,CAAC;AAEhC,MAAM,WAAW,qBAAqB;IACpC,4EAA4E;IAC5E,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,oBAAoB,CAAC;CAClC;AAED,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,qBAAqB,EAAE,CAAC;CAChC;AAED,kFAAkF;AAClF,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAElE;AAED,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAMtF;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE7D;AAYD,qBAAa,wBAAwB;IACnC,OAAO,CAAC,OAAO,CAAsC;IACrD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA0B;gBAEpC,IAAI,EAAE,qBAAqB;IAIvC,QAAQ,IAAI,SAAS,qBAAqB,EAAE;IAI5C,IAAI,IAAI;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,KAAK,CAAC;YAAE,MAAM,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;KAAE;IAkC3E,IAAI,IAAI,eAAe,EAAE;IAMzB,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI;IAIvC,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI;IAIvE;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACH,iBAAiB,CACf,EAAE,EAAE,MAAM,EACV,SAAS,CAAC,EAAE;QAAE,kBAAkB,CAAC,EAAE,OAAO,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,IAAI,CAAA;KAAE,GAAG,CAAC,MAAM,IAAI,CAAC,GAC5E,IAAI;IAuCP,mFAAmF;IACnF,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAQrB,8CAA8C;IAC9C,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAYvB,OAAO,CAAC,cAAc;IA4FtB,gGAAgG;IAChG,OAAO,CACL,cAAc,EAAE,MAAM,EACtB,QAAQ,EAAE,kBAAkB,EAC5B,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAChC,MAAM;CAgEV"}
@@ -0,0 +1,339 @@
1
+ // Fork Primitive + Starter Agent Images v0 (PL-016) — library service.
2
+ //
3
+ // Walks discovery roots, parses each image's manifest.yaml + stats.json,
4
+ // and emits AgentImageEntry records for daemon HTTP routes + UI library
5
+ // + CLI verb family. Mirrors ContextPackLibraryService (PL-014) in
6
+ // shape; differences:
7
+ // - sourceResumeToken passes through to consumers (the instantiator
8
+ // consumes it; the operator-facing surfaces redact it)
9
+ // - stats.json is a separate file (mutable; updated atomically on
10
+ // fork-count increment)
11
+ // - .pinned sentinel file pins an image from prune
12
+ //
13
+ // Storage filesystem-canonical at ~/.openrig/agent-images/<name>/ +
14
+ // workspace-local .openrig/agent-images/<name>/. NO new SQLite tables.
15
+ import { existsSync, readFileSync, readdirSync, statSync, writeFileSync, mkdirSync, unlinkSync } from "node:fs";
16
+ import { join, relative } from "node:path";
17
+ import { parseAgentImageManifest } from "./manifest-parser.js";
18
+ import { AgentImageError, } from "./agent-image-types.js";
19
+ /** Stable id format: agent-image:<name>:<version> (parallel to context-pack:). */
20
+ export function agentImageId(name, version) {
21
+ return `agent-image:${name}:${version}`;
22
+ }
23
+ export function parseAgentImageId(id) {
24
+ if (!id.startsWith("agent-image:"))
25
+ return null;
26
+ const rest = id.slice("agent-image:".length);
27
+ const last = rest.lastIndexOf(":");
28
+ if (last === -1)
29
+ return null;
30
+ return { name: rest.slice(0, last), version: rest.slice(last + 1) };
31
+ }
32
+ export function estimateTokensFromBytes(bytes) {
33
+ return Math.ceil(bytes / 4);
34
+ }
35
+ const PINNED_SENTINEL = ".pinned";
36
+ const STATS_FILENAME = "stats.json";
37
+ const DEFAULT_STATS = {
38
+ forkCount: 0,
39
+ lastUsedAt: null,
40
+ estimatedSizeBytes: 0,
41
+ lineage: [],
42
+ };
43
+ export class AgentImageLibraryService {
44
+ entries = new Map();
45
+ roots;
46
+ constructor(opts) {
47
+ this.roots = opts.roots;
48
+ }
49
+ getRoots() {
50
+ return this.roots;
51
+ }
52
+ scan() {
53
+ const next = new Map();
54
+ const errors = [];
55
+ for (const root of this.roots) {
56
+ let dirents;
57
+ try {
58
+ dirents = existsSync(root.path)
59
+ ? readdirSync(root.path, { withFileTypes: true })
60
+ : [];
61
+ }
62
+ catch {
63
+ continue;
64
+ }
65
+ for (const dirent of dirents) {
66
+ if (!dirent.isDirectory())
67
+ continue;
68
+ const imageDir = join(root.path, dirent.name);
69
+ const manifestPath = join(imageDir, "manifest.yaml");
70
+ if (!existsSync(manifestPath))
71
+ continue;
72
+ try {
73
+ const entry = this.readImageEntry(imageDir, manifestPath, root);
74
+ // Last-wins on collision (workspace > user_file > builtin in
75
+ // discovery order configured at startup).
76
+ next.set(entry.id, entry);
77
+ }
78
+ catch (err) {
79
+ errors.push({
80
+ source: imageDir,
81
+ error: err instanceof AgentImageError ? `${err.code}: ${err.message}` : err.message,
82
+ });
83
+ }
84
+ }
85
+ }
86
+ this.entries = next;
87
+ return { count: next.size, errors };
88
+ }
89
+ list() {
90
+ return Array.from(this.entries.values()).sort((a, b) => a.name.localeCompare(b.name) || a.version.localeCompare(b.version));
91
+ }
92
+ get(id) {
93
+ return this.entries.get(id) ?? null;
94
+ }
95
+ getByNameVersion(name, version) {
96
+ return this.entries.get(agentImageId(name, version)) ?? null;
97
+ }
98
+ /**
99
+ * Atomically update stats.json — bump lastUsedAt always; increment
100
+ * forkCount only when `incrementForkCount: true` (default true to
101
+ * preserve back-compat with the first-shipped signature). Used by
102
+ * the instantiator in two phases:
103
+ * 1. Pre-launch (incrementForkCount: false): records the operator's
104
+ * INTENT to consume the image. lastUsedAt updates so the library
105
+ * view shows recent activity even when the launch ultimately
106
+ * fails — operators see "this image was tried" without conflating
107
+ * attempts with successful forks.
108
+ * 2. Post-launch on success (incrementForkCount: true): increments
109
+ * forkCount only when startupResult.ok===true. Prior
110
+ * behavior incremented on intent regardless of outcome, which
111
+ * polluted forkCount with failed-launch noise.
112
+ *
113
+ * Best-effort: a stat-write failure surfaces as an AgentImageError but
114
+ * does NOT abort the consumer (the image consumption path itself does
115
+ * not depend on stats; the operator just loses fork-count visibility
116
+ * on this consumption).
117
+ *
118
+ * Back-compat: legacy `recordConsumption(id, () => new Date())` form
119
+ * still works — a positional function argument is treated as the
120
+ * `now` clock with `incrementForkCount: true`.
121
+ */
122
+ recordConsumption(id, optsOrNow) {
123
+ const entry = this.entries.get(id);
124
+ if (!entry) {
125
+ throw new AgentImageError("image_not_found", `agent image '${id}' not found in library`);
126
+ }
127
+ const opts = typeof optsOrNow === "function"
128
+ ? { incrementForkCount: true, now: optsOrNow }
129
+ : { incrementForkCount: optsOrNow?.incrementForkCount ?? true, now: optsOrNow?.now ?? (() => new Date()) };
130
+ const statsPath = join(entry.sourcePath, STATS_FILENAME);
131
+ let current = { ...entry.stats };
132
+ try {
133
+ if (existsSync(statsPath)) {
134
+ const raw = readFileSync(statsPath, "utf-8");
135
+ const parsed = JSON.parse(raw);
136
+ current = { ...current, ...parsed };
137
+ }
138
+ }
139
+ catch {
140
+ // Malformed stats.json — fall through with the in-memory copy.
141
+ }
142
+ const next = {
143
+ forkCount: (current.forkCount ?? 0) + (opts.incrementForkCount ? 1 : 0),
144
+ lastUsedAt: opts.now().toISOString(),
145
+ estimatedSizeBytes: current.estimatedSizeBytes ?? entry.stats.estimatedSizeBytes,
146
+ lineage: current.lineage ?? entry.stats.lineage,
147
+ };
148
+ try {
149
+ writeFileSync(statsPath, JSON.stringify(next, null, 2) + "\n", "utf-8");
150
+ }
151
+ catch (err) {
152
+ throw new AgentImageError("stats_write_failed", `failed to update stats.json for ${id}: ${err.message}`, { id, statsPath });
153
+ }
154
+ // Mirror the new stats into the in-memory entry so subsequent reads
155
+ // see the bumped fork-count without re-walking the filesystem.
156
+ entry.stats = next;
157
+ }
158
+ /** Pin an image — creates a `.pinned` sentinel file inside the image directory. */
159
+ pin(id) {
160
+ const entry = this.entries.get(id);
161
+ if (!entry)
162
+ throw new AgentImageError("image_not_found", `agent image '${id}' not found`);
163
+ const sentinelPath = join(entry.sourcePath, PINNED_SENTINEL);
164
+ writeFileSync(sentinelPath, new Date().toISOString() + "\n", "utf-8");
165
+ entry.pinned = true;
166
+ }
167
+ /** Unpin — removes the `.pinned` sentinel. */
168
+ unpin(id) {
169
+ const entry = this.entries.get(id);
170
+ if (!entry)
171
+ throw new AgentImageError("image_not_found", `agent image '${id}' not found`);
172
+ const sentinelPath = join(entry.sourcePath, PINNED_SENTINEL);
173
+ try {
174
+ unlinkSync(sentinelPath);
175
+ }
176
+ catch {
177
+ // Already absent — no-op.
178
+ }
179
+ entry.pinned = false;
180
+ }
181
+ readImageEntry(imageDir, manifestPath, root) {
182
+ const raw = readFileSync(manifestPath, "utf-8");
183
+ const manifest = parseAgentImageManifest(raw, manifestPath);
184
+ let mostRecentMtime = 0;
185
+ let totalBytes = 0;
186
+ try {
187
+ const st = statSync(manifestPath);
188
+ mostRecentMtime = st.mtimeMs;
189
+ totalBytes += st.size;
190
+ }
191
+ catch { /* unreadable — fall through */ }
192
+ const files = manifest.files.map((mf) => {
193
+ const abs = join(imageDir, mf.path);
194
+ let bytes = null;
195
+ let mtime = 0;
196
+ try {
197
+ const st = statSync(abs);
198
+ bytes = st.size;
199
+ mtime = st.mtimeMs;
200
+ totalBytes += bytes;
201
+ }
202
+ catch {
203
+ bytes = null;
204
+ }
205
+ if (mtime > mostRecentMtime)
206
+ mostRecentMtime = mtime;
207
+ return {
208
+ path: mf.path,
209
+ role: mf.role,
210
+ summary: mf.summary ?? null,
211
+ absolutePath: bytes === null ? null : abs,
212
+ bytes,
213
+ estimatedTokens: bytes === null ? null : estimateTokensFromBytes(bytes),
214
+ };
215
+ });
216
+ const derivedEstimatedTokens = files.reduce((acc, f) => acc + (f.estimatedTokens ?? 0), 0);
217
+ // Read stats.json if present; default to empty stats.
218
+ const statsPath = join(imageDir, STATS_FILENAME);
219
+ let stats = { ...DEFAULT_STATS };
220
+ if (existsSync(statsPath)) {
221
+ try {
222
+ const statRaw = readFileSync(statsPath, "utf-8");
223
+ const parsed = JSON.parse(statRaw);
224
+ stats = {
225
+ forkCount: typeof parsed.forkCount === "number" ? parsed.forkCount : 0,
226
+ lastUsedAt: typeof parsed.lastUsedAt === "string" ? parsed.lastUsedAt : null,
227
+ estimatedSizeBytes: typeof parsed.estimatedSizeBytes === "number" ? parsed.estimatedSizeBytes : totalBytes,
228
+ lineage: Array.isArray(parsed.lineage) ? parsed.lineage.filter((l) => typeof l === "string") : [],
229
+ };
230
+ const statStat = statSync(statsPath).mtimeMs;
231
+ if (statStat > mostRecentMtime)
232
+ mostRecentMtime = statStat;
233
+ }
234
+ catch {
235
+ // Malformed stats — surface zero values; the daemon refresh
236
+ // overwrites on next consumption.
237
+ }
238
+ }
239
+ if (stats.estimatedSizeBytes === 0)
240
+ stats.estimatedSizeBytes = totalBytes;
241
+ if (stats.lineage.length === 0 && manifest.lineage)
242
+ stats.lineage = [...manifest.lineage];
243
+ const pinned = existsSync(join(imageDir, PINNED_SENTINEL));
244
+ return {
245
+ id: agentImageId(manifest.name, manifest.version),
246
+ kind: "agent-image",
247
+ name: manifest.name,
248
+ version: manifest.version,
249
+ runtime: manifest.runtime,
250
+ sourceSeat: manifest.sourceSeat,
251
+ sourceSessionId: manifest.sourceSessionId,
252
+ sourceResumeToken: manifest.sourceResumeToken,
253
+ // Surface sourceCwd verbatim from the manifest.
254
+ // null when the manifest predates source_cwd support (back-compat).
255
+ sourceCwd: manifest.sourceCwd ?? null,
256
+ notes: manifest.notes ?? null,
257
+ createdAt: manifest.createdAt,
258
+ sourceType: root.sourceType,
259
+ sourcePath: imageDir,
260
+ relativePath: relative(root.path, imageDir) || ".",
261
+ updatedAt: new Date(mostRecentMtime || Date.now()).toISOString(),
262
+ manifestEstimatedTokens: typeof manifest.estimatedTokens === "number" ? manifest.estimatedTokens : null,
263
+ derivedEstimatedTokens,
264
+ files,
265
+ stats,
266
+ lineage: stats.lineage,
267
+ pinned,
268
+ };
269
+ }
270
+ /** Write a fresh manifest + empty stats.json + cwd-deltas (if any) to a new image directory. */
271
+ install(targetRootPath, manifest, fileContents) {
272
+ const targetDir = join(targetRootPath, manifest.name);
273
+ if (existsSync(targetDir)) {
274
+ throw new AgentImageError("image_referenced", `agent image directory already exists at ${targetDir}; choose a different name or remove the existing dir`, { name: manifest.name, targetDir });
275
+ }
276
+ mkdirSync(targetDir, { recursive: true });
277
+ // Emit manifest as YAML — write camelCase keys mapped to snake_case
278
+ // for forward-compat with operator hand-edits.
279
+ const yamlLines = [
280
+ `name: ${manifest.name}`,
281
+ `version: ${manifest.version}`,
282
+ `runtime: ${manifest.runtime}`,
283
+ `source_seat: ${quoteIfNeeded(manifest.sourceSeat)}`,
284
+ `source_session_id: ${quoteIfNeeded(manifest.sourceSessionId)}`,
285
+ `source_resume_token: ${quoteIfNeeded(manifest.sourceResumeToken)}`,
286
+ `created_at: ${quoteIfNeeded(manifest.createdAt)}`,
287
+ ];
288
+ // Persist sourceCwd to manifest YAML so the
289
+ // Use-as-starter snippet can emit `cwd: <source_cwd>` from the
290
+ // library entry. Omitted when capture-time cwd was unknown.
291
+ if (manifest.sourceCwd) {
292
+ yamlLines.push(`source_cwd: ${quoteIfNeeded(manifest.sourceCwd)}`);
293
+ }
294
+ if (manifest.notes) {
295
+ yamlLines.push(`notes: |`);
296
+ for (const line of manifest.notes.split("\n"))
297
+ yamlLines.push(` ${line}`);
298
+ }
299
+ if (typeof manifest.estimatedTokens === "number")
300
+ yamlLines.push(`estimated_tokens: ${manifest.estimatedTokens}`);
301
+ if (manifest.lineage && manifest.lineage.length > 0) {
302
+ yamlLines.push("lineage:");
303
+ for (const l of manifest.lineage)
304
+ yamlLines.push(` - ${quoteIfNeeded(l)}`);
305
+ }
306
+ yamlLines.push("files:");
307
+ for (const f of manifest.files) {
308
+ yamlLines.push(` - path: ${quoteIfNeeded(f.path)}`);
309
+ yamlLines.push(` role: ${quoteIfNeeded(f.role)}`);
310
+ if (f.summary)
311
+ yamlLines.push(` summary: ${quoteIfNeeded(f.summary)}`);
312
+ }
313
+ writeFileSync(join(targetDir, "manifest.yaml"), yamlLines.join("\n") + "\n", "utf-8");
314
+ // Empty stats — fork count starts at 0; lineage from manifest.
315
+ const stats = {
316
+ forkCount: 0,
317
+ lastUsedAt: null,
318
+ estimatedSizeBytes: 0,
319
+ lineage: manifest.lineage ? [...manifest.lineage] : [],
320
+ };
321
+ writeFileSync(join(targetDir, STATS_FILENAME), JSON.stringify(stats, null, 2) + "\n", "utf-8");
322
+ for (const [relPath, content] of fileContents) {
323
+ if (relPath.includes("..") || relPath.startsWith("/")) {
324
+ throw new AgentImageError("manifest_invalid", `install file path '${relPath}' must be relative inside the image (no '..', no leading '/')`);
325
+ }
326
+ const abs = join(targetDir, relPath);
327
+ mkdirSync(join(abs, ".."), { recursive: true });
328
+ writeFileSync(abs, content, "utf-8");
329
+ }
330
+ return targetDir;
331
+ }
332
+ }
333
+ function quoteIfNeeded(s) {
334
+ if (s === "" || /[:#\n@\\\s]/.test(s) || /^[!&*<>%`?,|\[\]{}'"]/.test(s)) {
335
+ return JSON.stringify(s);
336
+ }
337
+ return s;
338
+ }
339
+ //# sourceMappingURL=agent-image-library-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-image-library-service.js","sourceRoot":"","sources":["../../../src/domain/agent-images/agent-image-library-service.ts"],"names":[],"mappings":"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"}