harnery 0.38.0 → 0.40.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (378) hide show
  1. package/dist/commands/agents.d.ts.map +1 -1
  2. package/dist/commands/agents.js +32 -8
  3. package/dist/commands/artifacts.d.ts.map +1 -1
  4. package/dist/commands/artifacts.js +97 -6
  5. package/dist/commands/backup.d.ts +16 -0
  6. package/dist/commands/backup.d.ts.map +1 -1
  7. package/dist/commands/backup.js +239 -33
  8. package/dist/commands/browse.d.ts +8 -0
  9. package/dist/commands/browse.d.ts.map +1 -1
  10. package/dist/commands/browse.js +466 -231
  11. package/dist/commands/diagnostics.d.ts.map +1 -1
  12. package/dist/commands/diagnostics.js +6 -3
  13. package/dist/commands/ledger-v3.d.ts.map +1 -1
  14. package/dist/commands/ledger-v3.js +20 -4
  15. package/dist/commands/qa-run.d.ts.map +1 -1
  16. package/dist/commands/qa-run.js +26 -3
  17. package/dist/commands/qa-status.d.ts.map +1 -1
  18. package/dist/commands/qa-status.js +7 -2
  19. package/dist/commands/resources.d.ts.map +1 -1
  20. package/dist/commands/resources.js +23 -3
  21. package/dist/commands/review-pack.d.ts.map +1 -1
  22. package/dist/commands/review-pack.js +98 -23
  23. package/dist/commands/tunnel.d.ts.map +1 -1
  24. package/dist/commands/tunnel.js +2 -2
  25. package/dist/core/adapters/profiles.d.ts +1 -1
  26. package/dist/core/agents/canonical-emit.d.ts +3 -2
  27. package/dist/core/agents/canonical-emit.d.ts.map +1 -1
  28. package/dist/core/agents/canonical-emit.js +2 -0
  29. package/dist/core/agents/cli.js +13 -6
  30. package/dist/core/agents/live-authority-v3.d.ts.map +1 -1
  31. package/dist/core/agents/live-authority-v3.js +5 -3
  32. package/dist/core/agents/live-lifecycle-v3.d.ts +2 -2
  33. package/dist/core/agents/live-lifecycle-v3.d.ts.map +1 -1
  34. package/dist/core/agents/render/prompt-context.d.ts +7 -5
  35. package/dist/core/agents/render/prompt-context.d.ts.map +1 -1
  36. package/dist/core/agents/render/prompt-context.js +63 -8
  37. package/dist/core/agents/session-finalizer-v3.d.ts +2 -2
  38. package/dist/core/agents/session-finalizer-v3.d.ts.map +1 -1
  39. package/dist/core/agents/state/live-coordination-view.d.ts +3 -3
  40. package/dist/core/agents/state/live-coordination-view.d.ts.map +1 -1
  41. package/dist/core/agents/state/live-coordination-view.js +2 -1
  42. package/dist/core/agents/state/names.d.ts +35 -2
  43. package/dist/core/agents/state/names.d.ts.map +1 -1
  44. package/dist/core/agents/state/names.js +80 -5
  45. package/dist/core/agents/state/stale-sweep.d.ts +2 -1
  46. package/dist/core/agents/state/stale-sweep.d.ts.map +1 -1
  47. package/dist/core/agents/state/stale-sweep.js +23 -6
  48. package/dist/core/agents/turn-elapsed.d.ts +51 -0
  49. package/dist/core/agents/turn-elapsed.d.ts.map +1 -0
  50. package/dist/core/agents/turn-elapsed.js +91 -0
  51. package/dist/core/artifacts/activity.d.ts +14 -0
  52. package/dist/core/artifacts/activity.d.ts.map +1 -0
  53. package/dist/core/artifacts/activity.js +52 -0
  54. package/dist/core/artifacts/delivery-card.d.ts +39 -0
  55. package/dist/core/artifacts/delivery-card.d.ts.map +1 -0
  56. package/dist/core/artifacts/delivery-card.js +282 -0
  57. package/dist/core/artifacts/index.d.ts +42 -7
  58. package/dist/core/artifacts/index.d.ts.map +1 -1
  59. package/dist/core/artifacts/index.js +288 -76
  60. package/dist/core/artifacts/mutation-lock.d.ts +2 -0
  61. package/dist/core/artifacts/mutation-lock.d.ts.map +1 -0
  62. package/dist/core/artifacts/mutation-lock.js +91 -0
  63. package/dist/core/backup/host-snapshot.d.ts +18 -0
  64. package/dist/core/backup/host-snapshot.d.ts.map +1 -0
  65. package/dist/core/backup/host-snapshot.js +64 -0
  66. package/dist/core/config.d.ts +20 -5
  67. package/dist/core/config.d.ts.map +1 -1
  68. package/dist/core/config.js +44 -10
  69. package/dist/core/diagnostics/advice.d.ts +38 -3
  70. package/dist/core/diagnostics/advice.d.ts.map +1 -1
  71. package/dist/core/diagnostics/advice.js +103 -99
  72. package/dist/core/diagnostics/bundle.d.ts.map +1 -1
  73. package/dist/core/diagnostics/bundle.js +111 -47
  74. package/dist/core/diagnostics/comparison.d.ts.map +1 -1
  75. package/dist/core/diagnostics/comparison.js +3 -2
  76. package/dist/core/diagnostics/contract.d.ts +15 -31
  77. package/dist/core/diagnostics/contract.d.ts.map +1 -1
  78. package/dist/core/diagnostics/contract.js +2 -5
  79. package/dist/core/diagnostics/index.d.ts +2 -0
  80. package/dist/core/diagnostics/index.d.ts.map +1 -1
  81. package/dist/core/diagnostics/index.js +2 -0
  82. package/dist/core/diagnostics/pressure-contract.d.ts +260 -0
  83. package/dist/core/diagnostics/pressure-contract.d.ts.map +1 -0
  84. package/dist/core/diagnostics/pressure-contract.js +70 -0
  85. package/dist/core/diagnostics/pressure.d.ts +25 -0
  86. package/dist/core/diagnostics/pressure.d.ts.map +1 -0
  87. package/dist/core/diagnostics/pressure.js +1138 -0
  88. package/dist/core/diagnostics/replay.d.ts.map +1 -1
  89. package/dist/core/diagnostics/replay.js +90 -10
  90. package/dist/core/events/v3/adapter-id.d.ts +6 -0
  91. package/dist/core/events/v3/adapter-id.d.ts.map +1 -0
  92. package/dist/core/events/v3/adapter-id.js +7 -0
  93. package/dist/core/events/v3/archive-retention.d.ts.map +1 -1
  94. package/dist/core/events/v3/archive-retention.js +3 -2
  95. package/dist/core/events/v3/bootstrap.d.ts +41 -4
  96. package/dist/core/events/v3/bootstrap.d.ts.map +1 -1
  97. package/dist/core/events/v3/bootstrap.js +120 -17
  98. package/dist/core/events/v3/capabilities.d.ts +16 -9
  99. package/dist/core/events/v3/capabilities.d.ts.map +1 -1
  100. package/dist/core/events/v3/capabilities.js +37 -2
  101. package/dist/core/events/v3/capability-drift.d.ts +2 -2
  102. package/dist/core/events/v3/capability-drift.d.ts.map +1 -1
  103. package/dist/core/events/v3/control-witness.d.ts +48 -5
  104. package/dist/core/events/v3/control-witness.d.ts.map +1 -1
  105. package/dist/core/events/v3/control-witness.js +91 -36
  106. package/dist/core/events/v3/control.d.ts.map +1 -1
  107. package/dist/core/events/v3/control.js +22 -2
  108. package/dist/core/events/v3/index.d.ts +2 -1
  109. package/dist/core/events/v3/index.d.ts.map +1 -1
  110. package/dist/core/events/v3/index.js +2 -1
  111. package/dist/core/events/v3/live-feed.d.ts +7 -1
  112. package/dist/core/events/v3/live-feed.d.ts.map +1 -1
  113. package/dist/core/events/v3/live-feed.js +21 -3
  114. package/dist/core/events/v3/live-routing.d.ts.map +1 -1
  115. package/dist/core/events/v3/live-routing.js +10 -2
  116. package/dist/core/events/v3/producers/command-recorder.d.ts +2 -2
  117. package/dist/core/events/v3/producers/command-recorder.d.ts.map +1 -1
  118. package/dist/core/events/v3/producers/command-recorder.js +2 -1
  119. package/dist/core/events/v3/producers/coordination-recorder.d.ts +2 -2
  120. package/dist/core/events/v3/producers/coordination-recorder.d.ts.map +1 -1
  121. package/dist/core/events/v3/producers/coordination-recorder.js +2 -1
  122. package/dist/core/events/v3/producers/hook-base.d.ts +2 -2
  123. package/dist/core/events/v3/producers/hook-base.d.ts.map +1 -1
  124. package/dist/core/events/v3/producers/hook-base.js +15 -5
  125. package/dist/core/events/v3/producers/hook.d.ts.map +1 -1
  126. package/dist/core/events/v3/producers/hook.js +17 -4
  127. package/dist/core/events/v3/producers/intake.d.ts +4 -4
  128. package/dist/core/events/v3/producers/intake.d.ts.map +1 -1
  129. package/dist/core/events/v3/producers/intake.js +3 -2
  130. package/dist/core/events/v3/producers/producer-state-observer.d.ts.map +1 -1
  131. package/dist/core/events/v3/producers/producer-state-observer.js +2 -1
  132. package/dist/core/events/v3/producers/recorder.d.ts +16 -5
  133. package/dist/core/events/v3/producers/recorder.d.ts.map +1 -1
  134. package/dist/core/events/v3/producers/recorder.js +31 -9
  135. package/dist/core/events/v3/reader.d.ts.map +1 -1
  136. package/dist/core/events/v3/reader.js +10 -13
  137. package/dist/core/events/v3/runtime-build.d.ts.map +1 -1
  138. package/dist/core/events/v3/runtime-build.js +3 -2
  139. package/dist/core/events/v3/runtime-telemetry-capabilities.d.ts +2 -2
  140. package/dist/core/events/v3/runtime-telemetry-capabilities.d.ts.map +1 -1
  141. package/dist/core/events/v3/turn-telemetry.d.ts +2 -2
  142. package/dist/core/events/v3/turn-telemetry.d.ts.map +1 -1
  143. package/dist/core/hooks/adapter/output.d.ts +16 -14
  144. package/dist/core/hooks/adapter/output.d.ts.map +1 -1
  145. package/dist/core/hooks/adapter/output.js +36 -38
  146. package/dist/core/hooks/backup-schedule.d.ts +34 -0
  147. package/dist/core/hooks/backup-schedule.d.ts.map +1 -0
  148. package/dist/core/hooks/backup-schedule.js +114 -0
  149. package/dist/core/hooks/cli.js +61 -18
  150. package/dist/core/hooks/codex-wsl-bridge.d.ts +2 -0
  151. package/dist/core/hooks/codex-wsl-bridge.d.ts.map +1 -1
  152. package/dist/core/hooks/codex-wsl-bridge.js +18 -4
  153. package/dist/core/hooks/index.d.ts +1 -0
  154. package/dist/core/hooks/index.d.ts.map +1 -1
  155. package/dist/core/hooks/index.js +1 -0
  156. package/dist/core/hooks/prompt-context/contract.d.ts +61 -0
  157. package/dist/core/hooks/prompt-context/contract.d.ts.map +1 -0
  158. package/dist/core/hooks/prompt-context/contract.js +102 -0
  159. package/dist/core/hooks/prompt-context/index.d.ts +5 -0
  160. package/dist/core/hooks/prompt-context/index.d.ts.map +1 -0
  161. package/dist/core/hooks/prompt-context/index.js +2 -0
  162. package/dist/core/hooks/prompt-context/runner.d.ts +24 -0
  163. package/dist/core/hooks/prompt-context/runner.d.ts.map +1 -0
  164. package/dist/core/hooks/prompt-context/runner.js +249 -0
  165. package/dist/core/qa-artifacts.d.ts +3 -0
  166. package/dist/core/qa-artifacts.d.ts.map +1 -1
  167. package/dist/core/qa-artifacts.js +25 -3
  168. package/dist/core/resources/contract.d.ts +69 -3
  169. package/dist/core/resources/contract.d.ts.map +1 -1
  170. package/dist/core/resources/contract.js +1 -1
  171. package/dist/core/resources/index.d.ts +1 -0
  172. package/dist/core/resources/index.d.ts.map +1 -1
  173. package/dist/core/resources/index.js +1 -0
  174. package/dist/core/resources/native.d.ts +36 -0
  175. package/dist/core/resources/native.d.ts.map +1 -0
  176. package/dist/core/resources/native.js +418 -0
  177. package/dist/core/resources/sampler.d.ts +2 -0
  178. package/dist/core/resources/sampler.d.ts.map +1 -1
  179. package/dist/core/resources/sampler.js +31 -1
  180. package/dist/core/resources/status.d.ts +61 -0
  181. package/dist/core/resources/status.d.ts.map +1 -0
  182. package/dist/core/resources/status.js +536 -0
  183. package/dist/core/resources/system.d.ts +27 -0
  184. package/dist/core/resources/system.d.ts.map +1 -0
  185. package/dist/core/resources/system.js +439 -0
  186. package/dist/core/semantic/contract.d.ts +13 -13
  187. package/dist/core/semantic/service.d.ts +2 -0
  188. package/dist/core/semantic/service.d.ts.map +1 -1
  189. package/dist/core/semantic/service.js +27 -4
  190. package/dist/core/storage/builtins.js +41 -0
  191. package/dist/core/supervisor/contract.d.ts +41 -3
  192. package/dist/core/supervisor/contract.d.ts.map +1 -1
  193. package/dist/core/supervisor/contract.js +3 -2
  194. package/dist/core/supervisor/findings.d.ts +3 -0
  195. package/dist/core/supervisor/findings.d.ts.map +1 -1
  196. package/dist/core/supervisor/findings.js +88 -0
  197. package/dist/core/supervisor/history.d.ts.map +1 -1
  198. package/dist/core/supervisor/history.js +14 -0
  199. package/dist/core/supervisor/ledger-state.d.ts +55 -0
  200. package/dist/core/supervisor/ledger-state.d.ts.map +1 -0
  201. package/dist/core/supervisor/ledger-state.js +0 -0
  202. package/dist/core/supervisor/service.d.ts.map +1 -1
  203. package/dist/core/supervisor/service.js +120 -7
  204. package/dist/core/supervisor/storage.d.ts +3 -1
  205. package/dist/core/supervisor/storage.d.ts.map +1 -1
  206. package/dist/core/supervisor/storage.js +4 -0
  207. package/dist/core/workflow/admission.d.ts +3 -0
  208. package/dist/core/workflow/admission.d.ts.map +1 -1
  209. package/dist/core/workflow/admission.js +28 -16
  210. package/dist/core/workflow/engine.js +2 -2
  211. package/dist/core/workflow/live-session-v3.d.ts.map +1 -1
  212. package/dist/core/workflow/live-session-v3.js +6 -1
  213. package/dist/core/workflow/proof.d.ts.map +1 -1
  214. package/dist/core/workflow/proof.js +4 -3
  215. package/dist/lib/browser/capture-fidelity.d.ts +7 -0
  216. package/dist/lib/browser/capture-fidelity.d.ts.map +1 -1
  217. package/dist/lib/browser/capture-fidelity.js +17 -0
  218. package/dist/lib/browser/client.d.ts +9 -0
  219. package/dist/lib/browser/client.d.ts.map +1 -1
  220. package/dist/lib/browser/client.js +85 -37
  221. package/dist/lib/browser/index.d.ts +3 -1
  222. package/dist/lib/browser/index.d.ts.map +1 -1
  223. package/dist/lib/browser/index.js +2 -1
  224. package/dist/lib/browser/page-review-budget.d.ts +13 -0
  225. package/dist/lib/browser/page-review-budget.d.ts.map +1 -0
  226. package/dist/lib/browser/page-review-budget.js +251 -0
  227. package/dist/lib/browser/page-review-contracts.d.ts +127 -0
  228. package/dist/lib/browser/page-review-contracts.d.ts.map +1 -0
  229. package/dist/lib/browser/page-review-contracts.js +5 -0
  230. package/dist/lib/browser/page-review-evidence.d.ts +48 -0
  231. package/dist/lib/browser/page-review-evidence.d.ts.map +1 -0
  232. package/dist/lib/browser/page-review-evidence.js +340 -0
  233. package/dist/lib/browser/page-review-judge.d.ts +1 -1
  234. package/dist/lib/browser/page-review-judge.d.ts.map +1 -1
  235. package/dist/lib/browser/page-review-judge.js +46 -38
  236. package/dist/lib/browser/page-review-pack.d.ts +44 -22
  237. package/dist/lib/browser/page-review-pack.d.ts.map +1 -1
  238. package/dist/lib/browser/page-review-pack.js +116 -36
  239. package/dist/lib/browser/page-review-source.d.ts +12 -0
  240. package/dist/lib/browser/page-review-source.d.ts.map +1 -0
  241. package/dist/lib/browser/page-review-source.js +22 -0
  242. package/dist/lib/browser/qa-run-contracts.d.ts +35 -9
  243. package/dist/lib/browser/qa-run-contracts.d.ts.map +1 -1
  244. package/dist/lib/browser/qa-run-contracts.js +48 -14
  245. package/dist/lib/browser/qa-run.d.ts.map +1 -1
  246. package/dist/lib/browser/qa-run.js +215 -68
  247. package/dist/lib/browser/qa-snapshot.d.ts +6 -0
  248. package/dist/lib/browser/qa-snapshot.d.ts.map +1 -1
  249. package/dist/lib/browser/qa-snapshot.js +259 -48
  250. package/dist/lib/browser/review-capture-transaction.d.ts +13 -0
  251. package/dist/lib/browser/review-capture-transaction.d.ts.map +1 -0
  252. package/dist/lib/browser/review-capture-transaction.js +79 -0
  253. package/dist/lib/browser/standalone-html.d.ts.map +1 -1
  254. package/dist/lib/browser/standalone-html.js +4 -2
  255. package/dist/lib/browser/thumbnail-association.d.ts +34 -0
  256. package/dist/lib/browser/thumbnail-association.d.ts.map +1 -0
  257. package/dist/lib/browser/thumbnail-association.js +158 -0
  258. package/dist/lib/browser/tiling.d.ts +30 -0
  259. package/dist/lib/browser/tiling.d.ts.map +1 -1
  260. package/dist/lib/browser/tiling.js +38 -0
  261. package/dist/lib/docs-metadata-managed.d.ts.map +1 -1
  262. package/dist/lib/docs-metadata-managed.js +4 -1
  263. package/dist/lib/identities/assume.d.ts.map +1 -1
  264. package/dist/lib/identities/assume.js +7 -1
  265. package/dist/lib/instructions/templates.d.ts.map +1 -1
  266. package/dist/lib/instructions/templates.js +1 -0
  267. package/dist/lib/local-file-url.d.ts +12 -0
  268. package/dist/lib/local-file-url.d.ts.map +1 -1
  269. package/dist/lib/local-file-url.js +16 -2
  270. package/dist/lib/tunnel/state.d.ts +19 -4
  271. package/dist/lib/tunnel/state.d.ts.map +1 -1
  272. package/dist/lib/tunnel/state.js +53 -13
  273. package/package.json +7 -4
  274. package/schemas/config.schema.json +69 -2
  275. package/src/commands/agents.ts +42 -9
  276. package/src/commands/artifacts.ts +130 -6
  277. package/src/commands/backup.ts +287 -34
  278. package/src/commands/browse.ts +564 -267
  279. package/src/commands/diagnostics.ts +6 -3
  280. package/src/commands/ledger-v3.ts +20 -3
  281. package/src/commands/qa-run.ts +37 -3
  282. package/src/commands/qa-status.ts +11 -2
  283. package/src/commands/resources.ts +23 -3
  284. package/src/commands/review-pack.ts +165 -62
  285. package/src/commands/tunnel.ts +2 -1
  286. package/src/core/agents/canonical-emit.ts +4 -2
  287. package/src/core/agents/cli.ts +14 -6
  288. package/src/core/agents/live-authority-v3.ts +7 -3
  289. package/src/core/agents/live-lifecycle-v3.ts +2 -2
  290. package/src/core/agents/render/prompt-context.ts +68 -14
  291. package/src/core/agents/session-finalizer-v3.ts +2 -2
  292. package/src/core/agents/state/live-coordination-view.ts +4 -4
  293. package/src/core/agents/state/names.ts +92 -7
  294. package/src/core/agents/state/stale-sweep.ts +22 -8
  295. package/src/core/agents/turn-elapsed.ts +135 -0
  296. package/src/core/artifacts/activity.ts +71 -0
  297. package/src/core/artifacts/delivery-card.ts +375 -0
  298. package/src/core/artifacts/index.ts +385 -91
  299. package/src/core/artifacts/mutation-lock.ts +106 -0
  300. package/src/core/backup/host-snapshot.ts +76 -0
  301. package/src/core/config.ts +66 -13
  302. package/src/core/diagnostics/advice.ts +148 -120
  303. package/src/core/diagnostics/bundle.ts +138 -52
  304. package/src/core/diagnostics/comparison.ts +6 -2
  305. package/src/core/diagnostics/contract.ts +39 -42
  306. package/src/core/diagnostics/index.ts +2 -0
  307. package/src/core/diagnostics/pressure-contract.ts +294 -0
  308. package/src/core/diagnostics/pressure.ts +1361 -0
  309. package/src/core/diagnostics/replay.ts +116 -11
  310. package/src/core/events/v3/adapter-id.ts +12 -0
  311. package/src/core/events/v3/archive-retention.ts +3 -6
  312. package/src/core/events/v3/bootstrap.ts +163 -16
  313. package/src/core/events/v3/capabilities.ts +75 -25
  314. package/src/core/events/v3/capability-drift.ts +2 -2
  315. package/src/core/events/v3/control-witness.ts +172 -41
  316. package/src/core/events/v3/control.ts +34 -2
  317. package/src/core/events/v3/index.ts +3 -0
  318. package/src/core/events/v3/live-feed.ts +23 -5
  319. package/src/core/events/v3/live-routing.ts +14 -2
  320. package/src/core/events/v3/producers/command-recorder.ts +4 -4
  321. package/src/core/events/v3/producers/coordination-recorder.ts +4 -4
  322. package/src/core/events/v3/producers/hook-base.ts +21 -16
  323. package/src/core/events/v3/producers/hook.ts +21 -4
  324. package/src/core/events/v3/producers/intake.ts +6 -6
  325. package/src/core/events/v3/producers/producer-state-observer.ts +2 -1
  326. package/src/core/events/v3/producers/recorder.ts +50 -21
  327. package/src/core/events/v3/reader.ts +14 -13
  328. package/src/core/events/v3/runtime-build.ts +3 -2
  329. package/src/core/events/v3/runtime-telemetry-capabilities.ts +3 -3
  330. package/src/core/events/v3/turn-telemetry.ts +4 -4
  331. package/src/core/hooks/adapter/output.ts +50 -36
  332. package/src/core/hooks/backup-schedule.ts +147 -0
  333. package/src/core/hooks/cli.ts +65 -14
  334. package/src/core/hooks/codex-wsl-bridge.ts +21 -5
  335. package/src/core/hooks/index.ts +1 -0
  336. package/src/core/hooks/prompt-context/contract.ts +177 -0
  337. package/src/core/hooks/prompt-context/index.ts +22 -0
  338. package/src/core/hooks/prompt-context/runner.ts +303 -0
  339. package/src/core/qa-artifacts.ts +29 -3
  340. package/src/core/resources/contract.ts +76 -3
  341. package/src/core/resources/index.ts +1 -0
  342. package/src/core/resources/native.ts +481 -0
  343. package/src/core/resources/sampler.ts +46 -1
  344. package/src/core/resources/status.ts +717 -0
  345. package/src/core/resources/system.ts +530 -0
  346. package/src/core/semantic/service.ts +37 -3
  347. package/src/core/storage/builtins.ts +41 -0
  348. package/src/core/supervisor/contract.ts +45 -3
  349. package/src/core/supervisor/findings.ts +159 -0
  350. package/src/core/supervisor/history.ts +15 -0
  351. package/src/core/supervisor/ledger-state.ts +0 -0
  352. package/src/core/supervisor/service.ts +133 -5
  353. package/src/core/supervisor/storage.ts +7 -0
  354. package/src/core/workflow/admission.ts +33 -17
  355. package/src/core/workflow/engine.ts +2 -2
  356. package/src/core/workflow/live-session-v3.ts +6 -8
  357. package/src/core/workflow/proof.ts +4 -3
  358. package/src/lib/browser/capture-fidelity.ts +23 -0
  359. package/src/lib/browser/client.ts +96 -44
  360. package/src/lib/browser/index.ts +15 -1
  361. package/src/lib/browser/page-review-budget.ts +309 -0
  362. package/src/lib/browser/page-review-contracts.ts +129 -0
  363. package/src/lib/browser/page-review-evidence.ts +465 -0
  364. package/src/lib/browser/page-review-judge.ts +56 -40
  365. package/src/lib/browser/page-review-pack.ts +181 -43
  366. package/src/lib/browser/page-review-source.ts +30 -0
  367. package/src/lib/browser/qa-run-contracts.ts +62 -18
  368. package/src/lib/browser/qa-run.ts +259 -71
  369. package/src/lib/browser/qa-snapshot.ts +289 -48
  370. package/src/lib/browser/review-capture-transaction.ts +106 -0
  371. package/src/lib/browser/standalone-html.ts +4 -2
  372. package/src/lib/browser/thumbnail-association.ts +190 -0
  373. package/src/lib/browser/tiling.ts +63 -0
  374. package/src/lib/docs-metadata-managed.ts +4 -1
  375. package/src/lib/identities/assume.ts +12 -4
  376. package/src/lib/instructions/templates.ts +1 -0
  377. package/src/lib/local-file-url.ts +17 -2
  378. package/src/lib/tunnel/state.ts +70 -13
