@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
@@ -19,6 +19,13 @@
19
19
  * never quietly start forwarding free text.
20
20
  */
21
21
  export declare const OTHER_VALUE = "other";
22
+ /**
23
+ * Add values WE define to a parameter's allow-list. The merged tools call this for their `action`
24
+ * values (`reticle_look`'s `page` / `find` / ...): those are keys of a plan in this repository, not
25
+ * input, and without them every grouped call reported `action:other`. Only for a parameter already
26
+ * listed above, so this can widen an enum and never start forwarding a free-text parameter.
27
+ */
28
+ export declare function allowParamValues(name: string, values: Iterable<string>): void;
22
29
  /**
23
30
  * The reportable form of one parameter: `name` on its own, or `name:value` when the parameter is a
24
31
  * known enum. Never the raw value of anything else.
@@ -41,6 +41,19 @@ const SAFE_ENUM_PARAMS = new Map([
41
41
  ['level', new Set(['error', 'warn', 'info', 'log', 'debug'])],
42
42
  ]);
43
43
  export const OTHER_VALUE = 'other';
44
+ /**
45
+ * Add values WE define to a parameter's allow-list. The merged tools call this for their `action`
46
+ * values (`reticle_look`'s `page` / `find` / ...): those are keys of a plan in this repository, not
47
+ * input, and without them every grouped call reported `action:other`. Only for a parameter already
48
+ * listed above, so this can widen an enum and never start forwarding a free-text parameter.
49
+ */
50
+ export function allowParamValues(name, values) {
51
+ const allowed = SAFE_ENUM_PARAMS.get(name);
52
+ if (allowed === undefined)
53
+ return;
54
+ for (const value of values)
55
+ allowed.add(value);
56
+ }
44
57
  /**
45
58
  * The reportable form of one parameter: `name` on its own, or `name:value` when the parameter is a
46
59
  * known enum. Never the raw value of anything else.
@@ -82,11 +95,83 @@ export function describeToolParams(args) {
82
95
  export function describeCliFlags(argv) {
83
96
  const flags = new Set();
84
97
  for (const arg of argv) {
98
+ // A bare `--` ends the options: everything after it is passed through to something else.
99
+ if (END_OF_OPTIONS === arg)
100
+ break;
85
101
  if (!arg.startsWith('--'))
86
102
  continue;
87
103
  // `--port=9000` — split so the NAME is reported and the value is discarded with everything else.
88
104
  const name = arg.split('=')[0] ?? arg;
89
- flags.add(name);
105
+ flags.add(KNOWN_CLI_FLAGS.has(name) ? name : OTHER_VALUE);
90
106
  }
91
107
  return [...flags].sort();
92
108
  }
109
+ const END_OF_OPTIONS = '--';
110
+ /**
111
+ * The flags the CLI defines. Anything else is reported as `other`: a flag NAME the user typed can
112
+ * carry their own word as easily as a value can. Hand-listed because the CLI parses its flags in
113
+ * many places with no shared table; a flag missing here reports `other`, which loses a count and
114
+ * leaks nothing.
115
+ */
116
+ const KNOWN_CLI_FLAGS = new Set([
117
+ '--accept-coverage',
118
+ '--agent',
119
+ '--app',
120
+ '--bug',
121
+ '--capture-bodies',
122
+ '--confirm-dangerous',
123
+ '--dir',
124
+ '--drive',
125
+ '--drive-model',
126
+ '--dry-run',
127
+ '--email',
128
+ '--env',
129
+ '--expect',
130
+ '--expect-file',
131
+ '--explore',
132
+ '--files-only',
133
+ '--fix',
134
+ '--flow',
135
+ '--force',
136
+ '--headed',
137
+ '--headless',
138
+ '--help',
139
+ '--hook',
140
+ '--hooks',
141
+ '--http',
142
+ '--http-port',
143
+ '--http-token',
144
+ '--install-secs',
145
+ '--json',
146
+ '--kind',
147
+ '--license',
148
+ '--move-history',
149
+ '--no-agents',
150
+ '--no-drive',
151
+ '--no-first-run',
152
+ '--no-install',
153
+ '--no-mcp',
154
+ '--no-open',
155
+ '--persona',
156
+ '--porcelain',
157
+ '--port',
158
+ '--project',
159
+ '--quiet',
160
+ '--rating',
161
+ '--relaunch',
162
+ '--results-json',
163
+ '--runtime-secs',
164
+ '--select',
165
+ '--session',
166
+ '--session-id',
167
+ '--since',
168
+ '--start',
169
+ '--storage-state',
170
+ '--subject',
171
+ '--timeout',
172
+ '--url',
173
+ '--version',
174
+ '--watch',
175
+ '--workspace',
176
+ '--yes',
177
+ ]);
@@ -2,13 +2,12 @@ import { AutomationHint } from '@reticlehq/core/telemetry';
2
2
  interface AutomationInput {
3
3
  env: NodeJS.ProcessEnv;
4
4
  fileExists: (path: string) => boolean;
5
- hasTty: boolean;
6
5
  }
