@reticlehq/server 2.1.0 → 2.2.1

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 (471) hide show
  1. package/LICENSE-ENTERPRISE +37 -0
  2. package/README.md +5 -1
  3. package/dist/bridge-security.d.ts +1 -1
  4. package/dist/bridge-security.js +1 -1
  5. package/dist/bridge.d.ts +7 -0
  6. package/dist/bridge.d.ts.map +1 -1
  7. package/dist/bridge.js +22 -3
  8. package/dist/bridge.js.map +1 -1
  9. package/dist/bridge.test-harness.d.ts +5 -0
  10. package/dist/bridge.test-harness.d.ts.map +1 -1
  11. package/dist/bridge.test-harness.js +4 -0
  12. package/dist/bridge.test-harness.js.map +1 -1
  13. package/dist/capsule/capsule-store.d.ts +66 -0
  14. package/dist/capsule/capsule-store.d.ts.map +1 -0
  15. package/dist/capsule/capsule-store.js +110 -0
  16. package/dist/capsule/capsule-store.js.map +1 -0
  17. package/dist/capsule/capsule.d.ts +19 -0
  18. package/dist/capsule/capsule.d.ts.map +1 -0
  19. package/dist/capsule/capsule.js +36 -0
  20. package/dist/capsule/capsule.js.map +1 -0
  21. package/dist/capsule/causal-summary.d.ts +36 -0
  22. package/dist/capsule/causal-summary.d.ts.map +1 -0
  23. package/dist/capsule/causal-summary.js +111 -0
  24. package/dist/capsule/causal-summary.js.map +1 -0
  25. package/dist/capsule/divergence.d.ts +31 -0
  26. package/dist/capsule/divergence.d.ts.map +1 -0
  27. package/dist/capsule/divergence.js +41 -0
  28. package/dist/capsule/divergence.js.map +1 -0
  29. package/dist/capsule/minimize.d.ts +13 -0
  30. package/dist/capsule/minimize.d.ts.map +1 -0
  31. package/dist/capsule/minimize.js +23 -0
  32. package/dist/capsule/minimize.js.map +1 -0
  33. package/dist/capsule/predicate-to-links.d.ts +9 -0
  34. package/dist/capsule/predicate-to-links.d.ts.map +1 -0
  35. package/dist/capsule/predicate-to-links.js +31 -0
  36. package/dist/capsule/predicate-to-links.js.map +1 -0
  37. package/dist/cli-flow-commands.d.ts +31 -0
  38. package/dist/cli-flow-commands.d.ts.map +1 -0
  39. package/dist/cli-flow-commands.js +207 -0
  40. package/dist/cli-flow-commands.js.map +1 -0
  41. package/dist/cli-parse.d.ts +36 -2
  42. package/dist/cli-parse.d.ts.map +1 -1
  43. package/dist/cli-parse.js +97 -2
  44. package/dist/cli-parse.js.map +1 -1
  45. package/dist/cli-port.d.ts +10 -4
  46. package/dist/cli-port.d.ts.map +1 -1
  47. package/dist/cli-port.js +32 -6
  48. package/dist/cli-port.js.map +1 -1
  49. package/dist/cli-verify.d.ts +2 -0
  50. package/dist/cli-verify.d.ts.map +1 -1
  51. package/dist/cli-verify.js +52 -11
  52. package/dist/cli-verify.js.map +1 -1
  53. package/dist/cli.d.ts +2 -3
  54. package/dist/cli.d.ts.map +1 -1
  55. package/dist/cli.js +175 -9
  56. package/dist/cli.js.map +1 -1
  57. package/dist/cloud/cloud-config.d.ts +37 -0
  58. package/dist/cloud/cloud-config.d.ts.map +1 -0
  59. package/dist/cloud/cloud-config.js +87 -0
  60. package/dist/cloud/cloud-config.js.map +1 -0
  61. package/dist/cloud/cloud-sync.d.ts +96 -3
  62. package/dist/cloud/cloud-sync.d.ts.map +1 -1
  63. package/dist/cloud/cloud-sync.js +131 -2
  64. package/dist/cloud/cloud-sync.js.map +1 -1
  65. package/dist/cloud-cli.d.ts +4 -0
  66. package/dist/cloud-cli.d.ts.map +1 -0
  67. package/dist/cloud-cli.js +507 -0
  68. package/dist/cloud-cli.js.map +1 -0
  69. package/dist/crawl/crawl-tools.d.ts.map +1 -1
  70. package/dist/crawl/crawl-tools.js +12 -0
  71. package/dist/crawl/crawl-tools.js.map +1 -1
  72. package/dist/crawl/crawl.d.ts +23 -1
  73. package/dist/crawl/crawl.d.ts.map +1 -1
  74. package/dist/crawl/crawl.js +36 -9
  75. package/dist/crawl/crawl.js.map +1 -1
  76. package/dist/daemon-resilience.d.ts +5 -5
  77. package/dist/daemon-resilience.js +5 -5
  78. package/dist/daemon.d.ts +1 -1
  79. package/dist/daemon.d.ts.map +1 -1
  80. package/dist/daemon.js +53 -8
  81. package/dist/daemon.js.map +1 -1
  82. package/dist/domain/domain-tools.d.ts.map +1 -1
  83. package/dist/domain/domain-tools.js +11 -1
  84. package/dist/domain/domain-tools.js.map +1 -1
  85. package/dist/domain/flow-risk.d.ts +4 -4
  86. package/dist/domain/flow-risk.js +4 -4
  87. package/dist/ee/audit-log.d.ts +2 -2
  88. package/dist/ee/audit-log.js +2 -2
  89. package/dist/events/event-filters.d.ts +29 -1
  90. package/dist/events/event-filters.d.ts.map +1 -1
  91. package/dist/events/event-filters.js +75 -1
  92. package/dist/events/event-filters.js.map +1 -1
  93. package/dist/events/predicate-eval.d.ts +15 -0
  94. package/dist/events/predicate-eval.d.ts.map +1 -1
  95. package/dist/events/predicate-eval.js +97 -18
  96. package/dist/events/predicate-eval.js.map +1 -1
  97. package/dist/events/predicate.d.ts +22 -1
  98. package/dist/events/predicate.d.ts.map +1 -1
  99. package/dist/events/predicate.js +154 -20
  100. package/dist/events/predicate.js.map +1 -1
  101. package/dist/events/ring-buffer.d.ts +3 -3
  102. package/dist/events/ring-buffer.d.ts.map +1 -1
  103. package/dist/events/ring-buffer.js +54 -8
  104. package/dist/events/ring-buffer.js.map +1 -1
  105. package/dist/flows/affected.d.ts +25 -0
  106. package/dist/flows/affected.d.ts.map +1 -0
  107. package/dist/flows/affected.js +36 -0
  108. package/dist/flows/affected.js.map +1 -0
  109. package/dist/flows/annotate.d.ts +4 -4
  110. package/dist/flows/annotate.js +4 -4
  111. package/dist/flows/assertion-integrity.d.ts +24 -0
  112. package/dist/flows/assertion-integrity.d.ts.map +1 -0
  113. package/dist/flows/assertion-integrity.js +27 -0
  114. package/dist/flows/assertion-integrity.js.map +1 -0
  115. package/dist/flows/assertion-tiers-store.d.ts +80 -0
  116. package/dist/flows/assertion-tiers-store.d.ts.map +1 -0
  117. package/dist/flows/assertion-tiers-store.js +99 -0
  118. package/dist/flows/assertion-tiers-store.js.map +1 -0
  119. package/dist/flows/buddy-status.d.ts +25 -0
  120. package/dist/flows/buddy-status.d.ts.map +1 -0
  121. package/dist/flows/buddy-status.js +33 -0
  122. package/dist/flows/buddy-status.js.map +1 -0
  123. package/dist/flows/coverage.d.ts +28 -0
  124. package/dist/flows/coverage.d.ts.map +1 -0
  125. package/dist/flows/coverage.js +22 -0
  126. package/dist/flows/coverage.js.map +1 -0
  127. package/dist/flows/decision.d.ts.map +1 -1
  128. package/dist/flows/decision.js +16 -8
  129. package/dist/flows/decision.js.map +1 -1
  130. package/dist/flows/flake-store.d.ts +20 -0
  131. package/dist/flows/flake-store.d.ts.map +1 -0
  132. package/dist/flows/flake-store.js +59 -0
  133. package/dist/flows/flake-store.js.map +1 -0
  134. package/dist/flows/flake.d.ts +58 -0
  135. package/dist/flows/flake.d.ts.map +1 -0
  136. package/dist/flows/flake.js +36 -0
  137. package/dist/flows/flake.js.map +1 -0
  138. package/dist/flows/flow-classify.d.ts +8 -8
  139. package/dist/flows/flow-classify.js +8 -8
  140. package/dist/flows/flow-replay-run.d.ts.map +1 -1
  141. package/dist/flows/flow-replay-run.js +58 -5
  142. package/dist/flows/flow-replay-run.js.map +1 -1
  143. package/dist/flows/flow-replay.d.ts +9 -0
  144. package/dist/flows/flow-replay.d.ts.map +1 -1
  145. package/dist/flows/flow-replay.js +48 -13
  146. package/dist/flows/flow-replay.js.map +1 -1
  147. package/dist/flows/flow-report.d.ts +4 -4
  148. package/dist/flows/flow-sources.d.ts +20 -0
  149. package/dist/flows/flow-sources.d.ts.map +1 -0
  150. package/dist/flows/flow-sources.js +33 -0
  151. package/dist/flows/flow-sources.js.map +1 -0
  152. package/dist/flows/flow-tools.d.ts +13 -1
  153. package/dist/flows/flow-tools.d.ts.map +1 -1
  154. package/dist/flows/flow-tools.js +116 -13
  155. package/dist/flows/flow-tools.js.map +1 -1
  156. package/dist/flows/flows.d.ts +9 -4
  157. package/dist/flows/flows.d.ts.map +1 -1
  158. package/dist/flows/flows.js +38 -21
  159. package/dist/flows/flows.js.map +1 -1
  160. package/dist/flows/gate.d.ts +39 -0
  161. package/dist/flows/gate.d.ts.map +1 -0
  162. package/dist/flows/gate.js +34 -0
  163. package/dist/flows/gate.js.map +1 -0
  164. package/dist/flows/git-changed.d.ts +9 -0
  165. package/dist/flows/git-changed.d.ts.map +1 -0
  166. package/dist/flows/git-changed.js +25 -0
  167. package/dist/flows/git-changed.js.map +1 -0
  168. package/dist/flows/heal-run.d.ts +1 -1
  169. package/dist/flows/heal-run.js +1 -1
  170. package/dist/flows/parallel-suite.d.ts +27 -0
  171. package/dist/flows/parallel-suite.d.ts.map +1 -0
  172. package/dist/flows/parallel-suite.js +51 -0
  173. package/dist/flows/parallel-suite.js.map +1 -0
  174. package/dist/flows/replay.d.ts.map +1 -1
  175. package/dist/flows/replay.js +33 -11
  176. package/dist/flows/replay.js.map +1 -1
  177. package/dist/flows/server-verify.d.ts +16 -0
  178. package/dist/flows/server-verify.d.ts.map +1 -0
  179. package/dist/flows/server-verify.js +43 -0
  180. package/dist/flows/server-verify.js.map +1 -0
  181. package/dist/flows/watch-batcher.d.ts +18 -0
  182. package/dist/flows/watch-batcher.d.ts.map +1 -0
  183. package/dist/flows/watch-batcher.js +20 -0
  184. package/dist/flows/watch-batcher.js.map +1 -0
  185. package/dist/honesty/blind-spots.d.ts +37 -0
  186. package/dist/honesty/blind-spots.d.ts.map +1 -0
  187. package/dist/honesty/blind-spots.js +57 -0
  188. package/dist/honesty/blind-spots.js.map +1 -0
  189. package/dist/honesty/honesty.d.ts +57 -0
  190. package/dist/honesty/honesty.d.ts.map +1 -0
  191. package/dist/honesty/honesty.js +63 -0
  192. package/dist/honesty/honesty.js.map +1 -0
  193. package/dist/http-server.d.ts +5 -5
  194. package/dist/http-server.js +4 -4
  195. package/dist/idle-shutdown.d.ts +2 -2
  196. package/dist/idle-shutdown.js +2 -2
  197. package/dist/index.d.ts +3 -2
  198. package/dist/index.d.ts.map +1 -1
  199. package/dist/index.js +98 -13
  200. package/dist/index.js.map +1 -1
  201. package/dist/init/agent-rules.d.ts +38 -0
  202. package/dist/init/agent-rules.d.ts.map +1 -0
  203. package/dist/init/agent-rules.js +65 -0
  204. package/dist/init/agent-rules.js.map +1 -0
  205. package/dist/init/plan.d.ts +6 -0
  206. package/dist/init/plan.d.ts.map +1 -1
  207. package/dist/init/plan.js +79 -3
  208. package/dist/init/plan.js.map +1 -1
  209. package/dist/init/run.d.ts.map +1 -1
  210. package/dist/init/run.js +4 -0
  211. package/dist/init/run.js.map +1 -1
  212. package/dist/init/snippets.js +1 -1
  213. package/dist/init/vite-config.d.ts +1 -1
  214. package/dist/init/vite-config.js +2 -2
  215. package/dist/init/vite-config.js.map +1 -1
  216. package/dist/input/network-detail.d.ts +74 -0
  217. package/dist/input/network-detail.d.ts.map +1 -0
  218. package/dist/input/network-detail.js +160 -0
  219. package/dist/input/network-detail.js.map +1 -0
  220. package/dist/input/network-mock.d.ts +4 -4
  221. package/dist/input/real-input.d.ts +44 -11
  222. package/dist/input/real-input.d.ts.map +1 -1
  223. package/dist/input/real-input.js +57 -9
  224. package/dist/input/real-input.js.map +1 -1
  225. package/dist/journal/ambient-store.d.ts +16 -0
  226. package/dist/journal/ambient-store.d.ts.map +1 -0
  227. package/dist/journal/ambient-store.js +46 -0
  228. package/dist/journal/ambient-store.js.map +1 -0
  229. package/dist/journal/ambient.d.ts +48 -0
  230. package/dist/journal/ambient.d.ts.map +1 -0
  231. package/dist/journal/ambient.js +48 -0
  232. package/dist/journal/ambient.js.map +1 -0
  233. package/dist/journal/attach-journal.d.ts +22 -0
  234. package/dist/journal/attach-journal.d.ts.map +1 -0
  235. package/dist/journal/attach-journal.js +20 -0
  236. package/dist/journal/attach-journal.js.map +1 -0
  237. package/dist/journal/deviation-report.d.ts +28 -0
  238. package/dist/journal/deviation-report.d.ts.map +1 -0
  239. package/dist/journal/deviation-report.js +54 -0
  240. package/dist/journal/deviation-report.js.map +1 -0
  241. package/dist/journal/deviation-service.d.ts +12 -0
  242. package/dist/journal/deviation-service.d.ts.map +1 -0
  243. package/dist/journal/deviation-service.js +32 -0
  244. package/dist/journal/deviation-service.js.map +1 -0
  245. package/dist/journal/envelope-store.d.ts +19 -0
  246. package/dist/journal/envelope-store.d.ts.map +1 -0
  247. package/dist/journal/envelope-store.js +62 -0
  248. package/dist/journal/envelope-store.js.map +1 -0
  249. package/dist/journal/envelope.d.ts +232 -0
  250. package/dist/journal/envelope.d.ts.map +1 -0
  251. package/dist/journal/envelope.js +94 -0
  252. package/dist/journal/envelope.js.map +1 -0
  253. package/dist/journal/journal-query.d.ts +20 -0
  254. package/dist/journal/journal-query.d.ts.map +1 -0
  255. package/dist/journal/journal-query.js +28 -0
  256. package/dist/journal/journal-query.js.map +1 -0
  257. package/dist/journal/journal-recorder.d.ts +38 -0
  258. package/dist/journal/journal-recorder.d.ts.map +1 -0
  259. package/dist/journal/journal-recorder.js +81 -0
  260. package/dist/journal/journal-recorder.js.map +1 -0
  261. package/dist/journal/retention.d.ts +21 -0
  262. package/dist/journal/retention.d.ts.map +1 -0
  263. package/dist/journal/retention.js +50 -0
  264. package/dist/journal/retention.js.map +1 -0
  265. package/dist/journal/rollups.d.ts +49 -0
  266. package/dist/journal/rollups.d.ts.map +1 -0
  267. package/dist/journal/rollups.js +83 -0
  268. package/dist/journal/rollups.js.map +1 -0
  269. package/dist/journal/session-end.d.ts +32 -0
  270. package/dist/journal/session-end.d.ts.map +1 -0
  271. package/dist/journal/session-end.js +52 -0
  272. package/dist/journal/session-end.js.map +1 -0
  273. package/dist/journal/session-journal.d.ts +25 -0
  274. package/dist/journal/session-journal.d.ts.map +1 -0
  275. package/dist/journal/session-journal.js +168 -0
  276. package/dist/journal/session-journal.js.map +1 -0
  277. package/dist/license/license.d.ts +8 -3
  278. package/dist/license/license.d.ts.map +1 -1
  279. package/dist/license/license.js +34 -11
  280. package/dist/license/license.js.map +1 -1
  281. package/dist/mcp-proxy.d.ts +20 -0
  282. package/dist/mcp-proxy.d.ts.map +1 -1
  283. package/dist/mcp-proxy.js +45 -27
  284. package/dist/mcp-proxy.js.map +1 -1
  285. package/dist/mcp.d.ts +14 -0
  286. package/dist/mcp.d.ts.map +1 -1
  287. package/dist/mcp.js +79 -9
  288. package/dist/mcp.js.map +1 -1
  289. package/dist/oracles/flow-instrument-gaps.d.ts +19 -0
  290. package/dist/oracles/flow-instrument-gaps.d.ts.map +1 -0
  291. package/dist/oracles/flow-instrument-gaps.js +45 -0
  292. package/dist/oracles/flow-instrument-gaps.js.map +1 -0
  293. package/dist/oracles/propose-consequences.d.ts +22 -0
  294. package/dist/oracles/propose-consequences.d.ts.map +1 -0
  295. package/dist/oracles/propose-consequences.js +93 -0
  296. package/dist/oracles/propose-consequences.js.map +1 -0
  297. package/dist/oracles/self-instrument.d.ts +32 -0
  298. package/dist/oracles/self-instrument.d.ts.map +1 -0
  299. package/dist/oracles/self-instrument.js +44 -0
  300. package/dist/oracles/self-instrument.js.map +1 -0
  301. package/dist/pairing-token.d.ts +1 -1
  302. package/dist/phenomena/phenomena.d.ts +27 -0
  303. package/dist/phenomena/phenomena.d.ts.map +1 -0
  304. package/dist/phenomena/phenomena.js +102 -0
  305. package/dist/phenomena/phenomena.js.map +1 -0
  306. package/dist/pool/browser-pool.d.ts +5 -3
  307. package/dist/pool/browser-pool.d.ts.map +1 -1
  308. package/dist/pool/browser-pool.js +21 -3
  309. package/dist/pool/browser-pool.js.map +1 -1
  310. package/dist/pool/playwright-launcher.d.ts +2 -0
  311. package/dist/pool/playwright-launcher.d.ts.map +1 -1
  312. package/dist/pool/playwright-launcher.js +21 -2
  313. package/dist/pool/playwright-launcher.js.map +1 -1
  314. package/dist/project/baselines.d.ts.map +1 -1
  315. package/dist/project/baselines.js +5 -3
  316. package/dist/project/baselines.js.map +1 -1
  317. package/dist/project/file-lock.d.ts +2 -0
  318. package/dist/project/file-lock.d.ts.map +1 -0
  319. package/dist/project/file-lock.js +24 -0
  320. package/dist/project/file-lock.js.map +1 -0
  321. package/dist/project/fs-port.d.ts +18 -0
  322. package/dist/project/fs-port.d.ts.map +1 -1
  323. package/dist/project/fs-port.js +24 -2
  324. package/dist/project/fs-port.js.map +1 -1
  325. package/dist/project/project-store.d.ts.map +1 -1
  326. package/dist/project/project-store.js +33 -15
  327. package/dist/project/project-store.js.map +1 -1
  328. package/dist/project/project-tools.d.ts +0 -6
  329. package/dist/project/project-tools.d.ts.map +1 -1
  330. package/dist/project/project-tools.js +52 -6
  331. package/dist/project/project-tools.js.map +1 -1
  332. package/dist/project/reticle-dir.d.ts +39 -14
  333. package/dist/project/reticle-dir.d.ts.map +1 -1
  334. package/dist/project/reticle-dir.js +30 -4
  335. package/dist/project/reticle-dir.js.map +1 -1
  336. package/dist/runs/build-verification-run.d.ts +1 -1
  337. package/dist/runs/build-verification-run.js +1 -1
  338. package/dist/runs/repair-prompt.d.ts +2 -0
  339. package/dist/runs/repair-prompt.d.ts.map +1 -1
  340. package/dist/runs/repair-prompt.js +14 -1
  341. package/dist/runs/repair-prompt.js.map +1 -1
  342. package/dist/runs/reticle-runner.d.ts +1 -1
  343. package/dist/runs/reticle-runner.d.ts.map +1 -1
  344. package/dist/runs/run-diff.d.ts +34 -0
  345. package/dist/runs/run-diff.d.ts.map +1 -0
  346. package/dist/runs/run-diff.js +71 -0
  347. package/dist/runs/run-diff.js.map +1 -0
  348. package/dist/runs/run-store.d.ts +6 -1
  349. package/dist/runs/run-store.d.ts.map +1 -1
  350. package/dist/runs/run-store.js +22 -2
  351. package/dist/runs/run-store.js.map +1 -1
  352. package/dist/runs/run-tools.d.ts.map +1 -1
  353. package/dist/runs/run-tools.js +16 -3
  354. package/dist/runs/run-tools.js.map +1 -1
  355. package/dist/runs/verification-sync.d.ts +24 -0
  356. package/dist/runs/verification-sync.d.ts.map +1 -0
  357. package/dist/runs/verification-sync.js +67 -0
  358. package/dist/runs/verification-sync.js.map +1 -0
  359. package/dist/runs/verify-server.js +1 -1
  360. package/dist/runs/verify-server.js.map +1 -1
  361. package/dist/session/control-envelope.d.ts +9 -1
  362. package/dist/session/control-envelope.d.ts.map +1 -1
  363. package/dist/session/control-envelope.js +13 -1
  364. package/dist/session/control-envelope.js.map +1 -1
  365. package/dist/session/live-control-tools.d.ts +1 -1
  366. package/dist/session/live-control-tools.js +1 -1
  367. package/dist/session/live-control.d.ts +38 -0
  368. package/dist/session/live-control.d.ts.map +1 -0
  369. package/dist/session/live-control.js +64 -0
  370. package/dist/session/live-control.js.map +1 -0
  371. package/dist/session/observed-state.d.ts +46 -0
  372. package/dist/session/observed-state.d.ts.map +1 -0
  373. package/dist/session/observed-state.js +76 -0
  374. package/dist/session/observed-state.js.map +1 -0
  375. package/dist/session/output-budget.d.ts +9 -0
  376. package/dist/session/output-budget.d.ts.map +1 -1
  377. package/dist/session/output-budget.js +9 -0
  378. package/dist/session/output-budget.js.map +1 -1
  379. package/dist/session/review-store.d.ts +1 -1
  380. package/dist/session/review-store.d.ts.map +1 -1
  381. package/dist/session/review-store.js +2 -2
  382. package/dist/session/review-store.js.map +1 -1
  383. package/dist/session/session-manager.d.ts +9 -7
  384. package/dist/session/session-manager.d.ts.map +1 -1
  385. package/dist/session/session-manager.js +8 -8
  386. package/dist/session/session-manager.js.map +1 -1
  387. package/dist/session/session-readiness.js +1 -1
  388. package/dist/session/session-readiness.js.map +1 -1
  389. package/dist/session/session-reaper.d.ts +1 -1
  390. package/dist/session/session-reaper.js +1 -1
  391. package/dist/session/session-recommendation.d.ts +1 -1
  392. package/dist/session/session-recommendation.js +1 -1
  393. package/dist/session/session-tools.js +1 -1
  394. package/dist/session/session-tools.js.map +1 -1
  395. package/dist/session/session.d.ts +43 -11
  396. package/dist/session/session.d.ts.map +1 -1
  397. package/dist/session/session.js +115 -46
  398. package/dist/session/session.js.map +1 -1
  399. package/dist/telemetry/telemetry.d.ts +41 -0
  400. package/dist/telemetry/telemetry.d.ts.map +1 -0
  401. package/dist/telemetry/telemetry.js +220 -0
  402. package/dist/telemetry/telemetry.js.map +1 -0
  403. package/dist/tools/act-tools.d.ts.map +1 -1
  404. package/dist/tools/act-tools.js +252 -70
  405. package/dist/tools/act-tools.js.map +1 -1
  406. package/dist/tools/act-view.d.ts +4 -4
  407. package/dist/tools/act-view.js +4 -4
  408. package/dist/tools/browser-tools.d.ts.map +1 -1
  409. package/dist/tools/browser-tools.js +32 -8
  410. package/dist/tools/browser-tools.js.map +1 -1
  411. package/dist/tools/contract-tools.d.ts.map +1 -1
  412. package/dist/tools/contract-tools.js +5 -0
  413. package/dist/tools/contract-tools.js.map +1 -1
  414. package/dist/tools/dynamic-tools.d.ts.map +1 -1
  415. package/dist/tools/dynamic-tools.js +8 -7
  416. package/dist/tools/dynamic-tools.js.map +1 -1
  417. package/dist/tools/invoke-tool.d.ts.map +1 -1
  418. package/dist/tools/invoke-tool.js +36 -29
  419. package/dist/tools/invoke-tool.js.map +1 -1
  420. package/dist/tools/lease-tools.d.ts +16 -0
  421. package/dist/tools/lease-tools.d.ts.map +1 -1
  422. package/dist/tools/lease-tools.js +11 -0
  423. package/dist/tools/lease-tools.js.map +1 -1
  424. package/dist/tools/merge-tools.d.ts +43 -0
  425. package/dist/tools/merge-tools.d.ts.map +1 -0
  426. package/dist/tools/merge-tools.js +66 -0
  427. package/dist/tools/merge-tools.js.map +1 -0
  428. package/dist/tools/observe-tools.d.ts.map +1 -1
  429. package/dist/tools/observe-tools.js +172 -29
  430. package/dist/tools/observe-tools.js.map +1 -1
  431. package/dist/tools/profiles.d.ts +18 -13
  432. package/dist/tools/profiles.d.ts.map +1 -1
  433. package/dist/tools/profiles.js +39 -33
  434. package/dist/tools/profiles.js.map +1 -1
  435. package/dist/tools/query-paginate.d.ts +9 -2
  436. package/dist/tools/query-paginate.d.ts.map +1 -1
  437. package/dist/tools/query-paginate.js +21 -4
  438. package/dist/tools/query-paginate.js.map +1 -1
  439. package/dist/tools/read-tools.d.ts.map +1 -1
  440. package/dist/tools/read-tools.js +30 -1
  441. package/dist/tools/read-tools.js.map +1 -1
  442. package/dist/tools/snapshot-delta.d.ts +2 -0
  443. package/dist/tools/snapshot-delta.d.ts.map +1 -1
  444. package/dist/tools/snapshot-delta.js +0 -0
  445. package/dist/tools/snapshot-delta.js.map +1 -1
  446. package/dist/tools/tool-kit.d.ts +3 -2
  447. package/dist/tools/tool-kit.d.ts.map +1 -1
  448. package/dist/tools/tool-kit.js +11 -1
  449. package/dist/tools/tool-kit.js.map +1 -1
  450. package/dist/tools/tool-names.d.ts +18 -10
  451. package/dist/tools/tool-names.d.ts.map +1 -1
  452. package/dist/tools/tool-names.js +22 -13
  453. package/dist/tools/tool-names.js.map +1 -1
  454. package/dist/tools/tools-helpers.d.ts +12 -0
  455. package/dist/tools/tools-helpers.d.ts.map +1 -1
  456. package/dist/tools/tools-helpers.js +20 -0
  457. package/dist/tools/tools-helpers.js.map +1 -1
  458. package/dist/tools/tools.d.ts.map +1 -1
  459. package/dist/tools/tools.js +162 -12
  460. package/dist/tools/tools.js.map +1 -1
  461. package/dist/update/update-checker.d.ts.map +1 -1
  462. package/dist/update/update-checker.js +26 -1
  463. package/dist/update/update-checker.js.map +1 -1
  464. package/dist/update/updater.d.ts +1 -1
  465. package/dist/update/updater.js +2 -2
  466. package/dist/update/updater.js.map +1 -1
  467. package/package.json +8 -3
  468. package/dist/update/update-tools.d.ts +0 -3
  469. package/dist/update/update-tools.d.ts.map +0 -1
  470. package/dist/update/update-tools.js +0 -94
  471. package/dist/update/update-tools.js.map +0 -1