@@ -0,0 +1,61 @@
1
+ import type { Adapter } from "../../adapter.js";
2
+ export declare const PROMPT_CONTEXT_REQUEST_SCHEMA: "harnery.prompt-context-request/v1";
3
+ export declare const PROMPT_CONTEXT_RESULT_SCHEMA: "harnery.prompt-context-result/v1";
4
+ export declare const DEFAULT_PROMPT_CONTEXT_TIMEOUT_MS = 15000;
5
+ export declare const DEFAULT_PROMPT_CONTEXT_MAX_OUTPUT_BYTES = 65536;
6
+ export declare const MAX_PROMPT_CONTEXT_TIMEOUT_MS = 120000;
7
+ export declare const MAX_PROMPT_CONTEXT_OUTPUT_BYTES: number;
8
+ export type PromptContextDelivery = "direct" | "unsupported";
9
+ export interface PromptContextConfig {
10
+ enabled: boolean;
11
+ timeoutMs: number;
12
+ maxOutputBytes: number;
13
+ }
14
+ export interface PromptContextRequestV1 {
15
+ schema: typeof PROMPT_CONTEXT_REQUEST_SCHEMA;
16
+ event: "user_prompt_submit";
17
+ adapter: Adapter;
18
+ session_id: string;
19
+ turn_id: string;
20
+ cwd: string;
21
+ prompt: string;
22
+ }
23
+ export interface PromptContextResultV1 {
24
+ schema: typeof PROMPT_CONTEXT_RESULT_SCHEMA;
25
+ provider_id: string;
26
+ context: string;
27
+ matched: number;
28
+ succeeded: number;
29
+ failed: number;
30
+ reason_codes: string[];
31
+ }
32
+ export interface PromptContextAuditV1 {
33
+ provider_id?: string;
34
+ status: "disabled" | "no_prompt" | "missing_extension" | "timeout" | "signal" | "nonzero_exit" | "invalid_result" | "oversized_result" | "empty" | "delivered";
35
+ delivery: PromptContextDelivery;
36
+ elapsed_ms: number;
37
+ matched?: number;
38
+ succeeded?: number;
39
+ failed?: number;
40
+ reason_codes?: string[];
41
+ output_bytes?: number;
42
+ context_fingerprint?: string;
43
+ }
44
+ export type PromptContextResultValidation = {
45
+ ok: true;
46
+ value: PromptContextResultV1;
47
+ } | {
48
+ ok: false;
49
+ reason: string;
50
+ };
51
+ export declare function promptContextDelivery(adapter: Adapter): PromptContextDelivery;
52
+ export declare function parsePromptContextConfig(value: unknown): PromptContextConfig | null;
53
+ export declare function buildPromptContextRequest(input: {
54
+ adapter: Adapter;
55
+ sessionId: string;
56
+ turnId: string;
57
+ cwd: string;
58
+ prompt: string;
59
+ }): PromptContextRequestV1;
60
+ export declare function validatePromptContextResult(value: unknown): PromptContextResultValidation;
61
+ //# sourceMappingURL=contract.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../../../../src/core/hooks/prompt-context/contract.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAEhD,eAAO,MAAM,6BAA6B,EAAG,mCAA4C,CAAC;AAC1F,eAAO,MAAM,4BAA4B,EAAG,kCAA2C,CAAC;AAExF,eAAO,MAAM,iCAAiC,QAAS,CAAC;AACxD,eAAO,MAAM,uCAAuC,QAAS,CAAC;AAC9D,eAAO,MAAM,6BAA6B,SAAU,CAAC;AACrD,eAAO,MAAM,+BAA+B,QAAkB,CAAC;AAM/D,MAAM,MAAM,qBAAqB,GAAG,QAAQ,GAAG,aAAa,CAAC;AAE7D,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,OAAO,6BAA6B,CAAC;IAC7C,KAAK,EAAE,oBAAoB,CAAC;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,OAAO,4BAA4B,CAAC;IAC5C,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,oBAAoB;IACnC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EACF,UAAU,GACV,WAAW,GACX,mBAAmB,GACnB,SAAS,GACT,QAAQ,GACR,cAAc,GACd,gBAAgB,GAChB,kBAAkB,GAClB,OAAO,GACP,WAAW,CAAC;IAChB,QAAQ,EAAE,qBAAqB,CAAC;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,MAAM,6BAA6B,GACrC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,qBAAqB,CAAA;CAAE,GAC1C;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAQlC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,qBAAqB,CAE7E;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,OAAO,GAAG,mBAAmB,GAAG,IAAI,CAgBnF;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE;IAC/C,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,sBAAsB,CAUzB;AAED,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,OAAO,GAAG,6BAA6B,CA6CzF"}
@@ -0,0 +1,102 @@
1
+ export const PROMPT_CONTEXT_REQUEST_SCHEMA = "harnery.prompt-context-request/v1";
2
+ export const PROMPT_CONTEXT_RESULT_SCHEMA = "harnery.prompt-context-result/v1";
3
+ export const DEFAULT_PROMPT_CONTEXT_TIMEOUT_MS = 15_000;
4
+ export const DEFAULT_PROMPT_CONTEXT_MAX_OUTPUT_BYTES = 65_536;
5
+ export const MAX_PROMPT_CONTEXT_TIMEOUT_MS = 120_000;
6
+ export const MAX_PROMPT_CONTEXT_OUTPUT_BYTES = 4 * 1024 * 1024;
7
+ const MAX_PROVIDER_ID_CHARS = 100;
8
+ const MAX_REASON_CODES = 32;
9
+ const MAX_REASON_CODE_CHARS = 80;
10
+ const DELIVERY_BY_ADAPTER = {
11
+ "claude-code": "direct",
12
+ codex: "direct",
13
+ cursor: "direct",
14
+ };
15
+ export function promptContextDelivery(adapter) {
16
+ return DELIVERY_BY_ADAPTER[adapter] ?? "unsupported";
17
+ }
18
+ export function parsePromptContextConfig(value) {
19
+ if (value === undefined) {
20
+ return {
21
+ enabled: false,
22
+ timeoutMs: DEFAULT_PROMPT_CONTEXT_TIMEOUT_MS,
23
+ maxOutputBytes: DEFAULT_PROMPT_CONTEXT_MAX_OUTPUT_BYTES,
24
+ };
25
+ }
26
+ if (!isRecord(value) || typeof value.enabled !== "boolean")
27
+ return null;
28
+ const timeoutMs = value.timeoutMs ?? DEFAULT_PROMPT_CONTEXT_TIMEOUT_MS;
29
+ const maxOutputBytes = value.maxOutputBytes ?? DEFAULT_PROMPT_CONTEXT_MAX_OUTPUT_BYTES;
30
+ if (!isBoundedInteger(timeoutMs, 1, MAX_PROMPT_CONTEXT_TIMEOUT_MS))
31
+ return null;
32
+ if (!isBoundedInteger(maxOutputBytes, 1, MAX_PROMPT_CONTEXT_OUTPUT_BYTES))
33
+ return null;
34
+ return { enabled: value.enabled, timeoutMs, maxOutputBytes };
35
+ }
36
+ export function buildPromptContextRequest(input) {
37
+ return {
38
+ schema: PROMPT_CONTEXT_REQUEST_SCHEMA,
39
+ event: "user_prompt_submit",
40
+ adapter: input.adapter,
41
+ session_id: input.sessionId,
42
+ turn_id: input.turnId,
43
+ cwd: input.cwd,
44
+ prompt: input.prompt,
45
+ };
46
+ }
47
+ export function validatePromptContextResult(value) {
48
+ if (!isRecord(value))
49
+ return invalid("result_not_object");
50
+ if (value.schema !== PROMPT_CONTEXT_RESULT_SCHEMA)
51
+ return invalid("unsupported_schema");
52
+ if (typeof value.provider_id !== "string" ||
53
+ value.provider_id.length === 0 ||
54
+ value.provider_id.length > MAX_PROVIDER_ID_CHARS ||
55
+ !/^[a-z0-9][a-z0-9._-]*$/.test(value.provider_id)) {
56
+ return invalid("invalid_provider_id");
57
+ }
58
+ if (typeof value.context !== "string")
59
+ return invalid("invalid_context");
60
+ if (!isCount(value.matched) || !isCount(value.succeeded) || !isCount(value.failed)) {
61
+ return invalid("invalid_counts");
62
+ }
63
+ if (value.succeeded + value.failed !== value.matched)
64
+ return invalid("count_mismatch");
65
+ if (value.succeeded === 0 && value.context.length > 0)
66
+ return invalid("context_without_success");
67
+ if (value.succeeded > 0 && value.context.length === 0)
68
+ return invalid("success_without_context");
69
+ if (!Array.isArray(value.reason_codes) || value.reason_codes.length > MAX_REASON_CODES) {
70
+ return invalid("invalid_reason_codes");
71
+ }
72
+ if (value.reason_codes.some((code) => typeof code !== "string" ||
73
+ code.length === 0 ||
74
+ code.length > MAX_REASON_CODE_CHARS ||
75
+ !/^[a-z0-9][a-z0-9._-]*$/.test(code))) {
76
+ return invalid("invalid_reason_code");
77
+ }
78
+ return {
79
+ ok: true,
80
+ value: {
81
+ schema: PROMPT_CONTEXT_RESULT_SCHEMA,
82
+ provider_id: value.provider_id,
83
+ context: value.context,
84
+ matched: value.matched,
85
+ succeeded: value.succeeded,
86
+ failed: value.failed,
87
+ reason_codes: [...value.reason_codes],
88
+ },
89
+ };
90
+ }
91
+ function invalid(reason) {
92
+ return { ok: false, reason };
93
+ }
94
+ function isRecord(value) {
95
+ return typeof value === "object" && value !== null && !Array.isArray(value);
96
+ }
97
+ function isBoundedInteger(value, min, max) {
98
+ return Number.isInteger(value) && value >= min && value <= max;
99
+ }
100
+ function isCount(value) {
101
+ return Number.isSafeInteger(value) && value >= 0;
102
+ }
@@ -0,0 +1,5 @@
1
+ export type { PromptContextAuditV1, PromptContextConfig, PromptContextDelivery, PromptContextRequestV1, PromptContextResultV1, PromptContextResultValidation, } from "./contract.js";
2
+ export { buildPromptContextRequest, DEFAULT_PROMPT_CONTEXT_MAX_OUTPUT_BYTES, DEFAULT_PROMPT_CONTEXT_TIMEOUT_MS, MAX_PROMPT_CONTEXT_OUTPUT_BYTES, MAX_PROMPT_CONTEXT_TIMEOUT_MS, PROMPT_CONTEXT_REQUEST_SCHEMA, PROMPT_CONTEXT_RESULT_SCHEMA, parsePromptContextConfig, promptContextDelivery, validatePromptContextResult, } from "./contract.js";
3
+ export type { PromptContextRunResult, RunPromptContextInput } from "./runner.js";
4
+ export { runPromptContext } from "./runner.js";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/hooks/prompt-context/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,oBAAoB,EACpB,mBAAmB,EACnB,qBAAqB,EACrB,sBAAsB,EACtB,qBAAqB,EACrB,6BAA6B,GAC9B,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,yBAAyB,EACzB,uCAAuC,EACvC,iCAAiC,EACjC,+BAA+B,EAC/B,6BAA6B,EAC7B,6BAA6B,EAC7B,4BAA4B,EAC5B,wBAAwB,EACxB,qBAAqB,EACrB,2BAA2B,GAC5B,MAAM,eAAe,CAAC;AACvB,YAAY,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACjF,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { buildPromptContextRequest, DEFAULT_PROMPT_CONTEXT_MAX_OUTPUT_BYTES, DEFAULT_PROMPT_CONTEXT_TIMEOUT_MS, MAX_PROMPT_CONTEXT_OUTPUT_BYTES, MAX_PROMPT_CONTEXT_TIMEOUT_MS, PROMPT_CONTEXT_REQUEST_SCHEMA, PROMPT_CONTEXT_RESULT_SCHEMA, parsePromptContextConfig, promptContextDelivery, validatePromptContextResult, } from "./contract.js";
2
+ export { runPromptContext } from "./runner.js";
@@ -0,0 +1,24 @@
1
+ import type { Adapter } from "../../adapter.js";
2
+ import { type PromptContextAuditV1, type PromptContextDelivery } from "./contract.js";
3
+ export interface RunPromptContextInput {
4
+ coordRoot: string;
5
+ adapter: Adapter;
6
+ sessionId: string;
7
+ turnId: string;
8
+ cwd: string;
9
+ prompt: string;
10
+ /** Test and embedding seam. Production callers should omit this. */
11
+ sourceEnv?: NodeJS.ProcessEnv;
12
+ }
13
+ export interface PromptContextRunResult {
14
+ context: string | null;
15
+ delivery: PromptContextDelivery;
16
+ audit: PromptContextAuditV1;
17
+ }
18
+ /**
19
+ * Run one project-owned prompt-context provider behind Harnery's normalized
20
+ * prompt hook. Every provider failure returns metadata instead of throwing so
21
+ * optional context can never make the user's turn unusable.
22
+ */
23
+ export declare function runPromptContext(input: RunPromptContextInput): Promise<PromptContextRunResult>;
24
+ //# sourceMappingURL=runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../../../src/core/hooks/prompt-context/runner.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAIhD,OAAO,EAEL,KAAK,oBAAoB,EACzB,KAAK,qBAAqB,EAI3B,MAAM,eAAe,CAAC;AA+CvB,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,oEAAoE;IACpE,SAAS,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CAC/B;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,QAAQ,EAAE,qBAAqB,CAAC;IAChC,KAAK,EAAE,oBAAoB,CAAC;CAC7B;AASD;;;;GAIG;AACH,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,qBAAqB,GAC3B,OAAO,CAAC,sBAAsB,CAAC,CAgFjC"}
@@ -0,0 +1,249 @@
1
+ import { spawn } from "node:child_process";
2
+ import { createHmac } from "node:crypto";
3
+ import { existsSync, realpathSync, statSync } from "node:fs";
4
+ import { join, resolve } from "node:path";
5
+ import { hostPromptContextConfig } from "../../config.js";
6
+ import { loadOrCreateFingerprintKeyStoreV3 } from "../../events/v3/fingerprint-keys.js";
7
+ import { codexWslWorkspaceLinuxPath } from "../codex-wsl-bridge.js";
8
+ import { buildPromptContextRequest, promptContextDelivery, validatePromptContextResult, } from "./contract.js";
9
+ const EXTENSION_RELATIVE_PATH = [
10
+ "scripts",
11
+ "hooks",
12
+ "harness",
13
+ "extensions",
14
+ "prompt-context",
15
+ ];
16
+ const PROVIDER_ENV_ALLOWLIST = [
17
+ "COLORTERM",
18
+ "COMSPEC",
19
+ "HOME",
20
+ "LANG",
21
+ "LC_ALL",
22
+ "LC_CTYPE",
23
+ "LOGNAME",
24
+ "NO_COLOR",
25
+ "PATH",
26
+ "PATHEXT",
27
+ "SHELL",
28
+ "SYSTEMROOT",
29
+ "SystemRoot",
30
+ "TEMP",
31
+ "TERM",
32
+ "TMP",
33
+ "TMPDIR",
34
+ "TZ",
35
+ "USER",
36
+ "USERPROFILE",
37
+ "WINDIR",
38
+ "XDG_CACHE_HOME",
39
+ "XDG_CONFIG_HOME",
40
+ "XDG_DATA_HOME",
41
+ ];
42
+ const RESULT_KEYS = [
43
+ "context",
44
+ "failed",
45
+ "matched",
46
+ "provider_id",
47
+ "reason_codes",
48
+ "schema",
49
+ "succeeded",
50
+ ];
51
+ /**
52
+ * Run one project-owned prompt-context provider behind Harnery's normalized
53
+ * prompt hook. Every provider failure returns metadata instead of throwing so
54
+ * optional context can never make the user's turn unusable.
55
+ */
56
+ export async function runPromptContext(input) {
57
+ const startedAt = Date.now();
58
+ const delivery = promptContextDelivery(input.adapter);
59
+ const finish = (status, fields = {}, context = null) => ({
60
+ context,
61
+ delivery,
62
+ audit: {
63
+ status,
64
+ delivery,
65
+ elapsed_ms: Math.max(0, Date.now() - startedAt),
66
+ ...fields,
67
+ },
68
+ });
69
+ try {
70
+ const coordRoot = realDirectory(input.coordRoot);
71
+ const config = hostPromptContextConfig(coordRoot);
72
+ if (!config?.enabled)
73
+ return finish("disabled");
74
+ if (!input.prompt.trim())
75
+ return finish("no_prompt");
76
+ const executable = join(coordRoot, ...EXTENSION_RELATIVE_PATH);
77
+ if (!isRegularFile(executable))
78
+ return finish("missing_extension");
79
+ const reportedCwd = input.adapter === "codex"
80
+ ? (codexWslWorkspaceLinuxPath(coordRoot, input.cwd) ?? input.cwd)
81
+ : input.cwd;
82
+ const cwd = realDirectory(reportedCwd);
83
+ const request = buildPromptContextRequest({
84
+ adapter: input.adapter,
85
+ sessionId: input.sessionId,
86
+ turnId: input.turnId,
87
+ cwd,
88
+ prompt: input.prompt,
89
+ });
90
+ const child = await runExtension({
91
+ executable,
92
+ cwd,
93
+ stdin: `${JSON.stringify(request)}\n`,
94
+ env: providerEnvironment(input.sourceEnv ?? process.env),
95
+ timeoutMs: config.timeoutMs,
96
+ maxOutputBytes: config.maxOutputBytes,
97
+ });
98
+ if (child.kind === "timeout")
99
+ return finish("timeout");
100
+ if (child.kind === "oversized")
101
+ return finish("oversized_result");
102
+ if (child.kind === "error")
103
+ return finish("missing_extension");
104
+ if (child.signal)
105
+ return finish("signal");
106
+ if (child.code !== 0)
107
+ return finish("nonzero_exit");
108
+ const stdout = child.stdout ?? Buffer.alloc(0);
109
+ const outputBytes = stdout.byteLength;
110
+ let parsed;
111
+ try {
112
+ parsed = JSON.parse(stdout.toString("utf8"));
113
+ }
114
+ catch {
115
+ return finish("invalid_result", { output_bytes: outputBytes });
116
+ }
117
+ if (!hasExactResultKeys(parsed)) {
118
+ return finish("invalid_result", { output_bytes: outputBytes });
119
+ }
120
+ const validated = validatePromptContextResult(parsed);
121
+ if (!validated.ok)
122
+ return finish("invalid_result", { output_bytes: outputBytes });
123
+ const auditFields = providerAudit(validated.value, outputBytes);
124
+ if (!validated.value.context)
125
+ return finish("empty", auditFields);
126
+ const contextFingerprint = fingerprintContext(coordRoot, validated.value.context);
127
+ return finish("delivered", { ...auditFields, context_fingerprint: contextFingerprint }, validated.value.context);
128
+ }
129
+ catch {
130
+ return finish("invalid_result");
131
+ }
132
+ }
133
+ function providerAudit(result, outputBytes) {
134
+ return {
135
+ provider_id: result.provider_id,
136
+ matched: result.matched,
137
+ succeeded: result.succeeded,
138
+ failed: result.failed,
139
+ reason_codes: [...result.reason_codes],
140
+ output_bytes: outputBytes,
141
+ };
142
+ }
143
+ function fingerprintContext(coordRoot, context) {
144
+ const store = loadOrCreateFingerprintKeyStoreV3(coordRoot);
145
+ const epoch = store.epochs.find((candidate) => candidate.epoch_id === store.active_epoch_id);
146
+ if (!epoch)
147
+ throw new Error("active fingerprint key is unavailable");
148
+ const key = Buffer.from(epoch.key_base64url, "base64url");
149
+ const digest = createHmac("sha256", key)
150
+ .update("harnery:prompt-context:v1\0", "utf8")
151
+ .update(context.normalize("NFC"), "utf8")
152
+ .digest("hex");
153
+ return `hmac-sha256:${digest}`;
154
+ }
155
+ function providerEnvironment(source) {
156
+ const env = {};
157
+ for (const name of PROVIDER_ENV_ALLOWLIST) {
158
+ const value = source[name];
159
+ if (value !== undefined)
160
+ env[name] = value;
161
+ }
162
+ return env;
163
+ }
164
+ function hasExactResultKeys(value) {
165
+ if (typeof value !== "object" || value === null || Array.isArray(value))
166
+ return false;
167
+ const keys = Object.keys(value).sort();
168
+ return (keys.length === RESULT_KEYS.length && keys.every((key, index) => key === RESULT_KEYS[index]));
169
+ }
170
+ function realDirectory(path) {
171
+ const real = realpathSync(resolve(path));
172
+ if (!statSync(real).isDirectory())
173
+ throw new Error("workspace is not a directory");
174
+ return real;
175
+ }
176
+ function isRegularFile(path) {
177
+ if (!existsSync(path))
178
+ return false;
179
+ try {
180
+ return statSync(path).isFile();
181
+ }
182
+ catch {
183
+ return false;
184
+ }
185
+ }
186
+ function runExtension(options) {
187
+ return new Promise((resolveResult) => {
188
+ let settled = false;
189
+ let timedOut = false;
190
+ let oversized = false;
191
+ let stdoutBytes = 0;
192
+ const stdout = [];
193
+ const finish = (result) => {
194
+ if (settled)
195
+ return;
196
+ settled = true;
197
+ clearTimeout(timer);
198
+ resolveResult(result);
199
+ };
200
+ const child = spawn(options.executable, [], {
201
+ cwd: options.cwd,
202
+ detached: process.platform !== "win32",
203
+ env: options.env,
204
+ shell: false,
205
+ stdio: ["pipe", "pipe", "ignore"],
206
+ windowsHide: true,
207
+ });
208
+ const timer = setTimeout(() => {
209
+ timedOut = true;
210
+ killExtension(child);
211
+ }, options.timeoutMs);
212
+ child.stdout.on("data", (chunk) => {
213
+ const bytes = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk);
214
+ stdoutBytes += bytes.byteLength;
215
+ if (stdoutBytes > options.maxOutputBytes) {
216
+ oversized = true;
217
+ killExtension(child);
218
+ return;
219
+ }
220
+ stdout.push(bytes);
221
+ });
222
+ child.stdin.on("error", () => {
223
+ // The process outcome below remains authoritative. Broken input is
224
+ // represented as a nonzero exit, signal, or invalid empty result.
225
+ });
226
+ child.on("error", () => finish({ kind: "error" }));
227
+ child.on("close", (code, signal) => {
228
+ if (timedOut)
229
+ return finish({ kind: "timeout" });
230
+ if (oversized)
231
+ return finish({ kind: "oversized" });
232
+ return finish({ kind: "closed", stdout: Buffer.concat(stdout), code, signal });
233
+ });
234
+ child.stdin.end(options.stdin);
235
+ });
236
+ }
237
+ function killExtension(child) {
238
+ if (process.platform !== "win32" && child.pid) {
239
+ try {
240
+ process.kill(-child.pid, "SIGKILL");
241
+ return;
242
+ }
243
+ catch {
244
+ // The process may have exited between the output/timeout boundary and
245
+ // this signal. Fall through to the ordinary child handle.
246
+ }
247
+ }
248
+ child.kill("SIGKILL");
249
+ }
@@ -7,9 +7,12 @@
7
7
  */