7
6
  /**
8
7
  * The most specific signal that fires, or undefined.
9
8
  *
10
- * Ordered most specific first: a container inside a Codespace with no terminal is one fact about the
11
- * run, and sending the weakest of the three would waste the field. Omitted rather than sent as a
9
+ * Ordered most specific first: an agent sandbox runs in a container, and a container inside a
10
+ * Codespace is one fact about the run; sending the weaker signal would waste the field. Omitted rather than sent as a
12
11
  * "none" value, so its presence is itself the signal — the convention every other advisory field
13
12
  * here follows.
14
13
  */
@@ -23,6 +23,8 @@
23
23
  * - `npm_config_user_agent`. Says which package manager ran us, which every route shares.
24
24
  * - An absent `$DISPLAY`. Every Linux server, every ssh session, and a large share of genuine
25
25
  * developer machines trip it; it separates nothing.
26
+ * - No terminal on stdin/stdout. It was the third signal here, and every MCP stdio server has no
27
+ * terminal, so it fired on nearly every daemon a person's agent started and separated nothing.
26
28
  */
27
29
  import { existsSync } from 'node:fs';
28
30
  import { AutomationHint } from '@reticlehq/core/telemetry';
@@ -35,21 +37,47 @@ const HOSTED_WORKSPACE_ENV = [
35
37
  'CLOUD_SHELL',
36
38
  'REMOTE_CONTAINERS',
37
39
  ];
40
+ /**
41
+ * CI vendors' own variables, for the runners and self-hosted agents that do not set `CI`. Each is
42
+ * set by the runner itself; a person's shell does not carry them.
43
+ */
44
+ const CI_VENDOR_ENV = [
45
+ 'GITHUB_ACTIONS',
46
+ 'GITLAB_CI',
47
+ 'BUILDKITE',
48
+ 'CIRCLECI',
49
+ 'JENKINS_URL',
50
+ 'TF_BUILD',
51
+ 'TEAMCITY_VERSION',
52
+ 'BITBUCKET_BUILD_NUMBER',
53
+ 'CODEBUILD_BUILD_ID',
54
+ 'DRONE',
55
+ 'TRAVIS',
56
+ ];
57
+ /**
58
+ * Hosted coding-agent sandboxes that declare themselves to what they spawn. Only markers the agent
59
+ * sets on purpose for a REMOTE session: a local agent's own marker (`CLAUDECODE`) is a person at a
60
+ * laptop and belongs to `client`, not here.
61
+ */
62
+ const AGENT_SANDBOX_ENV = ['CLAUDE_CODE_REMOTE'];
63
+ const declared = (env, keys) => keys.some((k) => (env[k] ?? '') !== '' && 'false' !== env[k]);
38
64
  /**
39
65
  * The most specific signal that fires, or undefined.
40
66
  *
41
- * Ordered most specific first: a container inside a Codespace with no terminal is one fact about the
42
- * run, and sending the weakest of the three would waste the field. Omitted rather than sent as a
67
+ * Ordered most specific first: an agent sandbox runs in a container, and a container inside a
68
+ * Codespace is one fact about the run; sending the weaker signal would waste the field. Omitted rather than sent as a
43
69
  * "none" value, so its presence is itself the signal — the convention every other advisory field
44
70
  * here follows.
45
71
  */