@@ -0,0 +1,25 @@
1
+ import { execFile } from 'node:child_process';
2
+ import { promisify } from 'node:util';
3
+ const run = promisify(execFile);
4
+ /** Parse `git diff --name-only` output into a clean file list. Pure; exported for testing. */
5
+ export function parseGitFiles(output) {
6
+ return output
7
+ .split('\n')
8
+ .map((line) => line.trim())
9
+ .filter((line) => line.length > 0);
10
+ }
11
+ /**
12
+ * Files changed since a git ref (`git diff --name-only <ref>`), so `reticle gate --since main` works from
13
+ * the real diff instead of hand-listed files. Returns [] on any git failure (not a repo, bad ref) rather
14
+ * than throwing — the caller degrades to "no changes" and the gate simply passes, never crashes CI.
15
+ */
16
+ export async function changedFilesSince(ref, cwd) {
17
+ try {
18
+ const { stdout } = await run('git', ['diff', '--name-only', ref], { cwd });
19
+ return parseGitFiles(stdout);
20
+ }
21
+ catch {
22
+ return [];
23
+ }
24
+ }
25
+ //# sourceMappingURL=git-changed.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-changed.js","sourceRoot":"","sources":["../../src/flows/git-changed.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,MAAM,GAAG,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AAEhC,8FAA8F;AAC9F,MAAM,UAAU,aAAa,CAAC,MAAc;IAC1C,OAAO,MAAM;SACV,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;SAC1B,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACvC,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,GAAW,EAAE,GAAW;IAC9D,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;QAC3E,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * The self-heal state machine — load → replay → collect confident proposals → (apply ? verify+write :
2
+ * The self-heal state machine — load → replay → collect confident proposals → (apply ? verify+write:
3
3
  * dry). Split out of flow-tools.ts (which keeps only the FLOW_HEAL ToolDef) as a sibling of