8
8
  import type { HarneryProgramContext } from "../commander.js";
9
9
  export type QaArtifactKind = "qa-run" | "qa-record" | "review-pack";
10
+ /** Recognize managed outputs even when a detached child receives an explicit path. */
11
+ export declare function managedQaReviewGuidance(repoRoot: string, outParent: string): string | undefined;
10
12
  export declare function resolveQaRepoRoot(context?: HarneryProgramContext): string;
11
13
  export declare function createManagedQaOutParent(repoRoot: string, kind: QaArtifactKind, opts?: {
12
14
  retentionMinutes?: number;
15
+ onCleanupWarning?: (message: string) => void;
13
16
  }): string;
14
17
  /**
15
18
  * Find the newest run in a valid managed QA workspace. This keeps no-path
@@ -1 +1 @@
1
- {"version":3,"file":"qa-artifacts.d.ts","sourceRoot":"","sources":["../../src/core/qa-artifacts.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAW7D,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,WAAW,GAAG,aAAa,CAAC;AAEpE,wBAAgB,iBAAiB,CAAC,OAAO,CAAC,EAAE,qBAAqB,GAAG,MAAM,CAEzE;AAED,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,cAAc,EACpB,IAAI,GAAE;IAAE,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAAO,GACvC,MAAM,CAcR;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAuClE"}
1
+ {"version":3,"file":"qa-artifacts.d.ts","sourceRoot":"","sources":["../../src/core/qa-artifacts.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAa7D,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,WAAW,GAAG,aAAa,CAAC;AAEpE,sFAAsF;AACtF,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAc/F;AAED,wBAAgB,iBAAiB,CAAC,OAAO,CAAC,EAAE,qBAAqB,GAAG,MAAM,CAEzE;AAED,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,cAAc,EACpB,IAAI,GAAE;IAAE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAAC,gBAAgB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;CAAO,GACrF,MAAM,CAqBR;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAuClE"}
@@ -5,14 +5,36 @@
5
5
  * Keep it in the bounded artifact store. Callers that pass --out-dir retain
6
6
  * full control of that explicit destination.
7
7
  */
