@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,508 @@
1
+ // Slice Story View v0 + v1 — per-tab payload projector.
2
+ //
3
+ // Given a SliceRecord (from SliceIndexer), this assembles the full
4
+ // per-slice payload covering all six tabs: Story, Acceptance, Decisions,
5
+ // Docs, Tests/Verification, Topology. Read-only; no mutations. Composes
6
+ // already-shipped tables (queue_items, queue_transitions,
7
+ // mission_control_actions, workflow_specs, workflow_instances,
8
+ // workflow_step_trails) + slice docs on disk + dogfood-evidence.
9
+ //
10
+ // v1 enrichment (per slices/slice-story-view-v1/IMPLEMENTATION-PRD.md):
11
+ // when a workflow_instance is bound to the slice, four dimensions
12
+ // activate — spec-graph topology, spec-driven phase tagging, current-
13
+ // step + allowed exits in Acceptance, routing-type edge metadata
14
+ // (default `direct` only at v1 per audit-row-6 carve-out).
15
+ //
16
+ // v0 hardcoded legacy phase taxonomy ("discovery"/"product-lab"/
17
+ // "delivery"/"lifecycle"/"qa"/"other") is REMOVED at v1 per PRD § Write
18
+ // Set Sketch. StoryEvent.phase is now an open-ended string-or-null:
19
+ // when bound to a workflow_instance, the value is the spec-defined
20
+ // step.id; otherwise null (UI groups under "Untagged").
21
+ import * as fs from "node:fs";
22
+ import * as path from "node:path";
23
+ import { findSliceWorkflowBinding, } from "../workflow/slice-workflow-binding.js";
24
+ import { projectSpecGraph, projectPhaseDefinitions, projectCurrentStep, } from "../workflow/slice-workflow-projection.js";
25
+ export class SliceDetailProjector {
26
+ db;
27
+ indexer;
28
+ workflowSpecCache;
29
+ constructor(opts) {
30
+ this.db = opts.db;
31
+ this.indexer = opts.indexer;
32
+ this.workflowSpecCache = opts.workflowSpecCache;
33
+ }
34
+ project(slice) {
35
+ // v1: resolve workflow_instance binding once; the bound spec drives
36
+ // four downstream dimensions (story phase tags, spec graph, current
37
+ // step, phase definitions). When unbound or when the spec is no
38
+ // longer cached (operator deleted the spec file, etc.), all v1
39
+ // fields return null and v0 fallbacks apply.
40
+ const bindingResult = findSliceWorkflowBinding(this.db, slice.qitemIds);
41
+ const binding = bindingResult.primary;
42
+ const spec = binding && this.workflowSpecCache
43
+ ? this.tryGetSpec(binding.workflowName, binding.workflowVersion)
44
+ : null;
45
+ const trailQitemToStep = binding ? this.buildTrailQitemToStepMap(binding.instanceId) : new Map();
46
+ return {
47
+ name: slice.name,
48
+ missionId: slice.missionId,
49
+ slicePath: slice.slicePath,
50
+ displayName: slice.displayName,
51
+ railItem: slice.railItem,
52
+ status: slice.status,
53
+ rawStatus: slice.rawStatus,
54
+ qitemIds: slice.qitemIds,
55
+ commitRefs: slice.commitRefs,
56
+ lastActivityAt: slice.lastActivityAt,
57
+ workflowBinding: binding ? {
58
+ instanceId: binding.instanceId,
59
+ workflowName: binding.workflowName,
60
+ workflowVersion: binding.workflowVersion,
61
+ status: binding.status,
62
+ currentStepId: binding.currentStepId,
63
+ currentFrontier: binding.currentFrontier,
64
+ hopCount: binding.hopCount,
65
+ createdAt: binding.createdAt,
66
+ completedAt: binding.completedAt,
67
+ additionalInstanceIds: bindingResult.additionalInstanceIds,
68
+ } : null,
69
+ story: {
70
+ events: this.buildStory(slice, trailQitemToStep),
71
+ phaseDefinitions: spec ? projectPhaseDefinitions(spec) : null,
72
+ },
73
+ acceptance: {
74
+ ...this.buildAcceptance(slice),
75
+ currentStep: spec && binding
76
+ ? projectCurrentStep(spec, binding.currentStepId, binding.hopCount, binding.status)
77
+ : null,
78
+ },
79
+ decisions: { rows: this.buildDecisions(slice) },
80
+ docs: { tree: this.buildDocsTree(slice) },
81
+ tests: this.buildTests(slice.proofPacket),
82
+ topology: {
83
+ ...this.buildTopology(slice),
84
+ specGraph: spec && binding ? projectSpecGraph(spec, binding.currentStepId) : null,
85
+ },
86
+ };
87
+ }
88
+ // --- v1 helpers ---
89
+ tryGetSpec(name, version) {
90
+ if (!this.workflowSpecCache)
91
+ return null;
92
+ try {
93
+ const row = this.workflowSpecCache.getByNameVersion(name, version);
94
+ return row?.spec ?? null;
95
+ }
96
+ catch {
97
+ return null;
98
+ }
99
+ }
100
+ /**
101
+ * Builds a qitem_id → step_id map by reading the bound instance's
102
+ * workflow_step_trails. Each trail row's prior_qitem_id maps to the
103
+ * step that closed (`step_id`), and next_qitem_id maps to the
104
+ * subsequent step's first packet. Used by buildStory to tag each
105
+ * StoryEvent with the spec-defined phase the qitem traces back to.
106
+ */
107
+ buildTrailQitemToStepMap(instanceId) {
108
+ const map = new Map();
109
+ try {
110
+ const trails = this.db.prepare(`SELECT step_id, prior_qitem_id, next_qitem_id
111
+ FROM workflow_step_trails
112
+ WHERE instance_id = ?`).all(instanceId);
113
+ for (const t of trails) {
114
+ // The prior_qitem_id is the one that closed AT step_id —
115
+ // events for that qitem belong to step_id's phase.
116
+ map.set(t.prior_qitem_id, t.step_id);
117
+ }
118
+ }
119
+ catch {
120
+ // workflow_step_trails absent — empty map (events untagged).
121
+ }
122
+ return map;
123
+ }
124
+ // --- Story tab ---
125
+ buildStory(slice, trailQitemToStep) {
126
+ const events = [];
127
+ // v1: phase tag = spec step.id from trail mapping (when bound),
128
+ // null otherwise. v0's hardcoded legacy phase taxonomy is gone.
129
+ const phaseFor = (qitemId) => qitemId ? trailQitemToStep.get(qitemId) ?? null : null;
130
+ if (slice.qitemIds.length > 0) {
131
+ const placeholders = slice.qitemIds.map(() => "?").join(",");
132
+ // queue_items create/handoff snapshot rows. We use the row itself as
133
+ // a "create" event keyed on ts_created, plus per-row state field at
134
+ // ts_updated. queue_transitions provides the per-transition history.
135
+ try {
136
+ const qrows = this.db.prepare(`SELECT qitem_id, ts_created, source_session, destination_session, state, body, tier
137
+ FROM queue_items WHERE qitem_id IN (${placeholders})`).all(...slice.qitemIds);
138
+ for (const r of qrows) {
139
+ events.push({
140
+ ts: r.ts_created,
141
+ phase: phaseFor(r.qitem_id),
142
+ kind: "queue.created",
143
+ actorSession: r.source_session,
144
+ qitemId: r.qitem_id,
145
+ summary: `${r.source_session} → ${r.destination_session}: ${truncate(r.body, 100)}`,
146
+ detail: { tier: r.tier, state: r.state },
147
+ });
148
+ }
149
+ }
150
+ catch {
151
+ // queue_items absent — skip
152
+ }
153
+ // queue_transitions (per-state-change log; append-only per PL-004
154
+ // Phase A schema).
155
+ try {
156
+ const trows = this.db.prepare(`SELECT qitem_id, ts, state, transition_note, actor_session, closure_reason
157
+ FROM queue_transitions WHERE qitem_id IN (${placeholders})
158
+ ORDER BY ts, transition_id`).all(...slice.qitemIds);
159
+ for (const t of trows) {
160
+ const note = t.transition_note ?? t.closure_reason;
161
+ events.push({
162
+ ts: t.ts,
163
+ phase: phaseFor(t.qitem_id),
164
+ kind: `transition.${t.state}`,
165
+ actorSession: t.actor_session,
166
+ qitemId: t.qitem_id,
167
+ summary: `→ ${t.state}${note ? ` (${truncate(note, 60)})` : ""}`,
168
+ detail: null,
169
+ });
170
+ }
171
+ }
172
+ catch {
173
+ // queue_transitions absent — skip
174
+ }
175
+ // mission_control_actions (operator verbs; PL-005 Phase A migration 037).
176
+ try {
177
+ const arows = this.db.prepare(`SELECT action_id, acted_at, qitem_id, action_verb, actor_session,
178
+ before_state_json, after_state_json, reason, annotation
179
+ FROM mission_control_actions WHERE qitem_id IN (${placeholders})
180
+ ORDER BY acted_at, rowid`).all(...slice.qitemIds);
181
+ for (const a of arows) {
182
+ const note = a.annotation ?? a.reason;
183
+ events.push({
184
+ ts: a.acted_at,
185
+ phase: phaseFor(a.qitem_id),
186
+ kind: `mission_control.${a.action_verb}`,
187
+ actorSession: a.actor_session,
188
+ qitemId: a.qitem_id,
189
+ summary: `${a.actor_session} ${a.action_verb}${note ? `: ${truncate(note, 60)}` : ""}`,
190
+ detail: { before: a.before_state_json, after: a.after_state_json },
191
+ });
192
+ }
193
+ }
194
+ catch {
195
+ // mission_control_actions absent — skip
196
+ }
197
+ }
198
+ // Slice doc edits (mtimes inside the slice folder). v1: no phase tag
199
+ // — these aren't qitem-bound so they don't trace to a spec step.
200
+ // UI will group them under "Untagged" or render them without a tag.
201
+ try {
202
+ const sliceDir = slice.slicePath;
203
+ const docEntries = fs.readdirSync(sliceDir, { withFileTypes: true });
204
+ for (const entry of docEntries) {
205
+ if (!entry.isFile() || !entry.name.endsWith(".md"))
206
+ continue;
207
+ const st = fs.statSync(path.join(sliceDir, entry.name));
208
+ events.push({
209
+ ts: st.mtime.toISOString(),
210
+ phase: null,
211
+ kind: "doc.edited",
212
+ actorSession: null,
213
+ qitemId: null,
214
+ summary: `Doc edited: ${entry.name}`,
215
+ detail: null,
216
+ });
217
+ }
218
+ }
219
+ catch {
220
+ // slice folder unreadable — skip
221
+ }
222
+ // Proof packet emission — single event per packet using directory mtime.
223
+ // v1: also untagged (not qitem-bound).
224
+ if (slice.proofPacket) {
225
+ events.push({
226
+ ts: slice.proofPacket.mtime,
227
+ phase: null,
228
+ kind: "proof_packet.emitted",
229
+ actorSession: null,
230
+ qitemId: null,
231
+ summary: `Proof packet emitted: ${slice.proofPacket.dirName}`,
232
+ detail: {
233
+ markdownCount: slice.proofPacket.markdownFiles.length,
234
+ screenshotCount: slice.proofPacket.screenshots.length,
235
+ videoCount: slice.proofPacket.videos.length,
236
+ },
237
+ });
238
+ }
239
+ events.sort((a, b) => a.ts.localeCompare(b.ts));
240
+ return events;
241
+ }
242
+ // --- Acceptance tab ---
243
+ buildAcceptance(slice) {
244
+ const items = [];
245
+ // Parse README + IMPLEMENTATION-PRD + PROGRESS.md for [ ]/[x] checkbox lines.
246
+ // Source citation = file + 1-based line number so the operator can jump.
247
+ const candidateFiles = ["README.md", "IMPLEMENTATION-PRD.md", "PROGRESS.md", "IMPLEMENTATION.md"];
248
+ const sliceDir = slice.slicePath;
249
+ for (const fname of candidateFiles) {
250
+ const full = path.join(sliceDir, fname);
251
+ if (!fs.existsSync(full))
252
+ continue;
253
+ const content = fs.readFileSync(full, "utf8");
254
+ const lines = content.split("\n");
255
+ for (let i = 0; i < lines.length; i++) {
256
+ const line = lines[i];
257
+ const m = line.match(/^\s*-?\s*\[(\s|x|X)\]\s+(.+)$/);
258
+ if (!m)
259
+ continue;
260
+ items.push({
261
+ text: m[2].trim(),
262
+ done: m[1].toLowerCase() === "x",
263
+ source: { file: fname, line: i + 1 },
264
+ });
265
+ }
266
+ }
267
+ const total = items.length;
268
+ const done = items.filter((i) => i.done).length;
269
+ const pct = total === 0 ? 0 : Math.round((done / total) * 100);
270
+ const closureCallout = slice.status === "done"
271
+ ? `Goal Met (status: ${slice.rawStatus ?? "done"})`
272
+ : null;
273
+ return {
274
+ totalItems: total,
275
+ doneItems: done,
276
+ percentage: pct,
277
+ items,
278
+ closureCallout,
279
+ };
280
+ }
281
+ // --- Decisions tab ---
282
+ buildDecisions(slice) {
283
+ if (slice.qitemIds.length === 0)
284
+ return [];
285
+ try {
286
+ const placeholders = slice.qitemIds.map(() => "?").join(",");
287
+ const rows = this.db.prepare(`SELECT action_id, acted_at, actor_session, action_verb, qitem_id,
288
+ before_state_json, after_state_json, reason, annotation
289
+ FROM mission_control_actions
290
+ WHERE qitem_id IN (${placeholders})
291
+ ORDER BY acted_at DESC, rowid DESC`).all(...slice.qitemIds);
292
+ return rows.map((r) => ({
293
+ actionId: r.action_id,
294
+ ts: r.acted_at,
295
+ actor: r.actor_session,
296
+ verb: r.action_verb,
297
+ qitemId: r.qitem_id,
298
+ reason: r.annotation ?? r.reason,
299
+ beforeState: r.before_state_json,
300
+ afterState: r.after_state_json,
301
+ }));
302
+ }
303
+ catch {
304
+ return [];
305
+ }
306
+ }
307
+ // --- Docs tab ---
308
+ buildDocsTree(slice) {
309
+ const sliceDir = slice.slicePath;
310
+ const out = [];
311
+ const walk = (dir, relPrefix) => {
312
+ let entries;
313
+ try {
314
+ entries = fs.readdirSync(dir, { withFileTypes: true });
315
+ }
316
+ catch {
317
+ return;
318
+ }
319
+ for (const entry of entries) {
320
+ const rel = relPrefix ? `${relPrefix}/${entry.name}` : entry.name;
321
+ const full = path.join(dir, entry.name);
322
+ if (entry.isDirectory()) {
323
+ out.push({ name: entry.name, type: "dir", size: null, mtime: null, relPath: rel });
324
+ walk(full, rel);
325
+ continue;
326
+ }
327
+ if (!entry.isFile())
328
+ continue;
329
+ try {
330
+ const st = fs.statSync(full);
331
+ out.push({
332
+ name: entry.name,
333
+ type: "file",
334
+ size: st.size,
335
+ mtime: st.mtime.toISOString(),
336
+ relPath: rel,
337
+ });
338
+ }
339
+ catch {
340
+ // skip
341
+ }
342
+ }
343
+ };
344
+ walk(sliceDir, "");
345
+ out.sort((a, b) => a.relPath.localeCompare(b.relPath));
346
+ return out;
347
+ }
348
+ /** Read a single doc file from the slice folder for the Docs tab. Returns null if missing or outside the slice folder. */
349
+ readDoc(sliceName, relPath) {
350
+ const slice = this.indexer.get(sliceName);
351
+ if (!slice)
352
+ return null;
353
+ const sliceDir = slice.slicePath;
354
+ const resolved = path.resolve(sliceDir, relPath);
355
+ if (!resolved.startsWith(`${path.resolve(sliceDir)}${path.sep}`) && resolved !== path.resolve(sliceDir)) {
356
+ // Path-traversal guard.
357
+ return null;
358
+ }
359
+ try {
360
+ return fs.readFileSync(resolved, "utf8");
361
+ }
362
+ catch {
363
+ return null;
364
+ }
365
+ }
366
+ // --- Tests / Verification tab ---
367
+ buildTests(proofPacket) {
368
+ if (!proofPacket) {
369
+ return { proofPackets: [], aggregate: { passCount: 0, failCount: 0 } };
370
+ }
371
+ const additionalMarkdown = [];
372
+ let primaryMarkdown = null;
373
+ for (let i = 0; i < proofPacket.markdownFiles.length; i++) {
374
+ const rel = proofPacket.markdownFiles[i];
375
+ const content = this.readProofAsset(proofPacket, rel) ?? "";
376
+ if (i === 0) {
377
+ primaryMarkdown = { relPath: rel, content };
378
+ }
379
+ else {
380
+ additionalMarkdown.push({ relPath: rel, content });
381
+ }
382
+ }
383
+ const passFailBadge = inferPassFailBadge(primaryMarkdown?.content ?? "");
384
+ const rendered = {
385
+ dirName: proofPacket.dirName,
386
+ primaryMarkdown,
387
+ additionalMarkdown,
388
+ screenshots: proofPacket.screenshots,
389
+ videos: proofPacket.videos,
390
+ traces: proofPacket.traces,
391
+ passFailBadge,
392
+ };
393
+ return {
394
+ proofPackets: [rendered],
395
+ aggregate: {
396
+ passCount: passFailBadge === "pass" ? 1 : 0,
397
+ failCount: passFailBadge === "fail" ? 1 : 0,
398
+ },
399
+ };
400
+ }
401
+ /**
402
+ * Read a proof-packet asset (markdown content or check existence of binary
403
+ * files like screenshots/videos). Path-traversal guarded by absPath prefix
404
+ * check.
405
+ */
406
+ readProofAsset(proofPacket, relPath) {
407
+ const resolved = path.resolve(proofPacket.absPath, relPath);
408
+ if (!resolved.startsWith(`${path.resolve(proofPacket.absPath)}${path.sep}`)) {
409
+ return null;
410
+ }
411
+ try {
412
+ return fs.readFileSync(resolved, "utf8");
413
+ }
414
+ catch {
415
+ return null;
416
+ }
417
+ }
418
+ /** Returns the absolute on-disk path of a proof asset for binary serving. Path-traversal guarded. */
419
+ resolveProofAssetPath(proofPacket, relPath) {
420
+ const resolved = path.resolve(proofPacket.absPath, relPath);
421
+ if (!resolved.startsWith(`${path.resolve(proofPacket.absPath)}${path.sep}`)) {
422
+ return null;
423
+ }
424
+ try {
425
+ const st = fs.statSync(resolved);
426
+ if (!st.isFile())
427
+ return null;
428
+ return resolved;
429
+ }
430
+ catch {
431
+ return null;
432
+ }
433
+ }
434
+ // --- Topology tab ---
435
+ buildTopology(slice) {
436
+ if (slice.qitemIds.length === 0) {
437
+ return { affectedRigs: [], totalSeats: 0 };
438
+ }
439
+ try {
440
+ const placeholders = slice.qitemIds.map(() => "?").join(",");
441
+ const rows = this.db.prepare(`SELECT DISTINCT source_session, destination_session
442
+ FROM queue_items WHERE qitem_id IN (${placeholders})`).all(...slice.qitemIds);
443
+ const sessionsByRig = new Map();
444
+ for (const r of rows) {
445
+ for (const s of [r.source_session, r.destination_session]) {
446
+ if (!s)
447
+ continue;
448
+ const rig = sessionRigKey(s);
449
+ const set = sessionsByRig.get(rig) ?? new Set();
450
+ set.add(s);
451
+ sessionsByRig.set(rig, set);
452
+ }
453
+ }
454
+ // Resolve rig display names from the rigs table when possible. If the
455
+ // rig isn't registered locally (e.g., session names from another host),
456
+ // we keep the parsed key as a placeholder rigId.
457
+ const rigNames = new Map();
458
+ try {
459
+ const rigRows = this.db.prepare(`SELECT id, name FROM rigs`).all();
460
+ for (const r of rigRows)
461
+ rigNames.set(r.name, r.id);
462
+ }
463
+ catch {
464
+ // rigs table unavailable — fall back to parsed key as both id and name.
465
+ }
466
+ const affectedRigs = [];
467
+ for (const [rigKey, sessionSet] of sessionsByRig) {
468
+ affectedRigs.push({
469
+ rigId: rigNames.get(rigKey) ?? rigKey,
470
+ rigName: rigKey,
471
+ sessionNames: Array.from(sessionSet).sort(),
472
+ });
473
+ }
474
+ affectedRigs.sort((a, b) => a.rigName.localeCompare(b.rigName));
475
+ const totalSeats = Array.from(sessionsByRig.values()).reduce((sum, set) => sum + set.size, 0);
476
+ return { affectedRigs, totalSeats };
477
+ }
478
+ catch {
479
+ return { affectedRigs: [], totalSeats: 0 };
480
+ }
481
+ }
482
+ }
483
+ function truncate(s, n) {
484
+ if (s.length <= n)
485
+ return s;
486
+ return `${s.slice(0, n)}…`;
487
+ }
488
+ function sessionRigKey(session) {
489
+ // Sessions are usually "<member>@<rig>" — the rig portion is the key.
490
+ // Sessions without an @ are treated as their own rig key.
491
+ const idx = session.lastIndexOf("@");
492
+ if (idx === -1)
493
+ return session;
494
+ return session.slice(idx + 1);
495
+ }
496
+ function inferPassFailBadge(content) {
497
+ if (!content)
498
+ return "unknown";
499
+ const lower = content.toLowerCase();
500
+ if (/\b(accept|accepted|passed|all green|all pass|fully green|green after fix|complete|✅|🟢)/.test(lower))
501
+ return "pass";
502
+ if (/\b(blocker|blocked|fail|red|🔴|❌)/.test(lower))
503
+ return "fail";
504
+ if (/\b(partial|partially|in progress|standing by)/.test(lower))
505
+ return "partial";
506
+ return "unknown";
507
+ }
508
+ //# sourceMappingURL=slice-detail-projector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slice-detail-projector.js","sourceRoot":"","sources":["../../../src/domain/slices/slice-detail-projector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,118 @@
1
+ import type Database from "better-sqlite3";
2
+ export type SliceStatus = "active" | "done" | "blocked" | "draft";
3
+ export interface SliceQitemRef {
4
+ qitemId: string;
5
+ state: string;
6
+ sourceSession: string;
7
+ destinationSession: string;
8
+ tier: string | null;
9
+ tsUpdated: string;
10
+ }
11
+ export interface SliceProofPacket {
12
+ /** Directory name under the dogfood-evidence root. */
13
+ dirName: string;
14
+ /** Absolute path on disk. */
15
+ absPath: string;
16
+ /** Markdown file paths (relative to dirName). Latest-first by mtime. */
17
+ markdownFiles: string[];
18
+ /** Inline-renderable image paths (relative to dirName). */
19
+ screenshots: string[];
20
+ /** Video file paths (relative to dirName). Empty array if QA hasn't captured one yet. */
21
+ videos: string[];
22
+ /** Trace zip paths (relative to dirName). */
23
+ traces: string[];
24
+ /** mtime of the directory (ISO string). */
25
+ mtime: string;
26
+ }
27
+ export interface SliceRecord {
28
+ /** Folder name (canonical id). */
29
+ name: string;
30
+ /** Mission folder id when discovered under missions/<mission>/slices/<slice>. */
31
+ missionId: string | null;
32
+ /** Absolute filesystem path of the slice folder. */
33
+ slicePath: string;
34
+ /** Display name from frontmatter or first H1; falls back to name. */
35
+ displayName: string;
36
+ /** Optional rail-item code (PL-005, PL-019, etc.) parsed from frontmatter. */
37
+ railItem: string | null;
38
+ /** Mapped status from frontmatter status field. */
39
+ status: SliceStatus;
40
+ /** Raw status string from frontmatter (for debugging). */
41
+ rawStatus: string | null;
42
+ /** Joined qitem ids from queue_items matched by frontmatter rail-item or slice-name body. */
43
+ qitemIds: string[];
44
+ /** Commit refs parsed from frontmatter (phase-X-shipped-commits, target-commit, etc.). */
45
+ commitRefs: string[];
46
+ /** Latest matching dogfood-evidence directory (or null). */
47
+ proofPacket: SliceProofPacket | null;
48
+ /** Max of slice folder mtimes + matched qitem ts_updated values. */
49
+ lastActivityAt: string | null;
50
+ /** Sources cited in frontmatter (e.g. PRDs, planner-briefs). */
51
+ files: string[];
52
+ }
53
+ export interface SliceListEntry {
54
+ name: string;
55
+ missionId: string | null;
56
+ displayName: string;
57
+ railItem: string | null;
58
+ status: SliceStatus;
59
+ rawStatus: string | null;
60
+ qitemCount: number;
61
+ hasProofPacket: boolean;
62
+ lastActivityAt: string | null;
63
+ /** PL-007 — absolute filesystem path of the slice folder. UI resolves
64
+ * workspace kind by matching this against RigSpec.workspace.repos[].path
65
+ * / knowledgeRoot. Always populated by toListEntry. */
66
+ slicePath: string;
67
+ }
68
+ export interface SliceIndexerOpts {
69
+ /** Root directory containing slice folders. */
70
+ slicesRoot: string;
71
+ /** Additional compatible roots to scan after the primary root. */
72
+ additionalSliceRoots?: string[];
73
+ /** Root directory containing dogfood-evidence directories. */
74
+ dogfoodEvidenceRoot: string | null;
75
+ /** SQLite handle for read-only joins to queue_items + transitions + actions. */
76
+ db: Database.Database;
77
+ /** Cache TTL in milliseconds. Default 60_000 (60s) — re-walks on next request after expiry. */
78
+ cacheTtlMs?: number;
79
+ }
80
+ export declare class SliceIndexer {
81
+ readonly slicesRoot: string;
82
+ readonly additionalSliceRoots: string[];
83
+ readonly dogfoodEvidenceRoot: string | null;
84
+ /** Workflows in Spec Library v0: exposed read-only so the slices
85
+ * route's `boundToWorkflow` lens filter can call
86
+ * `findSliceWorkflowBinding(db, qitemIds)` without re-injecting
87
+ * the db handle elsewhere. Internal callers continue to use it
88
+ * the same way; read-only consumer outside the class. */
89
+ readonly db: Database.Database;
90
+ private readonly cacheTtlMs;
91
+ private listingCache;
92
+ private detailCache;
93
+ constructor(opts: SliceIndexerOpts);
94
+ /** Returns true when any configured slice root exists on disk. */
95
+ isReady(): boolean;
96
+ /** Drops both caches. Used by tests + by a future explicit-refresh route. */
97
+ invalidate(): void;
98
+ list(): SliceListEntry[];
99
+ get(name: string): SliceRecord | null;
100
+ private readSliceLocations;
101
+ private findSliceLocation;
102
+ private isDirectory;
103
+ private sliceRoots;
104
+ private toListEntry;
105
+ private buildRecord;
106
+ private readPrimaryFrontmatter;
107
+ private extractDisplayName;
108
+ private extractRailItem;
109
+ private extractCommitRefs;
110
+ private mapStatus;
111
+ private matchQitems;
112
+ private findProofPacket;
113
+ private scanProofPacket;
114
+ private computeLastActivity;
115
+ private listSliceFiles;
116
+ }
117
+ export declare function parseFrontmatter(content: string): Record<string, unknown>;
118
+ //# sourceMappingURL=slice-indexer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slice-indexer.d.ts","sourceRoot":"","sources":["../../../src/domain/slices/slice-indexer.ts"],"names":[],"mappings":"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"}