@openrig/cli 0.4.2 → 0.4.4

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 (499) hide show
  1. package/daemon/assets/guidance/openrig-start.md +6 -0
  2. package/daemon/assets/plugins/openrig-core/hooks/scripts/activity-relay.cjs +42 -2
  3. package/daemon/assets/plugins/openrig-core/skills/mission-slice-sop/SKILL.md +115 -0
  4. package/daemon/assets/plugins/openrig-core/skills/openrig-user/SKILL.md +12 -12
  5. package/daemon/dist/adapters/codex-runtime-adapter.d.ts +46 -0
  6. package/daemon/dist/adapters/codex-runtime-adapter.d.ts.map +1 -1
  7. package/daemon/dist/adapters/codex-runtime-adapter.js +167 -3
  8. package/daemon/dist/adapters/codex-runtime-adapter.js.map +1 -1
  9. package/daemon/dist/adapters/tmux.d.ts +31 -0
  10. package/daemon/dist/adapters/tmux.d.ts.map +1 -1
  11. package/daemon/dist/adapters/tmux.js +62 -0
  12. package/daemon/dist/adapters/tmux.js.map +1 -1
  13. package/daemon/dist/build-info.d.ts +12 -0
  14. package/daemon/dist/build-info.d.ts.map +1 -0
  15. package/daemon/dist/build-info.js +11 -0
  16. package/daemon/dist/build-info.js.map +1 -0
  17. package/daemon/dist/db/migrations/045_resume_verification.d.ts +29 -0
  18. package/daemon/dist/db/migrations/045_resume_verification.d.ts.map +1 -0
  19. package/daemon/dist/db/migrations/045_resume_verification.js +34 -0
  20. package/daemon/dist/db/migrations/045_resume_verification.js.map +1 -0
  21. package/daemon/dist/db/migrations/046_seat_identity_verdicts.d.ts +41 -0
  22. package/daemon/dist/db/migrations/046_seat_identity_verdicts.d.ts.map +1 -0
  23. package/daemon/dist/db/migrations/046_seat_identity_verdicts.js +56 -0
  24. package/daemon/dist/db/migrations/046_seat_identity_verdicts.js.map +1 -0
  25. package/daemon/dist/db/migrations/047_events_node_type_index.d.ts +48 -0
  26. package/daemon/dist/db/migrations/047_events_node_type_index.d.ts.map +1 -0
  27. package/daemon/dist/db/migrations/047_events_node_type_index.js +52 -0
  28. package/daemon/dist/db/migrations/047_events_node_type_index.js.map +1 -0
  29. package/daemon/dist/db/migrations/048_queue_item_evidence_ref.d.ts +18 -0
  30. package/daemon/dist/db/migrations/048_queue_item_evidence_ref.d.ts.map +1 -0
  31. package/daemon/dist/db/migrations/048_queue_item_evidence_ref.js +22 -0
  32. package/daemon/dist/db/migrations/048_queue_item_evidence_ref.js.map +1 -0
  33. package/daemon/dist/domain/activity-endpoint.d.ts +25 -0
  34. package/daemon/dist/domain/activity-endpoint.d.ts.map +1 -0
  35. package/daemon/dist/domain/activity-endpoint.js +91 -0
  36. package/daemon/dist/domain/activity-endpoint.js.map +1 -0
  37. package/daemon/dist/domain/claim-service.d.ts +36 -0
  38. package/daemon/dist/domain/claim-service.d.ts.map +1 -1
  39. package/daemon/dist/domain/claim-service.js +90 -0
  40. package/daemon/dist/domain/claim-service.js.map +1 -1
  41. package/daemon/dist/domain/claude-compaction-enforcer.d.ts +57 -0
  42. package/daemon/dist/domain/claude-compaction-enforcer.d.ts.map +1 -1
  43. package/daemon/dist/domain/claude-compaction-enforcer.js +149 -3
  44. package/daemon/dist/domain/claude-compaction-enforcer.js.map +1 -1
  45. package/daemon/dist/domain/event-loop-monitor.d.ts +100 -0
  46. package/daemon/dist/domain/event-loop-monitor.d.ts.map +1 -0
  47. package/daemon/dist/domain/event-loop-monitor.js +127 -0
  48. package/daemon/dist/domain/event-loop-monitor.js.map +1 -0
  49. package/daemon/dist/domain/feed/attention-aggregator.d.ts +31 -0
  50. package/daemon/dist/domain/feed/attention-aggregator.d.ts.map +1 -0
  51. package/daemon/dist/domain/feed/attention-aggregator.js +119 -0
  52. package/daemon/dist/domain/feed/attention-aggregator.js.map +1 -0
  53. package/daemon/dist/domain/files/file-write-service.d.ts +11 -2
  54. package/daemon/dist/domain/files/file-write-service.d.ts.map +1 -1
  55. package/daemon/dist/domain/files/file-write-service.js +77 -0
  56. package/daemon/dist/domain/files/file-write-service.js.map +1 -1
  57. package/daemon/dist/domain/gate-predicate.d.ts +29 -0
  58. package/daemon/dist/domain/gate-predicate.d.ts.map +1 -0
  59. package/daemon/dist/domain/gate-predicate.js +73 -0
  60. package/daemon/dist/domain/gate-predicate.js.map +1 -0
  61. package/daemon/dist/domain/graph-projection.d.ts +7 -1
  62. package/daemon/dist/domain/graph-projection.d.ts.map +1 -1
  63. package/daemon/dist/domain/graph-projection.js +19 -1
  64. package/daemon/dist/domain/graph-projection.js.map +1 -1
  65. package/daemon/dist/domain/hosts/fanout-contract.d.ts +33 -0
  66. package/daemon/dist/domain/hosts/fanout-contract.d.ts.map +1 -0
  67. package/daemon/dist/domain/hosts/fanout-contract.js +23 -0
  68. package/daemon/dist/domain/hosts/fanout-contract.js.map +1 -0
  69. package/daemon/dist/domain/hosts/hosts-registry-reader.d.ts +49 -0
  70. package/daemon/dist/domain/hosts/hosts-registry-reader.d.ts.map +1 -0
  71. package/daemon/dist/domain/hosts/hosts-registry-reader.js +165 -0
  72. package/daemon/dist/domain/hosts/hosts-registry-reader.js.map +1 -0
  73. package/daemon/dist/domain/hosts/remote-daemon-http.d.ts +35 -0
  74. package/daemon/dist/domain/hosts/remote-daemon-http.d.ts.map +1 -0
  75. package/daemon/dist/domain/hosts/remote-daemon-http.js +105 -0
  76. package/daemon/dist/domain/hosts/remote-daemon-http.js.map +1 -0
  77. package/daemon/dist/domain/human-route-enforcer.d.ts +71 -0
  78. package/daemon/dist/domain/human-route-enforcer.d.ts.map +1 -0
  79. package/daemon/dist/domain/human-route-enforcer.js +80 -0
  80. package/daemon/dist/domain/human-route-enforcer.js.map +1 -0
  81. package/daemon/dist/domain/mission-control/audit-browse.d.ts +8 -0
  82. package/daemon/dist/domain/mission-control/audit-browse.d.ts.map +1 -1
  83. package/daemon/dist/domain/mission-control/audit-browse.js +19 -0
  84. package/daemon/dist/domain/mission-control/audit-browse.js.map +1 -1
  85. package/daemon/dist/domain/mission-control/mission-control-action-log.d.ts +1 -1
  86. package/daemon/dist/domain/mission-control/mission-control-action-log.d.ts.map +1 -1
  87. package/daemon/dist/domain/mission-control/mission-control-action-log.js +4 -0
  88. package/daemon/dist/domain/mission-control/mission-control-action-log.js.map +1 -1
  89. package/daemon/dist/domain/mission-control/mission-control-fleet-cli-capability.js +1 -1
  90. package/daemon/dist/domain/mission-control/mission-control-fleet-cli-capability.js.map +1 -1
  91. package/daemon/dist/domain/mission-control/mission-control-read-layer.js +1 -1
  92. package/daemon/dist/domain/mission-control/mission-control-read-layer.js.map +1 -1
  93. package/daemon/dist/domain/mission-control/mission-control-write-contract.d.ts +28 -0
  94. package/daemon/dist/domain/mission-control/mission-control-write-contract.d.ts.map +1 -1
  95. package/daemon/dist/domain/mission-control/mission-control-write-contract.js +125 -0
  96. package/daemon/dist/domain/mission-control/mission-control-write-contract.js.map +1 -1
  97. package/daemon/dist/domain/node-inventory.d.ts +7 -1
  98. package/daemon/dist/domain/node-inventory.d.ts.map +1 -1
  99. package/daemon/dist/domain/node-inventory.js +84 -5
  100. package/daemon/dist/domain/node-inventory.js.map +1 -1
  101. package/daemon/dist/domain/periodic-snapshot-scheduler.d.ts +4 -0
  102. package/daemon/dist/domain/periodic-snapshot-scheduler.d.ts.map +1 -1
  103. package/daemon/dist/domain/periodic-snapshot-scheduler.js +11 -0
  104. package/daemon/dist/domain/periodic-snapshot-scheduler.js.map +1 -1
  105. package/daemon/dist/domain/policies/idle-gate-qitem.d.ts +14 -0
  106. package/daemon/dist/domain/policies/idle-gate-qitem.d.ts.map +1 -0
  107. package/daemon/dist/domain/policies/idle-gate-qitem.js +114 -0
  108. package/daemon/dist/domain/policies/idle-gate-qitem.js.map +1 -0
  109. package/daemon/dist/domain/ps-projection.d.ts +28 -1
  110. package/daemon/dist/domain/ps-projection.d.ts.map +1 -1
  111. package/daemon/dist/domain/ps-projection.js +39 -0
  112. package/daemon/dist/domain/ps-projection.js.map +1 -1
  113. package/daemon/dist/domain/queue-repository.d.ts +25 -1
  114. package/daemon/dist/domain/queue-repository.d.ts.map +1 -1
  115. package/daemon/dist/domain/queue-repository.js +111 -7
  116. package/daemon/dist/domain/queue-repository.js.map +1 -1
  117. package/daemon/dist/domain/restore-orchestrator.d.ts +8 -0
  118. package/daemon/dist/domain/restore-orchestrator.d.ts.map +1 -1
  119. package/daemon/dist/domain/restore-orchestrator.js +109 -27
  120. package/daemon/dist/domain/restore-orchestrator.js.map +1 -1
  121. package/daemon/dist/domain/restore-plan-preview.d.ts +25 -1
  122. package/daemon/dist/domain/restore-plan-preview.d.ts.map +1 -1
  123. package/daemon/dist/domain/restore-plan-preview.js +72 -4
  124. package/daemon/dist/domain/restore-plan-preview.js.map +1 -1
  125. package/daemon/dist/domain/resume-metadata-refresher.d.ts +44 -2
  126. package/daemon/dist/domain/resume-metadata-refresher.d.ts.map +1 -1
  127. package/daemon/dist/domain/resume-metadata-refresher.js +92 -6
  128. package/daemon/dist/domain/resume-metadata-refresher.js.map +1 -1
  129. package/daemon/dist/domain/resume-token-capture.d.ts +50 -0
  130. package/daemon/dist/domain/resume-token-capture.d.ts.map +1 -0
  131. package/daemon/dist/domain/resume-token-capture.js +63 -0
  132. package/daemon/dist/domain/resume-token-capture.js.map +1 -0
  133. package/daemon/dist/domain/review/brief-spine.d.ts +19 -0
  134. package/daemon/dist/domain/review/brief-spine.d.ts.map +1 -0
  135. package/daemon/dist/domain/review/brief-spine.js +86 -0
  136. package/daemon/dist/domain/review/brief-spine.js.map +1 -0
  137. package/daemon/dist/domain/review/compose.d.ts +228 -0
  138. package/daemon/dist/domain/review/compose.d.ts.map +1 -0
  139. package/daemon/dist/domain/review/compose.js +773 -0
  140. package/daemon/dist/domain/review/compose.js.map +1 -0
  141. package/daemon/dist/domain/review/freeze.d.ts +31 -0
  142. package/daemon/dist/domain/review/freeze.d.ts.map +1 -0
  143. package/daemon/dist/domain/review/freeze.js +257 -0
  144. package/daemon/dist/domain/review/freeze.js.map +1 -0
  145. package/daemon/dist/domain/review/gather.d.ts +100 -0
  146. package/daemon/dist/domain/review/gather.d.ts.map +1 -0
  147. package/daemon/dist/domain/review/gather.js +676 -0
  148. package/daemon/dist/domain/review/gather.js.map +1 -0
  149. package/daemon/dist/domain/review/types.d.ts +258 -0
  150. package/daemon/dist/domain/review/types.d.ts.map +1 -0
  151. package/daemon/dist/domain/review/types.js +35 -0
  152. package/daemon/dist/domain/review/types.js.map +1 -0
  153. package/daemon/dist/domain/rig-status-compose.d.ts +62 -0
  154. package/daemon/dist/domain/rig-status-compose.d.ts.map +1 -0
  155. package/daemon/dist/domain/rig-status-compose.js +149 -0
  156. package/daemon/dist/domain/rig-status-compose.js.map +1 -0
  157. package/daemon/dist/domain/rig-teardown.d.ts +3 -1
  158. package/daemon/dist/domain/rig-teardown.d.ts.map +1 -1
  159. package/daemon/dist/domain/rig-teardown.js +4 -19
  160. package/daemon/dist/domain/rig-teardown.js.map +1 -1
  161. package/daemon/dist/domain/route-timing-recorder.d.ts +42 -0
  162. package/daemon/dist/domain/route-timing-recorder.d.ts.map +1 -0
  163. package/daemon/dist/domain/route-timing-recorder.js +62 -0
  164. package/daemon/dist/domain/route-timing-recorder.js.map +1 -0
  165. package/daemon/dist/domain/scope/scope-approve.d.ts +64 -0
  166. package/daemon/dist/domain/scope/scope-approve.d.ts.map +1 -0
  167. package/daemon/dist/domain/scope/scope-approve.js +153 -0
  168. package/daemon/dist/domain/scope/scope-approve.js.map +1 -0
  169. package/daemon/dist/domain/scope/scope-audit.d.ts +11 -1
  170. package/daemon/dist/domain/scope/scope-audit.d.ts.map +1 -1
  171. package/daemon/dist/domain/scope/scope-audit.js +203 -2
  172. package/daemon/dist/domain/scope/scope-audit.js.map +1 -1
  173. package/daemon/dist/domain/seat-handover-service.d.ts +50 -7
  174. package/daemon/dist/domain/seat-handover-service.d.ts.map +1 -1
  175. package/daemon/dist/domain/seat-handover-service.js +273 -33
  176. package/daemon/dist/domain/seat-handover-service.js.map +1 -1
  177. package/daemon/dist/domain/seat-identity-reconciler.d.ts +59 -0
  178. package/daemon/dist/domain/seat-identity-reconciler.d.ts.map +1 -0
  179. package/daemon/dist/domain/seat-identity-reconciler.js +207 -0
  180. package/daemon/dist/domain/seat-identity-reconciler.js.map +1 -0
  181. package/daemon/dist/domain/seat-identity-store.d.ts +27 -0
  182. package/daemon/dist/domain/seat-identity-store.d.ts.map +1 -0
  183. package/daemon/dist/domain/seat-identity-store.js +106 -0
  184. package/daemon/dist/domain/seat-identity-store.js.map +1 -0
  185. package/daemon/dist/domain/seat-switch-client-service.d.ts +57 -0
  186. package/daemon/dist/domain/seat-switch-client-service.d.ts.map +1 -0
  187. package/daemon/dist/domain/seat-switch-client-service.js +168 -0
  188. package/daemon/dist/domain/seat-switch-client-service.js.map +1 -0
  189. package/daemon/dist/domain/self-attach-service.d.ts +8 -0
  190. package/daemon/dist/domain/self-attach-service.d.ts.map +1 -1
  191. package/daemon/dist/domain/self-attach-service.js +20 -7
  192. package/daemon/dist/domain/self-attach-service.js.map +1 -1
  193. package/daemon/dist/domain/session-registry.d.ts +35 -4
  194. package/daemon/dist/domain/session-registry.d.ts.map +1 -1
  195. package/daemon/dist/domain/session-registry.js +89 -10
  196. package/daemon/dist/domain/session-registry.js.map +1 -1
  197. package/daemon/dist/domain/session-transport.d.ts +8 -1
  198. package/daemon/dist/domain/session-transport.d.ts.map +1 -1
  199. package/daemon/dist/domain/session-transport.js +143 -37
  200. package/daemon/dist/domain/session-transport.js.map +1 -1
  201. package/daemon/dist/domain/startup-orchestrator.d.ts.map +1 -1
  202. package/daemon/dist/domain/startup-orchestrator.js +34 -2
  203. package/daemon/dist/domain/startup-orchestrator.js.map +1 -1
  204. package/daemon/dist/domain/startup-proof.d.ts +63 -0
  205. package/daemon/dist/domain/startup-proof.d.ts.map +1 -0
  206. package/daemon/dist/domain/startup-proof.js +165 -0
  207. package/daemon/dist/domain/startup-proof.js.map +1 -0
  208. package/daemon/dist/domain/successor-session-launcher.d.ts +103 -0
  209. package/daemon/dist/domain/successor-session-launcher.d.ts.map +1 -0
  210. package/daemon/dist/domain/successor-session-launcher.js +246 -0
  211. package/daemon/dist/domain/successor-session-launcher.js.map +1 -0
  212. package/daemon/dist/domain/topology/multi-rig-launcher.d.ts +49 -0
  213. package/daemon/dist/domain/topology/multi-rig-launcher.d.ts.map +1 -0
  214. package/daemon/dist/domain/topology/multi-rig-launcher.js +132 -0
  215. package/daemon/dist/domain/topology/multi-rig-launcher.js.map +1 -0
  216. package/daemon/dist/domain/topology/remote-up-leaf.d.ts +29 -0
  217. package/daemon/dist/domain/topology/remote-up-leaf.d.ts.map +1 -0
  218. package/daemon/dist/domain/topology/remote-up-leaf.js +60 -0
  219. package/daemon/dist/domain/topology/remote-up-leaf.js.map +1 -0
  220. package/daemon/dist/domain/topology/topology-manifest.d.ts +34 -0
  221. package/daemon/dist/domain/topology/topology-manifest.d.ts.map +1 -0
  222. package/daemon/dist/domain/topology/topology-manifest.js +195 -0
  223. package/daemon/dist/domain/topology/topology-manifest.js.map +1 -0
  224. package/daemon/dist/domain/types.d.ts +86 -0
  225. package/daemon/dist/domain/types.d.ts.map +1 -1
  226. package/daemon/dist/domain/types.js +8 -0
  227. package/daemon/dist/domain/types.js.map +1 -1
  228. package/daemon/dist/domain/up-command-router.d.ts +1 -1
  229. package/daemon/dist/domain/up-command-router.d.ts.map +1 -1
  230. package/daemon/dist/domain/up-command-router.js +34 -2
  231. package/daemon/dist/domain/up-command-router.js.map +1 -1
  232. package/daemon/dist/domain/user-settings/settings-store.d.ts +17 -0
  233. package/daemon/dist/domain/user-settings/settings-store.d.ts.map +1 -1
  234. package/daemon/dist/domain/user-settings/settings-store.js +109 -0
  235. package/daemon/dist/domain/user-settings/settings-store.js.map +1 -1
  236. package/daemon/dist/domain/watchdog-jobs-repository.d.ts +2 -2
  237. package/daemon/dist/domain/watchdog-jobs-repository.d.ts.map +1 -1
  238. package/daemon/dist/domain/watchdog-jobs-repository.js +4 -0
  239. package/daemon/dist/domain/watchdog-jobs-repository.js.map +1 -1
  240. package/daemon/dist/domain/watchdog-policy-engine.d.ts.map +1 -1
  241. package/daemon/dist/domain/watchdog-policy-engine.js +19 -0
  242. package/daemon/dist/domain/watchdog-policy-engine.js.map +1 -1
  243. package/daemon/dist/domain/workspace/default-workspace-scaffold.d.ts.map +1 -1
  244. package/daemon/dist/domain/workspace/default-workspace-scaffold.js +51 -6
  245. package/daemon/dist/domain/workspace/default-workspace-scaffold.js.map +1 -1
  246. package/daemon/dist/domain/workspace/workspace-doctor.d.ts +11 -0
  247. package/daemon/dist/domain/workspace/workspace-doctor.d.ts.map +1 -1
  248. package/daemon/dist/domain/workspace/workspace-doctor.js +82 -0
  249. package/daemon/dist/domain/workspace/workspace-doctor.js.map +1 -1
  250. package/daemon/dist/index.d.ts.map +1 -1
  251. package/daemon/dist/index.js +18 -1
  252. package/daemon/dist/index.js.map +1 -1
  253. package/daemon/dist/routes/activity.d.ts.map +1 -1
  254. package/daemon/dist/routes/activity.js +26 -0
  255. package/daemon/dist/routes/activity.js.map +1 -1
  256. package/daemon/dist/routes/agent-images.d.ts.map +1 -1
  257. package/daemon/dist/routes/agent-images.js +139 -0
  258. package/daemon/dist/routes/agent-images.js.map +1 -1
  259. package/daemon/dist/routes/compaction.d.ts +17 -0
  260. package/daemon/dist/routes/compaction.d.ts.map +1 -0
  261. package/daemon/dist/routes/compaction.js +125 -0
  262. package/daemon/dist/routes/compaction.js.map +1 -0
  263. package/daemon/dist/routes/config.d.ts.map +1 -1
  264. package/daemon/dist/routes/config.js +15 -6
  265. package/daemon/dist/routes/config.js.map +1 -1
  266. package/daemon/dist/routes/files.d.ts.map +1 -1
  267. package/daemon/dist/routes/files.js +45 -1
  268. package/daemon/dist/routes/files.js.map +1 -1
  269. package/daemon/dist/routes/mission-control.d.ts.map +1 -1
  270. package/daemon/dist/routes/mission-control.js +67 -2
  271. package/daemon/dist/routes/mission-control.js.map +1 -1
  272. package/daemon/dist/routes/queue.d.ts +8 -2
  273. package/daemon/dist/routes/queue.d.ts.map +1 -1
  274. package/daemon/dist/routes/queue.js +44 -4
  275. package/daemon/dist/routes/queue.js.map +1 -1
  276. package/daemon/dist/routes/restore-check.d.ts +10 -0
  277. package/daemon/dist/routes/restore-check.d.ts.map +1 -1
  278. package/daemon/dist/routes/restore-check.js +46 -37
  279. package/daemon/dist/routes/restore-check.js.map +1 -1
  280. package/daemon/dist/routes/review.d.ts +3 -0
  281. package/daemon/dist/routes/review.d.ts.map +1 -0
  282. package/daemon/dist/routes/review.js +169 -0
  283. package/daemon/dist/routes/review.js.map +1 -0
  284. package/daemon/dist/routes/rigs.d.ts.map +1 -1
  285. package/daemon/dist/routes/rigs.js +70 -1
  286. package/daemon/dist/routes/rigs.js.map +1 -1
  287. package/daemon/dist/routes/scope-approve.d.ts +3 -0
  288. package/daemon/dist/routes/scope-approve.d.ts.map +1 -0
  289. package/daemon/dist/routes/scope-approve.js +55 -0
  290. package/daemon/dist/routes/scope-approve.js.map +1 -0
  291. package/daemon/dist/routes/scope-audit.d.ts.map +1 -1
  292. package/daemon/dist/routes/scope-audit.js +28 -1
  293. package/daemon/dist/routes/scope-audit.js.map +1 -1
  294. package/daemon/dist/routes/seat.d.ts.map +1 -1
  295. package/daemon/dist/routes/seat.js +53 -2
  296. package/daemon/dist/routes/seat.js.map +1 -1
  297. package/daemon/dist/routes/sessions.d.ts.map +1 -1
  298. package/daemon/dist/routes/sessions.js +44 -9
  299. package/daemon/dist/routes/sessions.js.map +1 -1
  300. package/daemon/dist/routes/slices.d.ts.map +1 -1
  301. package/daemon/dist/routes/slices.js +49 -9
  302. package/daemon/dist/routes/slices.js.map +1 -1
  303. package/daemon/dist/routes/snapshots.d.ts.map +1 -1
  304. package/daemon/dist/routes/snapshots.js +16 -1
  305. package/daemon/dist/routes/snapshots.js.map +1 -1
  306. package/daemon/dist/routes/terminal-ws.d.ts.map +1 -1
  307. package/daemon/dist/routes/terminal-ws.js +58 -21
  308. package/daemon/dist/routes/terminal-ws.js.map +1 -1
  309. package/daemon/dist/routes/transport.d.ts.map +1 -1
  310. package/daemon/dist/routes/transport.js +12 -5
  311. package/daemon/dist/routes/transport.js.map +1 -1
  312. package/daemon/dist/routes/up.d.ts.map +1 -1
  313. package/daemon/dist/routes/up.js +84 -0
  314. package/daemon/dist/routes/up.js.map +1 -1
  315. package/daemon/dist/routes/workspace.js +2 -2
  316. package/daemon/dist/server.d.ts +33 -0
  317. package/daemon/dist/server.d.ts.map +1 -1
  318. package/daemon/dist/server.js +41 -1
  319. package/daemon/dist/server.js.map +1 -1
  320. package/daemon/dist/startup.d.ts +1 -0
  321. package/daemon/dist/startup.d.ts.map +1 -1
  322. package/daemon/dist/startup.js +108 -20
  323. package/daemon/dist/startup.js.map +1 -1
  324. package/daemon/docs/reference/agent-startup-guide.md +1 -1
  325. package/daemon/docs/reference/product-factory-vps-runbook.md +132 -0
  326. package/daemon/docs/reference/sdlc-conventions.md +187 -0
  327. package/daemon/specs/agents/conveyor/builder/agent.yaml +1 -1
  328. package/daemon/specs/agents/conveyor/builder/guidance/role.md +1 -0
  329. package/daemon/specs/agents/conveyor/lead/agent.yaml +1 -1
  330. package/daemon/specs/agents/conveyor/lead/guidance/role.md +1 -0
  331. package/daemon/specs/agents/conveyor/planner/agent.yaml +1 -1
  332. package/daemon/specs/agents/conveyor/planner/guidance/role.md +1 -0
  333. package/daemon/specs/agents/conveyor/reviewer/agent.yaml +1 -1
  334. package/daemon/specs/agents/conveyor/reviewer/guidance/role.md +1 -0
  335. package/daemon/specs/agents/design/product-designer/agent.yaml +1 -1
  336. package/daemon/specs/agents/design/product-designer/guidance/role.md +1 -0
  337. package/daemon/specs/agents/development/implementer/agent.yaml +1 -1
  338. package/daemon/specs/agents/development/implementer/guidance/role.md +1 -0
  339. package/daemon/specs/agents/development/qa/agent.yaml +1 -1
  340. package/daemon/specs/agents/development/qa/guidance/role.md +1 -0
  341. package/daemon/specs/agents/orchestration/orchestrator/agent.yaml +1 -1
  342. package/daemon/specs/agents/orchestration/orchestrator/guidance/role.md +1 -0
  343. package/daemon/specs/agents/product-management/pm/agent.yaml +1 -0
  344. package/daemon/specs/agents/product-management/pm/guidance/role.md +13 -0
  345. package/daemon/specs/agents/review/independent-reviewer/agent.yaml +1 -1
  346. package/daemon/specs/agents/review/independent-reviewer/guidance/role.md +1 -0
  347. package/daemon/specs/agents/shared/agent.yaml +2 -0
  348. package/daemon/specs/agents/shared/skills/core/mission-slice-sop/SKILL.md +115 -0
  349. package/daemon/specs/agents/shared/skills/core/openrig-operator/SKILL.md +4 -4
  350. package/daemon/specs/agents/shared/skills/core/openrig-user/SKILL.md +69 -23
  351. package/daemon/specs/agents/shared/skills/pods/orchestration-team/SKILL.md +3 -3
  352. package/daemon/specs/rigs/focused/pm-team/CULTURE.md +4 -0
  353. package/daemon/specs/rigs/launch/kernel/agents/operator/agent/guidance/role.md +1 -1
  354. package/daemon/specs/rigs/launch/kernel/agents/operator/agent/startup/context.md +1 -1
  355. package/daemon/specs/rigs/preview/product-team/CULTURE.md +4 -0
  356. package/dist/build-info.d.ts +8 -0
  357. package/dist/build-info.d.ts.map +1 -0
  358. package/dist/build-info.js +11 -0
  359. package/dist/build-info.js.map +1 -0
  360. package/dist/commands/compact.d.ts +15 -0
  361. package/dist/commands/compact.d.ts.map +1 -0
  362. package/dist/commands/compact.js +62 -0
  363. package/dist/commands/compact.js.map +1 -0
  364. package/dist/commands/config-init-workspace.d.ts.map +1 -1
  365. package/dist/commands/config-init-workspace.js +20 -4
  366. package/dist/commands/config-init-workspace.js.map +1 -1
  367. package/dist/commands/daemon.d.ts.map +1 -1
  368. package/dist/commands/daemon.js +18 -2
  369. package/dist/commands/daemon.js.map +1 -1
  370. package/dist/commands/doctor.js +2 -2
  371. package/dist/commands/doctor.js.map +1 -1
  372. package/dist/commands/expand.js +1 -1
  373. package/dist/commands/expand.js.map +1 -1
  374. package/dist/commands/file.d.ts +7 -0
  375. package/dist/commands/file.d.ts.map +1 -0
  376. package/dist/commands/file.js +77 -0
  377. package/dist/commands/file.js.map +1 -0
  378. package/dist/commands/fork.d.ts +4 -0
  379. package/dist/commands/fork.d.ts.map +1 -0
  380. package/dist/commands/fork.js +101 -0
  381. package/dist/commands/fork.js.map +1 -0
  382. package/dist/commands/host.d.ts +34 -0
  383. package/dist/commands/host.d.ts.map +1 -0
  384. package/dist/commands/host.js +448 -0
  385. package/dist/commands/host.js.map +1 -0
  386. package/dist/commands/launch.d.ts.map +1 -1
  387. package/dist/commands/launch.js +34 -4
  388. package/dist/commands/launch.js.map +1 -1
  389. package/dist/commands/proof.d.ts +54 -0
  390. package/dist/commands/proof.d.ts.map +1 -0
  391. package/dist/commands/proof.js +311 -0
  392. package/dist/commands/proof.js.map +1 -0
  393. package/dist/commands/ps.d.ts +41 -7
  394. package/dist/commands/ps.d.ts.map +1 -1
  395. package/dist/commands/ps.js +357 -135
  396. package/dist/commands/ps.js.map +1 -1
  397. package/dist/commands/queue.d.ts +6 -0
  398. package/dist/commands/queue.d.ts.map +1 -1
  399. package/dist/commands/queue.js +154 -4
  400. package/dist/commands/queue.js.map +1 -1
  401. package/dist/commands/reconcile-session.d.ts.map +1 -1
  402. package/dist/commands/reconcile-session.js +2 -2
  403. package/dist/commands/reconcile-session.js.map +1 -1
  404. package/dist/commands/restore-check.d.ts.map +1 -1
  405. package/dist/commands/restore-check.js +93 -0
  406. package/dist/commands/restore-check.js.map +1 -1
  407. package/dist/commands/scope.d.ts.map +1 -1
  408. package/dist/commands/scope.js +191 -4
  409. package/dist/commands/scope.js.map +1 -1
  410. package/dist/commands/seat.d.ts +17 -0
  411. package/dist/commands/seat.d.ts.map +1 -1
  412. package/dist/commands/seat.js +145 -32
  413. package/dist/commands/seat.js.map +1 -1
  414. package/dist/commands/send.d.ts.map +1 -1
  415. package/dist/commands/send.js +161 -11
  416. package/dist/commands/send.js.map +1 -1
  417. package/dist/commands/start.d.ts +5 -0
  418. package/dist/commands/start.d.ts.map +1 -1
  419. package/dist/commands/start.js.map +1 -1
  420. package/dist/commands/startup-proof.d.ts +24 -0
  421. package/dist/commands/startup-proof.d.ts.map +1 -0
  422. package/dist/commands/startup-proof.js +100 -0
  423. package/dist/commands/startup-proof.js.map +1 -0
  424. package/dist/commands/unclaim.js +2 -2
  425. package/dist/commands/unclaim.js.map +1 -1
  426. package/dist/commands/up.d.ts +2 -0
  427. package/dist/commands/up.d.ts.map +1 -1
  428. package/dist/commands/up.js +79 -2
  429. package/dist/commands/up.js.map +1 -1
  430. package/dist/commands/watchdog.js +2 -2
  431. package/dist/commands/watchdog.js.map +1 -1
  432. package/dist/commands/workspace.js +6 -6
  433. package/dist/commands/workspace.js.map +1 -1
  434. package/dist/config-store.d.ts +4 -0
  435. package/dist/config-store.d.ts.map +1 -1
  436. package/dist/config-store.js +68 -0
  437. package/dist/config-store.js.map +1 -1
  438. package/dist/cross-host-executor.d.ts +1 -0
  439. package/dist/cross-host-executor.d.ts.map +1 -1
  440. package/dist/cross-host-executor.js +4 -1
  441. package/dist/cross-host-executor.js.map +1 -1
  442. package/dist/daemon-lifecycle.d.ts +23 -0
  443. package/dist/daemon-lifecycle.d.ts.map +1 -1
  444. package/dist/daemon-lifecycle.js +54 -6
  445. package/dist/daemon-lifecycle.js.map +1 -1
  446. package/dist/host-registry.d.ts +9 -0
  447. package/dist/host-registry.d.ts.map +1 -1
  448. package/dist/host-registry.js +32 -2
  449. package/dist/host-registry.js.map +1 -1
  450. package/dist/index.d.ts +5 -0
  451. package/dist/index.d.ts.map +1 -1
  452. package/dist/index.js +15 -1
  453. package/dist/index.js.map +1 -1
  454. package/dist/lib/codex-auth.d.ts +24 -0
  455. package/dist/lib/codex-auth.d.ts.map +1 -1
  456. package/dist/lib/codex-auth.js +89 -17
  457. package/dist/lib/codex-auth.js.map +1 -1
  458. package/dist/lib/file-transfer.d.ts +89 -0
  459. package/dist/lib/file-transfer.d.ts.map +1 -0
  460. package/dist/lib/file-transfer.js +300 -0
  461. package/dist/lib/file-transfer.js.map +1 -0
  462. package/dist/lib/hosts/fanout-contract.d.ts +33 -0
  463. package/dist/lib/hosts/fanout-contract.d.ts.map +1 -0
  464. package/dist/lib/hosts/fanout-contract.js +23 -0
  465. package/dist/lib/hosts/fanout-contract.js.map +1 -0
  466. package/dist/lib/scope/scope-audit.d.ts +11 -1
  467. package/dist/lib/scope/scope-audit.d.ts.map +1 -1
  468. package/dist/lib/scope/scope-audit.js +203 -2
  469. package/dist/lib/scope/scope-audit.js.map +1 -1
  470. package/dist/lib/scope/templates.d.ts +1 -0
  471. package/dist/lib/scope/templates.d.ts.map +1 -1
  472. package/dist/lib/scope/templates.js +9 -0
  473. package/dist/lib/scope/templates.js.map +1 -1
  474. package/dist/lib/scope-templates/backlog-deprecation.md +16 -0
  475. package/dist/lib/scope-templates/backlog-tech-debt.md +16 -0
  476. package/dist/lib/scope-templates/bug-fix.md +16 -0
  477. package/dist/lib/scope-templates/implementation-prd.md +33 -0
  478. package/dist/lib/scope-templates/mission-placeholder.md +41 -0
  479. package/dist/lib/scope-templates/mission-progress.md +2 -0
  480. package/dist/lib/scope-templates/mission-release.md +41 -0
  481. package/dist/lib/scope-templates/placeholder.md +12 -4
  482. package/dist/lib/scope-templates/proof.md +6 -0
  483. package/dist/lib/scope-templates/release-feature.md +14 -6
  484. package/dist/lib/scope-templates/research.md +16 -0
  485. package/dist/lib/scope-templates/slice-progress.md +2 -0
  486. package/dist/openrig-compat.d.ts +19 -0
  487. package/dist/openrig-compat.d.ts.map +1 -1
  488. package/dist/openrig-compat.js +31 -1
  489. package/dist/openrig-compat.js.map +1 -1
  490. package/dist/version.d.ts +5 -0
  491. package/dist/version.d.ts.map +1 -1
  492. package/dist/version.js +11 -1
  493. package/dist/version.js.map +1 -1
  494. package/package.json +1 -1
  495. package/ui/dist/assets/index-D69ZhNIr.js +598 -0
  496. package/ui/dist/assets/index-DJYun-8d.css +32 -0
  497. package/ui/dist/index.html +23 -2
  498. package/ui/dist/assets/index-CnqRX7A3.css +0 -32
  499. package/ui/dist/assets/index-CtL9jXFt.js +0 -582
