@openrig/cli 0.1.12 → 0.2.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 (518) hide show
  1. package/daemon/assets/openrig-activity-hook-relay.cjs +104 -0
  2. package/daemon/dist/adapters/claude-code-adapter.d.ts +14 -6
  3. package/daemon/dist/adapters/claude-code-adapter.d.ts.map +1 -1
  4. package/daemon/dist/adapters/claude-code-adapter.js +183 -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/db/migrations/021_seat_handover_observability.d.ts +3 -0
  26. package/daemon/dist/db/migrations/021_seat_handover_observability.d.ts.map +1 -0
  27. package/daemon/dist/db/migrations/021_seat_handover_observability.js +11 -0
  28. package/daemon/dist/db/migrations/021_seat_handover_observability.js.map +1 -0
  29. package/daemon/dist/db/migrations/022_node_codex_config_profile.d.ts +3 -0
  30. package/daemon/dist/db/migrations/022_node_codex_config_profile.d.ts.map +1 -0
  31. package/daemon/dist/db/migrations/022_node_codex_config_profile.js +7 -0
  32. package/daemon/dist/db/migrations/022_node_codex_config_profile.js.map +1 -0
  33. package/daemon/dist/db/migrations/023_stream_items.d.ts +16 -0
  34. package/daemon/dist/db/migrations/023_stream_items.d.ts.map +1 -0
  35. package/daemon/dist/db/migrations/023_stream_items.js +37 -0
  36. package/daemon/dist/db/migrations/023_stream_items.js.map +1 -0
  37. package/daemon/dist/db/migrations/024_queue_items.d.ts +19 -0
  38. package/daemon/dist/db/migrations/024_queue_items.d.ts.map +1 -0
  39. package/daemon/dist/db/migrations/024_queue_items.js +52 -0
  40. package/daemon/dist/db/migrations/024_queue_items.js.map +1 -0
  41. package/daemon/dist/db/migrations/025_queue_transitions.d.ts +13 -0
  42. package/daemon/dist/db/migrations/025_queue_transitions.d.ts.map +1 -0
  43. package/daemon/dist/db/migrations/025_queue_transitions.js +28 -0
  44. package/daemon/dist/db/migrations/025_queue_transitions.js.map +1 -0
  45. package/daemon/dist/db/migrations/026_inbox_entries.d.ts +14 -0
  46. package/daemon/dist/db/migrations/026_inbox_entries.d.ts.map +1 -0
  47. package/daemon/dist/db/migrations/026_inbox_entries.js +35 -0
  48. package/daemon/dist/db/migrations/026_inbox_entries.js.map +1 -0
  49. package/daemon/dist/db/migrations/027_outbox_entries.d.ts +12 -0
  50. package/daemon/dist/db/migrations/027_outbox_entries.d.ts.map +1 -0
  51. package/daemon/dist/db/migrations/027_outbox_entries.js +30 -0
  52. package/daemon/dist/db/migrations/027_outbox_entries.js.map +1 -0
  53. package/daemon/dist/db/migrations/028_project_classifications.d.ts +26 -0
  54. package/daemon/dist/db/migrations/028_project_classifications.d.ts.map +1 -0
  55. package/daemon/dist/db/migrations/028_project_classifications.js +44 -0
  56. package/daemon/dist/db/migrations/028_project_classifications.js.map +1 -0
  57. package/daemon/dist/db/migrations/029_classifier_leases.d.ts +22 -0
  58. package/daemon/dist/db/migrations/029_classifier_leases.d.ts.map +1 -0
  59. package/daemon/dist/db/migrations/029_classifier_leases.js +41 -0
  60. package/daemon/dist/db/migrations/029_classifier_leases.js.map +1 -0
  61. package/daemon/dist/db/migrations/030_views_custom.d.ts +15 -0
  62. package/daemon/dist/db/migrations/030_views_custom.d.ts.map +1 -0
  63. package/daemon/dist/db/migrations/030_views_custom.js +27 -0
  64. package/daemon/dist/db/migrations/030_views_custom.js.map +1 -0
  65. package/daemon/dist/db/migrations/031_watchdog_jobs.d.ts +34 -0
  66. package/daemon/dist/db/migrations/031_watchdog_jobs.d.ts.map +1 -0
  67. package/daemon/dist/db/migrations/031_watchdog_jobs.js +59 -0
  68. package/daemon/dist/db/migrations/031_watchdog_jobs.js.map +1 -0
  69. package/daemon/dist/db/migrations/032_watchdog_history.d.ts +28 -0
  70. package/daemon/dist/db/migrations/032_watchdog_history.d.ts.map +1 -0
  71. package/daemon/dist/db/migrations/032_watchdog_history.js +46 -0
  72. package/daemon/dist/db/migrations/032_watchdog_history.js.map +1 -0
  73. package/daemon/dist/db/migrations/033_workflow_specs.d.ts +30 -0
  74. package/daemon/dist/db/migrations/033_workflow_specs.d.ts.map +1 -0
  75. package/daemon/dist/db/migrations/033_workflow_specs.js +50 -0
  76. package/daemon/dist/db/migrations/033_workflow_specs.js.map +1 -0
  77. package/daemon/dist/db/migrations/034_workflow_instances.d.ts +42 -0
  78. package/daemon/dist/db/migrations/034_workflow_instances.d.ts.map +1 -0
  79. package/daemon/dist/db/migrations/034_workflow_instances.js +63 -0
  80. package/daemon/dist/db/migrations/034_workflow_instances.js.map +1 -0
  81. package/daemon/dist/db/migrations/035_workflow_step_trails.d.ts +29 -0
  82. package/daemon/dist/db/migrations/035_workflow_step_trails.d.ts.map +1 -0
  83. package/daemon/dist/db/migrations/035_workflow_step_trails.js +48 -0
  84. package/daemon/dist/db/migrations/035_workflow_step_trails.js.map +1 -0
  85. package/daemon/dist/db/migrations/036_watchdog_policy_enum_extension.d.ts +35 -0
  86. package/daemon/dist/db/migrations/036_watchdog_policy_enum_extension.d.ts.map +1 -0
  87. package/daemon/dist/db/migrations/036_watchdog_policy_enum_extension.js +43 -0
  88. package/daemon/dist/db/migrations/036_watchdog_policy_enum_extension.js.map +1 -0
  89. package/daemon/dist/domain/agent-activity-store.d.ts +42 -0
  90. package/daemon/dist/domain/agent-activity-store.d.ts.map +1 -0
  91. package/daemon/dist/domain/agent-activity-store.js +177 -0
  92. package/daemon/dist/domain/agent-activity-store.js.map +1 -0
  93. package/daemon/dist/domain/agent-manifest.d.ts.map +1 -1
  94. package/daemon/dist/domain/agent-manifest.js +3 -0
  95. package/daemon/dist/domain/agent-manifest.js.map +1 -1
  96. package/daemon/dist/domain/agent-starter-resolver.d.ts +100 -0
  97. package/daemon/dist/domain/agent-starter-resolver.d.ts.map +1 -0
  98. package/daemon/dist/domain/agent-starter-resolver.js +200 -0
  99. package/daemon/dist/domain/agent-starter-resolver.js.map +1 -0
  100. package/daemon/dist/domain/classifier-lease-manager.d.ts +130 -0
  101. package/daemon/dist/domain/classifier-lease-manager.d.ts.map +1 -0
  102. package/daemon/dist/domain/classifier-lease-manager.js +285 -0
  103. package/daemon/dist/domain/classifier-lease-manager.js.map +1 -0
  104. package/daemon/dist/domain/context-usage-store.d.ts +1 -1
  105. package/daemon/dist/domain/context-usage-store.js +1 -1
  106. package/daemon/dist/domain/context-usage-store.js.map +1 -1
  107. package/daemon/dist/domain/hot-potato-enforcer.d.ts +45 -0
  108. package/daemon/dist/domain/hot-potato-enforcer.d.ts.map +1 -0
  109. package/daemon/dist/domain/hot-potato-enforcer.js +94 -0
  110. package/daemon/dist/domain/hot-potato-enforcer.js.map +1 -0
  111. package/daemon/dist/domain/inbox-handler.d.ts +68 -0
  112. package/daemon/dist/domain/inbox-handler.d.ts.map +1 -0
  113. package/daemon/dist/domain/inbox-handler.js +177 -0
  114. package/daemon/dist/domain/inbox-handler.js.map +1 -0
  115. package/daemon/dist/domain/native-resume-probe.d.ts +1 -1
  116. package/daemon/dist/domain/native-resume-probe.d.ts.map +1 -1
  117. package/daemon/dist/domain/native-resume-probe.js +67 -0
  118. package/daemon/dist/domain/native-resume-probe.js.map +1 -1
  119. package/daemon/dist/domain/node-inventory.d.ts +29 -1
  120. package/daemon/dist/domain/node-inventory.d.ts.map +1 -1
  121. package/daemon/dist/domain/node-inventory.js +160 -38
  122. package/daemon/dist/domain/node-inventory.js.map +1 -1
  123. package/daemon/dist/domain/node-launcher.d.ts +2 -0
  124. package/daemon/dist/domain/node-launcher.d.ts.map +1 -1
  125. package/daemon/dist/domain/node-launcher.js +14 -2
  126. package/daemon/dist/domain/node-launcher.js.map +1 -1
  127. package/daemon/dist/domain/outbox-handler.d.ts +48 -0
  128. package/daemon/dist/domain/outbox-handler.d.ts.map +1 -0
  129. package/daemon/dist/domain/outbox-handler.js +106 -0
  130. package/daemon/dist/domain/outbox-handler.js.map +1 -0
  131. package/daemon/dist/domain/policies/artifact-pool-helpers.d.ts +64 -0
  132. package/daemon/dist/domain/policies/artifact-pool-helpers.d.ts.map +1 -0
  133. package/daemon/dist/domain/policies/artifact-pool-helpers.js +226 -0
  134. package/daemon/dist/domain/policies/artifact-pool-helpers.js.map +1 -0
  135. package/daemon/dist/domain/policies/artifact-pool-ready.d.ts +3 -0
  136. package/daemon/dist/domain/policies/artifact-pool-ready.d.ts.map +1 -0
  137. package/daemon/dist/domain/policies/artifact-pool-ready.js +41 -0
  138. package/daemon/dist/domain/policies/artifact-pool-ready.js.map +1 -0
  139. package/daemon/dist/domain/policies/edge-artifact-required.d.ts +3 -0
  140. package/daemon/dist/domain/policies/edge-artifact-required.d.ts.map +1 -0
  141. package/daemon/dist/domain/policies/edge-artifact-required.js +90 -0
  142. package/daemon/dist/domain/policies/edge-artifact-required.js.map +1 -0
  143. package/daemon/dist/domain/policies/periodic-reminder.d.ts +3 -0
  144. package/daemon/dist/domain/policies/periodic-reminder.d.ts.map +1 -0
  145. package/daemon/dist/domain/policies/periodic-reminder.js +30 -0
  146. package/daemon/dist/domain/policies/periodic-reminder.js.map +1 -0
  147. package/daemon/dist/domain/policies/types.d.ts +51 -0
  148. package/daemon/dist/domain/policies/types.d.ts.map +1 -0
  149. package/daemon/dist/domain/policies/types.js +9 -0
  150. package/daemon/dist/domain/policies/types.js.map +1 -0
  151. package/daemon/dist/domain/policies/workflow-keepalive.d.ts +7 -0
  152. package/daemon/dist/domain/policies/workflow-keepalive.d.ts.map +1 -0
  153. package/daemon/dist/domain/policies/workflow-keepalive.js +123 -0
  154. package/daemon/dist/domain/policies/workflow-keepalive.js.map +1 -0
  155. package/daemon/dist/domain/project-classifier.d.ts +75 -0
  156. package/daemon/dist/domain/project-classifier.d.ts.map +1 -0
  157. package/daemon/dist/domain/project-classifier.js +132 -0
  158. package/daemon/dist/domain/project-classifier.js.map +1 -0
  159. package/daemon/dist/domain/projection-planner.d.ts +1 -0
  160. package/daemon/dist/domain/projection-planner.d.ts.map +1 -1
  161. package/daemon/dist/domain/projection-planner.js +3 -0
  162. package/daemon/dist/domain/projection-planner.js.map +1 -1
  163. package/daemon/dist/domain/ps-projection.d.ts +31 -0
  164. package/daemon/dist/domain/ps-projection.d.ts.map +1 -1
  165. package/daemon/dist/domain/ps-projection.js +38 -0
  166. package/daemon/dist/domain/ps-projection.js.map +1 -1
  167. package/daemon/dist/domain/queue-repository.d.ts +322 -0
  168. package/daemon/dist/domain/queue-repository.d.ts.map +1 -0
  169. package/daemon/dist/domain/queue-repository.js +686 -0
  170. package/daemon/dist/domain/queue-repository.js.map +1 -0
  171. package/daemon/dist/domain/queue-transition-log.d.ts +38 -0
  172. package/daemon/dist/domain/queue-transition-log.d.ts.map +1 -0
  173. package/daemon/dist/domain/queue-transition-log.js +52 -0
  174. package/daemon/dist/domain/queue-transition-log.js.map +1 -0
  175. package/daemon/dist/domain/restore-check-service.d.ts +203 -0
  176. package/daemon/dist/domain/restore-check-service.d.ts.map +1 -0
  177. package/daemon/dist/domain/restore-check-service.js +1047 -0
  178. package/daemon/dist/domain/restore-check-service.js.map +1 -0
  179. package/daemon/dist/domain/restore-orchestrator.d.ts +49 -3
  180. package/daemon/dist/domain/restore-orchestrator.d.ts.map +1 -1
  181. package/daemon/dist/domain/restore-orchestrator.js +460 -62
  182. package/daemon/dist/domain/restore-orchestrator.js.map +1 -1
  183. package/daemon/dist/domain/rig-expansion-service.d.ts.map +1 -1
  184. package/daemon/dist/domain/rig-expansion-service.js +13 -0
  185. package/daemon/dist/domain/rig-expansion-service.js.map +1 -1
  186. package/daemon/dist/domain/rig-repository.d.ts +17 -1
  187. package/daemon/dist/domain/rig-repository.d.ts.map +1 -1
  188. package/daemon/dist/domain/rig-repository.js +63 -5
  189. package/daemon/dist/domain/rig-repository.js.map +1 -1
  190. package/daemon/dist/domain/rigspec-codec.d.ts.map +1 -1
  191. package/daemon/dist/domain/rigspec-codec.js +13 -0
  192. package/daemon/dist/domain/rigspec-codec.js.map +1 -1
  193. package/daemon/dist/domain/rigspec-exporter.d.ts.map +1 -1
  194. package/daemon/dist/domain/rigspec-exporter.js +2 -0
  195. package/daemon/dist/domain/rigspec-exporter.js.map +1 -1
  196. package/daemon/dist/domain/rigspec-instantiator.d.ts.map +1 -1
  197. package/daemon/dist/domain/rigspec-instantiator.js +61 -1
  198. package/daemon/dist/domain/rigspec-instantiator.js.map +1 -1
  199. package/daemon/dist/domain/rigspec-schema.d.ts.map +1 -1
  200. package/daemon/dist/domain/rigspec-schema.js +196 -0
  201. package/daemon/dist/domain/rigspec-schema.js.map +1 -1
  202. package/daemon/dist/domain/runtime-adapter.d.ts +27 -2
  203. package/daemon/dist/domain/runtime-adapter.d.ts.map +1 -1
  204. package/daemon/dist/domain/runtime-adapter.js +5 -0
  205. package/daemon/dist/domain/runtime-adapter.js.map +1 -1
  206. package/daemon/dist/domain/seat-handover-planner.d.ts +84 -0
  207. package/daemon/dist/domain/seat-handover-planner.d.ts.map +1 -0
  208. package/daemon/dist/domain/seat-handover-planner.js +188 -0
  209. package/daemon/dist/domain/seat-handover-planner.js.map +1 -0
  210. package/daemon/dist/domain/seat-handover-service.d.ts +104 -0
  211. package/daemon/dist/domain/seat-handover-service.d.ts.map +1 -0
  212. package/daemon/dist/domain/seat-handover-service.js +343 -0
  213. package/daemon/dist/domain/seat-handover-service.js.map +1 -0
  214. package/daemon/dist/domain/seat-status-service.d.ts +50 -0
  215. package/daemon/dist/domain/seat-status-service.d.ts.map +1 -0
  216. package/daemon/dist/domain/seat-status-service.js +66 -0
  217. package/daemon/dist/domain/seat-status-service.js.map +1 -0
  218. package/daemon/dist/domain/session-source-rebuild-resolver.d.ts +53 -0
  219. package/daemon/dist/domain/session-source-rebuild-resolver.d.ts.map +1 -0
  220. package/daemon/dist/domain/session-source-rebuild-resolver.js +59 -0
  221. package/daemon/dist/domain/session-source-rebuild-resolver.js.map +1 -0
  222. package/daemon/dist/domain/session-transport.d.ts +30 -0
  223. package/daemon/dist/domain/session-transport.d.ts.map +1 -1
  224. package/daemon/dist/domain/session-transport.js +322 -12
  225. package/daemon/dist/domain/session-transport.js.map +1 -1
  226. package/daemon/dist/domain/snapshot-repository.d.ts +18 -0
  227. package/daemon/dist/domain/snapshot-repository.d.ts.map +1 -1
  228. package/daemon/dist/domain/snapshot-repository.js +77 -0
  229. package/daemon/dist/domain/snapshot-repository.js.map +1 -1
  230. package/daemon/dist/domain/startup-orchestrator.d.ts +22 -3
  231. package/daemon/dist/domain/startup-orchestrator.d.ts.map +1 -1
  232. package/daemon/dist/domain/startup-orchestrator.js +31 -5
  233. package/daemon/dist/domain/startup-orchestrator.js.map +1 -1
  234. package/daemon/dist/domain/stream-store.d.ts +56 -0
  235. package/daemon/dist/domain/stream-store.d.ts.map +1 -0
  236. package/daemon/dist/domain/stream-store.js +108 -0
  237. package/daemon/dist/domain/stream-store.js.map +1 -0
  238. package/daemon/dist/domain/transcript-redaction.d.ts +13 -0
  239. package/daemon/dist/domain/transcript-redaction.d.ts.map +1 -0
  240. package/daemon/dist/domain/transcript-redaction.js +34 -0
  241. package/daemon/dist/domain/transcript-redaction.js.map +1 -0
  242. package/daemon/dist/domain/transcript-store.d.ts +15 -0
  243. package/daemon/dist/domain/transcript-store.d.ts.map +1 -1
  244. package/daemon/dist/domain/transcript-store.js +57 -1
  245. package/daemon/dist/domain/transcript-store.js.map +1 -1
  246. package/daemon/dist/domain/types.d.ts +316 -3
  247. package/daemon/dist/domain/types.d.ts.map +1 -1
  248. package/daemon/dist/domain/view-event-bridge.d.ts +12 -0
  249. package/daemon/dist/domain/view-event-bridge.d.ts.map +1 -0
  250. package/daemon/dist/domain/view-event-bridge.js +92 -0
  251. package/daemon/dist/domain/view-event-bridge.js.map +1 -0
  252. package/daemon/dist/domain/view-projector.d.ts +83 -0
  253. package/daemon/dist/domain/view-projector.d.ts.map +1 -0
  254. package/daemon/dist/domain/view-projector.js +296 -0
  255. package/daemon/dist/domain/view-projector.js.map +1 -0
  256. package/daemon/dist/domain/watchdog-history-log.d.ts +49 -0
  257. package/daemon/dist/domain/watchdog-history-log.d.ts.map +1 -0
  258. package/daemon/dist/domain/watchdog-history-log.js +67 -0
  259. package/daemon/dist/domain/watchdog-history-log.js.map +1 -0
  260. package/daemon/dist/domain/watchdog-jobs-repository.d.ts +81 -0
  261. package/daemon/dist/domain/watchdog-jobs-repository.d.ts.map +1 -0
  262. package/daemon/dist/domain/watchdog-jobs-repository.js +164 -0
  263. package/daemon/dist/domain/watchdog-jobs-repository.js.map +1 -0
  264. package/daemon/dist/domain/watchdog-policy-engine.d.ts +92 -0
  265. package/daemon/dist/domain/watchdog-policy-engine.d.ts.map +1 -0
  266. package/daemon/dist/domain/watchdog-policy-engine.js +442 -0
  267. package/daemon/dist/domain/watchdog-policy-engine.js.map +1 -0
  268. package/daemon/dist/domain/watchdog-scheduler.d.ts +76 -0
  269. package/daemon/dist/domain/watchdog-scheduler.d.ts.map +1 -0
  270. package/daemon/dist/domain/watchdog-scheduler.js +112 -0
  271. package/daemon/dist/domain/watchdog-scheduler.js.map +1 -0
  272. package/daemon/dist/domain/workflow-instance-store.d.ts +46 -0
  273. package/daemon/dist/domain/workflow-instance-store.d.ts.map +1 -0
  274. package/daemon/dist/domain/workflow-instance-store.js +116 -0
  275. package/daemon/dist/domain/workflow-instance-store.js.map +1 -0
  276. package/daemon/dist/domain/workflow-projector.d.ts +64 -0
  277. package/daemon/dist/domain/workflow-projector.d.ts.map +1 -0
  278. package/daemon/dist/domain/workflow-projector.js +424 -0
  279. package/daemon/dist/domain/workflow-projector.js.map +1 -0
  280. package/daemon/dist/domain/workflow-runtime.d.ts +63 -0
  281. package/daemon/dist/domain/workflow-runtime.d.ts.map +1 -0
  282. package/daemon/dist/domain/workflow-runtime.js +150 -0
  283. package/daemon/dist/domain/workflow-runtime.js.map +1 -0
  284. package/daemon/dist/domain/workflow-spec-cache.d.ts +35 -0
  285. package/daemon/dist/domain/workflow-spec-cache.d.ts.map +1 -0
  286. package/daemon/dist/domain/workflow-spec-cache.js +171 -0
  287. package/daemon/dist/domain/workflow-spec-cache.js.map +1 -0
  288. package/daemon/dist/domain/workflow-step-trail-log.d.ts +27 -0
  289. package/daemon/dist/domain/workflow-step-trail-log.d.ts.map +1 -0
  290. package/daemon/dist/domain/workflow-step-trail-log.js +73 -0
  291. package/daemon/dist/domain/workflow-step-trail-log.js.map +1 -0
  292. package/daemon/dist/domain/workflow-types.d.ts +108 -0
  293. package/daemon/dist/domain/workflow-types.d.ts.map +1 -0
  294. package/daemon/dist/domain/workflow-types.js +11 -0
  295. package/daemon/dist/domain/workflow-types.js.map +1 -0
  296. package/daemon/dist/domain/workflow-validator.d.ts +31 -0
  297. package/daemon/dist/domain/workflow-validator.d.ts.map +1 -0
  298. package/daemon/dist/domain/workflow-validator.js +115 -0
  299. package/daemon/dist/domain/workflow-validator.js.map +1 -0
  300. package/daemon/dist/index.d.ts.map +1 -1
  301. package/daemon/dist/index.js +21 -2
  302. package/daemon/dist/index.js.map +1 -1
  303. package/daemon/dist/routes/activity.d.ts +3 -0
  304. package/daemon/dist/routes/activity.d.ts.map +1 -0
  305. package/daemon/dist/routes/activity.js +47 -0
  306. package/daemon/dist/routes/activity.js.map +1 -0
  307. package/daemon/dist/routes/projects.d.ts +12 -0
  308. package/daemon/dist/routes/projects.d.ts.map +1 -0
  309. package/daemon/dist/routes/projects.js +178 -0
  310. package/daemon/dist/routes/projects.js.map +1 -0
  311. package/daemon/dist/routes/queue.d.ts +10 -0
  312. package/daemon/dist/routes/queue.d.ts.map +1 -0
  313. package/daemon/dist/routes/queue.js +374 -0
  314. package/daemon/dist/routes/queue.js.map +1 -0
  315. package/daemon/dist/routes/restore-check.d.ts +3 -0
  316. package/daemon/dist/routes/restore-check.d.ts.map +1 -0
  317. package/daemon/dist/routes/restore-check.js +200 -0
  318. package/daemon/dist/routes/restore-check.js.map +1 -0
  319. package/daemon/dist/routes/rigs.d.ts.map +1 -1
  320. package/daemon/dist/routes/rigs.js +60 -4
  321. package/daemon/dist/routes/rigs.js.map +1 -1
  322. package/daemon/dist/routes/seat.d.ts +3 -0
  323. package/daemon/dist/routes/seat.d.ts.map +1 -0
  324. package/daemon/dist/routes/seat.js +69 -0
  325. package/daemon/dist/routes/seat.js.map +1 -0
  326. package/daemon/dist/routes/sessions.d.ts.map +1 -1
  327. package/daemon/dist/routes/sessions.js +25 -4
  328. package/daemon/dist/routes/sessions.js.map +1 -1
  329. package/daemon/dist/routes/snapshots.js +66 -29
  330. package/daemon/dist/routes/snapshots.js.map +1 -1
  331. package/daemon/dist/routes/stream.d.ts +9 -0
  332. package/daemon/dist/routes/stream.d.ts.map +1 -0
  333. package/daemon/dist/routes/stream.js +119 -0
  334. package/daemon/dist/routes/stream.js.map +1 -0
  335. package/daemon/dist/routes/transcripts.d.ts.map +1 -1
  336. package/daemon/dist/routes/transcripts.js +38 -0
  337. package/daemon/dist/routes/transcripts.js.map +1 -1
  338. package/daemon/dist/routes/transport.d.ts.map +1 -1
  339. package/daemon/dist/routes/transport.js +21 -0
  340. package/daemon/dist/routes/transport.js.map +1 -1
  341. package/daemon/dist/routes/up.js +24 -3
  342. package/daemon/dist/routes/up.js.map +1 -1
  343. package/daemon/dist/routes/views.d.ts +13 -0
  344. package/daemon/dist/routes/views.d.ts.map +1 -0
  345. package/daemon/dist/routes/views.js +120 -0
  346. package/daemon/dist/routes/views.js.map +1 -0
  347. package/daemon/dist/routes/watchdog.d.ts +18 -0
  348. package/daemon/dist/routes/watchdog.d.ts.map +1 -0
  349. package/daemon/dist/routes/watchdog.js +148 -0
  350. package/daemon/dist/routes/watchdog.js.map +1 -0
  351. package/daemon/dist/routes/workflow.d.ts +20 -0
  352. package/daemon/dist/routes/workflow.d.ts.map +1 -0
  353. package/daemon/dist/routes/workflow.js +184 -0
  354. package/daemon/dist/routes/workflow.js.map +1 -0
  355. package/daemon/dist/server.d.ts +30 -0
  356. package/daemon/dist/server.d.ts.map +1 -1
  357. package/daemon/dist/server.js +33 -0
  358. package/daemon/dist/server.js.map +1 -1
  359. package/daemon/dist/startup.d.ts.map +1 -1
  360. package/daemon/dist/startup.js +202 -8
  361. package/daemon/dist/startup.js.map +1 -1
  362. package/daemon/docs/reference/agent-spec.md +12 -5
  363. package/daemon/docs/reference/agent-startup-guide.md +9 -9
  364. package/daemon/specs/agents/apps/vault-specialist/agent.yaml +1 -1
  365. package/daemon/specs/agents/design/product-designer/agent.yaml +1 -1
  366. package/daemon/specs/agents/development/implementer/agent.yaml +1 -1
  367. package/daemon/specs/agents/development/qa/agent.yaml +1 -1
  368. package/daemon/specs/agents/orchestration/orchestrator/agent.yaml +1 -1
  369. package/daemon/specs/agents/product-management/pm/agent.yaml +4 -0
  370. package/daemon/specs/agents/research/analyst/agent.yaml +1 -1
  371. package/daemon/specs/agents/research/synthesizer/agent.yaml +1 -1
  372. package/daemon/specs/agents/review/independent-reviewer/agent.yaml +1 -1
  373. package/daemon/specs/agents/shared/agent.yaml +17 -0
  374. package/daemon/specs/agents/shared/runtime/claude-mcp.fragment.json +12 -0
  375. package/daemon/specs/agents/shared/runtime/claude-settings.fragment.json +16 -0
  376. package/daemon/specs/agents/shared/runtime/codex-config.fragment.toml +5 -0
  377. package/daemon/specs/agents/shared/skills/claude-compact-in-place/SKILL.md +100 -0
  378. package/daemon/specs/agents/shared/skills/core/openrig-operator/SKILL.md +110 -0
  379. package/daemon/specs/agents/shared/skills/core/openrig-user/SKILL.md +44 -1
  380. package/daemon/specs/agents/shared/skills/mental-model-ha/SKILL.md +3 -0
  381. package/daemon/specs/agents/shared/skills/pods/orchestration-team/SKILL.md +3 -0
  382. package/daemon/specs/agents/shared/skills/rig-architect/SKILL.md +11 -1
  383. package/dist/bin-wrapper.js +0 -0
  384. package/dist/commands/capture.d.ts +7 -1
  385. package/dist/commands/capture.d.ts.map +1 -1
  386. package/dist/commands/capture.js +59 -1
  387. package/dist/commands/capture.js.map +1 -1
  388. package/dist/commands/compact-plan.d.ts +9 -0
  389. package/dist/commands/compact-plan.d.ts.map +1 -0
  390. package/dist/commands/compact-plan.js +354 -0
  391. package/dist/commands/compact-plan.js.map +1 -0
  392. package/dist/commands/context.d.ts +9 -0
  393. package/dist/commands/context.d.ts.map +1 -0
  394. package/dist/commands/context.js +220 -0
  395. package/dist/commands/context.js.map +1 -0
  396. package/dist/commands/expand.d.ts.map +1 -1
  397. package/dist/commands/expand.js +15 -4
  398. package/dist/commands/expand.js.map +1 -1
  399. package/dist/commands/heartbeat.d.ts +99 -0
  400. package/dist/commands/heartbeat.d.ts.map +1 -0
  401. package/dist/commands/heartbeat.js +393 -0
  402. package/dist/commands/heartbeat.js.map +1 -0
  403. package/dist/commands/project.d.ts +14 -0
  404. package/dist/commands/project.d.ts.map +1 -0
  405. package/dist/commands/project.js +157 -0
  406. package/dist/commands/project.js.map +1 -0
  407. package/dist/commands/ps.d.ts +20 -3
  408. package/dist/commands/ps.d.ts.map +1 -1
  409. package/dist/commands/ps.js +455 -33
  410. package/dist/commands/ps.js.map +1 -1
  411. package/dist/commands/queue.d.ts +16 -0
  412. package/dist/commands/queue.d.ts.map +1 -0
  413. package/dist/commands/queue.js +401 -0
  414. package/dist/commands/queue.js.map +1 -0
  415. package/dist/commands/restore-check.d.ts +9 -0
  416. package/dist/commands/restore-check.d.ts.map +1 -0
  417. package/dist/commands/restore-check.js +234 -0
  418. package/dist/commands/restore-check.js.map +1 -0
  419. package/dist/commands/restore-packet.d.ts +9 -0
  420. package/dist/commands/restore-packet.d.ts.map +1 -0
  421. package/dist/commands/restore-packet.js +383 -0
  422. package/dist/commands/restore-packet.js.map +1 -0
  423. package/dist/commands/restore.d.ts.map +1 -1
  424. package/dist/commands/restore.js +44 -1
  425. package/dist/commands/restore.js.map +1 -1
  426. package/dist/commands/seat.d.ts +5 -0
  427. package/dist/commands/seat.d.ts.map +1 -0
  428. package/dist/commands/seat.js +170 -0
  429. package/dist/commands/seat.js.map +1 -0
  430. package/dist/commands/send.d.ts +12 -1
  431. package/dist/commands/send.d.ts.map +1 -1
  432. package/dist/commands/send.js +93 -5
  433. package/dist/commands/send.js.map +1 -1
  434. package/dist/commands/setup.js +3 -3
  435. package/dist/commands/setup.js.map +1 -1
  436. package/dist/commands/specs.d.ts.map +1 -1
  437. package/dist/commands/specs.js +99 -16
  438. package/dist/commands/specs.js.map +1 -1
  439. package/dist/commands/stream.d.ts +12 -0
  440. package/dist/commands/stream.d.ts.map +1 -0
  441. package/dist/commands/stream.js +111 -0
  442. package/dist/commands/stream.js.map +1 -0
  443. package/dist/commands/up.d.ts.map +1 -1
  444. package/dist/commands/up.js +63 -3
  445. package/dist/commands/up.js.map +1 -1
  446. package/dist/commands/view.d.ts +12 -0
  447. package/dist/commands/view.d.ts.map +1 -0
  448. package/dist/commands/view.js +82 -0
  449. package/dist/commands/view.js.map +1 -0
  450. package/dist/commands/watchdog.d.ts +15 -0
  451. package/dist/commands/watchdog.d.ts.map +1 -0
  452. package/dist/commands/watchdog.js +120 -0
  453. package/dist/commands/watchdog.js.map +1 -0
  454. package/dist/commands/whoami.d.ts +8 -1
  455. package/dist/commands/whoami.d.ts.map +1 -1
  456. package/dist/commands/whoami.js +60 -1
  457. package/dist/commands/whoami.js.map +1 -1
  458. package/dist/commands/workflow.d.ts +17 -0
  459. package/dist/commands/workflow.d.ts.map +1 -0
  460. package/dist/commands/workflow.js +138 -0
  461. package/dist/commands/workflow.js.map +1 -0
  462. package/dist/cross-host-cli-helpers.d.ts +12 -0
  463. package/dist/cross-host-cli-helpers.d.ts.map +1 -0
  464. package/dist/cross-host-cli-helpers.js +48 -0
  465. package/dist/cross-host-cli-helpers.js.map +1 -0
  466. package/dist/cross-host-executor.d.ts +84 -0
  467. package/dist/cross-host-executor.d.ts.map +1 -0
  468. package/dist/cross-host-executor.js +138 -0
  469. package/dist/cross-host-executor.js.map +1 -0
  470. package/dist/host-registry.d.ts +50 -0
  471. package/dist/host-registry.d.ts.map +1 -0
  472. package/dist/host-registry.js +116 -0
  473. package/dist/host-registry.js.map +1 -0
  474. package/dist/index.d.ts +20 -0
  475. package/dist/index.d.ts.map +1 -1
  476. package/dist/index.js +24 -0
  477. package/dist/index.js.map +1 -1
  478. package/dist/mcp-server.d.ts.map +1 -1
  479. package/dist/mcp-server.js +22 -2
  480. package/dist/mcp-server.js.map +1 -1
  481. package/dist/restore-packet/claude-transcript-parser.d.ts +12 -0
  482. package/dist/restore-packet/claude-transcript-parser.d.ts.map +1 -0
  483. package/dist/restore-packet/claude-transcript-parser.js +221 -0
  484. package/dist/restore-packet/claude-transcript-parser.js.map +1 -0
  485. package/dist/restore-packet/codex-jsonl-parser.d.ts +11 -0
  486. package/dist/restore-packet/codex-jsonl-parser.d.ts.map +1 -0
  487. package/dist/restore-packet/codex-jsonl-parser.js +159 -0
  488. package/dist/restore-packet/codex-jsonl-parser.js.map +1 -0
  489. package/dist/restore-packet/omitted-records.d.ts +60 -0
  490. package/dist/restore-packet/omitted-records.d.ts.map +1 -0
  491. package/dist/restore-packet/omitted-records.js +116 -0
  492. package/dist/restore-packet/omitted-records.js.map +1 -0
  493. package/dist/restore-packet/packet-writer.d.ts +59 -0
  494. package/dist/restore-packet/packet-writer.d.ts.map +1 -0
  495. package/dist/restore-packet/packet-writer.js +224 -0
  496. package/dist/restore-packet/packet-writer.js.map +1 -0
  497. package/dist/restore-packet/redaction.d.ts +30 -0
  498. package/dist/restore-packet/redaction.d.ts.map +1 -0
  499. package/dist/restore-packet/redaction.js +71 -0
  500. package/dist/restore-packet/redaction.js.map +1 -0
  501. package/dist/restore-packet/runtime-detect.d.ts +19 -0
  502. package/dist/restore-packet/runtime-detect.d.ts.map +1 -0
  503. package/dist/restore-packet/runtime-detect.js +81 -0
  504. package/dist/restore-packet/runtime-detect.js.map +1 -0
  505. package/dist/restore-packet/schema-validator.d.ts +13 -0
  506. package/dist/restore-packet/schema-validator.d.ts.map +1 -0
  507. package/dist/restore-packet/schema-validator.js +245 -0
  508. package/dist/restore-packet/schema-validator.js.map +1 -0
  509. package/dist/restore-packet/types.d.ts +76 -0
  510. package/dist/restore-packet/types.d.ts.map +1 -0
  511. package/dist/restore-packet/types.js +15 -0
  512. package/dist/restore-packet/types.js.map +1 -0
  513. package/dist/schemas/restore-summary.schema.json +98 -0
  514. package/package.json +10 -3
  515. package/scripts/check-abi.mjs +123 -0
  516. package/ui/dist/assets/{index-DlMH-REm.css → index-Dec25siz.css} +1 -1
  517. package/ui/dist/assets/{index-Ccd-jwRN.js → index-GNYaWmBj.js} +2 -2
  518. package/ui/dist/index.html +2 -2
