@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
@@ -51,11 +51,30 @@ import { RigTeardownOrchestrator } from "./domain/rig-teardown.js";
51
51
  import { ResumeMetadataRefresher } from "./domain/resume-metadata-refresher.js";
52
52
  import { TranscriptStore } from "./domain/transcript-store.js";
53
53
  import { SessionTransport } from "./domain/session-transport.js";
54
+ import { AgentActivityStore } from "./domain/agent-activity-store.js";
54
55
  import { HistoryQuery } from "./domain/history-query.js";
55
56
  import { AskService } from "./domain/ask-service.js";
56
57
  import { ChatRepository } from "./domain/chat-repository.js";
58
+ import { StreamStore } from "./domain/stream-store.js";
59
+ import { QueueRepository } from "./domain/queue-repository.js";
60
+ import { InboxHandler } from "./domain/inbox-handler.js";
61
+ import { OutboxHandler } from "./domain/outbox-handler.js";
62
+ import { ProjectClassifier } from "./domain/project-classifier.js";
63
+ import { ClassifierLeaseManager } from "./domain/classifier-lease-manager.js";
64
+ import { ViewProjector } from "./domain/view-projector.js";
65
+ import { wireViewEventBridge } from "./domain/view-event-bridge.js";
66
+ import { WatchdogJobsRepository } from "./domain/watchdog-jobs-repository.js";
67
+ import { WatchdogHistoryLog } from "./domain/watchdog-history-log.js";
68
+ import { WatchdogPolicyEngine } from "./domain/watchdog-policy-engine.js";
69
+ import { WatchdogScheduler } from "./domain/watchdog-scheduler.js";
70
+ import { WorkflowRuntime } from "./domain/workflow-runtime.js";
71
+ import { makeWorkflowKeepalivePolicy } from "./domain/policies/workflow-keepalive.js";
57
72
  import { SpecReviewService } from "./domain/spec-review-service.js";
58
73
  import { SpecLibraryService } from "./domain/spec-library-service.js";
74
+ import { ContextPackLibraryService } from "./domain/context-packs/context-pack-library-service.js";
75
+ import { AgentImageLibraryService } from "./domain/agent-images/agent-image-library-service.js";
76
+ import { SnapshotCapturer } from "./domain/agent-images/snapshot-capturer.js";
77
+ import { SettingsStore as ContextPackSettingsStore } from "./domain/user-settings/settings-store.js";
59
78
  import { WhoamiService } from "./domain/whoami-service.js";
60
79
  import { NodeCmuxService } from "./domain/node-cmux-service.js";
61
80
  import { createApp } from "./server.js";
@@ -80,15 +99,108 @@ import { podNamespaceSchema } from "./db/migrations/017_pod_namespace.js";
80
99
  import { contextUsageSchema } from "./db/migrations/018_context_usage.js";
81
100
  import { externalCliAttachmentSchema } from "./db/migrations/019_external_cli_attachment.js";
82
101
  import { rigServicesSchema } from "./db/migrations/020_rig_services.js";
102
+ import { seatHandoverObservabilitySchema } from "./db/migrations/021_seat_handover_observability.js";
103
+ import { nodeCodexConfigProfileSchema } from "./db/migrations/022_node_codex_config_profile.js";
104
+ import { streamItemsSchema } from "./db/migrations/023_stream_items.js";
105
+ import { queueItemsSchema } from "./db/migrations/024_queue_items.js";
106
+ import { queueTransitionsSchema } from "./db/migrations/025_queue_transitions.js";
107
+ import { inboxEntriesSchema } from "./db/migrations/026_inbox_entries.js";
108
+ import { outboxEntriesSchema } from "./db/migrations/027_outbox_entries.js";
109
+ import { projectClassificationsSchema } from "./db/migrations/028_project_classifications.js";
110
+ import { classifierLeasesSchema } from "./db/migrations/029_classifier_leases.js";
111
+ import { viewsCustomSchema } from "./db/migrations/030_views_custom.js";
112
+ import { watchdogJobsSchema } from "./db/migrations/031_watchdog_jobs.js";
113
+ import { watchdogHistorySchema } from "./db/migrations/032_watchdog_history.js";
114
+ import { workflowSpecsSchema } from "./db/migrations/033_workflow_specs.js";
115
+ import { workflowInstancesSchema } from "./db/migrations/034_workflow_instances.js";
116
+ import { workflowStepTrailsSchema } from "./db/migrations/035_workflow_step_trails.js";
117
+ import { watchdogPolicyEnumExtensionSchema } from "./db/migrations/036_watchdog_policy_enum_extension.js";
118
+ import { missionControlActionsSchema } from "./db/migrations/037_mission_control_actions.js";
119
+ import { workspacePrimitiveSchema } from "./db/migrations/038_workspace_primitive.js";
120
+ import { queueTargetRepoSchema } from "./db/migrations/039_queue_target_repo.js";
121
+ import { MissionControlActionLog } from "./domain/mission-control/mission-control-action-log.js";
122
+ import { MissionControlWriteContract } from "./domain/mission-control/mission-control-write-contract.js";
123
+ import { MissionControlReadLayer } from "./domain/mission-control/mission-control-read-layer.js";
124
+ import { MissionControlFleetCliCapability, makeLocalCliCapabilityProbe, } from "./domain/mission-control/mission-control-fleet-cli-capability.js";
125
+ import { MissionControlAuditBrowse } from "./domain/mission-control/audit-browse.js";
126
+ import { MissionControlNotificationDispatcher } from "./domain/mission-control/notification-dispatcher.js";
127
+ import { NtfyNotificationAdapter } from "./domain/mission-control/notification-adapter-ntfy.js";
128
+ import { WebhookNotificationAdapter } from "./domain/mission-control/notification-adapter-webhook.js";
83
129
  import { OPENRIG_HOME } from "./openrig-compat.js";
