@openrig/cli 0.1.11 → 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 (543) 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 +192 -60
  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 +15 -2
  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 +11 -6
  15. package/daemon/dist/adapters/codex-runtime-adapter.d.ts.map +1 -1
  16. package/daemon/dist/adapters/codex-runtime-adapter.js +322 -34
  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/codex-thread-id.d.ts.map +1 -1
  105. package/daemon/dist/domain/codex-thread-id.js +44 -15
  106. package/daemon/dist/domain/codex-thread-id.js.map +1 -1
  107. package/daemon/dist/domain/context-monitor.d.ts +12 -7
  108. package/daemon/dist/domain/context-monitor.d.ts.map +1 -1
  109. package/daemon/dist/domain/context-monitor.js +51 -3
  110. package/daemon/dist/domain/context-monitor.js.map +1 -1
  111. package/daemon/dist/domain/context-usage-store.d.ts +1 -1
  112. package/daemon/dist/domain/context-usage-store.js +1 -1
  113. package/daemon/dist/domain/context-usage-store.js.map +1 -1
  114. package/daemon/dist/domain/hot-potato-enforcer.d.ts +45 -0
  115. package/daemon/dist/domain/hot-potato-enforcer.d.ts.map +1 -0
  116. package/daemon/dist/domain/hot-potato-enforcer.js +94 -0
  117. package/daemon/dist/domain/hot-potato-enforcer.js.map +1 -0
  118. package/daemon/dist/domain/inbox-handler.d.ts +68 -0
  119. package/daemon/dist/domain/inbox-handler.d.ts.map +1 -0
  120. package/daemon/dist/domain/inbox-handler.js +177 -0
  121. package/daemon/dist/domain/inbox-handler.js.map +1 -0
  122. package/daemon/dist/domain/native-resume-probe.d.ts +1 -1
  123. package/daemon/dist/domain/native-resume-probe.d.ts.map +1 -1
  124. package/daemon/dist/domain/native-resume-probe.js +89 -4
  125. package/daemon/dist/domain/native-resume-probe.js.map +1 -1
  126. package/daemon/dist/domain/node-inventory.d.ts +29 -1
  127. package/daemon/dist/domain/node-inventory.d.ts.map +1 -1
  128. package/daemon/dist/domain/node-inventory.js +208 -31
  129. package/daemon/dist/domain/node-inventory.js.map +1 -1
  130. package/daemon/dist/domain/node-launcher.d.ts +2 -0
  131. package/daemon/dist/domain/node-launcher.d.ts.map +1 -1
  132. package/daemon/dist/domain/node-launcher.js +14 -2
  133. package/daemon/dist/domain/node-launcher.js.map +1 -1
  134. package/daemon/dist/domain/outbox-handler.d.ts +48 -0
  135. package/daemon/dist/domain/outbox-handler.d.ts.map +1 -0
  136. package/daemon/dist/domain/outbox-handler.js +106 -0
  137. package/daemon/dist/domain/outbox-handler.js.map +1 -0
  138. package/daemon/dist/domain/policies/artifact-pool-helpers.d.ts +64 -0
  139. package/daemon/dist/domain/policies/artifact-pool-helpers.d.ts.map +1 -0
  140. package/daemon/dist/domain/policies/artifact-pool-helpers.js +226 -0
  141. package/daemon/dist/domain/policies/artifact-pool-helpers.js.map +1 -0
  142. package/daemon/dist/domain/policies/artifact-pool-ready.d.ts +3 -0
  143. package/daemon/dist/domain/policies/artifact-pool-ready.d.ts.map +1 -0
  144. package/daemon/dist/domain/policies/artifact-pool-ready.js +41 -0
  145. package/daemon/dist/domain/policies/artifact-pool-ready.js.map +1 -0
  146. package/daemon/dist/domain/policies/edge-artifact-required.d.ts +3 -0
  147. package/daemon/dist/domain/policies/edge-artifact-required.d.ts.map +1 -0
  148. package/daemon/dist/domain/policies/edge-artifact-required.js +90 -0
  149. package/daemon/dist/domain/policies/edge-artifact-required.js.map +1 -0
  150. package/daemon/dist/domain/policies/periodic-reminder.d.ts +3 -0
  151. package/daemon/dist/domain/policies/periodic-reminder.d.ts.map +1 -0
  152. package/daemon/dist/domain/policies/periodic-reminder.js +30 -0
  153. package/daemon/dist/domain/policies/periodic-reminder.js.map +1 -0
  154. package/daemon/dist/domain/policies/types.d.ts +51 -0
  155. package/daemon/dist/domain/policies/types.d.ts.map +1 -0
  156. package/daemon/dist/domain/policies/types.js +9 -0
  157. package/daemon/dist/domain/policies/types.js.map +1 -0
  158. package/daemon/dist/domain/policies/workflow-keepalive.d.ts +7 -0
  159. package/daemon/dist/domain/policies/workflow-keepalive.d.ts.map +1 -0
  160. package/daemon/dist/domain/policies/workflow-keepalive.js +123 -0
  161. package/daemon/dist/domain/policies/workflow-keepalive.js.map +1 -0
  162. package/daemon/dist/domain/project-classifier.d.ts +75 -0
  163. package/daemon/dist/domain/project-classifier.d.ts.map +1 -0
  164. package/daemon/dist/domain/project-classifier.js +132 -0
  165. package/daemon/dist/domain/project-classifier.js.map +1 -0
  166. package/daemon/dist/domain/projection-planner.d.ts +1 -0
  167. package/daemon/dist/domain/projection-planner.d.ts.map +1 -1
  168. package/daemon/dist/domain/projection-planner.js +3 -0
  169. package/daemon/dist/domain/projection-planner.js.map +1 -1
  170. package/daemon/dist/domain/ps-projection.d.ts +31 -0
  171. package/daemon/dist/domain/ps-projection.d.ts.map +1 -1
  172. package/daemon/dist/domain/ps-projection.js +38 -0
  173. package/daemon/dist/domain/ps-projection.js.map +1 -1
  174. package/daemon/dist/domain/queue-repository.d.ts +322 -0
  175. package/daemon/dist/domain/queue-repository.d.ts.map +1 -0
  176. package/daemon/dist/domain/queue-repository.js +686 -0
  177. package/daemon/dist/domain/queue-repository.js.map +1 -0
  178. package/daemon/dist/domain/queue-transition-log.d.ts +38 -0
  179. package/daemon/dist/domain/queue-transition-log.d.ts.map +1 -0
  180. package/daemon/dist/domain/queue-transition-log.js +52 -0
  181. package/daemon/dist/domain/queue-transition-log.js.map +1 -0
  182. package/daemon/dist/domain/restore-check-service.d.ts +203 -0
  183. package/daemon/dist/domain/restore-check-service.d.ts.map +1 -0
  184. package/daemon/dist/domain/restore-check-service.js +1047 -0
  185. package/daemon/dist/domain/restore-check-service.js.map +1 -0
  186. package/daemon/dist/domain/restore-orchestrator.d.ts +50 -2
  187. package/daemon/dist/domain/restore-orchestrator.d.ts.map +1 -1
  188. package/daemon/dist/domain/restore-orchestrator.js +476 -24
  189. package/daemon/dist/domain/restore-orchestrator.js.map +1 -1
  190. package/daemon/dist/domain/resume-metadata-refresher.d.ts.map +1 -1
  191. package/daemon/dist/domain/resume-metadata-refresher.js +27 -7
  192. package/daemon/dist/domain/resume-metadata-refresher.js.map +1 -1
  193. package/daemon/dist/domain/rig-expansion-service.d.ts.map +1 -1
  194. package/daemon/dist/domain/rig-expansion-service.js +13 -0
  195. package/daemon/dist/domain/rig-expansion-service.js.map +1 -1
  196. package/daemon/dist/domain/rig-repository.d.ts +17 -1
  197. package/daemon/dist/domain/rig-repository.d.ts.map +1 -1
  198. package/daemon/dist/domain/rig-repository.js +63 -5
  199. package/daemon/dist/domain/rig-repository.js.map +1 -1
  200. package/daemon/dist/domain/rigspec-codec.d.ts.map +1 -1
  201. package/daemon/dist/domain/rigspec-codec.js +13 -0
  202. package/daemon/dist/domain/rigspec-codec.js.map +1 -1
  203. package/daemon/dist/domain/rigspec-exporter.d.ts.map +1 -1
  204. package/daemon/dist/domain/rigspec-exporter.js +2 -0
  205. package/daemon/dist/domain/rigspec-exporter.js.map +1 -1
  206. package/daemon/dist/domain/rigspec-instantiator.d.ts.map +1 -1
  207. package/daemon/dist/domain/rigspec-instantiator.js +63 -1
  208. package/daemon/dist/domain/rigspec-instantiator.js.map +1 -1
  209. package/daemon/dist/domain/rigspec-schema.d.ts.map +1 -1
  210. package/daemon/dist/domain/rigspec-schema.js +196 -0
  211. package/daemon/dist/domain/rigspec-schema.js.map +1 -1
  212. package/daemon/dist/domain/runtime-adapter.d.ts +30 -1
  213. package/daemon/dist/domain/runtime-adapter.d.ts.map +1 -1
  214. package/daemon/dist/domain/runtime-adapter.js +14 -0
  215. package/daemon/dist/domain/runtime-adapter.js.map +1 -1
  216. package/daemon/dist/domain/seat-handover-planner.d.ts +84 -0
  217. package/daemon/dist/domain/seat-handover-planner.d.ts.map +1 -0
  218. package/daemon/dist/domain/seat-handover-planner.js +188 -0
  219. package/daemon/dist/domain/seat-handover-planner.js.map +1 -0
  220. package/daemon/dist/domain/seat-handover-service.d.ts +104 -0
  221. package/daemon/dist/domain/seat-handover-service.d.ts.map +1 -0
  222. package/daemon/dist/domain/seat-handover-service.js +343 -0
  223. package/daemon/dist/domain/seat-handover-service.js.map +1 -0
  224. package/daemon/dist/domain/seat-status-service.d.ts +50 -0
  225. package/daemon/dist/domain/seat-status-service.d.ts.map +1 -0
  226. package/daemon/dist/domain/seat-status-service.js +66 -0
  227. package/daemon/dist/domain/seat-status-service.js.map +1 -0
  228. package/daemon/dist/domain/session-source-rebuild-resolver.d.ts +53 -0
  229. package/daemon/dist/domain/session-source-rebuild-resolver.d.ts.map +1 -0
  230. package/daemon/dist/domain/session-source-rebuild-resolver.js +59 -0
  231. package/daemon/dist/domain/session-source-rebuild-resolver.js.map +1 -0
  232. package/daemon/dist/domain/session-transport.d.ts +30 -0
  233. package/daemon/dist/domain/session-transport.d.ts.map +1 -1
  234. package/daemon/dist/domain/session-transport.js +322 -12
  235. package/daemon/dist/domain/session-transport.js.map +1 -1
  236. package/daemon/dist/domain/snapshot-repository.d.ts +18 -0
  237. package/daemon/dist/domain/snapshot-repository.d.ts.map +1 -1
  238. package/daemon/dist/domain/snapshot-repository.js +77 -0
  239. package/daemon/dist/domain/snapshot-repository.js.map +1 -1
  240. package/daemon/dist/domain/startup-orchestrator.d.ts +27 -3
  241. package/daemon/dist/domain/startup-orchestrator.d.ts.map +1 -1
  242. package/daemon/dist/domain/startup-orchestrator.js +125 -40
  243. package/daemon/dist/domain/startup-orchestrator.js.map +1 -1
  244. package/daemon/dist/domain/stream-store.d.ts +56 -0
  245. package/daemon/dist/domain/stream-store.d.ts.map +1 -0
  246. package/daemon/dist/domain/stream-store.js +108 -0
  247. package/daemon/dist/domain/stream-store.js.map +1 -0
  248. package/daemon/dist/domain/transcript-redaction.d.ts +13 -0
  249. package/daemon/dist/domain/transcript-redaction.d.ts.map +1 -0
  250. package/daemon/dist/domain/transcript-redaction.js +34 -0
  251. package/daemon/dist/domain/transcript-redaction.js.map +1 -0
  252. package/daemon/dist/domain/transcript-store.d.ts +15 -0
  253. package/daemon/dist/domain/transcript-store.d.ts.map +1 -1
  254. package/daemon/dist/domain/transcript-store.js +76 -1
  255. package/daemon/dist/domain/transcript-store.js.map +1 -1
  256. package/daemon/dist/domain/types.d.ts +323 -3
  257. package/daemon/dist/domain/types.d.ts.map +1 -1
  258. package/daemon/dist/domain/view-event-bridge.d.ts +12 -0
  259. package/daemon/dist/domain/view-event-bridge.d.ts.map +1 -0
  260. package/daemon/dist/domain/view-event-bridge.js +92 -0
  261. package/daemon/dist/domain/view-event-bridge.js.map +1 -0
  262. package/daemon/dist/domain/view-projector.d.ts +83 -0
  263. package/daemon/dist/domain/view-projector.d.ts.map +1 -0
  264. package/daemon/dist/domain/view-projector.js +296 -0
  265. package/daemon/dist/domain/view-projector.js.map +1 -0
  266. package/daemon/dist/domain/watchdog-history-log.d.ts +49 -0
  267. package/daemon/dist/domain/watchdog-history-log.d.ts.map +1 -0
  268. package/daemon/dist/domain/watchdog-history-log.js +67 -0
  269. package/daemon/dist/domain/watchdog-history-log.js.map +1 -0
  270. package/daemon/dist/domain/watchdog-jobs-repository.d.ts +81 -0
  271. package/daemon/dist/domain/watchdog-jobs-repository.d.ts.map +1 -0
  272. package/daemon/dist/domain/watchdog-jobs-repository.js +164 -0
  273. package/daemon/dist/domain/watchdog-jobs-repository.js.map +1 -0
  274. package/daemon/dist/domain/watchdog-policy-engine.d.ts +92 -0
  275. package/daemon/dist/domain/watchdog-policy-engine.d.ts.map +1 -0
  276. package/daemon/dist/domain/watchdog-policy-engine.js +442 -0
  277. package/daemon/dist/domain/watchdog-policy-engine.js.map +1 -0
  278. package/daemon/dist/domain/watchdog-scheduler.d.ts +76 -0
  279. package/daemon/dist/domain/watchdog-scheduler.d.ts.map +1 -0
  280. package/daemon/dist/domain/watchdog-scheduler.js +112 -0
  281. package/daemon/dist/domain/watchdog-scheduler.js.map +1 -0
  282. package/daemon/dist/domain/workflow-instance-store.d.ts +46 -0
  283. package/daemon/dist/domain/workflow-instance-store.d.ts.map +1 -0
  284. package/daemon/dist/domain/workflow-instance-store.js +116 -0
  285. package/daemon/dist/domain/workflow-instance-store.js.map +1 -0
  286. package/daemon/dist/domain/workflow-projector.d.ts +64 -0
  287. package/daemon/dist/domain/workflow-projector.d.ts.map +1 -0
  288. package/daemon/dist/domain/workflow-projector.js +424 -0
  289. package/daemon/dist/domain/workflow-projector.js.map +1 -0
  290. package/daemon/dist/domain/workflow-runtime.d.ts +63 -0
  291. package/daemon/dist/domain/workflow-runtime.d.ts.map +1 -0
  292. package/daemon/dist/domain/workflow-runtime.js +150 -0
  293. package/daemon/dist/domain/workflow-runtime.js.map +1 -0
  294. package/daemon/dist/domain/workflow-spec-cache.d.ts +35 -0
  295. package/daemon/dist/domain/workflow-spec-cache.d.ts.map +1 -0
  296. package/daemon/dist/domain/workflow-spec-cache.js +171 -0
  297. package/daemon/dist/domain/workflow-spec-cache.js.map +1 -0
  298. package/daemon/dist/domain/workflow-step-trail-log.d.ts +27 -0
  299. package/daemon/dist/domain/workflow-step-trail-log.d.ts.map +1 -0
  300. package/daemon/dist/domain/workflow-step-trail-log.js +73 -0
  301. package/daemon/dist/domain/workflow-step-trail-log.js.map +1 -0
  302. package/daemon/dist/domain/workflow-types.d.ts +108 -0
  303. package/daemon/dist/domain/workflow-types.d.ts.map +1 -0
  304. package/daemon/dist/domain/workflow-types.js +11 -0
  305. package/daemon/dist/domain/workflow-types.js.map +1 -0
  306. package/daemon/dist/domain/workflow-validator.d.ts +31 -0
  307. package/daemon/dist/domain/workflow-validator.d.ts.map +1 -0
  308. package/daemon/dist/domain/workflow-validator.js +115 -0
  309. package/daemon/dist/domain/workflow-validator.js.map +1 -0
  310. package/daemon/dist/index.d.ts.map +1 -1
  311. package/daemon/dist/index.js +21 -2
  312. package/daemon/dist/index.js.map +1 -1
  313. package/daemon/dist/routes/activity.d.ts +3 -0
  314. package/daemon/dist/routes/activity.d.ts.map +1 -0
  315. package/daemon/dist/routes/activity.js +47 -0
  316. package/daemon/dist/routes/activity.js.map +1 -0
  317. package/daemon/dist/routes/projects.d.ts +12 -0
  318. package/daemon/dist/routes/projects.d.ts.map +1 -0
  319. package/daemon/dist/routes/projects.js +178 -0
  320. package/daemon/dist/routes/projects.js.map +1 -0
  321. package/daemon/dist/routes/queue.d.ts +10 -0
  322. package/daemon/dist/routes/queue.d.ts.map +1 -0
  323. package/daemon/dist/routes/queue.js +374 -0
  324. package/daemon/dist/routes/queue.js.map +1 -0
  325. package/daemon/dist/routes/restore-check.d.ts +3 -0
  326. package/daemon/dist/routes/restore-check.d.ts.map +1 -0
  327. package/daemon/dist/routes/restore-check.js +200 -0
  328. package/daemon/dist/routes/restore-check.js.map +1 -0
  329. package/daemon/dist/routes/rigs.d.ts.map +1 -1
  330. package/daemon/dist/routes/rigs.js +60 -4
  331. package/daemon/dist/routes/rigs.js.map +1 -1
  332. package/daemon/dist/routes/seat.d.ts +3 -0
  333. package/daemon/dist/routes/seat.d.ts.map +1 -0
  334. package/daemon/dist/routes/seat.js +69 -0
  335. package/daemon/dist/routes/seat.js.map +1 -0
  336. package/daemon/dist/routes/sessions.d.ts.map +1 -1
  337. package/daemon/dist/routes/sessions.js +41 -5
  338. package/daemon/dist/routes/sessions.js.map +1 -1
  339. package/daemon/dist/routes/snapshots.js +66 -17
  340. package/daemon/dist/routes/snapshots.js.map +1 -1
  341. package/daemon/dist/routes/stream.d.ts +9 -0
  342. package/daemon/dist/routes/stream.d.ts.map +1 -0
  343. package/daemon/dist/routes/stream.js +119 -0
  344. package/daemon/dist/routes/stream.js.map +1 -0
  345. package/daemon/dist/routes/transcripts.d.ts.map +1 -1
  346. package/daemon/dist/routes/transcripts.js +38 -0
  347. package/daemon/dist/routes/transcripts.js.map +1 -1
  348. package/daemon/dist/routes/transport.d.ts.map +1 -1
  349. package/daemon/dist/routes/transport.js +21 -0
  350. package/daemon/dist/routes/transport.js.map +1 -1
  351. package/daemon/dist/routes/up.js +24 -3
  352. package/daemon/dist/routes/up.js.map +1 -1
  353. package/daemon/dist/routes/views.d.ts +13 -0
  354. package/daemon/dist/routes/views.d.ts.map +1 -0
  355. package/daemon/dist/routes/views.js +120 -0
  356. package/daemon/dist/routes/views.js.map +1 -0
  357. package/daemon/dist/routes/watchdog.d.ts +18 -0
  358. package/daemon/dist/routes/watchdog.d.ts.map +1 -0
  359. package/daemon/dist/routes/watchdog.js +148 -0
  360. package/daemon/dist/routes/watchdog.js.map +1 -0
  361. package/daemon/dist/routes/workflow.d.ts +20 -0
  362. package/daemon/dist/routes/workflow.d.ts.map +1 -0
  363. package/daemon/dist/routes/workflow.js +184 -0
  364. package/daemon/dist/routes/workflow.js.map +1 -0
  365. package/daemon/dist/server.d.ts +30 -0
  366. package/daemon/dist/server.d.ts.map +1 -1
  367. package/daemon/dist/server.js +33 -0
  368. package/daemon/dist/server.js.map +1 -1
  369. package/daemon/dist/startup.d.ts.map +1 -1
  370. package/daemon/dist/startup.js +202 -8
  371. package/daemon/dist/startup.js.map +1 -1
  372. package/daemon/docs/reference/agent-spec.md +12 -5
  373. package/daemon/docs/reference/agent-startup-guide.md +9 -9
  374. package/daemon/specs/agents/apps/vault-specialist/agent.yaml +1 -1
  375. package/daemon/specs/agents/design/product-designer/agent.yaml +1 -1
  376. package/daemon/specs/agents/development/implementer/agent.yaml +1 -1
  377. package/daemon/specs/agents/development/qa/agent.yaml +1 -1
  378. package/daemon/specs/agents/orchestration/orchestrator/agent.yaml +1 -1
  379. package/daemon/specs/agents/product-management/pm/agent.yaml +4 -0
  380. package/daemon/specs/agents/research/analyst/agent.yaml +1 -1
  381. package/daemon/specs/agents/research/synthesizer/agent.yaml +1 -1
  382. package/daemon/specs/agents/review/independent-reviewer/agent.yaml +1 -1
  383. package/daemon/specs/agents/shared/agent.yaml +17 -0
  384. package/daemon/specs/agents/shared/runtime/claude-mcp.fragment.json +12 -0
  385. package/daemon/specs/agents/shared/runtime/claude-settings.fragment.json +16 -0
  386. package/daemon/specs/agents/shared/runtime/codex-config.fragment.toml +5 -0
  387. package/daemon/specs/agents/shared/skills/claude-compact-in-place/SKILL.md +100 -0
  388. package/daemon/specs/agents/shared/skills/core/openrig-operator/SKILL.md +110 -0
  389. package/daemon/specs/agents/shared/skills/core/openrig-user/SKILL.md +44 -1
  390. package/daemon/specs/agents/shared/skills/mental-model-ha/SKILL.md +3 -0
  391. package/daemon/specs/agents/shared/skills/pods/orchestration-team/SKILL.md +3 -0
  392. package/dist/commands/capture.d.ts +7 -1
  393. package/dist/commands/capture.d.ts.map +1 -1
  394. package/dist/commands/capture.js +59 -1
  395. package/dist/commands/capture.js.map +1 -1
  396. package/dist/commands/compact-plan.d.ts +9 -0
  397. package/dist/commands/compact-plan.d.ts.map +1 -0
  398. package/dist/commands/compact-plan.js +354 -0
  399. package/dist/commands/compact-plan.js.map +1 -0
  400. package/dist/commands/context.d.ts +9 -0
  401. package/dist/commands/context.d.ts.map +1 -0
  402. package/dist/commands/context.js +220 -0
  403. package/dist/commands/context.js.map +1 -0
  404. package/dist/commands/doctor.d.ts.map +1 -1
  405. package/dist/commands/doctor.js +19 -8
  406. package/dist/commands/doctor.js.map +1 -1
  407. package/dist/commands/expand.d.ts.map +1 -1
  408. package/dist/commands/expand.js +15 -4
  409. package/dist/commands/expand.js.map +1 -1
  410. package/dist/commands/heartbeat.d.ts +99 -0
  411. package/dist/commands/heartbeat.d.ts.map +1 -0
  412. package/dist/commands/heartbeat.js +393 -0
  413. package/dist/commands/heartbeat.js.map +1 -0
  414. package/dist/commands/import.d.ts.map +1 -1
  415. package/dist/commands/import.js +2 -1
  416. package/dist/commands/import.js.map +1 -1
  417. package/dist/commands/preflight.js +1 -1
  418. package/dist/commands/preflight.js.map +1 -1
  419. package/dist/commands/project.d.ts +14 -0
  420. package/dist/commands/project.d.ts.map +1 -0
  421. package/dist/commands/project.js +157 -0
  422. package/dist/commands/project.js.map +1 -0
  423. package/dist/commands/ps.d.ts +20 -3
  424. package/dist/commands/ps.d.ts.map +1 -1
  425. package/dist/commands/ps.js +455 -33
  426. package/dist/commands/ps.js.map +1 -1
  427. package/dist/commands/queue.d.ts +16 -0
  428. package/dist/commands/queue.d.ts.map +1 -0
  429. package/dist/commands/queue.js +401 -0
  430. package/dist/commands/queue.js.map +1 -0
  431. package/dist/commands/restore-check.d.ts +9 -0
  432. package/dist/commands/restore-check.d.ts.map +1 -0
  433. package/dist/commands/restore-check.js +234 -0
  434. package/dist/commands/restore-check.js.map +1 -0
  435. package/dist/commands/restore-packet.d.ts +9 -0
  436. package/dist/commands/restore-packet.d.ts.map +1 -0
  437. package/dist/commands/restore-packet.js +383 -0
  438. package/dist/commands/restore-packet.js.map +1 -0
  439. package/dist/commands/restore.d.ts.map +1 -1
  440. package/dist/commands/restore.js +69 -1
  441. package/dist/commands/restore.js.map +1 -1
  442. package/dist/commands/seat.d.ts +5 -0
  443. package/dist/commands/seat.d.ts.map +1 -0
  444. package/dist/commands/seat.js +170 -0
  445. package/dist/commands/seat.js.map +1 -0
  446. package/dist/commands/send.d.ts +12 -1
  447. package/dist/commands/send.d.ts.map +1 -1
  448. package/dist/commands/send.js +93 -5
  449. package/dist/commands/send.js.map +1 -1
  450. package/dist/commands/setup.d.ts.map +1 -1
  451. package/dist/commands/setup.js +20 -8
  452. package/dist/commands/setup.js.map +1 -1
  453. package/dist/commands/specs.d.ts.map +1 -1
  454. package/dist/commands/specs.js +99 -16
  455. package/dist/commands/specs.js.map +1 -1
  456. package/dist/commands/stream.d.ts +12 -0
  457. package/dist/commands/stream.d.ts.map +1 -0
  458. package/dist/commands/stream.js +111 -0
  459. package/dist/commands/stream.js.map +1 -0
  460. package/dist/commands/up.d.ts +1 -0
  461. package/dist/commands/up.d.ts.map +1 -1
  462. package/dist/commands/up.js +65 -4
  463. package/dist/commands/up.js.map +1 -1
  464. package/dist/commands/view.d.ts +12 -0
  465. package/dist/commands/view.d.ts.map +1 -0
  466. package/dist/commands/view.js +82 -0
  467. package/dist/commands/view.js.map +1 -0
  468. package/dist/commands/watchdog.d.ts +15 -0
  469. package/dist/commands/watchdog.d.ts.map +1 -0
  470. package/dist/commands/watchdog.js +120 -0
  471. package/dist/commands/watchdog.js.map +1 -0
  472. package/dist/commands/whoami.d.ts +8 -1
  473. package/dist/commands/whoami.d.ts.map +1 -1
  474. package/dist/commands/whoami.js +60 -1
  475. package/dist/commands/whoami.js.map +1 -1
  476. package/dist/commands/workflow.d.ts +17 -0
  477. package/dist/commands/workflow.d.ts.map +1 -0
  478. package/dist/commands/workflow.js +138 -0
  479. package/dist/commands/workflow.js.map +1 -0
  480. package/dist/cross-host-cli-helpers.d.ts +12 -0
  481. package/dist/cross-host-cli-helpers.d.ts.map +1 -0
  482. package/dist/cross-host-cli-helpers.js +48 -0
  483. package/dist/cross-host-cli-helpers.js.map +1 -0
  484. package/dist/cross-host-executor.d.ts +84 -0
  485. package/dist/cross-host-executor.d.ts.map +1 -0
  486. package/dist/cross-host-executor.js +138 -0
  487. package/dist/cross-host-executor.js.map +1 -0
  488. package/dist/host-registry.d.ts +50 -0
  489. package/dist/host-registry.d.ts.map +1 -0
  490. package/dist/host-registry.js +116 -0
  491. package/dist/host-registry.js.map +1 -0
  492. package/dist/index.d.ts +20 -0
  493. package/dist/index.d.ts.map +1 -1
  494. package/dist/index.js +24 -0
  495. package/dist/index.js.map +1 -1
  496. package/dist/mcp-server.d.ts.map +1 -1
  497. package/dist/mcp-server.js +22 -2
  498. package/dist/mcp-server.js.map +1 -1
  499. package/dist/restore-packet/claude-transcript-parser.d.ts +12 -0
  500. package/dist/restore-packet/claude-transcript-parser.d.ts.map +1 -0
  501. package/dist/restore-packet/claude-transcript-parser.js +221 -0
  502. package/dist/restore-packet/claude-transcript-parser.js.map +1 -0
  503. package/dist/restore-packet/codex-jsonl-parser.d.ts +11 -0
  504. package/dist/restore-packet/codex-jsonl-parser.d.ts.map +1 -0
  505. package/dist/restore-packet/codex-jsonl-parser.js +159 -0
  506. package/dist/restore-packet/codex-jsonl-parser.js.map +1 -0
  507. package/dist/restore-packet/omitted-records.d.ts +60 -0
  508. package/dist/restore-packet/omitted-records.d.ts.map +1 -0
  509. package/dist/restore-packet/omitted-records.js +116 -0
  510. package/dist/restore-packet/omitted-records.js.map +1 -0
  511. package/dist/restore-packet/packet-writer.d.ts +59 -0
  512. package/dist/restore-packet/packet-writer.d.ts.map +1 -0
  513. package/dist/restore-packet/packet-writer.js +224 -0
  514. package/dist/restore-packet/packet-writer.js.map +1 -0
  515. package/dist/restore-packet/redaction.d.ts +30 -0
  516. package/dist/restore-packet/redaction.d.ts.map +1 -0
  517. package/dist/restore-packet/redaction.js +71 -0
  518. package/dist/restore-packet/redaction.js.map +1 -0
  519. package/dist/restore-packet/runtime-detect.d.ts +19 -0
  520. package/dist/restore-packet/runtime-detect.d.ts.map +1 -0
  521. package/dist/restore-packet/runtime-detect.js +81 -0
  522. package/dist/restore-packet/runtime-detect.js.map +1 -0
  523. package/dist/restore-packet/schema-validator.d.ts +13 -0
  524. package/dist/restore-packet/schema-validator.d.ts.map +1 -0
  525. package/dist/restore-packet/schema-validator.js +245 -0
  526. package/dist/restore-packet/schema-validator.js.map +1 -0
  527. package/dist/restore-packet/types.d.ts +76 -0
  528. package/dist/restore-packet/types.d.ts.map +1 -0
  529. package/dist/restore-packet/types.js +15 -0
  530. package/dist/restore-packet/types.js.map +1 -0
  531. package/dist/schemas/restore-summary.schema.json +98 -0
  532. package/dist/system-preflight.d.ts.map +1 -1
  533. package/dist/system-preflight.js +16 -5
  534. package/dist/system-preflight.js.map +1 -1
  535. package/dist/tmux-health.d.ts +16 -0
  536. package/dist/tmux-health.d.ts.map +1 -0
  537. package/dist/tmux-health.js +105 -0
  538. package/dist/tmux-health.js.map +1 -0
  539. package/package.json +10 -3
  540. package/scripts/check-abi.mjs +123 -0
  541. package/ui/dist/assets/{index-DlMH-REm.css → index-Dec25siz.css} +1 -1
  542. package/ui/dist/assets/{index-lEO-zBxz.js → index-GNYaWmBj.js} +9 -9
  543. package/ui/dist/index.html +2 -2
