@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,50 @@
1
+ /**
2
+ * Re-teach on a mistake the primer covers: ONE line, once per rule per agent session.
3
+ *
4
+ * After a compaction the agent keeps calling, but the rules it read at the start are gone. The daemon
5
+ * still knows it is the same agent (same MCP connection), and it can see the mistake in the call it
6
+ * just answered. So the answer carries the one rule that call broke — and costs nothing when the
7
+ * agent behaves. Deduplication is `foldNotices`' once-per-session rule.
8
+ *
9
+ * Advice only: computed from a result that is already decided, returned as a sentence.
10
+ */
11
+ import { ReticleTool, Verified, asRecord } from '@reticlehq/core';
12
+ export const ReteachLine = {
13
+ NO_UNTIL: 'Rule: name the consequence in `until` BEFORE acting — without it the result is "no-fault", which proves nothing.',
14
+ ALIAS: 'Rule: write predicates in their canonical spelling (see `normalized`); aliases are a courtesy, not the API.',
15
+ CASE: 'Rule: text checks are exact-case — use ignoreCase: true only when the case truly does not matter.',
16
+ RELIST: 'Rule: you already have this tab — reuse its sessionId (or omit it) instead of listing sessions again.',
17
+ COMPACTED: 'Lost track (context compacted)? reticle_run { tool: "reticle_context", args: { compact: true } } returns what this session proved, failed and still owes.',
18
+ };
19
+ const listCounts = new Map();
20
+ /** Tests only. */
21
+ export function resetReteach() {
22
+ listCounts.clear();
23
+ }
24
+ /** The rule this call broke, if any. */
25
+ export function reteachFor(session, tool, args, result) {
26
+ const lines = [];
27
+ if (ReticleTool.ACT_AND_WAIT === tool &&
28
+ args['until'] === undefined &&
29
+ args['predicate'] === undefined) {
30
+ if (Verified.NO_FAULT === result['verified'])
31
+ lines.push(ReteachLine.NO_UNTIL);
32
+ }
33
+ if (Array.isArray(result['normalized']) && result['normalized'].length > 0)
34
+ lines.push(ReteachLine.ALIAS);
35
+ const verdict = 'object' === typeof result['verdict'] && null !== result['verdict']
36
+ ? asRecord(result['verdict'])
37
+ : result;
38
+ if (true === verdict['caseOnlyMiss'])
39
+ lines.push(ReteachLine.CASE);
40
+ const listing = ReticleTool.SESSIONS === tool ||
41
+ (ReticleTool.SESSION === tool && (args['action'] === undefined || 'list' === args['action']));
42
+ if (listing && Array.isArray(result['sessions']) && result['sessions'].length > 0) {
43
+ const seen = (listCounts.get(session) ?? 0) + 1;
44
+ listCounts.set(session, seen);
45
+ // The third listing in one session: the first two are orientation, a third is a lost thread.
46
+ if (seen >= 3)
47
+ lines.push(ReteachLine.RELIST, ReteachLine.COMPACTED);
48
+ }
49
+ return lines;
50
+ }
@@ -15,3 +15,8 @@
15
15
  * missing instead of being replaced by a guess.
16
16
  */
17
17
  export declare function aliasParam(args: Record<string, unknown>, canonical: string, aliases: readonly string[]): Record<string, unknown>;
18
+ /**
19
+ * The alias a call used for `canonical`, named the way a verdict tool names a normalised predicate
20
+ * (`normalized: ["name → flowName"]`): accepted, and said, so the agent learns the real spelling.
21
+ */
22
+ export declare function aliasUsed(args: Record<string, unknown>, canonical: string, aliases: readonly string[]): string[];
@@ -23,3 +23,13 @@ export function aliasParam(args, canonical, aliases) {
23
23
  }
24
24
  return args;
25
25
  }