84
130
  import { getCompatibleOpenRigPath, getDefaultOpenRigPath, readOpenRigEnv, } from "./openrig-compat.js";
131
+ const KNOWN_PROVIDER_AUTH_ENV = new Set([
132
+ "ANTHROPIC_API_KEY",
133
+ "ANTHROPIC_AUTH_TOKEN",
134
+ "CLAUDE_CODE_OAUTH_TOKEN",
135
+ "OPENAI_API_KEY",
136
+ "OPENAI_BASE_URL",
137
+ "OPENAI_ORG_ID",
138
+ "OPENAI_PROJECT_ID",
139
+ ]);
140
+ export function collectAllowlistedProviderAuthEnv(raw, env) {
141
+ const out = {};
142
+ for (const item of (raw ?? "").split(",")) {
143
+ const name = item.trim();
144
+ if (!name)
145
+ continue;
146
+ if (!/^[A-Z_][A-Z0-9_]*$/.test(name))
147
+ continue;
148
+ if (!KNOWN_PROVIDER_AUTH_ENV.has(name))
149
+ continue;
150
+ const value = env[name];
151
+ if (typeof value === "string" && value.length > 0) {
152
+ out[name] = value;
153
+ }
154
+ }
155
+ return out;
156
+ }
85
157
  export async function createDaemon(opts) {
86
158
  const dbPath = opts?.dbPath ?? ":memory:";
87
159
  const db = createDb(dbPath);
88
- migrate(db, [coreSchema, bindingsSessionsSchema, eventsSchema, snapshotsSchema, checkpointsSchema, resumeMetadataSchema, nodeSpecFieldsSchema, packagesSchema, installJournalSchema, journalSeqSchema, bootstrapSchema, discoverySchema, discoveryFkFix, agentspecRebootSchema, startupContextSchema, chatMessagesSchema, podNamespaceSchema, contextUsageSchema, externalCliAttachmentSchema, rigServicesSchema]);
160
+ migrate(db, [coreSchema, bindingsSessionsSchema, eventsSchema, snapshotsSchema, checkpointsSchema, resumeMetadataSchema, nodeSpecFieldsSchema, packagesSchema, installJournalSchema, journalSeqSchema, bootstrapSchema, discoverySchema, discoveryFkFix, agentspecRebootSchema, startupContextSchema, chatMessagesSchema, podNamespaceSchema, contextUsageSchema, externalCliAttachmentSchema, rigServicesSchema, seatHandoverObservabilitySchema, nodeCodexConfigProfileSchema, streamItemsSchema, queueItemsSchema, queueTransitionsSchema, inboxEntriesSchema, outboxEntriesSchema, projectClassificationsSchema, classifierLeasesSchema, viewsCustomSchema, watchdogJobsSchema, watchdogHistorySchema, workflowSpecsSchema, workflowInstancesSchema, workflowStepTrailsSchema, watchdogPolicyEnumExtensionSchema, missionControlActionsSchema, workspacePrimitiveSchema, queueTargetRepoSchema]);
89
161
  const rigRepo = new RigRepository(db);
90
162
  const sessionRegistry = new SessionRegistry(db);
91
163
  const eventBus = new EventBus(db);
164
+ // PL-004 Phase A revision (R1): topology-backed validateRig.
165
+ // Reject `<member>@<unknown-rig>` shapes by checking the rig portion
166
+ // against the rig registry. Bare ids without `@` are also rejected
167
+ // (no canonical rig binding).
168
+ const isHumanSeatSessionRef = (sessionRef) => {
169
+ return /^human(?:-[A-Za-z0-9._-]+)?@(kernel|host)$/.test(sessionRef);
170
+ };
171
+ const topologyValidateRig = (sessionRef) => {
172
+ if (isHumanSeatSessionRef(sessionRef))
173
+ return true;
174
+ const m = /^[^@]+@(.+)$/.exec(sessionRef);
175
+ if (!m)
176
+ return false;
177
+ const rigName = m[1];
178
+ return rigRepo.findRigsByName(rigName).length > 0;
179
+ };
180
+ // PL-004 Phase A — shared coordination services. Constructed early so
181
+ // both the queueRepo dep slot and inboxHandler can share one instance.
182
+ // Transport is wired after SessionTransport instantiation below via
183
+ // attachTransport().
184
+ const queueRepoInstance = new QueueRepository(db, eventBus, {
185
+ validateRig: topologyValidateRig,
186
+ });
187
+ // PL-004 Phase B — classifier lease manager. Constructed early so both
188
+ // the leaseManager dep slot and project-classifier can share one instance.
189
+ // isAlive is post-attached after whoami-service is constructed.
190
+ const classifierLeaseManagerInstance = new ClassifierLeaseManager(db, eventBus);
191
+ // PL-004 Phase B — view-projector. Constructed early so both the
192
+ // viewProjector dep slot and the view-event-bridge can share one instance.
193
+ const viewProjectorInstance = new ViewProjector(db, eventBus);
194
+ // PL-004 Phase B R1 (closes guard BLOCKER 2): wire the view event bridge
195
+ // so queue/inbox/project mutations emit view.changed for affected built-in
196
+ // views. SSE consumers on /api/views/:name/sse now receive change events
197
+ // when underlying state mutates.
198
+ wireViewEventBridge(eventBus, viewProjectorInstance);
199
+ // PL-004 Phase C — watchdog supervision tree. Repository + history-log
200
+ // are constructed early; the policy engine + scheduler are constructed
201
+ // after SessionTransport is available so the engine can wire delivery.
202
+ const watchdogJobsRepoInstance = new WatchdogJobsRepository(db);
203
+ const watchdogHistoryLogInstance = new WatchdogHistoryLog(db);
92
204
  const tmuxAdapter = new TmuxAdapter(opts?.tmuxExec ?? execCommand);
93
205
  // cmuxFactory takes precedence (for tests), then cmuxExec-based CLI transport, then default
94
206
  const cmuxFactory = opts?.cmuxFactory
@@ -97,6 +209,12 @@ export async function createDaemon(opts) {
97
209
  // Read transcript config from env (passed by CLI via PNS-T02 config surface)
98
210
  const transcriptsEnabled = readOpenRigEnv("OPENRIG_TRANSCRIPTS_ENABLED", "RIGGED_TRANSCRIPTS_ENABLED") !== "false";
99
211
  const transcriptsPath = readOpenRigEnv("OPENRIG_TRANSCRIPTS_PATH", "RIGGED_TRANSCRIPTS_PATH") || undefined;
212
+ const activityHookToken = readOpenRigEnv("OPENRIG_ACTIVITY_HOOK_TOKEN", "RIGGED_ACTIVITY_HOOK_TOKEN") || undefined;
213
+ const activityHookUrl = readOpenRigEnv("OPENRIG_URL", "RIGGED_URL") || undefined;
214
+ const openRigPort = readOpenRigEnv("OPENRIG_PORT", "RIGGED_PORT") || undefined;
215
+ const openRigHost = readOpenRigEnv("OPENRIG_HOST", "RIGGED_HOST") || undefined;
216
+ const startupSettings = new ContextPackSettingsStore().resolveConfig();
217
+ const providerAuthEnv = collectAllowlistedProviderAuthEnv(startupSettings.recoveryProviderAuthEnvAllowlistRaw, process.env);
100
218
  const transcriptStore = new TranscriptStore({
101
219
  enabled: transcriptsEnabled,
102
220
  transcriptsRoot: transcriptsPath,
@@ -108,6 +226,15 @@ export async function createDaemon(opts) {
108
226
  eventBus,
109
227
  tmuxAdapter,
110
228
  transcriptStore,
229
+ sessionEnv: {
230
+ PATH: process.env.PATH,
231
+ OPENRIG_HOME,
232
+ OPENRIG_PORT: openRigPort,
233
+ OPENRIG_HOST: openRigHost,
234
+ OPENRIG_URL: activityHookUrl,
235
+ OPENRIG_ACTIVITY_HOOK_TOKEN: activityHookToken,
236
+ ...providerAuthEnv,
237
+ },
111
238
  });
112
239
  const snapshotRepo = new SnapshotRepository(db);
113
240
  const checkpointStore = new CheckpointStore(db);
@@ -126,12 +253,42 @@ export async function createDaemon(opts) {
126
253
  });
127
254
  // Connect to cmux at startup — degrades gracefully if absent
128
255
  await cmuxAdapter.connect();
129
- // Reconcile all managed rigs — marks stale sessions as detached
256
+ // Reconcile all managed rigs — marks stale sessions as detached.
257
+ // Capture aggregate counts and log a compact summary so cold-start truth
258
+ // repair is visible in daemon output instead of silently swallowed.
130
259
  const reconciler = new Reconciler({ db, sessionRegistry, eventBus, tmuxAdapter });
131
260
  const rigs = rigRepo.listRigs();
261
+ let reconcileChecked = 0;
262
+ let reconcileDetached = 0;
263
+ let reconcileErrors = 0;
132
264
  for (const rig of rigs) {
133
- await reconciler.reconcile(rig.id);
265
+ try {
266
+ const result = await reconciler.reconcile(rig.id);
267
+ reconcileChecked += result.checked;
268
+ reconcileDetached += result.detached;
269
+ reconcileErrors += result.errors.length;
270
+ for (const e of result.errors) {
271
+ try {
272
+ // eslint-disable-next-line no-console
273
+ console.warn(`startup reconcile warning: rig=${rig.id} session=${e.sessionId} error=${e.error}`);
274
+ }
275
+ catch { /* logging must never throw */ }
276
+ }
277
+ }
278
+ catch (err) {
279
+ reconcileErrors += 1;
280
+ try {
281
+ // eslint-disable-next-line no-console
282
+ console.warn(`startup reconcile warning: rig=${rig.id} error=${err instanceof Error ? err.message : String(err)}`);
283
+ }
284
+ catch { /* logging must never throw */ }
285
+ }
286
+ }
287
+ try {
288
+ // eslint-disable-next-line no-console
289
+ console.log(`startup reconcile: rigs=${rigs.length} checked=${reconcileChecked} detached=${reconcileDetached} errors=${reconcileErrors}`);
134
290
  }
291
+ catch { /* logging must never throw */ }
135
292
  const podRepo = new PodRepository(db);
136
293
  const rigSpecExporter = new RigSpecExporter({ rigRepo, sessionRegistry, podRepo });
137
294
  const rigSpecPreflight = new RigSpecPreflight({
@@ -189,24 +346,95 @@ export async function createDaemon(opts) {
189
346
  const { ClaudeCodeAdapter } = await import("./adapters/claude-code-adapter.js");
190
347
  const { CodexRuntimeAdapter } = await import("./adapters/codex-runtime-adapter.js");
191
348
  const startupOrchestrator = new StartupOrchestrator({ db, sessionRegistry, eventBus, tmuxAdapter, readFile: (p) => fs.readFileSync(p, "utf-8") });
349
+ const activityHookRelayAssetPath = nodePath.resolve(import.meta.dirname, "../assets/openrig-activity-hook-relay.cjs");
350
+ const runtimeSettings = new ContextPackSettingsStore().resolveConfig();
192
351
  const claudeAdapter = new ClaudeCodeAdapter({ tmux: tmuxAdapter, fsOps: { readFile: (p) => fs.readFileSync(p, "utf-8"), writeFile: (p, c) => fs.writeFileSync(p, c, "utf-8"), exists: (p) => fs.existsSync(p), mkdirp: (p) => fs.mkdirSync(p, { recursive: true }), copyFile: (src, dest) => fs.copyFileSync(src, dest), listFiles: (dir) => { const r = []; function w(d, pre) { for (const e of fs.readdirSync(d, { withFileTypes: true })) {
193
352
  if (e.isDirectory())
194
353
  w(nodePath.join(d, e.name), nodePath.join(pre, e.name));
195
354
  else
196
355
  r.push(pre ? nodePath.join(pre, e.name) : e.name);
197
- } } w(dir, ""); return r; }, readdir: (dir) => fs.readdirSync(dir), homedir: os.homedir() }, stateDir: OPENRIG_HOME, collectorAssetPath: nodePath.resolve(import.meta.dirname, "../assets/claude-statusline-context.cjs") });
356
+ } } w(dir, ""); return r; }, readdir: (dir) => fs.readdirSync(dir), homedir: os.homedir() }, stateDir: OPENRIG_HOME, collectorAssetPath: nodePath.resolve(import.meta.dirname, "../assets/claude-statusline-context.cjs"), activityHookRelayAssetPath, autoDriveProviderPrompts: runtimeSettings.recoveryAutoDriveProviderPrompts });
198
357
  const codexAdapter = new CodexRuntimeAdapter({ tmux: tmuxAdapter, fsOps: { readFile: (p) => fs.readFileSync(p, "utf-8"), writeFile: (p, c) => fs.writeFileSync(p, c, "utf-8"), exists: (p) => fs.existsSync(p), mkdirp: (p) => fs.mkdirSync(p, { recursive: true }), listFiles: (dir) => { const r = []; function w(d, pre) { for (const e of fs.readdirSync(d, { withFileTypes: true })) {
199
358
  if (e.isDirectory())
200
359
  w(nodePath.join(d, e.name), nodePath.join(pre, e.name));
201
360
  else
202
361
  r.push(pre ? nodePath.join(pre, e.name) : e.name);
203
- } } w(dir, ""); return r; } } });
362
+ } } w(dir, ""); return r; } }, activityHookRelayAssetPath });
363
+ // PL-014 Item 6: hoist ContextPackLibraryService construction so the
364
+ // PodRigInstantiator can resolve `kind: context_pack` startup_files
365
+ // entries at materialize time. Same instance is returned to deps
366
+ // below so /api/context-packs/* shares it.
367
+ const contextPackLibrary = (() => {
368
+ const userPacksRoot = getDefaultOpenRigPath("context-packs");
369
+ try {
370
+ fs.mkdirSync(userPacksRoot, { recursive: true });
371
+ }
372
+ catch { /* best-effort */ }
373
+ const roots = [
374
+ { path: userPacksRoot, sourceType: "user_file" },
375
+ ];
376
+ try {
377
+ const settingsStore = new ContextPackSettingsStore();
378
+ const cfg = settingsStore.resolveConfig();
379
+ const workspacePacksRoot = nodePath.join(cfg.workspaceRoot, ".openrig", "context-packs");
380
+ if (workspacePacksRoot !== userPacksRoot && fs.existsSync(workspacePacksRoot)) {
381
+ roots.push({ path: workspacePacksRoot, sourceType: "workspace" });
382
+ }
383
+ }
384
+ catch { /* settings unavailable; fall through with user-file root only */ }
385
+ const builtinPacksRoot = nodePath.resolve(import.meta.dirname, "../context-packs");
386
+ if (fs.existsSync(builtinPacksRoot)) {
387
+ roots.unshift({ path: builtinPacksRoot, sourceType: "builtin" });
388
+ }
389
+ const lib = new ContextPackLibraryService({ roots });
390
+ lib.scan();
391
+ return lib;
392
+ })();
393
+ // PL-016 Item 2 + Item 4: hoist AgentImageLibraryService construction
394
+ // so the PodRigInstantiator can resolve `session_source: mode:
395
+ // agent_image` at materialize time. Same instance returned to deps
396
+ // below so /api/agent-images/* + the SnapshotCapturer share it.
397
+ const agentImageRootBuilder = () => {
398
+ const userImagesRoot = getDefaultOpenRigPath("agent-images");
399
+ try {
400
+ fs.mkdirSync(userImagesRoot, { recursive: true });
401
+ }
402
+ catch { /* best-effort */ }
403
+ const roots = [
404
+ { path: userImagesRoot, sourceType: "user_file" },
405
+ ];
406
+ try {
407
+ const settingsStore = new ContextPackSettingsStore();
408
+ const cfg = settingsStore.resolveConfig();
409
+ const workspaceImagesRoot = nodePath.join(cfg.workspaceRoot, ".openrig", "agent-images");
410
+ if (workspaceImagesRoot !== userImagesRoot && fs.existsSync(workspaceImagesRoot)) {
411
+ roots.push({ path: workspaceImagesRoot, sourceType: "workspace" });
412
+ }
413
+ }
414
+ catch { /* settings unavailable */ }
415
+ return { userImagesRoot, roots };
416
+ };
417
+ const agentImageLibrary = (() => {
418
+ const { roots } = agentImageRootBuilder();
419
+ const lib = new AgentImageLibraryService({ roots });
420
+ lib.scan();
421
+ return lib;
422
+ })();
423
+ const snapshotCapturer = new SnapshotCapturer({
424
+ db,
425
+ rigRepo,
426
+ sessionRegistry,
427
+ agentImageLibrary,
428
+ targetRoot: getDefaultOpenRigPath("agent-images"),
429
+ });
204
430
  const podInstantiator = new PodRigInstantiator({
205
431
  db, rigRepo, podRepo,
206
432
  sessionRegistry, eventBus, nodeLauncher, startupOrchestrator,
207
433
  fsOps: { readFile: (p) => fs.readFileSync(p, "utf-8"), exists: (p) => fs.existsSync(p) },
208
434
  adapters: { "claude-code": claudeAdapter, "codex": codexAdapter, "terminal": new (await import("./adapters/terminal-adapter.js")).TerminalAdapter() },
209
435
  tmuxAdapter,
436
+ contextPackLibrary,
437
+ agentImageLibrary,
210
438
  });