4
4
  * flow-replay-run.ts. Never silently rewrites: only proposals that cleared HEAL_CONFIDENCE_MIN are
5
5
  * eligible, and only when apply:true; before persisting it re-verifies the success consequence still
@@ -1,5 +1,5 @@
1
1
  /**
2
- * The self-heal state machine — load → replay → collect confident proposals → (apply ? verify+write :
2
+ * The self-heal state machine — load → replay → collect confident proposals → (apply ? verify+write:
3
3
  * dry). Split out of flow-tools.ts (which keeps only the FLOW_HEAL ToolDef) as a sibling of
4
4
  * flow-replay-run.ts. Never silently rewrites: only proposals that cleared HEAL_CONFIDENCE_MIN are
5
5
  * eligible, and only when apply:true; before persisting it re-verifies the success consequence still
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Parallel suite execution. `flow_verify` replays flows sequentially because they all drive the
3
+ * SAME live tab and would race the DOM. The escape is the lease pool: each flow gets its own isolated
4
+ * headless context, so N flows can run at once and a 200-flow suite finishes in interactive time.
5
+ *
6
+ * This is the scheduler half — a bounded-concurrency map, kept pure and injectable so the ordering and
7
+ * failure semantics are unit-tested without a browser:
8
+ * - results come back in INPUT order regardless of completion order (a suite verdict must be stable),
9
+ * - one flow throwing never sinks the run — it is captured as that item's outcome, because a suite that
10
+ * aborts on the first crash tells you nothing about the other 199 flows.
11
+ */
12
+ export interface Outcome<T> {
13
+ ok: boolean;
14
+ value?: T;
15
+ error?: string;
16
+ }
17
+ /**
18
+ * Run `fn` over `items` with at most `limit` in flight. Order-preserving; per-item failures are captured
19
+ * rather than thrown. `limit` is clamped to at least 1 (a 0/negative cap would deadlock the suite).
20
+ */
21
+ export declare function mapWithConcurrency<I, T>(items: readonly I[], limit: number, fn: (item: I, index: number) => Promise<T>): Promise<Outcome<T>[]>;
22
+ /**
23
+ * How many flows to run at once: never more than there are flows, never more than the pool can lease,
24
+ * and never below 1. Explicit `requested` (the tool's `parallel` arg) wins when it is a sane number.
25
+ */
26
+ export declare function resolveConcurrency(flowCount: number, poolCapacity: number, requested?: number): number;
27
+ //# sourceMappingURL=parallel-suite.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parallel-suite.d.ts","sourceRoot":"","sources":["../../src/flows/parallel-suite.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,MAAM,WAAW,OAAO,CAAC,CAAC;IACxB,EAAE,EAAE,OAAO,CAAC;IACZ,KAAK,CAAC,EAAE,CAAC,CAAC;IACV,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CAAC,CAAC,EAAE,CAAC,EAC3C,KAAK,EAAE,SAAS,CAAC,EAAE,EACnB,KAAK,EAAE,MAAM,EACb,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,GACzC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAwBvB;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACpB,SAAS,CAAC,EAAE,MAAM,GACjB,MAAM,CAIR"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Parallel suite execution. `flow_verify` replays flows sequentially because they all drive the
3
+ * SAME live tab and would race the DOM. The escape is the lease pool: each flow gets its own isolated
4
+ * headless context, so N flows can run at once and a 200-flow suite finishes in interactive time.
5
+ *
6
+ * This is the scheduler half — a bounded-concurrency map, kept pure and injectable so the ordering and
7
+ * failure semantics are unit-tested without a browser:
8
+ * - results come back in INPUT order regardless of completion order (a suite verdict must be stable),
9
+ * - one flow throwing never sinks the run — it is captured as that item's outcome, because a suite that
10
+ * aborts on the first crash tells you nothing about the other 199 flows.
11
+ */
12
+ /**
13
+ * Run `fn` over `items` with at most `limit` in flight. Order-preserving; per-item failures are captured
14
+ * rather than thrown. `limit` is clamped to at least 1 (a 0/negative cap would deadlock the suite).
15
+ */
16
+ export async function mapWithConcurrency(items, limit, fn) {
17
+ const results = new Array(items.length);
18
+ const cap = Math.max(1, Math.floor(limit));
19
+ let next = 0;
20
+ const worker = async () => {
21
+ for (;;) {
22
+ const index = next;
23
+ next += 1;
24
+ const item = items[index];
25
+ if (index >= items.length || item === undefined)
26
+ return;
27
+ try {
28
+ results[index] = { ok: true, value: await fn(item, index) };
29
+ }
30
+ catch (error) {
31
+ results[index] = {
32
+ ok: false,
33
+ error: error instanceof Error ? error.message : String(error),
34
+ };
35
+ }
36
+ }
37
+ };
38
+ await Promise.all(Array.from({ length: Math.min(cap, items.length) }, () => worker()));
39
+ return results;
40
+ }
41
+ /**
42
+ * How many flows to run at once: never more than there are flows, never more than the pool can lease,
43
+ * and never below 1. Explicit `requested` (the tool's `parallel` arg) wins when it is a sane number.
44
+ */
45
+ export function resolveConcurrency(flowCount, poolCapacity, requested) {
46
+ const ceiling = Math.max(1, Math.min(flowCount, poolCapacity));
47
+ if (requested === undefined || !Number.isFinite(requested) || requested < 1)
48
+ return ceiling;
49
+ return Math.max(1, Math.min(Math.floor(requested), ceiling));
50
+ }
51
+ //# sourceMappingURL=parallel-suite.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parallel-suite.js","sourceRoot":"","sources":["../../src/flows/parallel-suite.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAQH;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,KAAmB,EACnB,KAAa,EACb,EAA0C;IAE1C,MAAM,OAAO,GAAiB,IAAI,KAAK,CAAa,KAAK,CAAC,MAAM,CAAC,CAAC;IAClE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IAC3C,IAAI,IAAI,GAAG,CAAC,CAAC;IAEb,MAAM,MAAM,GAAG,KAAK,IAAmB,EAAE;QACvC,SAAS,CAAC;YACR,MAAM,KAAK,GAAG,IAAI,CAAC;YACnB,IAAI,IAAI,CAAC,CAAC;YACV,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;YAC1B,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,IAAI,IAAI,KAAK,SAAS;gBAAE,OAAO;YACxD,IAAI,CAAC;gBACH,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC;YAC9D,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,GAAG;oBACf,EAAE,EAAE,KAAK;oBACT,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;iBAC9D,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACvF,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAChC,SAAiB,EACjB,YAAoB,EACpB,SAAkB;IAElB,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC;IAC/D,IAAI,SAAS,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,SAAS,GAAG,CAAC;QAAE,OAAO,OAAO,CAAC;IAC5F,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;AAC/D,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"replay.d.ts","sourceRoot":"","sources":["../../src/flows/replay.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,aAAa,EACnB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACrE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAGrD;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,EAAE,CAKzD;AAED,6FAA6F;AAC7F,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,OAAO,EACd,gBAAgB,UAAQ,GACvB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAKzB;AAWD;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,OAAO,GAAG,YAAY,CAyBxF;AAUD,4GAA4G;AAC5G,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,OAAO,GAAG,YAAY,CAkB7F;AAuBD,UAAU,gBAAgB;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,OAAO,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,2FAA2F;AAC3F,wBAAsB,aAAa,CACjC,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,eAAe,EACxB,gBAAgB,UAAQ,GACvB,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAyC7B"}
1
+ {"version":3,"file":"replay.d.ts","sourceRoot":"","sources":["../../src/flows/replay.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,aAAa,EACnB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACrE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAGrD;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,EAAE,CAKzD;AAED,6FAA6F;AAC7F,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,OAAO,EACd,gBAAgB,UAAQ,GACvB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAKzB;AAWD;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,OAAO,GAAG,YAAY,CA8BxF;AAUD,4GAA4G;AAC5G,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,OAAO,GAAG,YAAY,CAkB7F;AAuBD,UAAU,gBAAgB;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,OAAO,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,2FAA2F;AAC3F,wBAAsB,aAAa,CACjC,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,eAAe,EACxB,gBAAgB,UAAQ,GACvB,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAuD7B"}
@@ -50,15 +50,21 @@ export function compileActStep(args, res) {
50
50
  const testid = asString(r['testid']);
51
51
  const action = asString(args['action']) ?? '';
52
52
  const actArgs = replayActionArgs(args['args']);
53
+ const source = sourceFromResult(r);
53
54
  if (testid !== undefined) {
54
- return {
55
- tool: ReticleTool.ACT,
56
- stable: true,
57
- args: { by: QueryBy.TESTID, value: testid, action, args: actArgs },
55
+ // The testid anchors the step; source rides along purely so a failure can name a file. Carrying
56
+ // both was the point of separating anchor from provenance at capture time.
57
+ const testidArgs = {
58
+ by: QueryBy.TESTID,
59
+ value: testid,
60
+ action,
61
+ args: actArgs,
58
62
  };
63
+ if (source !== undefined)
64
+ testidArgs['source'] = source;
65
+ return { tool: ReticleTool.ACT, stable: true, args: testidArgs };
59
66
  }
60
67
  const component = asString(r['component']);
61
- const source = sourceFromResult(r);
62
68
  if (component !== undefined || source !== undefined) {
63
69
  const componentArgs = { by: QueryBy.COMPONENT, action, args: actArgs };
64
70
  if (component !== undefined)
@@ -132,18 +138,34 @@ export async function replayProgram(session, program, confirmDangerous = false)
132
138
  args: replayActionArgs(sub['args'], confirmDangerous),
133
139
  });
134
140
  }
135
- const r = await session.command(ReticleCommand.ACT_SEQUENCE, { steps: liveSteps });
141
+ // Attribute the step's effects to the step: unattributed effects are learned as ambient
142
+ // churn on the regions the flow exercises, which teaches the settle oracle to ignore them.
143
+ session.beginAction(ReticleTool.REPLAY, { steps: liveSteps.length });
144
+ let r;
145
+ try {
146
+ r = await session.command(ReticleCommand.ACT_SEQUENCE, { steps: liveSteps });
147
+ }
148
+ finally {
149
+ session.finishAction();
150
+ }
136
151
  results.push(buildResult(step.tool, r.ok, r.error, notes));
137
152
  if (!r.ok)
138
153
  break;
139
154
  }
