@reticlehq/server 3.5.0 → 3.7.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 (721) hide show
  1. package/README.md +1 -1
  2. package/SKILL.md +123 -116
  3. package/dist/chromium-launch-options.d.ts +3 -1
  4. package/dist/chromium-launch-options.js +2 -1
  5. package/dist/command/cli/adhoc-suite.d.ts +14 -0
  6. package/dist/command/cli/adhoc-suite.js +42 -7
  7. package/dist/command/cli/adhoc-verdict.d.ts +19 -2
  8. package/dist/command/cli/adhoc-verdict.js +76 -9
  9. package/dist/command/cli/answers/gate-exit.d.ts +23 -0
  10. package/dist/command/cli/answers/gate-exit.js +45 -0
  11. package/dist/command/cli/answers/gate-hook-message.d.ts +2 -0
  12. package/dist/command/cli/answers/gate-hook-message.js +3 -1
  13. package/dist/command/cli/answers/open-note.d.ts +2 -0
  14. package/dist/command/cli/answers/open-note.js +22 -0
  15. package/dist/command/cli/auth/device-flow.d.ts +13 -2
  16. package/dist/command/cli/auth/device-flow.js +17 -0
  17. package/dist/command/cli/cli-doctor.js +14 -0
  18. package/dist/command/cli/cli-flow-commands.d.ts +0 -11
  19. package/dist/command/cli/cli-flow-commands.js +31 -112
  20. package/dist/command/cli/cli-kill.js +3 -2
  21. package/dist/command/cli/cli-parse-grammar.d.ts +24 -0
  22. package/dist/command/cli/cli-parse-grammar.js +75 -0
  23. package/dist/command/cli/cli-parse-verify.d.ts +2 -0
  24. package/dist/command/cli/cli-parse-verify.js +18 -0
  25. package/dist/command/cli/cli-parse.d.ts +19 -28
  26. package/dist/command/cli/cli-parse.js +82 -182
  27. package/dist/command/cli/cli-update-commands.d.ts +1 -1
  28. package/dist/command/cli/cli-update-commands.js +61 -9
  29. package/dist/command/cli/cli-usage.d.ts +33 -0
  30. package/dist/command/cli/cli-usage.js +287 -0
  31. package/dist/command/cli/cli-verify.d.ts +35 -5
  32. package/dist/command/cli/cli-verify.js +114 -35
  33. package/dist/command/cli/cloud-cli.d.ts +13 -0
  34. package/dist/command/cli/cloud-cli.js +192 -341
  35. package/dist/command/cli/cloud-kit.d.ts +12 -0
  36. package/dist/command/cli/cloud-kit.js +41 -2
  37. package/dist/command/cli/cloud-link.d.ts +57 -0
  38. package/dist/command/cli/cloud-link.js +308 -0
  39. package/dist/command/cli/cloud-login.d.ts +22 -0
  40. package/dist/command/cli/cloud-login.js +96 -8
  41. package/dist/command/cli/context-command.d.ts +1 -0
  42. package/dist/command/cli/context-command.js +33 -0
  43. package/dist/command/cli/daemon-start-options.d.ts +3 -0
  44. package/dist/command/cli/daemon-start-options.js +24 -3
  45. package/dist/command/cli/doctor/browser/chromium-hint.d.ts +46 -0
  46. package/dist/command/cli/doctor/browser/chromium-hint.js +99 -1
  47. package/dist/command/cli/doctor/doctor-coverage-line.d.ts +2 -0
  48. package/dist/command/cli/doctor/doctor-coverage-line.js +47 -0
  49. package/dist/command/cli/doctor/doctor-project-line.d.ts +0 -12
  50. package/dist/command/cli/doctor/doctor-project-line.js +5 -4
  51. package/dist/command/cli/doctor/doctor-rows.d.ts +6 -0
  52. package/dist/command/cli/doctor/doctor-rows.js +6 -0
  53. package/dist/command/cli/doctor/doctor-signing-line.d.ts +38 -0
  54. package/dist/command/cli/doctor/doctor-signing-line.js +114 -0
  55. package/dist/command/cli/drive/drive-attach.d.ts +27 -2
  56. package/dist/command/cli/drive/drive-attach.js +71 -4
  57. package/dist/command/cli/drive/drive-command.d.ts +2 -1
  58. package/dist/command/cli/drive/drive-command.js +13 -7
  59. package/dist/command/cli/known-regression.d.ts +13 -0
  60. package/dist/command/cli/known-regression.js +34 -0
  61. package/dist/command/cli/launch/sdk-version-match.d.ts +12 -0
  62. package/dist/command/cli/launch/sdk-version-match.js +25 -0
  63. package/dist/command/cli/lifecycle/daemon-lifecycle.js +15 -3
  64. package/dist/command/cli/mcp-command.d.ts +6 -0
  65. package/dist/command/cli/mcp-command.js +13 -5
  66. package/dist/command/cli/ports/port-holder.d.ts +10 -0
  67. package/dist/command/cli/ports/port-holder.js +25 -1
  68. package/dist/command/cli/project-name.d.ts +29 -1
  69. package/dist/command/cli/project-name.js +107 -2
  70. package/dist/command/cli/setup-mcp-cli.d.ts +17 -1
  71. package/dist/command/cli/setup-mcp-cli.js +35 -12
  72. package/dist/command/cli/status/status-lines.d.ts +1 -0
  73. package/dist/command/cli/status/status-lines.js +47 -2
  74. package/dist/command/cli/status/workspace-links.d.ts +10 -0
  75. package/dist/command/cli/status/workspace-links.js +29 -0
  76. package/dist/command/cli/try-command.d.ts +96 -0
  77. package/dist/command/cli/try-command.js +362 -0
  78. package/dist/command/cli/tutorial.d.ts +0 -100
  79. package/dist/command/cli/tutorial.js +0 -181
  80. package/dist/command/cli/verify-results.d.ts +19 -0
  81. package/dist/command/cli/verify-results.js +29 -0
  82. package/dist/command/cli-onboarding.d.ts +0 -11
  83. package/dist/command/cli-onboarding.js +0 -15
  84. package/dist/command/cli.d.ts +20 -0
  85. package/dist/command/cli.js +130 -104
  86. package/dist/command/daemon/binding/daemon-status-probe.d.ts +2 -0
  87. package/dist/command/daemon/binding/daemon-status-probe.js +1 -0
  88. package/dist/command/daemon/daemon-resilience.js +4 -4
  89. package/dist/command/daemon/daemon-resolve.d.ts +23 -1
  90. package/dist/command/daemon/daemon-resolve.js +79 -9
  91. package/dist/command/setup/agent-writer.d.ts +1 -1
  92. package/dist/command/setup/agent-writer.js +3 -2
  93. package/dist/command/setup/bringup/bridge-port.d.ts +3 -1
  94. package/dist/command/setup/bringup/bridge-port.js +13 -3
  95. package/dist/command/setup/bringup/connect-lease.d.ts +1 -0
  96. package/dist/command/setup/bringup/connect-lease.js +1 -0
  97. package/dist/command/setup/bringup/dev-server-log-cap.js +2 -0
  98. package/dist/command/setup/bringup/dev-server-wait.d.ts +8 -0
  99. package/dist/command/setup/bringup/dev-server-wait.js +19 -0
  100. package/dist/command/setup/bringup/ensure-daemon.js +9 -2
  101. package/dist/command/setup/init/agent-restart.d.ts +23 -0
  102. package/dist/command/setup/init/agent-restart.js +28 -0
  103. package/dist/command/setup/init/init-port.d.ts +14 -1
  104. package/dist/command/setup/init/init-port.js +32 -2
  105. package/dist/command/setup/init/init-runtime.d.ts +22 -2
  106. package/dist/command/setup/init/init-runtime.js +114 -38
  107. package/dist/command/setup/node-effects.d.ts +2 -0
  108. package/dist/command/setup/node-effects.js +38 -9
  109. package/dist/command/setup/probe/existing-app.d.ts +12 -0
  110. package/dist/command/setup/probe/existing-app.js +14 -0
  111. package/dist/command/setup/remaining-steps.js +2 -1
  112. package/dist/command/setup/run-setup.d.ts +34 -9
  113. package/dist/command/setup/run-setup.js +65 -51
  114. package/dist/command/setup/setup-command.d.ts +25 -1
  115. package/dist/command/setup/setup-command.js +59 -4
  116. package/dist/command/setup/setup-mcp.js +25 -2
  117. package/dist/command/setup/tauri-signing.d.ts +19 -0
  118. package/dist/command/setup/tauri-signing.js +79 -0
  119. package/dist/command/setup/terminal/listeners.d.ts +10 -1
  120. package/dist/command/setup/terminal/listeners.js +37 -6
  121. package/dist/command/update/update-nudge.d.ts +9 -0
  122. package/dist/command/update/update-nudge.js +1 -1
  123. package/dist/command/update/updater.js +11 -15
  124. package/dist/command/version/version-nudge.js +3 -0
  125. package/dist/command/version/version-skew.d.ts +20 -1
  126. package/dist/command/version/version-skew.js +49 -4
  127. package/dist/features/crawl/crawl-tools.js +4 -0
  128. package/dist/features/crawl/crawl.d.ts +6 -0
  129. package/dist/features/crawl/crawl.js +23 -2
  130. package/dist/features/exhaust/ledger.d.ts +21 -14
  131. package/dist/features/exhaust/ledger.js +35 -9
  132. package/dist/features/harness/app-findings.d.ts +2 -0
  133. package/dist/features/harness/app-findings.js +52 -0
  134. package/dist/features/harness/drive-report.d.ts +61 -1
  135. package/dist/features/harness/drive-report.js +394 -26
  136. package/dist/features/harness/drive-runs.d.ts +120 -0
  137. package/dist/features/harness/drive-runs.js +289 -0
  138. package/dist/features/harness/drivers.d.ts +10 -14
  139. package/dist/features/harness/drivers.js +10 -14
  140. package/dist/features/harness/explore/console-pages.d.ts +15 -0
  141. package/dist/features/harness/explore/console-pages.js +146 -0
  142. package/dist/features/harness/explore/disparity.d.ts +19 -0
  143. package/dist/features/harness/explore/disparity.js +71 -0
  144. package/dist/features/harness/explore/fake-app.d.ts +16 -0
  145. package/dist/features/harness/explore/fake-app.js +49 -0
  146. package/dist/features/harness/explore/goal-search.d.ts +26 -0
  147. package/dist/features/harness/explore/goal-search.js +144 -0
  148. package/dist/features/harness/explore/page-tree.d.ts +49 -0
  149. package/dist/features/harness/explore/page-tree.js +148 -0
  150. package/dist/features/harness/explore/site-map.d.ts +34 -0
  151. package/dist/features/harness/explore/site-map.js +150 -0
  152. package/dist/features/harness/fill-values.d.ts +3 -73
  153. package/dist/features/harness/fill-values.js +3 -169
  154. package/dist/features/harness/goals.d.ts +82 -0
  155. package/dist/features/harness/goals.js +330 -0
  156. package/dist/features/harness/harness.d.ts +51 -1
  157. package/dist/features/harness/harness.js +207 -6
  158. package/dist/features/harness/platform/drive-target.d.ts +30 -0
  159. package/dist/features/harness/platform/drive-target.js +81 -0
  160. package/dist/features/harness/platform/local-apps.d.ts +127 -0
  161. package/dist/features/harness/platform/local-apps.js +280 -0
  162. package/dist/features/harness/platform/persona-credentials.d.ts +20 -0
  163. package/dist/features/harness/platform/persona-credentials.js +69 -0
  164. package/dist/features/harness/platform/platform-drives.d.ts +61 -0
  165. package/dist/features/harness/platform/platform-drives.js +114 -0
  166. package/dist/features/harness/platform/refusal.d.ts +52 -0
  167. package/dist/features/harness/platform/refusal.js +71 -0
  168. package/dist/features/harness/platform/remote-drive.d.ts +186 -0
  169. package/dist/features/harness/platform/remote-drive.js +378 -0
  170. package/dist/features/harness/platform/script.d.ts +94 -0
  171. package/dist/features/harness/platform/script.js +260 -0
  172. package/dist/features/harness/platform/server-driver.d.ts +54 -0
  173. package/dist/features/harness/platform/server-driver.js +182 -0
  174. package/dist/features/harness/platform-config.d.ts +41 -1
  175. package/dist/features/harness/platform-config.js +106 -9
  176. package/dist/features/harness/route-guess.d.ts +13 -0
  177. package/dist/features/harness/route-guess.js +49 -0
  178. package/dist/features/harness/script/app-controls.d.ts +5 -0
  179. package/dist/features/harness/script/app-controls.js +40 -0
  180. package/dist/features/harness/script/lane-ids.d.ts +14 -0
  181. package/dist/features/harness/script/lane-ids.js +16 -0
  182. package/dist/features/harness/script/script-run.d.ts +70 -0
  183. package/dist/features/harness/script/script-run.js +606 -0
  184. package/dist/features/license/license.d.ts +2 -2
  185. package/dist/features/visual/step-shots.d.ts +31 -0
  186. package/dist/features/visual/step-shots.js +231 -0
  187. package/dist/features/visual/visual-tools.d.ts +10 -1
  188. package/dist/features/visual/visual-tools.js +62 -17
  189. package/dist/hooks/client-directory.d.ts +18 -0
  190. package/dist/hooks/client-directory.js +57 -0
  191. package/dist/hooks/coding-agents.d.ts +34 -0
  192. package/dist/hooks/coding-agents.js +117 -0
  193. package/dist/hooks/driven-by.d.ts +23 -0
  194. package/dist/hooks/driven-by.js +56 -0
  195. package/dist/hooks/hook-bus.d.ts +4 -0
  196. package/dist/hooks/hook-bus.js +18 -0
  197. package/dist/hooks/hook-commands.js +15 -4
  198. package/dist/hooks/tool-log.d.ts +9 -0
  199. package/dist/hooks/tool-log.js +29 -0
  200. package/dist/index.d.ts +2 -0
  201. package/dist/index.js +80 -243
  202. package/dist/judgement/capsule/capsule-store.d.ts +2 -2
  203. package/dist/judgement/capsule/causal-summary.d.ts +15 -1
  204. package/dist/judgement/capsule/causal-summary.js +33 -0
  205. package/dist/judgement/runs/artifact/build-verification-run.d.ts +1 -1
  206. package/dist/judgement/runs/artifact/build-verification-run.js +25 -3
  207. package/dist/judgement/runs/artifact/gap-summary.d.ts +0 -18
  208. package/dist/judgement/runs/artifact/gap-summary.js +12 -3
  209. package/dist/judgement/runs/artifact/replay-mapping.d.ts +1 -1
  210. package/dist/judgement/runs/artifact/replay-mapping.js +37 -11
  211. package/dist/judgement/runs/artifact/run-store.d.ts +14 -2
  212. package/dist/judgement/runs/artifact/run-store.js +195 -3
  213. package/dist/judgement/runs/context-tools.js +59 -1
  214. package/dist/judgement/runs/default-run-id.d.ts +3 -0
  215. package/dist/judgement/runs/default-run-id.js +16 -0
  216. package/dist/judgement/runs/drive-run.d.ts +71 -1
  217. package/dist/judgement/runs/drive-run.js +317 -5
  218. package/dist/judgement/runs/repair-prompt.js +1 -1
  219. package/dist/judgement/runs/resume.d.ts +44 -0
  220. package/dist/judgement/runs/resume.js +137 -0
  221. package/dist/judgement/runs/reticle-runner.js +13 -3
  222. package/dist/judgement/runs/runner-port.d.ts +5 -1
  223. package/dist/judgement/runs/runner-port.js +8 -2
  224. package/dist/judgement/runs/verification-sync.d.ts +5 -2
  225. package/dist/judgement/runs/verification-sync.js +40 -18
  226. package/dist/language/flows/change/gate.d.ts +10 -0
  227. package/dist/language/flows/change/gate.js +22 -0
  228. package/dist/language/flows/decision.js +36 -1
  229. package/dist/language/flows/fields/flow-secret-field.d.ts +12 -0
  230. package/dist/language/flows/fields/flow-secret-field.js +25 -2
  231. package/dist/language/flows/flow-anchor.d.ts +61 -10
  232. package/dist/language/flows/flow-anchor.js +98 -6
  233. package/dist/language/flows/flow-cross-step.d.ts +15 -0
  234. package/dist/language/flows/flow-cross-step.js +21 -0
  235. package/dist/language/flows/flow-intent.d.ts +1 -0
  236. package/dist/language/flows/flow-journey.d.ts +6 -0
  237. package/dist/language/flows/flow-journey.js +20 -0
  238. package/dist/language/flows/flow-learning.d.ts +4 -0
  239. package/dist/language/flows/flow-learning.js +45 -14
  240. package/dist/language/flows/flow-mutate-tools.js +5 -3
  241. package/dist/language/flows/flow-replay-run.d.ts +23 -9
  242. package/dist/language/flows/flow-replay-run.js +115 -110
  243. package/dist/language/flows/flow-replay-types.d.ts +1 -1
  244. package/dist/language/flows/flow-replay.d.ts +40 -1
  245. package/dist/language/flows/flow-replay.js +110 -22
  246. package/dist/language/flows/flow-result.d.ts +22 -1
  247. package/dist/language/flows/flow-result.js +47 -2
  248. package/dist/language/flows/flow-scope.js +5 -1
  249. package/dist/language/flows/flow-step-runners.d.ts +22 -2
  250. package/dist/language/flows/flow-step-runners.js +247 -47
  251. package/dist/language/flows/flow-store-for-session.d.ts +2 -2
  252. package/dist/language/flows/flow-store-for-session.js +7 -3
  253. package/dist/language/flows/flow-tools.d.ts +10 -0
  254. package/dist/language/flows/flow-tools.js +112 -89
  255. package/dist/language/flows/flows.d.ts +16 -1
  256. package/dist/language/flows/flows.js +74 -12
  257. package/dist/language/flows/heal-run.js +6 -4
  258. package/dist/language/flows/narrow-write.d.ts +7 -0
  259. package/dist/language/flows/narrow-write.js +36 -1
  260. package/dist/language/flows/recording/flake.d.ts +2 -2
  261. package/dist/language/flows/recording/recording-backtrack.js +14 -1
  262. package/dist/language/flows/recording/tape/recordings.d.ts +58 -4
  263. package/dist/language/flows/recording/tape/recordings.js +95 -13
  264. package/dist/language/flows/replay-from-hud.d.ts +20 -0
  265. package/dist/language/flows/replay-from-hud.js +51 -0
  266. package/dist/language/flows/replay.d.ts +9 -5
  267. package/dist/language/flows/replay.js +56 -15
  268. package/dist/language/flows/single-replay.d.ts +7 -0
  269. package/dist/language/flows/single-replay.js +26 -0
  270. package/dist/language/flows/suite/suite-flakes.js +2 -0
  271. package/dist/language/flows/suite-selection.d.ts +2 -15
  272. package/dist/language/flows/suite-selection.js +4 -3
  273. package/dist/language/flows/verify-change-tools.d.ts +1 -0
  274. package/dist/language/flows/verify-change-tools.js +202 -191
  275. package/dist/launch-chromium.d.ts +27 -5
  276. package/dist/launch-chromium.js +38 -8
  277. package/dist/memory/cloud/cloud-config.d.ts +22 -1
  278. package/dist/memory/cloud/cloud-config.js +34 -5
  279. package/dist/memory/cloud/cloud-sync.d.ts +17 -14
  280. package/dist/memory/cloud/cloud-sync.js +15 -4
  281. package/dist/memory/cloud/harness-config.d.ts +75 -1
  282. package/dist/memory/cloud/harness-config.js +115 -24
  283. package/dist/memory/cloud/hud-notices-source.d.ts +21 -0
  284. package/dist/memory/cloud/hud-notices-source.js +128 -0
  285. package/dist/memory/cloud/memory-scope.d.ts +161 -0
  286. package/dist/memory/cloud/memory-scope.js +227 -0
  287. package/dist/memory/cloud/sync-cycle.d.ts +44 -7
  288. package/dist/memory/cloud/sync-cycle.js +129 -15
  289. package/dist/memory/cloud/sync-daemon.d.ts +11 -0
  290. package/dist/memory/cloud/sync-daemon.js +121 -9
  291. package/dist/memory/cloud/sync-disk.d.ts +1 -1
  292. package/dist/memory/cloud/sync-disk.js +31 -10
  293. package/dist/memory/cloud/sync-screenshots.d.ts +32 -0
  294. package/dist/memory/cloud/sync-screenshots.js +105 -0
  295. package/dist/memory/cloud/unsynced-roots.d.ts +47 -0
  296. package/dist/memory/cloud/unsynced-roots.js +166 -0
  297. package/dist/memory/impact/account-watch.d.ts +34 -0
  298. package/dist/memory/impact/account-watch.js +59 -0
  299. package/dist/memory/impact/impact-recorder.d.ts +8 -0
  300. package/dist/memory/impact/impact-recorder.js +12 -2
  301. package/dist/memory/impact/impact-store.d.ts +17 -4
  302. package/dist/memory/impact/impact-store.js +169 -63
  303. package/dist/memory/intent/inline-intent.d.ts +1 -0
  304. package/dist/memory/intent/intent-shard-store.js +16 -4
  305. package/dist/memory/intent/intent-shard.d.ts +14 -2
  306. package/dist/memory/intent/intent-store.d.ts +1 -0
  307. package/dist/memory/intent/intent-tools.js +122 -4
  308. package/dist/memory/intent/open-intents.d.ts +6 -0
  309. package/dist/memory/intent/open-intents.js +10 -1
  310. package/dist/memory/intent/settled-words.d.ts +24 -0
  311. package/dist/memory/intent/settled-words.js +130 -0
  312. package/dist/memory/journal/drive-flow.d.ts +16 -0
  313. package/dist/memory/journal/drive-flow.js +34 -2
  314. package/dist/memory/journal/drive-run-flush.d.ts +2 -0
  315. package/dist/memory/journal/drive-run-flush.js +20 -5
  316. package/dist/memory/journal/envelope.d.ts +8 -8
  317. package/dist/memory/journal/journal-recorder.js +52 -3
  318. package/dist/memory/journal/on-disk/retention.d.ts +8 -0
  319. package/dist/memory/journal/on-disk/retention.js +32 -2
  320. package/dist/memory/journal/on-disk/startup-maintenance.js +3 -1
  321. package/dist/memory/journal/on-disk/workspace-tiers.js +9 -4
  322. package/dist/memory/journal/session-end.d.ts +15 -1
  323. package/dist/memory/journal/session-end.js +42 -9
  324. package/dist/memory/project/artifact-root-resolver.d.ts +26 -1
  325. package/dist/memory/project/artifact-root-resolver.js +125 -16
  326. package/dist/memory/project/artifact-root.d.ts +46 -8
  327. package/dist/memory/project/artifact-root.js +89 -10
  328. package/dist/memory/project/dir/reticle-dir.d.ts +18 -2
  329. package/dist/memory/project/dir/reticle-dir.js +26 -3
  330. package/dist/memory/project/link-directory.d.ts +15 -0
  331. package/dist/memory/project/link-directory.js +44 -0
  332. package/dist/memory/project/project-tools.js +22 -3
  333. package/dist/memory/project/root-claims.d.ts +6 -0
  334. package/dist/memory/project/root-claims.js +39 -0
  335. package/dist/memory/project/session-root.d.ts +26 -1
  336. package/dist/memory/project/session-root.js +49 -5
  337. package/dist/memory/project/sync-status.d.ts +85 -0
  338. package/dist/memory/project/sync-status.js +224 -0
  339. package/dist/memory/recall/memory-tools.js +47 -2
  340. package/dist/memory/recall/platform-memory.d.ts +34 -0
  341. package/dist/memory/recall/platform-memory.js +139 -0
  342. package/dist/memory/recall/project-memory.d.ts +19 -0
  343. package/dist/memory/recall/project-memory.js +80 -13
  344. package/dist/portal/bridge/bridge.d.ts +9 -3
  345. package/dist/portal/bridge/bridge.js +82 -22
  346. package/dist/portal/bridge/harness-request.d.ts +23 -0
  347. package/dist/portal/bridge/harness-request.js +27 -0
  348. package/dist/portal/bridge/pairing-token.d.ts +9 -0
  349. package/dist/portal/bridge/pairing-token.js +17 -0
  350. package/dist/portal/bridge/wrong-path.d.ts +17 -0
  351. package/dist/portal/bridge/wrong-path.js +35 -0
  352. package/dist/portal/input/network-mock-tools.js +11 -2
  353. package/dist/portal/input/real-input.d.ts +83 -10
  354. package/dist/portal/input/real-input.js +218 -30
  355. package/dist/portal/input/viewport-tools.js +3 -3
  356. package/dist/portal/pool/browser-pool.d.ts +70 -9
  357. package/dist/portal/pool/browser-pool.js +190 -37
  358. package/dist/portal/pool/context-permissions.d.ts +33 -0
  359. package/dist/portal/pool/context-permissions.js +33 -0
  360. package/dist/portal/pool/lease-marker-stamp.d.ts +23 -0
  361. package/dist/portal/pool/lease-marker-stamp.js +49 -0
  362. package/dist/portal/pool/playwright-launcher.d.ts +35 -0
  363. package/dist/portal/pool/playwright-launcher.js +64 -3
  364. package/dist/portal/pool/pool-contract.d.ts +28 -5
  365. package/dist/portal/session/agent-link.d.ts +8 -0
  366. package/dist/portal/session/agent-link.js +17 -0
  367. package/dist/portal/session/command-payload.d.ts +8 -0
  368. package/dist/portal/session/command-payload.js +24 -0
  369. package/dist/portal/session/daemon-answers.d.ts +3 -3
  370. package/dist/portal/session/daemon-answers.js +4 -2
  371. package/dist/portal/session/dev-server/dev-command.d.ts +21 -0
  372. package/dist/portal/session/dev-server/dev-command.js +87 -12
  373. package/dist/portal/session/facts/departure-note.d.ts +22 -0
  374. package/dist/portal/session/facts/departure-note.js +47 -0
  375. package/dist/portal/session/facts/observed-state.d.ts +16 -18
  376. package/dist/portal/session/facts/observed-state.js +46 -3
  377. package/dist/portal/session/facts/session-replaced.d.ts +5 -0
  378. package/dist/portal/session/facts/session-replaced.js +5 -0
  379. package/dist/portal/session/first-run-wiring.d.ts +42 -0
  380. package/dist/portal/session/first-run-wiring.js +132 -0
  381. package/dist/portal/session/human/live-control.d.ts +9 -2
  382. package/dist/portal/session/human/live-control.js +12 -3
  383. package/dist/portal/session/human/notes-ledger.d.ts +20 -0
  384. package/dist/portal/session/human/notes-ledger.js +55 -0
  385. package/dist/portal/session/human/review-store.d.ts +12 -0
  386. package/dist/portal/session/human/review-store.js +18 -10
  387. package/dist/portal/session/live-control-tools.d.ts +0 -13
  388. package/dist/portal/session/live-control-tools.js +107 -13
  389. package/dist/portal/session/narration-args.d.ts +5 -0
  390. package/dist/portal/session/narration-args.js +17 -0
  391. package/dist/portal/session/no-session-diagnosis.d.ts +8 -1
  392. package/dist/portal/session/no-session-diagnosis.js +46 -9
  393. package/dist/portal/session/no-session-next-action.d.ts +31 -0
  394. package/dist/portal/session/no-session-next-action.js +159 -60
  395. package/dist/portal/session/no-session-watch.d.ts +14 -1
  396. package/dist/portal/session/no-session-watch.js +227 -17
  397. package/dist/portal/session/presence/session-lease.js +1 -1
  398. package/dist/portal/session/presence/session-mirror.js +3 -0
  399. package/dist/portal/session/recorded-gaps.d.ts +97 -0
  400. package/dist/portal/session/recorded-gaps.js +251 -0
  401. package/dist/portal/session/serving-directory.d.ts +27 -0
  402. package/dist/portal/session/serving-directory.js +45 -0
  403. package/dist/portal/session/session-health.d.ts +18 -0
  404. package/dist/portal/session/session-health.js +9 -1
  405. package/dist/portal/session/session-info.d.ts +8 -1
  406. package/dist/portal/session/session-info.js +8 -1
  407. package/dist/portal/session/session-manager.d.ts +39 -0
  408. package/dist/portal/session/session-manager.js +98 -11
  409. package/dist/portal/session/session-reaper.js +4 -1
  410. package/dist/portal/session/session-successor.d.ts +13 -0
  411. package/dist/portal/session/session-successor.js +1 -1
  412. package/dist/portal/session/session-tools.js +26 -3
  413. package/dist/portal/session/session.d.ts +22 -30
  414. package/dist/portal/session/session.js +81 -79
  415. package/dist/portal/session/timing/command-timeout.js +25 -1
  416. package/dist/portal/session/timing/wall-clock.d.ts +1 -1
  417. package/dist/portal/session/timing/wall-clock.js +1 -1
  418. package/dist/portal/session/zero-install-first-call.d.ts +31 -0
  419. package/dist/portal/session/zero-install-first-call.js +88 -0
  420. package/dist/start-options.d.ts +12 -0
  421. package/dist/start-wiring.d.ts +63 -0
  422. package/dist/start-wiring.js +169 -0
  423. package/dist/status-payload.d.ts +23 -1
  424. package/dist/status-payload.js +36 -1
  425. package/dist/surface/http-server.js +18 -2
  426. package/dist/surface/mcp/attach-memory.d.ts +1 -0
  427. package/dist/surface/mcp/attach-memory.js +12 -1
  428. package/dist/surface/mcp/mcp-proxy.d.ts +9 -0
  429. package/dist/surface/mcp/mcp-proxy.js +65 -13
  430. package/dist/surface/mcp/mcp.d.ts +34 -6
  431. package/dist/surface/mcp/mcp.js +61 -17
  432. package/dist/surface/mcp/proxy/drive-calls.d.ts +10 -0
  433. package/dist/surface/mcp/proxy/drive-calls.js +27 -0
  434. package/dist/surface/mcp/proxy/mcp-post-transport.js +5 -0
  435. package/dist/surface/mcp/server-instructions.d.ts +4 -2
  436. package/dist/surface/mcp/server-instructions.js +32 -14
  437. package/dist/surface/mcp/shared-params.js +2 -2
  438. package/dist/surface/mcp/surface-vocabulary.d.ts +2 -0
  439. package/dist/surface/mcp/surface-vocabulary.js +1 -0
  440. package/dist/surface/tools/account-tool.d.ts +22 -0
  441. package/dist/surface/tools/account-tool.js +157 -0
  442. package/dist/surface/tools/act/act-danger.d.ts +11 -0
  443. package/dist/surface/tools/act/act-danger.js +38 -1
  444. package/dist/surface/tools/act/act-observation.d.ts +33 -0
  445. package/dist/surface/tools/act/act-observation.js +57 -0
  446. package/dist/surface/tools/act/act-preflight.js +25 -2
  447. package/dist/surface/tools/act/act-target.js +8 -3
  448. package/dist/surface/tools/act/navigation/navigate-arrival.d.ts +8 -0
  449. package/dist/surface/tools/act/navigation/navigate-arrival.js +56 -2
  450. package/dist/surface/tools/act/resolve-target.d.ts +1 -1
  451. package/dist/surface/tools/act/resolve-target.js +18 -3
  452. package/dist/surface/tools/act/screen-request.d.ts +34 -0
  453. package/dist/surface/tools/act/screen-request.js +113 -0
  454. package/dist/surface/tools/act/sequence-grade.d.ts +8 -0
  455. package/dist/surface/tools/act/sequence-grade.js +13 -2
  456. package/dist/surface/tools/act/settle-in-flight.js +25 -3
  457. package/dist/surface/tools/act-sequence-tool.js +138 -29
  458. package/dist/surface/tools/act-tools.d.ts +0 -9
  459. package/dist/surface/tools/act-tools.js +71 -41
  460. package/dist/surface/tools/agent/app-notes-learning.d.ts +7 -0
  461. package/dist/surface/tools/agent/app-notes-learning.js +80 -0
  462. package/dist/surface/tools/agent/app-notes.d.ts +4 -0
  463. package/dist/surface/tools/agent/app-notes.js +48 -0
  464. package/dist/surface/tools/agent/build-staleness.d.ts +7 -0
  465. package/dist/surface/tools/agent/build-staleness.js +62 -0
  466. package/dist/surface/tools/agent/compact-envelope.d.ts +80 -0
  467. package/dist/surface/tools/agent/compact-envelope.js +374 -0
  468. package/dist/surface/tools/agent/for-the-agent.d.ts +12 -0
  469. package/dist/surface/tools/agent/for-the-agent.js +44 -0
  470. package/dist/surface/tools/agent/notices.d.ts +50 -0
  471. package/dist/surface/tools/agent/notices.js +152 -0
  472. package/dist/surface/tools/agent/reteach.d.ts +11 -0
  473. package/dist/surface/tools/agent/reteach.js +50 -0
  474. package/dist/surface/tools/args/alias-args.d.ts +5 -0
  475. package/dist/surface/tools/args/alias-args.js +10 -0
  476. package/dist/surface/tools/args/confirm-dangerous-arg.d.ts +6 -0
  477. package/dist/surface/tools/args/confirm-dangerous-arg.js +6 -0
  478. package/dist/surface/tools/assert/assert-source.d.ts +15 -0
  479. package/dist/surface/tools/assert/assert-source.js +40 -0
  480. package/dist/surface/tools/assert/assert-verdict.d.ts +1 -1
  481. package/dist/surface/tools/assert/assert-verdict.js +42 -17
  482. package/dist/surface/tools/browser-tools.js +51 -2
  483. package/dist/surface/tools/chat-drives.d.ts +101 -0
  484. package/dist/surface/tools/chat-drives.js +409 -0
  485. package/dist/surface/tools/coverage-tools.d.ts +2 -10
  486. package/dist/surface/tools/coverage-tools.js +2 -53
  487. package/dist/surface/tools/dynamic-tools.js +29 -1
  488. package/dist/surface/tools/empty-session-list.d.ts +51 -0
  489. package/dist/surface/tools/empty-session-list.js +120 -0
  490. package/dist/surface/tools/error-recovery.d.ts +14 -0
  491. package/dist/surface/tools/error-recovery.js +105 -8
  492. package/dist/surface/tools/explore-tools.d.ts +31 -1
  493. package/dist/surface/tools/explore-tools.js +438 -66
  494. package/dist/surface/tools/feedback-tools.d.ts +2 -3
  495. package/dist/surface/tools/feedback-tools.js +18 -3
  496. package/dist/surface/tools/gap-novelty.d.ts +3 -1
  497. package/dist/surface/tools/gap-novelty.js +8 -1
  498. package/dist/surface/tools/harness-explore.d.ts +118 -57
  499. package/dist/surface/tools/harness-explore.js +344 -292
  500. package/dist/surface/tools/harness-gate.d.ts +88 -0
  501. package/dist/surface/tools/harness-gate.js +235 -0
  502. package/dist/surface/tools/harness-hunt.d.ts +43 -0
  503. package/dist/surface/tools/harness-hunt.js +215 -0
  504. package/dist/surface/tools/harness-plan.d.ts +17 -0
  505. package/dist/surface/tools/harness-plan.js +38 -0
  506. package/dist/surface/tools/harness-script.d.ts +30 -0
  507. package/dist/surface/tools/harness-script.js +560 -0
  508. package/dist/surface/tools/harness-tab-guard.d.ts +5 -0
  509. package/dist/surface/tools/harness-tab-guard.js +27 -0
  510. package/dist/surface/tools/harness-toolset.d.ts +22 -1
  511. package/dist/surface/tools/harness-toolset.js +101 -7
  512. package/dist/surface/tools/human-notes.d.ts +16 -0
  513. package/dist/surface/tools/human-notes.js +27 -0
  514. package/dist/surface/tools/invoke-tool.d.ts +5 -2
  515. package/dist/surface/tools/invoke-tool.js +263 -85
  516. package/dist/surface/tools/lease-hint.js +26 -5
  517. package/dist/surface/tools/lease-permissions.d.ts +33 -0
  518. package/dist/surface/tools/lease-permissions.js +73 -0
  519. package/dist/surface/tools/lease-readiness.d.ts +38 -0
  520. package/dist/surface/tools/lease-readiness.js +57 -0
  521. package/dist/surface/tools/lease-seed.d.ts +49 -0
  522. package/dist/surface/tools/lease-seed.js +167 -0
  523. package/dist/surface/tools/lease-tools.d.ts +13 -24
  524. package/dist/surface/tools/lease-tools.js +146 -197
  525. package/dist/surface/tools/live-call-text.js +4 -4
  526. package/dist/surface/tools/merge-tools.js +42 -2
  527. package/dist/surface/tools/merged-name-redirect.js +4 -0
  528. package/dist/surface/tools/next-step.d.ts +29 -0
  529. package/dist/surface/tools/next-step.js +214 -0
  530. package/dist/surface/tools/observe-tools.js +45 -9
  531. package/dist/surface/tools/platform-moment.d.ts +72 -0
  532. package/dist/surface/tools/platform-moment.js +296 -0
  533. package/dist/surface/tools/query-hint-schema.d.ts +7 -0
  534. package/dist/surface/tools/query-hint-schema.js +10 -0
  535. package/dist/surface/tools/read-tools.js +71 -14
  536. package/dist/surface/tools/real-input-attempt.js +96 -13
  537. package/dist/surface/tools/reticle-result.d.ts +120 -0
  538. package/dist/surface/tools/reticle-result.js +364 -0
  539. package/dist/surface/tools/tool-kit.d.ts +83 -3
  540. package/dist/surface/tools/tool-kit.js +77 -7
  541. package/dist/surface/tools/tools.js +43 -59
  542. package/dist/telemetry/account-envelope.d.ts +7 -0
  543. package/dist/telemetry/account-envelope.js +61 -0
  544. package/dist/telemetry/agent-client.d.ts +15 -0
  545. package/dist/telemetry/agent-client.js +57 -0
  546. package/dist/telemetry/app-instrumented.js +9 -2
  547. package/dist/telemetry/argument-shape.d.ts +7 -0
  548. package/dist/telemetry/argument-shape.js +86 -1
  549. package/dist/telemetry/automation-hint.d.ts +2 -3
  550. package/dist/telemetry/automation-hint.js +33 -8
  551. package/dist/telemetry/cli-telemetry.js +7 -2
  552. package/dist/telemetry/daemon-telemetry.js +3 -0
  553. package/dist/telemetry/error-fingerprint.d.ts +10 -1
  554. package/dist/telemetry/error-fingerprint.js +61 -5
  555. package/dist/telemetry/feedback-cli.d.ts +0 -13
  556. package/dist/telemetry/feedback-cli.js +0 -77
  557. package/dist/telemetry/feedback.d.ts +13 -0
  558. package/dist/telemetry/feedback.js +183 -17
  559. package/dist/telemetry/harness-run.d.ts +18 -0
  560. package/dist/telemetry/harness-run.js +80 -0
  561. package/dist/telemetry/hud-events.d.ts +16 -0
  562. package/dist/telemetry/hud-events.js +27 -0
  563. package/dist/telemetry/hud-metrics.d.ts +29 -6
  564. package/dist/telemetry/hud-metrics.js +116 -25
  565. package/dist/telemetry/init-telemetry.js +2 -2
  566. package/dist/telemetry/install-source.d.ts +13 -25
  567. package/dist/telemetry/install-source.js +44 -3
  568. package/dist/telemetry/mcp-connection.d.ts +0 -14
  569. package/dist/telemetry/mcp-connection.js +5 -1
  570. package/dist/telemetry/onboarding-firsts.d.ts +32 -0
  571. package/dist/telemetry/onboarding-firsts.js +81 -6
  572. package/dist/telemetry/platform-linked.d.ts +5 -0
  573. package/dist/telemetry/platform-linked.js +32 -0
  574. package/dist/telemetry/project-profile.js +5 -3
  575. package/dist/telemetry/proxy-telemetry.js +4 -1
  576. package/dist/telemetry/session-metrics.d.ts +15 -4
  577. package/dist/telemetry/session-metrics.js +88 -52
  578. package/dist/telemetry/telemetry.d.ts +38 -2
  579. package/dist/telemetry/telemetry.js +144 -34
  580. package/dist/telemetry/verification-of.d.ts +3 -1
  581. package/dist/telemetry/verification-of.js +13 -4
  582. package/dist/wire-journal.d.ts +2 -2
  583. package/dist/wire-journal.js +20 -6
  584. package/docs/README.md +3 -3
  585. package/docs/actions.mdx +6 -3
  586. package/docs/adapters.md +1 -1
  587. package/docs/agent-cheatsheet.md +25 -28
  588. package/docs/architecture.md +5 -5
  589. package/docs/autodrive.md +33 -28
  590. package/docs/benchmarks.md +5 -5
  591. package/docs/best-practices.mdx +27 -9
  592. package/docs/capabilities.mdx +14 -16
  593. package/docs/cli/affected.mdx +1 -1
  594. package/docs/cli/cloud.mdx +54 -75
  595. package/docs/cli/doctor.mdx +14 -3
  596. package/docs/cli/drive.mdx +20 -14
  597. package/docs/cli/feedback.mdx +3 -3
  598. package/docs/cli/gate.mdx +7 -2
  599. package/docs/cli/help.mdx +50 -55
  600. package/docs/cli/init.mdx +43 -28
  601. package/docs/cli/license.mdx +12 -8
  602. package/docs/cli/mcp.mdx +4 -4
  603. package/docs/cli/open.mdx +3 -3
  604. package/docs/cli/report.mdx +4 -2
  605. package/docs/cli/restart.mdx +2 -2
  606. package/docs/cli/rollback.mdx +14 -8
  607. package/docs/cli/serve.mdx +4 -4
  608. package/docs/cli/setup.mdx +23 -0
  609. package/docs/cli/status.mdx +18 -5
  610. package/docs/cli/stop.mdx +67 -8
  611. package/docs/cli/try.mdx +62 -0
  612. package/docs/cli/update.mdx +4 -3
  613. package/docs/cli/verify.mdx +17 -6
  614. package/docs/cli/version.mdx +5 -4
  615. package/docs/cli.mdx +111 -42
  616. package/docs/debugging.md +3 -3
  617. package/docs/deploy-checks.md +1 -1
  618. package/docs/desktop.mdx +9 -3
  619. package/docs/enterprise.md +11 -10
  620. package/docs/environment.mdx +7 -8
  621. package/docs/faq.mdx +3 -3
  622. package/docs/first-drive.md +5 -4
  623. package/docs/flows.md +35 -27
  624. package/docs/for-agents.md +4 -5
  625. package/docs/frameworks.mdx +32 -21
  626. package/docs/getting-started.md +65 -61
  627. package/docs/human-control.md +16 -16
  628. package/docs/index.mdx +15 -42
  629. package/docs/install-agentic.mdx +22 -37
  630. package/docs/install-manual.mdx +23 -13
  631. package/docs/instrumentation.mdx +5 -3
  632. package/docs/integration-patterns.md +7 -7
  633. package/docs/license-activation.mdx +1 -1
  634. package/docs/multi-agent-testing.md +24 -6
  635. package/docs/packages/babel-plugin.mdx +4 -2
  636. package/docs/packages/browser.mdx +16 -10
  637. package/docs/packages/core.mdx +12 -5
  638. package/docs/packages/electron.mdx +3 -2
  639. package/docs/packages/engine.mdx +1 -1
  640. package/docs/packages/eslint-plugin.mdx +18 -12
  641. package/docs/packages/next.mdx +8 -7
  642. package/docs/packages/open-verification.mdx +1 -1
  643. package/docs/packages/server.mdx +5 -5
  644. package/docs/packages/tauri.mdx +9 -9
  645. package/docs/packages/test.mdx +4 -10
  646. package/docs/packages/vite-plugin.mdx +32 -4
  647. package/docs/packages.mdx +11 -15
  648. package/docs/platform-integration.md +6 -5
  649. package/docs/predicates.mdx +40 -24
  650. package/docs/quickstart.mdx +69 -30
  651. package/docs/required-checks.md +8 -7
  652. package/docs/reticle-manual.md +15 -5
  653. package/docs/skill-file.mdx +17 -79
  654. package/docs/skill-setup.md +9 -9
  655. package/docs/skill.md +200 -0
  656. package/docs/system-map.md +7 -7
  657. package/docs/telemetry.md +23 -25
  658. package/docs/testing.md +4 -4
  659. package/docs/token-efficiency.md +12 -12
  660. package/docs/tools/act-and-wait.mdx +9 -2
  661. package/docs/tools/act-sequence.mdx +6 -7
  662. package/docs/tools/act.mdx +2 -2
  663. package/docs/tools/assert.mdx +18 -17
  664. package/docs/tools/console.mdx +9 -9
  665. package/docs/tools/inspect.mdx +16 -7
  666. package/docs/tools/look.mdx +24 -0
  667. package/docs/tools/navigate.mdx +5 -3
  668. package/docs/tools/network.mdx +2 -2
  669. package/docs/tools/observe.mdx +6 -6
  670. package/docs/tools/overview.mdx +34 -33
  671. package/docs/tools/query.mdx +5 -5
  672. package/docs/tools/session-and-feedback.mdx +22 -13
  673. package/docs/tools/sessions.mdx +8 -8
  674. package/docs/tools/snapshot.mdx +6 -5
  675. package/docs/tools/state.mdx +9 -9
  676. package/docs/tools/tools-and-run.mdx +26 -24
  677. package/docs/tools/verify.mdx +28 -0
  678. package/docs/tools/wait-for.mdx +8 -4
  679. package/docs/troubleshooting.mdx +21 -6
  680. package/docs/usage.md +55 -46
  681. package/docs/use-cases.mdx +3 -3
  682. package/docs/vs-chrome-devtools-mcp.mdx +9 -6
  683. package/docs/vs-playwright-mcp.mdx +3 -1
  684. package/docs/what-is-recorded.md +17 -5
  685. package/docs/what-is-reticle.mdx +5 -3
  686. package/docs/why-reticle.mdx +1 -1
  687. package/package.json +9 -12
  688. package/dist/command/cli/demo/demo-page.d.ts +0 -78
  689. package/dist/command/cli/demo/demo-page.js +0 -241
  690. package/dist/command/cli/demo/demo-run.d.ts +0 -38
  691. package/dist/command/cli/demo/demo-run.js +0 -138
  692. package/dist/features/harness/driver.d.ts +0 -50
  693. package/dist/features/harness/driver.js +0 -236
  694. package/dist/features/harness/jev-driver.d.ts +0 -188
  695. package/dist/features/harness/jev-driver.js +0 -678
  696. package/dist/features/harness/openai-driver.d.ts +0 -58
  697. package/dist/features/harness/openai-driver.js +0 -206
  698. package/dist/judgement/hunt/hunt-report.d.ts +0 -49
  699. package/dist/judgement/hunt/hunt-report.js +0 -84
  700. package/dist/language/flows/buddy-status.d.ts +0 -25
  701. package/dist/language/flows/buddy-status.js +0 -32
  702. package/dist/language/flows/change/watch-batcher.d.ts +0 -18
  703. package/dist/language/flows/change/watch-batcher.js +0 -19
  704. package/dist/memory/cloud/harness-offer.d.ts +0 -44
  705. package/dist/memory/cloud/harness-offer.js +0 -145
  706. package/dist/memory/project/dir/fill-value-store.d.ts +0 -32
  707. package/dist/memory/project/dir/fill-value-store.js +0 -88
  708. package/dist/surface/tools/feature-capture.d.ts +0 -151
  709. package/dist/surface/tools/feature-capture.js +0 -235
  710. package/dist/surface/tools/tool-hit-rate.d.ts +0 -87
  711. package/dist/surface/tools/tool-hit-rate.js +0 -90
  712. package/dist/telemetry/harness-drive.d.ts +0 -4
  713. package/dist/telemetry/harness-drive.js +0 -35
  714. package/dist/telemetry/identify.d.ts +0 -22
  715. package/dist/telemetry/identify.js +0 -73
  716. package/docs/cli/capsules.mdx +0 -70
  717. package/docs/cli/hunt.mdx +0 -73
  718. package/docs/cli/identify.mdx +0 -76
  719. package/docs/cli/kill.mdx +0 -91
  720. package/docs/cli/watch.mdx +0 -62
  721. package/docs/local-registry.md +0 -143
