@openrig/cli 0.5.1 → 0.5.2

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 (473) hide show
  1. package/daemon/assets/guidance/openrig-start.md +21 -64
  2. package/daemon/dist/adapters/codex-runtime-adapter.d.ts +11 -2
  3. package/daemon/dist/adapters/codex-runtime-adapter.d.ts.map +1 -1
  4. package/daemon/dist/adapters/codex-runtime-adapter.js +18 -10
  5. package/daemon/dist/adapters/codex-runtime-adapter.js.map +1 -1
  6. package/daemon/dist/build-info.js +3 -3
  7. package/daemon/dist/domain/codex-thread-id.d.ts +5 -2
  8. package/daemon/dist/domain/codex-thread-id.d.ts.map +1 -1
  9. package/daemon/dist/domain/codex-thread-id.js +9 -4
  10. package/daemon/dist/domain/codex-thread-id.js.map +1 -1
  11. package/daemon/dist/domain/crash-cart-conductor.d.ts +173 -0
  12. package/daemon/dist/domain/crash-cart-conductor.d.ts.map +1 -0
  13. package/daemon/dist/domain/crash-cart-conductor.js +233 -0
  14. package/daemon/dist/domain/crash-cart-conductor.js.map +1 -0
  15. package/daemon/dist/domain/crash-cart-probes.d.ts +7 -6
  16. package/daemon/dist/domain/crash-cart-probes.d.ts.map +1 -1
  17. package/daemon/dist/domain/crash-cart-probes.js +57 -7
  18. package/daemon/dist/domain/crash-cart-probes.js.map +1 -1
  19. package/daemon/dist/domain/hosts/fanout-contract.d.ts +4 -0
  20. package/daemon/dist/domain/hosts/fanout-contract.d.ts.map +1 -1
  21. package/daemon/dist/domain/hosts/fanout-contract.js +15 -0
  22. package/daemon/dist/domain/hosts/fanout-contract.js.map +1 -1
  23. package/daemon/dist/domain/hosts/hosts-registry-reader.d.ts +11 -0
  24. package/daemon/dist/domain/hosts/hosts-registry-reader.d.ts.map +1 -1
  25. package/daemon/dist/domain/hosts/hosts-registry-reader.js +34 -1
  26. package/daemon/dist/domain/hosts/hosts-registry-reader.js.map +1 -1
  27. package/daemon/dist/domain/model-divergence/current-generation-record.d.ts +67 -0
  28. package/daemon/dist/domain/model-divergence/current-generation-record.d.ts.map +1 -0
  29. package/daemon/dist/domain/model-divergence/current-generation-record.js +204 -0
  30. package/daemon/dist/domain/model-divergence/current-generation-record.js.map +1 -0
  31. package/daemon/dist/domain/model-divergence/effective-model-readers.d.ts +13 -0
  32. package/daemon/dist/domain/model-divergence/effective-model-readers.d.ts.map +1 -0
  33. package/daemon/dist/domain/model-divergence/effective-model-readers.js +163 -0
  34. package/daemon/dist/domain/model-divergence/effective-model-readers.js.map +1 -0
  35. package/daemon/dist/domain/model-divergence/model-divergence-monitor.d.ts +113 -0
  36. package/daemon/dist/domain/model-divergence/model-divergence-monitor.d.ts.map +1 -0
  37. package/daemon/dist/domain/model-divergence/model-divergence-monitor.js +190 -0
  38. package/daemon/dist/domain/model-divergence/model-divergence-monitor.js.map +1 -0
  39. package/daemon/dist/domain/predecessor-recap-resolver.d.ts +10 -3
  40. package/daemon/dist/domain/predecessor-recap-resolver.d.ts.map +1 -1
  41. package/daemon/dist/domain/predecessor-recap-resolver.js +61 -14
  42. package/daemon/dist/domain/predecessor-recap-resolver.js.map +1 -1
  43. package/daemon/dist/domain/resume-metadata-refresher.d.ts +11 -2
  44. package/daemon/dist/domain/resume-metadata-refresher.d.ts.map +1 -1
  45. package/daemon/dist/domain/resume-metadata-refresher.js +17 -9
  46. package/daemon/dist/domain/resume-metadata-refresher.js.map +1 -1
  47. package/daemon/dist/domain/review/gather.d.ts.map +1 -1
  48. package/daemon/dist/domain/review/gather.js +3 -2
  49. package/daemon/dist/domain/review/gather.js.map +1 -1
  50. package/daemon/dist/domain/{rig-policy/rig-policy-defaults.d.ts → rig-mode/rig-mode-defaults.d.ts} +2 -2
  51. package/daemon/dist/domain/rig-mode/rig-mode-defaults.d.ts.map +1 -0
  52. package/daemon/dist/domain/{rig-policy/rig-policy-defaults.js → rig-mode/rig-mode-defaults.js} +1 -1
  53. package/daemon/dist/domain/rig-mode/rig-mode-defaults.js.map +1 -0
  54. package/{node_modules/@openrig/daemon/dist/domain/rig-policy/rig-policy-store.d.ts → daemon/dist/domain/rig-mode/rig-mode-store.d.ts} +6 -6
  55. package/daemon/dist/domain/rig-mode/rig-mode-store.d.ts.map +1 -0
  56. package/daemon/dist/domain/{rig-policy/rig-policy-store.js → rig-mode/rig-mode-store.js} +5 -5
  57. package/daemon/dist/domain/rig-mode/rig-mode-store.js.map +1 -0
  58. package/daemon/dist/domain/{rig-policy/rig-policy-types.d.ts → rig-mode/rig-mode-types.d.ts} +1 -1
  59. package/daemon/dist/domain/rig-mode/rig-mode-types.d.ts.map +1 -0
  60. package/{node_modules/@openrig/daemon/dist/domain/rig-policy/rig-policy-types.js → daemon/dist/domain/rig-mode/rig-mode-types.js} +1 -1
  61. package/daemon/dist/domain/rig-mode/rig-mode-types.js.map +1 -0
  62. package/{node_modules/@openrig/daemon/dist/domain/rig-policy/rig-policy-validator.d.ts → daemon/dist/domain/rig-mode/rig-mode-validator.d.ts} +2 -2
  63. package/daemon/dist/domain/rig-mode/rig-mode-validator.d.ts.map +1 -0
  64. package/daemon/dist/domain/{rig-policy/rig-policy-validator.js → rig-mode/rig-mode-validator.js} +3 -3
  65. package/daemon/dist/domain/rig-mode/rig-mode-validator.js.map +1 -0
  66. package/daemon/dist/domain/rigspec-schema.d.ts +7 -0
  67. package/daemon/dist/domain/rigspec-schema.d.ts.map +1 -1
  68. package/daemon/dist/domain/rigspec-schema.js +7 -0
  69. package/daemon/dist/domain/rigspec-schema.js.map +1 -1
  70. package/daemon/dist/domain/scope/node-file.d.ts +37 -0
  71. package/daemon/dist/domain/scope/node-file.d.ts.map +1 -0
  72. package/daemon/dist/domain/scope/node-file.js +55 -0
  73. package/daemon/dist/domain/scope/node-file.js.map +1 -0
  74. package/daemon/dist/domain/scope/plan-lock-artifacts.d.ts +11 -0
  75. package/daemon/dist/domain/scope/plan-lock-artifacts.d.ts.map +1 -1
  76. package/daemon/dist/domain/scope/plan-lock-artifacts.js +40 -0
  77. package/daemon/dist/domain/scope/plan-lock-artifacts.js.map +1 -1
  78. package/daemon/dist/domain/scope/scope-approve.d.ts +4 -0
  79. package/daemon/dist/domain/scope/scope-approve.d.ts.map +1 -1
  80. package/daemon/dist/domain/scope/scope-approve.js +56 -7
  81. package/daemon/dist/domain/scope/scope-approve.js.map +1 -1
  82. package/daemon/dist/domain/scope/scope-audit.d.ts +1 -1
  83. package/daemon/dist/domain/scope/scope-audit.d.ts.map +1 -1
  84. package/daemon/dist/domain/scope/scope-audit.js.map +1 -1
  85. package/daemon/dist/domain/scope/scope-view-projection.d.ts.map +1 -1
  86. package/daemon/dist/domain/scope/scope-view-projection.js +5 -2
  87. package/daemon/dist/domain/scope/scope-view-projection.js.map +1 -1
  88. package/daemon/dist/domain/seat-handover-service.d.ts +32 -15
  89. package/daemon/dist/domain/seat-handover-service.d.ts.map +1 -1
  90. package/daemon/dist/domain/seat-handover-service.js +42 -17
  91. package/daemon/dist/domain/seat-handover-service.js.map +1 -1
  92. package/daemon/dist/domain/seat-identity-reconciler.d.ts +17 -0
  93. package/daemon/dist/domain/seat-identity-reconciler.d.ts.map +1 -1
  94. package/daemon/dist/domain/seat-identity-reconciler.js +22 -0
  95. package/daemon/dist/domain/seat-identity-reconciler.js.map +1 -1
  96. package/daemon/dist/domain/session-jsonl.js +1 -1
  97. package/daemon/dist/domain/session-jsonl.js.map +1 -1
  98. package/daemon/dist/domain/slices/slice-detail-projector.d.ts.map +1 -1
  99. package/daemon/dist/domain/slices/slice-detail-projector.js +14 -2
  100. package/daemon/dist/domain/slices/slice-detail-projector.js.map +1 -1
  101. package/daemon/dist/domain/slices/slice-indexer.d.ts.map +1 -1
  102. package/daemon/dist/domain/slices/slice-indexer.js +16 -3
  103. package/daemon/dist/domain/slices/slice-indexer.js.map +1 -1
  104. package/daemon/dist/domain/spec-live-conformance.d.ts +22 -0
  105. package/daemon/dist/domain/spec-live-conformance.d.ts.map +1 -1
  106. package/daemon/dist/domain/spec-live-conformance.js +35 -0
  107. package/daemon/dist/domain/spec-live-conformance.js.map +1 -1
  108. package/daemon/dist/domain/sync-site-wrap.d.ts +9 -0
  109. package/daemon/dist/domain/sync-site-wrap.d.ts.map +1 -1
  110. package/daemon/dist/domain/sync-site-wrap.js +11 -0
  111. package/daemon/dist/domain/sync-site-wrap.js.map +1 -1
  112. package/daemon/dist/domain/types.d.ts +15 -0
  113. package/daemon/dist/domain/types.d.ts.map +1 -1
  114. package/daemon/dist/domain/types.js.map +1 -1
  115. package/daemon/dist/domain/user-settings/settings-store.d.ts +1 -1
  116. package/daemon/dist/domain/user-settings/settings-store.d.ts.map +1 -1
  117. package/daemon/dist/domain/user-settings/settings-store.js +20 -0
  118. package/daemon/dist/domain/user-settings/settings-store.js.map +1 -1
  119. package/daemon/dist/domain/watchdog-auto-registration.d.ts +7 -0
  120. package/daemon/dist/domain/watchdog-auto-registration.d.ts.map +1 -1
  121. package/daemon/dist/domain/watchdog-auto-registration.js +27 -0
  122. package/daemon/dist/domain/watchdog-auto-registration.js.map +1 -1
  123. package/daemon/dist/domain/workspace/workspace-doctor.d.ts.map +1 -1
  124. package/daemon/dist/domain/workspace/workspace-doctor.js +4 -3
  125. package/daemon/dist/domain/workspace/workspace-doctor.js.map +1 -1
  126. package/daemon/dist/routes/activity.js +11 -2
  127. package/daemon/dist/routes/activity.js.map +1 -1
  128. package/daemon/dist/routes/bundles.d.ts +27 -0
  129. package/daemon/dist/routes/bundles.d.ts.map +1 -1
  130. package/daemon/dist/routes/bundles.js +107 -26
  131. package/daemon/dist/routes/bundles.js.map +1 -1
  132. package/daemon/dist/routes/crash-cart.d.ts +4 -0
  133. package/daemon/dist/routes/crash-cart.d.ts.map +1 -0
  134. package/daemon/dist/routes/crash-cart.js +144 -0
  135. package/daemon/dist/routes/crash-cart.js.map +1 -0
  136. package/daemon/dist/routes/missions.d.ts.map +1 -1
  137. package/daemon/dist/routes/missions.js +10 -6
  138. package/daemon/dist/routes/missions.js.map +1 -1
  139. package/daemon/dist/routes/{rig-policy.d.ts → rig-mode.d.ts} +3 -3
  140. package/daemon/dist/routes/rig-mode.d.ts.map +1 -0
  141. package/{node_modules/@openrig/daemon/dist/routes/rig-policy.js → daemon/dist/routes/rig-mode.js} +13 -13
  142. package/daemon/dist/routes/rig-mode.js.map +1 -0
  143. package/daemon/dist/routes/scope-approve.d.ts.map +1 -1
  144. package/daemon/dist/routes/scope-approve.js +4 -0
  145. package/daemon/dist/routes/scope-approve.js.map +1 -1
  146. package/daemon/dist/routes/scope-audit.d.ts.map +1 -1
  147. package/daemon/dist/routes/scope-audit.js +29 -2
  148. package/daemon/dist/routes/scope-audit.js.map +1 -1
  149. package/daemon/dist/routes/seat.js +7 -2
  150. package/daemon/dist/routes/seat.js.map +1 -1
  151. package/daemon/dist/routes/sessions.d.ts.map +1 -1
  152. package/daemon/dist/routes/sessions.js +11 -1
  153. package/daemon/dist/routes/sessions.js.map +1 -1
  154. package/daemon/dist/server.d.ts +3 -1
  155. package/daemon/dist/server.d.ts.map +1 -1
  156. package/daemon/dist/server.js +15 -5
  157. package/daemon/dist/server.js.map +1 -1
  158. package/daemon/dist/startup.d.ts.map +1 -1
  159. package/daemon/dist/startup.js +134 -5
  160. package/daemon/dist/startup.js.map +1 -1
  161. package/dist/build-info.js +3 -3
  162. package/dist/commands/bundle.d.ts.map +1 -1
  163. package/dist/commands/bundle.js +6 -0
  164. package/dist/commands/bundle.js.map +1 -1
  165. package/dist/commands/capture.d.ts.map +1 -1
  166. package/dist/commands/capture.js +2 -0
  167. package/dist/commands/capture.js.map +1 -1
  168. package/dist/commands/crash-cart.d.ts.map +1 -1
  169. package/dist/commands/crash-cart.js.map +1 -1
  170. package/dist/commands/host.d.ts +5 -0
  171. package/dist/commands/host.d.ts.map +1 -1
  172. package/dist/commands/host.js +59 -3
  173. package/dist/commands/host.js.map +1 -1
  174. package/dist/commands/policy.d.ts +5 -0
  175. package/dist/commands/policy.d.ts.map +1 -0
  176. package/dist/commands/policy.js +307 -0
  177. package/dist/commands/policy.js.map +1 -0
  178. package/dist/commands/ps.d.ts +4 -0
  179. package/dist/commands/ps.d.ts.map +1 -1
  180. package/dist/commands/ps.js +4 -0
  181. package/dist/commands/ps.js.map +1 -1
  182. package/dist/commands/{rig-policy.d.ts → rig-mode.d.ts} +3 -3
  183. package/dist/commands/rig-mode.d.ts.map +1 -0
  184. package/dist/commands/{rig-policy.js → rig-mode.js} +17 -17
  185. package/dist/commands/rig-mode.js.map +1 -0
  186. package/dist/commands/scope.d.ts.map +1 -1
  187. package/dist/commands/scope.js +58 -16
  188. package/dist/commands/scope.js.map +1 -1
  189. package/dist/commands/send.d.ts.map +1 -1
  190. package/dist/commands/send.js +2 -0
  191. package/dist/commands/send.js.map +1 -1
  192. package/dist/commands/setup.d.ts +13 -0
  193. package/dist/commands/setup.d.ts.map +1 -1
  194. package/dist/commands/setup.js +3 -3
  195. package/dist/commands/setup.js.map +1 -1
  196. package/dist/commands/transcript.d.ts.map +1 -1
  197. package/dist/commands/transcript.js +2 -0
  198. package/dist/commands/transcript.js.map +1 -1
  199. package/dist/commands/whoami.d.ts.map +1 -1
  200. package/dist/commands/whoami.js +11 -1
  201. package/dist/commands/whoami.js.map +1 -1
  202. package/dist/config-store.d.ts +3 -1
  203. package/dist/config-store.d.ts.map +1 -1
  204. package/dist/config-store.js +18 -0
  205. package/dist/config-store.js.map +1 -1
  206. package/dist/cross-host-target.d.ts +8 -1
  207. package/dist/cross-host-target.d.ts.map +1 -1
  208. package/dist/cross-host-target.js +23 -4
  209. package/dist/cross-host-target.js.map +1 -1
  210. package/dist/daemon-lifecycle.d.ts +10 -1
  211. package/dist/daemon-lifecycle.d.ts.map +1 -1
  212. package/dist/daemon-lifecycle.js +26 -1
  213. package/dist/daemon-lifecycle.js.map +1 -1
  214. package/dist/front-door.d.ts.map +1 -1
  215. package/dist/front-door.js +11 -1
  216. package/dist/front-door.js.map +1 -1
  217. package/dist/host-bindings.d.ts +62 -0
  218. package/dist/host-bindings.d.ts.map +1 -0
  219. package/dist/host-bindings.js +147 -0
  220. package/dist/host-bindings.js.map +1 -0
  221. package/dist/host-registry.d.ts +14 -1
  222. package/dist/host-registry.d.ts.map +1 -1
  223. package/dist/host-registry.js +30 -2
  224. package/dist/host-registry.js.map +1 -1
  225. package/dist/index.d.ts +2 -2
  226. package/dist/index.d.ts.map +1 -1
  227. package/dist/index.js +5 -2
  228. package/dist/index.js.map +1 -1
  229. package/dist/lib/hosts/fanout-contract.d.ts +4 -0
  230. package/dist/lib/hosts/fanout-contract.d.ts.map +1 -1
  231. package/dist/lib/hosts/fanout-contract.js +15 -0
  232. package/dist/lib/hosts/fanout-contract.js.map +1 -1
  233. package/dist/lib/path-safety.d.ts +8 -0
  234. package/dist/lib/path-safety.d.ts.map +1 -0
  235. package/dist/lib/path-safety.js +24 -0
  236. package/dist/lib/path-safety.js.map +1 -0
  237. package/dist/lib/permission-policy/policy-ref.d.ts +89 -0
  238. package/dist/lib/permission-policy/policy-ref.d.ts.map +1 -0
  239. package/dist/lib/permission-policy/policy-ref.js +171 -0
  240. package/dist/lib/permission-policy/policy-ref.js.map +1 -0
  241. package/dist/lib/permission-policy/policy-spec.d.ts +34 -0
  242. package/dist/lib/permission-policy/policy-spec.d.ts.map +1 -0
  243. package/dist/lib/permission-policy/policy-spec.js +106 -0
  244. package/dist/lib/permission-policy/policy-spec.js.map +1 -0
  245. package/dist/lib/scope/scope-audit.d.ts +1 -1
  246. package/dist/lib/scope/scope-audit.d.ts.map +1 -1
  247. package/dist/lib/scope/scope-audit.js.map +1 -1
  248. package/dist/lib/scope/scope-fs.d.ts +19 -3
  249. package/dist/lib/scope/scope-fs.d.ts.map +1 -1
  250. package/dist/lib/scope/scope-fs.js +37 -17
  251. package/dist/lib/scope/scope-fs.js.map +1 -1
  252. package/dist/release-surface/extract-surface.js +1 -1
  253. package/dist/release-surface/extract-surface.js.map +1 -1
  254. package/node_modules/@openrig/daemon/dist/adapters/codex-runtime-adapter.d.ts +11 -2
  255. package/node_modules/@openrig/daemon/dist/adapters/codex-runtime-adapter.d.ts.map +1 -1
  256. package/node_modules/@openrig/daemon/dist/adapters/codex-runtime-adapter.js +18 -10
  257. package/node_modules/@openrig/daemon/dist/adapters/codex-runtime-adapter.js.map +1 -1
  258. package/node_modules/@openrig/daemon/dist/build-info.js +3 -3
  259. package/node_modules/@openrig/daemon/dist/domain/codex-thread-id.d.ts +5 -2
  260. package/node_modules/@openrig/daemon/dist/domain/codex-thread-id.d.ts.map +1 -1
  261. package/node_modules/@openrig/daemon/dist/domain/codex-thread-id.js +9 -4
  262. package/node_modules/@openrig/daemon/dist/domain/codex-thread-id.js.map +1 -1
  263. package/node_modules/@openrig/daemon/dist/domain/crash-cart-conductor.d.ts +173 -0
  264. package/node_modules/@openrig/daemon/dist/domain/crash-cart-conductor.d.ts.map +1 -0
  265. package/node_modules/@openrig/daemon/dist/domain/crash-cart-conductor.js +233 -0
  266. package/node_modules/@openrig/daemon/dist/domain/crash-cart-conductor.js.map +1 -0
  267. package/node_modules/@openrig/daemon/dist/domain/crash-cart-probes.d.ts +7 -6
  268. package/node_modules/@openrig/daemon/dist/domain/crash-cart-probes.d.ts.map +1 -1
  269. package/node_modules/@openrig/daemon/dist/domain/crash-cart-probes.js +57 -7
  270. package/node_modules/@openrig/daemon/dist/domain/crash-cart-probes.js.map +1 -1
  271. package/node_modules/@openrig/daemon/dist/domain/hosts/fanout-contract.d.ts +4 -0
  272. package/node_modules/@openrig/daemon/dist/domain/hosts/fanout-contract.d.ts.map +1 -1
  273. package/node_modules/@openrig/daemon/dist/domain/hosts/fanout-contract.js +15 -0
  274. package/node_modules/@openrig/daemon/dist/domain/hosts/fanout-contract.js.map +1 -1
  275. package/node_modules/@openrig/daemon/dist/domain/hosts/hosts-registry-reader.d.ts +11 -0
  276. package/node_modules/@openrig/daemon/dist/domain/hosts/hosts-registry-reader.d.ts.map +1 -1
  277. package/node_modules/@openrig/daemon/dist/domain/hosts/hosts-registry-reader.js +34 -1
  278. package/node_modules/@openrig/daemon/dist/domain/hosts/hosts-registry-reader.js.map +1 -1
  279. package/node_modules/@openrig/daemon/dist/domain/model-divergence/current-generation-record.d.ts +67 -0
  280. package/node_modules/@openrig/daemon/dist/domain/model-divergence/current-generation-record.d.ts.map +1 -0
  281. package/node_modules/@openrig/daemon/dist/domain/model-divergence/current-generation-record.js +204 -0
  282. package/node_modules/@openrig/daemon/dist/domain/model-divergence/current-generation-record.js.map +1 -0
  283. package/node_modules/@openrig/daemon/dist/domain/model-divergence/effective-model-readers.d.ts +13 -0
  284. package/node_modules/@openrig/daemon/dist/domain/model-divergence/effective-model-readers.d.ts.map +1 -0
  285. package/node_modules/@openrig/daemon/dist/domain/model-divergence/effective-model-readers.js +163 -0
  286. package/node_modules/@openrig/daemon/dist/domain/model-divergence/effective-model-readers.js.map +1 -0
  287. package/node_modules/@openrig/daemon/dist/domain/model-divergence/model-divergence-monitor.d.ts +113 -0
  288. package/node_modules/@openrig/daemon/dist/domain/model-divergence/model-divergence-monitor.d.ts.map +1 -0
  289. package/node_modules/@openrig/daemon/dist/domain/model-divergence/model-divergence-monitor.js +190 -0
  290. package/node_modules/@openrig/daemon/dist/domain/model-divergence/model-divergence-monitor.js.map +1 -0
  291. package/node_modules/@openrig/daemon/dist/domain/predecessor-recap-resolver.d.ts +10 -3
  292. package/node_modules/@openrig/daemon/dist/domain/predecessor-recap-resolver.d.ts.map +1 -1
  293. package/node_modules/@openrig/daemon/dist/domain/predecessor-recap-resolver.js +61 -14
  294. package/node_modules/@openrig/daemon/dist/domain/predecessor-recap-resolver.js.map +1 -1
  295. package/node_modules/@openrig/daemon/dist/domain/resume-metadata-refresher.d.ts +11 -2
  296. package/node_modules/@openrig/daemon/dist/domain/resume-metadata-refresher.d.ts.map +1 -1
  297. package/node_modules/@openrig/daemon/dist/domain/resume-metadata-refresher.js +17 -9
  298. package/node_modules/@openrig/daemon/dist/domain/resume-metadata-refresher.js.map +1 -1
  299. package/node_modules/@openrig/daemon/dist/domain/review/gather.d.ts.map +1 -1
  300. package/node_modules/@openrig/daemon/dist/domain/review/gather.js +3 -2
  301. package/node_modules/@openrig/daemon/dist/domain/review/gather.js.map +1 -1
  302. package/node_modules/@openrig/daemon/dist/domain/{rig-policy/rig-policy-defaults.d.ts → rig-mode/rig-mode-defaults.d.ts} +2 -2
  303. package/node_modules/@openrig/daemon/dist/domain/rig-mode/rig-mode-defaults.d.ts.map +1 -0
  304. package/node_modules/@openrig/daemon/dist/domain/{rig-policy/rig-policy-defaults.js → rig-mode/rig-mode-defaults.js} +1 -1
  305. package/node_modules/@openrig/daemon/dist/domain/rig-mode/rig-mode-defaults.js.map +1 -0
  306. package/{daemon/dist/domain/rig-policy/rig-policy-store.d.ts → node_modules/@openrig/daemon/dist/domain/rig-mode/rig-mode-store.d.ts} +6 -6
  307. package/node_modules/@openrig/daemon/dist/domain/rig-mode/rig-mode-store.d.ts.map +1 -0
  308. package/node_modules/@openrig/daemon/dist/domain/{rig-policy/rig-policy-store.js → rig-mode/rig-mode-store.js} +5 -5
  309. package/node_modules/@openrig/daemon/dist/domain/rig-mode/rig-mode-store.js.map +1 -0
  310. package/node_modules/@openrig/daemon/dist/domain/{rig-policy/rig-policy-types.d.ts → rig-mode/rig-mode-types.d.ts} +1 -1
  311. package/node_modules/@openrig/daemon/dist/domain/rig-mode/rig-mode-types.d.ts.map +1 -0
  312. package/{daemon/dist/domain/rig-policy/rig-policy-types.js → node_modules/@openrig/daemon/dist/domain/rig-mode/rig-mode-types.js} +1 -1
  313. package/node_modules/@openrig/daemon/dist/domain/rig-mode/rig-mode-types.js.map +1 -0
  314. package/{daemon/dist/domain/rig-policy/rig-policy-validator.d.ts → node_modules/@openrig/daemon/dist/domain/rig-mode/rig-mode-validator.d.ts} +2 -2
  315. package/node_modules/@openrig/daemon/dist/domain/rig-mode/rig-mode-validator.d.ts.map +1 -0
  316. package/node_modules/@openrig/daemon/dist/domain/{rig-policy/rig-policy-validator.js → rig-mode/rig-mode-validator.js} +3 -3
  317. package/node_modules/@openrig/daemon/dist/domain/rig-mode/rig-mode-validator.js.map +1 -0
  318. package/node_modules/@openrig/daemon/dist/domain/rigspec-schema.d.ts +7 -0
  319. package/node_modules/@openrig/daemon/dist/domain/rigspec-schema.d.ts.map +1 -1
  320. package/node_modules/@openrig/daemon/dist/domain/rigspec-schema.js +7 -0
  321. package/node_modules/@openrig/daemon/dist/domain/rigspec-schema.js.map +1 -1
  322. package/node_modules/@openrig/daemon/dist/domain/scope/node-file.d.ts +37 -0
  323. package/node_modules/@openrig/daemon/dist/domain/scope/node-file.d.ts.map +1 -0
  324. package/node_modules/@openrig/daemon/dist/domain/scope/node-file.js +55 -0
  325. package/node_modules/@openrig/daemon/dist/domain/scope/node-file.js.map +1 -0
  326. package/node_modules/@openrig/daemon/dist/domain/scope/plan-lock-artifacts.d.ts +11 -0
  327. package/node_modules/@openrig/daemon/dist/domain/scope/plan-lock-artifacts.d.ts.map +1 -1
  328. package/node_modules/@openrig/daemon/dist/domain/scope/plan-lock-artifacts.js +40 -0
  329. package/node_modules/@openrig/daemon/dist/domain/scope/plan-lock-artifacts.js.map +1 -1
  330. package/node_modules/@openrig/daemon/dist/domain/scope/scope-approve.d.ts +4 -0
  331. package/node_modules/@openrig/daemon/dist/domain/scope/scope-approve.d.ts.map +1 -1
  332. package/node_modules/@openrig/daemon/dist/domain/scope/scope-approve.js +56 -7
  333. package/node_modules/@openrig/daemon/dist/domain/scope/scope-approve.js.map +1 -1
  334. package/node_modules/@openrig/daemon/dist/domain/scope/scope-audit.d.ts +1 -1
  335. package/node_modules/@openrig/daemon/dist/domain/scope/scope-audit.d.ts.map +1 -1
  336. package/node_modules/@openrig/daemon/dist/domain/scope/scope-audit.js.map +1 -1
  337. package/node_modules/@openrig/daemon/dist/domain/scope/scope-view-projection.d.ts.map +1 -1
  338. package/node_modules/@openrig/daemon/dist/domain/scope/scope-view-projection.js +5 -2
  339. package/node_modules/@openrig/daemon/dist/domain/scope/scope-view-projection.js.map +1 -1
  340. package/node_modules/@openrig/daemon/dist/domain/seat-handover-service.d.ts +32 -15
  341. package/node_modules/@openrig/daemon/dist/domain/seat-handover-service.d.ts.map +1 -1
  342. package/node_modules/@openrig/daemon/dist/domain/seat-handover-service.js +42 -17
  343. package/node_modules/@openrig/daemon/dist/domain/seat-handover-service.js.map +1 -1
  344. package/node_modules/@openrig/daemon/dist/domain/seat-identity-reconciler.d.ts +17 -0
  345. package/node_modules/@openrig/daemon/dist/domain/seat-identity-reconciler.d.ts.map +1 -1
  346. package/node_modules/@openrig/daemon/dist/domain/seat-identity-reconciler.js +22 -0
  347. package/node_modules/@openrig/daemon/dist/domain/seat-identity-reconciler.js.map +1 -1
  348. package/node_modules/@openrig/daemon/dist/domain/session-jsonl.js +1 -1
  349. package/node_modules/@openrig/daemon/dist/domain/session-jsonl.js.map +1 -1
  350. package/node_modules/@openrig/daemon/dist/domain/slices/slice-detail-projector.d.ts.map +1 -1
  351. package/node_modules/@openrig/daemon/dist/domain/slices/slice-detail-projector.js +14 -2
  352. package/node_modules/@openrig/daemon/dist/domain/slices/slice-detail-projector.js.map +1 -1
  353. package/node_modules/@openrig/daemon/dist/domain/slices/slice-indexer.d.ts.map +1 -1
  354. package/node_modules/@openrig/daemon/dist/domain/slices/slice-indexer.js +16 -3
  355. package/node_modules/@openrig/daemon/dist/domain/slices/slice-indexer.js.map +1 -1
  356. package/node_modules/@openrig/daemon/dist/domain/spec-live-conformance.d.ts +22 -0
  357. package/node_modules/@openrig/daemon/dist/domain/spec-live-conformance.d.ts.map +1 -1
  358. package/node_modules/@openrig/daemon/dist/domain/spec-live-conformance.js +35 -0
  359. package/node_modules/@openrig/daemon/dist/domain/spec-live-conformance.js.map +1 -1
  360. package/node_modules/@openrig/daemon/dist/domain/sync-site-wrap.d.ts +9 -0
  361. package/node_modules/@openrig/daemon/dist/domain/sync-site-wrap.d.ts.map +1 -1
  362. package/node_modules/@openrig/daemon/dist/domain/sync-site-wrap.js +11 -0
  363. package/node_modules/@openrig/daemon/dist/domain/sync-site-wrap.js.map +1 -1
  364. package/node_modules/@openrig/daemon/dist/domain/types.d.ts +15 -0
  365. package/node_modules/@openrig/daemon/dist/domain/types.d.ts.map +1 -1
  366. package/node_modules/@openrig/daemon/dist/domain/types.js.map +1 -1
  367. package/node_modules/@openrig/daemon/dist/domain/user-settings/settings-store.d.ts +1 -1
  368. package/node_modules/@openrig/daemon/dist/domain/user-settings/settings-store.d.ts.map +1 -1
  369. package/node_modules/@openrig/daemon/dist/domain/user-settings/settings-store.js +20 -0
  370. package/node_modules/@openrig/daemon/dist/domain/user-settings/settings-store.js.map +1 -1
  371. package/node_modules/@openrig/daemon/dist/domain/watchdog-auto-registration.d.ts +7 -0
  372. package/node_modules/@openrig/daemon/dist/domain/watchdog-auto-registration.d.ts.map +1 -1
  373. package/node_modules/@openrig/daemon/dist/domain/watchdog-auto-registration.js +27 -0
  374. package/node_modules/@openrig/daemon/dist/domain/watchdog-auto-registration.js.map +1 -1
  375. package/node_modules/@openrig/daemon/dist/domain/workspace/workspace-doctor.d.ts.map +1 -1
  376. package/node_modules/@openrig/daemon/dist/domain/workspace/workspace-doctor.js +4 -3
  377. package/node_modules/@openrig/daemon/dist/domain/workspace/workspace-doctor.js.map +1 -1
  378. package/node_modules/@openrig/daemon/dist/routes/activity.js +11 -2
  379. package/node_modules/@openrig/daemon/dist/routes/activity.js.map +1 -1
  380. package/node_modules/@openrig/daemon/dist/routes/bundles.d.ts +27 -0
  381. package/node_modules/@openrig/daemon/dist/routes/bundles.d.ts.map +1 -1
  382. package/node_modules/@openrig/daemon/dist/routes/bundles.js +107 -26
  383. package/node_modules/@openrig/daemon/dist/routes/bundles.js.map +1 -1
  384. package/node_modules/@openrig/daemon/dist/routes/crash-cart.d.ts +4 -0
  385. package/node_modules/@openrig/daemon/dist/routes/crash-cart.d.ts.map +1 -0
  386. package/node_modules/@openrig/daemon/dist/routes/crash-cart.js +144 -0
  387. package/node_modules/@openrig/daemon/dist/routes/crash-cart.js.map +1 -0
  388. package/node_modules/@openrig/daemon/dist/routes/missions.d.ts.map +1 -1
  389. package/node_modules/@openrig/daemon/dist/routes/missions.js +10 -6
  390. package/node_modules/@openrig/daemon/dist/routes/missions.js.map +1 -1
  391. package/node_modules/@openrig/daemon/dist/routes/{rig-policy.d.ts → rig-mode.d.ts} +3 -3
  392. package/node_modules/@openrig/daemon/dist/routes/rig-mode.d.ts.map +1 -0
  393. package/{daemon/dist/routes/rig-policy.js → node_modules/@openrig/daemon/dist/routes/rig-mode.js} +13 -13
  394. package/node_modules/@openrig/daemon/dist/routes/rig-mode.js.map +1 -0
  395. package/node_modules/@openrig/daemon/dist/routes/scope-approve.d.ts.map +1 -1
  396. package/node_modules/@openrig/daemon/dist/routes/scope-approve.js +4 -0
  397. package/node_modules/@openrig/daemon/dist/routes/scope-approve.js.map +1 -1
  398. package/node_modules/@openrig/daemon/dist/routes/scope-audit.d.ts.map +1 -1
  399. package/node_modules/@openrig/daemon/dist/routes/scope-audit.js +29 -2
  400. package/node_modules/@openrig/daemon/dist/routes/scope-audit.js.map +1 -1
  401. package/node_modules/@openrig/daemon/dist/routes/seat.js +7 -2
  402. package/node_modules/@openrig/daemon/dist/routes/seat.js.map +1 -1
  403. package/node_modules/@openrig/daemon/dist/routes/sessions.d.ts.map +1 -1
  404. package/node_modules/@openrig/daemon/dist/routes/sessions.js +11 -1
  405. package/node_modules/@openrig/daemon/dist/routes/sessions.js.map +1 -1
  406. package/node_modules/@openrig/daemon/dist/server.d.ts +3 -1
  407. package/node_modules/@openrig/daemon/dist/server.d.ts.map +1 -1
  408. package/node_modules/@openrig/daemon/dist/server.js +15 -5
  409. package/node_modules/@openrig/daemon/dist/server.js.map +1 -1
  410. package/node_modules/@openrig/daemon/dist/startup.d.ts.map +1 -1
  411. package/node_modules/@openrig/daemon/dist/startup.js +134 -5
  412. package/node_modules/@openrig/daemon/dist/startup.js.map +1 -1
  413. package/node_modules/@openrig/daemon/package.json +1 -1
  414. package/package.json +1 -1
  415. package/tui/dist/crash-cart/from-emit.d.ts +9 -0
  416. package/tui/dist/crash-cart/from-emit.d.ts.map +1 -1
  417. package/tui/dist/crash-cart/from-emit.js.map +1 -1
  418. package/tui/dist/crash-cart/keys.d.ts +1 -1
  419. package/tui/dist/crash-cart/keys.d.ts.map +1 -1
  420. package/tui/dist/crash-cart/keys.js +13 -2
  421. package/tui/dist/crash-cart/keys.js.map +1 -1
  422. package/tui/dist/crash-cart/one-click-gate.d.ts +5 -0
  423. package/tui/dist/crash-cart/one-click-gate.d.ts.map +1 -1
  424. package/tui/dist/crash-cart/one-click-gate.js +8 -0
  425. package/tui/dist/crash-cart/one-click-gate.js.map +1 -1
  426. package/tui/dist/crash-cart/render-crash-cart.d.ts +11 -0
  427. package/tui/dist/crash-cart/render-crash-cart.d.ts.map +1 -1
  428. package/tui/dist/crash-cart/render-crash-cart.js +113 -0
  429. package/tui/dist/crash-cart/render-crash-cart.js.map +1 -1
  430. package/tui/dist/crash-cart/restore-input.d.ts +32 -0
  431. package/tui/dist/crash-cart/restore-input.d.ts.map +1 -0
  432. package/tui/dist/crash-cart/restore-input.js +37 -0
  433. package/tui/dist/crash-cart/restore-input.js.map +1 -0
  434. package/tui/dist/crash-cart/restore-lifecycle.d.ts +66 -0
  435. package/tui/dist/crash-cart/restore-lifecycle.d.ts.map +1 -0
  436. package/tui/dist/crash-cart/restore-lifecycle.js +96 -0
  437. package/tui/dist/crash-cart/restore-lifecycle.js.map +1 -0
  438. package/tui/dist/crash-cart/restore-scroll.d.ts +14 -0
  439. package/tui/dist/crash-cart/restore-scroll.d.ts.map +1 -0
  440. package/tui/dist/crash-cart/restore-scroll.js +27 -0
  441. package/tui/dist/crash-cart/restore-scroll.js.map +1 -0
  442. package/tui/dist/daemon-client.d.ts +38 -0
  443. package/tui/dist/daemon-client.d.ts.map +1 -1
  444. package/tui/dist/daemon-client.js +15 -0
  445. package/tui/dist/daemon-client.js.map +1 -1
  446. package/tui/dist/main.js +146 -2
  447. package/tui/dist/main.js.map +1 -1
  448. package/tui/dist/render.d.ts +10 -0
  449. package/tui/dist/render.d.ts.map +1 -1
  450. package/tui/dist/render.js +63 -10
  451. package/tui/dist/render.js.map +1 -1
  452. package/daemon/dist/domain/rig-policy/rig-policy-defaults.d.ts.map +0 -1
  453. package/daemon/dist/domain/rig-policy/rig-policy-defaults.js.map +0 -1
  454. package/daemon/dist/domain/rig-policy/rig-policy-store.d.ts.map +0 -1
  455. package/daemon/dist/domain/rig-policy/rig-policy-store.js.map +0 -1
  456. package/daemon/dist/domain/rig-policy/rig-policy-types.d.ts.map +0 -1
  457. package/daemon/dist/domain/rig-policy/rig-policy-types.js.map +0 -1
  458. package/daemon/dist/domain/rig-policy/rig-policy-validator.d.ts.map +0 -1
  459. package/daemon/dist/domain/rig-policy/rig-policy-validator.js.map +0 -1
  460. package/daemon/dist/routes/rig-policy.d.ts.map +0 -1
  461. package/daemon/dist/routes/rig-policy.js.map +0 -1
  462. package/dist/commands/rig-policy.d.ts.map +0 -1
  463. package/dist/commands/rig-policy.js.map +0 -1
  464. package/node_modules/@openrig/daemon/dist/domain/rig-policy/rig-policy-defaults.d.ts.map +0 -1
  465. package/node_modules/@openrig/daemon/dist/domain/rig-policy/rig-policy-defaults.js.map +0 -1
  466. package/node_modules/@openrig/daemon/dist/domain/rig-policy/rig-policy-store.d.ts.map +0 -1
  467. package/node_modules/@openrig/daemon/dist/domain/rig-policy/rig-policy-store.js.map +0 -1
  468. package/node_modules/@openrig/daemon/dist/domain/rig-policy/rig-policy-types.d.ts.map +0 -1
  469. package/node_modules/@openrig/daemon/dist/domain/rig-policy/rig-policy-types.js.map +0 -1
  470. package/node_modules/@openrig/daemon/dist/domain/rig-policy/rig-policy-validator.d.ts.map +0 -1
  471. package/node_modules/@openrig/daemon/dist/domain/rig-policy/rig-policy-validator.js.map +0 -1
  472. package/node_modules/@openrig/daemon/dist/routes/rig-policy.d.ts.map +0 -1
  473. package/node_modules/@openrig/daemon/dist/routes/rig-policy.js.map +0 -1