140
155
  else {
141
156
  const { ref, note } = await resolveRef(session, step.args);
142
- const r = await session.command(ReticleCommand.ACT, {
143
- ref,
144
- action: asString(step.args['action']) ?? '',
145
- args: replayActionArgs(step.args['args'], confirmDangerous),
146
- });
157
+ session.beginAction(ReticleTool.REPLAY, { ref });
158
+ let r;
159
+ try {
160
+ r = await session.command(ReticleCommand.ACT, {
161
+ ref,
162
+ action: asString(step.args['action']) ?? '',
163
+ args: replayActionArgs(step.args['args'], confirmDangerous),
164
+ });
165
+ }
166
+ finally {
167
+ session.finishAction();
168
+ }
147
169
  results.push(buildResult(step.tool, r.ok, r.error, note !== undefined ? [note] : []));
148
170
  if (!r.ok)
149
171
  break;
@@ -1 +1 @@
1
- {"version":3,"file":"replay.js","sourceRoot":"","sources":["../../src/flows/replay.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"replay.js","sourceRoot":"","sources":["../../src/flows/replay.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * verify:server delegation. When a project's cloud config sets `verify: 'server'`, the FLOW_VERIFY tool
3
+ * runs the suite on the hosted runner (POST /v1/verifications) instead of replaying in the local browser,
4
+ * and maps the server's report back into the SAME SuiteVerdict the local path returns — so the agent's
5
+ * contract is identical either way. Falls back to local (returns null) when not attached, wrong mode, or
6
+ * there is no reachable preview URL for the server to hit.
7
+ */
8
+ import type { SuiteVerdict } from '@reticlehq/core';
9
+ import type { ToolDeps } from '../tools/tools.js';
10
+ import { type ProjectCloud } from './../cloud/cloud-config.js';
11
+ import { type ServerVerification } from '../cloud/cloud-sync.js';
12
+ /** Map the hosted runner's report onto the local suite-verdict shape (status/total/passed/failed/failures). */
13
+ export declare function toSuiteVerdict(report: ServerVerification): SuiteVerdict;
14
+ /** Run the suite on the hosted runner, or null to signal the caller should replay locally. */
15
+ export declare function runServerVerify(deps: ToolDeps, cloud: ProjectCloud, sessionId: string | undefined, flows: string[]): Promise<SuiteVerdict | null>;
16
+ //# sourceMappingURL=server-verify.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-verify.d.ts","sourceRoot":"","sources":["../../src/flows/server-verify.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,YAAY,EAAmB,MAAM,iBAAiB,CAAC;AACrE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAc,KAAK,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC3E,OAAO,EAA4B,KAAK,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAM3F,+GAA+G;AAC/G,wBAAgB,cAAc,CAAC,MAAM,EAAE,kBAAkB,GAAG,YAAY,CAavE;AAED,8FAA8F;AAC9F,wBAAsB,eAAe,CACnC,IAAI,EAAE,QAAQ,EACd,KAAK,EAAE,YAAY,EACnB,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,KAAK,EAAE,MAAM,EAAE,GACd,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAoB9B"}
@@ -0,0 +1,43 @@
1
+ import { VerifyMode } from './../cloud/cloud-config.js';
2
+ import { submitServerVerification } from '../cloud/cloud-sync.js';
3
+ const PASS = 'pass';
4
+ const UNVERIFIED = 'unverified';
5
+ const SOURCE = 'reticle-mcp';
6
+ /** Map the hosted runner's report onto the local suite-verdict shape (status/total/passed/failed/failures). */
7
+ export function toSuiteVerdict(report) {
8
+ const failures = report.flows
9
+ .filter((f) => f.status !== PASS)
10
+ .map((f) => ({
11
+ flow: f.name,
12
+ verdict: 'fail',
13
+ nextAction: `verified on the server — see report ${report.verificationId}`,
14
+ }));
15
+ const total = report.flows.length;
16
+ const passed = total - failures.length;
17
+ const status = report.verdict === PASS && failures.length === 0 ? 'pass' : 'fail';
18
+ return { status, total, passed, failed: failures.length, summary: report.summary, failures };
19
+ }
20
+ /** Run the suite on the hosted runner, or null to signal the caller should replay locally. */
21
+ export async function runServerVerify(deps, cloud, sessionId, flows) {
22
+ if (cloud.verify !== VerifyMode.SERVER || cloud.config === null)
23
+ return null;
24
+ let previewUrl;
25
+ try {
26
+ previewUrl = deps.sessions.resolve(sessionId).url;
27
+ }
28
+ catch {
29
+ previewUrl = undefined;
30
+ }
31
+ // The server hits the URL itself; with no URL (or a localhost one it can't reach) fall back to local.
32
+ if (previewUrl === undefined || previewUrl.length === 0)
33
+ return null;
34
+ const report = await submitServerVerification({ previewUrl, flows, source: SOURCE }, cloud.config, (url, init) => fetch(url, init));
35
+ if (report === null)
36
+ return null;
37
+ // The hosted runner said it couldn't actually verify (e.g. it's not enabled yet). Never surface that as
38
+ // a pass or a fail — fall back to the real local replay so the verdict reflects a browser that ran.
39
+ if (report.verdict === UNVERIFIED)
40
+ return null;
41
+ return toSuiteVerdict(report);
42
+ }
43
+ //# sourceMappingURL=server-verify.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-verify.js","sourceRoot":"","sources":["../../src/flows/server-verify.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,UAAU,EAAqB,MAAM,4BAA4B,CAAC;AAC3E,OAAO,EAAE,wBAAwB,EAA2B,MAAM,wBAAwB,CAAC;AAE3F,MAAM,IAAI,GAAG,MAAM,CAAC;AACpB,MAAM,UAAU,GAAG,YAAY,CAAC;AAChC,MAAM,MAAM,GAAG,aAAa,CAAC;AAE7B,+GAA+G;AAC/G,MAAM,UAAU,cAAc,CAAC,MAA0B;IACvD,MAAM,QAAQ,GAAsB,MAAM,CAAC,KAAK;SAC7C,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC;SAChC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACX,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,OAAO,EAAE,MAAM;QACf,UAAU,EAAE,uCAAuC,MAAM,CAAC,cAAc,EAAE;KAC3E,CAAC,CAAC,CAAC;IACN,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;IAClC,MAAM,MAAM,GAAG,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC;IACvC,MAAM,MAAM,GACV,MAAM,CAAC,OAAO,KAAK,IAAI,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;IACrE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC;AAC/F,CAAC;AAED,8FAA8F;AAC9F,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,IAAc,EACd,KAAmB,EACnB,SAA6B,EAC7B,KAAe;IAEf,IAAI,KAAK,CAAC,MAAM,KAAK,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAC7E,IAAI,UAA8B,CAAC;IACnC,IAAI,CAAC;QACH,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC;IACpD,CAAC;IAAC,MAAM,CAAC;QACP,UAAU,GAAG,SAAS,CAAC;IACzB,CAAC;IACD,sGAAsG;IACtG,IAAI,UAAU,KAAK,SAAS,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACrE,MAAM,MAAM,GAAG,MAAM,wBAAwB,CAC3C,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,EACrC,KAAK,CAAC,MAAM,EACZ,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAChC,CAAC;IACF,IAAI,MAAM,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IACjC,wGAAwG;IACxG,oGAAoG;IACpG,IAAI,MAAM,CAAC,OAAO,KAAK,UAAU;QAAE,OAAO,IAAI,CAAC;IAC/C,OAAO,cAAc,CAAC,MAAM,CAAC,CAAC;AAChC,CAAC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Debounce batcher for `reticle watch` — a save-heavy editor fires many change events per real edit
3
+ * (temp files, multi-file formats-on-save). This coalesces a burst of changed paths into one flush after
4
+ * a quiet window, so we compute affected flows once per edit, not per keystroke. The scheduler (setTimeout)
5
+ * is injected, keeping the batching logic pure and unit-testable.
6
+ */
7
+ export interface WatchBatcher {
8
+ onChange(file: string): void;
9
+ }
10
+ export interface WatchBatcherOptions {
11
+ debounceMs: number;
12
+ /** Injected scheduler (setTimeout) — deterministic in tests. */
13
+ schedule: (fn: () => void, ms: number) => void;
14
+ /** Called once per quiet window with the unique changed paths since the last flush. */
15
+ onFlush: (files: string[]) => void;
16
+ }
17
+ export declare function createWatchBatcher(options: WatchBatcherOptions): WatchBatcher;
18
+ //# sourceMappingURL=watch-batcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watch-batcher.d.ts","sourceRoot":"","sources":["../../src/flows/watch-batcher.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,gEAAgE;IAChE,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,IAAI,EAAE,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/C,uFAAuF;IACvF,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;CACpC;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,mBAAmB,GAAG,YAAY,CAgB7E"}
@@ -0,0 +1,20 @@
1
+ export function createWatchBatcher(options) {
2
+ let pending = new Set();
3
+ let scheduled = false;
4
+ return {
5
+ onChange(file) {
6
+ pending.add(file);
7
+ if (scheduled)
8
+ return;
9
+ scheduled = true;
10
+ options.schedule(() => {
11
+ scheduled = false;
12
+ const files = [...pending];
13
+ pending = new Set();
14
+ if (files.length > 0)
15
+ options.onFlush(files);
16
+ }, options.debounceMs);
17
+ },
18
+ };
19
+ }
20
+ //# sourceMappingURL=watch-batcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watch-batcher.js","sourceRoot":"","sources":["../../src/flows/watch-batcher.ts"],"names":[],"mappings":"AAkBA,MAAM,UAAU,kBAAkB,CAAC,OAA4B;IAC7D,IAAI,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,OAAO;QACL,QAAQ,CAAC,IAAY;YACnB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAClB,IAAI,SAAS;gBAAE,OAAO;YACtB,SAAS,GAAG,IAAI,CAAC;YACjB,OAAO,CAAC,QAAQ,CAAC,GAAG,EAAE;gBACpB,SAAS,GAAG,KAAK,CAAC;gBAClB,MAAM,KAAK,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC;gBAC3B,OAAO,GAAG,IAAI,GAAG,EAAE,CAAC;gBACpB,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;oBAAE,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAC/C,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;QACzB,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Blind-spot register — the never-silent statement of what the layer CANNOT see. Closed shadow roots,
3
+ * cross-origin iframes, and virtualized-unmounted rows are documented limits; a result that touched one
4
+ * says so (`coverage: partial — 2 cross-origin frames unobserved`) instead of implying it saw everything.
5
+ * Pure formatting over the counted blind spots the observers report.
6
+ */
7
+ export { BlindSpotKind } from '@reticlehq/core';
8
+ import { BlindSpotKind, type ReticleEvent } from '@reticlehq/core';
9
+ export interface BlindSpot {
10
+ kind: BlindSpotKind;
11
+ count: number;
12
+ }
13
+ export interface CoverageStatement {
14
+ coverage: 'full' | 'partial';
15
+ /** Present only when partial — the human/agent-legible list of what went unobserved. */
16
+ note?: string;
17
+ spots: BlindSpot[];
18
+ }
19
+ /** Compose the coverage statement. `full` (no note) when nothing was unobserved. */
20
+ export declare function buildCoverageStatement(spots: readonly BlindSpot[]): CoverageStatement;
21
+ /**
22
+ * Reduce a window's BLIND_SPOT events to one spot per kind — the LATEST reported count wins (the sensor
23
+ * emits only on change, so the last value is the live count). This is how a result's coverage is derived
24
+ * from what the SDK observed during the action, with no extra round-trip.
25
+ */
26
+ export declare function blindSpotsFromEvents(events: readonly ReticleEvent[]): BlindSpot[];
27
+ /**
28
+ * Blind spots from the session's remembered LEVEL state rather than from a window of events.
29
+ *
30
+ * The SDK emits BLIND_SPOT only when the count changes, so a page that mounted cross-origin frames at
31
+ * load announces them once and is silent thereafter. Deriving coverage from one act's window then
32
+ * reports "full" for a page a third of which is unobservable — and the act tool's own description
33
+ * tells harnesses to gate on that block. Ask the session what is true now instead of inferring it
34
+ * from what happened to be said recently.
35
+ */
36
+ export declare function blindSpotsFromState(state: Readonly<Record<string, number>>): BlindSpot[];
37
+ //# sourceMappingURL=blind-spots.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blind-spots.d.ts","sourceRoot":"","sources":["../../src/honesty/blind-spots.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAa,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE9E,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,aAAa,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,wFAAwF;IACxF,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,SAAS,EAAE,CAAC;CACpB;AAcD,oFAAoF;AACpF,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,SAAS,SAAS,EAAE,GAAG,iBAAiB,CAKrF;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,YAAY,EAAE,GAAG,SAAS,EAAE,CAWjF;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,SAAS,EAAE,CAExF"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Blind-spot register — the never-silent statement of what the layer CANNOT see. Closed shadow roots,
3
+ * cross-origin iframes, and virtualized-unmounted rows are documented limits; a result that touched one
4
+ * says so (`coverage: partial — 2 cross-origin frames unobserved`) instead of implying it saw everything.
5
+ * Pure formatting over the counted blind spots the observers report.
6
+ */
7
+ // The kind enum lives in core (it crosses the wire in a BLIND_SPOT event); re-exported here so existing
8
+ // honesty-side imports keep working.
9
+ export { BlindSpotKind } from '@reticlehq/core';
10
+ import { BlindSpotKind, EventType } from '@reticlehq/core';
11
+ const LABEL = {
12
+ [BlindSpotKind.CLOSED_SHADOW_ROOT]: (n) => `${String(n)} closed shadow root${n === 1 ? '' : 's'}`,
13
+ [BlindSpotKind.CROSS_ORIGIN_IFRAME]: (n) => `${String(n)} cross-origin frame${n === 1 ? '' : 's'}`,
14
+ [BlindSpotKind.VIRTUALIZED_UNMOUNTED]: (n) => `${String(n)} virtualized unmounted row${n === 1 ? '' : 's'}`,
15
+ // Not a count of things — a single fact about the page. Phrased so the coverage line reads as a
16
+ // caveat on what the network view MEANS, not as a tally.
17
+ [BlindSpotKind.WRAPPED_NETWORK]: () => 'fetch was already wrapped before Reticle, so recorded requests may differ from what was sent',
18
+ };
19
+ /** Compose the coverage statement. `full` (no note) when nothing was unobserved. */
20
+ export function buildCoverageStatement(spots) {
21
+ const present = spots.filter((s) => s.count > 0);
22
+ if (present.length === 0)
23
+ return { coverage: 'full', spots: [] };
24
+ const note = `partial — ${present.map((s) => `${LABEL[s.kind](s.count)} unobserved`).join(', ')}`;
25
+ return { coverage: 'partial', note, spots: present };
26
+ }
27
+ /**
28
+ * Reduce a window's BLIND_SPOT events to one spot per kind — the LATEST reported count wins (the sensor
29
+ * emits only on change, so the last value is the live count). This is how a result's coverage is derived
30
+ * from what the SDK observed during the action, with no extra round-trip.
31
+ */
32
+ export function blindSpotsFromEvents(events) {
33
+ const latest = new Map();
34
+ for (const e of events) {
35
+ if (e.type !== EventType.BLIND_SPOT)
36
+ continue;
37
+ const kind = e.data['kind'];
38
+ const count = e.data['count'];
39
+ if (typeof kind === 'string' && typeof count === 'number') {
40
+ latest.set(kind, count);
41
+ }
42
+ }
43
+ return [...latest].map(([kind, count]) => ({ kind, count }));
44
+ }
45
+ /**
46
+ * Blind spots from the session's remembered LEVEL state rather than from a window of events.
47
+ *
48
+ * The SDK emits BLIND_SPOT only when the count changes, so a page that mounted cross-origin frames at
49
+ * load announces them once and is silent thereafter. Deriving coverage from one act's window then
50
+ * reports "full" for a page a third of which is unobservable — and the act tool's own description
51
+ * tells harnesses to gate on that block. Ask the session what is true now instead of inferring it
52
+ * from what happened to be said recently.
53
+ */
54
+ export function blindSpotsFromState(state) {
55
+ return Object.entries(state).map(([kind, count]) => ({ kind: kind, count }));
56
+ }
57
+ //# sourceMappingURL=blind-spots.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blind-spots.js","sourceRoot":"","sources":["../../src/honesty/blind-spots.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * The honesty block — one machine-readable field composing everything that qualifies a verdict's
3
+ * trustworthiness: the assertion grade, the attribution tier, the envelope maturity, the verified-surface
4
+ * coverage, and the capture integrity. The invariant: a green may never LOOK stronger than its honesty
5
+ * block. Harnesses gate on it (e.g. "grade ≥ net AND integrity clean"). This is pure composition +
6
+ * assessment — all five components already exist individually; wiring it onto results is a later step.
7
+ */
8
+ /** Assertion grade, strongest first — the tier the verdict actually proved. */
9
+ export declare const HonestyGrade: {
10
+ readonly SIGNAL: "signal";
11
+ readonly NET: "net";
12
+ readonly STATE: "state";
13
+ readonly PRESENCE: "presence";
14
+ readonly NONE: "none";
15
+ };
16
+ export type HonestyGrade = (typeof HonestyGrade)[keyof typeof HonestyGrade];
17
+ export interface HonestyInputs {
18
+ grade: HonestyGrade;
19
+ /** Present when a causal chain is presented; `window` = time-heuristic, never dataflow truth. */
20
+ attribution?: string;
21
+ envelopeSamples?: number;
22
+ coveragePct?: number;
23
+ coveragePartial?: boolean;
24
+ truncated?: boolean;
25
+ blindSpots?: readonly string[];
26
+ }
27
+ export interface HonestyBlock {
28
+ grade: HonestyGrade;
29
+ attribution?: string;
30
+ /** Present only when an envelope was actually sampled — never a fabricated zero. */
31
+ envelope?: {
32
+ samples: number;
33
+ sufficient: boolean;
34
+ };
35
+ /** `pct` is present only when it was measured (or provably full); `partial` is always known. */
36
+ coverage: {
37
+ pct?: number;
38
+ partial: boolean;
39
+ };
40
+ integrity: {
41
+ clean: boolean;
42
+ issues: string[];
43
+ };
44
+ }
45
+ export declare function buildHonestyBlock(inputs: HonestyInputs): HonestyBlock;
46
+ export interface HonestyBar {
47
+ /** The minimum grade a green must carry to be trusted (default: any). */
48
+ minGrade?: HonestyGrade;
49
+ /** Require capture integrity to be clean (no truncation / blind spots). */
50
+ requireIntegrityClean?: boolean;
51
+ }
52
+ /** Whether a verdict's honesty block clears the harness's bar. Reasons list every failed criterion. */
53
+ export declare function meetsHonestyBar(block: HonestyBlock, bar?: HonestyBar): {
54
+ ok: boolean;
55
+ reasons: string[];
56
+ };
57
+ //# sourceMappingURL=honesty.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"honesty.d.ts","sourceRoot":"","sources":["../../src/honesty/honesty.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,+EAA+E;AAC/E,eAAO,MAAM,YAAY;;;;;;CAMf,CAAC;AACX,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,OAAO,YAAY,CAAC,CAAC;AAgB5E,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,YAAY,CAAC;IACpB,iGAAiG;IACjG,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAChC;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,YAAY,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oFAAoF;IACpF,QAAQ,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,OAAO,CAAA;KAAE,CAAC;IACpD,gGAAgG;IAChG,QAAQ,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;IAC7C,SAAS,EAAE;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;CACjD;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,aAAa,GAAG,YAAY,CAwBrE;AAED,MAAM,WAAW,UAAU;IACzB,yEAAyE;IACzE,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,2EAA2E;IAC3E,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC;AAED,uGAAuG;AACvG,wBAAgB,eAAe,CAC7B,KAAK,EAAE,YAAY,EACnB,GAAG,GAAE,UAAe,GACnB;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CASpC"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * The honesty block — one machine-readable field composing everything that qualifies a verdict's
3
+ * trustworthiness: the assertion grade, the attribution tier, the envelope maturity, the verified-surface
4
+ * coverage, and the capture integrity. The invariant: a green may never LOOK stronger than its honesty
5
+ * block. Harnesses gate on it (e.g. "grade ≥ net AND integrity clean"). This is pure composition +
6
+ * assessment — all five components already exist individually; wiring it onto results is a later step.
7
+ */
8
+ /** Assertion grade, strongest first — the tier the verdict actually proved. */
9
+ export const HonestyGrade = {
10
+ SIGNAL: 'signal',
11
+ NET: 'net',
12
+ STATE: 'state',
13
+ PRESENCE: 'presence',
14
+ NONE: 'none',
15
+ };
16
+ const GRADE_RANK = {
17
+ [HonestyGrade.SIGNAL]: 4,
18
+ [HonestyGrade.NET]: 3,
19
+ [HonestyGrade.STATE]: 2,
20
+ [HonestyGrade.PRESENCE]: 1,
21
+ [HonestyGrade.NONE]: 0,
22
+ };
23
+ /** Below this envelope sample count a deviation verdict is noise, not judgment. */
24
+ const MIN_ENVELOPE_SAMPLES = 3;
25
+ /** Coverage when the SDK reported no blind spots during the window — it saw everything it can see. */
26
+ const FULL_COVERAGE_PCT = 100;
27
+ export function buildHonestyBlock(inputs) {
28
+ const issues = [];
29
+ if (inputs.truncated === true)
30
+ issues.push('capture truncated');
31
+ for (const spot of inputs.blindSpots ?? [])
32
+ issues.push(`blind spot: ${spot}`);
33
+ // Report only what was measured. `envelope` used to be emitted unconditionally with samples=0, so
34
+ // every act carried `sufficient: false` — and the tool description tells the agent to gate on this
35
+ // block, meaning an agent that obeyed rejected 100% of green verdicts on a value that never changed.
36
+ // A field that always reads "insufficient" is worse than an absent one: it looks like a finding.
37
+ const samples = inputs.envelopeSamples;
38
+ const partial = inputs.coveragePartial ?? false;
39
+ // Nothing blind reported ⇒ the SDK saw everything it is able to see. When coverage IS partial we know
40
+ // that much but not the fraction, so the percentage is omitted rather than invented.
41
+ const pct = inputs.coveragePct ?? (partial ? undefined : FULL_COVERAGE_PCT);
42
+ return {
43
+ grade: inputs.grade,
44
+ ...(inputs.attribution === undefined ? {} : { attribution: inputs.attribution }),
45
+ ...(samples === undefined
46
+ ? {}
47
+ : { envelope: { samples, sufficient: samples >= MIN_ENVELOPE_SAMPLES } }),
48
+ coverage: { ...(pct === undefined ? {} : { pct }), partial },
49
+ integrity: { clean: issues.length === 0, issues },
50
+ };
51
+ }
52
+ /** Whether a verdict's honesty block clears the harness's bar. Reasons list every failed criterion. */
53
+ export function meetsHonestyBar(block, bar = {}) {
54
+ const reasons = [];
55
+ if (bar.minGrade !== undefined && GRADE_RANK[block.grade] < GRADE_RANK[bar.minGrade]) {
56
+ reasons.push(`grade ${block.grade} below required ${bar.minGrade}`);
57
+ }
58
+ if (bar.requireIntegrityClean === true && !block.integrity.clean) {
59
+ reasons.push(`integrity not clean: ${block.integrity.issues.join('; ')}`);
60
+ }
61
+ return { ok: reasons.length === 0, reasons };
62
+ }
63
+ //# sourceMappingURL=honesty.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"honesty.js","sourceRoot":"","sources":["../../src/honesty/honesty.ts"],"names":[],"mappings":"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"}