@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,214 @@
1
+ import { existsSync, readdirSync, readFileSync, statSync } from 'node:fs';
2
+ import { keyRefusalAtLastSync } from '../../memory/project/sync-status.js';
3
+ import { join } from 'node:path';
4
+ import { ReticleDir, ReticleEnv } from '@reticlehq/core';
5
+ import { DRIVE_RECORD_SUFFIX } from '../../memory/project/dir/reticle-dir.js';
6
+ import { callingAttachId } from '../../hooks/coding-agents.js';
7
+ /**
8
+ * The one thing the agent should do next, on the result of the call it just made.
9
+ *
10
+ * Every client reads tool results; few read a briefing twice, and none keep a skill in mind across a
11
+ * long session. So what an agent must not forget (record what the user asked, hand the tab back,
12
+ * notice when its runs are not reaching the platform) is said where
13
+ * the agent is already looking, one short line, on the moment it applies. It is placed first in the
14
+ * result, because a model that truncates a long result keeps its beginning.
15
+ *
16
+ * The daemon syncs runs itself, whichever agent drove them; nothing here asks an agent to push.
17
+ * It only says when the sync needs a person (a refusal, a failure, a project never connected).
18
+ */
19
+ /** How long a declared request counts as "the current task". Matches the run store's window. */
20
+ const REQUEST_FRESH_MS = 6 * 60 * 60 * 1000;
21
+ /** A reminder that is not about a verdict is repeated at most this often, per project. */
22
+ const QUIET_CALLS = 10;
23
+ /**
24
+ * How often the agent is asked to record the request before the other lines get their turn. In
25
+ * every recorded run the agent ignored it, and because it always won, no agent was ever told its
26
+ * runs were not reaching the platform.
27
+ */
28
+ const DECLARE_ASKS = 2;
29
+ /** A run file this much newer than the last push, and this old, was not sent. */
30
+ const UNSENT_AFTER_MS = 2 * 60 * 1000;
31
+ export const NextText = {
32
+ DECLARE: 'Record what the user asked, once per task, verbatim: reticle_run { tool: "reticle_intent", args: { action: "declare", request: "<their words>" } }. It travels with every run.',
33
+ SYNC_PROBLEM: (why) => `Runs are not reaching the platform (${why}). reticle_run { tool: "reticle_project", args: { push: true } } retries and reports why.`,
34
+ FINISH_LINKED: 'Done driving? reticle_session { action: "yield" } hands the tab back; this run syncs to the platform on its own.',
35
+ FINISH: 'Done driving? reticle_session { action: "yield" } hands the tab back.',
36
+ /**
37
+ * The evidence of this app is landing outside any project, so nothing will send it. A second
38
+ * checkout's runs and flows went to `~/.reticle/unmatched/<id>` and the agent was told nothing.
39
+ */
40
+ UNMATCHED: (root, contenders, serving) => {
41
+ const app = serving === undefined ? "This app's" : `The app served from ${serving}: its`;
42
+ const lead = `${app} runs and flows are going to ${root}, not your project, so they will not reach the dashboard: `;
43
+ if (0 === contenders.length) {
44
+ return `${lead}no folder on this machine declares its project. Run \`reticle init\` in the app's folder.`;
45
+ }
46
+ return (`${lead}${String(contenders.length)} folders claim its project id (${contenders.join(', ')}). ` +
47
+ 'Serve the app from the checkout that owns the id, or give this one its own id with ' +
48
+ "`reticle init` in it — that rewrites its committed .reticle.json, so keep the change on this checkout's branch.");
49
+ },
50
+ REPLAY: (flows) => `This app has ${String(flows)} saved flow(s). Replay them before driving anything by hand: reticle_verify { action: "flows" } re-verifies them with no model.`,
51
+ };
52
+ /**
53
+ * Keyed by the agent session AND the folder: what is "said once" is said once to each agent. The
54
+ * daemon outlives agent sessions, and keyed by folder alone a fresh session in a second checkout
55
+ * was diverted into ~/.reticle/unmatched with nothing said, because an earlier one had been told.
56
+ */
57
+ const roots = new Map();
58
+ /** Tests only. */
59
+ export function resetNextStep() {
60
+ roots.clear();
61
+ }
62
+ function readJson(path) {
63
+ try {
64
+ const parsed = JSON.parse(readFileSync(path, 'utf8'));
65
+ return 'object' === typeof parsed && null !== parsed
66
+ ? parsed
67
+ : undefined;
68
+ }
69
+ catch {
70
+ return undefined;
71
+ }
72
+ }
73
+ /** Declared within the window, read from the file's own stamp (or its age when it has none). */
74
+ function requestDeclared(root, now) {
75
+ const path = join(root, ReticleDir.REQUEST_FILE);
76
+ if (!existsSync(path))
77
+ return false;
78
+ const at = readJson(path)?.['at'];
79
+ const when = 'number' === typeof at ? at : statSync(path).mtimeMs;
80
+ return now - when < REQUEST_FRESH_MS;
81
+ }
82
+ /**
83
+ * Run files THIS agent session wrote (at or after `since`) after the last push, and old enough that a
84
+ * sync cycle should have sent them. Another session's are not this one's to be told about.
85
+ */
86
+ function unsentRuns(root, lastPushAt, now, since) {
87
+ try {
88
+ const dir = join(root, ReticleDir.RUNS_SUBDIR);
89
+ return readdirSync(dir).filter((name) => {
90
+ // A drive's own record is not a run and never syncs.
91
+ if (name.endsWith(DRIVE_RECORD_SUFFIX))
92
+ return false;
93
+ const at = statSync(join(dir, name)).mtimeMs;
94
+ return at >= since && at > lastPushAt + UNSENT_AFTER_MS && now - at > UNSENT_AFTER_MS;
95
+ }).length;
96
+ }
97
+ catch {
98
+ return 0;
99
+ }
100
+ }
101
+ /** Whether this agent session wrote a run or a flow here since it began. */
102
+ function wroteSince(root, since) {
103
+ for (const sub of [ReticleDir.RUNS_SUBDIR, ReticleDir.FLOWS_SUBDIR]) {
104
+ try {
105
+ const dir = join(root, sub);
106
+ if (readdirSync(dir).some((name) => statSync(join(dir, name)).mtimeMs >= since))
107
+ return true;
108
+ }
109
+ catch {
110
+ /* nothing written there */
111
+ }
112
+ }
113
+ return false;
114
+ }
115
+ /**
116
+ * Why sync needs a person, from the sync's own bookkeeping; undefined when it is fine.
117
+ *
118
+ * Runs that were written and never sent count too. A project the sync loop never looked at has no
119
+ * error and no refusal, which is how a whole day of runs stayed on one machine with every check
120
+ * reporting fine.
121
+ */
122
+ function syncProblem(root, now, since) {
123
+ const state = readJson(join(root, ReticleDir.CLOUD_STATE_FILE));
124
+ const pushed = state?.['lastPushAt'];
125
+ const unsent = unsentRuns(root, 'number' === typeof pushed ? pushed : 0, now, since);
126
+ if (0 < unsent)
127
+ return `${String(unsent)} run(s) written here were never sent`;
128
+ if (state === undefined)
129
+ return undefined;
130
+ const error = state['lastError'];
131
+ // A refused key read as the platform's "valid API key required" to a member removed from the
132
+ // workspace, whose key was set: it was refused, which is what they have to act on — and it holds
133
+ // back this session's work too, so it is said whoever wrote what.
134
+ const refusal = keyRefusalAtLastSync(root);
135
+ if (refusal !== undefined)
136
+ return refusal;
137
+ // Anything else the project's sync reports is said to a session whose own work it holds back: a
138
+ // flow another session saved was named on every result of one that had written nothing.
139
+ if (!wroteSince(root, since))
140
+ return undefined;
141
+ if ('string' === typeof error && 0 < error.length)
142
+ return error.slice(0, 120);
143
+ const refused = state['refusedRuns'];
144
+ const count = 'object' === typeof refused && null !== refused ? Object.keys(refused).length : 0;
145
+ return 0 < count ? `${String(count)} run(s) refused` : undefined;
146
+ }
147
+ /** Saved flow files under `flows/`, one level of project folders deep. */
148
+ function savedFlows(dir) {
149
+ try {
150
+ return readdirSync(dir, { withFileTypes: true }).reduce((n, entry) => n +
151
+ (entry.isDirectory()
152
+ ? readdirSync(join(dir, entry.name)).filter((f) => f.endsWith('.json')).length
153
+ : entry.name.endsWith('.json')
154
+ ? 1
155
+ : 0), 0);
156
+ }
157
+ catch {
158
+ return 0;
159
+ }
160
+ }
161
+ /** The line, or undefined when there is nothing the agent should be told right now. */
162
+ export function nextStep(input) {
163
+ const { root } = input;
164
+ if (root === undefined)
165
+ return undefined;
166
+ const key = `${callingAttachId() ?? ''}\u0000${root}`;
167
+ const state = roots.get(key) ?? {
168
+ calls: 0,
169
+ lastQuietAt: Number.NEGATIVE_INFINITY,
170
+ declareAsks: 0,
171
+ replayTold: false,
172
+ since: input.now,
173
+ };
174
+ roots.set(key, state);
175
+ state.calls += 1;
176
+ const linked = existsSync(join(root, ReticleDir.CLOUD_LINK_FILE));
177
+ // A key in the environment syncs too, so its runs not arriving is just as much a problem.
178
+ const sends = linked || 0 < (process.env[ReticleEnv.API_KEY] ?? '').length;
179
+ const quietDue = state.calls - state.lastQuietAt >= QUIET_CALLS;
180
+ // Before anything else, once per folder: everything else said here assumes the work is landing
181
+ // in the project.
182
+ const unmatched = input.unmatched;
183
+ if (unmatched !== undefined && unmatched.root !== state.unmatchedTold) {
184
+ state.unmatchedTold = unmatched.root;
185
+ return NextText.UNMATCHED(unmatched.root, unmatched.contenders, unmatched.serving);
186
+ }
187
+ // Measured on a whole-app drive: an agent re-drove everything by hand while saved flows sat
188
+ // unreplayed, though the skill says to replay first. Said on the first call, where it is in time.
189
+ if (!state.replayTold && !input.tool.endsWith('verify')) {
190
+ state.replayTold = true;
191
+ const saved = savedFlows(join(root, ReticleDir.FLOWS_SUBDIR));
192
+ if (0 < saved)
193
+ return NextText.REPLAY(saved);
194
+ }
195
+ const problem = sends ? syncProblem(root, input.now, state.since) : undefined;
196
+ if (problem !== undefined && problem !== state.problemTold && (input.verdict || quietDue)) {
197
+ state.lastQuietAt = state.calls;
198
+ state.problemTold = problem;
199
+ return NextText.SYNC_PROBLEM(problem);
200
+ }
201
+ // Not on the declare call itself, which is the answer to this line.
202
+ if (!input.tool.endsWith('intent') &&
203
+ state.declareAsks < DECLARE_ASKS &&
204
+ !requestDeclared(root, input.now) &&
205
+ (input.verdict || quietDue)) {
206
+ state.lastQuietAt = state.calls;
207
+ state.declareAsks += 1;
208
+ return NextText.DECLARE;
209
+ }
210
+ if (!input.verdict)
211
+ return undefined;
212
+ // How to connect is the agent nudge's to say, once per session (`platform-moment.ts`).
213
+ return sends ? NextText.FINISH_LINKED : NextText.FINISH;
214
+ }
@@ -2,6 +2,7 @@
2
2
  * Observe / wait / assert tools — reticle_observe, reticle_wait_for, reticle_assert, reticle_network,