@@ -0,0 +1,116 @@
1
+ // omitted-records.ts — classifies a parsed source record into one of the
2
+ // 4 omitted-class enums (per M1 contract § 5) or accepts it as a kept
3
+ // user-visible message.
4
+ //
5
+ // v0 generator excludes the following record classes from
6
+ // transcript-latest.md and transcript.md:
7
+ //
8
+ // - reasoning_records: internal reasoning records that the runtime emitted
9
+ // but were not user-visible messages.
10
+ // - raw_tool_outputs: full raw tool execution output (often verbose; may
11
+ // contain transient state).
12
+ // - function_call_output: function-call result records that are not
13
+ // user-visible.
14
+ // - redacted_secrets: applied to any matched credential patterns per the
15
+ // redaction policy. (This class counts records whose content matched
16
+ // a secret pattern AND was therefore redacted.)
17
+ //
18
+ // `omitted_classes` in the summary enumerates the classes ACTUALLY
19
+ // excluded for THIS packet (not all available classes); the validator
20
+ // checks each name is one of the 4 enum values.
21
+ import { emptyOmittedCounts } from "./types.js";
22
+ import { hasSecretPattern } from "./redaction.js";
23
+ /**
24
+ * Classify a Codex JSONL record (the parsed JSON object) into kept /
25
+ * omitted. Caller is responsible for passing only `response_item`-class
26
+ * records; session_meta and compacted are handled separately by the
27
+ * Codex parser.
28
+ *
29
+ * Codex semantics (per Velocity prior art):
30
+ * - response_item with payload.type === "function_call" → function_call_output
31
+ * - response_item with payload.type === "custom_tool_call" → raw_tool_outputs
32
+ * - response_item with payload.type === "reasoning" → reasoning_records
33
+ * - response_item with payload.type === "message" + role in {developer,user,assistant}
34
+ * → kept (after secret-pattern check)
35
+ * - everything else → reasoning_records (catch-all for non-message non-tool
36
+ * payload types)
37
+ */
38
+ export function classifyCodexRecord(record) {
39
+ const payloadType = typeof record.payload?.type === "string" ? record.payload.type : "";
40
+ switch (payloadType) {
41
+ case "function_call":
42
+ return { kind: "omitted", reason: "function_call_output" };
43
+ case "custom_tool_call":
44
+ return { kind: "omitted", reason: "raw_tool_outputs" };
45
+ case "reasoning":
46
+ return { kind: "omitted", reason: "reasoning_records" };
47
+ case "message": {
48
+ const role = typeof record.payload?.role === "string" ? record.payload.role : "";
49
+ if (role !== "developer" && role !== "user" && role !== "assistant") {
50
+ return { kind: "omitted", reason: "reasoning_records" };
51
+ }
52
+ return { kind: "kept" };
53
+ }
54
+ default:
55
+ return { kind: "omitted", reason: "reasoning_records" };
56
+ }
57
+ }
58
+ /**
59
+ * Classify a Claude transcript record. Claude shape carries the role
60
+ * directly at `record.type` (user / assistant / system / attachment /
61
+ * summary etc). Per the M2b dispatch's "emit the same structured
62
+ * representation as the Codex parser" requirement, the omitted-class
63
+ * mapping mirrors Codex.
64
+ */
65
+ export function classifyClaudeRecord(record) {
66
+ const type = typeof record.type === "string" ? record.type : "";
67
+ switch (type) {
68
+ case "user":
69
+ case "assistant":
70
+ return { kind: "kept" };
71
+ case "attachment":
72
+ // Attachments are tool-result-class records (file content the user
73
+ // attached or tool output). Map to raw_tool_outputs.
74
+ return { kind: "omitted", reason: "raw_tool_outputs" };
75
+ case "summary":
76
+ // System/summary records are non-user-visible meta; map to
77
+ // reasoning_records.
78
+ return { kind: "omitted", reason: "reasoning_records" };
79
+ default:
80
+ // Everything else (sessionId-only, agentInfo, permissionMode meta,
81
+ // etc.) is metadata, not a user-visible message.
82
+ return { kind: "omitted", reason: "reasoning_records" };
83
+ }
84
+ }
85
+ /** State holder for accumulating omitted-class counts during parsing. */
86
+ export class OmittedCounter {
87
+ counts = emptyOmittedCounts();
88
+ recordOmission(reason) {
89
+ this.counts[reason] += 1;
90
+ }
91
+ /**
92
+ * Mark that a kept message had secret content (was redacted). Increments
93
+ * `redacted_secrets` per occurrence. Caller checks `hasSecretPattern`
94
+ * BEFORE redaction to decide whether to record this.
95
+ */
96
+ recordRedaction() {
97
+ this.counts.redacted_secrets += 1;
98
+ }
99
+ /**
100
+ * Returns the list of omitted classes that have at least one record.
101
+ * Used to populate `summary.omitted_classes` per contract § 5.
102
+ * Order: stable (the enum order from the type definition).
103
+ */
104
+ activeClasses() {
105
+ const order = [
106
+ "reasoning_records",
107
+ "raw_tool_outputs",
108
+ "function_call_output",
109
+ "redacted_secrets",
110
+ ];
111
+ return order.filter((cls) => this.counts[cls] > 0);
112
+ }
113
+ }
114
+ /** Re-export for convenience. */
115
+ export { hasSecretPattern };
116
+ //# sourceMappingURL=omitted-records.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"omitted-records.js","sourceRoot":"","sources":["../../src/restore-packet/omitted-records.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ import type { StructuredTranscript, SourceRuntime } from "./types.js";
2
+ export interface WritePacketOptions {
3
+ /** Absolute path of the target packet directory. MUST NOT exist. */
4
+ targetDir: string;
5
+ /** Parsed source structured representation. */
6
+ structured: StructuredTranscript;
7
+ /** Runtime kind of the source seat. */
8
+ sourceRuntime: SourceRuntime;
9
+ /** Target rig name (operator-supplied). */
10
+ targetRig: string;
11
+ /** Target runtime kind (operator-supplied). */
12
+ targetRuntime: SourceRuntime;
13
+ /** Target workspace root (absolute path). */
14
+ targetWorkspaceRoot: string;
15
+ /** Default target repo (absolute path or null). */
16
+ defaultTargetRepo: string | null;
17
+ /** Path/URI to role guidance for the restored seat. */
18
+ rolePointer: string;
19
+ /** One-paragraph human-readable summary of current work. */
20
+ currentWorkSummary: string;
21
+ /** Who the restored seat hands off to next; "self" if continuing. */
22
+ nextOwner: string;
23
+ /** Caveats list (cross-runtime quirks, redaction notes, etc.). */
24
+ caveats: string[];
25
+ /** Explicit statement of restored-seat authority. */
26
+ authorityBoundaries: string;
27
+ /** Ordered source-trust ranking (subset of contract enum). */
28
+ sourceTrustRanking: string[];
29
+ /** Source session id. */
30
+ sourceSessionId: string;
31
+ /**
32
+ * Source rig name. Per M2c-CLI R2: passed explicitly by the CLI adapter
33
+ * (computed from parsed session_meta `<seat>@<rig>` split or operator
34
+ * --source-rig-override). The writer does NOT derive this from
35
+ * sourceSessionId — that hidden derivation was the M2c-CLI R1 bug.
36
+ */
37
+ sourceRig: string;
38
+ /** Source cwd (absolute path). */
39
+ sourceCwd: string;
40
+ /** Generator version identifier (e.g., "rig-restore-packet@0.1.0"). */
41
+ generatorVersion: string;
42
+ /** Whether to include the full transcript.md file. */
43
+ includeFullTranscript: boolean;
44
+ }
45
+ export interface WritePacketResult {
46
+ targetDir: string;
47
+ files: string[];
48
+ summaryPath: string;
49
+ }
50
+ /**
51
+ * Write a v0 restore packet directory atomically.
52
+ *
53
+ * Atomic guarantee: if any step fails (including schema validation of
54
+ * restore-summary.json), the targetDir is never created and any
55
+ * intermediate tempdir is removed. Operators see either a complete
56
+ * valid packet at targetDir, or no packet at all.
57
+ */
58
+ export declare function writePacket(opts: WritePacketOptions): Promise<WritePacketResult>;
59
+ //# sourceMappingURL=packet-writer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"packet-writer.d.ts","sourceRoot":"","sources":["../../src/restore-packet/packet-writer.ts"],"names":[],"mappings":"AA0BA,OAAO,KAAK,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAItE,MAAM,WAAW,kBAAkB;IACjC,oEAAoE;IACpE,SAAS,EAAE,MAAM,CAAC;IAClB,+CAA+C;IAC/C,UAAU,EAAE,oBAAoB,CAAC;IACjC,uCAAuC;IACvC,aAAa,EAAE,aAAa,CAAC;IAC7B,2CAA2C;IAC3C,SAAS,EAAE,MAAM,CAAC;IAClB,+CAA+C;IAC/C,aAAa,EAAE,aAAa,CAAC;IAC7B,6CAA6C;IAC7C,mBAAmB,EAAE,MAAM,CAAC;IAC5B,mDAAmD;IACnD,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,uDAAuD;IACvD,WAAW,EAAE,MAAM,CAAC;IACpB,4DAA4D;IAC5D,kBAAkB,EAAE,MAAM,CAAC;IAC3B,qEAAqE;IACrE,SAAS,EAAE,MAAM,CAAC;IAClB,kEAAkE;IAClE,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,qDAAqD;IACrD,mBAAmB,EAAE,MAAM,CAAC;IAC5B,8DAA8D;IAC9D,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,yBAAyB;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB;;;;;OAKG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB,kCAAkC;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,uEAAuE;IACvE,gBAAgB,EAAE,MAAM,CAAC;IACzB,sDAAsD;IACtD,qBAAqB,EAAE,OAAO,CAAC;CAChC;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACrB;AAiJD;;;;;;;GAOG;AACH,wBAAsB,WAAW,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAoFtF"}
@@ -0,0 +1,224 @@
1
+ // packet-writer.ts — assembles + atomically writes a v0 restore packet
2
+ // directory.
3
+ //
4
+ // Per M1 contract § 1: emits 4 required files (restore-instructions.md,
5
+ // transcript-latest.md, touched-files.md, restore-summary.json) plus
6
+ // optional transcript.md (when full transcript material is available;
7
+ // presence in lockstep with `full_transcript` summary key).
8
+ //
9
+ // Atomic emission via tempdir-then-rename:
10
+ // 1. Write all files into a sibling tempdir (`<targetDir>.tmp-<rand>/`).
11
+ // 2. Validate the tempdir's restore-summary.json against the embedded
12
+ // JSON Schema (RESTORE_SUMMARY_SCHEMA from schema-validator.ts).
13
+ // 3. If valid: rename tempdir → targetDir (single fs.rename; atomic on
14
+ // same filesystem).
15
+ // 4. If validation fails OR any write step fails: rmSync the tempdir;
16
+ // propagate the error. The targetDir is NEVER created in this case.
17
+ //
18
+ // Pre-condition: targetDir MUST NOT exist (operator must supply a fresh
19
+ // path). Reject with explicit error otherwise.
20
+ import { writeFileSync, existsSync, renameSync, rmSync, mkdtempSync } from "node:fs";
21
+ import { dirname, basename, join } from "node:path";
22
+ import { validateRestoreSummary, } from "./schema-validator.js";
23
+ const TRANSCRIPT_BOUND = 120;
24
+ function transcriptMarkdownFromMessages(title, session, messages, note) {
25
+ const body = messages
26
+ .map((m, i) => {
27
+ const ts = m.timestamp ? ` ${m.timestamp}` : "";
28
+ return `## ${i + 1}. ${m.role}${ts}\n\n${m.text}\n`;
29
+ })
30
+ .join("\n");
31
+ return `# ${title}\n\nSource session: \`${session}\`\n\n${note}\n\n${body}`;
32
+ }
33
+ function buildTranscriptLatest(structured, sourceSessionId) {
34
+ const latest = structured.messages.slice(-TRANSCRIPT_BOUND);
35
+ return transcriptMarkdownFromMessages("Bounded Latest Transcript", sourceSessionId, latest, `This bounded transcript contains the latest ${latest.length} extracted messages for normal restore. Use transcript.md only when deeper forensic recovery is needed.`);
36
+ }
37
+ function buildTranscriptFull(structured, sourceSessionId) {
38
+ return transcriptMarkdownFromMessages("Full Transcript", sourceSessionId, structured.messages, "This transcript contains developer/user/assistant messages extracted from the source. Reasoning records, tool calls, and tool outputs are omitted by design (see restore-summary.json `omitted_classes`).");
39
+ }
40
+ function buildTouchedFiles(structured) {
41
+ const rows = structured.paths.length > 0
42
+ ? structured.paths.map((entry) => `- \`${entry.path}\` (${entry.count})`).join("\n")
43
+ : "- No paths detected in extracted messages or tool arguments.";
44
+ return `# Touched Files And Path Inventory\n\nBest-effort path inventory from messages and tool arguments. This is a triage aid, not a complete proof of all files read or written.\n\n${rows}\n`;
45
+ }
46
+ function buildRestoreInstructions(opts) {
47
+ return `# Restore Instructions
48
+
49
+ You are a restored seat in \`${opts.targetRig}\`. This packet records the cross-runtime context for resuming work from \`${opts.sourceSessionId}\`.
50
+
51
+ ## Identity
52
+
53
+ 1. Run \`rig whoami --json\`.
54
+ 2. Trust the current rig identity over the source-session transcript.
55
+ 3. Current workspace root: \`${opts.targetWorkspaceRoot}\`.
56
+ 4. Default target repo: \`${opts.defaultTargetRepo ?? "(none)"}\`.
57
+ 5. Role guidance pointer: \`${opts.rolePointer}\`.
58
+
59
+ ## Restore Steps
60
+
61
+ 1. Read this file.
62
+ 2. Read \`touched-files.md\`.
63
+ 3. Read \`transcript-latest.md\` for bounded current context.
64
+ 4. Use \`transcript.md\` only if the bounded transcript is insufficient.
65
+ 5. State: "restored from packet generated by ${opts.generatorVersion}; current rig is ${opts.targetRig}; default target repo is ${opts.defaultTargetRepo ?? "none"}."
66
+ 6. Name any caveats before resuming work.
67
+ 7. Hand off to next owner: \`${opts.nextOwner}\` (or "self" to continue).
68
+
69
+ ## Current Work
70
+
71
+ ${opts.currentWorkSummary}
72
+
73
+ ## Authority Boundaries
74
+
75
+ ${opts.authorityBoundaries}
76
+
77
+ ## Caveats
78
+
79
+ ${opts.caveats.length > 0 ? opts.caveats.map((c) => `- ${c}`).join("\n") : "- (none recorded)"}
80
+
81
+ ## Packet Stats
82
+
83
+ - Source runtime: \`${opts.sourceRuntime}\`
84
+ - Target runtime: \`${opts.targetRuntime}\`
85
+ - JSONL/transcript lines processed: ${opts.structured.lineCount}
86
+ - Extracted messages: ${opts.structured.messageCount}
87
+ - Compaction records: ${opts.structured.compactedCount}
88
+ - Source cwd: \`${opts.sourceCwd}\`
89
+ `;
90
+ }
91
+ function buildSummary(opts) {
92
+ const omittedClassesActive = [];
93
+ for (const k of ["reasoning_records", "raw_tool_outputs", "function_call_output", "redacted_secrets"]) {
94
+ if (opts.structured.omittedCounts[k] > 0)
95
+ omittedClassesActive.push(k);
96
+ }
97
+ const messageCount = Math.min(opts.structured.messages.length, TRANSCRIPT_BOUND);
98
+ const summary = {
99
+ source_session_id: opts.sourceSessionId,
100
+ source_rig: opts.sourceRig,
101
+ source_runtime: opts.sourceRuntime,
102
+ source_cwd: opts.sourceCwd,
103
+ target_rig: opts.targetRig,
104
+ target_runtime: opts.targetRuntime,
105
+ target_workspace_root: opts.targetWorkspaceRoot,
106
+ default_target_repo: opts.defaultTargetRepo,
107
+ role_pointer: opts.rolePointer,
108
+ bounded_latest_transcript: {
109
+ path: "transcript-latest.md",
110
+ message_count: messageCount,
111
+ bound: TRANSCRIPT_BOUND,
112
+ },
113
+ touched_files: {
114
+ path: "touched-files.md",
115
+ top_paths: opts.structured.paths.slice(0, 30),
116
+ },
117
+ durable_pointers: {
118
+ queue_pointers: [],
119
+ progress_pointers: [],
120
+ field_note_pointers: [],
121
+ artifact_pointers: [],
122
+ },
123
+ current_work_summary: opts.currentWorkSummary,
124
+ next_owner: opts.nextOwner,
125
+ caveats: opts.caveats,
126
+ authority_boundaries: opts.authorityBoundaries,
127
+ omitted_classes: omittedClassesActive,
128
+ redaction_policy_id: "openrig-v0",
129
+ source_trust_ranking: opts.sourceTrustRanking,
130
+ generator_version: opts.generatorVersion,
131
+ generated_at: new Date().toISOString(),
132
+ };
133
+ if (opts.includeFullTranscript) {
134
+ summary.full_transcript = {
135
+ path: "transcript.md",
136
+ line_count: opts.structured.messages.length,
137
+ };
138
+ }
139
+ return summary;
140
+ }
141
+ /**
142
+ * Write a v0 restore packet directory atomically.
143
+ *
144
+ * Atomic guarantee: if any step fails (including schema validation of
145
+ * restore-summary.json), the targetDir is never created and any
146
+ * intermediate tempdir is removed. Operators see either a complete
147
+ * valid packet at targetDir, or no packet at all.
148
+ */
149
+ export async function writePacket(opts) {
150
+ if (existsSync(opts.targetDir)) {
151
+ throw new Error(`restore-packet write: target directory already exists: ${opts.targetDir}`);
152
+ }
153
+ // Build all file contents BEFORE creating any disk state. This way if
154
+ // an in-memory step throws (unlikely, but defensive), no tempdir was
155
+ // created.
156
+ const summary = buildSummary(opts);
157
+ const validation = validateRestoreSummary(summary);
158
+ if (!validation.valid) {
159
+ const errSummary = validation.errors
160
+ .slice(0, 5)
161
+ .map((e) => `${e.field}: ${e.rule}`)
162
+ .join("; ");
163
+ throw new Error(`restore-packet write: schema validation failed before atomic rename: ${errSummary}`);
164
+ }
165
+ const restoreInstructions = buildRestoreInstructions(opts);
166
+ const transcriptLatest = buildTranscriptLatest(opts.structured, opts.sourceSessionId);
167
+ const touchedFiles = buildTouchedFiles(opts.structured);
168
+ const transcriptFull = opts.includeFullTranscript
169
+ ? buildTranscriptFull(opts.structured, opts.sourceSessionId)
170
+ : null;
171
+ // Create tempdir as a sibling of targetDir using mkdtemp for race-free
172
+ // unique name. The dirname() must exist and be writable; we don't
173
+ // mkdir the parent for the operator (operator authority bedrock).
174
+ const parentDir = dirname(opts.targetDir);
175
+ const tempPrefix = `${basename(opts.targetDir)}.tmp-restore-packet-`;
176
+ const tempDir = mkdtempSync(join(parentDir, tempPrefix));
177
+ try {
178
+ writeFileSync(join(tempDir, "restore-instructions.md"), restoreInstructions, "utf-8");
179
+ writeFileSync(join(tempDir, "transcript-latest.md"), transcriptLatest, "utf-8");
180
+ writeFileSync(join(tempDir, "touched-files.md"), touchedFiles, "utf-8");
181
+ writeFileSync(join(tempDir, "restore-summary.json"), JSON.stringify(summary, null, 2), "utf-8");
182
+ if (transcriptFull !== null) {
183
+ writeFileSync(join(tempDir, "transcript.md"), transcriptFull, "utf-8");
184
+ }
185
+ // Re-validate by parsing the on-disk summary (round-trip self-check).
186
+ // This catches any structural divergence between buildSummary's
187
+ // in-memory shape and the JSON.stringify() serialization.
188
+ const onDisk = JSON.parse(
189
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
190
+ (await import("node:fs")).readFileSync(join(tempDir, "restore-summary.json"), "utf-8"));
191
+ const recheck = validateRestoreSummary(onDisk);
192
+ if (!recheck.valid) {
193
+ throw new Error(`restore-packet write: on-disk schema recheck failed: ${recheck.errors.slice(0, 5).map((e) => `${e.field}: ${e.rule}`).join("; ")}`);
194
+ }
195
+ // Atomic rename tempdir → targetDir. fs.rename is atomic when source
196
+ // and destination are on the same filesystem; we keep them sibling
197
+ // so this holds.
198
+ renameSync(tempDir, opts.targetDir);
199
+ }
200
+ catch (err) {
201
+ // Clean up tempdir on any failure; do NOT leave a partial packet.
202
+ try {
203
+ rmSync(tempDir, { recursive: true, force: true });
204
+ }
205
+ catch {
206
+ // Best-effort cleanup; original error takes precedence.
207
+ }
208
+ throw err;
209
+ }
210
+ const files = [
211
+ "restore-instructions.md",
212
+ "transcript-latest.md",
213
+ "touched-files.md",
214
+ "restore-summary.json",
215
+ ];
216
+ if (transcriptFull !== null)
217
+ files.push("transcript.md");
218
+ return {
219
+ targetDir: opts.targetDir,
220
+ files,
221
+ summaryPath: join(opts.targetDir, "restore-summary.json"),
222
+ };
223
+ }
224
+ //# sourceMappingURL=packet-writer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"packet-writer.js","sourceRoot":"","sources":["../../src/restore-packet/packet-writer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * v0 secret-pattern list. Mirrors Velocity prior art `:34-48` exactly:
3
+ *
4
+ * 1. /\bsk-[A-Za-z0-9_-]{16,}\b/g — OpenAI-style secret tokens.
5
+ * 2. /\bgh[pousr]_[A-Za-z0-9_]{20,}\b/g — GitHub personal/OAuth tokens.
6
+ * 3. /\bgithub_pat_[A-Za-z0-9_]{20,}\b/g — GitHub fine-grained PATs.
7
+ * 4. /\bBearer\s+[A-Za-z0-9._~+/=-]{20,}\b/g — generic Bearer tokens.
8
+ * 5. /\b[A-Za-z0-9+/]{40,}={0,2}\b/g — base64-shaped strings ≥40 chars.
9
+ */
10
+ export declare const SECRET_PATTERNS: readonly RegExp[];
11
+ /**
12
+ * Apply the openrig-v0 redaction policy to a string. Returns the input
13
+ * with each match of the secret patterns replaced by the literal
14
+ * string `[REDACTED]`. Pure function; no side effects.
15
+ *
16
+ * The redaction is non-destructive at the structural level — only the
17
+ * matched substrings are replaced. Surrounding characters are kept.
18
+ */
19
+ export declare function redact(text: string): string;
20
+ /**
21
+ * Returns true if at least one secret pattern matches the input.
22
+ * Used by the omitted-records counter to track how many records had
23
+ * their content redacted (for the `redacted_secrets` omitted-class
24
+ * count in summary).
25
+ *
26
+ * Note: a SINGLE record may match multiple patterns; this returns true
27
+ * after the first match for efficiency.
28
+ */
29
+ export declare function hasSecretPattern(text: string): boolean;
30
+ //# sourceMappingURL=redaction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redaction.d.ts","sourceRoot":"","sources":["../../src/restore-packet/redaction.ts"],"names":[],"mappings":"AAqBA;;;;;;;;GAQG;AACH,eAAO,MAAM,eAAe,EAAE,SAAS,MAAM,EAM5C,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAM3C;AAED;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAQtD"}
@@ -0,0 +1,71 @@
1
+ // redaction.ts — applies the v0 redaction policy.
2
+ //
3
+ // Per M1 contract § 4: v0 defines two named policies:
4
+ // - `velocity-v1`: mirrors the Velocity generator's token patterns at
5
+ // field-notes/2026-04-27-velocity-claude-from-codex-restore/tools/
6
+ // codex-jsonl-to-restore-packet.mjs:34-48 (sk-*, gh[pousr]_*,
7
+ // github_pat_*, Bearer *, base64 ≥40 chars).
8
+ // - `openrig-v0`: the productized v0 policy, identical patterns to
9
+ // `velocity-v1` but with the canonical name. v0 generator emits
10
+ // `redaction_policy_id: "openrig-v0"`.
11
+ //
12
+ // Redaction is applied to:
13
+ // - transcript content in transcript-latest.md and transcript.md.
14
+ // - body content in restore-instructions.md if it quotes transcript
15
+ // material.
16
+ // - top_paths / touched-files entries are NOT redacted (paths are not
17
+ // credential material).
18
+ //
19
+ // The validator does NOT scan content for residual credential patterns
20
+ // (per § 4 + § 8: enforcement is generator-side at write time).
21
+ /**
22
+ * v0 secret-pattern list. Mirrors Velocity prior art `:34-48` exactly:
23
+ *
24
+ * 1. /\bsk-[A-Za-z0-9_-]{16,}\b/g — OpenAI-style secret tokens.
25
+ * 2. /\bgh[pousr]_[A-Za-z0-9_]{20,}\b/g — GitHub personal/OAuth tokens.
26
+ * 3. /\bgithub_pat_[A-Za-z0-9_]{20,}\b/g — GitHub fine-grained PATs.
27
+ * 4. /\bBearer\s+[A-Za-z0-9._~+/=-]{20,}\b/g — generic Bearer tokens.
28
+ * 5. /\b[A-Za-z0-9+/]{40,}={0,2}\b/g — base64-shaped strings ≥40 chars.
29
+ */
30
+ export const SECRET_PATTERNS = [
31
+ /\bsk-[A-Za-z0-9_-]{16,}\b/g,
32
+ /\bgh[pousr]_[A-Za-z0-9_]{20,}\b/g,
33
+ /\bgithub_pat_[A-Za-z0-9_]{20,}\b/g,
34
+ /\bBearer\s+[A-Za-z0-9._~+/=-]{20,}\b/g,
35
+ /\b[A-Za-z0-9+/]{40,}={0,2}\b/g,
36
+ ];
37
+ /**
38
+ * Apply the openrig-v0 redaction policy to a string. Returns the input
39
+ * with each match of the secret patterns replaced by the literal
40
+ * string `[REDACTED]`. Pure function; no side effects.
41
+ *
42
+ * The redaction is non-destructive at the structural level — only the
43
+ * matched substrings are replaced. Surrounding characters are kept.
44
+ */
45
+ export function redact(text) {
46
+ let out = text;
47
+ for (const pattern of SECRET_PATTERNS) {
48
+ out = out.replace(pattern, "[REDACTED]");
49
+ }
50
+ return out;
51
+ }
52
+ /**
53
+ * Returns true if at least one secret pattern matches the input.
54
+ * Used by the omitted-records counter to track how many records had
55
+ * their content redacted (for the `redacted_secrets` omitted-class
56
+ * count in summary).
57
+ *
58
+ * Note: a SINGLE record may match multiple patterns; this returns true
59
+ * after the first match for efficiency.
60
+ */
61
+ export function hasSecretPattern(text) {
62
+ for (const pattern of SECRET_PATTERNS) {
63
+ // Non-global test: cannot reuse the global `g` regex without resetting
64
+ // lastIndex, so build a fresh non-global RegExp from source.
65
+ const probe = new RegExp(pattern.source);
66
+ if (probe.test(text))
67
+ return true;
68
+ }
69
+ return false;
70
+ }
71
+ //# sourceMappingURL=redaction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redaction.js","sourceRoot":"","sources":["../../src/restore-packet/redaction.ts"],"names":[],"mappings":"AAAA,kDAAkD;AAClD,EAAE;AACF,sDAAsD;AACtD,sEAAsE;AACtE,qEAAqE;AACrE,gEAAgE;AAChE,+CAA+C;AAC/C,mEAAmE;AACnE,kEAAkE;AAClE,yCAAyC;AACzC,EAAE;AACF,2BAA2B;AAC3B,kEAAkE;AAClE,oEAAoE;AACpE,cAAc;AACd,sEAAsE;AACtE,0BAA0B;AAC1B,EAAE;AACF,uEAAuE;AACvE,gEAAgE;AAEhE;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,eAAe,GAAsB;IAChD,4BAA4B;IAC5B,kCAAkC;IAClC,mCAAmC;IACnC,uCAAuC;IACvC,+BAA+B;CAChC,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,UAAU,MAAM,CAAC,IAAY;IACjC,IAAI,GAAG,GAAG,IAAI,CAAC;IACf,KAAK,MAAM,OAAO,IAAI,eAAe,EAAE,CAAC;QACtC,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IAC3C,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,KAAK,MAAM,OAAO,IAAI,eAAe,EAAE,CAAC;QACtC,uEAAuE;QACvE,6DAA6D;QAC7D,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACzC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;IACpC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,19 @@
1
+ import type { SourceRuntime } from "./types.js";
2
+ /**
3
+ * Detect the source runtime from a sample of JSONL lines.
4
+ *
5
+ * Returns:
6
+ * - "codex" — at least one line has `type: "response_item"` OR
7
+ * `type: "session_meta"` OR `type: "compacted"`.
8
+ * - "claude-code" — at least one line has `type: "user"` or
9
+ * `type: "assistant"` AND no Codex markers seen.
10
+ * - null — input is empty / non-JSONL / ambiguous (e.g., neither
11
+ * marker class appears).
12
+ *
13
+ * Detection is non-greedy: walks the input lines until a definitive
14
+ * marker is found. Bias toward Codex markers if both shape classes
15
+ * appear (extremely unlikely in practice; would indicate a malformed
16
+ * mixed source).
17
+ */
18
+ export declare function detectRuntime(content: string): SourceRuntime | null;
19
+ //# sourceMappingURL=runtime-detect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-detect.d.ts","sourceRoot":"","sources":["../../src/restore-packet/runtime-detect.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CA6CnE"}
@@ -0,0 +1,81 @@
1
+ // runtime-detect.ts — auto-detect the source runtime from a JSONL/transcript
2
+ // shape.
3
+ //
4
+ // Per M1 contract § 3.4: source-runtime resolution for `--source-jsonl` is
5
+ // auto-detected from the JSONL shape (Codex JSONL has `payload.type`
6
+ // markers; Claude transcript has different shape). If auto-detect is
7
+ // ambiguous, fail with clear error and prompt for `--source-runtime`
8
+ // flag.
9
+ //
10
+ // Detection is by content shape, NOT file extension or filename
11
+ // (per dispatch's "Do NOT use file extensions or filenames as the
12
+ // detection key. Detect by content shape.").
13
+ //
14
+ // Codex shape: each line is JSON with `type` field; the discriminating
15
+ // markers are `type: "session_meta"`, `type: "response_item"`, or
16
+ // `type: "compacted"`. response_item records carry a `payload` object
17
+ // with a `type` sub-field.
18
+ //
19
+ // Claude shape: each line is JSON with `type` field; values include
20
+ // `user`, `assistant`, `system`, `attachment`, `summary`, etc. NO
21
+ // `payload` wrapper; the message content is directly under `message`
22
+ // or `attachment`.
23
+ /**
24
+ * Detect the source runtime from a sample of JSONL lines.
25
+ *
26
+ * Returns:
27
+ * - "codex" — at least one line has `type: "response_item"` OR
28
+ * `type: "session_meta"` OR `type: "compacted"`.
29
+ * - "claude-code" — at least one line has `type: "user"` or
30
+ * `type: "assistant"` AND no Codex markers seen.
31
+ * - null — input is empty / non-JSONL / ambiguous (e.g., neither
32
+ * marker class appears).
33
+ *
34
+ * Detection is non-greedy: walks the input lines until a definitive
35
+ * marker is found. Bias toward Codex markers if both shape classes
36
+ * appear (extremely unlikely in practice; would indicate a malformed
37
+ * mixed source).
38
+ */
39
+ export function detectRuntime(content) {
40
+ if (typeof content !== "string" || content.length === 0)
41
+ return null;
42
+ let sawCodexMarker = false;
43
+ let sawClaudeMarker = false;
44
+ for (const rawLine of content.split("\n")) {
45
+ const line = rawLine.trim();
46
+ if (!line)
47
+ continue;
48
+ let record;
49
+ try {
50
+ record = JSON.parse(line);
51
+ }
52
+ catch {
53
+ // Skip malformed JSON lines; they don't affect detection.
54
+ continue;
55
+ }
56
+ const recordType = typeof record.type === "string" ? record.type : "";
57
+ // Codex discriminators: type values + payload wrapper presence.
58
+ if (recordType === "response_item" ||
59
+ recordType === "session_meta" ||
60
+ recordType === "compacted") {
61
+ sawCodexMarker = true;
62
+ // Early-return on the strongest Codex marker; ambiguity bias
63
+ // toward Codex if Claude markers also appear is intentional
64
+ // (Codex's response_item is structurally distinct from any
65
+ // Claude record; if it's present, the content is Codex JSONL).
66
+ return "codex";
67
+ }
68
+ // Claude discriminators: top-level type as a user/assistant marker.
69
+ if (recordType === "user" || recordType === "assistant") {
70
+ sawClaudeMarker = true;
71
+ // Don't early-return on Claude alone — keep looking for any
72
+ // Codex marker (defensive against the unlikely mixed-shape case).
73
+ }
74
+ }
75
+ if (sawCodexMarker)
76
+ return "codex";
77
+ if (sawClaudeMarker)
78
+ return "claude-code";
79
+ return null;
80
+ }
81
+ //# sourceMappingURL=runtime-detect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-detect.js","sourceRoot":"","sources":["../../src/restore-packet/runtime-detect.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,SAAS;AACT,EAAE;AACF,2EAA2E;AAC3E,qEAAqE;AACrE,qEAAqE;AACrE,qEAAqE;AACrE,QAAQ;AACR,EAAE;AACF,gEAAgE;AAChE,kEAAkE;AAClE,6CAA6C;AAC7C,EAAE;AACF,uEAAuE;AACvE,kEAAkE;AAClE,sEAAsE;AACtE,2BAA2B;AAC3B,EAAE;AACF,oEAAoE;AACpE,kEAAkE;AAClE,qEAAqE;AACrE,mBAAmB;AAInB;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,aAAa,CAAC,OAAe;IAC3C,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAErE,IAAI,cAAc,GAAG,KAAK,CAAC;IAC3B,IAAI,eAAe,GAAG,KAAK,CAAC;IAE5B,KAAK,MAAM,OAAO,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1C,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,IAAI;YAAE,SAAS;QAEpB,IAAI,MAAwD,CAAC;QAC7D,IAAI,CAAC;YACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC;QAAC,MAAM,CAAC;YACP,0DAA0D;YAC1D,SAAS;QACX,CAAC;QAED,MAAM,UAAU,GAAG,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QAEtE,gEAAgE;QAChE,IACE,UAAU,KAAK,eAAe;YAC9B,UAAU,KAAK,cAAc;YAC7B,UAAU,KAAK,WAAW,EAC1B,CAAC;YACD,cAAc,GAAG,IAAI,CAAC;YACtB,6DAA6D;YAC7D,4DAA4D;YAC5D,2DAA2D;YAC3D,+DAA+D;YAC/D,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,oEAAoE;QACpE,IAAI,UAAU,KAAK,MAAM,IAAI,UAAU,KAAK,WAAW,EAAE,CAAC;YACxD,eAAe,GAAG,IAAI,CAAC;YACvB,4DAA4D;YAC5D,kEAAkE;QACpE,CAAC;IACH,CAAC;IAED,IAAI,cAAc;QAAE,OAAO,OAAO,CAAC;IACnC,IAAI,eAAe;QAAE,OAAO,aAAa,CAAC;IAC1C,OAAO,IAAI,CAAC;AACd,CAAC"}