@@ -0,0 +1,49 @@
1
+ import type Database from "better-sqlite3";
2
+ /**
3
+ * Watchdog history log (PL-004 Phase C; append-only audit writer).
4
+ *
5
+ * Per slice IMPL § Guard Checkpoint Focus item 2:
6
+ * - Pure `not_due` polls are NOT recorded (matches POC; minimizes
7
+ * table size). Only `sent` / `skipped` / `terminal` outcomes pass
8
+ * through this log.
9
+ * - Append-only API surface: only `record()` exposed. UPDATE/DELETE
10
+ * are not exposed. SQLite has no view/role layer so direct SQL
11
+ * could mutate, but the contract is enforced at this domain
12
+ * boundary.
13
+ */
14
+ export type WatchdogOutcome = "sent" | "skipped" | "terminal";
15
+ export interface WatchdogHistoryRecordInput {
16
+ jobId: string;
17
+ evaluatedAt: string;
18
+ outcome: WatchdogOutcome;
19
+ skipReason?: string | null;
20
+ deliveryTargetSession?: string | null;
21
+ deliveryStatus?: string | null;
22
+ deliveryMessage?: string | null;
23
+ evaluationNotes?: Record<string, unknown> | null;
24
+ }
25
+ export interface WatchdogHistoryEntry {
26
+ historyId: string;
27
+ jobId: string;
28
+ evaluatedAt: string;
29
+ outcome: WatchdogOutcome;
30
+ skipReason: string | null;
31
+ deliveryTargetSession: string | null;
32
+ deliveryStatus: string | null;
33
+ deliveryMessage: string | null;
34
+ evaluationNotes: Record<string, unknown> | null;
35
+ }
36
+ export declare class WatchdogHistoryLog {
37
+ private readonly db;
38
+ constructor(db: Database.Database);
39
+ /**
40
+ * Append a meaningful evaluation outcome. Returns the persisted entry.
41
+ * Caller MUST NOT invoke this for `not_due` pure-skip outcomes — those
42
+ * are not recorded (per POC + IMPL guidance).
43
+ */
44
+ record(input: WatchdogHistoryRecordInput): WatchdogHistoryEntry;
45
+ listForJob(jobId: string, limit?: number): WatchdogHistoryEntry[];
46
+ listAll(limit?: number): WatchdogHistoryEntry[];
47
+ countForJob(jobId: string): number;
48
+ }
49
+ //# sourceMappingURL=watchdog-history-log.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watchdog-history-log.d.ts","sourceRoot":"","sources":["../../src/domain/watchdog-history-log.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAG3C;;;;;;;;;;;GAWG;AAEH,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,SAAS,GAAG,UAAU,CAAC;AAE9D,MAAM,WAAW,0BAA0B;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,eAAe,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,qBAAqB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;CAClD;AAED,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,eAAe,CAAC;IACzB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;CACjD;AAcD,qBAAa,kBAAkB;IACjB,OAAO,CAAC,QAAQ,CAAC,EAAE;gBAAF,EAAE,EAAE,QAAQ,CAAC,QAAQ;IAElD;;;;OAIG;IACH,MAAM,CAAC,KAAK,EAAE,0BAA0B,GAAG,oBAAoB;IAkC/D,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,oBAAoB,EAAE;IAU7D,OAAO,CAAC,KAAK,SAAM,GAAG,oBAAoB,EAAE;IAU5C,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;CAMnC"}
@@ -0,0 +1,67 @@
1
+ import { ulid } from "ulid";
2
+ export class WatchdogHistoryLog {
3
+ db;
4
+ constructor(db) {
5
+ this.db = db;
6
+ }
7
+ /**
8
+ * Append a meaningful evaluation outcome. Returns the persisted entry.
9
+ * Caller MUST NOT invoke this for `not_due` pure-skip outcomes — those
10
+ * are not recorded (per POC + IMPL guidance).
11
+ */
12
+ record(input) {
13
+ const historyId = ulid();
14
+ this.db
15
+ .prepare(`INSERT INTO watchdog_history (
16
+ history_id, job_id, evaluated_at, outcome,
17
+ skip_reason, delivery_target_session, delivery_status,
18
+ delivery_message, evaluation_notes
19
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`)
20
+ .run(historyId, input.jobId, input.evaluatedAt, input.outcome, input.skipReason ?? null, input.deliveryTargetSession ?? null, input.deliveryStatus ?? null, input.deliveryMessage ?? null, input.evaluationNotes ? JSON.stringify(input.evaluationNotes) : null);
21
+ return {
22
+ historyId,
23
+ jobId: input.jobId,
24
+ evaluatedAt: input.evaluatedAt,
25
+ outcome: input.outcome,
26
+ skipReason: input.skipReason ?? null,
27
+ deliveryTargetSession: input.deliveryTargetSession ?? null,
28
+ deliveryStatus: input.deliveryStatus ?? null,
29
+ deliveryMessage: input.deliveryMessage ?? null,
30
+ evaluationNotes: input.evaluationNotes ?? null,
31
+ };
32
+ }
33
+ listForJob(jobId, limit = 50) {
34
+ const rows = this.db
35
+ .prepare(`SELECT * FROM watchdog_history WHERE job_id = ?
36
+ ORDER BY evaluated_at DESC, history_id DESC LIMIT ?`)
37
+ .all(jobId, limit);
38
+ return rows.map(rowToEntry);
39
+ }
40
+ listAll(limit = 100) {
41
+ const rows = this.db
42
+ .prepare(`SELECT * FROM watchdog_history
43
+ ORDER BY evaluated_at DESC, history_id DESC LIMIT ?`)
44
+ .all(limit);
45
+ return rows.map(rowToEntry);
46
+ }
47
+ countForJob(jobId) {
48
+ const row = this.db
49
+ .prepare(`SELECT COUNT(*) AS n FROM watchdog_history WHERE job_id = ?`)
50
+ .get(jobId);
51
+ return row.n;
52
+ }
53
+ }
54
+ function rowToEntry(row) {
55
+ return {
56
+ historyId: row.history_id,
57
+ jobId: row.job_id,
58
+ evaluatedAt: row.evaluated_at,
59
+ outcome: row.outcome,
60
+ skipReason: row.skip_reason,
61
+ deliveryTargetSession: row.delivery_target_session,
62
+ deliveryStatus: row.delivery_status,
63
+ deliveryMessage: row.delivery_message,
64
+ evaluationNotes: row.evaluation_notes ? JSON.parse(row.evaluation_notes) : null,
65
+ };
66
+ }
67
+ //# sourceMappingURL=watchdog-history-log.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watchdog-history-log.js","sourceRoot":"","sources":["../../src/domain/watchdog-history-log.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAoD5B,MAAM,OAAO,kBAAkB;IACA;IAA7B,YAA6B,EAAqB;QAArB,OAAE,GAAF,EAAE,CAAmB;IAAG,CAAC;IAEtD;;;;OAIG;IACH,MAAM,CAAC,KAAiC;QACtC,MAAM,SAAS,GAAG,IAAI,EAAE,CAAC;QACzB,IAAI,CAAC,EAAE;aACJ,OAAO,CACN;;;;6CAIqC,CACtC;aACA,GAAG,CACF,SAAS,EACT,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,WAAW,EACjB,KAAK,CAAC,OAAO,EACb,KAAK,CAAC,UAAU,IAAI,IAAI,EACxB,KAAK,CAAC,qBAAqB,IAAI,IAAI,EACnC,KAAK,CAAC,cAAc,IAAI,IAAI,EAC5B,KAAK,CAAC,eAAe,IAAI,IAAI,EAC7B,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI,CACrE,CAAC;QACJ,OAAO;YACL,SAAS;YACT,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI,IAAI;YACpC,qBAAqB,EAAE,KAAK,CAAC,qBAAqB,IAAI,IAAI;YAC1D,cAAc,EAAE,KAAK,CAAC,cAAc,IAAI,IAAI;YAC5C,eAAe,EAAE,KAAK,CAAC,eAAe,IAAI,IAAI;YAC9C,eAAe,EAAE,KAAK,CAAC,eAAe,IAAI,IAAI;SAC/C,CAAC;IACJ,CAAC;IAED,UAAU,CAAC,KAAa,EAAE,KAAK,GAAG,EAAE;QAClC,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE;aACjB,OAAO,CACN;6DACqD,CACtD;aACA,GAAG,CAAC,KAAK,EAAE,KAAK,CAAiB,CAAC;QACrC,OAAO,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAC9B,CAAC;IAED,OAAO,CAAC,KAAK,GAAG,GAAG;QACjB,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE;aACjB,OAAO,CACN;6DACqD,CACtD;aACA,GAAG,CAAC,KAAK,CAAiB,CAAC;QAC9B,OAAO,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAC9B,CAAC;IAED,WAAW,CAAC,KAAa;QACvB,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE;aAChB,OAAO,CAAC,6DAA6D,CAAC;aACtE,GAAG,CAAC,KAAK,CAAkB,CAAC;QAC/B,OAAO,GAAG,CAAC,CAAC,CAAC;IACf,CAAC;CACF;AAED,SAAS,UAAU,CAAC,GAAe;IACjC,OAAO;QACL,SAAS,EAAE,GAAG,CAAC,UAAU;QACzB,KAAK,EAAE,GAAG,CAAC,MAAM;QACjB,WAAW,EAAE,GAAG,CAAC,YAAY;QAC7B,OAAO,EAAE,GAAG,CAAC,OAA0B;QACvC,UAAU,EAAE,GAAG,CAAC,WAAW;QAC3B,qBAAqB,EAAE,GAAG,CAAC,uBAAuB;QAClD,cAAc,EAAE,GAAG,CAAC,eAAe;QACnC,eAAe,EAAE,GAAG,CAAC,gBAAgB;QACrC,eAAe,EAAE,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,IAAI;KAChF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,81 @@
1
+ import type Database from "better-sqlite3";
2
+ /**
3
+ * Watchdog jobs repository (PL-004 Phase C; extended in Phase D).
4
+ *
5
+ * Owns all reads/writes against `watchdog_jobs`. Pure persistence; no
6
+ * event-bus, no scheduler, no policy dispatch. Composed by the
7
+ * scheduler and policy engine.
8
+ *
9
+ * Phase D v1 accepts FOUR policy values (the orch-ratified Phase C
10
+ * `workflow-keepalive` deferral has been lifted; the policy module
11
+ * now exists at `policies/workflow-keepalive.ts` and reads from the
12
+ * SQLite `workflow_instances` table introduced in Phase D):
13
+ * - periodic-reminder (Phase C)
14
+ * - artifact-pool-ready (Phase C)
15
+ * - edge-artifact-required (Phase C)
16
+ * - workflow-keepalive (Phase D)
17
+ *
18
+ * PHASE_C_POLICIES retained as a deprecated alias for callers that
19
+ * still reference it; new code uses PHASE_D_POLICIES.
20
+ */
21
+ export declare const PHASE_D_POLICIES: readonly ["periodic-reminder", "artifact-pool-ready", "edge-artifact-required", "workflow-keepalive"];
22
+ /** @deprecated since Phase D — use PHASE_D_POLICIES. */
23
+ export declare const PHASE_C_POLICIES: readonly ["periodic-reminder", "artifact-pool-ready", "edge-artifact-required", "workflow-keepalive"];
24
+ export type WatchdogPolicyName = (typeof PHASE_D_POLICIES)[number];
25
+ export type WatchdogJobState = "active" | "stopped" | "terminal";
26
+ export interface WatchdogJob {
27
+ jobId: string;
28
+ policy: WatchdogPolicyName;
29
+ specYaml: string;
30
+ targetSession: string;
31
+ intervalSeconds: number;
32
+ activeWakeIntervalSeconds: number | null;
33
+ scanIntervalSeconds: number | null;
34
+ lastEvaluationAt: string | null;
35
+ lastFireAt: string | null;
36
+ actionable: boolean;
37
+ lastActionableAt: string | null;
38
+ state: WatchdogJobState;
39
+ registeredBySession: string;
40
+ registeredAt: string;
41
+ terminalReason: string | null;
42
+ }
43
+ export interface RegisterWatchdogJobInput {
44
+ policy: string;
45
+ specYaml: string;
46
+ targetSession: string;
47
+ intervalSeconds: number;
48
+ activeWakeIntervalSeconds?: number | null;
49
+ scanIntervalSeconds?: number | null;
50
+ registeredBySession: string;
51
+ }
52
+ export declare class WatchdogJobsError extends Error {
53
+ readonly code: string;
54
+ readonly details?: Record<string, unknown> | undefined;
55
+ constructor(code: string, message: string, details?: Record<string, unknown> | undefined);
56
+ }
57
+ export declare class WatchdogJobsRepository {
58
+ private readonly db;
59
+ private readonly now;
60
+ constructor(db: Database.Database, now?: () => Date);
61
+ register(input: RegisterWatchdogJobInput): WatchdogJob;
62
+ getById(jobId: string): WatchdogJob | null;
63
+ getByIdOrThrow(jobId: string): WatchdogJob;
64
+ listAll(): WatchdogJob[];
65
+ listActive(): WatchdogJob[];
66
+ recordEvaluation(jobId: string, evaluatedAt: string, fired: boolean): void;
67
+ /**
68
+ * R1 fix: write the actionable-state machine columns. Mirrors POC
69
+ * engine's `state.actionable` + `state.last_actionable_at`. Called
70
+ * by the policy engine after every meaningful evaluation:
71
+ * - newActionable=false (skip): clears actionable + last_actionable_at.
72
+ * - newActionable=true with no preserveLastActionableAt: stamps
73
+ * last_actionable_at to evaluatedAt (newly actionable).
74
+ * - newActionable=true with preserveLastActionableAt set: keeps the
75
+ * existing first-actionable timestamp (continued actionable window).
76
+ */
77
+ setActionable(jobId: string, newActionable: boolean, evaluatedAt: string, preserveLastActionableAt?: string | null): void;
78
+ markTerminal(jobId: string, reason: string): void;
79
+ stop(jobId: string, reason?: string): WatchdogJob;
80
+ }
81
+ //# sourceMappingURL=watchdog-jobs-repository.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watchdog-jobs-repository.d.ts","sourceRoot":"","sources":["../../src/domain/watchdog-jobs-repository.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAG3C;;;;;;;;;;;;;;;;;;GAkBG;AAEH,eAAO,MAAM,gBAAgB,uGAKnB,CAAC;AAEX,wDAAwD;AACxD,eAAO,MAAM,gBAAgB,uGAAmB,CAAC;AAEjD,MAAM,MAAM,kBAAkB,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEnE,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,SAAS,GAAG,UAAU,CAAC;AAEjE,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,kBAAkB,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,yBAAyB,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,UAAU,EAAE,OAAO,CAAC;IACpB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,KAAK,EAAE,gBAAgB,CAAC;IACxB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAED,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,yBAAyB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1C,mBAAmB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAoBD,qBAAa,iBAAkB,SAAQ,KAAK;aAExB,IAAI,EAAE,MAAM;aAEZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;gBAFjC,IAAI,EAAE,MAAM,EAC5B,OAAO,EAAE,MAAM,EACC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,YAAA;CAKpD;AAED,qBAAa,sBAAsB;IAE/B,OAAO,CAAC,QAAQ,CAAC,EAAE;IACnB,OAAO,CAAC,QAAQ,CAAC,GAAG;gBADH,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,GAAG,GAAE,MAAM,IAAuB;IAGrD,QAAQ,CAAC,KAAK,EAAE,wBAAwB,GAAG,WAAW;IA+CtD,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI;IAO1C,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW;IAY1C,OAAO,IAAI,WAAW,EAAE;IAOxB,UAAU,IAAI,WAAW,EAAE;IAO3B,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAc1E;;;;;;;;;OASG;IACH,aAAa,CACX,KAAK,EAAE,MAAM,EACb,aAAa,EAAE,OAAO,EACtB,WAAW,EAAE,MAAM,EACnB,wBAAwB,GAAE,MAAM,GAAG,IAAW,GAC7C,IAAI;IAiBP,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAQjD,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,SAAqB,GAAG,WAAW;CAe9D"}
@@ -0,0 +1,164 @@
1
+ import { ulid } from "ulid";
2
+ /**
3
+ * Watchdog jobs repository (PL-004 Phase C; extended in Phase D).
4
+ *
5
+ * Owns all reads/writes against `watchdog_jobs`. Pure persistence; no
6
+ * event-bus, no scheduler, no policy dispatch. Composed by the
7
+ * scheduler and policy engine.
8
+ *
9
+ * Phase D v1 accepts FOUR policy values (the orch-ratified Phase C
10
+ * `workflow-keepalive` deferral has been lifted; the policy module
11
+ * now exists at `policies/workflow-keepalive.ts` and reads from the
12
+ * SQLite `workflow_instances` table introduced in Phase D):
13
+ * - periodic-reminder (Phase C)
14
+ * - artifact-pool-ready (Phase C)
15
+ * - edge-artifact-required (Phase C)
16
+ * - workflow-keepalive (Phase D)
17
+ *
18
+ * PHASE_C_POLICIES retained as a deprecated alias for callers that
19
+ * still reference it; new code uses PHASE_D_POLICIES.
20
+ */
21
+ export const PHASE_D_POLICIES = [
22
+ "periodic-reminder",
23
+ "artifact-pool-ready",
24
+ "edge-artifact-required",
25
+ "workflow-keepalive",
26
+ ];
27
+ /** @deprecated since Phase D — use PHASE_D_POLICIES. */
28
+ export const PHASE_C_POLICIES = PHASE_D_POLICIES;
29
+ export class WatchdogJobsError extends Error {
30
+ code;
31
+ details;
32
+ constructor(code, message, details) {
33
+ super(message);
34
+ this.code = code;
35
+ this.details = details;
36
+ this.name = "WatchdogJobsError";
37
+ }
38
+ }
39
+ export class WatchdogJobsRepository {
40
+ db;
41
+ now;
42
+ constructor(db, now = () => new Date()) {
43
+ this.db = db;
44
+ this.now = now;
45
+ }
46
+ register(input) {
47
+ if (!PHASE_D_POLICIES.includes(input.policy)) {
48
+ throw new WatchdogJobsError("policy_unknown", `unknown watchdog policy '${input.policy}'; Phase D v1 supports: ${PHASE_D_POLICIES.join(", ")}`, { policy: input.policy, supported: [...PHASE_D_POLICIES] });
49
+ }
50
+ if (!Number.isInteger(input.intervalSeconds) || input.intervalSeconds <= 0) {
51
+ throw new WatchdogJobsError("interval_invalid", `interval_seconds must be a positive integer (got ${input.intervalSeconds})`, { intervalSeconds: input.intervalSeconds });
52
+ }
53
+ if (!input.targetSession || !input.targetSession.includes("@")) {
54
+ throw new WatchdogJobsError("target_session_invalid", `target_session must be canonical '<member>@<rig>' (got '${input.targetSession}')`, { targetSession: input.targetSession });
55
+ }
56
+ const jobId = ulid();
57
+ const registeredAt = this.now().toISOString();
58
+ this.db
59
+ .prepare(`INSERT INTO watchdog_jobs (
60
+ job_id, policy, spec_yaml, target_session,
61
+ interval_seconds, active_wake_interval_seconds, scan_interval_seconds,
62
+ last_evaluation_at, last_fire_at, state,
63
+ registered_by_session, registered_at, terminal_reason
64
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, NULL, NULL, 'active', ?, ?, NULL)`)
65
+ .run(jobId, input.policy, input.specYaml, input.targetSession, input.intervalSeconds, input.activeWakeIntervalSeconds ?? null, input.scanIntervalSeconds ?? null, input.registeredBySession, registeredAt);
66
+ return this.getByIdOrThrow(jobId);
67
+ }
68
+ getById(jobId) {
69
+ const row = this.db
70
+ .prepare(`SELECT * FROM watchdog_jobs WHERE job_id = ?`)
71
+ .get(jobId);
72
+ return row ? rowToJob(row) : null;
73
+ }
74
+ getByIdOrThrow(jobId) {
75
+ const job = this.getById(jobId);
76
+ if (!job) {
77
+ throw new WatchdogJobsError("job_not_found", `watchdog job ${jobId} not found`, { jobId });
78
+ }
79
+ return job;
80
+ }
81
+ listAll() {
82
+ const rows = this.db
83
+ .prepare(`SELECT * FROM watchdog_jobs ORDER BY registered_at ASC`)
84
+ .all();
85
+ return rows.map(rowToJob);
86
+ }
87
+ listActive() {
88
+ const rows = this.db
89
+ .prepare(`SELECT * FROM watchdog_jobs WHERE state = 'active' ORDER BY registered_at ASC`)
90
+ .all();
91
+ return rows.map(rowToJob);
92
+ }
93
+ recordEvaluation(jobId, evaluatedAt, fired) {
94
+ if (fired) {
95
+ this.db
96
+ .prepare(`UPDATE watchdog_jobs SET last_evaluation_at = ?, last_fire_at = ? WHERE job_id = ?`)
97
+ .run(evaluatedAt, evaluatedAt, jobId);
98
+ }
99
+ else {
100
+ this.db
101
+ .prepare(`UPDATE watchdog_jobs SET last_evaluation_at = ? WHERE job_id = ?`)
102
+ .run(evaluatedAt, jobId);
103
+ }
104
+ }
105
+ /**
106
+ * R1 fix: write the actionable-state machine columns. Mirrors POC
107
+ * engine's `state.actionable` + `state.last_actionable_at`. Called
108
+ * by the policy engine after every meaningful evaluation:
109
+ * - newActionable=false (skip): clears actionable + last_actionable_at.
110
+ * - newActionable=true with no preserveLastActionableAt: stamps
111
+ * last_actionable_at to evaluatedAt (newly actionable).
112
+ * - newActionable=true with preserveLastActionableAt set: keeps the
113
+ * existing first-actionable timestamp (continued actionable window).
114
+ */
115
+ setActionable(jobId, newActionable, evaluatedAt, preserveLastActionableAt = null) {
116
+ if (!newActionable) {
117
+ this.db
118
+ .prepare(`UPDATE watchdog_jobs SET actionable = 0, last_actionable_at = NULL WHERE job_id = ?`)
119
+ .run(jobId);
120
+ return;
121
+ }
122
+ const stamp = preserveLastActionableAt ?? evaluatedAt;
123
+ this.db
124
+ .prepare(`UPDATE watchdog_jobs SET actionable = 1, last_actionable_at = ? WHERE job_id = ?`)
125
+ .run(stamp, jobId);
126
+ }
127
+ markTerminal(jobId, reason) {
128
+ this.db
129
+ .prepare(`UPDATE watchdog_jobs SET state = 'terminal', terminal_reason = ? WHERE job_id = ?`)
130
+ .run(reason, jobId);
131
+ }
132
+ stop(jobId, reason = "operator_stopped") {
133
+ const existing = this.getByIdOrThrow(jobId);
134
+ if (existing.state === "terminal") {
135
+ throw new WatchdogJobsError("job_terminal", `cannot stop watchdog job ${jobId}: state is terminal`, { jobId, state: existing.state });
136
+ }
137
+ if (existing.state === "stopped")
138
+ return existing;
139
+ this.db
140
+ .prepare(`UPDATE watchdog_jobs SET state = 'stopped', terminal_reason = ? WHERE job_id = ?`)
141
+ .run(reason, jobId);
142
+ return this.getByIdOrThrow(jobId);
143
+ }
144
+ }
145
+ function rowToJob(row) {
146
+ return {
147
+ jobId: row.job_id,
148
+ policy: row.policy,
149
+ specYaml: row.spec_yaml,
150
+ targetSession: row.target_session,
151
+ intervalSeconds: row.interval_seconds,
152
+ activeWakeIntervalSeconds: row.active_wake_interval_seconds,
153
+ scanIntervalSeconds: row.scan_interval_seconds,
154
+ lastEvaluationAt: row.last_evaluation_at,
155
+ lastFireAt: row.last_fire_at,
156
+ actionable: row.actionable !== 0,
157
+ lastActionableAt: row.last_actionable_at,
158
+ state: row.state,
159
+ registeredBySession: row.registered_by_session,
160
+ registeredAt: row.registered_at,
161
+ terminalReason: row.terminal_reason,
162
+ };
163
+ }
164
+ //# sourceMappingURL=watchdog-jobs-repository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watchdog-jobs-repository.js","sourceRoot":"","sources":["../../src/domain/watchdog-jobs-repository.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,92 @@
1
+ import type { EventBus } from "./event-bus.js";
2
+ import type { Policy, PolicyEvaluation } from "./policies/types.js";
3
+ import { type WatchdogJob, type WatchdogJobsRepository } from "./watchdog-jobs-repository.js";
4
+ import type { WatchdogHistoryEntry, WatchdogHistoryLog } from "./watchdog-history-log.js";
5
+ /**
6
+ * Watchdog policy engine (PL-004 Phase C R1).
7
+ *
8
+ * Owns the per-evaluation state machine that mirrors POC engine
9
+ * `lib/engine.mjs`:
10
+ * 1. Resolve policy by name from registry. Unknown policy → terminal.
11
+ * 2. Parse spec_yaml into top-level `target:` + top-level `message?:` +
12
+ * nested `context:` block, then build a PolicyJob with the
13
+ * resolved target object (falls back to registered targetSession
14
+ * when spec lacks an explicit `target:`).
15
+ * 3. Dispatch policy.evaluate(policyJob).
16
+ * 4. Action handling:
17
+ * - skip: clear actionable=false; record history + emit event
18
+ * ONLY if reason is "loud" (not in QUIET_SKIP_REASONS).
19
+ * - send: enforce active-wake throttle. If state.actionable was
20
+ * already true AND active_wake_interval_seconds is set AND not
21
+ * elapsed since last_fire_at → emit/record `active_wake_not_due`
22
+ * (quiet skip per POC). Otherwise call delivery, record history
23
+ * with sent outcome, emit evaluation_fired, set actionable=true.
24
+ * - terminal: mark job terminal, record history, emit terminal.
25
+ *
26
+ * `not_due` polls are filtered upstream by the scheduler and never
27
+ * reach this engine.
28
+ */
29
+ export interface DeliveryRequest {
30
+ targetSession: string;
31
+ message: string;
32
+ }
33
+ export interface DeliveryOutcome {
34
+ status: "ok" | "failed";
35
+ error?: string;
36
+ }
37
+ export type DeliveryFn = (req: DeliveryRequest) => Promise<DeliveryOutcome>;
38
+ export interface PolicyContextParser {
39
+ /**
40
+ * Parse the operator-supplied spec_yaml into the structured fields the
41
+ * engine needs. Returns the top-level `target` (object), top-level
42
+ * `message` (string), and the `context:` block (Record).
43
+ */
44
+ (specYaml: string): {
45
+ target: {
46
+ session: string;
47
+ } | null;
48
+ message: string | null;
49
+ context: Record<string, unknown>;
50
+ };
51
+ }
52
+ interface WatchdogPolicyEngineDeps {
53
+ jobsRepo: WatchdogJobsRepository;
54
+ historyLog: WatchdogHistoryLog;
55
+ eventBus: EventBus;
56
+ deliver: DeliveryFn;
57
+ parseSpec?: PolicyContextParser;
58
+ now?: () => Date;
59
+ /**
60
+ * PL-004 Phase D extension point (orch-ratified per slice IMPL):
61
+ * additional policies to register alongside the Phase C built-in
62
+ * three. Used to register `workflow-keepalive` (which depends on
63
+ * the Phase D workflow_instances DB and so must be constructed at
64
+ * daemon startup with a db handle injected).
65
+ */
66
+ additionalPolicies?: Policy[];
67
+ }
68
+ export interface EvaluationResult {
69
+ job: WatchdogJob;
70
+ outcome: PolicyEvaluation | {
71
+ action: "skip";
72
+ reason: "active_wake_not_due";
73
+ };
74
+ history: WatchdogHistoryEntry | null;
75
+ delivery: DeliveryOutcome | null;
76
+ /** True if this evaluation produced a history record + event. */
77
+ meaningful: boolean;
78
+ }
79
+ export declare class WatchdogPolicyEngine {
80
+ private readonly jobsRepo;
81
+ private readonly historyLog;
82
+ private readonly eventBus;
83
+ private readonly deliver;
84
+ private readonly parseSpec;
85
+ private readonly now;
86
+ private readonly policies;
87
+ constructor(deps: WatchdogPolicyEngineDeps);
88
+ resolvePolicy(name: string): Policy | undefined;
89
+ evaluate(job: WatchdogJob): Promise<EvaluationResult>;
90
+ }
91
+ export {};
92
+ //# sourceMappingURL=watchdog-policy-engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watchdog-policy-engine.d.ts","sourceRoot":"","sources":["../../src/domain/watchdog-policy-engine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,EAAE,MAAM,EAAE,gBAAgB,EAAa,MAAM,qBAAqB,CAAC;AAI/E,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,sBAAsB,EAC5B,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAE1F;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,MAAM,WAAW,eAAe;IAC9B,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,IAAI,GAAG,QAAQ,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,UAAU,GAAG,CAAC,GAAG,EAAE,eAAe,KAAK,OAAO,CAAC,eAAe,CAAC,CAAC;AAE5E,MAAM,WAAW,mBAAmB;IAClC;;;;OAIG;IACH,CAAC,QAAQ,EAAE,MAAM,GAAG;QAClB,MAAM,EAAE;YAAE,OAAO,EAAE,MAAM,CAAA;SAAE,GAAG,IAAI,CAAC;QACnC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QACvB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAClC,CAAC;CACH;AAED,UAAU,wBAAwB;IAChC,QAAQ,EAAE,sBAAsB,CAAC;IACjC,UAAU,EAAE,kBAAkB,CAAC;IAC/B,QAAQ,EAAE,QAAQ,CAAC;IACnB,OAAO,EAAE,UAAU,CAAC;IACpB,SAAS,CAAC,EAAE,mBAAmB,CAAC;IAChC,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;IACjB;;;;;;OAMG;IACH,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC/B;AAqBD,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,WAAW,CAAC;IACjB,OAAO,EAAE,gBAAgB,GAAG;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,qBAAqB,CAAA;KAAE,CAAC;IAC9E,OAAO,EAAE,oBAAoB,GAAG,IAAI,CAAC;IACrC,QAAQ,EAAE,eAAe,GAAG,IAAI,CAAC;IACjC,iEAAiE;IACjE,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAyB;IAClD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAqB;IAChD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAW;IACpC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAa;IACrC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAsB;IAChD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAa;IACjC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAsB;gBAEnC,IAAI,EAAE,wBAAwB;IAc1C,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAIzC,QAAQ,CAAC,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,gBAAgB,CAAC;CA0K5D"}