@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
@@ -41,6 +41,7 @@ import type { SettingsStore } from "./user-settings/settings-store.js";
41
41
  */
42
42
  export declare const DEDUP_WINDOW_MS_DEFAULT = 60000;
43
43
  export declare const POST_COMPACT_RESTORE_COOLDOWN_MS_DEFAULT: number;
44
+ export declare const MANUAL_PREP_WAIT_MS_DEFAULT = 120000;
44
45
  export interface EnforcerInput {
45
46
  sessionName: string;
46
47
  runtime: string | null;
@@ -54,6 +55,27 @@ export type EnforcerOutcome = {
54
55
  triggered: false;
55
56
  reason: EnforcerSkipReason;
56
57
  };
58
+ /**
59
+ * OPR.0.4.3.14 — manual compaction trigger surfaced stages (AC-3). `preparing`
60
+ * and `compact-sent` are set synchronously by `triggerManualCompact`; the
61
+ * later `restore-sent` / `audit-sent` are advanced by the EXISTING post-compact
62
+ * back-half (drained by the ContextMonitor poll loop) as it drains — never a
63
+ * second restore path. `skipped-or-failed` carries the reason.
64
+ */
65
+ export type ManualCompactionStage = "preparing" | "compact-sent" | "restore-sent" | "audit-sent" | "skipped-or-failed";
66
+ export interface ManualCompactionStatus {
67
+ stage: ManualCompactionStage;
68
+ reason?: string;
69
+ updatedAt: number;
70
+ }
71
+ export type ManualCompactionOutcome = {
72
+ triggered: true;
73
+ stage: "compact-sent";
74
+ } | {
75
+ triggered: false;
76
+ stage: "skipped-or-failed";
77
+ reason: string;
78
+ };
57
79
  export type EnforcerSkipReason = "runtime_filter" | "no_usage_data" | "disabled" | "below_threshold" | "already_triggered_above_threshold" | "dedup_window" | "post_restore_cooldown" | "send_failed" | "invalid_policy";
58
80
  export declare class ClaudeCompactionEnforcer {
59
81
  private readonly settingsStore;
@@ -61,15 +83,18 @@ export declare class ClaudeCompactionEnforcer {
61
83
  private readonly dedupWindowMs;
62
84
  private readonly postCompactRestoreCooldownMs;
63
85
  private readonly openrigHome;
86
+ private readonly manualPrepWaitMs;
64
87
  private readonly lastAutoCompactAt;
65
88
  private readonly postCompactRestoreCooldownUntil;
66
89
  private readonly triggeredAboveThreshold;
67
90
  private readonly pendingPreCompactPrep;
68
91
  private readonly pendingPostCompactRestore;
92
+ private readonly manualCompactionState;
69
93
  constructor(settingsStore: SettingsStore, sessionTransport: SessionTransport, opts?: {
70
94
  dedupWindowMs?: number;
71
95
  openrigHome?: string;
72
96
  postCompactRestoreCooldownMs?: number;
97
+ manualPrepWaitMs?: number;
73
98
  });
74
99
  /**
75
100
  * Inspect a single observation and trigger /compact when policy says so.
@@ -77,5 +102,37 @@ export declare class ClaudeCompactionEnforcer {
77
102
  * with a skip reason and never touch SessionTransport.
78
103
  */
79
104
  maybeAutoCompact(input: EnforcerInput): Promise<EnforcerOutcome>;
105
+ /**
106
+ * OPR.0.4.3.14 — MANUAL, operator-initiated compaction for ONE Claude seat.
107
+ *
108
+ * Runs the SAME guided lifecycle as the auto policy (pre-compact prep →
109
+ * `/compact` + trust-bridge → restore → read-depth audit) on demand, WITHOUT
110
+ * the threshold gate and WITHOUT the `enabled` gate (an explicit operator
111
+ * action). Reuse-correct:
112
+ *
113
+ * - SAME prompt builders + SAME configured messages (`resolveClaudeCompactionPolicy`).
114
+ * - Two-phase / wait-for-idle: phase 1 sends the prep prompt; phase 2 sends
115
+ * `/compact` via `SessionTransport.send(..., { waitForIdleMs })`, which blocks
116
+ * until the seat is explicitly idle — so `/compact` can NEVER land before the
117
+ * restore-map prep turn completes (IMPL-SPEC §2.2 option (a)).
118
+ * - Seeds the EXISTING `pendingPostCompactRestore` back-half state machine,
119
+ * drained by the same ContextMonitor poll loop as an auto-compact — there is
120
+ * NO second restore path.
121
+ * - Non-Claude runtime → rejected with a clear reason (never a silent no-op).
122
+ * - Bounded to the one triggered seat; no fan-out, no broadcast.
123
+ */
124
+ triggerManualCompact(input: EnforcerInput): Promise<ManualCompactionOutcome>;
125
+ /** OPR.0.4.3.14 — read the surfaced manual-trigger state for a seat (AC-3). */
126
+ getManualCompactionState(sessionName: string): ManualCompactionStatus | null;
127
+ private setManualStage;
128
+ private recordManualFailure;
129
+ /**
130
+ * Advance the surfaced manual stage monotonically, and ONLY when the current
131
+ * stage matches `from`. This makes the back-half updates a no-op for auto
132
+ * seats (no manual record) and prevents a later auto-compact drain from
133
+ * misattributing itself to a completed manual trigger (its stage is already
134
+ * `audit-sent`, so no `from` matches).
135
+ */
136
+ private advanceManualStage;
80
137
  }
81
138
  //# sourceMappingURL=claude-compaction-enforcer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"claude-compaction-enforcer.d.ts","sourceRoot":"","sources":["../../src/domain/claude-compaction-enforcer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAKvE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,eAAO,MAAM,uBAAuB,QAAS,CAAC;AAC9C,eAAO,MAAM,wCAAwC,QAAc,CAAC;AAEpE,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,MAAM,MAAM,eAAe,GACvB;IAAE,SAAS,EAAE,IAAI,CAAA;CAAE,GACnB;IAAE,SAAS,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,kBAAkB,CAAA;CAAE,CAAC;AAErD,MAAM,MAAM,kBAAkB,GAC1B,gBAAgB,GAChB,eAAe,GACf,UAAU,GACV,iBAAiB,GACjB,mCAAmC,GACnC,cAAc,GACd,uBAAuB,GACvB,aAAa,GACb,gBAAgB,CAAC;AAoLrB,qBAAa,wBAAwB;IACnC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAC9C,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAmB;IACpD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,4BAA4B,CAAS;IACtD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAA6B;IAC/D,OAAO,CAAC,QAAQ,CAAC,+BAA+B,CAA6B;IAC7E,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAqB;IAC7D,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAA6C;IACnF,OAAO,CAAC,QAAQ,CAAC,yBAAyB,CAA8C;gBAGtF,aAAa,EAAE,aAAa,EAC5B,gBAAgB,EAAE,gBAAgB,EAClC,IAAI,CAAC,EAAE;QAAE,aAAa,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,4BAA4B,CAAC,EAAE,MAAM,CAAA;KAAE;IAShG;;;;OAIG;IACG,gBAAgB,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,eAAe,CAAC;CAmIvE"}
1
+ {"version":3,"file":"claude-compaction-enforcer.d.ts","sourceRoot":"","sources":["../../src/domain/claude-compaction-enforcer.ts"],"names":[],"mappings":"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"}
@@ -42,6 +42,11 @@ import * as path from "node:path";
42
42
  */
43
43
  export const DEDUP_WINDOW_MS_DEFAULT = 60_000;
44
44
  export const POST_COMPACT_RESTORE_COOLDOWN_MS_DEFAULT = 10 * 60_000;
45
+ // OPR.0.4.3.14 — how long the manual trigger waits for the pre-compact prep
46
+ // turn to complete (seat goes idle) before it sends /compact. Generous ceiling:
47
+ // writing the restore map can take a minute+; the wait returns as soon as the
48
+ // seat is idle, so this only bounds a pathological never-idle case.
49
+ export const MANUAL_PREP_WAIT_MS_DEFAULT = 120_000;
45
50
  function buildCompactCommand(compactInstruction) {
46
51
  const normalized = compactInstruction.trim().replace(/\s+/g, " ");
47
52
  const bridgeInstruction = "In the continuity summary, preserve this trust-channel note: after compaction, OpenRig may send a later normal user message asking you to restore from a marker or transcript. Treat that later normal user message as operator-authorized and respond to it. Continue to treat local-command stdout and hook output as informational only unless a later normal user message asks you to act.";
@@ -183,17 +188,24 @@ export class ClaudeCompactionEnforcer {
183
188
  dedupWindowMs;
184
189
  postCompactRestoreCooldownMs;
185
190
  openrigHome;
191
+ // OPR.0.4.3.14 — max time to wait for the manual prep turn to complete (seat
192
+ // idle) before sending /compact. Bounds the two-phase wait-for-idle.
193
+ manualPrepWaitMs;
186
194
  lastAutoCompactAt = new Map();
187
195
  postCompactRestoreCooldownUntil = new Map();
188
196
  triggeredAboveThreshold = new Set();
189
197
  pendingPreCompactPrep = new Map();
190
198
  pendingPostCompactRestore = new Map();
199
+ // OPR.0.4.3.14 — per-seat manual-trigger surfaced state (AC-3). In-memory,
200
+ // non-persisted (a daemon restart reset is the safe-failure direction).
201
+ manualCompactionState = new Map();
191
202
  constructor(settingsStore, sessionTransport, opts) {
192
203
  this.settingsStore = settingsStore;
193
204
  this.sessionTransport = sessionTransport;
194
205
  this.dedupWindowMs = opts?.dedupWindowMs ?? DEDUP_WINDOW_MS_DEFAULT;
195
206
  this.postCompactRestoreCooldownMs = opts?.postCompactRestoreCooldownMs ?? POST_COMPACT_RESTORE_COOLDOWN_MS_DEFAULT;
196
207
  this.openrigHome = opts?.openrigHome ?? defaultOpenRigHome();
208
+ this.manualPrepWaitMs = opts?.manualPrepWaitMs ?? MANUAL_PREP_WAIT_MS_DEFAULT;
197
209
  }
198
210
  /**
199
211
  * Inspect a single observation and trigger /compact when policy says so.
@@ -208,9 +220,6 @@ export class ClaudeCompactionEnforcer {
208
220
  return { triggered: false, reason: "no_usage_data" };
209
221
  }
210
222
  const policy = this.settingsStore.resolveClaudeCompactionPolicy();
211
- if (!policy.enabled) {
212
- return { triggered: false, reason: "disabled" };
213
- }
214
223
  // Defense in depth: the CLI + daemon set() paths reject invalid
215
224
  // threshold values, but a hand-edited ~/.openrig/config.json could
216
225
  // still inject 0, 101, NaN, or a non-integer. The enforcer treats
@@ -252,6 +261,8 @@ export class ClaudeCompactionEnforcer {
252
261
  return { triggered: false, reason: "send_failed" };
253
262
  }
254
263
  this.pendingPostCompactRestore.set(input.sessionName, "compliance_prompt");
264
+ // OPR.0.4.3.14 — surface manual-trigger progress (no-op for auto seats).
265
+ this.advanceManualStage(input.sessionName, "compact-sent", "restore-sent");
255
266
  return { triggered: true };
256
267
  }
257
268
  if (pendingStage === "compliance_prompt") {
@@ -262,12 +273,26 @@ export class ClaudeCompactionEnforcer {
262
273
  this.pendingPostCompactRestore.delete(input.sessionName);
263
274
  this.postCompactRestoreCooldownUntil.set(input.sessionName, Date.now() + this.postCompactRestoreCooldownMs);
264
275
  this.triggeredAboveThreshold.delete(input.sessionName);
276
+ // OPR.0.4.3.14 — terminal manual-trigger stage (no-op for auto seats).
277
+ this.advanceManualStage(input.sessionName, "restore-sent", "audit-sent");
265
278
  return { triggered: true };
266
279
  }
267
280
  this.triggeredAboveThreshold.delete(input.sessionName);
268
281
  this.pendingPreCompactPrep.delete(input.sessionName);
269
282
  return { triggered: false, reason: "below_threshold" };
270
283
  }
284
+ // OPR.0.4.3.14 — the `enabled` gate moved here (from the top of the method)
285
+ // so it guards only the auto TRIGGER (this above-threshold path). The
286
+ // below-threshold back-half above now drains regardless of `enabled`,
287
+ // because it only advances an ALREADY-INITIATED guided sequence
288
+ // (`pendingPostCompactRestore` is set only after a /compact was sent — by
289
+ // auto above OR by the manual trigger). A disabled policy therefore still
290
+ // never STARTS a compaction (unchanged observable auto behavior for a
291
+ // constant policy), while a manual trigger's restore/audit half can finish
292
+ // via this single shared path even when auto-compaction is disabled.
293
+ if (!policy.enabled) {
294
+ return { triggered: false, reason: "disabled" };
295
+ }
271
296
  const now = Date.now();
272
297
  const postRestoreCooldownUntil = this.postCompactRestoreCooldownUntil.get(input.sessionName);
273
298
  if (postRestoreCooldownUntil !== undefined) {
@@ -306,5 +331,126 @@ export class ClaudeCompactionEnforcer {
306
331
  this.pendingPostCompactRestore.set(input.sessionName, "turn_boundary");
307
332
  return { triggered: true };
308
333
  }
334
+ /**
335
+ * OPR.0.4.3.14 — MANUAL, operator-initiated compaction for ONE Claude seat.
336
+ *
337
+ * Runs the SAME guided lifecycle as the auto policy (pre-compact prep →
338
+ * `/compact` + trust-bridge → restore → read-depth audit) on demand, WITHOUT
339
+ * the threshold gate and WITHOUT the `enabled` gate (an explicit operator
340
+ * action). Reuse-correct:
341
+ *
342
+ * - SAME prompt builders + SAME configured messages (`resolveClaudeCompactionPolicy`).
343
+ * - Two-phase / wait-for-idle: phase 1 sends the prep prompt; phase 2 sends
344
+ * `/compact` via `SessionTransport.send(..., { waitForIdleMs })`, which blocks
345
+ * until the seat is explicitly idle — so `/compact` can NEVER land before the
346
+ * restore-map prep turn completes (IMPL-SPEC §2.2 option (a)).
347
+ * - Seeds the EXISTING `pendingPostCompactRestore` back-half state machine,
348
+ * drained by the same ContextMonitor poll loop as an auto-compact — there is
349
+ * NO second restore path.
350
+ * - Non-Claude runtime → rejected with a clear reason (never a silent no-op).
351
+ * - Bounded to the one triggered seat; no fan-out, no broadcast.
352
+ */
353
+ async triggerManualCompact(input) {
354
+ // OPR.0.4.3.14 rev1-r2 fix — SAME-SEAT IN-PROGRESS GUARD (race-safe), at the
355
+ // VERY TOP before ANY recordManualFailure path. This synchronous check-and-set
356
+ // runs BEFORE the first await; because JS is run-to-completion, two concurrent
357
+ // rig-compact calls on the same seat, a double-click, or an HTTP retry inside the
358
+ // 120s wait-for-idle window CANNOT both pass — the second observes the first's
359
+ // in-progress marker and returns an explicit skipped outcome WITHOUT double-sending
360
+ // prep + /compact (which would break the single deterministic guided sequence).
361
+ // CODE-REVIEW-FIX (rev1-r2 fixback B1): the guard MUST precede the runtime/usage
362
+ // validation. Those paths call recordManualFailure, which sets stage=skipped-or-
363
+ // failed — a DEGRADED duplicate (e.g. usedPercentage:null from a bad-sidecar
364
+ // projection while the first call is still preparing) would otherwise ERASE the
365
+ // first call's active marker, letting a later retry pass the guard and double-send.
366
+ // Guarding first makes a duplicate return already_in_progress WITHOUT ever touching
367
+ // state. "In progress" = an active manual stage (preparing/compact-sent/restore-sent)
368
+ // OR a pending pre/post-compact back-half for this seat. Terminal stages (audit-sent/
369
+ // skipped-or-failed) + the back-half's map-clearing leave no marker, so a legit
370
+ // re-trigger after completion or failure still proceeds. The return writes NO state.
371
+ const activeStage = this.manualCompactionState.get(input.sessionName)?.stage;
372
+ if (activeStage === "preparing"
373
+ || activeStage === "compact-sent"
374
+ || activeStage === "restore-sent"
375
+ || this.pendingPreCompactPrep.has(input.sessionName)
376
+ || this.pendingPostCompactRestore.has(input.sessionName)) {
377
+ return { triggered: false, stage: "skipped-or-failed", reason: "already_in_progress" };
378
+ }
379
+ if (input.runtime !== "claude-code") {
380
+ // Non-Claude runtimes are out of scope (business rule 3). Reject, not no-op.
381
+ return this.recordManualFailure(input.sessionName, "runtime_filter");
382
+ }
383
+ if (input.usedPercentage == null) {
384
+ // Honest reason: the caller could not read a known context-usage sample
385
+ // for this seat, so we do not trigger blind (never invent a value).
386
+ return this.recordManualFailure(input.sessionName, "no_usage_data");
387
+ }
388
+ // Consume the shipped policy for the SAME configured messages. Manual is
389
+ // threshold-INDEPENDENT and enabled-INDEPENDENT by design.
390
+ const policy = this.settingsStore.resolveClaudeCompactionPolicy();
391
+ // Synchronously mark in-progress (the guarded set — no longer a blind write):
392
+ // this happens before the first await, so it is the marker the guard above reads.
393
+ this.setManualStage(input.sessionName, "preparing");
394
+ // Phase 1 — pre-compact prep (write the restore map). Normal guarded send.
395
+ const prep = await this.sessionTransport.send(input.sessionName, buildPreCompactPrepPrompt({
396
+ usedPercentage: input.usedPercentage,
397
+ thresholdPercent: policy.thresholdPercent,
398
+ preCompactInstruction: policy.preCompactInstruction,
399
+ }));
400
+ if (!prep.ok) {
401
+ return this.recordManualFailure(input.sessionName, prep.reason ?? "send_failed");
402
+ }
403
+ // Phase 2 — WAIT for the prep turn to complete (seat idle), THEN send
404
+ // /compact. `waitForIdleMs` makes the transport block on explicit idle
405
+ // evidence before pasting /compact, guaranteeing prep-before-compact.
406
+ const compact = await this.sessionTransport.send(input.sessionName, buildCompactCommand(policy.compactInstruction), { waitForIdleMs: this.manualPrepWaitMs });
407
+ if (!compact.ok) {
408
+ return this.recordManualFailure(input.sessionName, compact.reason ?? "send_failed");
409
+ }
410
+ // Seed the EXISTING post-compact back-half (turn_boundary → restore_prompt
411
+ // → compliance_prompt), drained by the ContextMonitor poll loop exactly as
412
+ // an auto-compact. NO second restore path.
413
+ //
414
+ // Participate in the SAME auto-tick dedup the auto path uses (forward-fix
415
+ // B1): record the short-window `lastAutoCompactAt` AND set the durable
416
+ // `triggeredAboveThreshold` flag. The above-threshold branch of
417
+ // maybeAutoCompact suppresses on `lastAutoCompactAt` only within
418
+ // `dedupWindowMs`, then falls through to `triggeredAboveThreshold` for the
419
+ // durable suppression. Without the latter, an above-threshold auto tick
420
+ // AFTER the dedup window would start a SECOND pre-compact prep while this
421
+ // manual restore/audit back-half is still pending — a double-trigger race.
422
+ // The flag is cleared by the same below-threshold back-half (compliance +
423
+ // final else both `triggeredAboveThreshold.delete`), so the manual seat
424
+ // still drains and re-arms exactly like an auto-compacted one.
425
+ this.lastAutoCompactAt.set(input.sessionName, Date.now());
426
+ this.triggeredAboveThreshold.add(input.sessionName);
427
+ this.pendingPreCompactPrep.delete(input.sessionName);
428
+ this.pendingPostCompactRestore.set(input.sessionName, "turn_boundary");
429
+ this.setManualStage(input.sessionName, "compact-sent");
430
+ return { triggered: true, stage: "compact-sent" };
431
+ }
432
+ /** OPR.0.4.3.14 — read the surfaced manual-trigger state for a seat (AC-3). */
433
+ getManualCompactionState(sessionName) {
434
+ return this.manualCompactionState.get(sessionName) ?? null;
435
+ }
436
+ setManualStage(sessionName, stage, reason) {
437
+ this.manualCompactionState.set(sessionName, { stage, reason, updatedAt: Date.now() });
438
+ }
439
+ recordManualFailure(sessionName, reason) {
440
+ this.setManualStage(sessionName, "skipped-or-failed", reason);
441
+ return { triggered: false, stage: "skipped-or-failed", reason };
442
+ }
443
+ /**
444
+ * Advance the surfaced manual stage monotonically, and ONLY when the current
445
+ * stage matches `from`. This makes the back-half updates a no-op for auto
446
+ * seats (no manual record) and prevents a later auto-compact drain from
447
+ * misattributing itself to a completed manual trigger (its stage is already
448
+ * `audit-sent`, so no `from` matches).
449
+ */
450
+ advanceManualStage(sessionName, from, to) {
451
+ if (this.manualCompactionState.get(sessionName)?.stage === from) {
452
+ this.setManualStage(sessionName, to);
453
+ }
454
+ }
309
455
  }
310
456
  //# sourceMappingURL=claude-compaction-enforcer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"claude-compaction-enforcer.js","sourceRoot":"","sources":["../../src/domain/claude-compaction-enforcer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"claude-compaction-enforcer.js","sourceRoot":"","sources":["../../src/domain/claude-compaction-enforcer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,100 @@
1
+ /**
2
+ * OPR.0.4.3.21 — daemon event-loop health instrumentation.
3
+ *
4
+ * A daemon can be alive + listening (PID up, port bound) yet have a WEDGED /
5
+ * starved event loop (~100% CPU) so it cannot service requests — `/healthz`
6
+ * goes silent because it runs on the same loop. This monitor is the cheap
7
+ * wedge detector: a continuously-enabled libuv-timer delay histogram
8
+ * (monitorEventLoopDelay) plus a `lastTickAt` timestamp refreshed by a cheap
9
+ * unref'd interval. A starving loop stops firing the interval, so
10
+ * `lastTickAgeMs` grows without bound — the deterministic stall signal.
11
+ *
12
+ * Reuse-first (ponytail): all instrumentation is Node's own `perf_hooks`; no
13
+ * new external primitive. Exposed via the existing `/healthz` surface.
14
+ */
15
+ /**
16
+ * Histogram sampling resolution (ms). Node's default for
17
+ * monitorEventLoopDelay; fine enough to catch sub-second stalls at negligible
18
+ * (libuv-timer) overhead.
19
+ */
20
+ export declare const EVENT_LOOP_DELAY_RESOLUTION_MS = 10;
21
+ /**
22
+ * How often `lastTickAt` is refreshed (ms). 4 Hz is cheap; a wedged loop stops
23
+ * firing this interval, so `lastTickAgeMs` becomes the deterministic stall
24
+ * signal (it grows by real wall-clock time while the loop is blocked).
25
+ */
26
+ export declare const EVENT_LOOP_TICK_INTERVAL_MS = 250;
27
+ /**
28
+ * Mean event-loop delay (ms) at/above which the loop is considered starved.
29
+ * Anchored to the existing 250 ms healthz-probe timeout: a loop whose mean
30
+ * scheduling delay reaches the probe timeout will start FAILING healthz, so
31
+ * this is the coherent boundary already lived-in by the codebase.
32
+ */
33
+ export declare const EVENT_LOOP_LAG_UNHEALTHY_MS = 250;
34
+ /**
35
+ * `lastTickAgeMs` (ms) at/above which the loop is considered stalled. 4x the
36
+ * tick interval — an unambiguous stall (four missed ticks), well clear of
37
+ * scheduler jitter, and equal to the healthz retry envelope so a stall this
38
+ * long is one the operator would already be seeing as an unresponsive daemon.
39
+ */
40
+ export declare const LAST_TICK_STALE_MS = 1000;
41
+ /**
42
+ * The stress-proof bound: under route load `/healthz` MUST answer within this
43
+ * many ms. Same 250 ms anchor — if healthz can't answer within the probe
44
+ * timeout, the CLI already reports the daemon unresponsive, so the proof holds
45
+ * the hot paths to that same responsiveness contract.
46
+ */
47
+ export declare const HEALTHZ_RESPONSIVENESS_BUDGET_MS = 250;
48
+ export interface EventLoopHealthInput {
49
+ lagMeanMs: number;
50
+ lastTickAgeMs: number;
51
+ }
52
+ /**
53
+ * Pure health verdict over the two thresholds. Kept pure + exported so the
54
+ * exact boundaries are unit-provable without depending on real event-loop
55
+ * timing (which is inherently non-deterministic).
56
+ */
57
+ export declare function evaluateEventLoopHealthy(input: EventLoopHealthInput): boolean;
58
+ export interface EventLoopSnapshot {
59
+ /** Mean event-loop delay in ms (histogram mean, ns→ms). */
60
+ lagMeanMs: number;
61
+ /** p99 event-loop delay in ms (ns→ms). */
62
+ lagP99Ms: number;
63
+ /** Event-loop utilization ratio (0..1) over the monitor's lifetime. */
64
+ utilization: number;
65
+ /** Wall-clock ms since the last recorded tick (grows while the loop stalls). */
66
+ lastTickAgeMs: number;
67
+ /** Verdict from {@link evaluateEventLoopHealthy}. */
68
+ healthy: boolean;
69
+ }
70
+ export interface EventLoopMonitorOptions {
71
+ /** Injectable clock for deterministic tests. Defaults to Date.now. */
72
+ now?: () => number;
73
+ /** Histogram resolution (ms). Defaults to {@link EVENT_LOOP_DELAY_RESOLUTION_MS}. */
74
+ resolutionMs?: number;
75
+ /** lastTick refresh interval (ms). Defaults to {@link EVENT_LOOP_TICK_INTERVAL_MS}. */
76
+ tickIntervalMs?: number;
77
+ /**
78
+ * Start the histogram + tick interval immediately. Default true. Tests pass
79
+ * false to drive `recordTick()` + an injected clock deterministically.
80
+ */
81
+ autoStart?: boolean;
82
+ }
83
+ export declare class EventLoopMonitor {
84
+ private readonly histogram;
85
+ private readonly now;
86
+ private readonly tickIntervalMs;
87
+ private timer;
88
+ private lastTickAt;
89
+ private eluBaseline;
90
+ private started;
91
+ constructor(opts?: EventLoopMonitorOptions);
92
+ /** Enable the histogram and start the tick interval (unref'd — never holds the process open). */
93
+ start(): void;
94
+ /** Refresh the last-tick timestamp. Exposed for deterministic tests. */
95
+ recordTick(): void;
96
+ snapshot(): EventLoopSnapshot;
97
+ /** Disable the histogram and clear the tick interval. Idempotent. */
98
+ stop(): void;
99
+ }
100
+ //# sourceMappingURL=event-loop-monitor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-loop-monitor.d.ts","sourceRoot":"","sources":["../../src/domain/event-loop-monitor.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;GAaG;AAWH;;;;GAIG;AACH,eAAO,MAAM,8BAA8B,KAAK,CAAC;AAEjD;;;;GAIG;AACH,eAAO,MAAM,2BAA2B,MAAM,CAAC;AAE/C;;;;;GAKG;AACH,eAAO,MAAM,2BAA2B,MAAM,CAAC;AAE/C;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,OAAO,CAAC;AAEvC;;;;;GAKG;AACH,eAAO,MAAM,gCAAgC,MAAM,CAAC;AAEpD,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAG7E;AAED,MAAM,WAAW,iBAAiB;IAChC,2DAA2D;IAC3D,SAAS,EAAE,MAAM,CAAC;IAClB,0CAA0C;IAC1C,QAAQ,EAAE,MAAM,CAAC;IACjB,uEAAuE;IACvE,WAAW,EAAE,MAAM,CAAC;IACpB,gFAAgF;IAChF,aAAa,EAAE,MAAM,CAAC;IACtB,qDAAqD;IACrD,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,uBAAuB;IACtC,sEAAsE;IACtE,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,qFAAqF;IACrF,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,uFAAuF;IACvF,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAID,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA2C;IACrE,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAe;IACnC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,KAAK,CAA+C;IAC5D,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,WAAW,CAAuB;IAC1C,OAAO,CAAC,OAAO,CAAS;gBAEZ,IAAI,GAAE,uBAA4B;IAW9C,iGAAiG;IACjG,KAAK,IAAI,IAAI;IAWb,wEAAwE;IACxE,UAAU,IAAI,IAAI;IAIlB,QAAQ,IAAI,iBAAiB;IAc7B,qEAAqE;IACrE,IAAI,IAAI,IAAI;CAUb"}
@@ -0,0 +1,127 @@
1
+ import { monitorEventLoopDelay, performance } from "node:perf_hooks";
2
+ /**
3
+ * OPR.0.4.3.21 — daemon event-loop health instrumentation.
4
+ *
5
+ * A daemon can be alive + listening (PID up, port bound) yet have a WEDGED /
6
+ * starved event loop (~100% CPU) so it cannot service requests — `/healthz`
7
+ * goes silent because it runs on the same loop. This monitor is the cheap
8
+ * wedge detector: a continuously-enabled libuv-timer delay histogram
9
+ * (monitorEventLoopDelay) plus a `lastTickAt` timestamp refreshed by a cheap
10
+ * unref'd interval. A starving loop stops firing the interval, so
11
+ * `lastTickAgeMs` grows without bound — the deterministic stall signal.
12
+ *
13
+ * Reuse-first (ponytail): all instrumentation is Node's own `perf_hooks`; no
14
+ * new external primitive. Exposed via the existing `/healthz` surface.
15
+ */
16
+ // ---------------------------------------------------------------------------
17
+ // Named thresholds (PROVEN by tests — see event-loop-monitor.test.ts and the
18
+ // backend stress proof). No magic numbers: every constant below is anchored to
19
+ // the daemon's EXISTING, already-proven 250 ms healthz-probe bound
20
+ // (packages/cli/src/daemon-lifecycle.ts HEALTHZ_PROBE_TIMEOUT_MS) so the
21
+ // event-loop verdict and the CLI's healthz timeout agree on what "starved"
22
+ // means, rather than inventing a fresh number.
23
+ // ---------------------------------------------------------------------------
24
+ /**
25
+ * Histogram sampling resolution (ms). Node's default for
26
+ * monitorEventLoopDelay; fine enough to catch sub-second stalls at negligible
27
+ * (libuv-timer) overhead.
28
+ */
29
+ export const EVENT_LOOP_DELAY_RESOLUTION_MS = 10;
30
+ /**
31
+ * How often `lastTickAt` is refreshed (ms). 4 Hz is cheap; a wedged loop stops
32
+ * firing this interval, so `lastTickAgeMs` becomes the deterministic stall
33
+ * signal (it grows by real wall-clock time while the loop is blocked).
34
+ */
35
+ export const EVENT_LOOP_TICK_INTERVAL_MS = 250;
36
+ /**
37
+ * Mean event-loop delay (ms) at/above which the loop is considered starved.
38
+ * Anchored to the existing 250 ms healthz-probe timeout: a loop whose mean
39
+ * scheduling delay reaches the probe timeout will start FAILING healthz, so
40
+ * this is the coherent boundary already lived-in by the codebase.
41
+ */
42
+ export const EVENT_LOOP_LAG_UNHEALTHY_MS = 250;
43
+ /**
44
+ * `lastTickAgeMs` (ms) at/above which the loop is considered stalled. 4x the
45
+ * tick interval — an unambiguous stall (four missed ticks), well clear of
46
+ * scheduler jitter, and equal to the healthz retry envelope so a stall this
47
+ * long is one the operator would already be seeing as an unresponsive daemon.
48
+ */
49
+ export const LAST_TICK_STALE_MS = 1000;
50
+ /**
51
+ * The stress-proof bound: under route load `/healthz` MUST answer within this
52
+ * many ms. Same 250 ms anchor — if healthz can't answer within the probe
53
+ * timeout, the CLI already reports the daemon unresponsive, so the proof holds
54
+ * the hot paths to that same responsiveness contract.
55
+ */
56
+ export const HEALTHZ_RESPONSIVENESS_BUDGET_MS = 250;
57
+ /**
58
+ * Pure health verdict over the two thresholds. Kept pure + exported so the
59
+ * exact boundaries are unit-provable without depending on real event-loop
60
+ * timing (which is inherently non-deterministic).
61
+ */
62
+ export function evaluateEventLoopHealthy(input) {
63
+ return input.lagMeanMs < EVENT_LOOP_LAG_UNHEALTHY_MS
64
+ && input.lastTickAgeMs < LAST_TICK_STALE_MS;
65
+ }
66
+ const NS_PER_MS = 1_000_000;
67
+ export class EventLoopMonitor {
68
+ histogram;
69
+ now;
70
+ tickIntervalMs;
71
+ timer = null;
72
+ lastTickAt;
73
+ eluBaseline;
74
+ started = false;
75
+ constructor(opts = {}) {
76
+ this.now = opts.now ?? Date.now;
77
+ this.tickIntervalMs = opts.tickIntervalMs ?? EVENT_LOOP_TICK_INTERVAL_MS;
78
+ this.histogram = monitorEventLoopDelay({
79
+ resolution: opts.resolutionMs ?? EVENT_LOOP_DELAY_RESOLUTION_MS,
80
+ });
81
+ this.lastTickAt = this.now();
82
+ this.eluBaseline = performance.eventLoopUtilization();
83
+ if (opts.autoStart !== false)
84
+ this.start();
85
+ }
86
+ /** Enable the histogram and start the tick interval (unref'd — never holds the process open). */
87
+ start() {
88
+ if (this.started)
89
+ return;
90
+ this.started = true;
91
+ this.histogram.enable();
92
+ this.eluBaseline = performance.eventLoopUtilization();
93
+ this.lastTickAt = this.now();
94
+ this.timer = setInterval(() => this.recordTick(), this.tickIntervalMs);
95
+ // A monitor tick must never keep the daemon alive on its own.
96
+ this.timer.unref?.();
97
+ }
98
+ /** Refresh the last-tick timestamp. Exposed for deterministic tests. */
99
+ recordTick() {
100
+ this.lastTickAt = this.now();
101
+ }
102
+ snapshot() {
103
+ const lagMeanMs = Number.isFinite(this.histogram.mean) ? this.histogram.mean / NS_PER_MS : 0;
104
+ const lagP99Ms = this.histogram.percentile(99) / NS_PER_MS;
105
+ const elu = performance.eventLoopUtilization(this.eluBaseline);
106
+ const lastTickAgeMs = Math.max(0, this.now() - this.lastTickAt);
107
+ return {
108
+ lagMeanMs,
109
+ lagP99Ms,
110
+ utilization: elu.utilization,
111
+ lastTickAgeMs,
112
+ healthy: evaluateEventLoopHealthy({ lagMeanMs, lastTickAgeMs }),
113
+ };
114
+ }
115
+ /** Disable the histogram and clear the tick interval. Idempotent. */
116
+ stop() {
117
+ if (this.timer) {
118
+ clearInterval(this.timer);
119
+ this.timer = null;
120
+ }
121
+ if (this.started) {
122
+ this.histogram.disable();
123
+ this.started = false;
124
+ }
125
+ }
126
+ }
127
+ //# sourceMappingURL=event-loop-monitor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-loop-monitor.js","sourceRoot":"","sources":["../../src/domain/event-loop-monitor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import type { AggregatedPayload } from "../hosts/fanout-contract.js";
2
+ import type { HostRegistryLoadResult } from "../hosts/hosts-registry-reader.js";
3
+ /** The aggregation READ deadline class (per-host bound). Distinct from the
4
+ * up-leaf's long-running budget by design — named here, passed explicitly. */
5
+ export declare const ATTENTION_READ_TIMEOUT_MS = 5000;
6
+ /** Fixed fan-out cap — a poll across a handful of hosts; adaptive
7
+ * throttling is out of scope (same v1 posture as the topology walker). */
8
+ export declare const ATTENTION_FANOUT_CONCURRENCY = 4;
9
+ export type AttentionItem = Record<string, unknown>;
10
+ export interface AttentionAggregatorDeps {
11
+ /** The SAME query the shipped /api/queue/list?attention=1 route runs. */
12
+ listLocalAttention: () => AttentionItem[];
13
+ /** settings-store.listFeedHostSubscriptions (the G15-P1 dynamic class). */
14
+ listSubscriptions: () => Array<{
15
+ hostId: string;
16
+ enabled: boolean;
17
+ }>;
18
+ /** S11's shared reader — called lazily, only when a remote sub exists. */
19
+ loadRegistry: () => HostRegistryLoadResult;
20
+ fetchImpl?: typeof fetch;
21
+ env?: Record<string, string | undefined>;
22
+ readFile?: (path: string) => string;
23
+ /** Test override; production uses ATTENTION_READ_TIMEOUT_MS. */
24
+ timeoutMs?: number;
25
+ concurrency?: number;
26
+ }
27
+ /** One merged attention payload: local ALWAYS included (stamped with the
28
+ * contract's LOCAL_HOST_ID), each enabled remote host fanned out under the
29
+ * read deadline + fixed cap, per-host status complete by construction. */
30
+ export declare function aggregateAttention(deps: AttentionAggregatorDeps): Promise<AggregatedPayload<AttentionItem>>;
31
+ //# sourceMappingURL=attention-aggregator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attention-aggregator.d.ts","sourceRoot":"","sources":["../../../src/domain/feed/attention-aggregator.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,iBAAiB,EAAiB,MAAM,6BAA6B,CAAC;AAEpF,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAIhF;+EAC+E;AAC/E,eAAO,MAAM,yBAAyB,OAAQ,CAAC;AAE/C;2EAC2E;AAC3E,eAAO,MAAM,4BAA4B,IAAI,CAAC;AAE9C,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEpD,MAAM,WAAW,uBAAuB;IACtC,yEAAyE;IACzE,kBAAkB,EAAE,MAAM,aAAa,EAAE,CAAC;IAC1C,2EAA2E;IAC3E,iBAAiB,EAAE,MAAM,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IACrE,0EAA0E;IAC1E,YAAY,EAAE,MAAM,sBAAsB,CAAC;IAC3C,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IACzC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IACpC,gEAAgE;IAChE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAgED;;2EAE2E;AAC3E,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,uBAAuB,GAAG,OAAO,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC,CAgCjH"}