@@ -0,0 +1,113 @@
1
+ export interface PinnedSeat {
2
+ nodeId: string;
3
+ sessionName: string;
4
+ rigId: string;
5
+ rigName: string;
6
+ runtime: string | null;
7
+ pinnedModel: string;
8
+ /** Occupant generation (null = unknown; falls back to sessionName grain). */
9
+ generation: string | null;
10
+ }
11
+ export interface ChannelOutcome {
12
+ channel: "orchestrator" | "operator" | "oversight" | "slack";
13
+ target: string | null;
14
+ status: "delivered" | "failed" | "deferred";
15
+ detail?: string;
16
+ }
17
+ export interface ModelDivergenceProclamation {
18
+ nodeId: string;
19
+ sessionName: string;
20
+ rigId: string;
21
+ rigName: string;
22
+ runtime: string | null;
23
+ pinnedModel: string;
24
+ effectiveModel: string;
25
+ diagnosis: string | null;
26
+ detectedAt: string;
27
+ channels: ChannelOutcome[];
28
+ }
29
+ /** D-a — the effective read carries a NAMED reason on every no-answer outcome, and may be async
30
+ * (the current-generation join reads the live process table). */
31
+ export type EffectiveModelRead = {
32
+ ok: true;
33
+ model: string;
34
+ } | {
35
+ ok: false;
36
+ reason: string;
37
+ };
38
+ export interface ModelDivergenceMonitorDeps {
39
+ /** Every running canonical seat carrying a model pin (the detector's whole population). */
40
+ listPinnedSeats: () => PinnedSeat[];
41
+ /** Per-runtime effective read via the CURRENT GENERATION's own record (D-a: never a name/token
42
+ * lookup that can silently cross a generation boundary). No-answer = named reason = pending. */
43
+ readEffectiveModel: (seat: PinnedSeat) => Promise<EffectiveModelRead> | EffectiveModelRead;
44
+ /** In-daemon send to a session (the watchdog delivery seam). */
45
+ sendToSession: (sessionName: string, message: string) => Promise<{
46
+ ok: boolean;
47
+ error?: string;
48
+ }>;
49
+ /** The seat's own rig's orchestrator seats (session names). */
50
+ resolveOrchSeats: (rigName: string) => string[];
51
+ /** The configured operator seat (derived from config, never hardcoded). Null = unconfigured. */
52
+ resolveOperatorSeat: () => string | null;
53
+ /** The fleet oversight judgment seat (cross-host target), or null when unroutable. */
54
+ resolveOversightSeat: () => string | null;
55
+ /** Durable record of the proclamation + its per-channel outcomes. */
56
+ recordProclamation: (p: ModelDivergenceProclamation) => void;
57
+ /** Optional cause string when a rejection signal is known (diagnosis, NEVER the trigger). */
58
+ diagnose?: (seat: PinnedSeat) => string | null;
59
+ now?: () => Date;
60
+ warn?: (message: string) => void;
61
+ }
62
+ export declare const SLACK_DEFERRAL_LINE = "human-via-Slack: deferred: M1 not landed";
63
+ /** Polls a pinned generation may stay signal-less before it is loudly named as unchecked. */
64
+ export declare const PENDING_VISIBILITY_POLLS = 10;
65
+ export declare function formatProclamation(p: Omit<ModelDivergenceProclamation, "channels">): string;
66
+ export declare class ModelDivergenceMonitor {
67
+ private readonly deps;
68
+ /** Generations already given their one verdict (match or proclaimed divergence). */
69
+ private readonly settled;
70
+ /** r1 B8 finding — OBSERVABLE PENDING: consecutive no-signal polls per generation. Detection
71
+ * silence is the failure class one layer under channel silence: a seat whose effective model
72
+ * never reads must be VISIBLE as never-checked, not skipped by a bare continue forever. */
73
+ private readonly pendingPolls;
74
+ private readonly pendingReasons;
75
+ private readonly pendingWarned;
76
+ private timer;
77
+ private readonly warn;
78
+ constructor(deps: ModelDivergenceMonitorDeps);
79
+ startPolling(intervalMs: number): void;
80
+ stop(): void;
81
+ /** Pinned generations currently pending (no effective read yet) with their poll counts — the
82
+ * observable face of detection-pending (tests + any future status surface). */
83
+ pendingSeats(): Array<{
84
+ key: string;
85
+ polls: number;
86
+ reason: string | null;
87
+ }>;
88
+ /** One pass over the pinned population. Returns the proclamations fired this pass (for tests). */
89
+ checkOnce(): Promise<ModelDivergenceProclamation[]>;
90
+ private proclaim;
91
+ private deliver;
92
+ }
93
+ /** Pin comparison: EXACT, case-insensitive, after trimming. This ruling has now traveled the full
94
+ * arc and lands where it started, with the reasons on record: exact was ruled at build; this seat
95
+ * reversed it to whole-token alias matching when the live census showed alias pins ("fable") vs
96
+ * full effective ids ("claude-fable-5"); r2 REVERSED IT BACK — generic token containment lets one
97
+ * pin bless multiple distinct models ("codex" matched gpt-5.6-codex AND gpt-5.1-codex-mini), and
98
+ * the ruled remedy is DATA-side: canonicalize the fleet's three alias pins at the spec layer
99
+ * (orch's lane, in-wave). TRANSITION HAZARD, named loudly: until pins read canonical, an
100
+ * alias-pinned claude seat compares "fable" vs "claude-fable-5" and PROCLAIMS — the detector's
101
+ * claude leg must not roll ahead of pin canonicalization. If a transition tolerance is ever
102
+ * needed, it is an explicit provider-aware mapping with an expiry, never token containment. */
103
+ export declare function modelsMatch(pinned: string, effective: string): boolean;
104
+ /** MIGRATION BRIDGE (r2 addendum, desk-ruled 05:03Z) — provider-specific, ONE measured pair, with
105
+ * a BEHAVIORAL executable expiry (r2 round-4: a filename tripwire is not a coupling — the
106
+ * advisory can land inside an existing validator file):
107
+ * - condition 2 (dormancy): fires only while a nodes.model row still carries the alias pin.
108
+ * - condition 1 (removal): gated at RUNTIME on rigspec-schema's SPEC_VALIDATION_CAPABILITIES —
109
+ * when the 5.3 advisory registers "model-pin-canonicalization" there (its registry contract),
110
+ * modelsMatch stops consulting this map in code, and the pin test goes RED until the constant
111
+ * is deleted. The registry's own doc-comment carries the 5.3 obligation. */
112
+ export declare const CLAUDE_ALIAS_MIGRATION_BRIDGE: Record<string, string>;
113
+ //# sourceMappingURL=model-divergence-monitor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-divergence-monitor.d.ts","sourceRoot":"","sources":["../../../src/domain/model-divergence/model-divergence-monitor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,190 @@
1
+ // B8 / slice-07 A3 — MODEL-DIVERGENCE DETECTOR + four-channel proclamation (founder-ruled).
2
+ //
3
+ // DETECT THE DIVERGENCE, NOT THE CAUSES (pm-ruled): the trigger is one comparison — the runtime's
4
+ // EFFECTIVE model vs the seat's PINNED model — at the earliest reliable read. No cause enumeration:
5
+ // specimen #1 was model-invalid (400 silently degraded), specimen #2 was environment-invalid (a
6
+ // missing --add-dir degraded the tier); a 400-handler catches one and misses the other, this
7
+ // comparison catches both. The cause string, when known, rides the proclamation as DIAGNOSIS only.
8
+ //
9
+ // "AT READINESS", operationally: the check ARMS when a pinned seat's occupant generation appears
10
+ // and FIRES at the first reliable effective-model read. A claude seat has no assistant turn at
11
+ // readiness (the effective signal does not exist yet), so the monitor polls and each generation
12
+ // stays PENDING until its runtime produces the signal — then exactly ONE verdict per generation.
13
+ // Every-occurrence semantics live at the generation grain: every new occupant of a diverged seat
14
+ // proclaims again (founder-classed every-occurrence, not digest), while one generation never spams.
15
+ //
16
+ // FOUR CHANNELS, per the desk's target ruling (2026-08-21): orchestrator = the seat's own rig's
17
+ // orch.* seats; operator = the seat resolved from the workspace operator config (derived, never
18
+ // hardcoded — may be cross-host); oversight = the fleet oversight judgment seat (cross-host via the
19
+ // registered route); human-via-Slack = NAMED DEFERRAL ("deferred: M1 not landed") until the M1
20
+ // gateway contract lands — no shadow path. Every channel's delivery OUTCOME is recorded on the
21
+ // proclamation event; an unreachable channel is a named failure/deferral, never a silence.
22
+ import { SPEC_VALIDATION_CAPABILITIES } from "../rigspec-schema.js";
23
+ export const SLACK_DEFERRAL_LINE = "human-via-Slack: deferred: M1 not landed";
24
+ /** Polls a pinned generation may stay signal-less before it is loudly named as unchecked. */
25
+ export const PENDING_VISIBILITY_POLLS = 10;
26
+ export function formatProclamation(p) {
27
+ return [
28
+ `MODEL DIVERGENCE on ${p.sessionName}: pinned=${p.pinnedModel} effective=${p.effectiveModel}`,
29
+ `The seat is RUNNING (graceful degrade held) but on a model nobody chose.`,
30
+ p.diagnosis ? `Diagnosis (informational): ${p.diagnosis}` : `Diagnosis: none captured — the divergence itself is the trigger.`,
31
+ `Detected ${p.detectedAt} (runtime ${p.runtime ?? "unknown"}, node ${p.nodeId}).`,
32
+ ].join("\n");
33
+ }
34
+ export class ModelDivergenceMonitor {
35
+ deps;
36
+ /** Generations already given their one verdict (match or proclaimed divergence). */
37
+ settled = new Set();
38
+ /** r1 B8 finding — OBSERVABLE PENDING: consecutive no-signal polls per generation. Detection
39
+ * silence is the failure class one layer under channel silence: a seat whose effective model
40
+ * never reads must be VISIBLE as never-checked, not skipped by a bare continue forever. */
41
+ pendingPolls = new Map();
42
+ pendingReasons = new Map();
43
+ pendingWarned = new Set();
44
+ timer = null;
45
+ warn;
46
+ constructor(deps) {
47
+ this.deps = deps;
48
+ this.warn = deps.warn ?? ((m) => console.warn(m));
49
+ }
50
+ startPolling(intervalMs) {
51
+ if (this.timer)
52
+ return;
53
+ this.timer = setInterval(() => {
54
+ void this.checkOnce().catch((err) => this.warn(`[model-divergence] check failed: ${err instanceof Error ? err.message : String(err)}`));
55
+ }, intervalMs);
56
+ this.timer.unref?.();
57
+ }
58
+ stop() {
59
+ if (this.timer)
60
+ clearInterval(this.timer);
61
+ this.timer = null;
62
+ }
63
+ /** Pinned generations currently pending (no effective read yet) with their poll counts — the
64
+ * observable face of detection-pending (tests + any future status surface). */
65
+ pendingSeats() {
66
+ return [...this.pendingPolls.entries()].map(([key, polls]) => ({ key, polls, reason: this.pendingReasons.get(key) ?? null }));
67
+ }
68
+ /** One pass over the pinned population. Returns the proclamations fired this pass (for tests). */
69
+ async checkOnce() {
70
+ const fired = [];
71
+ for (const seat of this.deps.listPinnedSeats()) {
72
+ const key = `${seat.nodeId}:${seat.generation ?? seat.sessionName}`;
73
+ if (this.settled.has(key))
74
+ continue;
75
+ const read = await this.deps.readEffectiveModel(seat);
76
+ if (!read.ok) {
77
+ // PENDING, never assumed — and never invisible: past the threshold this generation is
78
+ // named ONCE as never-checked (r1 measured real codex rollouts whose signal sat outside
79
+ // the bounded read; without this line such a seat would be skipped silently forever).
80
+ const polls = (this.pendingPolls.get(key) ?? 0) + 1;
81
+ this.pendingPolls.set(key, polls);
82
+ this.pendingReasons.set(key, read.reason);
83
+ if (polls >= PENDING_VISIBILITY_POLLS && !this.pendingWarned.has(key)) {
84
+ this.pendingWarned.add(key);
85
+ this.warn(`[model-divergence] ${seat.sessionName} (pin ${seat.pinnedModel}) has NO effective-model ` +
86
+ `read after ${polls} polls — this seat is pinned but UNCHECKED (${read.reason}). ` +
87
+ `A divergence here would currently be invisible.`);
88
+ }
89
+ continue;
90
+ }
91
+ this.pendingPolls.delete(key);
92
+ this.pendingReasons.delete(key);
93
+ if (modelsMatch(seat.pinnedModel, read.model)) {
94
+ this.settled.add(key);
95
+ continue;
96
+ }
97
+ const proclamation = await this.proclaim(seat, read.model);
98
+ this.settled.add(key);
99
+ fired.push(proclamation);
100
+ }
101
+ return fired;
102
+ }
103
+ async proclaim(seat, effectiveModel) {
104
+ const detectedAt = (this.deps.now?.() ?? new Date()).toISOString();
105
+ const base = {
106
+ nodeId: seat.nodeId,
107
+ sessionName: seat.sessionName,
108
+ rigId: seat.rigId,
109
+ rigName: seat.rigName,
110
+ runtime: seat.runtime,
111
+ pinnedModel: seat.pinnedModel,
112
+ effectiveModel,
113
+ diagnosis: this.deps.diagnose?.(seat) ?? null,
114
+ detectedAt,
115
+ };
116
+ const message = formatProclamation(base);
117
+ const channels = [];
118
+ const orchSeats = this.deps.resolveOrchSeats(seat.rigName);
119
+ if (orchSeats.length === 0) {
120
+ channels.push({ channel: "orchestrator", target: null, status: "failed", detail: `no orch seats found in rig ${seat.rigName}` });
121
+ }
122
+ else {
123
+ for (const target of orchSeats)
124
+ channels.push(await this.deliver("orchestrator", target, message));
125
+ }
126
+ const operator = this.deps.resolveOperatorSeat();
127
+ channels.push(operator
128
+ ? await this.deliver("operator", operator, message)
129
+ : { channel: "operator", target: null, status: "failed", detail: "no operator seat configured" });
130
+ const oversight = this.deps.resolveOversightSeat();
131
+ channels.push(oversight
132
+ ? await this.deliver("oversight", oversight, message)
133
+ : { channel: "oversight", target: null, status: "deferred", detail: "deferred: no oversight route registered from this host" });
134
+ // DS2 (founder-locked transport): Slack rides ONLY the M1 gateway contract. Until M1 lands this
135
+ // channel refuses loudly with its named deferral — never an improvised shadow path.
136
+ channels.push({ channel: "slack", target: null, status: "deferred", detail: SLACK_DEFERRAL_LINE });
137
+ const proclamation = { ...base, channels };
138
+ try {
139
+ this.deps.recordProclamation(proclamation);
140
+ }
141
+ catch (err) {
142
+ this.warn(`[model-divergence] proclamation record failed for ${seat.sessionName}: ${err instanceof Error ? err.message : String(err)}`);
143
+ }
144
+ return proclamation;
145
+ }
146
+ async deliver(channel, target, message) {
147
+ try {
148
+ const res = await this.deps.sendToSession(target, message);
149
+ return res.ok
150
+ ? { channel, target, status: "delivered" }
151
+ : { channel, target, status: "failed", detail: res.error ?? "send failed" };
152
+ }
153
+ catch (err) {
154
+ return { channel, target, status: "failed", detail: err instanceof Error ? err.message : String(err) };
155
+ }
156
+ }
157
+ }
158
+ /** Pin comparison: EXACT, case-insensitive, after trimming. This ruling has now traveled the full
159
+ * arc and lands where it started, with the reasons on record: exact was ruled at build; this seat
160
+ * reversed it to whole-token alias matching when the live census showed alias pins ("fable") vs
161
+ * full effective ids ("claude-fable-5"); r2 REVERSED IT BACK — generic token containment lets one
162
+ * pin bless multiple distinct models ("codex" matched gpt-5.6-codex AND gpt-5.1-codex-mini), and
163
+ * the ruled remedy is DATA-side: canonicalize the fleet's three alias pins at the spec layer
164
+ * (orch's lane, in-wave). TRANSITION HAZARD, named loudly: until pins read canonical, an
165
+ * alias-pinned claude seat compares "fable" vs "claude-fable-5" and PROCLAIMS — the detector's
166
+ * claude leg must not roll ahead of pin canonicalization. If a transition tolerance is ever
167
+ * needed, it is an explicit provider-aware mapping with an expiry, never token containment. */
168
+ export function modelsMatch(pinned, effective) {
169
+ const pin = pinned.trim().toLowerCase();
170
+ const eff = effective.trim().toLowerCase();
171
+ if (pin === eff)
172
+ return true;
173
+ // The bridge is DEAD CODE the moment the 5.3 advisory registers its capability — runtime-gated
174
+ // on the behavioral sentinel, not on anyone remembering a comment (r2 round-4 HIGH-2).
175
+ if (SPEC_VALIDATION_CAPABILITIES.has("model-pin-canonicalization"))
176
+ return false;
177
+ return CLAUDE_ALIAS_MIGRATION_BRIDGE[pin] === eff;
178
+ }
179
+ /** MIGRATION BRIDGE (r2 addendum, desk-ruled 05:03Z) — provider-specific, ONE measured pair, with
180
+ * a BEHAVIORAL executable expiry (r2 round-4: a filename tripwire is not a coupling — the
181
+ * advisory can land inside an existing validator file):
182
+ * - condition 2 (dormancy): fires only while a nodes.model row still carries the alias pin.
183
+ * - condition 1 (removal): gated at RUNTIME on rigspec-schema's SPEC_VALIDATION_CAPABILITIES —
184
+ * when the 5.3 advisory registers "model-pin-canonicalization" there (its registry contract),
185
+ * modelsMatch stops consulting this map in code, and the pin test goes RED until the constant
186
+ * is deleted. The registry's own doc-comment carries the 5.3 obligation. */
187
+ export const CLAUDE_ALIAS_MIGRATION_BRIDGE = {
188
+ fable: "claude-fable-5",
189
+ };
190
+ //# sourceMappingURL=model-divergence-monitor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-divergence-monitor.js","sourceRoot":"","sources":["../../../src/domain/model-divergence/model-divergence-monitor.ts"],"names":[],"mappings":"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"}
@@ -1,19 +1,26 @@
1
1
  import { type JsonlExchange } from "./session-jsonl.js";
