@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
@@ -0,0 +1,120 @@
1
+ /**
2
+ * The Harness drives this daemon is running, and the ones it finished, by run id.
3
+ *
4
+ * A drive takes minutes and an MCP client gives a tool call about one. Awaited inside the call, a
5
+ * drive outlived the client's timeout: the agent got no run id, the daemon kept driving and
6
+ * spending, and a retry started a second paid drive. So a drive is started here and the call only
7
+ * waits on it for a while; whoever asks again by run id (the same agent, another one, the HUD)
8
+ * reads the same entry.
9
+ *
10
+ * No I/O and no tool surface: what to run and where to write it arrive as functions, so this stays
11
+ * a sink the surface hands things to.
12
+ */
13
+ import { type ImpactSnapshot } from '@reticlehq/core';
14
+ export declare const DriveStatus: {
15
+ readonly RUNNING: "running";
16
+ readonly DONE: "done";
17
+ readonly STOPPED: "stopped";
18
+ readonly BROKEN: "broken";
19
+ /** Refused before it drove anything (switched off, no credits, locked): not a broken drive. */
20
+ readonly REFUSED: "refused";
21
+ };
22
+ export type DriveStatus = (typeof DriveStatus)[keyof typeof DriveStatus];
23
+ /**
24
+ * Thrown when the platform or the gate refuses a drive before it drives. Releasing a tab reported
25
+ * such a run as "broken", which reads as a fault in the Harness; a refusal is a refusal.
26
+ */
27
+ export declare class DriveRefusedError extends Error {
28
+ }
29
+ /** Who asked for the drive. */
30
+ export declare const DriveOrigin: {
31
+ readonly AGENT: "agent";
32
+ readonly HUD: "hud";
33
+ readonly CHAT: "chat";
34
+ readonly TRY: "try";
35
+ };
36
+ export type DriveOrigin = (typeof DriveOrigin)[keyof typeof DriveOrigin];
37
+ /**
38
+ * One drive, as it is written to `.reticle/runs/<run>.drive.json` and answered to a poll.
39
+ *
40
+ * The id is `harnessRun`, never `runId`: the sync uploads every file in that directory carrying a
41
+ * `runId` as a verification run, and this record would then collide with the drive's own run.
42
+ */
43
+ export interface DriveRecord {
44
+ harnessRun: string;
45
+ status: DriveStatus;
46
+ origin: DriveOrigin;
47
+ sessionId?: string;
48
+ startedAt: number;
49
+ endedAt?: number;
50
+ steps: number;
51
+ lastLine: string;
52
+ /** The tool's full answer, once the drive has ended. */
53
+ result?: Record<string, unknown>;
54
+ /** Why it broke, when it threw instead of answering. */
55
+ error?: string;
56
+ }
57
+ /** What a running drive reads from whoever started it. */
58
+ export interface DriveControl {
59
+ /** True once somebody asked it to stop. */
60
+ stopped: () => boolean;
61
+ /** Text somebody said to it since it last asked, oldest first. */
62
+ takeSaid: () => string[];
63
+ }
64
+ export interface StartDrive {
65
+ harness: string;
66
+ runId: string;
67
+ origin: DriveOrigin;
68
+ sessionId?: string;
69
+ now: () => number;
70
+ persist: (record: DriveRecord) => Promise<void>;
71
+ run: (control: DriveControl) => Promise<{
72
+ status: DriveStatus;
73
+ result: Record<string, unknown>;
74
+ }>;
75
+ }
76
+ export declare function startDrive(start: StartDrive): DriveRecord;
77
+ /** The drive this run id names, while this daemon still holds it. */
78
+ export declare function driveRecord(runId: string): DriveRecord | undefined;
79
+ /**
80
+ * The drive running on this session, if any. An unnamed session matches any running drive, and a
81
+ * drive started without one matches any session: either way it is the tab a second start would use.
82
+ */
83
+ export declare function runningDrive(sessionId: string | undefined): DriveRecord | undefined;
84
+ /** Every drive still running, for the HUD. */
85
+ export declare function runningDrives(): DriveRecord[];
86
+ /**
87
+ * Wait until the drive ends, `ms` passes (no limit when undefined), or `signal` aborts — whichever
88
+ * is first. Ending the wait never ends the drive. `onChange` hears every step while waiting.
89
+ */
90
+ export declare function awaitDrive(runId: string, ms: number | undefined, signal?: AbortSignal, onChange?: (record: DriveRecord) => void): Promise<void>;
91
+ /** Ask a running drive to stop. False when there is no such drive running. */
92
+ export declare function stopDrive(runId: string): boolean;
93
+ /** Queue text for the driver's next turn. False when there is no such drive running. */
94
+ export declare function sayToDrive(runId: string, text: string): boolean;
95
+ /** One tool call a drive made. `harness` may be a lane's id (`<harness>-L2`). */
96
+ export declare function noteDriveStep(harness: string, tool: string): void;
97
+ /** A line the drive narrated to the HUD. */
98
+ export declare function noteDriveLine(harness: string, line: string): void;
99
+ /** Hear every step a drive takes, so a panel showing its count can repaint. Returns the unsubscribe. */
100
+ export declare function onDriveStep(listener: (record: DriveRecord) => void): () => void;
101
+ /** Hear every drive start and end, from any origin. Returns the unsubscribe. */
102
+ export declare function onDriveChange(listener: (record: DriveRecord) => void): () => void;
103
+ /**
104
+ * The notes the agent has not heard: a drive started or finished, from any origin. Taken once.
105
+ * `except` is the run the agent is already reading, which needs no note about itself.
106
+ */
107
+ export declare function takeDriveNotes(except?: string): string[];
108
+ /** Tests only: every drive and note forgotten. */
109
+ export declare function forgetDrives(): void;
110
+ /**
111
+ * How long one poll waits on a drive before answering `running`. Under the 60s tool timeout most
112
+ * MCP clients use, with room for the answer to travel; a poll's `wait` overrides it.
113
+ */
114
+ export declare const POLL_WAIT_DEFAULT_S = 50;
115
+ /** The exact call that reads a drive: the same call while it runs and once it has ended. */
116
+ export declare function pollCall(runId: string): string;
117
+ /** What a poll answering `running` tells the agent to do, so it stays rather than walks away. */
118
+ export declare function stillRunning(runId: string, steps: number, elapsedS: number): string;
119
+ /** The impact snapshot, with the drive running on this tab when there is one. */
120
+ export declare function withRunningDrive(snapshot: ImpactSnapshot | undefined, sessionId: string): ImpactSnapshot | undefined;
@@ -0,0 +1,289 @@
1
+ /**
2
+ * The Harness drives this daemon is running, and the ones it finished, by run id.
3
+ *
4
+ * A drive takes minutes and an MCP client gives a tool call about one. Awaited inside the call, a
5
+ * drive outlived the client's timeout: the agent got no run id, the daemon kept driving and
6
+ * spending, and a retry started a second paid drive. So a drive is started here and the call only
7
+ * waits on it for a while; whoever asks again by run id (the same agent, another one, the HUD)
8
+ * reads the same entry.
9
+ *
10
+ * No I/O and no tool surface: what to run and where to write it arrive as functions, so this stays
11
+ * a sink the surface hands things to.
12
+ */
13
+ import { ReticleTool } from '@reticlehq/core';
14
+ export const DriveStatus = {
15
+ RUNNING: 'running',
16
+ DONE: 'done',
17
+ STOPPED: 'stopped',
18
+ BROKEN: 'broken',
19
+ /** Refused before it drove anything (switched off, no credits, locked): not a broken drive. */
20
+ REFUSED: 'refused',
21
+ };
22
+ /**
23
+ * Thrown when the platform or the gate refuses a drive before it drives. Releasing a tab reported
24
+ * such a run as "broken", which reads as a fault in the Harness; a refusal is a refusal.
25
+ */
26
+ export class DriveRefusedError extends Error {
27
+ }
28
+ /** Who asked for the drive. */
29
+ export const DriveOrigin = { AGENT: 'agent', HUD: 'hud', CHAT: 'chat', TRY: 'try' };
30
+ /** Finished drives kept for polling; older ones are read back from disk. */
31
+ const MAX_FINISHED = 50;
32
+ const LANE_SUFFIX = /-L\d+$/;
33
+ const entries = new Map();
34
+ const byHarness = new Map();
35
+ /** One pending note per drive, latest state wins: what the agent has not heard yet. */
36
+ const notes = new Map();
37
+ const changeListeners = new Set();
38
+ const stepListeners = new Set();
39
+ export function startDrive(start) {
40
+ const record = {
41
+ harnessRun: start.runId,
42
+ status: DriveStatus.RUNNING,
43
+ origin: start.origin,
44
+ ...(start.sessionId === undefined ? {} : { sessionId: start.sessionId }),
45
+ startedAt: start.now(),
46
+ steps: 0,
47
+ lastLine: 'Harness is starting',
48
+ };
49
+ const entry = {
50
+ record,
51
+ harness: start.harness,
52
+ abort: new AbortController(),
53
+ inbox: [],
54
+ waiters: new Set(),
55
+ };
56
+ entries.set(start.runId, entry);
57
+ byHarness.set(start.harness, entry);
58
+ const save = () => {
59
+ // A record that cannot be written is still a drive the registry answers for.
60
+ void start.persist({ ...entry.record }).catch(() => undefined);
61
+ };
62
+ save();
63
+ changed(entry, true);
64
+ const control = {
65
+ stopped: () => entry.abort.signal.aborted,
66
+ takeSaid: () => entry.inbox.splice(0),
67
+ };
68
+ void start
69
+ .run(control)
70
+ .then(({ status, result }) => {
71
+ entry.record = { ...entry.record, status, result };
72
+ }, (error) => {
73
+ entry.record = {
74
+ ...entry.record,
75
+ status: error instanceof DriveRefusedError ? DriveStatus.REFUSED : DriveStatus.BROKEN,
76
+ error: error instanceof Error ? error.message : String(error),
77
+ };
78
+ })
79
+ .then(() => {
80
+ entry.record.endedAt = start.now();
81
+ save();
82
+ changed(entry, true);
83
+ prune();
84
+ });
85
+ return { ...record };
86
+ }
87
+ /** The drive this run id names, while this daemon still holds it. */
88
+ export function driveRecord(runId) {
89
+ const entry = entries.get(runId);
90
+ return entry === undefined ? undefined : { ...entry.record };
91
+ }
92
+ /**
93
+ * The drive running on this session, if any. An unnamed session matches any running drive, and a
94
+ * drive started without one matches any session: either way it is the tab a second start would use.
95
+ */
96
+ export function runningDrive(sessionId) {
97
+ for (const entry of entries.values()) {
98
+ if (DriveStatus.RUNNING !== entry.record.status)
99
+ continue;
100
+ const own = entry.record.sessionId;
101
+ if (sessionId === undefined || own === undefined || own === sessionId)
102
+ return { ...entry.record };
103
+ }
104
+ return undefined;
105
+ }
106
+ /** Every drive still running, for the HUD. */
107
+ export function runningDrives() {
108
+ return [...entries.values()]
109
+ .filter((entry) => DriveStatus.RUNNING === entry.record.status)
110
+ .map((entry) => ({ ...entry.record }));
111
+ }
112
+ /**
113
+ * Wait until the drive ends, `ms` passes (no limit when undefined), or `signal` aborts — whichever
114
+ * is first. Ending the wait never ends the drive. `onChange` hears every step while waiting.
115
+ */
116
+ export function awaitDrive(runId, ms, signal, onChange) {
117
+ const entry = entries.get(runId);
118
+ if (entry === undefined || DriveStatus.RUNNING !== entry.record.status)
119
+ return Promise.resolve();
120
+ return new Promise((resolve) => {
121
+ const waiter = (record) => {
122
+ onChange?.(record);
123
+ if (DriveStatus.RUNNING !== record.status)
124
+ done();
125
+ };
126
+ const done = () => {
127
+ if (timer !== undefined)
128
+ clearTimeout(timer);
129
+ entry.waiters.delete(waiter);
130
+ signal?.removeEventListener('abort', done);
131
+ resolve();
132
+ };
133
+ const timer = ms === undefined ? undefined : setTimeout(done, ms);
134
+ entry.waiters.add(waiter);
135
+ signal?.addEventListener('abort', done, { once: true });
136
+ if (true === signal?.aborted)
137
+ done();
138
+ });
139
+ }
140
+ /** Ask a running drive to stop. False when there is no such drive running. */
141
+ export function stopDrive(runId) {
142
+ const entry = entries.get(runId);
143
+ if (entry === undefined || DriveStatus.RUNNING !== entry.record.status)
144
+ return false;
145
+ entry.abort.abort();
146
+ return true;
147
+ }
148
+ /** Queue text for the driver's next turn. False when there is no such drive running. */
149
+ export function sayToDrive(runId, text) {
150
+ const entry = entries.get(runId);
151
+ if (entry === undefined || DriveStatus.RUNNING !== entry.record.status)
152
+ return false;
153
+ entry.inbox.push(text);
154
+ return true;
155
+ }
156
+ /** One tool call a drive made. `harness` may be a lane's id (`<harness>-L2`). */
157
+ export function noteDriveStep(harness, tool) {
158
+ const entry = entryFor(harness);
159
+ if (entry === undefined)
160
+ return;
161
+ entry.record.steps += 1;
162
+ entry.record.lastLine = `step ${String(entry.record.steps)} · ${tool}`;
163
+ changed(entry, false);
164
+ const record = { ...entry.record };
165
+ for (const listener of stepListeners) {
166
+ try {
167
+ listener(record);
168
+ }
169
+ catch {
170
+ /* a listener never breaks the drive it listens to */
171
+ }
172
+ }
173
+ }
174
+ /** A line the drive narrated to the HUD. */
175
+ export function noteDriveLine(harness, line) {
176
+ const entry = entryFor(harness);
177
+ if (entry === undefined)
178
+ return;
179
+ entry.record.lastLine = line;
180
+ changed(entry, false);
181
+ }
182
+ /** Hear every step a drive takes, so a panel showing its count can repaint. Returns the unsubscribe. */
183
+ export function onDriveStep(listener) {
184
+ stepListeners.add(listener);
185
+ return () => stepListeners.delete(listener);
186
+ }
187
+ /** Hear every drive start and end, from any origin. Returns the unsubscribe. */
188
+ export function onDriveChange(listener) {
189
+ changeListeners.add(listener);
190
+ return () => changeListeners.delete(listener);
191
+ }
192
+ /**
193
+ * The notes the agent has not heard: a drive started or finished, from any origin. Taken once.
194
+ * `except` is the run the agent is already reading, which needs no note about itself.
195
+ */
196
+ export function takeDriveNotes(except) {
197
+ if (except !== undefined)
198
+ notes.delete(except);
199
+ const taken = [...notes.values()];
200
+ notes.clear();
201
+ return taken;
202
+ }
203
+ /** Tests only: every drive and note forgotten. */
204
+ export function forgetDrives() {
205
+ entries.clear();
206
+ byHarness.clear();
207
+ notes.clear();
208
+ }
209
+ function entryFor(harness) {
210
+ return byHarness.get(harness) ?? byHarness.get(harness.replace(LANE_SUFFIX, ''));
211
+ }
212
+ /** Waiters hear every change; an agent and the HUD only hear a start or an end. */
213
+ function changed(entry, startOrEnd) {
214
+ const record = { ...entry.record };
215
+ for (const waiter of [...entry.waiters])
216
+ waiter(record);
217
+ if (!startOrEnd)
218
+ return;
219
+ notes.set(record.harnessRun, noteFor(record));
220
+ for (const listener of changeListeners) {
221
+ try {
222
+ listener(record);
223
+ }
224
+ catch {
225
+ /* a listener never breaks the drive it listens to */
226
+ }
227
+ }
228
+ }
229
+ /**
230
+ * How long one poll waits on a drive before answering `running`. Under the 60s tool timeout most
231
+ * MCP clients use, with room for the answer to travel; a poll's `wait` overrides it.
232
+ */
233
+ export const POLL_WAIT_DEFAULT_S = 50;
234
+ /** How much of a finished drive's own summary rides in the note: its first line, bounded. */
235
+ const NOTE_SUMMARY_MAX = 200;
236
+ /** The exact call that reads a drive: the same call while it runs and once it has ended. */
237
+ export function pollCall(runId) {
238
+ return `${ReticleTool.VERIFY} {action:"explore", runId:"${runId}"}`;
239
+ }
240
+ /** What a poll answering `running` tells the agent to do, so it stays rather than walks away. */
241
+ export function stillRunning(runId, steps, elapsedS) {
242
+ return (`Still driving (${String(steps)} steps, ${String(elapsedS)}s). Call ${pollCall(runId)} again ` +
243
+ `now: it waits up to ${String(POLL_WAIT_DEFAULT_S)}s and answers the moment the drive ends. If ` +
244
+ `you stop polling, the drive keeps running and this runId still reads it.`);
245
+ }
246
+ const FROM = {
247
+ [DriveOrigin.AGENT]: '',
248
+ [DriveOrigin.HUD]: ' (started from the HUD)',
249
+ [DriveOrigin.CHAT]: ' (started from the Reticle dashboard)',
250
+ [DriveOrigin.TRY]: ' (started by `reticle try`)',
251
+ };
252
+ function noteFor(record) {
253
+ const id = record.harnessRun;
254
+ const tab = record.sessionId === undefined ? '' : ` on tab ${record.sessionId}`;
255
+ if (DriveStatus.RUNNING === record.status)
256
+ return (`Harness drive ${id}${FROM[record.origin]} is running${tab}. Follow it: ${pollCall(id)}. ` +
257
+ `Each call waits up to ${String(POLL_WAIT_DEFAULT_S)}s and answers the moment it ends; if you ` +
258
+ `stop polling, the drive keeps running and this runId still reads it.`);
259
+ return `Harness drive ${id}${FROM[record.origin]} finished (${summaryOf(record)}). Full result: ${pollCall(id)}.`;
260
+ }
261
+ function summaryOf(record) {
262
+ if (record.error !== undefined)
263
+ return `${record.status}: ${record.error}`;
264
+ const checks = record.result?.['checks'];
265
+ if ('object' !== typeof checks || null === checks)
266
+ return record.status;
267
+ const count = (key) => {
268
+ const n = checks[key];
269
+ return String('number' === typeof n ? n : 0);
270
+ };
271
+ const said = record.result?.['summary'];
272
+ const first = 'string' === typeof said ? (said.split('\n')[0] ?? '').slice(0, NOTE_SUMMARY_MAX) : '';
273
+ return `${record.status}: ${count('held')} held, ${count('failed')} failed, ${count('undecided')} undecided${0 === first.length ? '' : `. ${first}`}`;
274
+ }
275
+ function prune() {
276
+ const finished = [...entries.entries()].filter(([, entry]) => DriveStatus.RUNNING !== entry.record.status);
277
+ for (const [runId, entry] of finished.slice(0, Math.max(0, finished.length - MAX_FINISHED))) {
278
+ entries.delete(runId);
279
+ byHarness.delete(entry.harness);
280
+ }
281
+ }
282
+ /** The impact snapshot, with the drive running on this tab when there is one. */
283
+ export function withRunningDrive(snapshot, sessionId) {
284
+ const running = runningDrive(sessionId);
285
+ if (running === undefined || snapshot === undefined)
286
+ return snapshot;
287
+ const drive = { runId: running.harnessRun, steps: running.steps };
288
+ return { ...snapshot, harnessDrive: drive };
289
+ }
@@ -1,19 +1,15 @@
1
1
  /**
2
- * The names of the drivers the harness can be asked for.
2
+ * The Harness's driver names.
3
3
  *
4
- * A leaf module on purpose. These used to be re-exported from `harness-explore.ts`, which sits in
5
- * the tool surface and is reached, through the toolset and the tool table, from the very tool that
6
- * needs to declare them as an enum — a cycle that left the list `[undefined, undefined]` at the
7
- * moment zod read it, and failed inside a JSON-schema parser rather than anywhere near the cause.
8
- * Nothing here imports anything, so nothing can be half-initialised when it is read.
4
+ * A leaf module on purpose: the tool table reads these while the tool surface is still loading, and
5
+ * a module that imports nothing cannot be read half-initialised.
6
+ *
7
+ * There is one driver. Every Harness decision, its models and its planning run on the Reticle
8
+ * platform, on the workspace's Harness credits; this machine executes what it is told.
9
9
  */