46
72
  export function resolveAutomationHint(input) {
73
+ if (declared(input.env, AGENT_SANDBOX_ENV))
74
+ return AutomationHint.AGENT_SANDBOX;
75
+ if (declared(input.env, CI_VENDOR_ENV))
76
+ return AutomationHint.CI_RUNNER;
47
77
  if (CONTAINER_MARKERS.some((m) => input.fileExists(m)))
48
78
  return AutomationHint.CONTAINER;
49
- if (HOSTED_WORKSPACE_ENV.some((k) => (input.env[k] ?? '') !== ''))
79
+ if (declared(input.env, HOSTED_WORKSPACE_ENV))
50
80
  return AutomationHint.HOSTED_WORKSPACE;
51
- if (!input.hasTty)
52
- return AutomationHint.NO_TTY;
53
81
  return undefined;
54
82
  }
55
83
  /** The real reading, taken once per process. */
@@ -64,8 +92,5 @@ export function currentAutomationHint(env) {
64
92
  return false; // an unreadable root is not evidence of anything
65
93
  }
66
94
  },
67
- // Both ends, because a piped stdout alone is how `reticle status | jq` looks, and that is a
68
- // person typing.
69
- hasTty: true === process.stdout.isTTY || true === process.stdin.isTTY,
70
95
  });
71
96
  }
@@ -13,7 +13,8 @@ import { join } from 'node:path';
13
13
  /** Where the installer left its breadcrumbs. Same directory the telemetry id and opt-out live in. */
14
14
  const RETICLE_STATE_DIR = process.env['RETICLE_STATE_DIR'] ?? join(homedir(), '.reticle');
15
15
  import { describeCliFlags } from './argument-shape.js';
16
- import { resolveInstallSource } from './install-source.js';
16
+ import { rememberInstallSource, resolveInstallSource } from './install-source.js';
17
+ import { installPlatformLinkTelemetry } from './platform-linked.js';
17
18
  /**
18
19
  * Report that a person ran a `reticle` subcommand.
19
20
  *
@@ -53,7 +54,11 @@ export function reportCliRun(argv) {
53
54
  * second invocation finds nothing. A flag would have to live somewhere, and somewhere is another
54
55
  * file that can disagree with this one.
55
56
  */
57
+ // Every process that may link a project, the daemon included, reports it.
58
+ installPlatformLinkTelemetry();
56
59
  drainInstallTrace(RETICLE_STATE_DIR);
60
+ // Before anything reads it: a channel declared on THIS command outlives it.
61
+ rememberInstallSource(process.env, RETICLE_STATE_DIR);
57
62
  if (firstArg === DAEMON_INNER_COMMAND)
58
63
  return;
59
64
  const command = knownCommand(firstArg);
@@ -67,7 +72,7 @@ export function reportCliRun(argv) {
67
72
  detach: true,
68
73
  // WHICH published route brought this machine in. Self-declared by the channel, never inferred
69
74
  // — see install-source.ts for which of the four routes can actually carry the marker.
70
- installSource: resolveInstallSource(),
75
+ installSource: resolveInstallSource(process.env, RETICLE_STATE_DIR),
71
76
  });
72
77
  if (!isHumanCliCommand(command))
73
78
  return;
@@ -15,6 +15,7 @@ import { reticleStateHome } from '../command/daemon/daemon.js';
15
15
  import { startUpdateCheck, updateNudgeState } from '../command/update/update-nudge.js';
16
16
  import { markDaemonStart } from './mcp-connection.js';
17
17
  import { markInstrumentationClock } from './app-instrumented.js';
18
+ import { drainFeedbackOutbox } from './feedback.js';
18
19
  import { markStallClock, STALL_AFTER_MS, stallUptime } from '../portal/session/stall-clock.js';