26
+ /**
27
+ * The alias a call used for `canonical`, named the way a verdict tool names a normalised predicate
28
+ * (`normalized: ["name → flowName"]`): accepted, and said, so the agent learns the real spelling.
29
+ */
30
+ export function aliasUsed(args, canonical, aliases) {
31
+ if (args[canonical] !== undefined)
32
+ return [];
33
+ const alias = aliases.find((name) => args[name] !== undefined);
34
+ return alias === undefined ? [] : [`${alias} → ${canonical}`];
35
+ }
@@ -0,0 +1,6 @@
1
+ import { z } from 'zod';
2
+ /**
3
+ * The per-call acknowledgement of steps the replay guard holds as destructive. Never persisted into
4
+ * a flow: a destructive confirmation is a decision made for one run.
5
+ */
6
+ export declare const confirmDangerousArg: (scope: string) => z.ZodOptional<z.ZodBoolean>;
@@ -0,0 +1,6 @@
1
+ import { z } from 'zod';
2
+ /**
3
+ * The per-call acknowledgement of steps the replay guard holds as destructive. Never persisted into
4
+ * a flow: a destructive confirmation is a decision made for one run.
5
+ */
6
+ export const confirmDangerousArg = (scope) => z.boolean().optional().describe(`Set true to allow destructive controls during ${scope} only.`);
@@ -1,5 +1,20 @@
1
1
  import type { Predicate } from '@reticlehq/engine/question/predicate/predicate-schema.js';
2
2
  import type { Session } from '../../../portal/session/session.js';