10
- /** Generates its tool calls as text, and names the journeys it records. The default. */
11
- export declare const ANTHROPIC_DRIVER_NAME = "anthropic";
12
- /** Answers typed questions; picks from the elements on the page and cannot invent one. */
13
- export declare const JEV_DRIVER_NAME = "jev";
14
- /** Generates its tool calls, over Chat Completions. Here so an A/B has a third arm. */
15
- export declare const OPENAI_DRIVER_NAME = "openai";
16
- /** What a caller may name. Order is the order a reader sees them in the tool description. */
17
- export declare const DRIVER_NAMES: readonly ["anthropic", "jev", "openai"];
10
+ /** The platform's Harness: it decides on its side, this machine executes. See server-driver.ts. */
11
+ export declare const SERVER_DRIVER = "server";
18
12
  /** An injected driver: not selectable, because only a caller in-process can supply one. */
19
13
  export declare const CUSTOM_DRIVER_NAME = "custom";
14
+ /** What a drive needs, said once for every place that tells somebody. */
15
+ export declare const EXPLORE_NEEDS = "Runs on the Reticle platform: needs a linked project (`reticle connect`); Free has credits.";
@@ -1,19 +1,15 @@
1
1
  /**
2
- * The names of the drivers the harness can be asked for.
2
+ * The Harness's driver names.
3
3
  *
4
- * A leaf module on purpose. These used to be re-exported from `harness-explore.ts`, which sits in
5
- * the tool surface and is reached, through the toolset and the tool table, from the very tool that
6
- * needs to declare them as an enum — a cycle that left the list `[undefined, undefined]` at the
7
- * moment zod read it, and failed inside a JSON-schema parser rather than anywhere near the cause.
8
- * Nothing here imports anything, so nothing can be half-initialised when it is read.
4
+ * A leaf module on purpose: the tool table reads these while the tool surface is still loading, and
5
+ * a module that imports nothing cannot be read half-initialised.
6
+ *
7
+ * There is one driver. Every Harness decision, its models and its planning run on the Reticle
8
+ * platform, on the workspace's Harness credits; this machine executes what it is told.
9
9
  */