2
2
  import type { PredecessorRecapResolver } from "./seat-handover-service.js";
3
3
  export interface PredecessorRecapResolverDeps {
4
- /** Claude: normalized usage carries `transcript_path`; resolve it from the session name. */
5
- readClaudeTranscriptPath: (sessionName: string) => string | null;
4
+ /** Claude: the name-keyed sidecar carries `transcript_path` + `session_id`; both ride the read so
5
+ * the caller can verify WHOSE record the name currently points at. */
6
+ readClaudeRecord: (sessionName: string) => {
7
+ transcriptPath: string | null;
8
+ sessionId: string | null;
9
+ };
6
10
  /** Codex: normalized usage carries `rollout_path`; resolve it from the thread id (resume token). */
7
11
  readCodexTranscriptPath: (args: {
8
12
  threadId: string | null;
9
13
  sessionName: string;
10
14
  }) => string | null;
11
- /** Look up the departing session's codex resume token (thread id) by node + session name. */
15
+ /** Look up the departing session's resume token by node + session name (codex thread id; for a
16
+ * claude row this is the predecessor's session uuid — the sidecar-ownership verifier). */
12
17
  lookupResumeToken: (nodeId: string, sessionName: string) => string | null;
13
18
  /** Injectable for tests; defaults to the real JSONL parser. */
14
19
  parseExchanges?: (path: string, n: number) => JsonlExchange[];
15
20
  /** Bounded recap size (default 6). */
16
21
  maxExchanges?: number;
22
+ /** Per-exchange content cap in characters (default 500); over-cap content is visibly truncated. */
23
+ maxCharsPerExchange?: number;
17
24
  }
