@openrig/cli 0.1.12 → 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 (856) hide show
  1. package/daemon/assets/openrig-activity-hook-relay.cjs +104 -0
  2. package/daemon/dist/adapters/claude-code-adapter.d.ts +24 -6
  3. package/daemon/dist/adapters/claude-code-adapter.d.ts.map +1 -1
  4. package/daemon/dist/adapters/claude-code-adapter.js +221 -65
  5. package/daemon/dist/adapters/claude-code-adapter.js.map +1 -1
  6. package/daemon/dist/adapters/claude-resume.d.ts +5 -0
  7. package/daemon/dist/adapters/claude-resume.d.ts.map +1 -1
  8. package/daemon/dist/adapters/claude-resume.js +13 -0
  9. package/daemon/dist/adapters/claude-resume.js.map +1 -1
  10. package/daemon/dist/adapters/codex-resume.d.ts +8 -1
  11. package/daemon/dist/adapters/codex-resume.d.ts.map +1 -1
  12. package/daemon/dist/adapters/codex-resume.js +74 -5
  13. package/daemon/dist/adapters/codex-resume.js.map +1 -1
  14. package/daemon/dist/adapters/codex-runtime-adapter.d.ts +9 -5
  15. package/daemon/dist/adapters/codex-runtime-adapter.d.ts.map +1 -1
  16. package/daemon/dist/adapters/codex-runtime-adapter.js +255 -28
  17. package/daemon/dist/adapters/codex-runtime-adapter.js.map +1 -1
  18. package/daemon/dist/adapters/terminal-adapter.d.ts +2 -1
  19. package/daemon/dist/adapters/terminal-adapter.d.ts.map +1 -1
  20. package/daemon/dist/adapters/terminal-adapter.js +7 -1
  21. package/daemon/dist/adapters/terminal-adapter.js.map +1 -1
  22. package/daemon/dist/adapters/tmux.d.ts.map +1 -1
  23. package/daemon/dist/adapters/tmux.js +53 -5
  24. package/daemon/dist/adapters/tmux.js.map +1 -1
  25. package/daemon/dist/builtins/workflow-specs/basic-loop.yaml +76 -0
  26. package/daemon/dist/builtins/workflow-specs/conveyor.yaml +80 -0
  27. package/daemon/dist/db/migrations/021_seat_handover_observability.d.ts +3 -0
  28. package/daemon/dist/db/migrations/021_seat_handover_observability.d.ts.map +1 -0
  29. package/daemon/dist/db/migrations/021_seat_handover_observability.js +11 -0
  30. package/daemon/dist/db/migrations/021_seat_handover_observability.js.map +1 -0
  31. package/daemon/dist/db/migrations/022_node_codex_config_profile.d.ts +3 -0
  32. package/daemon/dist/db/migrations/022_node_codex_config_profile.d.ts.map +1 -0
  33. package/daemon/dist/db/migrations/022_node_codex_config_profile.js +7 -0
  34. package/daemon/dist/db/migrations/022_node_codex_config_profile.js.map +1 -0
  35. package/daemon/dist/db/migrations/023_stream_items.d.ts +16 -0
  36. package/daemon/dist/db/migrations/023_stream_items.d.ts.map +1 -0
  37. package/daemon/dist/db/migrations/023_stream_items.js +37 -0
  38. package/daemon/dist/db/migrations/023_stream_items.js.map +1 -0
  39. package/daemon/dist/db/migrations/024_queue_items.d.ts +19 -0
  40. package/daemon/dist/db/migrations/024_queue_items.d.ts.map +1 -0
  41. package/daemon/dist/db/migrations/024_queue_items.js +52 -0
  42. package/daemon/dist/db/migrations/024_queue_items.js.map +1 -0
  43. package/daemon/dist/db/migrations/025_queue_transitions.d.ts +13 -0
  44. package/daemon/dist/db/migrations/025_queue_transitions.d.ts.map +1 -0
  45. package/daemon/dist/db/migrations/025_queue_transitions.js +28 -0
  46. package/daemon/dist/db/migrations/025_queue_transitions.js.map +1 -0
  47. package/daemon/dist/db/migrations/026_inbox_entries.d.ts +14 -0
  48. package/daemon/dist/db/migrations/026_inbox_entries.d.ts.map +1 -0
  49. package/daemon/dist/db/migrations/026_inbox_entries.js +35 -0
  50. package/daemon/dist/db/migrations/026_inbox_entries.js.map +1 -0
  51. package/daemon/dist/db/migrations/027_outbox_entries.d.ts +12 -0
  52. package/daemon/dist/db/migrations/027_outbox_entries.d.ts.map +1 -0
  53. package/daemon/dist/db/migrations/027_outbox_entries.js +30 -0
  54. package/daemon/dist/db/migrations/027_outbox_entries.js.map +1 -0
  55. package/daemon/dist/db/migrations/028_project_classifications.d.ts +26 -0
  56. package/daemon/dist/db/migrations/028_project_classifications.d.ts.map +1 -0
  57. package/daemon/dist/db/migrations/028_project_classifications.js +44 -0
  58. package/daemon/dist/db/migrations/028_project_classifications.js.map +1 -0
  59. package/daemon/dist/db/migrations/029_classifier_leases.d.ts +22 -0
  60. package/daemon/dist/db/migrations/029_classifier_leases.d.ts.map +1 -0
  61. package/daemon/dist/db/migrations/029_classifier_leases.js +41 -0
  62. package/daemon/dist/db/migrations/029_classifier_leases.js.map +1 -0
  63. package/daemon/dist/db/migrations/030_views_custom.d.ts +15 -0
  64. package/daemon/dist/db/migrations/030_views_custom.d.ts.map +1 -0
  65. package/daemon/dist/db/migrations/030_views_custom.js +27 -0
  66. package/daemon/dist/db/migrations/030_views_custom.js.map +1 -0
  67. package/daemon/dist/db/migrations/031_watchdog_jobs.d.ts +34 -0
  68. package/daemon/dist/db/migrations/031_watchdog_jobs.d.ts.map +1 -0
  69. package/daemon/dist/db/migrations/031_watchdog_jobs.js +59 -0
  70. package/daemon/dist/db/migrations/031_watchdog_jobs.js.map +1 -0
  71. package/daemon/dist/db/migrations/032_watchdog_history.d.ts +28 -0
  72. package/daemon/dist/db/migrations/032_watchdog_history.d.ts.map +1 -0
  73. package/daemon/dist/db/migrations/032_watchdog_history.js +46 -0
  74. package/daemon/dist/db/migrations/032_watchdog_history.js.map +1 -0
  75. package/daemon/dist/db/migrations/033_workflow_specs.d.ts +30 -0
  76. package/daemon/dist/db/migrations/033_workflow_specs.d.ts.map +1 -0
  77. package/daemon/dist/db/migrations/033_workflow_specs.js +50 -0
  78. package/daemon/dist/db/migrations/033_workflow_specs.js.map +1 -0
  79. package/daemon/dist/db/migrations/034_workflow_instances.d.ts +42 -0
  80. package/daemon/dist/db/migrations/034_workflow_instances.d.ts.map +1 -0
  81. package/daemon/dist/db/migrations/034_workflow_instances.js +63 -0
  82. package/daemon/dist/db/migrations/034_workflow_instances.js.map +1 -0
  83. package/daemon/dist/db/migrations/035_workflow_step_trails.d.ts +29 -0
  84. package/daemon/dist/db/migrations/035_workflow_step_trails.d.ts.map +1 -0
  85. package/daemon/dist/db/migrations/035_workflow_step_trails.js +48 -0
  86. package/daemon/dist/db/migrations/035_workflow_step_trails.js.map +1 -0
  87. package/daemon/dist/db/migrations/036_watchdog_policy_enum_extension.d.ts +35 -0
  88. package/daemon/dist/db/migrations/036_watchdog_policy_enum_extension.d.ts.map +1 -0
  89. package/daemon/dist/db/migrations/036_watchdog_policy_enum_extension.js +43 -0
  90. package/daemon/dist/db/migrations/036_watchdog_policy_enum_extension.js.map +1 -0
  91. package/daemon/dist/db/migrations/037_mission_control_actions.d.ts +51 -0
  92. package/daemon/dist/db/migrations/037_mission_control_actions.d.ts.map +1 -0
  93. package/daemon/dist/db/migrations/037_mission_control_actions.js +74 -0
  94. package/daemon/dist/db/migrations/037_mission_control_actions.js.map +1 -0
  95. package/daemon/dist/db/migrations/038_workspace_primitive.d.ts +16 -0
  96. package/daemon/dist/db/migrations/038_workspace_primitive.d.ts.map +1 -0
  97. package/daemon/dist/db/migrations/038_workspace_primitive.js +20 -0
  98. package/daemon/dist/db/migrations/038_workspace_primitive.js.map +1 -0
  99. package/daemon/dist/db/migrations/039_queue_target_repo.d.ts +16 -0
  100. package/daemon/dist/db/migrations/039_queue_target_repo.d.ts.map +1 -0
  101. package/daemon/dist/db/migrations/039_queue_target_repo.js +21 -0
  102. package/daemon/dist/db/migrations/039_queue_target_repo.js.map +1 -0
  103. package/daemon/dist/domain/active-lens-store.d.ts +23 -0
  104. package/daemon/dist/domain/active-lens-store.d.ts.map +1 -0
  105. package/daemon/dist/domain/active-lens-store.js +87 -0
  106. package/daemon/dist/domain/active-lens-store.js.map +1 -0
  107. package/daemon/dist/domain/agent-activity-store.d.ts +42 -0
  108. package/daemon/dist/domain/agent-activity-store.d.ts.map +1 -0
  109. package/daemon/dist/domain/agent-activity-store.js +177 -0
  110. package/daemon/dist/domain/agent-activity-store.js.map +1 -0
  111. package/daemon/dist/domain/agent-images/agent-image-library-service.d.ts +68 -0
  112. package/daemon/dist/domain/agent-images/agent-image-library-service.d.ts.map +1 -0
  113. package/daemon/dist/domain/agent-images/agent-image-library-service.js +339 -0
  114. package/daemon/dist/domain/agent-images/agent-image-library-service.js.map +1 -0
  115. package/daemon/dist/domain/agent-images/agent-image-types.d.ts +113 -0
  116. package/daemon/dist/domain/agent-images/agent-image-types.d.ts.map +1 -0
  117. package/daemon/dist/domain/agent-images/agent-image-types.js +24 -0
  118. package/daemon/dist/domain/agent-images/agent-image-types.js.map +1 -0
  119. package/daemon/dist/domain/agent-images/evidence-guard.d.ts +26 -0
  120. package/daemon/dist/domain/agent-images/evidence-guard.d.ts.map +1 -0
  121. package/daemon/dist/domain/agent-images/evidence-guard.js +185 -0
  122. package/daemon/dist/domain/agent-images/evidence-guard.js.map +1 -0
  123. package/daemon/dist/domain/agent-images/manifest-parser.d.ts +3 -0
  124. package/daemon/dist/domain/agent-images/manifest-parser.d.ts.map +1 -0
  125. package/daemon/dist/domain/agent-images/manifest-parser.js +114 -0
  126. package/daemon/dist/domain/agent-images/manifest-parser.js.map +1 -0
  127. package/daemon/dist/domain/agent-images/resume-token-discovery.d.ts +28 -0
  128. package/daemon/dist/domain/agent-images/resume-token-discovery.d.ts.map +1 -0
  129. package/daemon/dist/domain/agent-images/resume-token-discovery.js +83 -0
  130. package/daemon/dist/domain/agent-images/resume-token-discovery.js.map +1 -0
  131. package/daemon/dist/domain/agent-images/snapshot-capturer.d.ts +36 -0
  132. package/daemon/dist/domain/agent-images/snapshot-capturer.d.ts.map +1 -0
  133. package/daemon/dist/domain/agent-images/snapshot-capturer.js +58 -0
  134. package/daemon/dist/domain/agent-images/snapshot-capturer.js.map +1 -0
  135. package/daemon/dist/domain/agent-manifest.d.ts.map +1 -1
  136. package/daemon/dist/domain/agent-manifest.js +3 -0
  137. package/daemon/dist/domain/agent-manifest.js.map +1 -1
  138. package/daemon/dist/domain/agent-starter-resolver.d.ts +94 -0
  139. package/daemon/dist/domain/agent-starter-resolver.d.ts.map +1 -0
  140. package/daemon/dist/domain/agent-starter-resolver.js +198 -0
  141. package/daemon/dist/domain/agent-starter-resolver.js.map +1 -0
  142. package/daemon/dist/domain/classifier-lease-manager.d.ts +130 -0
  143. package/daemon/dist/domain/classifier-lease-manager.d.ts.map +1 -0
  144. package/daemon/dist/domain/classifier-lease-manager.js +285 -0
  145. package/daemon/dist/domain/classifier-lease-manager.js.map +1 -0
  146. package/daemon/dist/domain/conflict-detector.d.ts.map +1 -1
  147. package/daemon/dist/domain/conflict-detector.js +6 -3
  148. package/daemon/dist/domain/conflict-detector.js.map +1 -1
  149. package/daemon/dist/domain/context-monitor.d.ts +5 -4
  150. package/daemon/dist/domain/context-monitor.d.ts.map +1 -1
  151. package/daemon/dist/domain/context-monitor.js +26 -11
  152. package/daemon/dist/domain/context-monitor.js.map +1 -1
  153. package/daemon/dist/domain/context-packs/bundle-assembler.d.ts +49 -0
  154. package/daemon/dist/domain/context-packs/bundle-assembler.d.ts.map +1 -0
  155. package/daemon/dist/domain/context-packs/bundle-assembler.js +81 -0
  156. package/daemon/dist/domain/context-packs/bundle-assembler.js.map +1 -0
  157. package/daemon/dist/domain/context-packs/context-pack-library-service.d.ts +41 -0
  158. package/daemon/dist/domain/context-packs/context-pack-library-service.d.ts.map +1 -0
  159. package/daemon/dist/domain/context-packs/context-pack-library-service.js +148 -0
  160. package/daemon/dist/domain/context-packs/context-pack-library-service.js.map +1 -0
  161. package/daemon/dist/domain/context-packs/context-pack-types.d.ts +64 -0
  162. package/daemon/dist/domain/context-packs/context-pack-types.d.ts.map +1 -0
  163. package/daemon/dist/domain/context-packs/context-pack-types.js +22 -0
  164. package/daemon/dist/domain/context-packs/context-pack-types.js.map +1 -0
  165. package/daemon/dist/domain/context-packs/manifest-parser.d.ts +3 -0
  166. package/daemon/dist/domain/context-packs/manifest-parser.d.ts.map +1 -0
  167. package/daemon/dist/domain/context-packs/manifest-parser.js +74 -0
  168. package/daemon/dist/domain/context-packs/manifest-parser.js.map +1 -0
  169. package/daemon/dist/domain/context-usage-store.d.ts +15 -2
  170. package/daemon/dist/domain/context-usage-store.d.ts.map +1 -1
  171. package/daemon/dist/domain/context-usage-store.js +157 -2
  172. package/daemon/dist/domain/context-usage-store.js.map +1 -1
  173. package/daemon/dist/domain/files/file-write-service.d.ts +61 -0
  174. package/daemon/dist/domain/files/file-write-service.d.ts.map +1 -0
  175. package/daemon/dist/domain/files/file-write-service.js +180 -0
  176. package/daemon/dist/domain/files/file-write-service.js.map +1 -0
  177. package/daemon/dist/domain/files/path-safety.d.ts +47 -0
  178. package/daemon/dist/domain/files/path-safety.d.ts.map +1 -0
  179. package/daemon/dist/domain/files/path-safety.js +176 -0
  180. package/daemon/dist/domain/files/path-safety.js.map +1 -0
  181. package/daemon/dist/domain/graph-projection.d.ts +14 -1
  182. package/daemon/dist/domain/graph-projection.d.ts.map +1 -1
  183. package/daemon/dist/domain/graph-projection.js +8 -0
  184. package/daemon/dist/domain/graph-projection.js.map +1 -1
  185. package/daemon/dist/domain/hot-potato-enforcer.d.ts +45 -0
  186. package/daemon/dist/domain/hot-potato-enforcer.d.ts.map +1 -0
  187. package/daemon/dist/domain/hot-potato-enforcer.js +94 -0
  188. package/daemon/dist/domain/hot-potato-enforcer.js.map +1 -0
  189. package/daemon/dist/domain/inbox-handler.d.ts +68 -0
  190. package/daemon/dist/domain/inbox-handler.d.ts.map +1 -0
  191. package/daemon/dist/domain/inbox-handler.js +177 -0
  192. package/daemon/dist/domain/inbox-handler.js.map +1 -0
  193. package/daemon/dist/domain/install-engine.d.ts.map +1 -1
  194. package/daemon/dist/domain/install-engine.js +22 -6
  195. package/daemon/dist/domain/install-engine.js.map +1 -1
  196. package/daemon/dist/domain/install-verifier.d.ts.map +1 -1
  197. package/daemon/dist/domain/install-verifier.js +10 -5
  198. package/daemon/dist/domain/install-verifier.js.map +1 -1
  199. package/daemon/dist/domain/managed-blocks.d.ts.map +1 -1
  200. package/daemon/dist/domain/managed-blocks.js +22 -3
  201. package/daemon/dist/domain/managed-blocks.js.map +1 -1
  202. package/daemon/dist/domain/mission-control/audit-browse.d.ts +26 -0
  203. package/daemon/dist/domain/mission-control/audit-browse.d.ts.map +1 -0
  204. package/daemon/dist/domain/mission-control/audit-browse.js +101 -0
  205. package/daemon/dist/domain/mission-control/audit-browse.js.map +1 -0
  206. package/daemon/dist/domain/mission-control/mission-control-action-log.d.ts +51 -0
  207. package/daemon/dist/domain/mission-control/mission-control-action-log.d.ts.map +1 -0
  208. package/daemon/dist/domain/mission-control/mission-control-action-log.js +124 -0
  209. package/daemon/dist/domain/mission-control/mission-control-action-log.js.map +1 -0
  210. package/daemon/dist/domain/mission-control/mission-control-fleet-cli-capability.d.ts +131 -0
  211. package/daemon/dist/domain/mission-control/mission-control-fleet-cli-capability.d.ts.map +1 -0
  212. package/daemon/dist/domain/mission-control/mission-control-fleet-cli-capability.js +232 -0
  213. package/daemon/dist/domain/mission-control/mission-control-fleet-cli-capability.js.map +1 -0
  214. package/daemon/dist/domain/mission-control/mission-control-read-layer.d.ts +85 -0
  215. package/daemon/dist/domain/mission-control/mission-control-read-layer.d.ts.map +1 -0
  216. package/daemon/dist/domain/mission-control/mission-control-read-layer.js +265 -0
  217. package/daemon/dist/domain/mission-control/mission-control-read-layer.js.map +1 -0
  218. package/daemon/dist/domain/mission-control/mission-control-write-contract.d.ts +69 -0
  219. package/daemon/dist/domain/mission-control/mission-control-write-contract.d.ts.map +1 -0
  220. package/daemon/dist/domain/mission-control/mission-control-write-contract.js +300 -0
  221. package/daemon/dist/domain/mission-control/mission-control-write-contract.js.map +1 -0
  222. package/daemon/dist/domain/mission-control/notification-adapter-ntfy.d.ts +18 -0
  223. package/daemon/dist/domain/mission-control/notification-adapter-ntfy.d.ts.map +1 -0
  224. package/daemon/dist/domain/mission-control/notification-adapter-ntfy.js +48 -0
  225. package/daemon/dist/domain/mission-control/notification-adapter-ntfy.js.map +1 -0
  226. package/daemon/dist/domain/mission-control/notification-adapter-types.d.ts +25 -0
  227. package/daemon/dist/domain/mission-control/notification-adapter-types.d.ts.map +1 -0
  228. package/daemon/dist/domain/mission-control/notification-adapter-types.js +7 -0
  229. package/daemon/dist/domain/mission-control/notification-adapter-types.js.map +1 -0
  230. package/daemon/dist/domain/mission-control/notification-adapter-webhook.d.ts +27 -0
  231. package/daemon/dist/domain/mission-control/notification-adapter-webhook.d.ts.map +1 -0
  232. package/daemon/dist/domain/mission-control/notification-adapter-webhook.js +47 -0
  233. package/daemon/dist/domain/mission-control/notification-adapter-webhook.js.map +1 -0
  234. package/daemon/dist/domain/mission-control/notification-dispatcher.d.ts +53 -0
  235. package/daemon/dist/domain/mission-control/notification-dispatcher.d.ts.map +1 -0
  236. package/daemon/dist/domain/mission-control/notification-dispatcher.js +181 -0
  237. package/daemon/dist/domain/mission-control/notification-dispatcher.js.map +1 -0
  238. package/daemon/dist/domain/native-resume-probe.d.ts +1 -1
  239. package/daemon/dist/domain/native-resume-probe.d.ts.map +1 -1
  240. package/daemon/dist/domain/native-resume-probe.js +67 -0
  241. package/daemon/dist/domain/native-resume-probe.js.map +1 -1
  242. package/daemon/dist/domain/node-inventory.d.ts +29 -1
  243. package/daemon/dist/domain/node-inventory.d.ts.map +1 -1
  244. package/daemon/dist/domain/node-inventory.js +184 -38
  245. package/daemon/dist/domain/node-inventory.js.map +1 -1
  246. package/daemon/dist/domain/node-launcher.d.ts +2 -0
  247. package/daemon/dist/domain/node-launcher.d.ts.map +1 -1
  248. package/daemon/dist/domain/node-launcher.js +21 -7
  249. package/daemon/dist/domain/node-launcher.js.map +1 -1
  250. package/daemon/dist/domain/outbox-handler.d.ts +48 -0
  251. package/daemon/dist/domain/outbox-handler.d.ts.map +1 -0
  252. package/daemon/dist/domain/outbox-handler.js +106 -0
  253. package/daemon/dist/domain/outbox-handler.js.map +1 -0
  254. package/daemon/dist/domain/policies/artifact-pool-helpers.d.ts +64 -0
  255. package/daemon/dist/domain/policies/artifact-pool-helpers.d.ts.map +1 -0
  256. package/daemon/dist/domain/policies/artifact-pool-helpers.js +226 -0
  257. package/daemon/dist/domain/policies/artifact-pool-helpers.js.map +1 -0
  258. package/daemon/dist/domain/policies/artifact-pool-ready.d.ts +3 -0
  259. package/daemon/dist/domain/policies/artifact-pool-ready.d.ts.map +1 -0
  260. package/daemon/dist/domain/policies/artifact-pool-ready.js +41 -0
  261. package/daemon/dist/domain/policies/artifact-pool-ready.js.map +1 -0
  262. package/daemon/dist/domain/policies/edge-artifact-required.d.ts +3 -0
  263. package/daemon/dist/domain/policies/edge-artifact-required.d.ts.map +1 -0
  264. package/daemon/dist/domain/policies/edge-artifact-required.js +90 -0
  265. package/daemon/dist/domain/policies/edge-artifact-required.js.map +1 -0
  266. package/daemon/dist/domain/policies/periodic-reminder.d.ts +3 -0
  267. package/daemon/dist/domain/policies/periodic-reminder.d.ts.map +1 -0
  268. package/daemon/dist/domain/policies/periodic-reminder.js +30 -0
  269. package/daemon/dist/domain/policies/periodic-reminder.js.map +1 -0
  270. package/daemon/dist/domain/policies/types.d.ts +51 -0
  271. package/daemon/dist/domain/policies/types.d.ts.map +1 -0
  272. package/daemon/dist/domain/policies/types.js +9 -0
  273. package/daemon/dist/domain/policies/types.js.map +1 -0
  274. package/daemon/dist/domain/policies/workflow-keepalive.d.ts +7 -0
  275. package/daemon/dist/domain/policies/workflow-keepalive.d.ts.map +1 -0
  276. package/daemon/dist/domain/policies/workflow-keepalive.js +123 -0
  277. package/daemon/dist/domain/policies/workflow-keepalive.js.map +1 -0
  278. package/daemon/dist/domain/preview/preview-rate-limiter.d.ts +20 -0
  279. package/daemon/dist/domain/preview/preview-rate-limiter.d.ts.map +1 -0
  280. package/daemon/dist/domain/preview/preview-rate-limiter.js +46 -0
  281. package/daemon/dist/domain/preview/preview-rate-limiter.js.map +1 -0
  282. package/daemon/dist/domain/profile-resolver.d.ts +5 -0
  283. package/daemon/dist/domain/profile-resolver.d.ts.map +1 -1
  284. package/daemon/dist/domain/profile-resolver.js +62 -8
  285. package/daemon/dist/domain/profile-resolver.js.map +1 -1
  286. package/daemon/dist/domain/progress/progress-indexer.d.ts +73 -0
  287. package/daemon/dist/domain/progress/progress-indexer.d.ts.map +1 -0
  288. package/daemon/dist/domain/progress/progress-indexer.js +210 -0
  289. package/daemon/dist/domain/progress/progress-indexer.js.map +1 -0
  290. package/daemon/dist/domain/project-classifier.d.ts +75 -0
  291. package/daemon/dist/domain/project-classifier.d.ts.map +1 -0
  292. package/daemon/dist/domain/project-classifier.js +132 -0
  293. package/daemon/dist/domain/project-classifier.js.map +1 -0
  294. package/daemon/dist/domain/projection-planner.d.ts +1 -0
  295. package/daemon/dist/domain/projection-planner.d.ts.map +1 -1
  296. package/daemon/dist/domain/projection-planner.js +3 -0
  297. package/daemon/dist/domain/projection-planner.js.map +1 -1
  298. package/daemon/dist/domain/ps-projection.d.ts +31 -0
  299. package/daemon/dist/domain/ps-projection.d.ts.map +1 -1
  300. package/daemon/dist/domain/ps-projection.js +38 -0
  301. package/daemon/dist/domain/ps-projection.js.map +1 -1
  302. package/daemon/dist/domain/queue-repository.d.ts +340 -0
  303. package/daemon/dist/domain/queue-repository.d.ts.map +1 -0
  304. package/daemon/dist/domain/queue-repository.js +744 -0
  305. package/daemon/dist/domain/queue-repository.js.map +1 -0
  306. package/daemon/dist/domain/queue-transition-log.d.ts +38 -0
  307. package/daemon/dist/domain/queue-transition-log.d.ts.map +1 -0
  308. package/daemon/dist/domain/queue-transition-log.js +52 -0
  309. package/daemon/dist/domain/queue-transition-log.js.map +1 -0
  310. package/daemon/dist/domain/rehydrate-eligibility.d.ts +16 -0
  311. package/daemon/dist/domain/rehydrate-eligibility.d.ts.map +1 -0
  312. package/daemon/dist/domain/rehydrate-eligibility.js +43 -0
  313. package/daemon/dist/domain/rehydrate-eligibility.js.map +1 -0
  314. package/daemon/dist/domain/restore-check-service.d.ts +203 -0
  315. package/daemon/dist/domain/restore-check-service.d.ts.map +1 -0
  316. package/daemon/dist/domain/restore-check-service.js +1060 -0
  317. package/daemon/dist/domain/restore-check-service.js.map +1 -0
  318. package/daemon/dist/domain/restore-orchestrator.d.ts +49 -3
  319. package/daemon/dist/domain/restore-orchestrator.d.ts.map +1 -1
  320. package/daemon/dist/domain/restore-orchestrator.js +464 -64
  321. package/daemon/dist/domain/restore-orchestrator.js.map +1 -1
  322. package/daemon/dist/domain/rig-expansion-service.d.ts.map +1 -1
  323. package/daemon/dist/domain/rig-expansion-service.js +13 -0
  324. package/daemon/dist/domain/rig-expansion-service.js.map +1 -1
  325. package/daemon/dist/domain/rig-repository.d.ts +31 -1
  326. package/daemon/dist/domain/rig-repository.d.ts.map +1 -1
  327. package/daemon/dist/domain/rig-repository.js +104 -5
  328. package/daemon/dist/domain/rig-repository.js.map +1 -1
  329. package/daemon/dist/domain/rig-teardown.d.ts.map +1 -1
  330. package/daemon/dist/domain/rig-teardown.js +5 -0
  331. package/daemon/dist/domain/rig-teardown.js.map +1 -1
  332. package/daemon/dist/domain/rigspec-codec.d.ts.map +1 -1
  333. package/daemon/dist/domain/rigspec-codec.js +28 -0
  334. package/daemon/dist/domain/rigspec-codec.js.map +1 -1
  335. package/daemon/dist/domain/rigspec-exporter.d.ts.map +1 -1
  336. package/daemon/dist/domain/rigspec-exporter.js +2 -0
  337. package/daemon/dist/domain/rigspec-exporter.js.map +1 -1
  338. package/daemon/dist/domain/rigspec-instantiator.d.ts +29 -0
  339. package/daemon/dist/domain/rigspec-instantiator.d.ts.map +1 -1
  340. package/daemon/dist/domain/rigspec-instantiator.js +194 -2
  341. package/daemon/dist/domain/rigspec-instantiator.js.map +1 -1
  342. package/daemon/dist/domain/rigspec-schema.d.ts.map +1 -1
  343. package/daemon/dist/domain/rigspec-schema.js +349 -0
  344. package/daemon/dist/domain/rigspec-schema.js.map +1 -1
  345. package/daemon/dist/domain/runtime-adapter.d.ts +38 -2
  346. package/daemon/dist/domain/runtime-adapter.d.ts.map +1 -1
  347. package/daemon/dist/domain/runtime-adapter.js +5 -0
  348. package/daemon/dist/domain/runtime-adapter.js.map +1 -1
  349. package/daemon/dist/domain/seat-handover-planner.d.ts +84 -0
  350. package/daemon/dist/domain/seat-handover-planner.d.ts.map +1 -0
  351. package/daemon/dist/domain/seat-handover-planner.js +188 -0
  352. package/daemon/dist/domain/seat-handover-planner.js.map +1 -0
  353. package/daemon/dist/domain/seat-handover-service.d.ts +104 -0
  354. package/daemon/dist/domain/seat-handover-service.d.ts.map +1 -0
  355. package/daemon/dist/domain/seat-handover-service.js +343 -0
  356. package/daemon/dist/domain/seat-handover-service.js.map +1 -0
  357. package/daemon/dist/domain/seat-status-service.d.ts +50 -0
  358. package/daemon/dist/domain/seat-status-service.d.ts.map +1 -0
  359. package/daemon/dist/domain/seat-status-service.js +66 -0
  360. package/daemon/dist/domain/seat-status-service.js.map +1 -0
  361. package/daemon/dist/domain/session-source-rebuild-resolver.d.ts +53 -0
  362. package/daemon/dist/domain/session-source-rebuild-resolver.d.ts.map +1 -0
  363. package/daemon/dist/domain/session-source-rebuild-resolver.js +59 -0
  364. package/daemon/dist/domain/session-source-rebuild-resolver.js.map +1 -0
  365. package/daemon/dist/domain/session-transport.d.ts +30 -0
  366. package/daemon/dist/domain/session-transport.d.ts.map +1 -1
  367. package/daemon/dist/domain/session-transport.js +322 -12
  368. package/daemon/dist/domain/session-transport.js.map +1 -1
  369. package/daemon/dist/domain/skill-discovery.d.ts +51 -0
  370. package/daemon/dist/domain/skill-discovery.d.ts.map +1 -0
  371. package/daemon/dist/domain/skill-discovery.js +144 -0
  372. package/daemon/dist/domain/skill-discovery.js.map +1 -0
  373. package/daemon/dist/domain/slices/slice-detail-projector.d.ts +182 -0
  374. package/daemon/dist/domain/slices/slice-detail-projector.d.ts.map +1 -0
  375. package/daemon/dist/domain/slices/slice-detail-projector.js +508 -0
  376. package/daemon/dist/domain/slices/slice-detail-projector.js.map +1 -0
  377. package/daemon/dist/domain/slices/slice-indexer.d.ts +118 -0
  378. package/daemon/dist/domain/slices/slice-indexer.d.ts.map +1 -0
  379. package/daemon/dist/domain/slices/slice-indexer.js +503 -0
  380. package/daemon/dist/domain/slices/slice-indexer.js.map +1 -0
  381. package/daemon/dist/domain/snapshot-repository.d.ts +18 -0
  382. package/daemon/dist/domain/snapshot-repository.d.ts.map +1 -1
  383. package/daemon/dist/domain/snapshot-repository.js +77 -0
  384. package/daemon/dist/domain/snapshot-repository.js.map +1 -1
  385. package/daemon/dist/domain/spec-library-service.d.ts +17 -2
  386. package/daemon/dist/domain/spec-library-service.d.ts.map +1 -1
  387. package/daemon/dist/domain/spec-library-service.js +31 -1
  388. package/daemon/dist/domain/spec-library-service.js.map +1 -1
  389. package/daemon/dist/domain/spec-library-workflow-scanner.d.ts +81 -0
  390. package/daemon/dist/domain/spec-library-workflow-scanner.d.ts.map +1 -0
  391. package/daemon/dist/domain/spec-library-workflow-scanner.js +171 -0
  392. package/daemon/dist/domain/spec-library-workflow-scanner.js.map +1 -0
  393. package/daemon/dist/domain/startup-orchestrator.d.ts +22 -3
  394. package/daemon/dist/domain/startup-orchestrator.d.ts.map +1 -1
  395. package/daemon/dist/domain/startup-orchestrator.js +31 -5
  396. package/daemon/dist/domain/startup-orchestrator.js.map +1 -1
  397. package/daemon/dist/domain/startup-validation.d.ts.map +1 -1
  398. package/daemon/dist/domain/startup-validation.js +57 -11
  399. package/daemon/dist/domain/startup-validation.js.map +1 -1
  400. package/daemon/dist/domain/steering/health-summary.d.ts +39 -0
  401. package/daemon/dist/domain/steering/health-summary.d.ts.map +1 -0
  402. package/daemon/dist/domain/steering/health-summary.js +100 -0
  403. package/daemon/dist/domain/steering/health-summary.js.map +1 -0
  404. package/daemon/dist/domain/steering/steering-composer.d.ts +102 -0
  405. package/daemon/dist/domain/steering/steering-composer.d.ts.map +1 -0
  406. package/daemon/dist/domain/steering/steering-composer.js +263 -0
  407. package/daemon/dist/domain/steering/steering-composer.js.map +1 -0
  408. package/daemon/dist/domain/stream-store.d.ts +56 -0
  409. package/daemon/dist/domain/stream-store.d.ts.map +1 -0
  410. package/daemon/dist/domain/stream-store.js +108 -0
  411. package/daemon/dist/domain/stream-store.js.map +1 -0
  412. package/daemon/dist/domain/transcript-capture.d.ts.map +1 -1
  413. package/daemon/dist/domain/transcript-capture.js +7 -4
  414. package/daemon/dist/domain/transcript-capture.js.map +1 -1
  415. package/daemon/dist/domain/transcript-redaction.d.ts +13 -0
  416. package/daemon/dist/domain/transcript-redaction.d.ts.map +1 -0
  417. package/daemon/dist/domain/transcript-redaction.js +34 -0
  418. package/daemon/dist/domain/transcript-redaction.js.map +1 -0
  419. package/daemon/dist/domain/transcript-rotation.d.ts +29 -0
  420. package/daemon/dist/domain/transcript-rotation.d.ts.map +1 -0
  421. package/daemon/dist/domain/transcript-rotation.js +109 -0
  422. package/daemon/dist/domain/transcript-rotation.js.map +1 -0
  423. package/daemon/dist/domain/transcript-store.d.ts +15 -0
  424. package/daemon/dist/domain/transcript-store.d.ts.map +1 -1
  425. package/daemon/dist/domain/transcript-store.js +64 -2
  426. package/daemon/dist/domain/transcript-store.js.map +1 -1
  427. package/daemon/dist/domain/types.d.ts +416 -4
  428. package/daemon/dist/domain/types.d.ts.map +1 -1
  429. package/daemon/dist/domain/types.js +8 -1
  430. package/daemon/dist/domain/types.js.map +1 -1
  431. package/daemon/dist/domain/user-settings/settings-store.d.ts +42 -0
  432. package/daemon/dist/domain/user-settings/settings-store.d.ts.map +1 -0
  433. package/daemon/dist/domain/user-settings/settings-store.js +364 -0
  434. package/daemon/dist/domain/user-settings/settings-store.js.map +1 -0
  435. package/daemon/dist/domain/view-event-bridge.d.ts +12 -0
  436. package/daemon/dist/domain/view-event-bridge.d.ts.map +1 -0
  437. package/daemon/dist/domain/view-event-bridge.js +91 -0
  438. package/daemon/dist/domain/view-event-bridge.js.map +1 -0
  439. package/daemon/dist/domain/view-projector.d.ts +83 -0
  440. package/daemon/dist/domain/view-projector.d.ts.map +1 -0
  441. package/daemon/dist/domain/view-projector.js +296 -0
  442. package/daemon/dist/domain/view-projector.js.map +1 -0
  443. package/daemon/dist/domain/watchdog-history-log.d.ts +49 -0
  444. package/daemon/dist/domain/watchdog-history-log.d.ts.map +1 -0
  445. package/daemon/dist/domain/watchdog-history-log.js +67 -0
  446. package/daemon/dist/domain/watchdog-history-log.js.map +1 -0
  447. package/daemon/dist/domain/watchdog-jobs-repository.d.ts +81 -0
  448. package/daemon/dist/domain/watchdog-jobs-repository.d.ts.map +1 -0
  449. package/daemon/dist/domain/watchdog-jobs-repository.js +164 -0
  450. package/daemon/dist/domain/watchdog-jobs-repository.js.map +1 -0
  451. package/daemon/dist/domain/watchdog-policy-engine.d.ts +92 -0
  452. package/daemon/dist/domain/watchdog-policy-engine.d.ts.map +1 -0
  453. package/daemon/dist/domain/watchdog-policy-engine.js +442 -0
  454. package/daemon/dist/domain/watchdog-policy-engine.js.map +1 -0
  455. package/daemon/dist/domain/watchdog-scheduler.d.ts +76 -0
  456. package/daemon/dist/domain/watchdog-scheduler.d.ts.map +1 -0
  457. package/daemon/dist/domain/watchdog-scheduler.js +112 -0
  458. package/daemon/dist/domain/watchdog-scheduler.js.map +1 -0
  459. package/daemon/dist/domain/whoami-service.d.ts +29 -0
  460. package/daemon/dist/domain/whoami-service.d.ts.map +1 -1
  461. package/daemon/dist/domain/whoami-service.js +68 -0
  462. package/daemon/dist/domain/whoami-service.js.map +1 -1
  463. package/daemon/dist/domain/workflow/slice-workflow-binding.d.ts +21 -0
  464. package/daemon/dist/domain/workflow/slice-workflow-binding.d.ts.map +1 -0
  465. package/daemon/dist/domain/workflow/slice-workflow-binding.js +103 -0
  466. package/daemon/dist/domain/workflow/slice-workflow-binding.js.map +1 -0
  467. package/daemon/dist/domain/workflow/slice-workflow-projection.d.ts +81 -0
  468. package/daemon/dist/domain/workflow/slice-workflow-projection.d.ts.map +1 -0
  469. package/daemon/dist/domain/workflow/slice-workflow-projection.js +127 -0
  470. package/daemon/dist/domain/workflow/slice-workflow-projection.js.map +1 -0
  471. package/daemon/dist/domain/workflow/starter-spec-loader.d.ts +51 -0
  472. package/daemon/dist/domain/workflow/starter-spec-loader.d.ts.map +1 -0
  473. package/daemon/dist/domain/workflow/starter-spec-loader.js +140 -0
  474. package/daemon/dist/domain/workflow/starter-spec-loader.js.map +1 -0
  475. package/daemon/dist/domain/workflow-instance-store.d.ts +46 -0
  476. package/daemon/dist/domain/workflow-instance-store.d.ts.map +1 -0
  477. package/daemon/dist/domain/workflow-instance-store.js +116 -0
  478. package/daemon/dist/domain/workflow-instance-store.js.map +1 -0
  479. package/daemon/dist/domain/workflow-projector.d.ts +64 -0
  480. package/daemon/dist/domain/workflow-projector.d.ts.map +1 -0
  481. package/daemon/dist/domain/workflow-projector.js +432 -0
  482. package/daemon/dist/domain/workflow-projector.js.map +1 -0
  483. package/daemon/dist/domain/workflow-runtime.d.ts +63 -0
  484. package/daemon/dist/domain/workflow-runtime.d.ts.map +1 -0
  485. package/daemon/dist/domain/workflow-runtime.js +150 -0
  486. package/daemon/dist/domain/workflow-runtime.js.map +1 -0
  487. package/daemon/dist/domain/workflow-spec-cache.d.ts +42 -0
  488. package/daemon/dist/domain/workflow-spec-cache.d.ts.map +1 -0
  489. package/daemon/dist/domain/workflow-spec-cache.js +218 -0
  490. package/daemon/dist/domain/workflow-spec-cache.js.map +1 -0
  491. package/daemon/dist/domain/workflow-step-trail-log.d.ts +27 -0
  492. package/daemon/dist/domain/workflow-step-trail-log.d.ts.map +1 -0
  493. package/daemon/dist/domain/workflow-step-trail-log.js +73 -0
  494. package/daemon/dist/domain/workflow-step-trail-log.js.map +1 -0
  495. package/daemon/dist/domain/workflow-types.d.ts +108 -0
  496. package/daemon/dist/domain/workflow-types.d.ts.map +1 -0
  497. package/daemon/dist/domain/workflow-types.js +11 -0
  498. package/daemon/dist/domain/workflow-types.js.map +1 -0
  499. package/daemon/dist/domain/workflow-validator.d.ts +31 -0
  500. package/daemon/dist/domain/workflow-validator.d.ts.map +1 -0
  501. package/daemon/dist/domain/workflow-validator.js +115 -0
  502. package/daemon/dist/domain/workflow-validator.js.map +1 -0
  503. package/daemon/dist/domain/workspace/default-workspace-scaffold.d.ts +6 -0
  504. package/daemon/dist/domain/workspace/default-workspace-scaffold.d.ts.map +1 -0
  505. package/daemon/dist/domain/workspace/default-workspace-scaffold.js +207 -0
  506. package/daemon/dist/domain/workspace/default-workspace-scaffold.js.map +1 -0
  507. package/daemon/dist/domain/workspace/frontmatter-validator.d.ts +40 -0
  508. package/daemon/dist/domain/workspace/frontmatter-validator.d.ts.map +1 -0
  509. package/daemon/dist/domain/workspace/frontmatter-validator.js +185 -0
  510. package/daemon/dist/domain/workspace/frontmatter-validator.js.map +1 -0
  511. package/daemon/dist/domain/workspace/workspace-resolver.d.ts +25 -0
  512. package/daemon/dist/domain/workspace/workspace-resolver.d.ts.map +1 -0
  513. package/daemon/dist/domain/workspace/workspace-resolver.js +86 -0
  514. package/daemon/dist/domain/workspace/workspace-resolver.js.map +1 -0
  515. package/daemon/dist/index.d.ts.map +1 -1
  516. package/daemon/dist/index.js +30 -2
  517. package/daemon/dist/index.js.map +1 -1
  518. package/daemon/dist/middleware/auth-bearer-token.d.ts +49 -0
  519. package/daemon/dist/middleware/auth-bearer-token.d.ts.map +1 -0
  520. package/daemon/dist/middleware/auth-bearer-token.js +135 -0
  521. package/daemon/dist/middleware/auth-bearer-token.js.map +1 -0
  522. package/daemon/dist/openrig-compat.d.ts +1 -1
  523. package/daemon/dist/openrig-compat.d.ts.map +1 -1
  524. package/daemon/dist/openrig-compat.js +6 -4
  525. package/daemon/dist/openrig-compat.js.map +1 -1
  526. package/daemon/dist/routes/activity.d.ts +3 -0
  527. package/daemon/dist/routes/activity.d.ts.map +1 -0
  528. package/daemon/dist/routes/activity.js +47 -0
  529. package/daemon/dist/routes/activity.js.map +1 -0
  530. package/daemon/dist/routes/agent-images.d.ts +8 -0
  531. package/daemon/dist/routes/agent-images.d.ts.map +1 -0
  532. package/daemon/dist/routes/agent-images.js +253 -0
  533. package/daemon/dist/routes/agent-images.js.map +1 -0
  534. package/daemon/dist/routes/config.d.ts +3 -0
  535. package/daemon/dist/routes/config.d.ts.map +1 -0
  536. package/daemon/dist/routes/config.js +109 -0
  537. package/daemon/dist/routes/config.js.map +1 -0
  538. package/daemon/dist/routes/context-packs.d.ts +3 -0
  539. package/daemon/dist/routes/context-packs.d.ts.map +1 -0
  540. package/daemon/dist/routes/context-packs.js +129 -0
  541. package/daemon/dist/routes/context-packs.js.map +1 -0
  542. package/daemon/dist/routes/files.d.ts +17 -0
  543. package/daemon/dist/routes/files.d.ts.map +1 -0
  544. package/daemon/dist/routes/files.js +262 -0
  545. package/daemon/dist/routes/files.js.map +1 -0
  546. package/daemon/dist/routes/health-summary.d.ts +9 -0
  547. package/daemon/dist/routes/health-summary.d.ts.map +1 -0
  548. package/daemon/dist/routes/health-summary.js +33 -0
  549. package/daemon/dist/routes/health-summary.js.map +1 -0
  550. package/daemon/dist/routes/mission-control.d.ts +37 -0
  551. package/daemon/dist/routes/mission-control.d.ts.map +1 -0
  552. package/daemon/dist/routes/mission-control.js +283 -0
  553. package/daemon/dist/routes/mission-control.js.map +1 -0
  554. package/daemon/dist/routes/progress.d.ts +7 -0
  555. package/daemon/dist/routes/progress.d.ts.map +1 -0
  556. package/daemon/dist/routes/progress.js +33 -0
  557. package/daemon/dist/routes/progress.js.map +1 -0
  558. package/daemon/dist/routes/projects.d.ts +12 -0
  559. package/daemon/dist/routes/projects.d.ts.map +1 -0
  560. package/daemon/dist/routes/projects.js +178 -0
  561. package/daemon/dist/routes/projects.js.map +1 -0
  562. package/daemon/dist/routes/queue.d.ts +10 -0
  563. package/daemon/dist/routes/queue.d.ts.map +1 -0
  564. package/daemon/dist/routes/queue.js +425 -0
  565. package/daemon/dist/routes/queue.js.map +1 -0
  566. package/daemon/dist/routes/restore-check.d.ts +3 -0
  567. package/daemon/dist/routes/restore-check.d.ts.map +1 -0
  568. package/daemon/dist/routes/restore-check.js +200 -0
  569. package/daemon/dist/routes/restore-check.js.map +1 -0
  570. package/daemon/dist/routes/rigs.d.ts +3 -0
  571. package/daemon/dist/routes/rigs.d.ts.map +1 -1
  572. package/daemon/dist/routes/rigs.js +131 -9
  573. package/daemon/dist/routes/rigs.js.map +1 -1
  574. package/daemon/dist/routes/rigspec.js +6 -3
  575. package/daemon/dist/routes/rigspec.js.map +1 -1
  576. package/daemon/dist/routes/seat.d.ts +3 -0
  577. package/daemon/dist/routes/seat.d.ts.map +1 -0
  578. package/daemon/dist/routes/seat.js +69 -0
  579. package/daemon/dist/routes/seat.js.map +1 -0
  580. package/daemon/dist/routes/sessions.d.ts.map +1 -1
  581. package/daemon/dist/routes/sessions.js +144 -4
  582. package/daemon/dist/routes/sessions.js.map +1 -1
  583. package/daemon/dist/routes/slices.d.ts +9 -0
  584. package/daemon/dist/routes/slices.d.ts.map +1 -0
  585. package/daemon/dist/routes/slices.js +192 -0
  586. package/daemon/dist/routes/slices.js.map +1 -0
  587. package/daemon/dist/routes/snapshots.js +66 -29
  588. package/daemon/dist/routes/snapshots.js.map +1 -1
  589. package/daemon/dist/routes/spec-library.d.ts.map +1 -1
  590. package/daemon/dist/routes/spec-library.js +72 -5
  591. package/daemon/dist/routes/spec-library.js.map +1 -1
  592. package/daemon/dist/routes/steering.d.ts +7 -0
  593. package/daemon/dist/routes/steering.d.ts.map +1 -0
  594. package/daemon/dist/routes/steering.js +27 -0
  595. package/daemon/dist/routes/steering.js.map +1 -0
  596. package/daemon/dist/routes/stream.d.ts +9 -0
  597. package/daemon/dist/routes/stream.d.ts.map +1 -0
  598. package/daemon/dist/routes/stream.js +119 -0
  599. package/daemon/dist/routes/stream.js.map +1 -0
  600. package/daemon/dist/routes/transcripts.d.ts.map +1 -1
  601. package/daemon/dist/routes/transcripts.js +38 -0
  602. package/daemon/dist/routes/transcripts.js.map +1 -1
  603. package/daemon/dist/routes/transport.d.ts.map +1 -1
  604. package/daemon/dist/routes/transport.js +21 -0
  605. package/daemon/dist/routes/transport.js.map +1 -1
  606. package/daemon/dist/routes/up.d.ts.map +1 -1
  607. package/daemon/dist/routes/up.js +43 -4
  608. package/daemon/dist/routes/up.js.map +1 -1
  609. package/daemon/dist/routes/views.d.ts +13 -0
  610. package/daemon/dist/routes/views.d.ts.map +1 -0
  611. package/daemon/dist/routes/views.js +120 -0
  612. package/daemon/dist/routes/views.js.map +1 -0
  613. package/daemon/dist/routes/watchdog.d.ts +18 -0
  614. package/daemon/dist/routes/watchdog.d.ts.map +1 -0
  615. package/daemon/dist/routes/watchdog.js +148 -0
  616. package/daemon/dist/routes/watchdog.js.map +1 -0
  617. package/daemon/dist/routes/whoami.d.ts.map +1 -1
  618. package/daemon/dist/routes/whoami.js +6 -1
  619. package/daemon/dist/routes/whoami.js.map +1 -1
  620. package/daemon/dist/routes/workflow.d.ts +20 -0
  621. package/daemon/dist/routes/workflow.d.ts.map +1 -0
  622. package/daemon/dist/routes/workflow.js +227 -0
  623. package/daemon/dist/routes/workflow.js.map +1 -0
  624. package/daemon/dist/routes/workspace.d.ts +3 -0
  625. package/daemon/dist/routes/workspace.d.ts.map +1 -0
  626. package/daemon/dist/routes/workspace.js +53 -0
  627. package/daemon/dist/routes/workspace.js.map +1 -0
  628. package/daemon/dist/server.d.ts +81 -0
  629. package/daemon/dist/server.d.ts.map +1 -1
  630. package/daemon/dist/server.js +85 -1
  631. package/daemon/dist/server.js.map +1 -1
  632. package/daemon/dist/startup.d.ts +9 -0
  633. package/daemon/dist/startup.d.ts.map +1 -1
  634. package/daemon/dist/startup.js +585 -8
  635. package/daemon/dist/startup.js.map +1 -1
  636. package/daemon/docs/reference/agent-spec.md +19 -12
  637. package/daemon/docs/reference/agent-startup-guide.md +11 -11
  638. package/daemon/docs/reference/project-workspace.md +102 -0
  639. package/daemon/specs/agents/apps/vault-specialist/agent.yaml +2 -2
  640. package/daemon/specs/agents/apps/vault-specialist/guidance/role.md +0 -1
  641. package/daemon/specs/agents/conveyor/builder/agent.yaml +35 -0
  642. package/daemon/specs/agents/conveyor/builder/guidance/role.md +31 -0
  643. package/daemon/specs/agents/conveyor/builder/startup/context.md +9 -0
  644. package/daemon/specs/agents/conveyor/lead/agent.yaml +35 -0
  645. package/daemon/specs/agents/conveyor/lead/guidance/role.md +34 -0
  646. package/daemon/specs/agents/conveyor/lead/startup/context.md +15 -0
  647. package/daemon/specs/agents/conveyor/planner/agent.yaml +35 -0
  648. package/daemon/specs/agents/conveyor/planner/guidance/role.md +29 -0
  649. package/daemon/specs/agents/conveyor/planner/startup/context.md +12 -0
  650. package/daemon/specs/agents/conveyor/reviewer/agent.yaml +35 -0
  651. package/daemon/specs/agents/conveyor/reviewer/guidance/role.md +29 -0
  652. package/daemon/specs/agents/conveyor/reviewer/startup/context.md +10 -0
  653. package/daemon/specs/agents/design/product-designer/agent.yaml +1 -1
  654. package/daemon/specs/agents/development/implementer/agent.yaml +2 -2
  655. package/daemon/specs/agents/development/implementer/guidance/role.md +0 -1
  656. package/daemon/specs/agents/development/qa/agent.yaml +1 -1
  657. package/daemon/specs/agents/orchestration/orchestrator/agent.yaml +2 -2
  658. package/daemon/specs/agents/orchestration/orchestrator/guidance/role.md +2 -3
  659. package/daemon/specs/agents/product-management/pm/agent.yaml +4 -0
  660. package/daemon/specs/agents/research/analyst/agent.yaml +1 -1
  661. package/daemon/specs/agents/research/synthesizer/agent.yaml +1 -1
  662. package/daemon/specs/agents/review/independent-reviewer/agent.yaml +1 -1
  663. package/daemon/specs/agents/shared/agent.yaml +17 -2
  664. package/daemon/specs/agents/shared/runtime/claude-mcp.fragment.json +12 -0
  665. package/daemon/specs/agents/shared/runtime/claude-settings.fragment.json +16 -0
  666. package/daemon/specs/agents/shared/runtime/codex-config.fragment.toml +5 -0
  667. package/daemon/specs/agents/shared/skills/claude-compact-in-place/SKILL.md +100 -0
  668. package/daemon/specs/agents/shared/skills/core/openrig-operator/SKILL.md +110 -0
  669. package/daemon/specs/agents/shared/skills/core/openrig-user/SKILL.md +69 -1
  670. package/daemon/specs/agents/shared/skills/core/openrig-user-settings/SKILL.md +153 -0
  671. package/daemon/specs/agents/shared/skills/pods/orchestration-team/SKILL.md +3 -0
  672. package/daemon/specs/agents/shared/skills/rig-architect/SKILL.md +11 -1
  673. package/daemon/specs/rigs/launch/conveyor/CULTURE.md +34 -0
  674. package/daemon/specs/rigs/launch/conveyor/README.md +33 -0
  675. package/daemon/specs/rigs/launch/conveyor/rig.yaml +72 -0
  676. package/daemon/specs/rigs/preview/product-team/CULTURE.md +2 -2
  677. package/daemon/specs/rigs/preview/product-team/rig.yaml +3 -4
  678. package/dist/bin-wrapper.js +0 -0
  679. package/dist/commands/agent-image.d.ts +4 -0
  680. package/dist/commands/agent-image.d.ts.map +1 -0
  681. package/dist/commands/agent-image.js +352 -0
  682. package/dist/commands/agent-image.js.map +1 -0
  683. package/dist/commands/capture.d.ts +7 -1
  684. package/dist/commands/capture.d.ts.map +1 -1
  685. package/dist/commands/capture.js +59 -1
  686. package/dist/commands/capture.js.map +1 -1
  687. package/dist/commands/compact-plan.d.ts +9 -0
  688. package/dist/commands/compact-plan.d.ts.map +1 -0
  689. package/dist/commands/compact-plan.js +354 -0
  690. package/dist/commands/compact-plan.js.map +1 -0
  691. package/dist/commands/config-init-workspace.d.ts +35 -0
  692. package/dist/commands/config-init-workspace.d.ts.map +1 -0
  693. package/dist/commands/config-init-workspace.js +300 -0
  694. package/dist/commands/config-init-workspace.js.map +1 -0
  695. package/dist/commands/config.d.ts.map +1 -1
  696. package/dist/commands/config.js +78 -18
  697. package/dist/commands/config.js.map +1 -1
  698. package/dist/commands/context-pack.d.ts +4 -0
  699. package/dist/commands/context-pack.d.ts.map +1 -0
  700. package/dist/commands/context-pack.js +357 -0
  701. package/dist/commands/context-pack.js.map +1 -0
  702. package/dist/commands/context.d.ts +9 -0
  703. package/dist/commands/context.d.ts.map +1 -0
  704. package/dist/commands/context.js +220 -0
  705. package/dist/commands/context.js.map +1 -0
  706. package/dist/commands/daemon.d.ts.map +1 -1
  707. package/dist/commands/daemon.js +8 -0
  708. package/dist/commands/daemon.js.map +1 -1
  709. package/dist/commands/expand.d.ts.map +1 -1
  710. package/dist/commands/expand.js +15 -4
  711. package/dist/commands/expand.js.map +1 -1
  712. package/dist/commands/heartbeat.d.ts +99 -0
  713. package/dist/commands/heartbeat.d.ts.map +1 -0
  714. package/dist/commands/heartbeat.js +393 -0
  715. package/dist/commands/heartbeat.js.map +1 -0
  716. package/dist/commands/import.d.ts.map +1 -1
  717. package/dist/commands/import.js +7 -2
  718. package/dist/commands/import.js.map +1 -1
  719. package/dist/commands/project.d.ts +14 -0
  720. package/dist/commands/project.d.ts.map +1 -0
  721. package/dist/commands/project.js +157 -0
  722. package/dist/commands/project.js.map +1 -0
  723. package/dist/commands/ps.d.ts +20 -3
  724. package/dist/commands/ps.d.ts.map +1 -1
  725. package/dist/commands/ps.js +614 -33
  726. package/dist/commands/ps.js.map +1 -1
  727. package/dist/commands/queue.d.ts +16 -0
  728. package/dist/commands/queue.d.ts.map +1 -0
  729. package/dist/commands/queue.js +410 -0
  730. package/dist/commands/queue.js.map +1 -0
  731. package/dist/commands/restore-check.d.ts +9 -0
  732. package/dist/commands/restore-check.d.ts.map +1 -0
  733. package/dist/commands/restore-check.js +234 -0
  734. package/dist/commands/restore-check.js.map +1 -0
  735. package/dist/commands/restore-packet.d.ts +9 -0
  736. package/dist/commands/restore-packet.d.ts.map +1 -0
  737. package/dist/commands/restore-packet.js +383 -0
  738. package/dist/commands/restore-packet.js.map +1 -0
  739. package/dist/commands/restore.d.ts.map +1 -1
  740. package/dist/commands/restore.js +44 -1
  741. package/dist/commands/restore.js.map +1 -1
  742. package/dist/commands/seat.d.ts +5 -0
  743. package/dist/commands/seat.d.ts.map +1 -0
  744. package/dist/commands/seat.js +170 -0
  745. package/dist/commands/seat.js.map +1 -0
  746. package/dist/commands/send.d.ts +19 -1
  747. package/dist/commands/send.d.ts.map +1 -1
  748. package/dist/commands/send.js +116 -5
  749. package/dist/commands/send.js.map +1 -1
  750. package/dist/commands/setup.js +3 -3
  751. package/dist/commands/setup.js.map +1 -1
  752. package/dist/commands/specs.d.ts +4 -2
  753. package/dist/commands/specs.d.ts.map +1 -1
  754. package/dist/commands/specs.js +111 -24
  755. package/dist/commands/specs.js.map +1 -1
  756. package/dist/commands/stream.d.ts +12 -0
  757. package/dist/commands/stream.d.ts.map +1 -0
  758. package/dist/commands/stream.js +111 -0
  759. package/dist/commands/stream.js.map +1 -0
  760. package/dist/commands/up.d.ts.map +1 -1
  761. package/dist/commands/up.js +79 -5
  762. package/dist/commands/up.js.map +1 -1
  763. package/dist/commands/view.d.ts +12 -0
  764. package/dist/commands/view.d.ts.map +1 -0
  765. package/dist/commands/view.js +82 -0
  766. package/dist/commands/view.js.map +1 -0
  767. package/dist/commands/watchdog.d.ts +15 -0
  768. package/dist/commands/watchdog.d.ts.map +1 -0
  769. package/dist/commands/watchdog.js +120 -0
  770. package/dist/commands/watchdog.js.map +1 -0
  771. package/dist/commands/whoami.d.ts +8 -1
  772. package/dist/commands/whoami.d.ts.map +1 -1
  773. package/dist/commands/whoami.js +69 -5
  774. package/dist/commands/whoami.js.map +1 -1
  775. package/dist/commands/workflow.d.ts +17 -0
  776. package/dist/commands/workflow.d.ts.map +1 -0
  777. package/dist/commands/workflow.js +175 -0
  778. package/dist/commands/workflow.js.map +1 -0
  779. package/dist/commands/workspace.d.ts +6 -0
  780. package/dist/commands/workspace.d.ts.map +1 -0
  781. package/dist/commands/workspace.js +83 -0
  782. package/dist/commands/workspace.js.map +1 -0
  783. package/dist/config-store.d.ts +73 -1
  784. package/dist/config-store.d.ts.map +1 -1
  785. package/dist/config-store.js +314 -42
  786. package/dist/config-store.js.map +1 -1
  787. package/dist/cross-host-cli-helpers.d.ts +12 -0
  788. package/dist/cross-host-cli-helpers.d.ts.map +1 -0
  789. package/dist/cross-host-cli-helpers.js +48 -0
  790. package/dist/cross-host-cli-helpers.js.map +1 -0
  791. package/dist/cross-host-executor.d.ts +84 -0
  792. package/dist/cross-host-executor.d.ts.map +1 -0
  793. package/dist/cross-host-executor.js +138 -0
  794. package/dist/cross-host-executor.js.map +1 -0
  795. package/dist/daemon-lifecycle.d.ts +22 -0
  796. package/dist/daemon-lifecycle.d.ts.map +1 -1
  797. package/dist/daemon-lifecycle.js +41 -0
  798. package/dist/daemon-lifecycle.js.map +1 -1
  799. package/dist/host-registry.d.ts +50 -0
  800. package/dist/host-registry.d.ts.map +1 -0
  801. package/dist/host-registry.js +116 -0
  802. package/dist/host-registry.js.map +1 -0
  803. package/dist/index.d.ts +24 -0
  804. package/dist/index.d.ts.map +1 -1
  805. package/dist/index.js +30 -0
  806. package/dist/index.js.map +1 -1
  807. package/dist/mcp-server.d.ts.map +1 -1
  808. package/dist/mcp-server.js +22 -2
  809. package/dist/mcp-server.js.map +1 -1
  810. package/dist/openrig-compat.d.ts +1 -1
  811. package/dist/openrig-compat.d.ts.map +1 -1
  812. package/dist/openrig-compat.js +6 -4
  813. package/dist/openrig-compat.js.map +1 -1
  814. package/dist/restore-packet/claude-transcript-parser.d.ts +12 -0
  815. package/dist/restore-packet/claude-transcript-parser.d.ts.map +1 -0
  816. package/dist/restore-packet/claude-transcript-parser.js +221 -0
  817. package/dist/restore-packet/claude-transcript-parser.js.map +1 -0
  818. package/dist/restore-packet/codex-jsonl-parser.d.ts +11 -0
  819. package/dist/restore-packet/codex-jsonl-parser.d.ts.map +1 -0
  820. package/dist/restore-packet/codex-jsonl-parser.js +159 -0
  821. package/dist/restore-packet/codex-jsonl-parser.js.map +1 -0
  822. package/dist/restore-packet/omitted-records.d.ts +60 -0
  823. package/dist/restore-packet/omitted-records.d.ts.map +1 -0
  824. package/dist/restore-packet/omitted-records.js +116 -0
  825. package/dist/restore-packet/omitted-records.js.map +1 -0
  826. package/dist/restore-packet/packet-writer.d.ts +59 -0
  827. package/dist/restore-packet/packet-writer.d.ts.map +1 -0
  828. package/dist/restore-packet/packet-writer.js +224 -0
  829. package/dist/restore-packet/packet-writer.js.map +1 -0
  830. package/dist/restore-packet/redaction.d.ts +30 -0
  831. package/dist/restore-packet/redaction.d.ts.map +1 -0
  832. package/dist/restore-packet/redaction.js +71 -0
  833. package/dist/restore-packet/redaction.js.map +1 -0
  834. package/dist/restore-packet/runtime-detect.d.ts +19 -0
  835. package/dist/restore-packet/runtime-detect.d.ts.map +1 -0
  836. package/dist/restore-packet/runtime-detect.js +81 -0
  837. package/dist/restore-packet/runtime-detect.js.map +1 -0
  838. package/dist/restore-packet/schema-validator.d.ts +13 -0
  839. package/dist/restore-packet/schema-validator.d.ts.map +1 -0
  840. package/dist/restore-packet/schema-validator.js +245 -0
  841. package/dist/restore-packet/schema-validator.js.map +1 -0
  842. package/dist/restore-packet/types.d.ts +76 -0
  843. package/dist/restore-packet/types.d.ts.map +1 -0
  844. package/dist/restore-packet/types.js +15 -0
  845. package/dist/restore-packet/types.js.map +1 -0
  846. package/dist/schemas/restore-summary.schema.json +98 -0
  847. package/package.json +10 -3
  848. package/scripts/check-abi.mjs +123 -0
  849. package/ui/dist/assets/index-BDHU1JUK.js +412 -0
  850. package/ui/dist/assets/index-DXTyJSqu.css +1 -0
  851. package/ui/dist/graphics/operator-climber-monochrome.png +0 -0
  852. package/ui/dist/index.html +3 -2
  853. package/daemon/specs/agents/shared/skills/mental-model-ha/SKILL.md +0 -953
  854. package/ui/dist/assets/index-B09doO8H.js +0 -139
  855. package/ui/dist/assets/index-Ccd-jwRN.js +0 -225
  856. package/ui/dist/assets/index-DlMH-REm.css +0 -1