@@ -1,58 +0,0 @@
1
- /**
2
- * The harness driver for OpenAI's Chat Completions API.
3
- *
4
- * Third driver, and the reason it exists is comparison rather than capability: people want to know
5
- * whether the cheap typed-decision model is good enough for THEIR app, and "cheap versus one
6
- * frontier model" is a weaker answer than "cheap versus the two they might otherwise reach for".
7
- *
8
- * A translation layer, exactly like `driver.ts` — the loop lives in `harness.ts` against
9
- * `ModelDriver` and knows nothing about any wire. Chat Completions is a genuinely different shape
10
- * from the Messages API, and translating OpenAI into Anthropic's wire on the platform side was
11
- * considered and rejected there: it would put a second, undeclared model-shaped transformation
12
- * inside the thing being measured. So this speaks the native format and the arm measures OpenAI.
13
- *
14
- * NOT cache-annotated, and that is a real asymmetry to hold in mind when reading a cost comparison
15
- * against the Anthropic arm. OpenAI caches long prefixes automatically and reports it back in
16
- * `usage.prompt_tokens_details.cached_tokens`, so the saving is not something this driver arranges;
17
- * it is reported below so the number is visible rather than assumed.
18
- */
19
- import type { ModelDriver } from './harness.js';
20
- import type { HarnessFetch } from './driver.js';
21
- /**
22
- * The default model.
23
- *
24
- * Deliberately not the largest available, for the same reason `DEFAULT_HARNESS_MODEL` is not: the
25
- * driver is choosing what to touch next, and the engine decides the verdict from evidence. A driver
26
- * that needed a frontier model would be evidence the engine was not doing its job.
27
- */
28
- export declare const DEFAULT_OPENAI_MODEL = "gpt-5.6-luna";
29
- export declare const DEFAULT_OPENAI_BASE_URL = "https://api.openai.com";
30
- export interface OpenAiDriverOptions {
31
- apiKey: string;
32
- model?: string;
33
- baseUrl?: string;
34
- /** Injected for tests. Defaults to the platform `fetch`. */
35
- fetch?: HarnessFetch;
36
- }
37
- /**
38
- * Read this driver's configuration out of the environment.
39
- *
40
- * A real OpenAI key goes to OpenAI. The platform key goes to the platform, which forwards with its
41
- * own — so somebody who has run `reticle link` can drive with this model having never held an
42
- * OpenAI key, which is the entire point of the proxy.
43
- */
44
- export declare function openAiOptionsFromEnv(env: Record<string, string | undefined>): OpenAiDriverOptions | undefined;
45
- /**
46
- * Where a Chat Completions call goes. The platform does not expose `/v1/chat/completions`; it
47
- * exposes its own path and forwards. A base URL that is not OpenAI's is the platform's, which is
48
- * the only other thing this talks to.
49
- */
50
- export declare function openAiCompletionsUrl(options: Pick<OpenAiDriverOptions, 'baseUrl'>): string;
51
- /**
52
- * The small GPT models refuse function tools on Chat Completions while reasoning is on: measured,
53
- * `gpt-5.6-luna` answers 400 to the first request that carries tools. A driving turn is a choice,
54
- * not a plan, so no hidden reasoning is also the right depth and the cheapest one.
55
- */
56
- export declare const OPENAI_REASONING_EFFORT = "none";
57
- /** Build a driver backed by Chat Completions. */
58
- export declare function openAiDriver(options: OpenAiDriverOptions): ModelDriver;
@@ -1,206 +0,0 @@
1
- /**
2
- * The harness driver for OpenAI's Chat Completions API.
3
- *
4
- * Third driver, and the reason it exists is comparison rather than capability: people want to know
5
- * whether the cheap typed-decision model is good enough for THEIR app, and "cheap versus one
6
- * frontier model" is a weaker answer than "cheap versus the two they might otherwise reach for".
7
- *
8
- * A translation layer, exactly like `driver.ts` — the loop lives in `harness.ts` against
9
- * `ModelDriver` and knows nothing about any wire. Chat Completions is a genuinely different shape
10
- * from the Messages API, and translating OpenAI into Anthropic's wire on the platform side was
11
- * considered and rejected there: it would put a second, undeclared model-shaped transformation
12
- * inside the thing being measured. So this speaks the native format and the arm measures OpenAI.
13
- *
14
- * NOT cache-annotated, and that is a real asymmetry to hold in mind when reading a cost comparison
15
- * against the Anthropic arm. OpenAI caches long prefixes automatically and reports it back in
16
- * `usage.prompt_tokens_details.cached_tokens`, so the saving is not something this driver arranges;
17
- * it is reported below so the number is visible rather than assumed.
18
- */
19
- import { z } from 'zod';
20
- import { ReticleEnv, platformCredentialFrom } from '@reticlehq/core';
21
- /**
22
- * The default model.
23
- *
24
- * Deliberately not the largest available, for the same reason `DEFAULT_HARNESS_MODEL` is not: the
25
- * driver is choosing what to touch next, and the engine decides the verdict from evidence. A driver
26
- * that needed a frontier model would be evidence the engine was not doing its job.
27
- */
28
- export const DEFAULT_OPENAI_MODEL = 'gpt-5.6-luna';
29
- export const DEFAULT_OPENAI_BASE_URL = 'https://api.openai.com';
30
- /** The platform's own path, which forwards with Reticle's key rather than the caller's. */
31
- const PLATFORM_PATH = '/v1/model/openai';
32
- const OPENAI_PATH = '/v1/chat/completions';
33
- /** Output cap per turn. A driving turn is a sentence and a tool call, never an essay. */
34
- const MAX_TOKENS = 4096;
35
- /** How much of one tool result the model is allowed to see. Same reasoning as the Anthropic driver. */
36
- const MAX_RESULT_CHARS = 8000;
37
- const ToolCall = z.object({
38
- id: z.string(),
39
- function: z.object({ name: z.string(), arguments: z.string().default('{}') }),
40
- });
41
- const ChatResponse = z.object({
42
- choices: z
43
- .array(z.object({
44
- message: z.object({
45
- content: z.string().nullish(),
46
- tool_calls: z.array(ToolCall).nullish(),
47
- }),
48
- }))
49
- .default([]),
50
- usage: z
51
- .object({
52
- prompt_tokens: z.number().default(0),
53
- completion_tokens: z.number().default(0),
54
- prompt_tokens_details: z.object({ cached_tokens: z.number().nullish() }).nullish(),
55
- })
56
- .default({ prompt_tokens: 0, completion_tokens: 0 }),
57
- });
58
- /**
59
- * Read this driver's configuration out of the environment.
60
- *
61
- * A real OpenAI key goes to OpenAI. The platform key goes to the platform, which forwards with its
62
- * own — so somebody who has run `reticle link` can drive with this model having never held an
63
- * OpenAI key, which is the entire point of the proxy.
64
- */
65
- export function openAiOptionsFromEnv(env) {
66
- const model = env[ReticleEnv.HARNESS_OPENAI_MODEL];
67
- const withModel = (rest) => ({
68
- ...rest,
69
- ...(model === undefined || 0 === model.length ? {} : { model }),
70
- });
71
- const direct = env[ReticleEnv.HARNESS_OPENAI_KEY];
72
- if (direct !== undefined && 0 < direct.length)
73
- return withModel({ apiKey: direct });
74
- const cloud = platformCredentialFrom(env);
75
- if (cloud === undefined)
76
- return undefined;
77
- return withModel({ apiKey: cloud.apiKey, baseUrl: cloud.url });
78
- }
79
- function toWireTool(tool) {
80
- return {
81
- type: 'function',
82
- function: { name: tool.name, description: tool.description, parameters: tool.inputSchema },
83
- };
84
- }
85
- function truncate(text) {
86
- return text.length <= MAX_RESULT_CHARS
87
- ? text
88
- : `${text.slice(0, MAX_RESULT_CHARS)}\n…[truncated: ${String(text.length - MAX_RESULT_CHARS)} more characters]`;
89
- }
90
- /**
91
- * The history, in Chat Completions' shape.
92
- *
93
- * The one structural difference from the Messages API, and it matters: a tool result is its OWN
94
- * message carrying `tool_call_id`, where Anthropic puts every result for a turn into one user
95
- * message. So a turn with three parallel calls becomes one assistant message and three tool
96
- * messages. That is the format's requirement rather than a choice — an unanswered `tool_call_id`
97
- * is rejected outright, so every outcome must be emitted, including the failures.
98
- */
99
- function toWireMessages(history) {
100
- const messages = [];
101
- for (const entry of history) {
102
- if ('user' === entry.role) {
103
- messages.push({ role: 'user', content: entry.text });
104
- continue;
105
- }
106
- if ('assistant' === entry.role) {
107
- messages.push({
108
- role: 'assistant',
109
- content: 0 === entry.text.length ? null : entry.text,
110
- ...(0 === entry.calls.length
111
- ? {}
112
- : {
113
- tool_calls: entry.calls.map((call) => ({
114
- id: call.id,
115
- type: 'function',
116
- function: { name: call.name, arguments: JSON.stringify(call.args) },
117
- })),
118
- }),
119
- });
120
- continue;
121
- }
122
- for (const outcome of entry.outcomes) {
123
- messages.push({
124
- role: 'tool',
125
- tool_call_id: outcome.id,
126
- content: truncate(JSON.stringify(outcome.result)),
127
- });
128
- }
129
- }
130
- return messages;
131
- }
132
- /** Arguments arrive as a JSON STRING here, not an object — a malformed one is empty, never a throw. */
133
- function parseArgs(raw) {
134
- try {
135
- const parsed = JSON.parse(raw);
136
- return 'object' === typeof parsed && null !== parsed ? parsed : {};
137
- }
138
- catch {
139
- return {};
140
- }
141
- }
142
- /**
143
- * Where a Chat Completions call goes. The platform does not expose `/v1/chat/completions`; it
144
- * exposes its own path and forwards. A base URL that is not OpenAI's is the platform's, which is
145
- * the only other thing this talks to.
146
- */
147
- export function openAiCompletionsUrl(options) {
148
- const baseUrl = options.baseUrl ?? DEFAULT_OPENAI_BASE_URL;
149
- return `${baseUrl}${DEFAULT_OPENAI_BASE_URL === baseUrl ? OPENAI_PATH : PLATFORM_PATH}`;
150
- }
151
- /**
152
- * The small GPT models refuse function tools on Chat Completions while reasoning is on: measured,
153
- * `gpt-5.6-luna` answers 400 to the first request that carries tools. A driving turn is a choice,
154
- * not a plan, so no hidden reasoning is also the right depth and the cheapest one.
155
- */
156
- export const OPENAI_REASONING_EFFORT = 'none';
157
- /** Build a driver backed by Chat Completions. */
158
- export function openAiDriver(options) {
159
- const model = options.model ?? DEFAULT_OPENAI_MODEL;
160
- const doFetch = options.fetch ?? ((url, init) => fetch(url, init));
161
- return {
162
- async turn(input) {
163
- const response = await doFetch(openAiCompletionsUrl(options), {
164
- method: 'POST',
165
- headers: {
166
- 'content-type': 'application/json',
167
- authorization: `Bearer ${options.apiKey}`,
168
- },
169
- body: JSON.stringify({
170
- model,
171
- max_completion_tokens: MAX_TOKENS,
172
- reasoning_effort: OPENAI_REASONING_EFFORT,
173
- tools: input.tools.map(toWireTool),
174
- messages: [{ role: 'system', content: input.system }, ...toWireMessages(input.history)],
175
- }),
176
- });
177
- const body = await response.text();
178
- // Thrown, not returned: a model that will not answer is a BROKEN drive, and a broken drive is
179
- // never reported as clean. Swallowing it would be a verdict about an app nobody drove.
180
- if (!response.ok)
181
- throw new Error(`the model refused the request (HTTP ${String(response.status)}): ${body}`);
182
- const parsed = ChatResponse.parse(JSON.parse(body));
183
- const message = parsed.choices[0]?.message;
184
- const calls = (message?.tool_calls ?? []).map((call) => ({
185
- id: call.id,
186
- name: call.function.name,
187
- args: parseArgs(call.function.arguments),
188
- }));
189
- const cached = parsed.usage.prompt_tokens_details?.cached_tokens ?? 0;
190
- return {
191
- text: message?.content ?? '',
192
- calls,
193
- usage: {
194
- // `prompt_tokens` INCLUDES the cached ones here, unlike the Messages API where the two are
195
- // disjoint. Subtracting keeps `input` meaning the same thing in both drivers: what was
196
- // processed at full price. A cost comparison that summed them would charge the arm that
197
- // cached well for the tokens it did not pay full price for.
198
- input: Math.max(parsed.usage.prompt_tokens - cached, 0),
199
- output: parsed.usage.completion_tokens,
200
- cacheRead: cached,
201
- cacheWrite: 0,
202
- },
203
- };
204
- },
205
- };
206
- }
@@ -1,49 +0,0 @@
1
- /**
2
- * Aggregate many crawl runs into the one number the core claim needs.
3
- *
4
- * Detection already exists: `reticle_crawl` drives every reachable control and reports contradictions
5
- * — two channels disagreeing about the same click. It found `swallowed-500-login` and, separately,
6
- * `ui-advanced-request-failed` on a control whose assertion was green, neither of them planted.
7
- *
8
- * What was missing is the arithmetic that turns those into evidence. The claim worth making is not
9
- * "Reticle can find bugs"; it is:
10
- *
11
- * "Run over N already-merged, already-green changes, it found X real bugs their own tests
12
- * certified as passing."
13
- *
14
- * That needs no control arm, which is why it is the cheapest credible proof available: the
15
- * counterfactual is already established, because those changes SHIPPED. An A/B is the second study,
16
- * and this tells you where to point it.
17
- *
18
- * Pure functions over already-collected reports — the driving is `reticle_crawl`'s job, and running
19
- * it across a commit range is a shell loop. This is only the part that must not be done by eye.
20
- */
21
- export interface HuntAnomaly {
22
- kind: string;
23
- ref?: string;
24
- desc?: string;
25
- detail?: string;
26
- }
27
- /** One crawl over one checkout. `label` is whatever identifies it — a commit sha, a PR number. */
28
- export interface HuntRun {
29
- label: string;
30
- anomalies: readonly HuntAnomaly[];
31
- /** Controls actually driven. A run that drove nothing proves nothing and is reported separately. */
32
- stepsRun?: number;
33
- }
34
- interface HuntSummary {
35
- runs: number;
36
- /** Runs that actually drove at least one control. The denominator that can honestly be quoted. */
37
- runsWithCoverage: number;
38
- /** Runs where at least one CONTRADICTION was found — the headline numerator. */
39
- runsWithContradictions: number;
40
- contradictions: number;
41
- /** Single-channel faults (console errors, failed requests, dead controls). Context, not the claim. */
42
- singleChannelFaults: number;
43
- byKind: Record<string, number>;
44
- /** Labels with contradictions, so each one can be confirmed by hand before it is counted. */
45
- flagged: string[];
46
- headline: string;
47
- }
48
- export declare function summarizeHunt(runs: readonly HuntRun[]): HuntSummary;
49
- export {};
@@ -1,84 +0,0 @@
1
- /**
2
- * Aggregate many crawl runs into the one number the core claim needs.
3
- *
4
- * Detection already exists: `reticle_crawl` drives every reachable control and reports contradictions
5
- * — two channels disagreeing about the same click. It found `swallowed-500-login` and, separately,
6
- * `ui-advanced-request-failed` on a control whose assertion was green, neither of them planted.
7
- *
8
- * What was missing is the arithmetic that turns those into evidence. The claim worth making is not
9
- * "Reticle can find bugs"; it is:
10
- *
11
- * "Run over N already-merged, already-green changes, it found X real bugs their own tests
12
- * certified as passing."
13
- *
14
- * That needs no control arm, which is why it is the cheapest credible proof available: the
15
- * counterfactual is already established, because those changes SHIPPED. An A/B is the second study,
16
- * and this tells you where to point it.
17
- *
18
- * Pure functions over already-collected reports — the driving is `reticle_crawl`'s job, and running
19
- * it across a commit range is a shell loop. This is only the part that must not be done by eye.
20
- */
21
- /** The contradiction kinds — cross-channel disagreement, as opposed to a single-channel fault. */
22
- const CONTRADICTION_KINDS = [
23
- 'ui-advanced-request-failed',
24
- 'signal-contradicted',
25
- 'response-ignored',
26
- 'duplicate-request',
27
- 'request-never-settled',
28
- 'failure-misattributed',
29
- ];
30
- const isContradiction = (kind) => CONTRADICTION_KINDS.includes(kind);
31
- export function summarizeHunt(runs) {
32
- const byKind = {};
33
- const flagged = [];
34
- let contradictions = 0;
35
- let singleChannelFaults = 0;
36
- let runsWithCoverage = 0;
37
- for (const run of runs) {
38
- // A run that drove nothing is not evidence of cleanliness. Counting it in the denominator would
39
- // dilute the rate with checkouts where the app never even came up — the arithmetic equivalent of
40
- // reporting a green because no test ran.
41
- if ((run.stepsRun ?? 0) > 0)
42
- runsWithCoverage += 1;
43
- let flaggedThisRun = false;
44
- for (const anomaly of run.anomalies) {
45
- byKind[anomaly.kind] = (byKind[anomaly.kind] ?? 0) + 1;
46
- if (isContradiction(anomaly.kind)) {
47
- contradictions += 1;
48
- flaggedThisRun = true;
49
- }
50
- else {
51
- singleChannelFaults += 1;
52
- }
53
- }
54
- if (flaggedThisRun)
55
- flagged.push(run.label);
56
- }
57
- return {
58
- runs: runs.length,
59
- runsWithCoverage,
60
- runsWithContradictions: flagged.length,
61
- contradictions,
62
- singleChannelFaults,
63
- byKind,
64
- flagged,
65
- headline: buildHeadline(runsWithCoverage, flagged.length, contradictions),
66
- };
67
- }
68
- /**
69
- * The sentence that goes in front of someone, phrased so it cannot overstate itself.
70
- *
71
- * It counts CHECKOUTS with a finding rather than raw findings, because one broken control clicked
72
- * five times is one bug and five anomalies. It also says "candidate": every flag still has to be
73
- * confirmed by hand before it is a bug, and a number that skips that step is the kind of evidence
74
- * this project exists to distrust.
75
- */
76
- function buildHeadline(withCoverage, flaggedRuns, contradictions) {
77
- if (0 === withCoverage) {
78
- return 'no run drove a single control — nothing was measured, which is not the same as nothing being wrong';
79
- }
80
- if (0 === flaggedRuns) {
81
- return `${String(withCoverage)} merged changes crawled, no cross-channel contradictions found — confirm coverage was real before reading this as clean`;
82
- }
83
- return `${String(flaggedRuns)} of ${String(withCoverage)} merged, already-green changes carried a candidate false green (${String(contradictions)} contradictions) — each needs manual confirmation before it is counted`;
84
- }
@@ -1,25 +0,0 @@
1
- /**
2
- * The buddy channel. The co-dev experience for the HUMAN: a single ambient line they can park in
3
- * a statusline or terminal and glance at — never a wall of output, never something they have to ask for.
4
- *
5
- * The rule this encodes: say the reassuring thing briefly and the alarming thing specifically. "41 flows
6
- * nominal" needs no detail; a deviation needs its name, because a status line that says only "1 deviation"
7
- * forces the human to go digging, which is exactly the work the buddy exists to remove.
8
- */
9
- interface BuddyStatusInput {
10
- /** Every saved flow. */
11
- total: number;
12
- /** Flows with a passing artifact. */
13
- passing: number;
14
- /** Flows that changed files put at risk and that have NO passing artifact — the actionable set. */
15
- deviations: readonly string[];
16
- /** Flows quarantined as flaky — surfaced, never blocking. */
17
- quarantined: readonly string[];
18
- }
19
- /**
20
- * One line, safe to print on every save. Shape:
21
- * `✓ 41 flows nominal`
22
- * `✗ 2 deviations: checkout, billing · 39 nominal · 1 flaky quarantined`
23
- */
24
- export declare function formatBuddyStatus(input: BuddyStatusInput): string;
25
- export {};
@@ -1,32 +0,0 @@
1
- /**
2
- * The buddy channel. The co-dev experience for the HUMAN: a single ambient line they can park in
3
- * a statusline or terminal and glance at — never a wall of output, never something they have to ask for.
4
- *
5
- * The rule this encodes: say the reassuring thing briefly and the alarming thing specifically. "41 flows
6
- * nominal" needs no detail; a deviation needs its name, because a status line that says only "1 deviation"
7
- * forces the human to go digging, which is exactly the work the buddy exists to remove.
8
- */
9
- /** How many deviation names to spell out before collapsing to a count (a status line must stay one line). */
10
- const MAX_NAMED = 2;
11
- /**
12
- * One line, safe to print on every save. Shape:
13
- * `✓ 41 flows nominal`
14
- * `✗ 2 deviations: checkout, billing · 39 nominal · 1 flaky quarantined`
15
- */
16
- export function formatBuddyStatus(input) {
17
- const parts = [];
18
- const deviations = input.deviations.length;
19
- if (0 === deviations) {
20
- parts.push(`✓ ${String(input.passing)}/${String(input.total)} flows nominal`);
21
- }
22
- else {
23
- const named = input.deviations.slice(0, MAX_NAMED).join(', ');
24
- const rest = deviations - Math.min(MAX_NAMED, deviations);
25
- parts.push(`✗ ${String(deviations)} deviation${1 === deviations ? '' : 's'}: ${named}${rest > 0 ? ` +${String(rest)} more` : ''}`);
26
- parts.push(`${String(input.passing)} nominal`);
27
- }
28
- if (input.quarantined.length > 0) {
29
- parts.push(`${String(input.quarantined.length)} flaky quarantined`);
30
- }
31
- return parts.join(' · ');
32
- }
@@ -1,18 +0,0 @@
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
- interface WatchBatcher {
8
- onChange(file: string): void;
9
- }
10
- 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
- export {};
@@ -1,19 +0,0 @@
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
- }
@@ -1,44 +0,0 @@
1
- /**
2
- * Whether this workspace has taken the three months of free harness, read by the thing that would
3
- * advertise it.
4
- *
5
- * The HUD can only advertise honestly if it knows, and only the platform knows. This is the read —
6
- * filed beside the other reads of the linked account rather than with the harness itself, because
7
- * nothing that DRIVES needs it; the thing that needs it is the snapshot the HUD paints from. Same
8
- * shape as the harness's own `platform-config.ts` and for the same reasons: it is INFORMATION, not a
9
- * credential, so every failure answers `undefined`, which every caller must treat as "say nothing"
10
- * rather than as "not claimed". An offline laptop must not start advertising something the person
11
- * already owns.
12
- *
13
- * It is also SYNCHRONOUS at the point of use. The impact snapshot is built inline, dozens of times a
14
- * session, and the answer changes about once per workspace lifetime, so a cache that refreshes in
15
- * the background is the whole design: readers get what we last heard, and a stale answer is only
16
- * ever stale in the safe direction — the card the person is looking at is the one they can act on.
17
- */
18
- import { type HarnessOffer } from '@reticlehq/core';
19
- /** A GET, narrowed to what this file uses, so a test can answer it without a network. */
20
- export type OfferFetch = (url: string, init: {
21
- method: string;
22
- headers: Record<string, string>;
23
- signal?: AbortSignal;
24
- }) => Promise<{
25
- ok: boolean;
26
- status: number;
27
- text(): Promise<string>;
28
- }>;
29
- /** Ask the platform where this workspace stands. `undefined` means "no answer", never "not claimed". */
30
- export declare function fetchHarnessOffer(env: Record<string, string | undefined>, claimUrl: string | undefined, doFetch?: OfferFetch, timeoutMs?: number): Promise<HarnessOffer | undefined>;
31
- /** What the impact snapshot reads: the last answer, with a refresh kicked off when it goes stale. */
32
- export interface OfferSource {
33
- read(): HarnessOffer | undefined;
34
- }
35
- /**
36
- * A self-refreshing cache over the read above.
37
- *
38
- * Deliberately NOT a timer. A daemon that lives for days would otherwise hold an interval whose only
39
- * job is to re-ask a question nobody is asking, and it would have to be torn down in a place that
40
- * already has nine teardowns. Refreshing on a stale READ means the work only happens while somebody
41
- * is actually looking, and the first read of a process — which is always stale — starts the fetch
42
- * that the second read answers from.
43
- */
44
- export declare function harnessOfferSource(env: Record<string, string | undefined>, claimUrl: () => string | undefined, now?: () => number, load?: (claim: string | undefined) => Promise<HarnessOffer | undefined>): OfferSource;