18
25
  export declare function makePredecessorRecapResolver(deps: PredecessorRecapResolverDeps): PredecessorRecapResolver;
19
26
  //# sourceMappingURL=predecessor-recap-resolver.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"predecessor-recap-resolver.d.ts","sourceRoot":"","sources":["../../src/domain/predecessor-recap-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,KAAK,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAC7E,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAY3E,MAAM,WAAW,4BAA4B;IAC3C,4FAA4F;IAC5F,wBAAwB,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IACjE,oGAAoG;IACpG,uBAAuB,EAAE,CAAC,IAAI,EAAE;QAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,KAAK,MAAM,GAAG,IAAI,CAAC;IACnG,6FAA6F;IAC7F,iBAAiB,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IAC1E,+DAA+D;IAC/D,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,KAAK,aAAa,EAAE,CAAC;IAC9D,sCAAsC;IACtC,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,4BAA4B,GAAG,wBAAwB,CAazG"}
1
+ {"version":3,"file":"predecessor-recap-resolver.d.ts","sourceRoot":"","sources":["../../src/domain/predecessor-recap-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,KAAK,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAC7E,OAAO,KAAK,EAAE,wBAAwB,EAA8B,MAAM,4BAA4B,CAAC;AAiCvG,MAAM,WAAW,4BAA4B;IAC3C;2EACuE;IACvE,gBAAgB,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK;QAAE,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;IACvG,oGAAoG;IACpG,uBAAuB,EAAE,CAAC,IAAI,EAAE;QAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,KAAK,MAAM,GAAG,IAAI,CAAC;IACnG;+FAC2F;IAC3F,iBAAiB,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IAC1E,+DAA+D;IAC/D,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,KAAK,aAAa,EAAE,CAAC;IAC9D,sCAAsC;IACtC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,mGAAmG;IACnG,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAOD,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,4BAA4B,GAAG,wBAAwB,CAiCzG"}
@@ -1,26 +1,73 @@
1
1
  import { parseJsonlExchanges } from "./session-jsonl.js";
2
2
  /**
3
- * Production resolver for the seat-handover stopgap (plan 411c43de): resolve the DEPARTING seat's
4
- * provider record path — claude `transcript_path` (via the sidecar, keyed by session name) or codex
5
- * `rollout_path` (via the thread, keyed by the departing resume token) — and parse the last N exchanges
6
- * into a bounded from-record recap. Honest-degraded: no resolvable path OR zero parsed exchanges → null
7
- * (the composer then omits the recap sections, never fabricating one). Pure + injected deps so the
8
- * runtime-branching + null handling is unit-tested without a live daemon; startup wires the real reads.
3
+ * Production resolver for the seat-handover boot recap: resolve the DEPARTING seat's provider record
4
+ * path — claude `transcript_path` (via the sidecar, keyed by session name) or codex `rollout_path`
5
+ * (via the thread, keyed by the departing resume token) — and parse the last N exchanges into a
6
+ * bounded from-record recap.
7
+ *
8
+ * The recap is the PERMANENT claude-runtime leg of scrollback-preserving handover, not an interim
9
+ * measure: claude-code seats run in the tmux alternate screen, which keeps no scrollback buffer, so
10
+ * a successor pane can never natively scroll into the predecessor conversation there. (Codex seats
11
+ * get native scrollback via the in-pane respawn; the recap still renders as a convenience.)
12
+ *
13
+ * B16 — the claude leg is RACE-GUARDED and every null is NAMED. The sidecar is keyed by SESSION
14
+ * NAME, and the cutover reuses the canonical name across generations, so a successor that has
15
+ * already booted overwrites the very sidecar this resolver queries (the live defect: the resolver
16
+ * read the successor's fresh sidecar and honestly returned nothing, silently). Two defenses:
17
+ * the SERVICE now resolves BEFORE the successor launches, and this resolver verifies the sidecar's
18
+ * session_id against the predecessor's recorded resume token when both are present — a mismatch is
19
+ * an UNAVAILABLE verdict naming the collision, never a silent null and never someone else's recap.
20
+ * Every no-recap outcome returns { unavailableReason } so the packet can say what happened
21
+ * (honest-degraded means LABELED, not silent).
22
+ *
23
+ * Bounded on BOTH axes: at most `maxExchanges` exchanges, and each exchange's content is capped at
24
+ * `maxCharsPerExchange` characters (a single pasted-file or long-form exchange must not flood the
25
+ * successor pane); truncation is visible and points the reader at the full record. Pure + injected
26
+ * deps so the runtime-branching + guard handling is unit-tested without a live daemon; startup
27
+ * wires the real reads.
9
28
  */
10
29
  const DEFAULT_MAX_EXCHANGES = 6;
30
+ const DEFAULT_MAX_CHARS_PER_EXCHANGE = 500;
31
+ const TRUNCATION_MARKER = "… [truncated; full text in the predecessor record]";
32
+ function boundExchange(ex, maxChars) {
33
+ if (ex.content.length <= maxChars)
34
+ return ex;
35
+ return { role: ex.role, content: ex.content.slice(0, maxChars) + TRUNCATION_MARKER };
36
+ }
11
37
  export function makePredecessorRecapResolver(deps) {
12
38
  const parse = deps.parseExchanges ?? parseJsonlExchanges;
13
39
  const max = deps.maxExchanges ?? DEFAULT_MAX_EXCHANGES;
40
+ const maxChars = deps.maxCharsPerExchange ?? DEFAULT_MAX_CHARS_PER_EXCHANGE;
14
41
  return ({ nodeId, runtime, sessionName }) => {
15
- const path = runtime === "codex"
16
- ? deps.readCodexTranscriptPath({ threadId: deps.lookupResumeToken(nodeId, sessionName), sessionName })
17
- : deps.readClaudeTranscriptPath(sessionName);
18
- if (!path)
19
- return null;
42
+ let path;
43
+ if (runtime === "codex") {
44
+ const threadId = deps.lookupResumeToken(nodeId, sessionName);
45
+ if (!threadId)
46
+ return { unavailableReason: "no resume token recorded for the departing codex session" };
47
+ path = deps.readCodexTranscriptPath({ threadId, sessionName });
48
+ if (!path)
49
+ return { unavailableReason: `no rollout record found for codex thread ${threadId}` };
50
+ }
51
+ else {
52
+ const record = deps.readClaudeRecord(sessionName);
53
+ if (!record.transcriptPath) {
54
+ return { unavailableReason: "the name-keyed context sidecar is missing or carries no transcript_path" };
55
+ }
56
+ // Ownership guard: the sidecar must be the PREDECESSOR's, not a same-named successor's.
57
+ const predecessorToken = deps.lookupResumeToken(nodeId, sessionName);
58
+ if (predecessorToken && record.sessionId && record.sessionId !== predecessorToken) {
59
+ return {
60
+ unavailableReason: `the name-keyed sidecar belongs to session ${record.sessionId.slice(0, 8)}…, not the departing session ` +
61
+ `${predecessorToken.slice(0, 8)}… (canonical-name reuse race — the record path would be the wrong tenure's)`,
62
+ };
63
+ }
64
+ path = record.transcriptPath;
65
+ }
20
66
  const recap = parse(path, max);
21
- if (recap.length === 0)
22
- return null;
23
- return { recap, recordPath: path };
67
+ if (recap.length === 0) {
68
+ return { unavailableReason: `the predecessor record at ${path} yielded no user/assistant exchanges (empty, unreadable, or too large to read)` };
69
+ }
70
+ return { recap: recap.map((ex) => boundExchange(ex, maxChars)), recordPath: path };
24
71
  };
25
72
  }
26
73
  //# sourceMappingURL=predecessor-recap-resolver.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"predecessor-recap-resolver.js","sourceRoot":"","sources":["../../src/domain/predecessor-recap-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAsB,MAAM,oBAAoB,CAAC;AAG7E;;;;;;;GAOG;AACH,MAAM,qBAAqB,GAAG,CAAC,CAAC;AAehC,MAAM,UAAU,4BAA4B,CAAC,IAAkC;IAC7E,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,IAAI,mBAAmB,CAAC;IACzD,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,IAAI,qBAAqB,CAAC;IACvD,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE;QAC1C,MAAM,IAAI,GACR,OAAO,KAAK,OAAO;YACjB,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE,WAAW,EAAE,CAAC;YACtG,CAAC,CAAC,IAAI,CAAC,wBAAwB,CAAC,WAAW,CAAC,CAAC;QACjD,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC;QACvB,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAC/B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QACpC,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;IACrC,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"predecessor-recap-resolver.js","sourceRoot":"","sources":["../../src/domain/predecessor-recap-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAsB,MAAM,oBAAoB,CAAC;AAG7E;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,qBAAqB,GAAG,CAAC,CAAC;AAChC,MAAM,8BAA8B,GAAG,GAAG,CAAC;AAC3C,MAAM,iBAAiB,GAAG,oDAAoD,CAAC;AAmB/E,SAAS,aAAa,CAAC,EAAiB,EAAE,QAAgB;IACxD,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,IAAI,QAAQ;QAAE,OAAO,EAAE,CAAC;IAC7C,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,GAAG,iBAAiB,EAAE,CAAC;AACvF,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,IAAkC;IAC7E,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,IAAI,mBAAmB,CAAC;IACzD,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,IAAI,qBAAqB,CAAC;IACvD,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,IAAI,8BAA8B,CAAC;IAC5E,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,EAA8B,EAAE;QACtE,IAAI,IAAmB,CAAC;QACxB,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;YACxB,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;YAC7D,IAAI,CAAC,QAAQ;gBAAE,OAAO,EAAE,iBAAiB,EAAE,0DAA0D,EAAE,CAAC;YACxG,IAAI,GAAG,IAAI,CAAC,uBAAuB,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,CAAC;YAC/D,IAAI,CAAC,IAAI;gBAAE,OAAO,EAAE,iBAAiB,EAAE,4CAA4C,QAAQ,EAAE,EAAE,CAAC;QAClG,CAAC;aAAM,CAAC;YACN,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC;YAClD,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;gBAC3B,OAAO,EAAE,iBAAiB,EAAE,yEAAyE,EAAE,CAAC;YAC1G,CAAC;YACD,wFAAwF;YACxF,MAAM,gBAAgB,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;YACrE,IAAI,gBAAgB,IAAI,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,SAAS,KAAK,gBAAgB,EAAE,CAAC;gBAClF,OAAO;oBACL,iBAAiB,EACf,6CAA6C,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,+BAA+B;wBACxG,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,6EAA6E;iBAC/G,CAAC;YACJ,CAAC;YACD,IAAI,GAAG,MAAM,CAAC,cAAc,CAAC;QAC/B,CAAC;QACD,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAC/B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,EAAE,iBAAiB,EAAE,6BAA6B,IAAI,gFAAgF,EAAE,CAAC;QAClJ,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,aAAa,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;IACrF,CAAC,CAAC;AACJ,CAAC"}
@@ -16,8 +16,12 @@ interface ResumeMetadataRefresherDeps {
16
16
  pid: number;
17
17
  ppid: number;
18
18
  command: string;
19
- }>;
20
- readCodexThreadIdByPid?: (pid: number) => string | undefined;
19
+ }> | Promise<Array<{
20
+ pid: number;
21
+ ppid: number;
22
+ command: string;
23
+ }>>;
24
+ readCodexThreadIdByPid?: (pid: number) => Promise<string | undefined> | string | undefined;
21
25
  probeClaudeResume?: (sessionName: string, resumeToken: string, cwd?: string | null) => Promise<"resumable" | "not_resumable" | "inconclusive">;