211
439
  const podBundleSourceResolver = new PodBundleSourceResolver();
212
440
  const bootstrapOrchestrator = new BootstrapOrchestrator({
@@ -247,6 +475,7 @@ export async function createDaemon(opts) {
247
475
  const contextUsageStore = new ContextUsageStore(db, { stateDir: OPENRIG_HOME });
248
476
  const whoamiService = new WhoamiService({ db, rigRepo, sessionRegistry, transcriptStore, contextUsageStore });
249
477
  const nodeCmuxService = new NodeCmuxService(rigRepo, sessionRegistry, cmuxAdapter);
478
+ const agentActivityStore = new AgentActivityStore({ db, eventBus });
250
479
  const deps = {
251
480
  rigRepo,
252
481
  sessionRegistry,
@@ -287,8 +516,40 @@ export async function createDaemon(opts) {
287
516
  podBundleSourceResolver,
288
517
  runtimeAdapters: { "claude-code": claudeAdapter, "codex": codexAdapter, "terminal": new (await import("./adapters/terminal-adapter.js")).TerminalAdapter() },
289
518
  transcriptStore,
290
- sessionTransport: new SessionTransport({ db, rigRepo, sessionRegistry, tmuxAdapter }),
519
+ sessionTransport: (() => {
520
+ const t = new SessionTransport({ db, rigRepo, sessionRegistry, tmuxAdapter, agentActivityStore });
521
+ // PL-004 Phase A revision (R1): wire QueueRepository's wake-path so
522
+ // create / handoff / handoff-and-complete nudge by default.
523
+ queueRepoInstance.attachTransport(t);
524
+ // PL-004 Phase B: wire classifier-lease-manager liveness check from
525
+ // the sessions table. Lease holder is "alive" iff there is at least
526
+ // one row in `sessions` with session_name == classifierSession AND
527
+ // status == 'running'.
528
+ classifierLeaseManagerInstance.attachIsAlive((classifierSession) => {
529
+ try {
530
+ const row = db
531
+ .prepare(`SELECT 1 FROM sessions WHERE session_name = ? AND status = 'running' LIMIT 1`)
532
+ .get(classifierSession);
533
+ return row !== undefined;
534
+ }
535
+ catch {
536
+ // Conservative: on lookup error, treat as alive (do not falsely
537
+ // trigger deadness-based lease expiry).
538
+ return true;
539
+ }
540
+ });
541
+ return t;
542
+ })(),
291
543
  chatRepo: new ChatRepository(db),
544
+ streamStore: new StreamStore(db, eventBus),
545
+ queueRepo: queueRepoInstance,
546
+ inboxHandler: new InboxHandler(db, eventBus, queueRepoInstance),
547
+ outboxHandler: new OutboxHandler(db),
548
+ classifierLeaseManager: classifierLeaseManagerInstance,
549
+ projectClassifier: new ProjectClassifier(db, eventBus, classifierLeaseManagerInstance),
550
+ viewProjector: viewProjectorInstance,
551
+ watchdogJobsRepo: watchdogJobsRepoInstance,
552
+ watchdogHistoryLog: watchdogHistoryLogInstance,
292
553
  askService: (() => {
293
554
  const psProjectionService = new PsProjectionService({ db });
294
555
  const execDep = (cmd, args) => new Promise((resolve) => {
@@ -323,6 +584,8 @@ export async function createDaemon(opts) {
323
584
  })(),
324
585
  whoamiService,
325
586
  nodeCmuxService,
587
+ agentActivityStore,
588
+ activityHookToken,
326
589
  contextUsageStore,
327
590
  serviceOrchestrator,
328
591
  composeAdapter,
@@ -350,6 +613,32 @@ export async function createDaemon(opts) {
350
613
  lib.scan();
351
614
  return lib;
352
615
  })(),
616
+ // PL-014 Item 6: same instance hoisted earlier so the
617
+ // PodRigInstantiator can resolve `kind: context_pack` startup_files
618
+ // entries — sharing the cache means /api/context-packs/* + the
619
+ // instantiator see consistent state.
620
+ contextPackLibrary,
621
+ // PL-016 — agent_image typed primitive. Shared library + capturer
622
+ // + spec-roots supplier across /api/agent-images/* and the
623
+ // PodRigInstantiator's session_source: mode: agent_image dispatch.
624
+ agentImageLibrary,
625
+ snapshotCapturer,
626
+ agentImageSpecRoots: () => {
627
+ // Spec-library roots scanned by the evidence guard. v0: user
628
+ // specs under ~/.openrig/specs + workspace-local specs root
629
+ // (from the SettingsStore-resolved workspace.specsRoot).
630
+ const userSpecsRoot = getDefaultOpenRigPath("specs");
631
+ const roots = [userSpecsRoot];
632
+ try {
633
+ const settingsStore = new ContextPackSettingsStore();
634
+ const cfg = settingsStore.resolveConfig();
635
+ if (cfg.workspaceSpecsRoot && cfg.workspaceSpecsRoot !== userSpecsRoot) {
636
+ roots.push(cfg.workspaceSpecsRoot);
637
+ }
638
+ }
639
+ catch { /* settings unavailable */ }
640
+ return roots;
641
+ },
353
642
  };
354
643
  // Copy bundled reference docs to ~/.openrig/reference/ so agents can find them at a stable path
355
644
  try {
@@ -365,10 +654,298 @@ export async function createDaemon(opts) {
365
654
  }
366
655
  }
367
656
  catch { /* best-effort — reference docs are not critical to daemon operation */ }
368
- const app = createApp(deps);
369
- // Context monitor caller (index.ts) starts polling after listen
657
+ // PL-004 Phase C — watchdog policy engine + scheduler. Wired here
658
+ // (after deps construction) so the engine can dispatch deliveries
659
+ // through the live SessionTransport. Scheduler is started by
660
+ // index.ts after listen() so the daemon's HTTP surface is ready
661
+ // before the scheduler's first tick.
662
+ // PL-004 Phase D — workflow runtime + workflow-keepalive policy.
663
+ // Workflow runtime is constructed first; then the watchdog policy
664
+ // engine is constructed with workflow-keepalive injected via
665
+ // additionalPolicies (orch-ratified Phase D extension point per
666
+ // slice IMPL § Write Set / § Driver Handoff Contract).
667
+ const queueRepoForWorkflow = deps.queueRepo;
668
+ let workflowRuntime;
669
+ if (queueRepoForWorkflow) {
670
+ workflowRuntime = new WorkflowRuntime({
671
+ db,
672
+ eventBus,
673
+ queueRepo: queueRepoForWorkflow,
674
+ });
675
+ deps.workflowRuntime = workflowRuntime;
676
+ // Seed built-in starter workflow_specs into the cache. Idempotent
677
+ // + workspace-surface-respecting — operator
678
+ // overrides at workspace paths are preserved (skip-if-cached).
679
+ // Errors are collected into the result for diagnostic logging but
680
+ // do NOT block startup; a malformed bundled spec should not bring
681
+ // the daemon down.
682
+ const { loadStarterWorkflowSpecs, defaultBuiltinSpecsDir } = await import("./domain/workflow/starter-spec-loader.js");
683
+ const builtinSpecsDir = defaultBuiltinSpecsDir();
684
+ const starterResult = loadStarterWorkflowSpecs({
685
+ cache: workflowRuntime.specCache,
686
+ builtinDir: builtinSpecsDir,
687
+ });
688
+ // Surface the resolved path to the routes layer so
689
+ // GET /api/workflow/specs can compute the per-row isBuiltIn flag.
690
+ deps.workflowBuiltinSpecsDir = builtinSpecsDir;
691
+ if (starterResult.errors.length > 0) {
692
+ console.warn(`[starter-spec-loader] ${starterResult.errors.length} spec(s) failed to load:`, starterResult.errors);
693
+ }
694
+ }
695
+ // PL-005 Phase A: Mission Control / Queue Observability services.
696
+ // Wired AFTER WorkflowRuntime so all PL-004 daemon-backed coordination
697
+ // surfaces are available. Mission Control reads from queue/view/stream
698
+ // surfaces and writes through the atomic 7-verb contract.
699
+ if (deps.queueRepo && deps.viewProjector) {
700
+ const mcActionLog = new MissionControlActionLog(db);
701
+ const mcWriteContract = new MissionControlWriteContract({
702
+ db,
703
+ eventBus,
704
+ queueRepo: deps.queueRepo,
705
+ actionLog: mcActionLog,
706
+ });
707
+ const mcFleetCliCapability = new MissionControlFleetCliCapability({
708
+ db,
709
+ eventBus,
710
+ rigRepo,
711
+ // R1 fix per guard PL-005 Phase A review: wire the production
712
+ // capability probe so /api/mission-control/cli-capabilities
713
+ // honestly reports drift when MISSION_CONTROL_DESIRED_FIELDS
714
+ // are missing from the local CLI's allow-list. Without this
715
+ // probe injection, the production path defaulted to a no-op
716
+ // that always reported staleCliCount=0 even when the audit-
717
+ // row-5 case (recoveryGuidance not in CLI allow-list) was
718
+ // present.
719
+ probeRig: makeLocalCliCapabilityProbe(),
720
+ });
721
+ const mcReadLayer = new MissionControlReadLayer({
722
+ db,
723
+ queueRepo: deps.queueRepo,
724
+ viewProjector: deps.viewProjector,
725
+ streamStore: deps.streamStore,
726
+ fleetCliCapability: mcFleetCliCapability,
727
+ });
728
+ deps.missionControlActionLog = mcActionLog;
729
+ deps.missionControlWriteContract = mcWriteContract;
730
+ deps.missionControlFleetCliCapability = mcFleetCliCapability;
731
+ deps.missionControlReadLayer = mcReadLayer;
732
+ // PL-005 Phase B: audit-history browse layer (read-only) +
733
+ // notification dispatcher + bearer-token plumbing.
734
+ const mcAuditBrowse = new MissionControlAuditBrowse(db);
735
+ deps.missionControlAuditBrowse = mcAuditBrowse;
736
+ // Bearer token from createDaemon options is propagated to the
737
+ // routes constructor via deps so the auth middleware is mounted
738
+ // at route mount time (not per-request).
739
+ deps.missionControlBearerToken = opts?.bearerToken ?? null;
740
+ // Notification dispatcher: chosen mechanism via env config.
741
+ // OPENRIG_NOTIFICATIONS_MECHANISM=ntfy|webhook|none (default none).
742
+ // OPENRIG_NOTIFICATIONS_TARGET=<topic url | webhook url>.
743
+ // OPENRIG_NOTIFICATIONS_INCLUDE_VERB_COMPLETION=1 to opt into the
744
+ // verb-completion trigger (default off; only human-gate arrivals
745
+ // trigger by default per planner brief).
746
+ // No legacy alias for these env vars (new in Phase B).
747
+ const mechanism = process.env.OPENRIG_NOTIFICATIONS_MECHANISM ?? "none";
748
+ const target = process.env.OPENRIG_NOTIFICATIONS_TARGET ?? "";
749
+ const missionControlBaseUrl = process.env.OPENRIG_MISSION_CONTROL_BASE_URL ??
750
+ process.env.OPENRIG_URL ??
751
+ process.env.RIGGED_URL;
752
+ const includeVerbCompletion = process.env.OPENRIG_NOTIFICATIONS_INCLUDE_VERB_COMPLETION === "1";
753
+ if (mechanism !== "none" && target.length > 0) {
754
+ let adapter;
755
+ if (mechanism === "ntfy") {
756
+ adapter = new NtfyNotificationAdapter({ topicUrl: target });
757
+ }
758
+ else if (mechanism === "webhook") {
759
+ adapter = new WebhookNotificationAdapter({ endpointUrl: target });
760
+ }
761
+ else {
762
+ throw new Error(`OPENRIG_NOTIFICATIONS_MECHANISM='${mechanism}' is not recognized; supported: ntfy | webhook | none`);
763
+ }
764
+ const dispatcher = new MissionControlNotificationDispatcher({
765
+ db,
766
+ eventBus,
767
+ adapter,
768
+ includeVerbCompletion,
769
+ missionControlBaseUrl,
770
+ });
771
+ dispatcher.start();
772
+ deps.missionControlNotificationDispatcher = dispatcher;
773
+ }
774
+ }
775
+ // Slice Story View v0 — slice indexer + per-tab projector.
776
+ //
777
+ // User Settings v0 graduates `OPENRIG_SLICES_ROOT` env-var into the
778
+ // typed `workspace.slices_root` setting (resolution chain: env >
779
+ // config-file > default `<workspace.root>/missions`). Backward-compat:
780
+ // operators with OPENRIG_SLICES_ROOT set continue to work because the
781
+ // settings store reads env in the same resolution slot. Operators
782
+ // setting via `rig config set workspace.slices_root <path>` or via the
783
+ // System drawer Settings panel UI now flow through the indexer too —
784
+ // closes the PRD § Scenario B requirement that wasn't wired in v0.
785
+ //
786
+ // OPENRIG_SLICES_ROOT legacy short env var (still honored
787
+ // if set; preferred route is settings)
788
+ // OPENRIG_WORKSPACE_SLICES_ROOT typed-key env override
789
+ // workspace.slices_root typed setting in ~/.openrig/config.json
790
+ // workspace.root cascade fallback (default ~/.openrig/workspace)
791
+ // workspace.dogfood_evidence_root typed setting for proof packet assets
792
+ // OPENRIG_DOGFOOD_EVIDENCE_ROOT env override for compatibility
793
+ //
794
+ // When the resolved slicesRoot path doesn't exist on disk, the indexer
795
+ // is still constructed but isReady() returns false — the routes return
796
+ // a clear "slices_root_not_configured" 503 with a setup hint.
797
+ {
798
+ // Prefer the legacy short env var if explicitly set (existing
799
+ // dogfood / test daemons rely on it). Otherwise fall back to the
800
+ // settings-resolved path (env > file > default cascade inside
801
+ // SettingsStore). The SettingsStore is constructed locally here
802
+ // so the slices block doesn't depend on the User Settings v0 wiring
803
+ // block ordering further below.
804
+ const legacyEnvSlicesRoot = readOpenRigEnv("OPENRIG_SLICES_ROOT", "RIGGED_SLICES_ROOT") ?? "";
805
+ let resolvedSlicesRoot = "";
806
+ let resolvedWorkspaceRoot = "";
807
+ let resolvedDogfoodRoot = "";
808
+ if (!legacyEnvSlicesRoot) {
809
+ try {
810
+ const { SettingsStore: SettingsStoreCtor } = await import("./domain/user-settings/settings-store.js");
811
+ const resolvedConfig = new SettingsStoreCtor().resolveConfig();
812
+ resolvedSlicesRoot = resolvedConfig.workspaceSlicesRoot;
813
+ resolvedWorkspaceRoot = resolvedConfig.workspaceRoot;
814
+ resolvedDogfoodRoot = resolvedConfig.workspaceDogfoodEvidenceRoot;
815
+ }
816
+ catch {
817
+ // SettingsStore unavailable — keep slicesRoot empty; routes return 503.
818
+ }
819
+ }
820
+ else {
821
+ try {
822
+ const { SettingsStore: SettingsStoreCtor } = await import("./domain/user-settings/settings-store.js");
823
+ const resolvedConfig = new SettingsStoreCtor().resolveConfig();
824
+ resolvedDogfoodRoot = resolvedConfig.workspaceDogfoodEvidenceRoot;
825
+ }
826
+ catch {
827
+ // SettingsStore unavailable — proof packets remain disabled.
828
+ }
829
+ }
830
+ const slicesRoot = legacyEnvSlicesRoot || resolvedSlicesRoot;
831
+ const additionalSliceRoots = resolvedWorkspaceRoot
832
+ ? [
833
+ nodePath.join(resolvedWorkspaceRoot, "missions"),
834
+ nodePath.join(resolvedWorkspaceRoot, "slices"),
835
+ ].filter((root) => root !== slicesRoot)
836
+ : [];
837
+ const { SliceIndexer } = await import("./domain/slices/slice-indexer.js");
838
+ const { SliceDetailProjector } = await import("./domain/slices/slice-detail-projector.js");
839
+ const sliceIndexer = new SliceIndexer({
840
+ slicesRoot,
841
+ additionalSliceRoots,
842
+ dogfoodEvidenceRoot: resolvedDogfoodRoot || null,
843
+ db,
844
+ });
845
+ // Slice Story View v1: pass workflowRuntime.specCache so the
846
+ // projector can resolve a bound workflow_instance's spec for
847
+ // spec-graph + phase + current-step projection. When the workflow
848
+ // runtime is not constructed (queueRepo absent — same condition
849
+ // already guards the workflowRuntime block above), the projector
850
+ // silently degrades to v0 behavior (workflowBinding=null,
851
+ // specGraph=null, phaseDefinitions=null, currentStep=null).
852
+ const sliceDetailProjector = new SliceDetailProjector({
853
+ db,
854
+ indexer: sliceIndexer,
855
+ workflowSpecCache: workflowRuntime?.specCache,
856
+ });
857
+ deps.sliceIndexer = sliceIndexer;
858
+ deps.sliceDetailProjector = sliceDetailProjector;
859
+ }
860
+ // UI Enhancement Pack v0:
861
+ // - file allowlist (item 3) from OPENRIG_FILES_ALLOWLIST
862
+ // - atomic write service (item 4) wired only when allowlist non-empty
863
+ // - progress scan-roots (item 1B) from OPENRIG_PROGRESS_SCAN_ROOTS
864
+ //
865
+ // Empty env → empty allowlist / no-roots indexer; routes return 503
866
+ // with structured config hints so the UI can surface a setup message
867
+ // instead of a generic error.
868
+ {
869
+ const { decodeAllowlist } = await import("./domain/files/path-safety.js");
870
+ const { FileWriteService } = await import("./domain/files/file-write-service.js");
871
+ const { ProgressIndexer, decodeProgressScanRoots } = await import("./domain/progress/progress-indexer.js");
872
+ // User Settings v0 — UEP env-vars graduated to typed settings.
873
+ // Resolution: env > settings file > empty. SettingsStore handles
874
+ // the env > file > default precedence; we just decode the raw
875
+ // string into structured roots.
876
+ const { SettingsStore } = await import("./domain/user-settings/settings-store.js");
877
+ const settingsStore = new SettingsStore();
878
+ deps.settingsStore = settingsStore;
879
+ const cfg = settingsStore.resolveConfig();
880
+ // Preview Terminal v0 (PL-018) — per-session rate limiter for the
881
+ // /preview route. 1-second window per (session, lines) cache key:
882
+ // short enough that legitimate polling at the operator's refresh
883
+ // interval (`ui.preview.refresh_interval_seconds`, default 3s) always
884
+ // sees fresh content, but multiple pinned-pane requests for the same
885
+ // seat within a single second collapse to one tmux capture.
886
+ const { PreviewRateLimiter } = await import("./domain/preview/preview-rate-limiter.js");
887
+ deps.previewRateLimiter = new PreviewRateLimiter(1000);
888
+ const filesAllowlist = decodeAllowlist(cfg.filesAllowlistRaw);
889
+ deps.filesAllowlist = filesAllowlist;
890
+ deps.fileWriteService = filesAllowlist.length > 0
891
+ ? new FileWriteService({
892
+ allowlist: filesAllowlist,
893
+ auditFilePath: nodePath.join(OPENRIG_HOME, "file-edit-audit.jsonl"),
894
+ })
895
+ : null;
896
+ deps.progressIndexer = new ProgressIndexer({ roots: decodeProgressScanRoots(cfg.progressScanRootsRaw) });
897
+ // Operator Surface Reconciliation v0 — steering composer (item 1).
898
+ // Reads typed workspace settings by default while preserving the
899
+ // OPENRIG_STEERING_* env override family for non-canonical layouts.
900
+ const { SteeringComposer, steeringOptsFromSettings } = await import("./domain/steering/steering-composer.js");
901
+ deps.steeringComposer = new SteeringComposer(steeringOptsFromSettings({
902
+ workspaceRoot: cfg.workspaceRoot,
903
+ workspaceSteeringPath: cfg.workspaceSteeringPath,
904
+ }));
905
+ // Workflows in Spec Library + Activation Lens v0 — active lens
906
+ // persistence under OPENRIG_HOME/active-workflow-lens.json. Same
907
+ // file-backed pattern as UI Enhancement Pack v0's audit JSONL —
908
+ // honors OPENRIG_HOME so isolated test/dogfood daemons keep their
909
+ // own lens state instead of bleeding into the operator's host.
910
+ const { ActiveLensStore } = await import("./domain/active-lens-store.js");
911
+ deps.activeLensStore = new ActiveLensStore({
912
+ filePath: nodePath.join(OPENRIG_HOME, "active-workflow-lens.json"),
913
+ });
914
+ }
915
+ const sessionTransport = deps.sessionTransport;
916
+ if (sessionTransport) {
917
+ const watchdogPolicyEngine = new WatchdogPolicyEngine({
918
+ jobsRepo: watchdogJobsRepoInstance,
919
+ historyLog: watchdogHistoryLogInstance,
920
+ eventBus,
921
+ deliver: async ({ targetSession, message }) => {
922
+ try {
923
+ const result = await sessionTransport.send(targetSession, message);
924
+ return result.ok ? { status: "ok" } : { status: "failed", error: result.error };
925
+ }
926
+ catch (err) {
927
+ return { status: "failed", error: err instanceof Error ? err.message : String(err) };
928
+ }
929
+ },
930
+ // PL-004 Phase D: register workflow-keepalive policy alongside
931
+ // Phase C's three built-in policies. workflow-keepalive reads
932
+ // SQLite workflow_instances directly via the new Phase D tables
933
+ // (audit row 18: SQLite-source-only, no markdown read).
934
+ additionalPolicies: [makeWorkflowKeepalivePolicy({ db })],
935
+ });
936
+ const watchdogScheduler = new WatchdogScheduler({
937
+ jobsRepo: watchdogJobsRepoInstance,
938
+ policyEngine: watchdogPolicyEngine,
939
+ });
940
+ deps.watchdogPolicyEngine = watchdogPolicyEngine;
941
+ deps.watchdogScheduler = watchdogScheduler;
942
+ }
943
+ // Context monitor — constructed before createApp so routes can access pollOnce for refresh.
944
+ // Caller (index.ts) starts polling after listen.
370
945
  const { ContextMonitor } = await import("./domain/context-monitor.js");
371
946
  const contextMonitor = new ContextMonitor(db, contextUsageStore, claudeAdapter);
947
+ deps.contextMonitor = contextMonitor;
948
+ const app = createApp(deps);
372
949
  return { app, db, deps, contextMonitor };
373
950
  }
374
951
  //# sourceMappingURL=startup.js.map