3
3
  * reticle_console, reticle_animations. Split out of tools.ts; assembled back via...OBSERVE_TOOLS.
4
4
  */
5
+ import { checkWords, runIdOfCall } from '../../judgement/runs/drive-run.js';
5
6
  import { noteEmptyRead } from './gaps/observed-nothing.js';
6
7
  import { z } from 'zod';
7
8
  import { aliasParam } from './args/alias-args.js';
@@ -159,8 +160,11 @@ export const OBSERVE_TOOLS = [
159
160
  // Output budget: cap to the most recent N (no silent caps — droppedOldest is surfaced in cost).
160
161
  const { events: budgeted, droppedOldest } = applyEventBudget(filtered, asNumber(args['max_events']) ?? DEFAULT_OBSERVE_EVENT_LIMIT);
161
162
  const report = buildReactionReport(budgeted, windowMs);
162
- // Run over the FILTERED-but-unbudgeted window: a contradiction must not vanish because the
163
- // timeline was capped for tokens. Detection is cheap; the events are already in hand.
163
+ // Run over the WHOLE window: neither unfiltered nor unbudgeted is a display choice. A contradiction
164
+ // must not vanish because the timeline was capped for tokens, and it must not APPEAR because a
165
+ // filter removed its counter-evidence: `filters: ["route"]` dropped the DOM events proving a
166
+ // destination rendered, and the call reported `route-rendered-nothing` the unfiltered call did
167
+ // not (#1359). Detection is cheap; the events are already in hand.
164
168
  // The act that opened this window is not in `args` — observe is a separate call — so its action
165
169
  // and in-target mutation count are read back off the session. Without them the "this click did
166
170
  // nothing" check is unreachable on the ordinary act-then-observe flow, which is most of them.
@@ -169,7 +173,7 @@ export const OBSERVE_TOOLS = [
169
173
  // never asked about.
170
174
  const actCursor = session.lastAct.cursor();
171
175
  const judgingTheAct = actCursor !== undefined && actCursor >= since;
172
- const contradictions = findContradictions(filtered, {
176
+ const contradictions = findContradictions(events, {
173
177
  currentDocumentId: session.currentDocumentId,
174
178
  currentEditEpoch: session.currentEditEpoch,
175
179
  appOrigin: session.url,
@@ -208,6 +212,12 @@ export const OBSERVE_TOOLS = [
208
212
  .number()
209
213
  .optional()
210
214
  .describe('Present when this call stopped at the per-call limit before the predicate was seen. Call again with timeout_ms set to this, the same predicate and the same since, to keep waiting.'),
215
+ verified: z
216
+ .string()
217
+ .optional()
218
+ .describe('THE field to gate on, graded as reticle_assert grades it: "yes" | "no" | "unknown".'),
219
+ verifiedReason: z.string().optional().describe('The deciding clause, as one code.'),
220
+ because: z.string().optional().describe('One sentence naming the deciding evidence.'),
211
221
  pass: z.boolean(),
212
222
  evidence: z.unknown().optional(),
213
223
  failureReason: z.string().optional(),
@@ -258,7 +268,7 @@ export const OBSERVE_TOOLS = [
258
268
  if (bodyRefusal !== undefined)
259
269
  throw new Error(bodyRefusal);
260
270
  // Honesty: explicit since wins; else default to the last act's cursor; else the whole buffer.
261
- let since = asNumber(args['since']) ?? session.lastAct.cursor() ?? 0;
271
+ const since = asNumber(args['since']) ?? session.lastAct.cursor() ?? 0;
262
272
  // See the note on the assert handler below: a wait cut off by a full-document navigation is
263
273
  // followed to the document that took over, rather than graded as a lost observation there.
264
274
  const predicateStarted = session.elapsed();
@@ -270,20 +280,37 @@ export const OBSERVE_TOOLS = [
270
280
  predicateStarted,
271
281
  reevaluate: (next, budget) => waitForPredicate(next, predicate, budget, 0),
272
282
  });
273
- if (followed.followed)
274
- since = 0;
275
283
  session = followed.session;
276
284
  const verdict = followed.verdict;
285
+ // Stopped at the per-call limit before the predicate was seen: "not yet", which is not a "no".
286
+ // Grading it read as a failure of the app while the caller is told to keep waiting (#1119).
287
+ const resume = resumeAfter(requestedMs, waitBudget, verdict);
288
+ if (resume !== undefined && !verdict.pass) {
289
+ return withControl(session, {
290
+ ...annotateStarvedFailure(session, verdict),
291
+ ...(followed.followed ? { sessionId: session.id } : {}),
292
+ resume_ms: resume,
293
+ ...healthEnvelope(session),
294
+ ...bufferEnvelope(session),
295
+ });
296
+ }
297
+ // The verdict, graded as `reticle_assert` grades it. This is `reticle_assert { action: "wait" }`,
298
+ // and it answered `pass` with no `verified` — the one field an agent is told to gate on — while
299
+ // `action: "now"` carried it. Not journaled: a wait settles the page; the proof is the assert.
300
+ const { decision } = await assertVerdict(session, predicate, verdict.pass, verdict.evidence, followed.followed ? 0 : since, verdict.inconclusive, verdict.observationLost);
277
301
  // match reticle_assert — wrap with control + session health (throttle matters most while blocking)
278
302
  // and the buffer envelope, so a verdict reached over an evicted window says so.
279
303
  return withControl(session, {
304
+ verified: decision['verified'],
305
+ verifiedReason: decision['verifiedReason'],
306
+ because: decision['because'],
280
307
  // #537's starved-wait note wraps the verdict (it RETURNS the verdict), so it stands where
281
308
  // `...verdict` did. The source line is #533's `assertionSource`, which superseded
282
309
  // `lastActSourceOnFailure` — an assert used to be blamed on the previous act's file:line.
283
310
  ...annotateStarvedFailure(session, verdict),
284
311
  ...assertionSource(session, predicate, verdict),
285
312
  ...(followed.followed ? { sessionId: session.id } : {}),
286
- ...((resume) => (resume === undefined ? {} : { resume_ms: resume }))(resumeAfter(requestedMs, waitBudget, verdict)),
313
+ ...(resume === undefined ? {} : { resume_ms: resume }),
287
314
  ...healthEnvelope(session),
288
315
  ...bufferEnvelope(session),
289
316
  });
@@ -316,6 +343,10 @@ export const OBSERVE_TOOLS = [
316
343
  ...sessionIdShape,
317
344
  },
318
345
  outputSchema: {
346
+ // Returned on every graded answer and undeclared, so a schema-strict client dropped the one
347
+ // field an agent is told to gate on (#1119).
348
+ verified: z.string().optional().describe('THE field to gate on: "yes" | "no" | "unknown".'),
349
+ verifiedReason: z.string().optional().describe('The deciding clause, as one code.'),
319
350
  pass: z.boolean(),
320
351
  evidence: z.unknown().optional(),
321
352
  failureReason: z.string().optional(),
@@ -433,6 +464,8 @@ export const OBSERVE_TOOLS = [
433
464
  verdictId: inlineVerdictId(ReticleTool.ASSERT, deps.now()),
434
465
  grade: gradeOfPredicate(predicate),
435
466
  at: deps.now(),
467
+ // The run this check lands in, so the platform links proof and run by id, not by time.
468
+ runId: runIdOfCall(session.id),
436
469
  },
437
470
  /*
438
471
  * An assertion has no element of its own — it observes, it does not act. The file it names
@@ -446,13 +479,16 @@ export const OBSERVE_TOOLS = [
446
479
  // in the response lives only in the agent's context window, which is the copy a compaction
447
480
  // destroys — see runs/run-context.ts. Recorded WITHOUT an attribution window: this tool drives
448
481
  // nothing, so no event it observed was caused by it.
449
- session.recordAction(ReticleTool.ASSERT, asRecord(args), verdictEffect);
482
+ session.recordAction(ReticleTool.ASSERT, asRecord(args), {
483
+ ...verdictEffect,
484
+ ...checkWords(verdict),
485
+ });
450
486
  // A passing check over the default window (since the last act) is proof of that act, so it
451
487
  // joins that step in the recording — otherwise "act, then assert" saves a bare click. An
452
488
  // explicit `since` may reach back past the last step, where replay would not find it. The
453
489
  // store itself refuses when a navigation came after that step: see RecordingStore.markNavigated.
454
490
  if (Verified.YES === decision['verified'] && args['since'] === undefined) {
455
- captureAssertion(deps.recordings, predicate);
491
+ captureAssertion(deps.recordings, predicate, session.id);
456
492
  }
457
493
  return withControl(session, {
458
494
  ...decision,
@@ -0,0 +1,72 @@
1
+ import { AgentNudgeKind } from '@reticlehq/core';
2
+ import { type InstrumentedTab } from '../../portal/session/recorded-gaps.js';
3
+ import type { ToolDeps } from './tool-kit.js';
4
+ /** Verified runs kept only on this machine before the platform is worth a sentence. */
5
+ export declare const LOCAL_RUNS_MOMENT = 5;
6
+ /** A `.reticle` this large is history worth keeping somewhere other than one laptop. */
7
+ export declare const LARGE_RETICLE_BYTES: number;
8
+ export declare const CONNECT = "`npx @reticlehq/server connect`";
9
+ export declare function takePlatformMoment(deps: Pick<ToolDeps, 'fs' | 'linkedCloud'> & {
10
+ now?: () => number;
11
+ }, raw: Record<string, unknown>,
12
+ /** The `.reticle` of the project the verdict was about — the session's, not the daemon's. */
13
+ rootOf: () => string): Promise<string | undefined>;
14
+ /** Tests only. */
15
+ export declare function resetPlatformMoments(): void;
16
+ /**
17
+ * Hand-driven actions before the agent is told to hand journeys to the Harness. One: with the
18
+ * Harness switched on, the person has said they want journeys driven by it, so the agent hears it on
19
+ * its first hand-driven step rather than after eight.
20
+ */
21
+ export declare const LONG_JOURNEY_ACTS = 1;
22
+ export declare const NudgeText: {
23
+ readonly CONNECT: string;
24
+ readonly closeGaps: (reason: string) => string;
25
+ readonly switchOn: (percent: number) => string;
26
+ readonly explore: () => string;
27
+ };
28
+ export interface NudgeInput {
29
+ /** The agent's connection: a session. Absent means not an agent's own call, and nothing is said. */
30
+ session: string | undefined;
31
+ /** The project the call was about. */
32
+ root: string | undefined;
33
+ tool: string;
34
+ /** Whether this result carries a verdict. */
35
+ verdict: boolean;
36
+ /** Whether this result failed: an error, a refusal, or a verdict that came back no. */
37
+ failed: boolean;
38
+ /** Whether the project is linked to the platform. Read only when a kind needs it. */
39
+ linked: () => Promise<boolean>;
40
+ /** The driven tab's Harness gate, when one is resolved. */
41
+ gate: {
42
+ percent: number;
43
+ unlocked: boolean;
44
+ reason?: string;
45
+ } | undefined;
46
+ /** Whether the Harness is switched on, when the platform has said. Read only when needed. */
47
+ harnessOn: () => boolean | undefined;
48
+ /** Whether this call drives the page by hand. */
49
+ acted: boolean;
50
+ }
51
+ /** Tests only. */
52
+ export declare function resetNudges(): void;
53
+ /** The advisory for this result, and its kind, or undefined. Never throws. */
54
+ export declare function takeNudge(input: NudgeInput): Promise<{
55
+ kind: AgentNudgeKind;
56
+ text: string;
57
+ } | undefined>;
58
+ /** A result that failed: thrown or returned as an error, refused, or a verdict that said no. */
59
+ export declare function resultFailed(raw: Record<string, unknown>, isError: boolean): boolean;
60
+ /**
61
+ * The advisory for one agent call, wired to this daemon: the tab's gate, the project's link and the
62
+ * Harness switch as the platform last said it. Counted when shown. Never throws.
63
+ */
64
+ export declare function agentNudge(input: {
65
+ deps: Pick<ToolDeps, 'attachId' | 'linkedCloud'>;
66
+ tool: string;
67
+ raw: Record<string, unknown>;
68
+ isError: boolean;
69
+ tab: InstrumentedTab | undefined;
70
+ root: string | undefined;
71
+ harnessOn: () => boolean | undefined;
72
+ }): Promise<string | undefined>;