8
- import { existsSync, readdirSync, readFileSync } from "node:fs";
9
- import { join, resolve } from "node:path";
8
+ import { existsSync, lstatSync, readdirSync, readFileSync } from "node:fs";
9
+ import { dirname, join, resolve } from "node:path";
10
10
  import { monorepoRoot } from "./agents/index.js";
11
- import { ARTIFACT_MANIFEST, artifactsRoot, configuredArtifactRetentionDays, createArtifact, parseArtifactManifest, } from "./artifacts/index.js";
11
+ import { ARTIFACT_MANIFEST, artifactReviewGuidance, artifactsRoot, autoCleanArtifacts, configuredArtifactRetentionDays, createArtifact, parseArtifactManifest, } from "./artifacts/index.js";
12
+ /** Recognize managed outputs even when a detached child receives an explicit path. */
13
+ export function managedQaReviewGuidance(repoRoot, outParent) {
14
+ const path = resolve(outParent);
15
+ if (dirname(path) !== artifactsRoot(repoRoot))
16
+ return undefined;
17
+ try {
18
+ if (lstatSync(path).isSymbolicLink() ||
19
+ lstatSync(join(path, ARTIFACT_MANIFEST)).isSymbolicLink())
20
+ return undefined;
21
+ const manifest = readQaManifest(join(path, ARTIFACT_MANIFEST));
22
+ return manifest ? artifactReviewGuidance(repoRoot, manifest.artifact_id) : undefined;
23
+ }
24
+ catch {
25
+ return undefined;
26
+ }
27
+ }
12
28
  export function resolveQaRepoRoot(context) {
13
29
  return resolve(context?.repoRoot ?? monorepoRoot() ?? process.cwd());
14
30
  }