@@ -0,0 +1,744 @@
1
+ import { QueueTransitionLog } from "./queue-transition-log.js";
2
+ import { computeClosureRequiredAt, validateClosure, } from "./hot-potato-enforcer.js";
3
+ export const QUEUE_STATES = [
4
+ "pending",
5
+ "in-progress",
6
+ "done",
7
+ "blocked",
8
+ "failed",
9
+ "denied",
10
+ "canceled",
11
+ "handed-off",
12
+ ];
13
+ export const QUEUE_PRIORITIES = ["routine", "urgent", "critical"];
14
+ export class QueueRepositoryError extends Error {
15
+ code;
16
+ meta;
17
+ constructor(code, message, meta) {
18
+ super(message);
19
+ this.code = code;
20
+ this.meta = meta;
21
+ }
22
+ }
23
+ function newQitemId() {
24
+ const ts = new Date().toISOString().replace(/[-:T.Z]/g, "").slice(0, 14);
25
+ const hex = Math.floor(Math.random() * 0xffffffff)
26
+ .toString(16)
27
+ .padStart(8, "0");
28
+ return `qitem-${ts}-${hex}`;
29
+ }
30
+ /** PL-007 — defensive column probe. Older test fixtures bypass the
31
+ * canonical migration list, so target_repo may be absent. Mirrors
32
+ * the `hasNodeColumn` pattern in rig-repository.ts. */
33
+ function detectQueueColumn(db, columnName) {
34
+ try {
35
+ return db.prepare("PRAGMA table_info(queue_items)").all()
36
+ .some((row) => row.name === columnName);
37
+ }
38
+ catch {
39
+ return false;
40
+ }
41
+ }
42
+ /**
43
+ * L3 — Queue repository. Owns CRUD over `queue_items` plus the wired-in
44
+ * append-only transition log and hot-potato strict-rejection contract.
45
+ *
46
+ * Pattern mirrors `chat-repository.ts` (single class, atomic transactions,
47
+ * persist-event-then-notify). Cross-rig validation hook is `validateRig` —
48
+ * Phase A wires no-op; Phase B can plug in the rig registry to reject
49
+ * phantom-rig destinations. POC compatibility: `qitem_id` shape preserved.
50
+ */
51
+ export class QueueRepository {
52
+ db;
53
+ transitionLog;
54
+ eventBus;
55
+ validateRig;
56
+ transport;
57
+ /** PL-007 Workspace Primitive — true when migration 038 has applied the
58
+ * queue_items.target_repo column. Older test fixtures that bypass the
59
+ * canonical migration list don't have the column; INSERTs degrade to
60
+ * the pre-PL-007 statement and target_repo input is silently dropped.
61
+ * Production daemons always have the column (migration is in startup.ts). */
62
+ hasTargetRepoColumn;
63
+ constructor(db, eventBus, opts) {
64
+ this.db = db;
65
+ this.eventBus = eventBus;
66
+ this.transitionLog = new QueueTransitionLog(db);
67
+ this.validateRig = opts?.validateRig ?? (() => true);
68
+ this.transport = opts?.transport;
69
+ this.hasTargetRepoColumn = detectQueueColumn(db, "target_repo");
70
+ }
71
+ /**
72
+ * Attach the wake-path transport AFTER construction. Used by daemon
73
+ * startup, where SessionTransport is constructed later in the dep graph
74
+ * than QueueRepository (because SessionTransport needs agentActivityStore
75
+ * which itself needs eventBus). Calling this is safe at any time; create /
76
+ * handoff / handoff-and-complete will start nudging on the next call.
77
+ */
78
+ attachTransport(transport) {
79
+ this.transport = transport;
80
+ }
81
+ /**
82
+ * Issue a default nudge to the destination after a create / handoff /
83
+ * handoff-and-complete commit. Records the result via recordNudgeAttempt.
84
+ * Errors are caught and surfaced as nudge_result strings — they do not
85
+ * unwind the underlying queue mutation.
86
+ *
87
+ * Phase D extension point (orch-ratified): public so workflow-projector
88
+ * can invoke after its outer transaction commits, completing the
89
+ * createWithinTransaction()'s deferred post-commit side effects.
90
+ */
91
+ async maybeNudge(qitemId, destinationSession, nudgeOpt) {
92
+ if (nudgeOpt === false)
93
+ return;
94
+ if (!this.transport)
95
+ return;
96
+ const text = `Queue handoff: ${qitemId} - check your queue.`;
97
+ try {
98
+ const res = await this.transport.send(destinationSession, text, { verify: true });
99
+ const result = res.ok
100
+ ? (res.verified ? "verified" : "sent-unverified")
101
+ : `failed:${res.error ?? res.reason ?? "unknown"}`;
102
+ this.recordNudgeAttempt(qitemId, result);
103
+ }
104
+ catch (err) {
105
+ const msg = err instanceof Error ? err.message : String(err);
106
+ this.recordNudgeAttempt(qitemId, `failed:${msg}`);
107
+ }
108
+ }
109
+ async create(input) {
110
+ if (!this.validateRig(input.destinationSession)) {
111
+ throw new QueueRepositoryError("unknown_destination_rig", `destination_session ${input.destinationSession} references an unknown rig`);
112
+ }
113
+ const txn = this.db.transaction(() => this.createInTransactionalContext(input));
114
+ const { qitemId: id, persistedEvent } = txn();
115
+ this.eventBus.notifySubscribers(persistedEvent);
116
+ await this.maybeNudge(id, input.destinationSession, input.nudge);
117
+ return this.getByIdOrThrow(id);
118
+ }
119
+ /**
120
+ * PL-004 Phase D extension point (orch-ratified per slice IMPL §
121
+ * Driver Handoff Contract). Creates a queue item using the SAME
122
+ * caller-managed db.transaction for transactional-scribe semantics
123
+ * (workflow-projector folds step closure + next-qitem creation into
124
+ * one atomic unit). Returns the persisted event AND qitem id so the
125
+ * caller can defer notifySubscribers/maybeNudge until AFTER its
126
+ * outer transaction commits.
127
+ *
128
+ * Caller MUST:
129
+ * 1. Invoke this from inside a `db.transaction(() => {...})` block.
130
+ * 2. After the outer txn commits, call:
131
+ * - eventBus.notifySubscribers(persistedEvent)
132
+ * - this.maybeNudge(qitemId, destinationSession, input.nudge)
133
+ * 3. NOT call this from outside a transaction (will produce a
134
+ * half-state if the caller errors before committing).
135
+ *
136
+ * The split exists ONLY because notifySubscribers + maybeNudge are
137
+ * post-commit side effects (subscribers should not see events for
138
+ * data that may roll back; nudges should not fire for handoffs that
139
+ * may roll back). For independent create()s that don't need to
140
+ * compose with an outer transaction, use create() instead.
141
+ */
142
+ createWithinTransaction(input) {
143
+ if (!this.validateRig(input.destinationSession)) {
144
+ throw new QueueRepositoryError("unknown_destination_rig", `destination_session ${input.destinationSession} references an unknown rig`);
145
+ }
146
+ const result = this.createInTransactionalContext(input);
147
+ return {
148
+ qitemId: result.qitemId,
149
+ persistedEvent: result.persistedEvent,
150
+ destinationSession: input.destinationSession,
151
+ nudge: input.nudge,
152
+ };
153
+ }
154
+ /**
155
+ * Internal: insert + transition + emit event. Caller is responsible
156
+ * for transaction wrapping (the public create() wraps; the public
157
+ * createWithinTransaction() does not — caller's outer transaction
158
+ * provides the atomic boundary).
159
+ */
160
+ createInTransactionalContext(input) {
161
+ const id = input.qitemId ?? newQitemId();
162
+ const ts = new Date().toISOString();
163
+ const priority = input.priority ?? "routine";
164
+ const tier = input.tier ?? null;
165
+ const tags = input.tags ? JSON.stringify(input.tags) : null;
166
+ const chain = input.chainOfRecord ? JSON.stringify(input.chainOfRecord) : null;
167
+ const expiresAt = input.expiresAt ?? null;
168
+ const targetRepo = input.targetRepo ?? null;
169
+ if (this.hasTargetRepoColumn) {
170
+ this.db
171
+ .prepare(`INSERT INTO queue_items (
172
+ qitem_id, ts_created, ts_updated, source_session, destination_session,
173
+ state, priority, tier, tags, expires_at, chain_of_record, body, target_repo
174
+ ) VALUES (?, ?, ?, ?, ?, 'pending', ?, ?, ?, ?, ?, ?, ?)`)
175
+ .run(id, ts, ts, input.sourceSession, input.destinationSession, priority, tier, tags, expiresAt, chain, input.body, targetRepo);
176
+ }
177
+ else {
178
+ this.db
179
+ .prepare(`INSERT INTO queue_items (
180
+ qitem_id, ts_created, ts_updated, source_session, destination_session,
181
+ state, priority, tier, tags, expires_at, chain_of_record, body
182
+ ) VALUES (?, ?, ?, ?, ?, 'pending', ?, ?, ?, ?, ?, ?)`)
183
+ .run(id, ts, ts, input.sourceSession, input.destinationSession, priority, tier, tags, expiresAt, chain, input.body);
184
+ }
185
+ this.transitionLog.append({
186
+ qitemId: id,
187
+ state: "pending",
188
+ actorSession: input.sourceSession,
189
+ transitionNote: "created",
190
+ });
191
+ const persistedEvent = this.eventBus.persistWithinTransaction({
192
+ type: "queue.created",
193
+ qitemId: id,
194
+ sourceSession: input.sourceSession,
195
+ destinationSession: input.destinationSession,
196
+ priority,
197
+ tier,
198
+ });
199
+ return { qitemId: id, persistedEvent };
200
+ }
201
+ /**
202
+ * Transactional handoff: close the source qitem (state=done,
203
+ * closure_reason=handed_off_to) and create a new qitem owned by `toSession`,
204
+ * with `handed_off_from` recording the chain. One atomic transaction.
205
+ */
206
+ async handoff(input) {
207
+ const source = this.getById(input.qitemId);
208
+ if (!source) {
209
+ throw new QueueRepositoryError("qitem_not_found", `qitem ${input.qitemId} not found`);
210
+ }
211
+ if (source.state === "done" || source.state === "handed-off") {
212
+ throw new QueueRepositoryError("qitem_already_terminal", `qitem ${input.qitemId} is already in terminal state ${source.state}`);
213
+ }
214
+ if (!this.validateRig(input.toSession)) {
215
+ throw new QueueRepositoryError("unknown_destination_rig", `to_session ${input.toSession} references an unknown rig`);
216
+ }
217
+ const newId = newQitemId();
218
+ const ts = new Date().toISOString();
219
+ const body = input.body ?? source.body;
220
+ const priority = input.priority ?? source.priority;
221
+ const tier = input.tier ?? source.tier;
222
+ const tags = input.tags ? JSON.stringify(input.tags) : (source.tags ? JSON.stringify(source.tags) : null);
223
+ const chain = JSON.stringify([...(source.chainOfRecord ?? []), source.qitemId]);
224
+ const targetRepo = input.targetRepo === undefined ? source.targetRepo : input.targetRepo;
225
+ const events = [];
226
+ const txn = this.db.transaction(() => {
227
+ this.db
228
+ .prepare(`UPDATE queue_items
229
+ SET state = 'handed-off',
230
+ ts_updated = ?,
231
+ handed_off_to = ?,
232
+ closure_reason = 'handed_off_to',
233
+ closure_target = ?
234
+ WHERE qitem_id = ?`)
235
+ .run(ts, input.toSession, input.toSession, source.qitemId);
236
+ this.transitionLog.append({
237
+ qitemId: source.qitemId,
238
+ state: "handed-off",
239
+ actorSession: input.fromSession,
240
+ transitionNote: input.transitionNote ?? `handed off to ${input.toSession}`,
241
+ closureReason: "handed_off_to",
242
+ closureTarget: input.toSession,
243
+ });
244
+ if (this.hasTargetRepoColumn) {
245
+ this.db
246
+ .prepare(`INSERT INTO queue_items (
247
+ qitem_id, ts_created, ts_updated, source_session, destination_session,
248
+ state, priority, tier, tags, handed_off_from, chain_of_record, body, target_repo
249
+ ) VALUES (?, ?, ?, ?, ?, 'pending', ?, ?, ?, ?, ?, ?, ?)`)
250
+ .run(newId, ts, ts, input.fromSession, input.toSession, priority, tier, tags, source.qitemId, chain, body, targetRepo);
251
+ }
252
+ else {
253
+ this.db
254
+ .prepare(`INSERT INTO queue_items (
255
+ qitem_id, ts_created, ts_updated, source_session, destination_session,
256
+ state, priority, tier, tags, handed_off_from, chain_of_record, body
257
+ ) VALUES (?, ?, ?, ?, ?, 'pending', ?, ?, ?, ?, ?, ?)`)
258
+ .run(newId, ts, ts, input.fromSession, input.toSession, priority, tier, tags, source.qitemId, chain, body);
259
+ }
260
+ this.transitionLog.append({
261
+ qitemId: newId,
262
+ state: "pending",
263
+ actorSession: input.fromSession,
264
+ transitionNote: `handoff from ${source.qitemId}`,
265
+ });
266
+ const handoffEvent = this.eventBus.persistWithinTransaction({
267
+ type: "queue.handed_off",
268
+ qitemId: source.qitemId,
269
+ fromSession: input.fromSession,
270
+ toSession: input.toSession,
271
+ closureReason: "handed_off_to",
272
+ });
273
+ events.push({ name: "queue.handed_off", payload: handoffEvent });
274
+ const createdEvent = this.eventBus.persistWithinTransaction({
275
+ type: "queue.created",
276
+ qitemId: newId,
277
+ sourceSession: input.fromSession,
278
+ destinationSession: input.toSession,
279
+ priority,
280
+ tier,
281
+ });
282
+ events.push({ name: "queue.created", payload: createdEvent });
283
+ });
284
+ txn();
285
+ for (const e of events) {
286
+ this.eventBus.notifySubscribers(e.payload);
287
+ }
288
+ await this.maybeNudge(newId, input.toSession, input.nudge);
289
+ return {
290
+ closed: this.getByIdOrThrow(source.qitemId),
291
+ created: this.getByIdOrThrow(newId),
292
+ };
293
+ }
294
+ /**
295
+ * Variant of {@link handoff} that closes the source qitem as `done`
296
+ * (terminal closure) instead of `handed-off` (intermediate). Same atomic
297
+ * close+create, same chain_of_record semantics, same default-nudge behavior.
298
+ * Use when the source seat is fully complete with the work — no follow-up
299
+ * tracking needed against the source qitem.
300
+ */
301
+ async handoffAndComplete(input) {
302
+ const source = this.getById(input.qitemId);
303
+ if (!source) {
304
+ throw new QueueRepositoryError("qitem_not_found", `qitem ${input.qitemId} not found`);
305
+ }
306
+ if (source.state === "done" || source.state === "handed-off") {
307
+ throw new QueueRepositoryError("qitem_already_terminal", `qitem ${input.qitemId} is already in terminal state ${source.state}`);
308
+ }
309
+ if (!this.validateRig(input.toSession)) {
310
+ throw new QueueRepositoryError("unknown_destination_rig", `to_session ${input.toSession} references an unknown rig`);
311
+ }
312
+ const newId = newQitemId();
313
+ const ts = new Date().toISOString();
314
+ const body = input.body ?? source.body;
315
+ const priority = input.priority ?? source.priority;
316
+ const tier = input.tier ?? source.tier;
317
+ const tags = input.tags ? JSON.stringify(input.tags) : (source.tags ? JSON.stringify(source.tags) : null);
318
+ const chain = JSON.stringify([...(source.chainOfRecord ?? []), source.qitemId]);
319
+ const targetRepo = input.targetRepo === undefined ? source.targetRepo : input.targetRepo;
320
+ const events = [];
321
+ const txn = this.db.transaction(() => {
322
+ this.db
323
+ .prepare(`UPDATE queue_items
324
+ SET state = 'done',
325
+ ts_updated = ?,
326
+ handed_off_to = ?,
327
+ closure_reason = 'handed_off_to',
328
+ closure_target = ?
329
+ WHERE qitem_id = ?`)
330
+ .run(ts, input.toSession, input.toSession, source.qitemId);
331
+ this.transitionLog.append({
332
+ qitemId: source.qitemId,
333
+ state: "done",
334
+ actorSession: input.fromSession,
335
+ transitionNote: input.transitionNote ?? `handoff-and-complete to ${input.toSession}`,
336
+ closureReason: "handed_off_to",
337
+ closureTarget: input.toSession,
338
+ });
339
+ if (this.hasTargetRepoColumn) {
340
+ this.db
341
+ .prepare(`INSERT INTO queue_items (
342
+ qitem_id, ts_created, ts_updated, source_session, destination_session,
343
+ state, priority, tier, tags, handed_off_from, chain_of_record, body, target_repo
344
+ ) VALUES (?, ?, ?, ?, ?, 'pending', ?, ?, ?, ?, ?, ?, ?)`)
345
+ .run(newId, ts, ts, input.fromSession, input.toSession, priority, tier, tags, source.qitemId, chain, body, targetRepo);
346
+ }
347
+ else {
348
+ this.db
349
+ .prepare(`INSERT INTO queue_items (
350
+ qitem_id, ts_created, ts_updated, source_session, destination_session,
351
+ state, priority, tier, tags, handed_off_from, chain_of_record, body
352
+ ) VALUES (?, ?, ?, ?, ?, 'pending', ?, ?, ?, ?, ?, ?)`)
353
+ .run(newId, ts, ts, input.fromSession, input.toSession, priority, tier, tags, source.qitemId, chain, body);
354
+ }
355
+ this.transitionLog.append({
356
+ qitemId: newId,
357
+ state: "pending",
358
+ actorSession: input.fromSession,
359
+ transitionNote: `handoff-and-complete from ${source.qitemId}`,
360
+ });
361
+ const handoffEvent = this.eventBus.persistWithinTransaction({
362
+ type: "queue.handed_off",
363
+ qitemId: source.qitemId,
364
+ fromSession: input.fromSession,
365
+ toSession: input.toSession,
366
+ closureReason: "handed_off_to",
367
+ });
368
+ events.push({ name: "queue.handed_off", payload: handoffEvent });
369
+ const createdEvent = this.eventBus.persistWithinTransaction({
370
+ type: "queue.created",
371
+ qitemId: newId,
372
+ sourceSession: input.fromSession,
373
+ destinationSession: input.toSession,
374
+ priority,
375
+ tier,
376
+ });
377
+ events.push({ name: "queue.created", payload: createdEvent });
378
+ });
379
+ txn();
380
+ for (const e of events) {
381
+ this.eventBus.notifySubscribers(e.payload);
382
+ }
383
+ await this.maybeNudge(newId, input.toSession, input.nudge);
384
+ return {
385
+ closed: this.getByIdOrThrow(source.qitemId),
386
+ created: this.getByIdOrThrow(newId),
387
+ };
388
+ }
389
+ /**
390
+ * `whoami` — return the seat's queue position from the daemon's perspective.
391
+ * Counts active qitems (pending + in-progress + blocked) destined for the
392
+ * caller, lists the most recent active qitems, and reports counts for the
393
+ * caller's outgoing source role too. Read-only; no mutations.
394
+ *
395
+ * Per PL-004 Phase A § Routes: GET /api/queue/whoami.
396
+ */
397
+ whoami(session, opts) {
398
+ const limit = Math.max(1, Math.min(opts?.recentLimit ?? 25, 200));
399
+ const countByState = (state) => {
400
+ const row = this.db
401
+ .prepare(`SELECT COUNT(*) AS n FROM queue_items WHERE destination_session = ? AND state = ?`)
402
+ .get(session, state);
403
+ return row.n;
404
+ };
405
+ const recent = this.db
406
+ .prepare(`SELECT * FROM queue_items
407
+ WHERE destination_session = ?
408
+ AND state IN ('pending','in-progress','blocked')
409
+ ORDER BY ts_updated DESC
410
+ LIMIT ?`)
411
+ .all(session, limit);
412
+ const sourceTotalRow = this.db
413
+ .prepare(`SELECT COUNT(*) AS n FROM queue_items WHERE source_session = ?`)
414
+ .get(session);
415
+ return {
416
+ session,
417
+ asDestination: {
418
+ pending: countByState("pending"),
419
+ inProgress: countByState("in-progress"),
420
+ blocked: countByState("blocked"),
421
+ recent: recent.map((r) => this.rowToItem(r)),
422
+ },
423
+ asSource: { total: sourceTotalRow.n },
424
+ };
425
+ }
426
+ /**
427
+ * Mark a qitem `in-progress` (claim). Computes closure_required_at from tier.
428
+ */
429
+ claim(input) {
430
+ const qitem = this.getById(input.qitemId);
431
+ if (!qitem) {
432
+ throw new QueueRepositoryError("qitem_not_found", `qitem ${input.qitemId} not found`);
433
+ }
434
+ if (qitem.destinationSession !== input.destinationSession) {
435
+ throw new QueueRepositoryError("claim_destination_mismatch", `qitem ${input.qitemId} destination is ${qitem.destinationSession}, not ${input.destinationSession}`);
436
+ }
437
+ if (qitem.state !== "pending" && qitem.state !== "blocked") {
438
+ throw new QueueRepositoryError("qitem_not_claimable", `qitem ${input.qitemId} is in state ${qitem.state}; only pending/blocked are claimable`);
439
+ }
440
+ const ts = new Date().toISOString();
441
+ const closureRequiredAt = computeClosureRequiredAt(ts, qitem.tier);
442
+ const txn = this.db.transaction(() => {
443
+ this.db
444
+ .prepare(`UPDATE queue_items
445
+ SET state = 'in-progress',
446
+ ts_updated = ?,
447
+ claimed_at = ?,
448
+ closure_required_at = ?
449
+ WHERE qitem_id = ?`)
450
+ .run(ts, ts, closureRequiredAt, input.qitemId);
451
+ this.transitionLog.append({
452
+ qitemId: input.qitemId,
453
+ state: "in-progress",
454
+ actorSession: input.destinationSession,
455
+ transitionNote: "claimed",
456
+ });
457
+ return this.eventBus.persistWithinTransaction({
458
+ type: "queue.claimed",
459
+ qitemId: input.qitemId,
460
+ destinationSession: input.destinationSession,
461
+ claimedAt: ts,
462
+ closureRequiredAt,
463
+ });
464
+ });
465
+ const persistedEvent = txn();
466
+ this.eventBus.notifySubscribers(persistedEvent);
467
+ return this.getByIdOrThrow(input.qitemId);
468
+ }
469
+ unclaim(qitemId, destinationSession, reason) {
470
+ const qitem = this.getById(qitemId);
471
+ if (!qitem) {
472
+ throw new QueueRepositoryError("qitem_not_found", `qitem ${qitemId} not found`);
473
+ }
474
+ if (qitem.state !== "in-progress") {
475
+ throw new QueueRepositoryError("qitem_not_in_progress", `qitem ${qitemId} is in state ${qitem.state}; only in-progress can be unclaimed`);
476
+ }
477
+ const ts = new Date().toISOString();
478
+ const txn = this.db.transaction(() => {
479
+ this.db
480
+ .prepare(`UPDATE queue_items
481
+ SET state = 'pending',
482
+ ts_updated = ?,
483
+ claimed_at = NULL,
484
+ closure_required_at = NULL
485
+ WHERE qitem_id = ?`)
486
+ .run(ts, qitemId);
487
+ this.transitionLog.append({
488
+ qitemId,
489
+ state: "pending",
490
+ actorSession: destinationSession,
491
+ transitionNote: `unclaimed: ${reason}`,
492
+ });
493
+ return this.eventBus.persistWithinTransaction({
494
+ type: "queue.unclaimed",
495
+ qitemId,
496
+ destinationSession,
497
+ reason,
498
+ });
499
+ });
500
+ const persistedEvent = txn();
501
+ this.eventBus.notifySubscribers(persistedEvent);
502
+ return this.getByIdOrThrow(qitemId);
503
+ }
504
+ /**
505
+ * General state mutator. Routes through hot-potato strict-rejection on
506
+ * `done` transitions. All transitions append to the log.
507
+ *
508
+ * Phase B R2: emits queue.updated event atomically with the UPDATE +
509
+ * transition log append, so the view-event-bridge can wake SSE consumers
510
+ * on /api/views/:name/sse for normal state transitions (pending → blocked,
511
+ * in-progress → done, closure, escalation). Phase A write semantics are
512
+ * UNCHANGED — only an additional event emission inside the existing
513
+ * transaction. This is an explicit narrow event-only extension to a
514
+ * Phase A write surface so update-path mutations are visible to the
515
+ * view bridge.
516
+ */
517
+ update(input) {
518
+ const txn = this.db.transaction(() => this.updateInTransactionalContext(input));
519
+ const persistedEvent = txn();
520
+ this.eventBus.notifySubscribers(persistedEvent);
521
+ return this.getByIdOrThrow(input.qitemId);
522
+ }
523
+ /**
524
+ * PL-004 Phase D extension point (orch-ratified per slice IMPL Driver
525
+ * Handoff Contract / Guard R1 repair). Same closure validation +
526
+ * UPDATE + transition log + queue.updated event as update(), but
527
+ * runs inside the caller's outer db.transaction so it composes with
528
+ * workflow-projector's transactional-scribe contract.
529
+ *
530
+ * Caller MUST:
531
+ * 1. Invoke from inside a `db.transaction(() => {...})` block.
532
+ * 2. After the outer txn commits, call:
533
+ * eventBus.notifySubscribers(persistedEvent)
534
+ * 3. NOT call this from outside a transaction (will produce a
535
+ * half-state if the caller errors before committing).
536
+ *
537
+ * Closure validation runs at call time (before the UPDATE) so a
538
+ * Phase A invariant violation (e.g., state=done without closure_reason)
539
+ * throws before the workflow projector's outer transaction can commit
540
+ * any partial state. The Phase A hot-potato strict-rejection rule
541
+ * therefore applies to workflow projection unchanged.
542
+ */
543
+ updateWithinTransaction(input) {
544
+ const persistedEvent = this.updateInTransactionalContext(input);
545
+ return { qitemId: input.qitemId, persistedEvent };
546
+ }
547
+ /**
548
+ * Internal: closure validation + UPDATE + transition log + emit
549
+ * queue.updated event. Caller is responsible for transaction wrapping
550
+ * (the public update() wraps; the public updateWithinTransaction()
551
+ * composes inside the caller's outer transaction).
552
+ */
553
+ updateInTransactionalContext(input) {
554
+ const qitem = this.getById(input.qitemId);
555
+ if (!qitem) {
556
+ throw new QueueRepositoryError("qitem_not_found", `qitem ${input.qitemId} not found`);
557
+ }
558
+ if (!isQueueState(input.state)) {
559
+ throw new QueueRepositoryError("invalid_state", `state=${input.state} not valid; valid: ${QUEUE_STATES.join(", ")}`);
560
+ }
561
+ const validation = validateClosure({
562
+ state: input.state,
563
+ closureReason: input.closureReason ?? null,
564
+ closureTarget: input.closureTarget ?? null,
565
+ });
566
+ if (!validation.ok) {
567
+ throw new QueueRepositoryError(validation.code, validation.message, {
568
+ validReasons: "validReasons" in validation ? validation.validReasons : undefined,
569
+ });
570
+ }
571
+ const ts = new Date().toISOString();
572
+ const fromState = qitem.state;
573
+ this.db
574
+ .prepare(`UPDATE queue_items
575
+ SET state = ?,
576
+ ts_updated = ?,
577
+ closure_reason = COALESCE(?, closure_reason),
578
+ closure_target = COALESCE(?, closure_target),
579
+ handed_off_to = COALESCE(?, handed_off_to),
580
+ blocked_on = COALESCE(?, blocked_on)
581
+ WHERE qitem_id = ?`)
582
+ .run(input.state, ts, validation.closureReason, validation.closureTarget, input.handedOffTo ?? null, input.blockedOn ?? null, input.qitemId);
583
+ this.transitionLog.append({
584
+ qitemId: input.qitemId,
585
+ state: input.state,
586
+ actorSession: input.actorSession,
587
+ transitionNote: input.transitionNote,
588
+ closureReason: validation.closureReason ?? undefined,
589
+ closureTarget: validation.closureTarget ?? undefined,
590
+ });
591
+ return this.eventBus.persistWithinTransaction({
592
+ type: "queue.updated",
593
+ qitemId: input.qitemId,
594
+ fromState,
595
+ toState: input.state,
596
+ closureReason: validation.closureReason ?? null,
597
+ closureTarget: validation.closureTarget ?? null,
598
+ actorSession: input.actorSession,
599
+ });
600
+ }
601
+ getById(qitemId) {
602
+ const row = this.db
603
+ .prepare("SELECT * FROM queue_items WHERE qitem_id = ?")
604
+ .get(qitemId);
605
+ return row ? this.rowToItem(row) : null;
606
+ }
607
+ list(opts) {
608
+ const limit = opts?.limit ?? 100;
609
+ const conditions = [];
610
+ const params = [];
611
+ if (opts?.destinationSession) {
612
+ conditions.push("destination_session = ?");
613
+ params.push(opts.destinationSession);
614
+ }
615
+ if (opts?.sourceSession) {
616
+ conditions.push("source_session = ?");
617
+ params.push(opts.sourceSession);
618
+ }
619
+ if (opts?.state) {
620
+ const states = Array.isArray(opts.state) ? opts.state : [opts.state];
621
+ const placeholders = states.map(() => "?").join(", ");
622
+ conditions.push(`state IN (${placeholders})`);
623
+ params.push(...states);
624
+ }
625
+ if (opts?.targetRepo && this.hasTargetRepoColumn) {
626
+ conditions.push("target_repo = ?");
627
+ params.push(opts.targetRepo);
628
+ }
629
+ const where = conditions.length > 0 ? `WHERE ${conditions.join(" AND ")}` : "";
630
+ params.push(limit);
631
+ const rows = this.db
632
+ .prepare(`SELECT * FROM queue_items ${where} ORDER BY ts_created DESC LIMIT ?`)
633
+ .all(...params);
634
+ return rows.map((r) => this.rowToItem(r));
635
+ }
636
+ /**
637
+ * Find qitems whose `closure_required_at` is past now. Used by watchdog;
638
+ * does NOT itself emit events — callers decide whether to nudge or escalate.
639
+ */
640
+ findOverdue(now) {
641
+ const cutoff = now ?? new Date().toISOString();
642
+ const rows = this.db
643
+ .prepare(`SELECT * FROM queue_items
644
+ WHERE state = 'in-progress'
645
+ AND closure_required_at IS NOT NULL
646
+ AND closure_required_at <= ?`)
647
+ .all(cutoff);
648
+ return rows.map((r) => this.rowToItem(r));
649
+ }
650
+ recordNudgeAttempt(qitemId, result) {
651
+ const ts = new Date().toISOString();
652
+ this.db
653
+ .prepare(`UPDATE queue_items
654
+ SET last_nudge_attempt = ?, last_nudge_result = ?
655
+ WHERE qitem_id = ?`)
656
+ .run(ts, result, qitemId);
657
+ }
658
+ recordHeartbeat(qitemId) {
659
+ const ts = new Date().toISOString();
660
+ this.db
661
+ .prepare(`UPDATE queue_items SET last_heartbeat = ? WHERE qitem_id = ?`)
662
+ .run(ts, qitemId);
663
+ }
664
+ /**
665
+ * Pod-fallback: redirect qitem to a fallback destination (e.g., when a seat
666
+ * is unreachable). Emits qitem.fallback_routed; preserves chain_of_record.
667
+ */
668
+ routeToFallback(qitemId, fallbackDestination, reason) {
669
+ const qitem = this.getById(qitemId);
670
+ if (!qitem) {
671
+ throw new QueueRepositoryError("qitem_not_found", `qitem ${qitemId} not found`);
672
+ }
673
+ const ts = new Date().toISOString();
674
+ const originalDestination = qitem.destinationSession;
675
+ const newChain = JSON.stringify([...(qitem.chainOfRecord ?? []), `fallback-from:${originalDestination}`]);
676
+ const txn = this.db.transaction(() => {
677
+ this.db
678
+ .prepare(`UPDATE queue_items
679
+ SET destination_session = ?,
680
+ ts_updated = ?,
681
+ chain_of_record = ?,
682
+ resolution = ?
683
+ WHERE qitem_id = ?`)
684
+ .run(fallbackDestination, ts, newChain, `fallback: ${reason}`, qitemId);
685
+ this.transitionLog.append({
686
+ qitemId,
687
+ state: qitem.state,
688
+ actorSession: "system:queue-fallback",
689
+ transitionNote: `fallback-routed: ${originalDestination} → ${fallbackDestination} (${reason})`,
690
+ });
691
+ return this.eventBus.persistWithinTransaction({
692
+ type: "qitem.fallback_routed",
693
+ qitemId,
694
+ originalDestination,
695
+ rerouteDestination: fallbackDestination,
696
+ reason,
697
+ });
698
+ });
699
+ const persistedEvent = txn();
700
+ this.eventBus.notifySubscribers(persistedEvent);
701
+ return this.getByIdOrThrow(qitemId);
702
+ }
703
+ getByIdOrThrow(qitemId) {
704
+ const item = this.getById(qitemId);
705
+ if (!item) {
706
+ throw new QueueRepositoryError("qitem_not_found", `qitem ${qitemId} not found after write`);
707
+ }
708
+ return item;
709
+ }
710
+ rowToItem(row) {
711
+ return {
712
+ qitemId: row.qitem_id,
713
+ tsCreated: row.ts_created,
714
+ tsUpdated: row.ts_updated,
715
+ sourceSession: row.source_session,
716
+ destinationSession: row.destination_session,
717
+ state: row.state,
718
+ priority: row.priority,
719
+ tier: row.tier,
720
+ tags: row.tags ? JSON.parse(row.tags) : null,
721
+ blockedOn: row.blocked_on,
722
+ handedOffTo: row.handed_off_to,
723
+ handedOffFrom: row.handed_off_from,
724
+ expiresAt: row.expires_at,
725
+ chainOfRecord: row.chain_of_record ? JSON.parse(row.chain_of_record) : null,
726
+ body: row.body,
727
+ closureReason: row.closure_reason,
728
+ closureTarget: row.closure_target,
729
+ closureRequiredAt: row.closure_required_at,
730
+ claimedAt: row.claimed_at,
731
+ lastNudgeAttempt: row.last_nudge_attempt,
732
+ lastNudgeResult: row.last_nudge_result,
733
+ lastHeartbeat: row.last_heartbeat,
734
+ resolution: row.resolution,
735
+ // PL-007: target_repo present only when migration 038 has applied;
736
+ // older test fixtures supply legacy rows where target_repo is undefined.
737
+ targetRepo: row.target_repo ?? null,
738
+ };
739
+ }
740
+ }
741
+ function isQueueState(value) {
742
+ return QUEUE_STATES.includes(value);
743
+ }
744
+ //# sourceMappingURL=queue-repository.js.map