@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,13 @@
1
+ export interface ValidationError {
2
+ field: string;
3
+ value: string;
4
+ rule: string;
5
+ severity: "error" | "warning";
6
+ }
7
+ export interface ValidationResult {
8
+ valid: boolean;
9
+ errors: ValidationError[];
10
+ }
11
+ export declare const RESTORE_SUMMARY_SCHEMA: Record<string, unknown>;
12
+ export declare function validateRestoreSummary(summary: unknown): ValidationResult;
13
+ //# sourceMappingURL=schema-validator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-validator.d.ts","sourceRoot":"","sources":["../../src/restore-packet/schema-validator.ts"],"names":[],"mappings":"AA0BA,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAC;CAC/B;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,eAAe,EAAE,CAAC;CAC3B;AAKD,eAAO,MAAM,sBAAsB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAgK1D,CAAC;AAyBF,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,gBAAgB,CAiCzE"}
@@ -0,0 +1,245 @@
1
+ // schema-validator.ts — validates restore-summary.json against the v0 JSON
2
+ // Schema (packages/cli/src/schemas/restore-summary.schema.json).
3
+ //
4
+ // Per M1 contract § 8 + IMPL § M2 line 167:
5
+ // - generator-side: emit-time self-check against the schema before atomic
6
+ // rename of the packet directory.
7
+ // - operator-side: M3 `rig restore-packet validate <packet-dir>` runs this
8
+ // validator and surfaces per-field violations.
9
+ //
10
+ // Validator returns a ValidationResult with `valid` and a per-field error
11
+ // list. Each error names: field path, value (truncated/escaped), rule, and
12
+ // severity. Required-field violations are severity `error`; optional-field
13
+ // malformations are severity `warning` per § 8.
14
+ //
15
+ // M2a R2 packaging fix: the schema is embedded directly in this module as
16
+ // a typed TS const (RESTORE_SUMMARY_SCHEMA) rather than read from the
17
+ // sibling .json file at runtime. tsc emits the const into the compiled
18
+ // validator JS, so the validator works after `tsc` emit without any extra
19
+ // build-script copy step. The canonical JSON Schema file at
20
+ // `packages/cli/src/schemas/restore-summary.schema.json` remains the
21
+ // source of truth for downstream IDE / tooling consumption; a drift-catcher
22
+ // test in `test/restore-packet.test.ts` asserts the two stay byte-equivalent.
23
+ import Ajv from "ajv";
24
+ import addFormats from "ajv-formats";
25
+ // RESTORE_SUMMARY_SCHEMA — verbatim mirror of
26
+ // `packages/cli/src/schemas/restore-summary.schema.json`. Keep these in
27
+ // lockstep; the drift-catcher test enforces equivalence.
28
+ export const RESTORE_SUMMARY_SCHEMA = {
29
+ $schema: "http://json-schema.org/draft-07/schema#",
30
+ $id: "https://openrig.dev/schemas/restore-summary.schema.json",
31
+ title: "Restore Packet Summary",
32
+ description: "Machine-readable metadata for a cross-runtime restore packet per the v0 paper standard.",
33
+ type: "object",
34
+ required: [
35
+ "source_session_id",
36
+ "source_rig",
37
+ "source_runtime",
38
+ "source_cwd",
39
+ "target_rig",
40
+ "target_runtime",
41
+ "target_workspace_root",
42
+ "default_target_repo",
43
+ "role_pointer",
44
+ "bounded_latest_transcript",
45
+ "touched_files",
46
+ "durable_pointers",
47
+ "current_work_summary",
48
+ "next_owner",
49
+ "caveats",
50
+ "authority_boundaries",
51
+ "omitted_classes",
52
+ "redaction_policy_id",
53
+ "source_trust_ranking",
54
+ "generator_version",
55
+ "generated_at",
56
+ ],
57
+ properties: {
58
+ source_session_id: { type: "string", minLength: 1 },
59
+ source_rig: { type: "string", minLength: 1 },
60
+ source_runtime: {
61
+ type: "string",
62
+ enum: ["claude-code", "codex", "terminal", "external"],
63
+ },
64
+ source_cwd: { type: "string", pattern: "^/" },
65
+ target_rig: { type: "string", minLength: 1 },
66
+ target_runtime: {
67
+ type: "string",
68
+ enum: ["claude-code", "codex", "terminal", "external"],
69
+ },
70
+ target_workspace_root: { type: "string", pattern: "^/" },
71
+ default_target_repo: { type: ["string", "null"] },
72
+ role_pointer: {
73
+ type: "string",
74
+ minLength: 1,
75
+ description: "Path or URI pointing to the role guidance file the restored seat should consume. REQUIRED per v0 standard field #9; resolves at restore time.",
76
+ },
77
+ bounded_latest_transcript: {
78
+ type: "object",
79
+ required: ["path", "message_count", "bound"],
80
+ properties: {
81
+ path: { type: "string" },
82
+ message_count: {
83
+ type: "integer",
84
+ minimum: 0,
85
+ description: "Actual count of extracted messages in transcript-latest.md.",
86
+ },
87
+ bound: {
88
+ type: "integer",
89
+ const: 120,
90
+ description: "v0 bound is fixed at 120 messages to match Velocity prior art (per contract § 7). v1+ may make configurable; v0 schema requires const 120 so packets with the wrong bound cannot pass.",
91
+ },
92
+ },
93
+ },
94
+ full_transcript: {
95
+ type: "object",
96
+ properties: {
97
+ path: { type: "string" },
98
+ line_count: { type: "integer", minimum: 0 },
99
+ },
100
+ description: "Optional per v0 standard field #11. Generator emits when full transcript material is available (e.g., from --source-jsonl or full-read --source-session); omitted otherwise.",
101
+ },
102
+ touched_files: {
103
+ type: "object",
104
+ required: ["path", "top_paths"],
105
+ properties: {
106
+ path: { type: "string" },
107
+ top_paths: {
108
+ type: "array",
109
+ items: {
110
+ type: "object",
111
+ required: ["path", "count"],
112
+ properties: {
113
+ path: { type: "string" },
114
+ count: { type: "integer", minimum: 0 },
115
+ },
116
+ },
117
+ },
118
+ },
119
+ },
120
+ durable_pointers: {
121
+ type: "object",
122
+ required: [
123
+ "queue_pointers",
124
+ "progress_pointers",
125
+ "field_note_pointers",
126
+ "artifact_pointers",
127
+ ],
128
+ properties: {
129
+ queue_pointers: {
130
+ type: "array",
131
+ items: { type: "string" },
132
+ description: "References to durable queue items (qitem ids or queue-file paths).",
133
+ },
134
+ progress_pointers: {
135
+ type: "array",
136
+ items: { type: "string" },
137
+ description: "References to PROGRESS.md cursors the source seat was operating against.",
138
+ },
139
+ field_note_pointers: {
140
+ type: "array",
141
+ items: { type: "string" },
142
+ description: "References to field-notes folders or files.",
143
+ },
144
+ artifact_pointers: {
145
+ type: "array",
146
+ items: { type: "string" },
147
+ description: "Other durable artifacts (proof packets, slice packets, candidate dossiers).",
148
+ },
149
+ },
150
+ description: "REQUIRED per v0 standard field #13. Pointers to durable work the source seat was operating against; restored seat reads to recover work-context.",
151
+ },
152
+ current_work_summary: { type: "string", minLength: 1 },
153
+ next_owner: { type: "string", minLength: 1 },
154
+ caveats: { type: "array", items: { type: "string" } },
155
+ authority_boundaries: { type: "string", minLength: 1 },
156
+ omitted_classes: {
157
+ type: "array",
158
+ items: {
159
+ type: "string",
160
+ enum: ["reasoning_records", "raw_tool_outputs", "function_call_output", "redacted_secrets"],
161
+ },
162
+ },
163
+ redaction_policy_id: { type: "string", enum: ["velocity-v1", "openrig-v0"] },
164
+ source_trust_ranking: {
165
+ type: "array",
166
+ items: {
167
+ type: "string",
168
+ enum: [
169
+ "rig_whoami",
170
+ "target_rigspec",
171
+ "bounded_latest_transcript",
172
+ "full_transcript",
173
+ "touched_files",
174
+ "restore_summary",
175
+ ],
176
+ },
177
+ minItems: 1,
178
+ },
179
+ generator_version: { type: "string", minLength: 1 },
180
+ generated_at: { type: "string", format: "date-time" },
181
+ },
182
+ additionalProperties: false,
183
+ };
184
+ let cachedValidator = null;
185
+ function getValidator() {
186
+ if (cachedValidator)
187
+ return cachedValidator;
188
+ const ajv = new Ajv({ allErrors: true, strict: false });
189
+ addFormats(ajv);
190
+ cachedValidator = ajv.compile(RESTORE_SUMMARY_SCHEMA);
191
+ return cachedValidator;
192
+ }
193
+ function truncateValue(value) {
194
+ if (value === undefined)
195
+ return "<undefined>";
196
+ if (value === null)
197
+ return "null";
198
+ let s;
199
+ try {
200
+ s = typeof value === "string" ? value : JSON.stringify(value);
201
+ }
202
+ catch {
203
+ s = String(value);
204
+ }
205
+ if (s.length > 80)
206
+ return s.slice(0, 77) + "...";
207
+ return s;
208
+ }
209
+ export function validateRestoreSummary(summary) {
210
+ const validator = getValidator();
211
+ const ok = validator(summary);
212
+ if (ok) {
213
+ return { valid: true, errors: [] };
214
+ }
215
+ const errors = (validator.errors ?? []).map((err) => {
216
+ const instancePath = err.instancePath || "";
217
+ const missing = err.params && err.params.missingProperty;
218
+ const additional = err.params && err.params.additionalProperty;
219
+ let field = instancePath.replace(/^\//, "").replace(/\//g, ".");
220
+ if (missing)
221
+ field = field ? `${field}.${missing}` : missing;
222
+ if (additional)
223
+ field = additional;
224
+ // Per M1 contract § 8 + IMPL § M3: optional-field malformations are
225
+ // severity "warning"; required-field violations are severity "error".
226
+ // The only top-level optional field in v0 is `full_transcript`.
227
+ // Errors whose path begins at `/full_transcript` come from validating
228
+ // the optional object's contents, not from a missing-required check
229
+ // on a required field.
230
+ const isOptionalFieldError = instancePath.startsWith("/full_transcript");
231
+ return {
232
+ field: field || "<root>",
233
+ value: truncateValue(err.data),
234
+ rule: `${err.keyword}: ${err.message ?? ""}`.trim(),
235
+ severity: isOptionalFieldError ? "warning" : "error",
236
+ };
237
+ });
238
+ // `valid` is false on ANY ajv violation (preserves M2c writer
239
+ // semantics: any malformation should block atomic rename). The M3
240
+ // validate command consults `errors[].severity` to decide exit code
241
+ // per M1 contract § 8 (required-field-class errors → exit nonzero;
242
+ // optional-field warnings → exit 0 with warning text).
243
+ return { valid: false, errors };
244
+ }
245
+ //# sourceMappingURL=schema-validator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-validator.js","sourceRoot":"","sources":["../../src/restore-packet/schema-validator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,76 @@
1
+ /** A single user-visible message extracted from a transcript. */
2
+ export interface ExtractedMessage {
3
+ /** ISO-8601 timestamp if the source provides one; else null. */
4
+ timestamp: string | null;
5
+ /** Speaker role. Restricted to user-visible roles (developer/user/assistant). */
6
+ role: "developer" | "user" | "assistant";
7
+ /** Redacted message text. */
8
+ text: string;
9
+ /** First non-empty line of the text, truncated to ~180 chars. Used in summaries. */
10
+ preview: string;
11
+ }
12
+ /** Canonical record-class enum per M1 contract § 5. */
13
+ export type OmittedRecordClass = "reasoning_records" | "raw_tool_outputs" | "function_call_output" | "redacted_secrets";
14
+ /**
15
+ * A path frequency entry from path extraction. Sorted by count
16
+ * descending then path ascending; used to populate `touched_files.top_paths`.
17
+ */
18
+ export interface PathCount {
19
+ path: string;
20
+ count: number;
21
+ }
22
+ /**
23
+ * Per-runtime per-record-type counter. Flexible string keys because
24
+ * Codex JSONL uses `record.type` strings and Claude transcript uses
25
+ * `record.type` strings; both are runtime-defined.
26
+ */
27
+ export type TypeCounts = Record<string, number>;
28
+ /**
29
+ * Per-omitted-class counter. Records how many records were filtered
30
+ * for each of the 4 contract enums during parsing/redaction.
31
+ */
32
+ export type OmittedCounts = Record<OmittedRecordClass, number>;
33
+ /**
34
+ * Optional session metadata extracted from the source. Codex emits a
35
+ * `session_meta` record at the top of a JSONL; Claude transcripts
36
+ * carry per-record `cwd` etc.
37
+ */
38
+ export interface SessionMeta {
39
+ cwd: string | null;
40
+ sessionId: string | null;
41
+ /** Free-form additional fields the runtime emitted; not load-bearing. */
42
+ raw?: Record<string, unknown>;
43
+ }
44
+ /**
45
+ * Structured representation produced by both parsers. The packet-writer
46
+ * (M2c) consumes this to assemble a v0 restore packet.
47
+ */
48
+ export interface StructuredTranscript {
49
+ /** Top-level session metadata (cwd, sessionId). */
50
+ sessionMeta: SessionMeta | null;
51
+ /** Total source lines processed (raw JSONL line count, including malformed/skipped). */
52
+ lineCount: number;
53
+ /** Number of user-visible messages extracted into `messages`. */
54
+ messageCount: number;
55
+ /**
56
+ * Number of "compaction" records seen. Codex emits these explicitly
57
+ * (`type: "compacted"`); Claude doesn't. The field is parser-specific
58
+ * but always present (zero when not applicable).
59
+ */
60
+ compactedCount: number;
61
+ /** Per-record-type frequency map; used in human reports / debug. */
62
+ typeCounts: TypeCounts;
63
+ /** Per-omitted-class counter; populated as the parser filters records. */
64
+ omittedCounts: OmittedCounts;
65
+ /** Extracted messages in chronological order; redaction has been applied. */
66
+ messages: ExtractedMessage[];
67
+ /**
68
+ * Path frequency inventory; sorted by count desc then path asc.
69
+ * Capped at 200 entries.
70
+ */
71
+ paths: PathCount[];
72
+ }
73
+ /** Source-runtime kind. v0 supports codex + claude-code transcript shapes. */
74
+ export type SourceRuntime = "codex" | "claude-code";
75
+ export declare function emptyOmittedCounts(): OmittedCounts;
76
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/restore-packet/types.ts"],"names":[],"mappings":"AAOA,iEAAiE;AACjE,MAAM,WAAW,gBAAgB;IAC/B,gEAAgE;IAChE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,iFAAiF;IACjF,IAAI,EAAE,WAAW,GAAG,MAAM,GAAG,WAAW,CAAC;IACzC,6BAA6B;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,oFAAoF;IACpF,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,uDAAuD;AACvD,MAAM,MAAM,kBAAkB,GAC1B,mBAAmB,GACnB,kBAAkB,GAClB,sBAAsB,GACtB,kBAAkB,CAAC;AAEvB;;;GAGG;AACH,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;GAIG;AACH,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAEhD;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC;AAE/D;;;;GAIG;AACH,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,yEAAyE;IACzE,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B;AAED;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC,mDAAmD;IACnD,WAAW,EAAE,WAAW,GAAG,IAAI,CAAC;IAChC,wFAAwF;IACxF,SAAS,EAAE,MAAM,CAAC;IAClB,iEAAiE;IACjE,YAAY,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,cAAc,EAAE,MAAM,CAAC;IACvB,oEAAoE;IACpE,UAAU,EAAE,UAAU,CAAC;IACvB,0EAA0E;IAC1E,aAAa,EAAE,aAAa,CAAC;IAC7B,6EAA6E;IAC7E,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7B;;;OAGG;IACH,KAAK,EAAE,SAAS,EAAE,CAAC;CACpB;AAED,8EAA8E;AAC9E,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,aAAa,CAAC;AAEpD,wBAAgB,kBAAkB,IAAI,aAAa,CAOlD"}
@@ -0,0 +1,15 @@
1
+ // types.ts — shared TypeScript types for the restore-packet generator.
2
+ //
3
+ // Both runtime adapters (codex-jsonl-parser, claude-transcript-parser)
4
+ // emit the same StructuredTranscript shape. Downstream modules
5
+ // (redaction, omitted-records, packet-writer) consume this shape
6
+ // without caring about the source runtime.
7
+ export function emptyOmittedCounts() {
8
+ return {
9
+ reasoning_records: 0,
10
+ raw_tool_outputs: 0,
11
+ function_call_output: 0,
12
+ redacted_secrets: 0,
13
+ };
14
+ }
15
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/restore-packet/types.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,EAAE;AACF,uEAAuE;AACvE,+DAA+D;AAC/D,iEAAiE;AACjE,2CAA2C;AAwF3C,MAAM,UAAU,kBAAkB;IAChC,OAAO;QACL,iBAAiB,EAAE,CAAC;QACpB,gBAAgB,EAAE,CAAC;QACnB,oBAAoB,EAAE,CAAC;QACvB,gBAAgB,EAAE,CAAC;KACpB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,98 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "https://openrig.dev/schemas/restore-summary.schema.json",
4
+ "title": "Restore Packet Summary",
5
+ "description": "Machine-readable metadata for a cross-runtime restore packet per the v0 paper standard.",
6
+ "type": "object",
7
+ "required": [
8
+ "source_session_id",
9
+ "source_rig",
10
+ "source_runtime",
11
+ "source_cwd",
12
+ "target_rig",
13
+ "target_runtime",
14
+ "target_workspace_root",
15
+ "default_target_repo",
16
+ "role_pointer",
17
+ "bounded_latest_transcript",
18
+ "touched_files",
19
+ "durable_pointers",
20
+ "current_work_summary",
21
+ "next_owner",
22
+ "caveats",
23
+ "authority_boundaries",
24
+ "omitted_classes",
25
+ "redaction_policy_id",
26
+ "source_trust_ranking",
27
+ "generator_version",
28
+ "generated_at"
29
+ ],
30
+ "properties": {
31
+ "source_session_id": {"type": "string", "minLength": 1},
32
+ "source_rig": {"type": "string", "minLength": 1},
33
+ "source_runtime": {"type": "string", "enum": ["claude-code", "codex", "terminal", "external"]},
34
+ "source_cwd": {"type": "string", "pattern": "^/"},
35
+ "target_rig": {"type": "string", "minLength": 1},
36
+ "target_runtime": {"type": "string", "enum": ["claude-code", "codex", "terminal", "external"]},
37
+ "target_workspace_root": {"type": "string", "pattern": "^/"},
38
+ "default_target_repo": {"type": ["string", "null"]},
39
+ "role_pointer": {
40
+ "type": "string",
41
+ "minLength": 1,
42
+ "description": "Path or URI pointing to the role guidance file the restored seat should consume. REQUIRED per v0 standard field #9; resolves at restore time."
43
+ },
44
+ "bounded_latest_transcript": {
45
+ "type": "object",
46
+ "required": ["path", "message_count", "bound"],
47
+ "properties": {
48
+ "path": {"type": "string"},
49
+ "message_count": {"type": "integer", "minimum": 0, "description": "Actual count of extracted messages in transcript-latest.md."},
50
+ "bound": {"type": "integer", "const": 120, "description": "v0 bound is fixed at 120 messages to match Velocity prior art (per contract § 7). v1+ may make configurable; v0 schema requires const 120 so packets with the wrong bound cannot pass."}
51
+ }
52
+ },
53
+ "full_transcript": {
54
+ "type": "object",
55
+ "properties": {
56
+ "path": {"type": "string"},
57
+ "line_count": {"type": "integer", "minimum": 0}
58
+ },
59
+ "description": "Optional per v0 standard field #11. Generator emits when full transcript material is available (e.g., from --source-jsonl or full-read --source-session); omitted otherwise."
60
+ },
61
+ "touched_files": {
62
+ "type": "object",
63
+ "required": ["path", "top_paths"],
64
+ "properties": {
65
+ "path": {"type": "string"},
66
+ "top_paths": {"type": "array", "items": {"type": "object", "required": ["path", "count"], "properties": {"path": {"type": "string"}, "count": {"type": "integer", "minimum": 0}}}}
67
+ }
68
+ },
69
+ "durable_pointers": {
70
+ "type": "object",
71
+ "required": ["queue_pointers", "progress_pointers", "field_note_pointers", "artifact_pointers"],
72
+ "properties": {
73
+ "queue_pointers": {"type": "array", "items": {"type": "string"}, "description": "References to durable queue items (qitem ids or queue-file paths)."},
74
+ "progress_pointers": {"type": "array", "items": {"type": "string"}, "description": "References to PROGRESS.md cursors the source seat was operating against."},
75
+ "field_note_pointers": {"type": "array", "items": {"type": "string"}, "description": "References to field-notes folders or files."},
76
+ "artifact_pointers": {"type": "array", "items": {"type": "string"}, "description": "Other durable artifacts (proof packets, slice packets, candidate dossiers)."}
77
+ },
78
+ "description": "REQUIRED per v0 standard field #13. Pointers to durable work the source seat was operating against; restored seat reads to recover work-context."
79
+ },
80
+ "current_work_summary": {"type": "string", "minLength": 1},
81
+ "next_owner": {"type": "string", "minLength": 1},
82
+ "caveats": {"type": "array", "items": {"type": "string"}},
83
+ "authority_boundaries": {"type": "string", "minLength": 1},
84
+ "omitted_classes": {
85
+ "type": "array",
86
+ "items": {"type": "string", "enum": ["reasoning_records", "raw_tool_outputs", "function_call_output", "redacted_secrets"]}
87
+ },
88
+ "redaction_policy_id": {"type": "string", "enum": ["velocity-v1", "openrig-v0"]},
89
+ "source_trust_ranking": {
90
+ "type": "array",
91
+ "items": {"type": "string", "enum": ["rig_whoami", "target_rigspec", "bounded_latest_transcript", "full_transcript", "touched_files", "restore_summary"]},
92
+ "minItems": 1
93
+ },
94
+ "generator_version": {"type": "string", "minLength": 1},
95
+ "generated_at": {"type": "string", "format": "date-time"}
96
+ },
97
+ "additionalProperties": false
98
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openrig/cli",
3
- "version": "0.1.12",
3
+ "version": "0.2.0",
4
4
  "type": "module",
5
5
  "description": "Local control plane for multi-agent coding topologies",
6
6
  "keywords": [
@@ -31,10 +31,12 @@
31
31
  "files": [
32
32
  "dist",
33
33
  "daemon",
34
- "ui"
34
+ "ui",
35
+ "scripts"
35
36
  ],
36
37
  "scripts": {
37
- "build": "tsc",
38
+ "build": "tsc && chmod +x dist/bin-wrapper.js && mkdir -p dist/schemas && cp src/schemas/*.json dist/schemas/",
39
+ "postinstall": "node scripts/check-abi.mjs",
38
40
  "prepublishOnly": "bash ../../scripts/build-package.sh",
39
41
  "test": "vitest run",
40
42
  "test:watch": "vitest"
@@ -42,6 +44,8 @@
42
44
  "dependencies": {
43
45
  "@hono/node-server": "^1.13.0",
44
46
  "@modelcontextprotocol/sdk": "^1.28.0",
47
+ "ajv": "^8.18.0",
48
+ "ajv-formats": "^3.0.1",
45
49
  "better-sqlite3": "^11.8.0",
46
50
  "commander": "^13.0.0",
47
51
  "hono": "^4.7.0",
@@ -55,5 +59,8 @@
55
59
  "@types/node": "^22.0.0",
56
60
  "typescript": "^5.7.0",
57
61
  "vitest": "^3.0.0"
62
+ },
63
+ "engines": {
64
+ "node": "^20 || ^22 || ^24"
58
65
  }
59
66
  }
@@ -0,0 +1,123 @@
1
+ #!/usr/bin/env node
2
+
3
+ // Postinstall ABI sanity check for @openrig/cli.
4
+ // Fails loudly if better-sqlite3 native binary does not match the active
5
+ // Node runtime. Layered on top of the engines.node constraint in
6
+ // package.json — engines warns at npm level; this hard-blocks at install
7
+ // time with a copy-paste fix.
8
+
9
+ /**
10
+ * @param {{ nodeVersion: string, loadNativeAddon: () => void }} deps
11
+ * @returns {{ ok: true } | { ok: false, message: string }}
12
+ */
13
+ export function checkAbi({ nodeVersion, loadNativeAddon }) {
14
+ // Phase 1: version-range check (fast path).
15
+ // Even-numbered Node majors (20, 22, 24) are LTS lines with native addon
16
+ // prebuilds. Odd-numbered majors (21, 23, 25) generally lack them.
17
+ const match = nodeVersion.match(/^v?(\d+)/);
18
+ const major = match ? parseInt(match[1], 10) : 0;
19
+
20
+ if (major < 20) {
21
+ return {
22
+ ok: false,
23
+ message: [
24
+ "",
25
+ " ╔══════════════════════════════════════════════════════════════╗",
26
+ ` ║ @openrig/cli requires Node.js 20, 22, or 24 (LTS). ║`,
27
+ ` ║ Current: ${nodeVersion.padEnd(49)}║`,
28
+ " ║ ║",
29
+ " ║ Fix: nvm install 22 && npm install -g @openrig/cli ║",
30
+ " ╚══════════════════════════════════════════════════════════════╝",
31
+ "",
32
+ ].join("\n"),
33
+ };
34
+ }
35
+
36
+ if (major % 2 !== 0) {
37
+ return {
38
+ ok: false,
39
+ message: [
40
+ "",
41
+ " ╔══════════════════════════════════════════════════════════════╗",
42
+ ` ║ @openrig/cli does not support odd-numbered Node releases. ║`,
43
+ ` ║ Current: ${nodeVersion.padEnd(49)}║`,
44
+ " ║ ║",
45
+ " ║ Odd Node versions (21, 23, 25, …) lack native addon ║",
46
+ " ║ prebuilds for better-sqlite3. The daemon will fail. ║",
47
+ " ║ ║",
48
+ " ║ Fix: nvm install 22 && npm install -g @openrig/cli ║",
49
+ " ╚══════════════════════════════════════════════════════════════╝",
50
+ "",
51
+ ].join("\n"),
52
+ };
53
+ }
54
+
55
+ // Phase 2: ABI load check (catches edge cases like local Node builds
56
+ // or prebuild packaging gaps on supported versions).
57
+ try {
58
+ loadNativeAddon();
59
+ } catch (err) {
60
+ const detail = err instanceof Error ? err.message : String(err);
61
+ const isAbiMismatch = detail.includes("NODE_MODULE_VERSION");
62
+
63
+ if (isAbiMismatch) {
64
+ return {
65
+ ok: false,
66
+ message: [
67
+ "",
68
+ " ╔══════════════════════════════════════════════════════════════╗",
69
+ " ║ better-sqlite3 native binary does not match this Node. ║",
70
+ ` ║ Current: ${nodeVersion.padEnd(49)}║`,
71
+ " ║ ║",
72
+ " ║ Fix: npm rebuild better-sqlite3 ║",
73
+ " ║ or: nvm install 22 && npm install -g @openrig/cli ║",
74
+ " ╚══════════════════════════════════════════════════════════════╝",
75
+ "",
76
+ ` Detail: ${detail}`,
77
+ "",
78
+ ].join("\n"),
79
+ };
80
+ }
81
+
82
+ return {
83
+ ok: false,
84
+ message: [
85
+ "",
86
+ " ╔══════════════════════════════════════════════════════════════╗",
87
+ " ║ better-sqlite3 native addon failed to load. ║",
88
+ ` ║ Current: ${nodeVersion.padEnd(49)}║`,
89
+ " ║ ║",
90
+ " ║ Fix: npm rebuild better-sqlite3 ║",
91
+ " ║ If that fails, reinstall with a supported Node version: ║",
92
+ " ║ nvm install 22 && npm install -g @openrig/cli ║",
93
+ " ╚══════════════════════════════════════════════════════════════╝",
94
+ "",
95
+ ` Detail: ${detail}`,
96
+ "",
97
+ ].join("\n"),
98
+ };
99
+ }
100
+
101
+ return { ok: true };
102
+ }
103
+
104
+ // --- Run when executed as postinstall script ---
105
+ const isMain =
106
+ process.argv[1] &&
107
+ (import.meta.url === `file://${process.argv[1]}` ||
108
+ process.argv[1].endsWith("check-abi.mjs"));
109
+
110
+ if (isMain) {
111
+ const { createRequire } = await import("node:module");
112
+ const require = createRequire(import.meta.url);
113
+
114
+ const result = checkAbi({
115
+ nodeVersion: process.version,
116
+ loadNativeAddon: () => require("better-sqlite3"),
117
+ });
118
+
119
+ if (!result.ok) {
120
+ console.error(result.message);
121
+ process.exitCode = 1;
122
+ }
123
+ }