15
31
  export function createManagedQaOutParent(repoRoot, kind, opts = {}) {
32
+ try {
33
+ autoCleanArtifacts(repoRoot);
34
+ }
35
+ catch (error) {
36
+ opts.onCleanupWarning?.(`artifact cleanup skipped: ${error instanceof Error ? error.message : String(error)}`);
37
+ }
16
38
  return createArtifact(repoRoot, {
17
39
  slug: kind,
18
40
  purpose: kind === "qa-run"
@@ -1,4 +1,4 @@
1
- export declare const RESOURCE_SNAPSHOT_SCHEMA_VERSION = 1;
1
+ export declare const RESOURCE_SNAPSHOT_SCHEMA_VERSION = 2;
2
2
  export declare const RESOURCE_SERVICE_STATUS_SCHEMA_VERSION = 1;
3
3
  export type ResourceSupportState = "supported" | "partial" | "unsupported" | "error";
4
4
  export interface ResourceProcessSample {
@@ -25,6 +25,7 @@ export interface ResourceProcessGroup {
25
25
  root_pids: number[];
26
26
  }
27
27
  export interface ResourceMachineSample {
28
+ cpu_available_parallelism?: number;
28
29
  cpu_percent: number | null;
29
30
  cpu_logical_count: number;
30
31
  load_average: [number, number, number] | null;
@@ -34,7 +35,7 @@ export interface ResourceMachineSample {
34
35
  memory_percent: number | null;
35
36
  swap_total_bytes: number | null;
36
37
  swap_used_bytes: number | null;
37
- process_count: number;
38
+ process_count: number | null;
38
39
  }
39
40
  export interface ResourceSnapshot {
40
41
  schema_version: typeof RESOURCE_SNAPSHOT_SCHEMA_VERSION;
@@ -46,16 +47,81 @@ export interface ResourceSnapshot {
46
47
  namespace: "host" | "wsl" | "unknown";
47
48
  support: {
48
49
  state: ResourceSupportState;
49
- sampler: "procfs" | "unsupported";
50
+ sampler: "procfs" | "darwin" | "win32" | "unsupported";
50
51
  reason?: string;
51
52
  };
52
53
  machine: ResourceMachineSample;
54
+ disks?: ResourceDiskSample[];
55
+ pressure?: ResourcePressureSample;
56
+ oom?: ResourceOomSample;
57
+ vmstat?: ResourceVmstatSample;
58
+ io?: ResourceIoSample;
59
+ host?: ResourceHostSample;
53
60
  groups: ResourceProcessGroup[];
54
61
  processes: ResourceProcessSample[];
55
62
  visible_process_count: number;
56
63
  omitted_process_count: number;
57
64
  unattributed_process_count: number;
58
65
  }
66
+ export interface ResourceDiskSample {
67
+ path: string;
68
+ state: ResourceSupportState;
69
+ total_bytes: number | null;
70
+ available_bytes: number | null;
71
+ used_percent: number | null;
72
+ reason?: string;
73
+ }
74
+ export interface ResourcePressureWindow {
75
+ avg10: number;
76
+ avg60: number;
77
+ avg300: number;
78
+ }
79
+ export interface ResourcePressureSample {
80
+ state: ResourceSupportState;
81
+ /** The CPU, memory, and I/O fields contain the kernel's some-stall averages. */
82
+ cpu: ResourcePressureWindow | null;
83
+ memory: ResourcePressureWindow | null;
84
+ io: ResourcePressureWindow | null;
85
+ memory_full: ResourcePressureWindow | null;
86
+ io_full: ResourcePressureWindow | null;
87
+ reason?: string;
88
+ }
89
+ export interface ResourceOomSample {
90
+ state: ResourceSupportState;
91
+ total_kills: number | null;
92
+ kills_since_last_sample: number | null;
93
+ last_kill_age_ms: number | null;
94
+ reason?: string;
95
+ }
96
+ /**
97
+ * Kernel memory-reclaim activity as per-second rates, from one bounded
98
+ * `/proc/vmstat` read. Rates need two consecutive samples: the first sample
99
+ * after a start, an observer restart, or a counter reset reports
100
+ * `counters_reset` with null rates rather than inventing a baseline.
101
+ */
102
+ export interface ResourceVmstatSample {
103
+ state: ResourceSupportState;
104
+ swap_in_bytes_per_second: number | null;
105
+ swap_out_bytes_per_second: number | null;
106
+ direct_reclaim_pages_per_second: number | null;
107
+ major_faults_per_second: number | null;
108
+ counters_reset: boolean;
109
+ reason?: string;
110
+ }
111
+ export interface ResourceIoSample {
112
+ state: ResourceSupportState;
113
+ read_bytes_per_second: number | null;
114
+ write_bytes_per_second: number | null;
115
+ reason?: string;
116
+ }
117
+ export interface ResourceHostSample {
118
+ platform: "win32";
119
+ sampled_at: string;
120
+ state: ResourceSupportState;
121
+ machine: ResourceMachineSample | null;
122
+ disks: ResourceDiskSample[];
123
+ reason?: string;
124
+ }
59
125
  export interface ResourceServiceStatusRecord {
60
126
  schema_version: typeof RESOURCE_SERVICE_STATUS_SCHEMA_VERSION;
61
127
  pid: number;
@@ -1 +1 @@
1
- {"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../../../src/core/resources/contract.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../../../src/core/resources/contract.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- export const RESOURCE_SNAPSHOT_SCHEMA_VERSION = 1;
1
+ export const RESOURCE_SNAPSHOT_SCHEMA_VERSION = 2;
2
2
  export const RESOURCE_SERVICE_STATUS_SCHEMA_VERSION = 1;
@@ -2,5 +2,6 @@ export * from "./contract.js";
2
2
  export * from "./sampler.js";
3
3
  export * from "./service.js";
4
4
  export * from "./service-status.js";
5
+ export * from "./status.js";
5
6
  export * from "./storage.js";
6
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/resources/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/resources/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC"}