19
20
  /**
20
21
  * Whether an app for this project has ever reached Reticle, read from the same durable memory the
@@ -91,6 +92,8 @@ export function installDaemonTelemetry(cwd, now = () => Date.now(),
91
92
  port) {
92
93
  const metrics = getSessionMetrics(now);
93
94
  void getTelemetry().emit(TelemetryEventKind.DAEMON_STARTED);
95
+ // Reports a past send could not deliver. Off the boot path, and never able to throw into it.
96
+ void drainFeedbackOutbox().catch(() => undefined);
94
97
  // Ask npm whether a newer Reticle exists, so the agent can tell the human. Nothing checked before
95
98
  // this, so a published fix was invisible until someone manually ran `reticle update`.
96
99
  startUpdateCheck(now);
@@ -1,4 +1,13 @@
1
- /** The skeleton of a message: variable parts blanked, whitespace collapsed, length bounded. */
1
+ /**
2
+ * What an error message may say on the wire, and it is ALLOW-listed: a sentence Reticle authors
3
+ * (sent as our own fixed label), else the bare Node error code or built-in class plus the
4
+ * fingerprint, else the fingerprint alone.
5
+ *
6
+ * It used to be the message with known-variable parts blanked, which is a deny-list, and a
7
+ * deny-list loses: a hostname after `getaddrinfo ENOTFOUND`, a Windows home directory with a space
8
+ * in it, a `~` path and a person's name in free text all reached the wire. Nothing written by
9
+ * anybody else survives this function, because it never echoes its input.
10
+ */
2
11
  export declare function errorSkeleton(message: string): string;
3
12
  /** A stable, opaque group key for an error message. Same defect ⇒ same key, on every machine. */
4
13
  export declare function fingerprintError(message: string): string;
@@ -40,8 +40,13 @@ const VARIABLE_PARTS = [
40
40
  // ── Then the grouping rules ──────────────────────────────────────────────────────────────────
41
41
  /"[^"]*"|'[^']*'|`[^`]*`/g, // quoted values — names, selectors, snippets
42
42
  /\b[a-z][a-z0-9+.-]*:\/\/\S+/gi, // URLs
43
+ // Windows paths run to the end of the message: a directory name may hold a space, and
44
+ // `C:\Users\Jane Doe\…` cut at the first space sent the surname.
45
+ /(?:\\\\\?\\)?[A-Za-z]:[\\/].*$/g,
46
+ /~[\\/]\S*/g, // home-relative paths
43
47
  /(?:\/[\w.-]+){2,}\/?/g, // POSIX-ish paths
44
- /[A-Za-z]:\\[^\s]*/g, // Windows paths
48
+ /\b\d{1,3}(?:\.\d{1,3}){3}(?::\d+)?\b/g, // IPv4 (+ port)
49
+ /\b[\w-]+(?:\.[\w-]+)+\b/g, // hostnames and other dotted names
45
50
  /\b[0-9a-f]{8,}\b/gi, // hex ids, hashes, uuids-without-dashes