22
26
  resolveHomeDirByPid?: ResolveHomeDirByPid;
23
27
  sleep?: (ms: number) => Promise<void>;
@@ -80,5 +84,10 @@ export declare class ResumeMetadataRefresher {
80
84
  private defaultProbeClaudeResume;
81
85
  private waitForProbeShellReady;
82
86
  }
87
+ export declare function defaultListProcesses(): Promise<Array<{
88
+ pid: number;
89
+ ppid: number;
90
+ command: string;
91
+ }>>;
83
92
  export {};
84
93
  //# sourceMappingURL=resume-metadata-refresher.d.ts.map
@@ -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;AAQ9B,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"}
1
+ {"version":3,"file":"resume-metadata-refresher.d.ts","sourceRoot":"","sources":["../../src/domain/resume-metadata-refresher.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,11 @@
1
1
  import os from "node:os";
2
2
  import nodePath from "node:path";
3
- import { execFileSync } from "node:child_process";
3
+ import { execFile } from "node:child_process";
4
+ import { promisify } from "node:util";
4
5
  import { defaultResolveHomeDirByPid, readCodexThreadIdFromCandidateHomes, } from "./codex-thread-id.js";
5
6
  import { assessNativeResumeProbe, buildNativeResumeCommand, isProbeShellReady, } from "./native-resume-probe.js";
6
- import { runSyncSite } from "./sync-site-wrap.js";
7
+ import { runAsyncSite } from "./sync-site-wrap.js";
8
+ const execFileAsync = promisify(execFile);
7
9
  export class ResumeMetadataRefresher {
8
10
  sessionRegistry;
9
11
  tmuxAdapter;
@@ -19,7 +21,7 @@ export class ResumeMetadataRefresher {
19
21
  this.tmuxAdapter = deps.tmuxAdapter;
20
22
  this.listProcesses = deps.listProcesses ?? defaultListProcesses;
21
23
  this.resolveHomeDirByPid = deps.resolveHomeDirByPid ?? defaultResolveHomeDirByPid;
22
- this.readCodexThreadIdByPid = deps.readCodexThreadIdByPid ?? ((pid) => readCodexThreadIdFromLogs(pid, this.resolveHomeDirByPid, deps.homeDir ?? os.homedir()));
24
+ this.readCodexThreadIdByPid = deps.readCodexThreadIdByPid ?? (async (pid) => readCodexThreadIdFromLogs(pid, await this.resolveHomeDirByPid(pid), deps.homeDir ?? os.homedir()));
23
25
  this.probeClaudeResume = deps.probeClaudeResume ?? ((sessionName, resumeToken, cwd) => this.defaultProbeClaudeResume(sessionName, resumeToken, cwd));
24
26
  this.sleep = deps.sleep ?? ((ms) => new Promise((resolve) => setTimeout(resolve, ms)));
25
27
  this.homeDir = deps.homeDir ?? os.homedir();
@@ -134,9 +136,9 @@ export class ResumeMetadataRefresher {
134
136
  for (let attempt = 0; attempt < 8; attempt++) {
135
137
  const shellPid = await this.tmuxAdapter.getPanePid(sessionTarget);
136
138
  if (shellPid) {
137
- const codexPids = findCodexDescendantPids(this.listProcesses(), shellPid);
139
+ const codexPids = findCodexDescendantPids(await this.listProcesses(), shellPid);
138
140
  for (const codexPid of codexPids) {
139
- const threadId = this.readCodexThreadIdByPid(codexPid);
141
+ const threadId = await this.readCodexThreadIdByPid(codexPid);
140
142
  if (threadId)
141
143
  return threadId;
142
144
  }
@@ -208,9 +210,15 @@ export class ResumeMetadataRefresher {
208
210
  return false;
209
211
  }
210
212
  }
211
- function defaultListProcesses() {
213
+ // Exported for unit test (B12-T): the REAL async sampling path — the anti-vacuity test drives
214
+ // this default directly (every other suite injects sync stubs) and asserts the non-blocking
215
+ // property that the pre-B12 sync implementation violated.
216
+ export async function defaultListProcesses() {
212
217
  try {
213
- const output = runSyncSite("resume_metadata.list_processes", () => execFileSync("ps", ["-Ao", "pid,ppid,command"], { encoding: "utf-8" }));
218
+ const output = await runAsyncSite("resume_metadata.list_processes", async () => {
219
+ const { stdout } = await execFileAsync("ps", ["-Ao", "pid,ppid,command"], { encoding: "utf-8", maxBuffer: 8 * 1024 * 1024 });
220
+ return stdout;
221
+ });
214
222
  return output
215
223
  .split("\n")
216
224
  .slice(1)
@@ -251,8 +259,8 @@ function findCodexDescendantPids(processes, parentPid) {
251
259
  visit(parentPid);
252
260
  return matches;
253
261
  }
254
- function readCodexThreadIdFromLogs(pid, resolveHomeDirByPid, homeDir) {
255
- return readCodexThreadIdFromCandidateHomes(pid, [resolveHomeDirByPid(pid), homeDir, os.homedir()]);
262
+ function readCodexThreadIdFromLogs(pid, resolvedHome, homeDir) {
263
+ return readCodexThreadIdFromCandidateHomes(pid, [resolvedHome, homeDir, os.homedir()]);
256
264
  }
257
265
  function commandLooksLikeCodex(command) {
258
266
  const tokens = command.trim().split(/\s+/).filter(Boolean);
@@ -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":"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"}