@@ -22,6 +22,17 @@ interface ResumeMetadataRefresherDeps {
22
22
  resolveHomeDirByPid?: ResolveHomeDirByPid;
23
23
  sleep?: (ms: number) => Promise<void>;
24
24
  homeDir?: string;
25
+ contextUsageStore?: {
26
+ readSidecar(sessionName: string): {
27
+ ok: true;
28
+ data: {
29
+ session_id?: string;
30
+ };
31
+ } | {
32
+ ok: false;
33
+ reason: string;
34
+ };
35
+ };
25
36
  }
26
37
  export declare class ResumeMetadataRefresher {
27
38
  private sessionRegistry;
@@ -32,9 +43,40 @@ export declare class ResumeMetadataRefresher {
32
43
  private resolveHomeDirByPid;
33
44
  private sleep;
34
45
  private homeDir;
46
+ private contextUsageStore;
35
47
  constructor(deps: ResumeMetadataRefresherDeps);
36
- refresh(sessions: ResumeRefreshSession[]): Promise<void>;
37
- private captureCodexThreadId;
48
+ /**
49
+ * Refresh the live per-seat resume ledger.
50
+ *
51
+ * OPR.0.4.3.20 FR-4 (rev1 fix) — `opts.fillNullOnly` is the **snapshot-refresh**
52
+ * mode used by the RECURRING snapshot paths (periodic scheduler every ~5min +
53
+ * manual route). It does exactly two things, both LIGHTWEIGHT (file reads only,
54
+ * like FR-3's capture — Claude sidecar `readSidecar` + Codex `captureCodexThreadId`
55
+ * over pid-logs), and NOTHING heavy:
56
+ * 1. FILL-NULL ONLY — populate a null token from live state; NEVER clear an
57
+ * already-present token (rev1-r2). A present-but-not-currently-resumable
58
+ * Claude token SURVIVES the routine snapshot (stays in the ledger for FR-6 to
59
+ * surface as `stale/unverified — re-verify`) instead of being nulled before
60
+ * FR-6 exists. Invariant: **a snapshot refresh never clears a present token.**
61
+ * 2. NO heavyweight resumability PROBE — it never runs `probeClaudeResume`
62
+ * (which spawns a real `claude --resume` tmux session per present Claude seat).
63
+ * Spawning N probe processes every periodic tick, forever, against live seats
64
+ * is unacceptable recurring blast radius (rev1-r1). Resumability VERIFICATION
65
+ * is FR-6's on-demand job, not a recurring-snapshot op.
66
+ *
67
+ * Default (`fillNullOnly` falsy) preserves the legacy validate-and-probe-and-clear
68
+ * behavior for the non-snapshot / teardown auto-pre-down path (a one-time
69
+ * at-shutdown check — unchanged here; FR-6 §2.1b owns unifying the clear semantics
70
+ * across all callers).
71
+ */
72
+ refresh(sessions: ResumeRefreshSession[], opts?: {
73
+ fillNullOnly?: boolean;
74
+ }): Promise<void>;
75
+ /** Best-effort derive a Codex thread id from live pane state (getPanePid →
76
+ * codex descendant pids → pid-keyed logs sqlite). Async, returns undefined
77
+ * on timeout/absence. Public for reuse by adoption-boundary capture
78
+ * (OPR.0.4.3.20 FR-3) — no behavior change to the teardown-path scrape. */
79
+ captureCodexThreadId(sessionTarget: string): Promise<string | undefined>;
38
80
  private defaultProbeClaudeResume;
39
81
  private waitForProbeShellReady;
40
82
  }
@@ -1 +1 @@
1
- {"version":3,"file":"resume-metadata-refresher.d.ts","sourceRoot":"","sources":["../../src/domain/resume-metadata-refresher.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAGL,KAAK,mBAAmB,EACzB,MAAM,sBAAsB,CAAC;AAO9B,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACrB;AAED,UAAU,2BAA2B;IACnC,eAAe,EAAE,eAAe,CAAC;IACjC,WAAW,EAAE,WAAW,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC5E,sBAAsB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;IAC7D,iBAAiB,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,KAAK,OAAO,CAAC,WAAW,GAAG,eAAe,GAAG,cAAc,CAAC,CAAC;IAC/I,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;IAC1C,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,uBAAuB;IAClC,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,aAAa,CAA8D;IACnF,OAAO,CAAC,sBAAsB,CAAsC;IACpE,OAAO,CAAC,iBAAiB,CAA6H;IACtJ,OAAO,CAAC,mBAAmB,CAAsB;IACjD,OAAO,CAAC,KAAK,CAAgC;IAC7C,OAAO,CAAC,OAAO,CAAS;gBAEZ,IAAI,EAAE,2BAA2B;IAevC,OAAO,CAAC,QAAQ,EAAE,oBAAoB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;YAqBhD,oBAAoB;YAkBpB,wBAAwB;YA2DxB,sBAAsB;CAgBrC"}
1
+ {"version":3,"file":"resume-metadata-refresher.d.ts","sourceRoot":"","sources":["../../src/domain/resume-metadata-refresher.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAGL,KAAK,mBAAmB,EACzB,MAAM,sBAAsB,CAAC;AAO9B,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACrB;AAED,UAAU,2BAA2B;IACnC,eAAe,EAAE,eAAe,CAAC;IACjC,WAAW,EAAE,WAAW,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC5E,sBAAsB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;IAC7D,iBAAiB,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,KAAK,OAAO,CAAC,WAAW,GAAG,eAAe,GAAG,cAAc,CAAC,CAAC;IAC/I,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;IAC1C,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,OAAO,CAAC,EAAE,MAAM,CAAC;IAKjB,iBAAiB,CAAC,EAAE;QAClB,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG;YAAE,EAAE,EAAE,IAAI,CAAC;YAAC,IAAI,EAAE;gBAAE,UAAU,CAAC,EAAE,MAAM,CAAA;aAAE,CAAA;SAAE,GAAG;YAAE,EAAE,EAAE,KAAK,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,CAAC;KAC/G,CAAC;CACH;AAED,qBAAa,uBAAuB;IAClC,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,aAAa,CAA8D;IACnF,OAAO,CAAC,sBAAsB,CAAsC;IACpE,OAAO,CAAC,iBAAiB,CAA6H;IACtJ,OAAO,CAAC,mBAAmB,CAAsB;IACjD,OAAO,CAAC,KAAK,CAAgC;IAC7C,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,iBAAiB,CAA0D;gBAEvE,IAAI,EAAE,2BAA2B;IAgB7C;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACG,OAAO,CAAC,QAAQ,EAAE,oBAAoB,EAAE,EAAE,IAAI,CAAC,EAAE;QAAE,YAAY,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IA8EjG;;;gFAG4E;IACtE,oBAAoB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;YAkBhE,wBAAwB;YA2DxB,sBAAsB;CAgBrC"}
@@ -12,6 +12,7 @@ export class ResumeMetadataRefresher {
12
12
  resolveHomeDirByPid;
13
13
  sleep;
14
14
  homeDir;
15
+ contextUsageStore;
15
16
  constructor(deps) {
16
17
  this.sessionRegistry = deps.sessionRegistry;
17
18
  this.tmuxAdapter = deps.tmuxAdapter;
@@ -21,26 +22,111 @@ export class ResumeMetadataRefresher {
21
22
  this.probeClaudeResume = deps.probeClaudeResume ?? ((sessionName, resumeToken, cwd) => this.defaultProbeClaudeResume(sessionName, resumeToken, cwd));
22
23
  this.sleep = deps.sleep ?? ((ms) => new Promise((resolve) => setTimeout(resolve, ms)));
23
24
  this.homeDir = deps.homeDir ?? os.homedir();
25
+ this.contextUsageStore = deps.contextUsageStore ?? null;
24
26
  }
25
- async refresh(sessions) {
27
+ /**
28
+ * Refresh the live per-seat resume ledger.
29
+ *
30
+ * OPR.0.4.3.20 FR-4 (rev1 fix) — `opts.fillNullOnly` is the **snapshot-refresh**
31
+ * mode used by the RECURRING snapshot paths (periodic scheduler every ~5min +
32
+ * manual route). It does exactly two things, both LIGHTWEIGHT (file reads only,
33
+ * like FR-3's capture — Claude sidecar `readSidecar` + Codex `captureCodexThreadId`
34
+ * over pid-logs), and NOTHING heavy:
35
+ * 1. FILL-NULL ONLY — populate a null token from live state; NEVER clear an
36
+ * already-present token (rev1-r2). A present-but-not-currently-resumable
37
+ * Claude token SURVIVES the routine snapshot (stays in the ledger for FR-6 to
38
+ * surface as `stale/unverified — re-verify`) instead of being nulled before
39
+ * FR-6 exists. Invariant: **a snapshot refresh never clears a present token.**
40
+ * 2. NO heavyweight resumability PROBE — it never runs `probeClaudeResume`
41
+ * (which spawns a real `claude --resume` tmux session per present Claude seat).
42
+ * Spawning N probe processes every periodic tick, forever, against live seats
43
+ * is unacceptable recurring blast radius (rev1-r1). Resumability VERIFICATION
44
+ * is FR-6's on-demand job, not a recurring-snapshot op.
45
+ *
46
+ * Default (`fillNullOnly` falsy) preserves the legacy validate-and-probe-and-clear
47
+ * behavior for the non-snapshot / teardown auto-pre-down path (a one-time
48
+ * at-shutdown check — unchanged here; FR-6 §2.1b owns unifying the clear semantics
49
+ * across all callers).
50
+ */
51
+ async refresh(sessions, opts) {
52
+ const fillNullOnly = opts?.fillNullOnly === true;
26
53
  for (const session of sessions) {
27
54
  if (session.runtime === "codex") {
28
- if (session.resumeToken)
55
+ if (session.resumeToken) {
56
+ // OPR.0.4.3.20 FR-6.1 — lightweight equal-value freshness RE-STAMP on the
57
+ // periodic (fill-null) path so a present-and-still-valid token does not age
58
+ // to a FALSE `stale — re-verify` after the FR-6 threshold. Re-derive via the
59
+ // SAME pure-read helper FR-3 uses (getPanePid → pid-keyed logs; NO probe/spawn,
60
+ // NO `claude --resume`, NO launch) and refresh freshness ONLY on an EXACT match.
61
+ if (fillNullOnly) {
62
+ const derived = await this.captureCodexThreadId(session.sessionName);
63
+ if (derived && derived === session.resumeToken) {
64
+ // Present + matching = genuine positive evidence; stamp freshness via the
65
+ // FR-6 marker (never updateResumeToken → no token/provenance clobber).
66
+ this.sessionRegistry.markResumeProbeResult(session.sessionId, "resumable");
67
+ }
68
+ // DIFFERENT / ABSENT (rolled or underivable) → no-op: no re-stamp, no clobber.
69
+ // Left honest for FR-6 (stale — re-verify) + FR-7 restore-time rollback.
70
+ }
29
71
  continue;
72
+ }
30
73
  const threadId = await this.captureCodexThreadId(session.sessionName);
31
74
  if (threadId) {
32
75
  this.sessionRegistry.updateResumeToken(session.sessionId, "codex_id", threadId, "scrape");
33
76
  }
34
77
  continue;
35
78
  }
36
- if (session.runtime === "claude-code" && session.resumeToken) {
37
- const probe = await this.probeClaudeResume(session.sessionName, session.resumeToken, session.cwd ?? null);
38
- if (probe === "not_resumable") {
39
- this.sessionRegistry.clearResumeToken(session.sessionId);
79
+ if (session.runtime === "claude-code") {
80
+ if (!session.resumeToken) {
81
+ // OPR.0.4.3.20 FR-4 null-fill from the Claude status-line sidecar
82
+ // (best-effort; missing/parse-error/empty leaves null, never throws).
83
+ // `scrape` provenance (rank 0) fills a null slot and never clobbers a
84
+ // higher-trust adoption/hook/operator token (the FR-3 rank guard).
85
+ const sidecar = this.contextUsageStore?.readSidecar(session.sessionName);
86
+ if (sidecar?.ok) {
87
+ const token = sidecar.data.session_id;
88
+ if (typeof token === "string" && token.trim().length > 0) {
89
+ this.sessionRegistry.updateResumeToken(session.sessionId, "claude_id", token.trim(), "scrape");
90
+ }
91
+ }
92
+ continue;
40
93
  }
94
+ // Present token.
95
+ // OPR.0.4.3.20 FR-4 (rev1 fix) — in snapshot-refresh (fill-null-only) mode,
96
+ // return BEFORE the probe: never spawn the heavyweight `claude --resume`
97
+ // probe on the recurring snapshot path (rev1-r1), and never clear a present
98
+ // token (rev1-r2). A present-but-not-resumable token stays in the ledger for
99
+ // FR-6 to surface as `stale/unverified — re-verify`. Only the legacy/teardown
100
+ // default path probes + clears (a one-time at-shutdown check).
101
+ if (fillNullOnly) {
102
+ // OPR.0.4.3.20 FR-6.1 — equal-value freshness RE-STAMP on the periodic path
103
+ // (NO probe; never spawns `claude --resume`). Re-derive via the pure-read
104
+ // status-line sidecar and refresh freshness ONLY on an EXACT match to the
105
+ // stored token. Different / absent / parse-error / unreadable → no-op: no
106
+ // re-stamp and no token clobber (left honest for FR-6 + FR-7).
107
+ const sidecar = this.contextUsageStore?.readSidecar(session.sessionName);
108
+ if (sidecar?.ok) {
109
+ const derived = sidecar.data.session_id;
110
+ if (typeof derived === "string" && derived.trim().length > 0 && derived.trim() === session.resumeToken) {
111
+ this.sessionRegistry.markResumeProbeResult(session.sessionId, "resumable");
112
+ }
113
+ }
114
+ continue;
115
+ }
116
+ const probe = await this.probeClaudeResume(session.sessionName, session.resumeToken, session.cwd ?? null);
117
+ // OPR.0.4.3.20 FR-6 §2.1b — record the probe result WITHOUT clearing:
118
+ // `not_resumable`/`inconclusive` marks the present token stale (the plan
119
+ // surfaces it as `stale — re-verify`), `resumable` stamps freshness. The
120
+ // token stays put — a rolled-but-present token is no longer silently
121
+ // nulled; FR-7's rollback catches an actually-unresumable token at restore.
122
+ this.sessionRegistry.markResumeProbeResult(session.sessionId, probe);
41
123
  }
42
124
  }
43
125
  }
126
+ /** Best-effort derive a Codex thread id from live pane state (getPanePid →
127
+ * codex descendant pids → pid-keyed logs sqlite). Async, returns undefined
128
+ * on timeout/absence. Public for reuse by adoption-boundary capture
129
+ * (OPR.0.4.3.20 FR-3) — no behavior change to the teardown-path scrape. */
44
130
  async captureCodexThreadId(sessionTarget) {
45
131
  if (!this.tmuxAdapter.getPanePid)
46
132
  return undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"resume-metadata-refresher.js","sourceRoot":"","sources":["../../src/domain/resume-metadata-refresher.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"resume-metadata-refresher.js","sourceRoot":"","sources":["../../src/domain/resume-metadata-refresher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,QAAQ,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGlD,OAAO,EACL,0BAA0B,EAC1B,mCAAmC,GAEpC,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,uBAAuB,EACvB,wBAAwB,EACxB,iBAAiB,GAClB,MAAM,0BAA0B,CAAC;AA6BlC,MAAM,OAAO,uBAAuB;IAC1B,eAAe,CAAkB;IACjC,WAAW,CAAc;IACzB,aAAa,CAA8D;IAC3E,sBAAsB,CAAsC;IAC5D,iBAAiB,CAA6H;IAC9I,mBAAmB,CAAsB;IACzC,KAAK,CAAgC;IACrC,OAAO,CAAS;IAChB,iBAAiB,CAA0D;IAEnF,YAAY,IAAiC;QAC3C,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC;QAC5C,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;QACpC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,IAAI,oBAAoB,CAAC;QAChE,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,IAAI,0BAA0B,CAAC;QAClF,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,sBAAsB,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,yBAAyB,CAC9F,GAAG,EACH,IAAI,CAAC,mBAAmB,EACxB,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,EAAE,CAC7B,CAAC,CAAC;QACH,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,IAAI,CAAC,CAAC,WAAW,EAAE,WAAW,EAAE,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,wBAAwB,CAAC,WAAW,EAAE,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC;QACrJ,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;QACvF,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;QAC5C,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC;IAC1D,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACH,KAAK,CAAC,OAAO,CAAC,QAAgC,EAAE,IAAiC;QAC/E,MAAM,YAAY,GAAG,IAAI,EAAE,YAAY,KAAK,IAAI,CAAC;QACjD,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,IAAI,OAAO,CAAC,OAAO,KAAK,OAAO,EAAE,CAAC;gBAChC,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;oBACxB,0EAA0E;oBAC1E,4EAA4E;oBAC5E,6EAA6E;oBAC7E,gFAAgF;oBAChF,iFAAiF;oBACjF,IAAI,YAAY,EAAE,CAAC;wBACjB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;wBACrE,IAAI,OAAO,IAAI,OAAO,KAAK,OAAO,CAAC,WAAW,EAAE,CAAC;4BAC/C,0EAA0E;4BAC1E,uEAAuE;4BACvE,IAAI,CAAC,eAAe,CAAC,qBAAqB,CAAC,OAAO,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;wBAC7E,CAAC;wBACD,+EAA+E;wBAC/E,yEAAyE;oBAC3E,CAAC;oBACD,SAAS;gBACX,CAAC;gBAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;gBACtE,IAAI,QAAQ,EAAE,CAAC;oBACb,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,OAAO,CAAC,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;gBAC5F,CAAC;gBACD,SAAS;YACX,CAAC;YAED,IAAI,OAAO,CAAC,OAAO,KAAK,aAAa,EAAE,CAAC;gBACtC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;oBACzB,oEAAoE;oBACpE,sEAAsE;oBACtE,sEAAsE;oBACtE,mEAAmE;oBACnE,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,EAAE,WAAW,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;oBACzE,IAAI,OAAO,EAAE,EAAE,EAAE,CAAC;wBAChB,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC;wBACtC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;4BACzD,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,OAAO,CAAC,SAAS,EAAE,WAAW,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,QAAQ,CAAC,CAAC;wBACjG,CAAC;oBACH,CAAC;oBACD,SAAS;gBACX,CAAC;gBACD,iBAAiB;gBACjB,4EAA4E;gBAC5E,yEAAyE;gBACzE,4EAA4E;gBAC5E,6EAA6E;gBAC7E,8EAA8E;gBAC9E,+DAA+D;gBAC/D,IAAI,YAAY,EAAE,CAAC;oBACjB,4EAA4E;oBAC5E,0EAA0E;oBAC1E,0EAA0E;oBAC1E,0EAA0E;oBAC1E,+DAA+D;oBAC/D,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,EAAE,WAAW,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;oBACzE,IAAI,OAAO,EAAE,EAAE,EAAE,CAAC;wBAChB,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC;wBACxC,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,IAAI,EAAE,KAAK,OAAO,CAAC,WAAW,EAAE,CAAC;4BACvG,IAAI,CAAC,eAAe,CAAC,qBAAqB,CAAC,OAAO,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;wBAC7E,CAAC;oBACH,CAAC;oBACD,SAAS;gBACX,CAAC;gBACD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC;gBAC1G,sEAAsE;gBACtE,yEAAyE;gBACzE,yEAAyE;gBACzE,qEAAqE;gBACrE,4EAA4E;gBAC5E,IAAI,CAAC,eAAe,CAAC,qBAAqB,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YACvE,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;gFAG4E;IAC5E,KAAK,CAAC,oBAAoB,CAAC,aAAqB;QAC9C,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU;YAAE,OAAO,SAAS,CAAC;QAEnD,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC;YAC7C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;YAClE,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAM,SAAS,GAAG,uBAAuB,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,QAAQ,CAAC,CAAC;gBAC1E,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;oBACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAC;oBACvD,IAAI,QAAQ;wBAAE,OAAO,QAAQ,CAAC;gBAChC,CAAC;YACH,CAAC;YACD,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACxB,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAEO,KAAK,CAAC,wBAAwB,CACpC,WAAmB,EACnB,WAAmB,EACnB,GAAmB;QAEnB,MAAM,OAAO,GAAG,wBAAwB,CAAC,aAAa,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;QAClF,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,eAAe,CAAC;QACzB,CAAC;QAED,MAAM,YAAY,GAAG,kBAAkB,gBAAgB,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;QAClG,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;QACtG,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YACf,OAAO,cAAc,CAAC;QACxB,CAAC;QAED,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,YAAY,CAAC,CAAC;YACnE,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,OAAO,cAAc,CAAC;YACxB,CAAC;YAED,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;YACpE,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;gBACb,OAAO,cAAc,CAAC;YACxB,CAAC;YACD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;YACvE,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;gBACd,OAAO,cAAc,CAAC;YACxB,CAAC;YAED,MAAM,QAAQ,GAAG,EAAE,CAAC;YACpB,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,QAAQ,EAAE,OAAO,EAAE,EAAE,CAAC;gBACpD,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;gBACxE,MAAM,WAAW,GAAG,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;gBACxF,MAAM,MAAM,GAAG,uBAAuB,CAAC;oBACrC,OAAO,EAAE,aAAa;oBACtB,WAAW;oBACX,WAAW;iBACZ,CAAC,CAAC;gBAEH,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;oBAChC,OAAO,WAAW,CAAC;gBACrB,CAAC;gBACD,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;oBAC/B,OAAO,eAAe,CAAC;gBACzB,CAAC;gBAED,IAAI,OAAO,GAAG,QAAQ,GAAG,CAAC,EAAE,CAAC;oBAC3B,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACxB,CAAC;YACH,CAAC;YAED,OAAO,cAAc,CAAC;QACxB,CAAC;gBAAS,CAAC;YACT,MAAM,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,sBAAsB,CAAC,WAAmB;QACtD,MAAM,QAAQ,GAAG,EAAE,CAAC;QAEpB,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,QAAQ,EAAE,OAAO,EAAE,EAAE,CAAC;YACpD,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;YACvE,MAAM,WAAW,GAAG,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YACvF,IAAI,iBAAiB,CAAC,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC;gBACpD,OAAO,IAAI,CAAC;YACd,CAAC;YACD,IAAI,OAAO,GAAG,QAAQ,GAAG,CAAC,EAAE,CAAC;gBAC3B,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACxB,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;CACF;AAED,SAAS,oBAAoB;IAC3B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,kBAAkB,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;QACtF,OAAO,MAAM;aACV,KAAK,CAAC,IAAI,CAAC;aACX,KAAK,CAAC,CAAC,CAAC;aACR,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;aAC1B,MAAM,CAAC,OAAO,CAAC;aACf,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YACZ,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;YACnD,IAAI,CAAC,KAAK;gBAAE,OAAO,IAAI,CAAC;YACxB,OAAO;gBACL,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBACrB,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBACtB,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE;aACxB,CAAC;QACJ,CAAC,CAAC;aACD,MAAM,CAAC,CAAC,GAAG,EAAyD,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC;IAC1F,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAS,uBAAuB,CAC9B,SAAgE,EAChE,SAAiB;IAEjB,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAmD,CAAC;IACpF,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;QAC7B,MAAM,QAAQ,GAAG,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACvD,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QACxD,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC5C,CAAC;IAED,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,KAAK,GAAG,CAAC,GAAW,EAAQ,EAAE;QAClC,KAAK,MAAM,KAAK,IAAI,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC;YACpD,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACjB,IAAI,qBAAqB,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;gBACzC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC;IACH,CAAC,CAAC;IAEF,KAAK,CAAC,SAAS,CAAC,CAAC;IACjB,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,yBAAyB,CAChC,GAAW,EACX,mBAAwC,EACxC,OAAe;IAEf,OAAO,mCAAmC,CAAC,GAAG,EAAE,CAAC,mBAAmB,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;AACrG,CAAC;AAED,SAAS,qBAAqB,CAAC,OAAe;IAC5C,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC3D,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;QAC3B,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;QACnD,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACzC,OAAO,IAAI,KAAK,OAAO,CAAC;IAC1B,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAa;IACrC,OAAO,KAAK,CAAC,OAAO,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;AACxE,CAAC;AAED,SAAS,eAAe,CAAC,GAA8B,EAAE,OAAe;IACtE,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,GAAG,EAAE,CAAC;QACxB,OAAO,OAAO,CAAC,GAAG,EAAE,CAAC;IACvB,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,50 @@
1
+ import { type ResumeType } from "./resume-token-validation.js";
2
+ export interface ResumeTokenCaptureDeps {
3
+ contextUsageStore?: {
4
+ readSidecar(sessionName: string): {
5
+ ok: true;
6
+ data: {
7
+ session_id?: string;
8
+ };
9
+ } | {
10
+ ok: false;
11
+ reason: string;
12
+ };
13
+ } | null;
14
+ resumeTokenCapturer?: {
15
+ captureCodexThreadId(sessionName: string): Promise<string | undefined>;
16
+ } | null;
17
+ }
18
+ export type ResumeTokenDeriveResult =
19
+ /** Runtime has no resume token (terminal / unknown) — not a failure, no event. */
20
+ {
21
+ outcome: "exempt";
22
+ }
23
+ /** A required derive dependency is absent (older wiring / test) — silent no-op. */
24
+ | {
25
+ outcome: "noop";
26
+ }
27
+ /** A live token was derived + format-validated. The caller persists it. */
28
+ | {
29
+ outcome: "captured";
30
+ resumeType: ResumeType;
31
+ token: string;
32
+ }
33
+ /** Derivation ran but produced no usable token — the caller emits a skip event. */
34
+ | {
35
+ outcome: "skipped";
36
+ reason: "missing_sidecar" | "parse_error" | "probe_timeout" | "invalid_token";
37
+ };
38
+ /**
39
+ * Derive a runtime's resume token from live, read-only sources:
40
+ * claude-code → the status-line sidecar's session_id (a file read)
41
+ * codex → the thread id derived from live pid-keyed logs
42
+ * Returns a structured outcome; never throws for a missing/invalid token
43
+ * (those are honest skips). ANY unexpected throw from a dependency is the
44
+ * caller's to swallow (capture must never fail or block its lifecycle op).
45
+ */
46
+ export declare function deriveResumeToken(input: {
47
+ runtime: string | null;
48
+ sessionName: string;
49
+ }, deps: ResumeTokenCaptureDeps): Promise<ResumeTokenDeriveResult>;
50
+ //# sourceMappingURL=resume-token-capture.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resume-token-capture.d.ts","sourceRoot":"","sources":["../../src/domain/resume-token-capture.ts"],"names":[],"mappings":"AAkBA,OAAO,EAA6C,KAAK,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAE1G,MAAM,WAAW,sBAAsB;IACrC,iBAAiB,CAAC,EAAE;QAClB,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG;YAAE,EAAE,EAAE,IAAI,CAAC;YAAC,IAAI,EAAE;gBAAE,UAAU,CAAC,EAAE,MAAM,CAAA;aAAE,CAAA;SAAE,GAAG;YAAE,EAAE,EAAE,KAAK,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,CAAC;KAC/G,GAAG,IAAI,CAAC;IACT,mBAAmB,CAAC,EAAE;QACpB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;KACxE,GAAG,IAAI,CAAC;CACV;AAED,MAAM,MAAM,uBAAuB;AACjC,kFAAkF;AAChF;IAAE,OAAO,EAAE,QAAQ,CAAA;CAAE;AACvB,mFAAmF;GACjF;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE;AACrB,2EAA2E;GACzE;IAAE,OAAO,EAAE,UAAU,CAAC;IAAC,UAAU,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE;AAChE,mFAAmF;GACjF;IAAE,OAAO,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,iBAAiB,GAAG,aAAa,GAAG,eAAe,GAAG,eAAe,CAAA;CAAE,CAAC;AAE1G;;;;;;;GAOG;AACH,wBAAsB,iBAAiB,CACrC,KAAK,EAAE;IAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,EACtD,IAAI,EAAE,sBAAsB,GAC3B,OAAO,CAAC,uBAAuB,CAAC,CA8BlC"}
@@ -0,0 +1,63 @@
1
+ // OPR.0.4.3.04 B2 — the PURE, reusable resume-token DERIVE helper.
2
+ //
3
+ // This is the shared derivation core behind FR-3's adoption-boundary capture
4
+ // (ClaimService.captureResumeTokenOnAdoption) AND the seat-handover discovered-
5
+ // mode capture. It performs REUSE-ONLY, PURE READ derivation — no pane writes,
6
+ // no launch, no persistence, no event emission. The CALLER owns persistence
7
+ // (updateResumeToken) and event emission (captured / preserved / skipped), so
8
+ // each caller keeps its own provenance + audit semantics.
9
+ //
10
+ // The derived token is credential-class: it is NEVER logged, echoed, or placed
11
+ // in any returned message/error. Only the caller's redacted persistence path
12
+ // ever touches it. Honest failure = a structured skip reason (no token), never
13
+ // a fabricated value.
14
+ //
15
+ // FR-3's scope is UNCHANGED: this helper is derive-only and does not alter
16
+ // which lifecycle ops adopt. It only removes the duplication between the two
17
+ // derive sites the ruling asked us to share.
18
+ import { resumeTypeForRuntime, validateResumeToken } from "./resume-token-validation.js";
19
+ /**
20
+ * Derive a runtime's resume token from live, read-only sources:
21
+ * claude-code → the status-line sidecar's session_id (a file read)
22
+ * codex → the thread id derived from live pid-keyed logs
23
+ * Returns a structured outcome; never throws for a missing/invalid token
24
+ * (those are honest skips). ANY unexpected throw from a dependency is the
25
+ * caller's to swallow (capture must never fail or block its lifecycle op).
26
+ */
27
+ export async function deriveResumeToken(input, deps) {
28
+ const resumeType = resumeTypeForRuntime(input.runtime);
29
+ if (!resumeType)
30
+ return { outcome: "exempt" }; // terminal / unknown — exempt, not a failure
31
+ const runtime = input.runtime; // non-null: resumeType is set only for claude-code / codex
32
+ let token;
33
+ if (runtime === "claude-code") {
34
+ if (!deps.contextUsageStore)
35
+ return { outcome: "noop" }; // dep absent — silent no-op
36
+ const sidecar = deps.contextUsageStore.readSidecar(input.sessionName);
37
+ if (!sidecar.ok) {
38
+ return { outcome: "skipped", reason: sidecar.reason === "parse_error" ? "parse_error" : "missing_sidecar" };
39
+ }
40
+ const sid = sidecar.data.session_id;
41
+ if (typeof sid === "string" && sid.trim().length > 0)
42
+ token = sid.trim();
43
+ else
44
+ return { outcome: "skipped", reason: "missing_sidecar" };
45
+ }
46
+ else if (runtime === "codex") {
47
+ if (!deps.resumeTokenCapturer)
48
+ return { outcome: "noop" }; // dep absent — silent no-op
49
+ token = await deps.resumeTokenCapturer.captureCodexThreadId(input.sessionName);
50
+ if (!token)
51
+ return { outcome: "skipped", reason: "probe_timeout" };
52
+ }
53
+ else {
54
+ return { outcome: "noop" }; // resumeType set but runtime is not one we derive — defensive
55
+ }
56
+ // Defensive format validation before the caller persists — a malformed token
57
+ // is an honest skip, never a bad write (validity-before-rank).
58
+ const validation = validateResumeToken(runtime, token);
59
+ if (!validation.ok)
60
+ return { outcome: "skipped", reason: "invalid_token" };
61
+ return { outcome: "captured", resumeType: validation.resumeType, token: validation.token };
62
+ }
63
+ //# sourceMappingURL=resume-token-capture.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resume-token-capture.js","sourceRoot":"","sources":["../../src/domain/resume-token-capture.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,EAAE;AACF,6EAA6E;AAC7E,gFAAgF;AAChF,+EAA+E;AAC/E,4EAA4E;AAC5E,8EAA8E;AAC9E,0DAA0D;AAC1D,EAAE;AACF,+EAA+E;AAC/E,6EAA6E;AAC7E,+EAA+E;AAC/E,sBAAsB;AACtB,EAAE;AACF,2EAA2E;AAC3E,6EAA6E;AAC7E,6CAA6C;AAE7C,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAmB,MAAM,8BAA8B,CAAC;AAqB1G;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,KAAsD,EACtD,IAA4B;IAE5B,MAAM,UAAU,GAAG,oBAAoB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACvD,IAAI,CAAC,UAAU;QAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,6CAA6C;IAE5F,MAAM,OAAO,GAAG,KAAK,CAAC,OAAiB,CAAC,CAAC,2DAA2D;IAEpG,IAAI,KAAyB,CAAC;IAC9B,IAAI,OAAO,KAAK,aAAa,EAAE,CAAC;QAC9B,IAAI,CAAC,IAAI,CAAC,iBAAiB;YAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,4BAA4B;QACrF,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QACtE,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC;YAChB,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,KAAK,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,iBAAiB,EAAE,CAAC;QAC9G,CAAC;QACD,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC;QACpC,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;YAAE,KAAK,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;;YACpE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC;IAChE,CAAC;SAAM,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;QAC/B,IAAI,CAAC,IAAI,CAAC,mBAAmB;YAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,4BAA4B;QACvF,KAAK,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,oBAAoB,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAC/E,IAAI,CAAC,KAAK;YAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC;IACrE,CAAC;SAAM,CAAC;QACN,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,8DAA8D;IAC5F,CAAC;IAED,6EAA6E;IAC7E,+DAA+D;IAC/D,MAAM,UAAU,GAAG,mBAAmB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACvD,IAAI,CAAC,UAAU,CAAC,EAAE;QAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC;IAE3E,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,CAAC,UAAU,EAAE,KAAK,EAAE,UAAU,CAAC,KAAK,EAAE,CAAC;AAC7F,CAAC"}
@@ -0,0 +1,19 @@
1
+ import type { ComposedMissionReview } from "./types.js";
2
+ export interface BriefSpine {
3
+ building: string;
4
+ progress: string;
5
+ proven: string;
6
+ needsYou: string;
7
+ }
8
+ /** The four generated section bodies — derived from the same composer
9
+ * queries FR-7 renders (no second computation path). */
10
+ export declare function renderBriefSpine(m: ComposedMissionReview): BriefSpine;
11
+ /**
12
+ * Section-scoped application: replaces ONLY the four spine section bodies in
13
+ * an existing MISSION_BRIEF.md, preserving every other byte (hand-authored
14
+ * "What & why"/"Pointers", the H1, frontmatter, ordering). Returns null when
15
+ * the brief does not carry the pinned schema (never guess-rewrite a
16
+ * malformed brief — the audit owns that finding).
17
+ */
18
+ export declare function applyBriefSpine(briefContent: string, spine: BriefSpine): string | null;
19
+ //# sourceMappingURL=brief-spine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brief-spine.d.ts","sourceRoot":"","sources":["../../../src/domain/review/brief-spine.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAExD,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;yDACyD;AACzD,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,qBAAqB,GAAG,UAAU,CA6BrE;AASD;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,MAAM,GAAG,IAAI,CAiCtF"}
@@ -0,0 +1,86 @@
1
+ // Living Notes Packet 2 — MISSION_BRIEF status-spine convergence (OPR.0.4.4.20 FR-8).
2
+ //
3
+ // ONE computation path: the spine sections (Building / Progress / Proven /
4
+ // Needs you) are rendered HERE from the composed mission review; the tab
5
+ // serves them always-fresh (pure projection, zero writes) and the SAME
6
+ // strings are written into MISSION_BRIEF.md ONLY at the deliberate freeze
7
+ // moments — never a watcher, never a continuous writer. Generation is
8
+ // SECTION-SCOPED: hand-authored prose in non-spine sections ("What & why",
9
+ // "Pointers") is byte-untouched, and the pinned exact-order H2 schema the
10
+ // scope audit enforces is preserved by construction (the header list is
11
+ // IMPORTED from the audit, not re-declared).
12
+ import { MISSION_BRIEF_HEADERS } from "../scope/scope-audit.js";
13
+ /** The four generated section bodies — derived from the same composer
14
+ * queries FR-7 renders (no second computation path). */
15
+ export function renderBriefSpine(m) {
16
+ const byLane = (lane) => m.board.filter((b) => b.laneLabel === lane);
17
+ const buildingRows = [...byLane("BUILD"), ...byLane("PLAN")];
18
+ const building = buildingRows.length === 0
19
+ ? "_Nothing in flight._"
20
+ : buildingRows.map((b) => `- ${b.slice} — ${b.laneLabel} · ${b.stageCell}`).join("\n");
21
+ const progress = m.board.length === 0
22
+ ? "_No slices yet._"
23
+ : ["INTENT", "PLAN", "BUILD", "REVIEW", "LOCKED"]
24
+ .map((lane) => `- ${lane}: ${byLane(lane).length}`)
25
+ .join("\n");
26
+ const greenRows = m.ledger.filter((r) => r.green);
27
+ const proven = greenRows.length === 0
28
+ ? "_Nothing proven yet._"
29
+ : greenRows
30
+ .map((r) => `- ${r.slice} — proven at ${r.candidateSha ?? "unknown"} · merged ${r.mergeSha ?? "UNMERGED"}`)
31
+ .join("\n") + `\n\nCut-gating: ${m.cutComplete ? "COMPLETE" : "incomplete"} — ${m.cutCompleteBasis}`;
32
+ const needsYou = m.needsYou.items.length === 0
33
+ ? `_${m.needsYou.provenance}_`
34
+ : m.needsYou.items.map((i) => `- ${i.source === "derived" ? "▲" : "●"} ${i.summary} (${i.leg})`).join("\n");
35
+ return { building, progress, proven, needsYou };
36
+ }
37
+ const SPINE_BY_HEADER = {
38
+ Building: "building",
39
+ Progress: "progress",
40
+ Proven: "proven",
41
+ "Needs you": "needsYou",
42
+ };
43
+ /**
44
+ * Section-scoped application: replaces ONLY the four spine section bodies in
45
+ * an existing MISSION_BRIEF.md, preserving every other byte (hand-authored
46
+ * "What & why"/"Pointers", the H1, frontmatter, ordering). Returns null when
47
+ * the brief does not carry the pinned schema (never guess-rewrite a
48
+ * malformed brief — the audit owns that finding).
49
+ */
50
+ export function applyBriefSpine(briefContent, spine) {
51
+ const lines = briefContent.split("\n");
52
+ // Locate each pinned H2 (exact-order schema).
53
+ const headerIdx = [];
54
+ const headerName = [];
55
+ for (let i = 0; i < lines.length; i++) {
56
+ const m = lines[i].match(/^##\s+(.+?)\s*$/);
57
+ if (m) {
58
+ headerIdx.push(i);
59
+ headerName.push(m[1]);
60
+ }
61
+ }
62
+ // The brief must carry the exact pinned sequence to be generation-safe.
63
+ if (headerName.length !== MISSION_BRIEF_HEADERS.length)
64
+ return null;
65
+ for (let i = 0; i < MISSION_BRIEF_HEADERS.length; i++) {
66
+ if (headerName[i] !== MISSION_BRIEF_HEADERS[i])
67
+ return null;
68
+ }
69
+ const out = [];
70
+ out.push(...lines.slice(0, headerIdx[0]));
71
+ for (let h = 0; h < headerIdx.length; h++) {
72
+ const start = headerIdx[h];
73
+ const end = h + 1 < headerIdx.length ? headerIdx[h + 1] : lines.length;
74
+ const name = headerName[h];
75
+ const spineKey = SPINE_BY_HEADER[name];
76
+ out.push(lines[start]);
77
+ if (spineKey) {
78
+ out.push("", spine[spineKey], "");
79
+ }
80
+ else {
81
+ out.push(...lines.slice(start + 1, end));
82
+ }
83
+ }
84
+ return out.join("\n");
85
+ }
86
+ //# sourceMappingURL=brief-spine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brief-spine.js","sourceRoot":"","sources":["../../../src/domain/review/brief-spine.ts"],"names":[],"mappings":"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"}