46
51
  /\b[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\b/gi, // uuids
47
52
  /\d+/g, // any remaining number — ports, counts, timeouts
@@ -71,16 +76,67 @@ const VARIABLE_PARTS = [
71
76
  * for a reason unrelated to this one.
72
77
  */
73
78
  const MAX_SKELETON_INPUT = 1024;
74
- /** The skeleton of a message: variable parts blanked, whitespace collapsed, length bounded. */
75
- export function errorSkeleton(message) {
79
+ /** Variable parts blanked, whitespace collapsed, length bounded. The GROUPING basis; never sent. */
80
+ function redactedShape(message) {
76
81
  let skeleton = message.slice(0, MAX_SKELETON_INPUT);
77
82
  for (const pattern of VARIABLE_PARTS)
78
83
  skeleton = skeleton.replace(pattern, '*');
79
84
  return skeleton.replace(/\s+/g, ' ').trim().slice(0, 200);
80
85
  }
86
+ /**
87
+ * Sentences Reticle itself authors, and the fixed text sent for each. The OUTPUT is always the
88
+ * label, never the matched message, so text appended to one of ours cannot ride along.
89
+ */
90
+ const RETICLE_MESSAGES = [
91
+ { match: /^no browser session connected\b/i, label: 'no browser session connected' },
92
+ { match: /^multiple sessions connected\b/i, label: 'multiple sessions connected' },
93
+ { match: /^no connected session with id\b/i, label: 'no connected session with id *' },
94
+ { match: /^no baseline named\b/i, label: 'no baseline named *' },
95
+ { match: /^no (?:active|compiled) recording named\b/i, label: 'no recording named *' },
96
+ { match: /no longer resolves to an element/i, label: 'ref * no longer resolves to an element' },
97
+ { match: /^session disconnected$/i, label: 'session disconnected' },
98
+ { match: /^command '[^']*' timed out after\b/i, label: 'command * timed out after *' },
99
+ {
100
+ match: /did not resolve in current page/i,
101
+ label: 'flow step * did not resolve in current page',
102
+ },
103
+ {
104
+ match: /potentially destructive (?:\w+ )*(?:action|tool) blocked/i,
105
+ label: 'potentially destructive action blocked',
106
+ },
107
+ { match: /^pairing token is required\b/i, label: 'pairing token is required' },
108
+ { match: /no <option> with value/i, label: 'no <option> with value *' },
109
+ { match: /cannot hover without a real pointer/i, label: 'cannot hover without a real pointer' },
110
+ { match: /browser pool (?:unavailable|is shut down)/i, label: 'browser pool unavailable' },
111
+ { match: /Chromium is not installed/i, label: 'Chromium is not installed' },
112
+ { match: /^act failed$/i, label: 'act failed' },
113
+ ];
114
+ /** A Node error code (`ENOENT`, `ERR_INVALID_ARG_TYPE`): an identifier Node defines, never data. */
115
+ const NODE_ERROR_CODE = /\b(?:E[A-Z]{2,}|ERR_[A-Z_]{2,})\b/;
116
+ /** The built-in error classes. A custom class name is the app's own word, so it is not kept. */
117
+ const BUILTIN_ERROR_CLASS = /^(?:Error|TypeError|RangeError|SyntaxError|ReferenceError|EvalError|URIError|AggregateError|AbortError|TimeoutError|DOMException|ZodError)\b/;
118
+ /**
119
+ * What an error message may say on the wire, and it is ALLOW-listed: a sentence Reticle authors
120
+ * (sent as our own fixed label), else the bare Node error code or built-in class plus the
121
+ * fingerprint, else the fingerprint alone.
122
+ *
123
+ * It used to be the message with known-variable parts blanked, which is a deny-list, and a
124
+ * deny-list loses: a hostname after `getaddrinfo ENOTFOUND`, a Windows home directory with a space
125
+ * in it, a `~` path and a person's name in free text all reached the wire. Nothing written by
126
+ * anybody else survives this function, because it never echoes its input.
127
+ */
128
+ export function errorSkeleton(message) {
129
+ const head = message.slice(0, MAX_SKELETON_INPUT).trim();
130
+ for (const { match, label } of RETICLE_MESSAGES)
131
+ if (match.test(head))
132
+ return label;
133
+ const fingerprint = `#${fingerprintError(message)}`;
134
+ const code = BUILTIN_ERROR_CLASS.exec(head)?.[0] ?? NODE_ERROR_CODE.exec(head)?.[0];
135
+ return code === undefined ? fingerprint : `${code} ${fingerprint}`;
136
+ }
81
137
  /** A stable, opaque group key for an error message. Same defect ⇒ same key, on every machine. */
82
138
  export function fingerprintError(message) {
83
- return createHash('sha256').update(errorSkeleton(message)).digest('hex').slice(0, 12);
139
+ return createHash('sha256').update(redactedShape(message)).digest('hex').slice(0, 12);
84
140
  }
85
141
  /**
86
142
  * Frames from a stack trace that belong to RETICLE, reduced to `basename:line`.
@@ -121,7 +177,7 @@ export function fingerprintCrash(errorType, stack, message) {
121
177
  const frames = reticleFrames(stack);
122
178
  const basis = frames.length > 0
123
179
  ? `${errorType}|${frames.join('|')}`
124
- : `${errorType}|${errorSkeleton(message)}`;
180
+ : `${errorType}|${redactedShape(message)}`;
125
181
  return createHash('sha256').update(basis).digest('hex').slice(0, 12);
126
182
  }
127
183
  /** The error's constructor name (`TypeError`), or `Unknown` for a thrown non-Error. */
@@ -15,19 +15,6 @@ import { TelemetryAction } from '../command/cli/cli-parse.js';
15
15
  * show you the payload is asking for trust it has not earned.
16
16
  */
17
17
  export declare function handleFeedback(text: string, rating: number | undefined, bug: boolean, feedbackKind?: string, agent?: boolean): Promise<void>;
18
- /**
19
- * `reticle identify` — opt-in, and it shows the consent notice before it sends anything.
20
- *
21
- * Deliberately NOT interactive: a prompt that appears in the middle of someone's work is pressure,
22
- * and this is the one command where the user must be choosing freely. They type what they want to
23
- * share, or they never run it at all.
24
- */
25
- export declare function handleIdentify(parsed: {
26
- context?: string;
27
- company?: string;
28
- email?: string;
29
- forget: boolean;
30
- }): Promise<void>;
31
18
  /**
32
19
  * `reticle telemetry [status|enable|disable]` — the user-facing control for anonymous usage metrics.
33
20
  * `disable` persists a machine-wide opt-out (survives shells, unlike RETICLE_TELEMETRY=0); `status`
@@ -3,7 +3,6 @@ import { AGENT_FLAG, BUG_FLAG, FEEDBACK_KINDS, KIND_FLAG, RATING_FLAG, } from '.
3
3
  import { describeFeedbackPayload, submitFeedback } from './feedback.js';
4
4
  import { describeTelemetry, setTelemetryEnabled } from './telemetry.js';
5
5
  import { TelemetryAction } from '../command/cli/cli-parse.js';
6
- import { clearIdentity, IDENTIFY_NOTICE, readIdentity, saveIdentity, submitIdentity, UsageContextKind, } from './identify.js';
7
6
  /**
8
7
  * `reticle feedback [--rating 1-5] [--bug] "what happened"` — the feedback channel as a command.
9
8
  *
@@ -49,82 +48,6 @@ export async function handleFeedback(text, rating, bug, feedbackKind, agent = fa
49
48
  line(receipt.sent
50
49
  ? 'thanks your feedback is in. it genuinely changes what gets built next.'
51
50
  : `not sent ${receipt.reason ?? 'unknown reason'}`);
52
- for (const extra of identifyInvite(agent))
53
- line(extra);
54
- }
55
- /**
56
- * Offer a HUMAN a way to be replied to — printed after the receipt, never as a prompt.
57
- *
58
- * Feedback is anonymous by design and stays that way: the report has already been sent by the time
59
- * this prints, so nothing here gates or delays it. This is an offer, not a question.
60
- *
61
- * It routes through `reticle identify`, which already does consented identity properly — it prints
62
- * what it will send, states that identifying links this machine's prior anonymous history to that
63
- * identity, and has `--forget`. Capturing an address inline on `feedback_submitted` instead would
64
- * put PII on the anonymous event stream and break what `docs/telemetry.md` promises in public:
65
- * "no domain sniffing, no email inference" and "no personal data is collected".
66
- *
67
- * Only for humans (an agent has no email), and only when nobody has identified yet — so somebody
68
- * who declined is never asked twice.
69
- */
70
- function identifyInvite(agent) {
71
- if (agent)
72
- return [];
73
- try {
74
- if (readIdentity() !== undefined)
75
- return [];
76
- }
77
- catch {
78
- return []; // unreadable identity file: say nothing rather than risk asking twice
79
- }
80
- return [
81
- '',
82
- 'want a reply? `reticle identify --context <company|side_project|oss|learning> --email you@example.com`',
83
- ' optional, and it tells you exactly what it sends before sending it.',
84
- ];
85
- }
86
- /**
87
- * `reticle identify` — opt-in, and it shows the consent notice before it sends anything.
88
- *
89
- * Deliberately NOT interactive: a prompt that appears in the middle of someone's work is pressure,
90
- * and this is the one command where the user must be choosing freely. They type what they want to
91
- * share, or they never run it at all.
92
- */
93
- export async function handleIdentify(parsed) {
94
- const line = (s) => {
95
- process.stdout.write(`${s}\n`);
96
- };
97
- if (parsed.forget) {
98
- clearIdentity();
99
- line('forgotten the local identity file is deleted; nothing further is sent.');
100
- line(' to have what was already sent removed, email support@reticlehq.com');
101
- return;
102
- }
103
- const context = Object.values(UsageContextKind).find((k) => k === parsed.context);
104
- if (context === undefined) {
105
- const existing = readIdentity();
106
- if (existing !== undefined)
107
- line(`current ${JSON.stringify(existing)}`);
108
- line(`usage: reticle identify --context <${Object.values(UsageContextKind).join('|')}>`);
109
- line(' [--company "Acme"] [--email you@acme.com] [--forget]');
110
- line('');
111
- line(IDENTIFY_NOTICE);
112
- process.exitCode = existing === undefined ? 1 : 0;
113
- return;
114
- }
115
- const identity = {
116
- context,
117
- ...(parsed.company !== undefined ? { company: parsed.company } : {}),
118
- ...(parsed.email !== undefined ? { email: parsed.email } : {}),
119
- };
120
- line(IDENTIFY_NOTICE);
121
- line('');
122
- line(`sending ${JSON.stringify(identity)}`);
123
- saveIdentity(identity);
124
- const sent = await submitIdentity(identity);
125
- line(sent
126
- ? 'thanks saved and sent. we may reach out; `reticle identify --forget` undoes this.'
127
- : 'not sent telemetry is disabled on this machine, so it was saved locally only.');
128
51
  }
129
52
  /**
130
53
  * `reticle telemetry [status|enable|disable]` — the user-facing control for anonymous usage metrics.
@@ -22,6 +22,7 @@
22
22
  * disables it too, since it rides the same emitter.
23
23
  */
24
24
  import { type Feedback } from '@reticlehq/core/telemetry';
25
+ import { type Telemetry } from './telemetry.js';
25
26
  import { type SessionFacts } from './feedback-context.js';
26
27
  /** Kills the feedback channel ONLY — adoption counters keep flowing. */
27
28
  export declare const FEEDBACK_ENV = "RETICLE_FEEDBACK";
@@ -34,6 +35,12 @@ interface Redaction {
34
35
  }
35
36
  /** Strip credential/PII shapes and cap the length. Pure — the tests read like a spec of what leaks. */
36
37
  export declare function redactFeedbackText(input: string, max: number): Redaction;
38
+ /**
39
+ * A trace reduced to Reticle's own words, in order: which tools were called and what verdict each
40
+ * gave. The raw trace is the call/response trail, and the responses carry the page's text and what
41
+ * was typed into it, which no redaction rule can tell from prose. So nothing else is kept.
42
+ */
43
+ export declare function summarizeTrace(trace: string): string;
37
44
  /** True when the feedback channel is switched off on its own (the emitter's switches apply as well). */
38
45
  export declare function feedbackDisabled(env?: NodeJS.ProcessEnv): boolean;
39
46
  /** What the author supplies; the environment context is detected, never asked for. */
@@ -89,6 +96,12 @@ export declare function submitFeedback(input: FeedbackInput, opts?: {
89
96
  */
90
97
  background?: boolean;
91
98
  }): Promise<FeedbackReceipt>;
99
+ /**
100
+ * Retry what the outbox holds: the receipt for an undelivered report promises "It will be retried",
101
+ * and until this ran on daemon start nothing ever read the outbox back. Bounded, sequential, and
102
+ * best-effort; a report the endpoint does not accept stays queued. Returns how many were delivered.
103
+ */
104
+ export declare function drainFeedbackOutbox(telemetry?: Telemetry, home?: string): Promise<number>;
92
105
  /**
93
106
  * The receipt's context PLUS the fields the emitter stamps on every event regardless of kind — the
94
107
  * reticle version, the OS, and whether this is CI. They are the single most-asked question of any bug