10
- /** Generates its tool calls as text, and names the journeys it records. The default. */
11
- export const ANTHROPIC_DRIVER_NAME = 'anthropic';
12
- /** Answers typed questions; picks from the elements on the page and cannot invent one. */
13
- export const JEV_DRIVER_NAME = 'jev';
14
- /** Generates its tool calls, over Chat Completions. Here so an A/B has a third arm. */
15
- export const OPENAI_DRIVER_NAME = 'openai';
16
- /** What a caller may name. Order is the order a reader sees them in the tool description. */
17
- export const DRIVER_NAMES = [ANTHROPIC_DRIVER_NAME, JEV_DRIVER_NAME, OPENAI_DRIVER_NAME];
10
+ /** The platform's Harness: it decides on its side, this machine executes. See server-driver.ts. */
11
+ export const SERVER_DRIVER = 'server';
18
12
  /** An injected driver: not selectable, because only a caller in-process can supply one. */
19
13
  export const CUSTOM_DRIVER_NAME = 'custom';
14
+ /** What a drive needs, said once for every place that tells somebody. */
15
+ export const EXPLORE_NEEDS = 'Runs on the Reticle platform: needs a linked project (`reticle connect`); Free has credits.';
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Pages of the real console, read in full by a live persona drive (persona 21), trimmed. The
3
+ * exploratory Harness's tests replay its live misses against these rather than against a tidy tree.
4
+ */
5
+ /** Impact (/overview), signed in: the rail, the banner and the top of the page. */
6
+ export declare const CONSOLE_OVERVIEW = "- link \"Skip to content\" (ref=e68)\n- complementary\n - link \"Impact\" (ref=e95)\n - img \"Reticle\" (ref=e96)\n - navigation \"Main\" (ref=e97)\n - link \"Impact\" (ref=e77)\n - text \"Impact\"\n - link \"Chat\" (ref=e98)\n - text \"Chat\"\n - link \"Inbox\" (ref=e99)\n - text \"Inbox\"\n - link \"Issues\" (ref=e100)\n - text \"Issues\"\n - link \"Runs\" (ref=e101)\n - text \"Runs\"\n - link \"Flows\" (ref=e102)\n - text \"Flows\"\n - region \"Chats\" (ref=e103)\n - paragraph [text=\"Your chats will be listed here.\"]\n - button \"Account: Bea Final21, Bea-Labs F302964 \u00B7 Pro\" (ref=e104)\n - text \"Bea Final21\"\n - text \"Bea-Labs F302964 \u00B7 Pro\"\n- button \"Resize sidebar\" (ref=e105)\n- banner\n - button \"Hide sidebar (\u2318B)\" (ref=e106) [pressed]\n - button \"Bea-Labs F302964\" (ref=e107)\n - text \"Bea-Labs F302964\"\n - button \"All projects\" (ref=e108)\n - text \"All projects\"\n - button \"Search, \u2318K\" (ref=e109)\n - text \"Search\"\n - text \"\u2318K\"\n - link \"14 days left \u00B7 500 trial credits left\" (ref=e73)\n - text \"14 days left\"\n - text \"\u00B7 500 trial credits left\"\n - generic \"p21f-bea-302964@example.com\" (ref=e110) [grid-cols:20px]\n - generic \"p21f-ana-302964@example.com\" (ref=e111) [grid-cols:20px]\n - generic \"p21f-raj-302964@example.com\" (ref=e112) [grid-cols:20px]\n - link \"Invite\" (ref=e113)\n- main\n - heading \"What Reticle did for your team\" (ref=e91)\n - paragraph [text=\"Last 30 days\"]\n - paragraph [text=\"Reticle tested the work of your team 1 time in the last 30 days and found nothin\u2026\"]\n - link \"Runs that failed 0 of 1 run\" (ref=e114)\n - text \"Runs that failed\"\n - text \"0\"\n - text \"of 1 run\"\n - link \"Runs that passed 1 of 1 run\" (ref=e115)\n - text \"Runs that passed\"\n - text \"1\"\n - text \"of 1 run\"\n - link \"Runs that partly passed 0\" (ref=e116)\n - text \"Runs that partly passed\"\n - text \"0\"\n - link \"Runs not proved 0\" (ref=e117)\n - text \"Runs not proved\"\n - text \"0\"\n - link \"Issues found and fixed 0 An issue that a later check passes.\" (ref=e118)\n - text \"Issues found and fixed\"\n - text \"0\"";
7
+ /** Flows (/flows): Memory is a link in the page's own "Flows" navigation, not in the rail. */
8
+ export declare const CONSOLE_FLOWS = "- link \"Skip to content\" (ref=e68)\n- complementary\n - link \"Impact\" (ref=e95)\n - img \"Reticle\" (ref=e96)\n - navigation \"Main\" (ref=e97)\n - link \"Impact\" (ref=e77)\n - text \"Impact\"\n - link \"Chat\" (ref=e98)\n - text \"Chat\"\n - link \"Inbox\" (ref=e99)\n - text \"Inbox\"\n - link \"Issues\" (ref=e100)\n - text \"Issues\"\n - link \"Runs\" (ref=e101)\n - text \"Runs\"\n - link \"Flows\" (ref=e102) [focused]\n - text \"Flows\"\n - region \"Chats\" (ref=e103)\n - paragraph [text=\"Your chats will be listed here.\"]\n - button \"Account: Bea Final21, Bea-Labs F302964 \u00B7 Pro\" (ref=e104)\n - text \"Bea Final21\"\n - text \"Bea-Labs F302964 \u00B7 Pro\"\n- button \"Resize sidebar\" (ref=e105)\n- banner\n - button \"Hide sidebar (\u2318B)\" (ref=e106) [pressed]\n - button \"Bea-Labs F302964\" (ref=e107)\n - text \"Bea-Labs F302964\"\n - button \"All projects\" (ref=e108)\n - text \"All projects\"\n - button \"Search, \u2318K\" (ref=e109)\n - text \"Search\"\n - text \"\u2318K\"\n - link \"14 days left \u00B7 500 trial credits left\" (ref=e73)\n - text \"14 days left\"\n - text \"\u00B7 500 trial credits left\"\n - generic \"p21f-bea-302964@example.com\" (ref=e110) [grid-cols:20px]\n - generic \"p21f-ana-302964@example.com\" (ref=e111) [grid-cols:20px]\n - generic \"p21f-raj-302964@example.com\" (ref=e112) [grid-cols:20px]\n - link \"Invite\" (ref=e113)\n- main\n - navigation \"Flows\" (ref=e144)\n - link \"Flows\" (ref=e148)\n - link \"Plans\" (ref=e149)\n - link \"Memory\" (ref=e150)\n - heading \"Flows\" (ref=e151)\n - paragraph [text=\"Saved paths through your app. Reticle can replay each flow.\"]\n - group \"View\" (ref=e152)\n - button \"Map\" (ref=e153)\n - button \"List\" (ref=e154) [pressed]\n - text \"Flows\"\n - text \"1\"\n - text \"Pages they reach\"\n - text \"1\"\n - text \"Failing now\"\n - text \"0\"\n - text \"Not replayed yet\"\n - text \"1\"\n - heading \"Starts at /\" (ref=e146)";
9
+ /**
10
+ * Impact with the workspace switcher open, as the live drive left it: the menu makes the rest of the
11
+ * page inert, so a read sees the menu and nothing else.
12
+ */
13
+ export declare const CONSOLE_SWITCHER_OPEN: string;
14
+ /** Memory (/memory): the shared project's records. */
15
+ export declare const CONSOLE_MEMORY: string;
@@ -0,0 +1,146 @@
1
+ /**
2
+ * Pages of the real console, read in full by a live persona drive (persona 21), trimmed. The
3
+ * exploratory Harness's tests replay its live misses against these rather than against a tidy tree.
4
+ */
5
+ /** Impact (/overview), signed in: the rail, the banner and the top of the page. */
6
+ export const CONSOLE_OVERVIEW = `- link "Skip to content" (ref=e68)
7
+ - complementary
8
+ - link "Impact" (ref=e95)
9
+ - img "Reticle" (ref=e96)
10
+ - navigation "Main" (ref=e97)
11
+ - link "Impact" (ref=e77)
12
+ - text "Impact"
13
+ - link "Chat" (ref=e98)
14
+ - text "Chat"
15
+ - link "Inbox" (ref=e99)
16
+ - text "Inbox"
17
+ - link "Issues" (ref=e100)
18
+ - text "Issues"
19
+ - link "Runs" (ref=e101)
20
+ - text "Runs"
21
+ - link "Flows" (ref=e102)
22
+ - text "Flows"
23
+ - region "Chats" (ref=e103)
24
+ - paragraph [text="Your chats will be listed here."]
25
+ - button "Account: Bea Final21, Bea-Labs F302964 · Pro" (ref=e104)
26
+ - text "Bea Final21"
27
+ - text "Bea-Labs F302964 · Pro"
28
+ - button "Resize sidebar" (ref=e105)
29
+ - banner
30
+ - button "Hide sidebar (⌘B)" (ref=e106) [pressed]
31
+ - button "Bea-Labs F302964" (ref=e107)
32
+ - text "Bea-Labs F302964"
33
+ - button "All projects" (ref=e108)
34
+ - text "All projects"
35
+ - button "Search, ⌘K" (ref=e109)
36
+ - text "Search"
37
+ - text "⌘K"
38
+ - link "14 days left · 500 trial credits left" (ref=e73)
39
+ - text "14 days left"
40
+ - text "· 500 trial credits left"
41
+ - generic "p21f-bea-302964@example.com" (ref=e110) [grid-cols:20px]
42
+ - generic "p21f-ana-302964@example.com" (ref=e111) [grid-cols:20px]
43
+ - generic "p21f-raj-302964@example.com" (ref=e112) [grid-cols:20px]
44
+ - link "Invite" (ref=e113)
45
+ - main
46
+ - heading "What Reticle did for your team" (ref=e91)
47
+ - paragraph [text="Last 30 days"]
48
+ - paragraph [text="Reticle tested the work of your team 1 time in the last 30 days and found nothin…"]
49
+ - link "Runs that failed 0 of 1 run" (ref=e114)
50
+ - text "Runs that failed"
51
+ - text "0"
52
+ - text "of 1 run"
53
+ - link "Runs that passed 1 of 1 run" (ref=e115)
54
+ - text "Runs that passed"
55
+ - text "1"
56
+ - text "of 1 run"
57
+ - link "Runs that partly passed 0" (ref=e116)
58
+ - text "Runs that partly passed"
59
+ - text "0"
60
+ - link "Runs not proved 0" (ref=e117)
61
+ - text "Runs not proved"
62
+ - text "0"
63
+ - link "Issues found and fixed 0 An issue that a later check passes." (ref=e118)
64
+ - text "Issues found and fixed"
65
+ - text "0"`;
66
+ /** Flows (/flows): Memory is a link in the page's own "Flows" navigation, not in the rail. */
67
+ export const CONSOLE_FLOWS = `- link "Skip to content" (ref=e68)
68
+ - complementary
69
+ - link "Impact" (ref=e95)
70
+ - img "Reticle" (ref=e96)
71
+ - navigation "Main" (ref=e97)
72
+ - link "Impact" (ref=e77)
73
+ - text "Impact"
74
+ - link "Chat" (ref=e98)
75
+ - text "Chat"
76
+ - link "Inbox" (ref=e99)
77
+ - text "Inbox"
78
+ - link "Issues" (ref=e100)
79
+ - text "Issues"
80
+ - link "Runs" (ref=e101)
81
+ - text "Runs"
82
+ - link "Flows" (ref=e102) [focused]
83
+ - text "Flows"
84
+ - region "Chats" (ref=e103)
85
+ - paragraph [text="Your chats will be listed here."]
86
+ - button "Account: Bea Final21, Bea-Labs F302964 · Pro" (ref=e104)
87
+ - text "Bea Final21"
88
+ - text "Bea-Labs F302964 · Pro"
89
+ - button "Resize sidebar" (ref=e105)
90
+ - banner
91
+ - button "Hide sidebar (⌘B)" (ref=e106) [pressed]
92
+ - button "Bea-Labs F302964" (ref=e107)
93
+ - text "Bea-Labs F302964"
94
+ - button "All projects" (ref=e108)
95
+ - text "All projects"
96
+ - button "Search, ⌘K" (ref=e109)
97
+ - text "Search"
98
+ - text "⌘K"
99
+ - link "14 days left · 500 trial credits left" (ref=e73)
100
+ - text "14 days left"
101
+ - text "· 500 trial credits left"
102
+ - generic "p21f-bea-302964@example.com" (ref=e110) [grid-cols:20px]
103
+ - generic "p21f-ana-302964@example.com" (ref=e111) [grid-cols:20px]
104
+ - generic "p21f-raj-302964@example.com" (ref=e112) [grid-cols:20px]
105
+ - link "Invite" (ref=e113)
106
+ - main
107
+ - navigation "Flows" (ref=e144)
108
+ - link "Flows" (ref=e148)
109
+ - link "Plans" (ref=e149)
110
+ - link "Memory" (ref=e150)
111
+ - heading "Flows" (ref=e151)
112
+ - paragraph [text="Saved paths through your app. Reticle can replay each flow."]
113
+ - group "View" (ref=e152)
114
+ - button "Map" (ref=e153)
115
+ - button "List" (ref=e154) [pressed]
116
+ - text "Flows"
117
+ - text "1"
118
+ - text "Pages they reach"
119
+ - text "1"
120
+ - text "Failing now"
121
+ - text "0"
122
+ - text "Not replayed yet"
123
+ - text "1"
124
+ - heading "Starts at /" (ref=e146)`;
125
+ /**
126
+ * Impact with the workspace switcher open, as the live drive left it: the menu makes the rest of the
127
+ * page inert, so a read sees the menu and nothing else.
128
+ */
129
+ export const CONSOLE_SWITCHER_OPEN = [
130
+ '- menu "Bea-Labs F302964" (ref=e300)',
131
+ ' - menuitem "Bea-Labs F302964" (ref=e301)',
132
+ ' - menuitem "New workspace" (ref=e302)',
133
+ '- region "Notifications alt+T" (ref=e1)',
134
+ ].join('\n');
135
+ /** Memory (/memory): the shared project's records. */
136
+ export const CONSOLE_MEMORY = [
137
+ '- main',
138
+ ' - navigation "Flows" (ref=e144)',
139
+ ' - link "Flows" (ref=e148)',
140
+ ' - link "Plans" (ref=e149)',
141
+ ' - link "Memory" (ref=e150) [focused]',
142
+ ' - heading "Memory" (ref=e160)',
143
+ ' - heading "One record your team disagrees on" (ref=e161)',
144
+ ' - button "Free shipping threshold 1 saved fact updated today" (ref=e162)',
145
+ '- region "Notifications alt+T" (ref=e1)',
146
+ ].join('\n');
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Two-way testing: the coding agent's verdict on a goal beside the Harness's, compared.
3
+ *
4
+ * The agent knows where everything is; the Harness starts with one sentence. Agent proved and
5
+ * Harness could not find is a discoverability finding (where a newcomer gives up), not noise. Only
6
+ * a DECIDED agent verdict (yes or no) on a claim naming the goal's text is compared: an undecided one
7
+ * says nothing either way, and a claim about something else is not the same goal.
8
+ */
9
+ import { Verified, type JournalAction, type RunDisparity } from '@reticlehq/core';
10
+ import type { GoalCheck } from '../goals.js';
11
+ import type { GoalSearch } from './goal-search.js';
12
+ export interface AgentVerdict {
13
+ claim: string;
14
+ verified: Verified;
15
+ }
16
+ /** The decided verdicts the connected agent itself made: actions no Harness drove. */
17
+ export declare function agentVerdictsIn(actions: readonly JournalAction[]): AgentVerdict[];
18
+ /** The comparison for one goal, or undefined when the agent made no decided claim about it. */
19
+ export declare function disparityFor(check: GoalCheck, agent: readonly AgentVerdict[], search: GoalSearch | undefined): RunDisparity | undefined;