3
+ /**
4
+ * Any `data-reticle-source` stamp on an ELEMENT anywhere in an assertion's evidence, near misses
5
+ * included.
6
+ *
7
+ * Not a pointer to report: `assertSource` decides that, and it refuses a near miss because that is
8
+ * a different element. This answers a narrower question, the one the `no-source-mapping` gap asks:
9
+ * does this build stamp its elements at all? A near miss that carries `source` proves it does, so a
10
+ * failure whose only located element is a near miss must not tell the agent to install a plugin
11
+ * that is already working (#1422).
12
+ *
13
+ * Only element descriptors count (they carry a `ref` or a `tag`): a console error's `source` is the
14
+ * browser's script URL and says nothing about build stamps. The depth bound is generous enough for
15
+ * nested `allOf`/`anyOf` evidence and exists only because evidence is page-supplied.
16
+ */
17
+ export declare function stampedSourceIn(evidence: unknown, depth?: number): string | undefined;
3
18
  /**
4
19
  * The `file:line` an ASSERTION is entitled to report — its own evidence, or nothing.
5
20
  *
@@ -28,6 +28,46 @@ function evidenceSource(evidence) {
28
28
  }
29
29
  return agreed;
30
30
  }
31
+ /**
32
+ * Any `data-reticle-source` stamp on an ELEMENT anywhere in an assertion's evidence, near misses
33
+ * included.
34
+ *
35
+ * Not a pointer to report: `assertSource` decides that, and it refuses a near miss because that is
36
+ * a different element. This answers a narrower question, the one the `no-source-mapping` gap asks:
37
+ * does this build stamp its elements at all? A near miss that carries `source` proves it does, so a
38
+ * failure whose only located element is a near miss must not tell the agent to install a plugin
39
+ * that is already working (#1422).
40
+ *
41
+ * Only element descriptors count (they carry a `ref` or a `tag`): a console error's `source` is the
42
+ * browser's script URL and says nothing about build stamps. The depth bound is generous enough for
43
+ * nested `allOf`/`anyOf` evidence and exists only because evidence is page-supplied.
44
+ */
45
+ export function stampedSourceIn(evidence, depth = 0) {
46
+ if (depth > MAX_EVIDENCE_DEPTH || 'object' !== typeof evidence || null === evidence) {
47
+ return undefined;
48
+ }
49
+ if (Array.isArray(evidence)) {
50
+ for (const entry of evidence) {
51
+ const found = stampedSourceIn(entry, depth + 1);
52
+ if (found !== undefined)
53
+ return found;
54
+ }
55
+ return undefined;
56
+ }
57
+ const entry = evidence;
58
+ const isElement = 'string' === typeof entry.ref || 'string' === typeof entry.tag;
59
+ if (isElement && 'string' === typeof entry.source && 0 < entry.source.length) {
60
+ return entry.source;
61
+ }
62
+ for (const value of Object.values(evidence)) {
63
+ const found = stampedSourceIn(value, depth + 1);
64
+ if (found !== undefined)
65
+ return found;
66
+ }
67
+ return undefined;
68
+ }
69
+ /** How deep `stampedSourceIn` follows nested evidence: combinators nest, a page could nest forever. */
70
+ const MAX_EVIDENCE_DEPTH = 16;
31
71
  /**
32
72
  * The `file:line` an ASSERTION is entitled to report — its own evidence, or nothing.
33
73
  *
@@ -1,5 +1,5 @@
1
1
  import type { InstrumentationGap, JournalVerdictEffect } from '@reticlehq/core/artifacts';
2
- import type { Predicate } from '@reticlehq/engine/question/predicate/predicate.js';
2
+ import { type Predicate } from '@reticlehq/engine/question/predicate/predicate.js';
3
3
  import type { Session } from '../../../portal/session/session.js';
4
4
  import { type Contradiction } from '@reticlehq/engine/disagreement/contradictions.js';
5
5
  /**
@@ -4,19 +4,22 @@ import { gapsForAction } from '@reticlehq/engine/evidence/instrumentation-gaps.j
4
4
  import { noteSessionGaps } from '@reticlehq/engine/evidence/gap-ledger.js';
5
5
  import { declaresState } from '@reticlehq/engine/question/predicate/predicate-asks.js';
6
6
  import { isStateUnwatched } from '@reticlehq/engine/evidence/blind-spots.js';
7
+ import { hiddenMatchNote } from '@reticlehq/engine/evidence/already-true.js';
8
+ import { provenExpectedLinks, } from '@reticlehq/engine/question/predicate/predicate.js';
7
9
  import { findContradictions, } from '@reticlehq/engine/disagreement/contradictions.js';
8
10
  import { crashedRuleNotes } from '@reticlehq/engine/disagreement/contradiction-folds.js';
9
11
  import { declaredExpectations, declaresBodyIndependentChannel, } from '@reticlehq/engine/question/declared.js';
10
12
  import { absenceBlindSpotNote, blindSpotsFromState, buildCoverageStatement, restsOnCompleteWindow, Coverage, impeachesCapture, transportGapNote, } from '@reticlehq/engine/evidence/blind-spots.js';
11
13
  import { buildHonestyBlock } from '@reticlehq/engine/evidence/honesty.js';
12
- import { acceptedWriteLabels } from '@reticlehq/engine/evidence/accepted-write.js';
14
+ import { acceptedWriteLabels, hasAcceptedWrite, } from '@reticlehq/engine/evidence/accepted-write.js';
13
15
  import { unreadWriteLabels } from '@reticlehq/engine/evidence/unread-outcome.js';
14
16
  import { decideVerified } from '@reticlehq/engine/evidence/verified.js';
15
17
  import { describeWaitTarget, namedNetIsInFlight } from '@reticlehq/engine/evidence/unsettled.js';
16
18
  import { inFlightRequestLabels, repeatedRequestLabels, } from '../act/settle-in-flight.js';
17
19
  import { gradeOfPredicate } from './assert-grade.js';
18
- import { assertSource } from './assert-source.js';
20
+ import { assertSource, stampedSourceIn } from './assert-source.js';
19
21
  import { VerdictAttribution, verdictAttributionOf } from '@reticlehq/core';
22
+ import { noteSourceSeen } from '../../../portal/session/recorded-gaps.js';
20
23
  /**
21
24
  * The honesty verdict for a plain `reticle_assert`.
22
25
  *
@@ -56,8 +59,12 @@ changeUndeclared) {
56
59
  // over-warning, which is the correct direction here: the failure this guards against is a green
57
60
  // that implies coverage it never had, and a needless caveat costs the agent a sentence.
58
61
  const spots = blindSpotsFromState(session.blindSpots(), session.runtime);
59
- const statement = buildCoverageStatement(spots);
62
+ // The window's own counts, so sampling before it is not described as this window's (#1414).
63
+ const windowSpots = blindSpotsFromState(session.blindSpots(since), session.runtime);
64
+ const statement = buildCoverageStatement(spots, windowSpots);
60
65
  const absenceBlindSpot = absenceBlindSpotNote(predicate, spots);
66
+ // A green resting on hidden matches says the node exists, not that it shows (#1408).
67
+ const hiddenMatch = hiddenMatchNote(predicate, evidence);
61
68
  // Omitted entirely when coverage is full, so an intact page pays nothing and the field's PRESENCE
62
69
  // is the warning.
63
70
  const coverage = Coverage.PARTIAL === statement.coverage
@@ -90,12 +97,15 @@ changeUndeclared) {
90
97
  background: session.background,
91
98
  expectedFailures: declared.netFailures,
92
99
  namedNetUrls: declared.netUrls,
100
+ repeatableNetUrls: declared.repeatableNetUrls,
93
101
  renderProved: pass && declared.rendersContent,
94
102
  ...(actCursor !== undefined && actCursor >= since ? { actionSince: actCursor } : {}),
95
103
  });
96
104
  // Only a spot that IMPEACHES the capture downgrades a general verdict. Structural boundaries are
97
105
  // reported as coverage; the narrower absence exception is computed separately above.
98
- const impeaching = buildCoverageStatement(spots.filter((sp) => impeachesCapture(sp.kind)));
106
+ const impeaching = buildCoverageStatement(
107
+ // The WINDOW's blind spots: sampling before it is a coverage fact, not this verdict's gap (#1414).
108
+ windowSpots.filter((sp) => impeachesCapture(sp.kind)));
99
109
  // A gap in the WINDOW, as opposed to a standing limit of the page. Both mean the same thing to the
100
110
  // rule — part of what happened was not seen — so both belong in `blindSpots`, which is the only
101
111
  // input `decideVerified` reads for that.
@@ -115,7 +125,17 @@ changeUndeclared) {
115
125
  // A consumer rule that crashed belongs here too: the engine ran with fewer rules than it claims,
116
126
  // so part of what happened may simply not have been looked for.
117
127
  const impeachingNotes = [impeaching.note, gap, ...crashedRuleNotes()].filter((n) => n !== undefined);
118
- const outcomePending = acceptedWriteLabels(windowEvents);
128
+ // Which 202s are still the claim's outcome to wait for (#1120). The proven links decide the
129
+ // exemption, so a 200 branch of an `anyOf` cannot exempt the 202 that also fired; and the walk
130
+ // only runs when a 202 is actually waiting, because that is the only case it can change.
131
+ const assertedAccepts = pass && hasAcceptedWrite(windowEvents)
132
+ ? await provenExpectedLinks(session, predicate, since)
133
+ : [];
134
+ const outcomePending = acceptedWriteLabels(windowEvents, {
135
+ appUrl: session.url,
136
+ background: session.background,
137
+ asserted: assertedAccepts,
138
+ });
119
139
  const outcomeUnread = unreadWriteLabels(windowEvents);
120
140
  const stillInFlight = inFlightRequestLabels(windowEvents, session.url, session.background);
121
141
  const effectiveInconclusive = inconclusive ?? (!pass ? session.preconditionFailure?.() : undefined);
@@ -160,6 +180,7 @@ changeUndeclared) {
160
180
  ...(effectiveInconclusive === undefined ? {} : { inconclusive: effectiveInconclusive }),
161
181
  ...(true === observationLost ? { observationLost: true, lastUrl: session.url } : {}),
162
182
  ...(absenceBlindSpot === undefined ? {} : { absenceBlindSpot }),
183
+ ...(hiddenMatch === undefined ? {} : { hiddenMatch }),
163
184
  ...(namedNetIsInFlight(predicate, stillInFlight) ? { namedRequestInFlight: true } : {}),
164
185
  honesty: buildHonestyBlock({
165
186
  grade: gradeOfPredicate(predicate),
@@ -192,13 +213,25 @@ changeUndeclared) {
192
213
  repeated: repeatedRequestLabels(windowEvents),
193
214
  },
194
215
  });
216
+ // The one file:line this verdict is entitled to: its own evidence, or — for a failure with no DOM
217
+ // clause to point at — the control last driven. Returned so the RESPONSE can echo the same value
218
+ // the journal keeps; one verdict must never carry two different pointers.
219
+ const source = assertSource({
220
+ predicate,
221
+ evidence,
222
+ pass,
223
+ lastActSource: session.lastAct.source(),
224
+ });
195
225
  // The same rule the act path uses, fed by what THIS path knows. An assertion drives nothing, so
196
- // only two of the four gates can fire here: a red with no remembered source to point at, and a
197
- // state assertion against an app that registers no store.
226
+ // only two of the four gates can fire here: a red with nothing located, and a state assertion
227
+ // against an app that registers no store. "Nothing located" reads the verdict's own source first,
228
+ // then any stamp in its evidence (a near miss carries one), and only then the last act: before,
229
+ // it read only the last act, so a red asked before any act reported `no-source-mapping` while its
230
+ // own near misses carried file:line (#1422).
198
231
  const gaps = gapsForAction({
199
232
  pass,
200
233
  ...(changeUndeclared === undefined ? {} : { changeUndeclared }),
201
- source: session.lastAct.source(),
234
+ source: source ?? stampedSourceIn(evidence) ?? session.lastAct.source(),
202
235
  stateAsked: declaresState(predicate),
203
236
  stateUnwatched: isStateUnwatched(spots),
204
237
  // What the app DECLARED, so an under-instrumented one is told without having to be asked.
@@ -209,16 +242,8 @@ changeUndeclared) {
209
242
  domMutated: false,
210
243
  signalsFired: 0,
211
244
  });
245
+ noteSourceSeen(session, source ?? stampedSourceIn(evidence));
212
246
  noteSessionGaps(session, gaps);
213
- // The one file:line this verdict is entitled to: its own evidence, or — for a failure with no DOM
214
- // clause to point at — the control last driven. Returned so the RESPONSE can echo the same value
215
- // the journal keeps; one verdict must never carry two different pointers.
216
- const source = assertSource({
217
- predicate,
218
- evidence,
219
- pass,
220
- lastActSource: session.lastAct.source(),
221
- });
222
247
  // Who can act on this verdict, derived from the clause that decided it — see `attributedTo` below.
223
248
  const attributedTo = verdictAttributionOf(decision.verifiedReason);
224
249
  return {
@@ -9,6 +9,32 @@ import { ReticleTool } from '@reticlehq/core';
9
9
  import { asNumber, asString } from '@reticlehq/core';
10
10
  import { sessionIdShape, commandOrThrow } from './tool-kit.js';
11
11
  import { timeoutMsSchema } from './args/numeric-bounds.js';
12
+ /** Said when a lease's page now has no Reticle SDK: only the browser can still act on it. */
13
+ const MSG_LEASE_WITHOUT_SDK = 'This page has no Reticle SDK, so only browser-level actions apply here (navigate, screenshot). ' +
14
+ 'The lease is kept: navigate back to the app and it reattaches.';
15
+ /** Navigate a lease through its browser page, and wait for its SDK to come back. */
16
+ async function navigateLease(deps, sessionId, url, args) {
17
+ const timeoutMs = asNumber(args['timeout_ms']) ?? ARRIVAL_TIMEOUT_MS;
18
+ const went = (await deps.pool?.gotoLease(sessionId, url, timeoutMs)) ?? false;
19
+ if (!went)
20
+ return { ok: false, url, reason: 'the leased page did not navigate' };
21
+ const back = await waitForSession(deps, sessionId, timeoutMs);
22
+ return back
23
+ ? { ok: true, url, confirmed: true, sessionId }
24
+ : { ok: true, url, confirmed: false, waitedMs: timeoutMs, note: MSG_LEASE_WITHOUT_SDK };
25
+ }
26
+ /** Whether the session reconnects within the budget. */
27
+ async function waitForSession(deps, sessionId, timeoutMs) {
28
+ const start = deps.now();
29
+ for (;;) {
30
+ if (deps.sessions.get(sessionId) !== undefined)
31
+ return true;
32
+ if (deps.now() - start >= timeoutMs)
33
+ return false;
34
+ await new Promise((resolve) => setTimeout(resolve, LEASE_POLL_MS));
35
+ }
36
+ }
37
+ const LEASE_POLL_MS = 100;
12
38
  export const BROWSER_TOOLS = [
13
39
  {
14
40
  name: ReticleTool.NAVIGATE,
@@ -85,6 +111,16 @@ export const BROWSER_TOOLS = [
85
111
  const requested = asString(args['url']);
86
112
  if (requested === undefined || 0 === requested.length)
87
113
  return { ok: false, reason: 'url required' };
114
+ const named = asString(args['sessionId']);
115
+ // A lease whose page has no SDK right now (it was navigated to an image, a PDF, another site):
116
+ // the page is still the lease's, so it is navigated through the browser and reattaches when it
117
+ // is back on the app, instead of answering "no connected session" for good.
118
+ if (named !== undefined && deps.sessions.get(named) === undefined) {
119
+ const leaseUrl = deps.pool?.leaseUrl(named);
120
+ if (leaseUrl !== undefined) {
121
+ return navigateLease(deps, named, carryReticleIdentity(leaseUrl, requested), args);
122
+ }
123
+ }
88
124
  // Record navigate as an action. Its window is usually empty (the page unloads and the SDK
89
125
  // reconnects), but the action record itself — "navigated to X" — is the causal fact worth keeping.
90
126
  const session = deps.sessions.resolve(asString(args['sessionId']));
@@ -96,6 +132,10 @@ export const BROWSER_TOOLS = [
96
132
  // which reads whatever is at the target afterwards, cannot tell the two apart on its own.
97
133
  const target = absoluteTarget(url, session.url);
98
134
  const priorIds = idsAtTarget(deps.sessions, target);
135
+ // The document the tab is on NOW. Sampled before dispatch because the replacement can
136
+ // connect while the NAVIGATE reply is still pending, and reading it after the await would
137
+ // record the replacement as the starting document (#1320).
138
+ const navigatedFromDocumentId = session.currentDocumentId;
99
139
  session.beginAction(ReticleTool.NAVIGATE, { url });
100
140
  // Same floor as the reload path above, for the same reason: going to a new URL replaces the
101
141
  // document just as thoroughly. `beginAction` attributes events to this action; it does not move
@@ -112,13 +152,22 @@ export const BROWSER_TOOLS = [
112
152
  const arrival = true === result.ok
113
153
  ? await awaitArrival(deps.sessions, target, {
114
154
  // Keep the original Session object and URL so arrival detection can distinguish
115
- // an in-progress navigation from a document that arrived somewhere else.
155
+ // an in-progress navigation from a document that arrived somewhere else. The
156
+ // document identity lets a same-URL navigation wait for its replacement instead
157
+ // of confirming the document it is about to destroy (#1320).
116
158
  navigatedSession: session,
117
159
  navigatedFrom: session.url,
160
+ ...(navigatedFromDocumentId === undefined ? {} : { navigatedFromDocumentId }),
118
161
  priorIds,
119
162
  }, timeoutMs)
120
163
  : null;
121
- return navigateResult(result, arrival, timeoutMs);
164
+ const answer = navigateResult(result, arrival, timeoutMs);
165
+ // A lease navigated off its app (an image, a PDF) is kept, and says what still works.
166
+ const offApp = null === arrival &&
167
+ true === result.ok &&
168
+ deps.pool?.leaseUrl(session.id) !== undefined &&
169
+ deps.sessions.get(session.id) === undefined;
170
+ return offApp ? { ...answer, note: MSG_LEASE_WITHOUT_SDK } : answer;
122
171
  }
123
172
  finally {
124
173
  session.finishAction();
@@ -0,0 +1,101 @@
1
+ import type { SessionInfo } from '../../portal/session/session-info.js';
2
+ import { LinkCapability, type PresenterTone } from '@reticlehq/core';
3
+ import type { ToolDeps } from './tool-kit.js';
4
+ import type { FileSystemPort } from '../../memory/project/fs/fs-port.js';
5
+ import { type ProbedTab } from '../../portal/session/recorded-gaps.js';
6
+ import { type FreeDrive } from '../../features/harness/platform/platform-drives.js';
7
+ import { HumanControlKind, type LinkUnsyncedRoot } from '@reticlehq/core';
8
+ /** What this daemon does for the platform's chat. Each one is listed only once it is built. */
9
+ export declare const CHAT_CAPABILITIES: readonly LinkCapability[];
10
+ /** The slice of the session manager this needs. */
11
+ export interface ChatDriveSessions {
12
+ list(): SessionInfo[];
13
+ count(): number;
14
+ get(id: string): {
15
+ autoEnd(text: string, tone: PresenterTone): void;
16
+ pushNarration(text: string): void;
17
+ readonly sdkVersion?: string | undefined;
18
+ readonly channels?: readonly string[] | undefined;
19
+ /** Asks the page what it carries (`probeMarkers`). Absent on a test double. */
20
+ command?: ProbedTab['command'];
21
+ readonly sourceMapping?: boolean | undefined;
22
+ } | undefined;
23
+ /** The last page handshake the bridge refused, when there was one. */
24
+ lastClosure?(): {
25
+ at: number;
26
+ reason: string;
27
+ } | undefined;
28
+ }
29
+ export interface ChatDriveCloud {
30
+ /** The platform and key a tab's own project is linked with, or undefined when it is not. */
31
+ sessionCloud: (sessionId: string) => Promise<{
32
+ url: string;
33
+ apiKey: string;
34
+ } | undefined>;
35
+ version: string;
36
+ /** Folders holding runs the platform never got (the sync daemon's last count). Absolute roots. */
37
+ unsynced?: () => readonly {
38
+ root: string;
39
+ runs: number;
40
+ linked: boolean;
41
+ }[];
42
+ }
43
+ export declare function startChatDrives(deps: ToolDeps, sessions: ChatDriveSessions, fs: FileSystemPort, cloud: ChatDriveCloud, log: (line: string) => void): {
44
+ stop: () => void;
45
+ };
46
+ /**
47
+ * The panel's Harness controls. The switch is the platform's autonomous mode, unchanged. Run Harness
48
+ * and Stop drive. A run asks the platform for the drive's grant, then starts it
49
+ * through the same explore an agent calls (counted, recorded, polled the same way); its lines and
50
+ * steps reach the HUD log as the drive narrates them. A refused grant says why, and where to start
51
+ * a trial when it wants a card.
52
+ */
53
+ export declare function hudDrive(deps: ToolDeps, sessionId: string,
54
+ /** The panel's control, as the bridge narrowed it (`harness-request.ts`). */
55
+ request: {
56
+ kind: typeof HumanControlKind.HARNESS;
57
+ enabled: boolean;
58
+ } | {
59
+ kind: typeof HumanControlKind.HARNESS_RUN;
60
+ persona?: string;
61
+ } | {
62
+ kind: typeof HumanControlKind.HARNESS_STOP;
63
+ },
64
+ /** The autonomous switch: written through to the platform, which the daemon owns. */
65
+ applySwitch: (enabled: boolean) => void, grant?: (platform: {
66
+ url: string;
67
+ apiKey: string;
68
+ }) => Promise<FreeDrive>): Promise<void>;
69
+ /**
70
+ * The link a panel sign-in makes once it lands: the tab's project, never a page that did not say
71
+ * which project it is (that would bind a hash-named project nothing here reads).
72
+ */
73
+ export declare function projectLinkOnly(link: ((root: string) => Promise<number>) | undefined): ((root: string) => Promise<number>) | undefined;
74
+ /**
75
+ * The panel's Harness controls on a bridge: the switch writes through to the platform, so console
76
+ * and panel cannot disagree; Run and Stop drive, in the project of the tab that asked.
77
+ */
78
+ export declare function attachHudHarness(bridge: {
79
+ attachHarnessRequest(handler: (request: Parameters<typeof hudDrive>[2] | {
80
+ kind: typeof HumanControlKind.HARNESS_LINK;
81
+ }, session: {
82
+ id: string;
83
+ artifactRoot?: string | undefined;
84
+ }) => void): void;
85
+ }, daemon: {
86
+ /** Read when a control arrives: the daemon builds its deps after it wires the bridge. */
87
+ deps: () => ToolDeps;
88
+ /** Where a tab with no project of its own drives. */
89
+ root: string;
90
+ /** Repaint every panel, so a running drive shows its Stop button and a finished one hides it. */
91
+ repaint: () => void;
92
+ }, applySwitch: (root: string, on: boolean) => void,
93
+ /** Link this project: what `reticle connect` does from that folder. Absent: the button says so. */
94
+ link?: (root: string) => Promise<number>): void;
95
+ /**
96
+ * The `unsynced` field of a report. Sent empty too, once this daemon has counted: the platform reads
97
+ * an absent list as "no news" and kept a "never sent" banner for runs that had long been sent.
98
+ */
99
+ export declare function unsyncedReport(unsynced: readonly LinkUnsyncedRoot[] | undefined, home: string): {
100
+ unsynced?: LinkUnsyncedRoot[];
101
+ };