@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
@@ -22,18 +22,77 @@
22
22
  * disables it too, since it rides the same emitter.
23
23
  */
24
24
  import { FeedbackSchema, FEEDBACK_TEXT_MAX, FEEDBACK_TRACE_MAX, FEEDBACK_FIELD_MAX, TelemetryEventKind, } from '@reticlehq/core/telemetry';
25
- import { platform } from 'node:os';
25
+ import { homedir, platform } from 'node:os';
26
26
  import { getTelemetry } from './telemetry.js';
27
27
  import { noteFeedbackUndelivered } from './feedback-delivery.js';
28
28
  import { isReticleSourceCheckout } from './dev-repo.js';
29
29
  import { saveFeedbackLocally } from './feedback-local.js';
30
30
  import { SERVER_VERSION } from '../command/version/identity/server-version.js';
31
31
  import { feedbackContext } from './feedback-context.js';
32
- import { markDelivered, outboxPath, queueFeedback } from './feedback-outbox.js';
32
+ import { markDelivered, outboxPath, queueFeedback, readOutbox } from './feedback-outbox.js';
33
33
  /** Kills the feedback channel ONLY — adoption counters keep flowing. */
34
34
  export const FEEDBACK_ENV = 'RETICLE_FEEDBACK';
35
35
  /** What replaces a redacted match. Visible on purpose: a reader must see that something was removed. */
36
36
  export const REDACTED = '[redacted]';
37
+ /** This machine, as a host: the app under test, never anybody's infrastructure. Port allowed. */
38
+ const LOCAL_HOST = /^(?:localhost|127\.\d{1,3}\.\d{1,3}\.\d{1,3}|0\.0\.0\.0|\[::1\])(?::\d+)?$/i;
39
+ /** A dotted name ending in one of these is a source file, not a host. */
40
+ const FILE_EXTENSIONS = new Set([
41
+ 'ts',
42
+ 'tsx',
43
+ 'mts',
44
+ 'cts',
45
+ 'js',
46
+ 'jsx',
47
+ 'mjs',
48
+ 'cjs',
49
+ 'json',
50
+ 'md',
51
+ 'mdx',
52
+ 'css',
53
+ 'scss',
54
+ 'html',
55
+ 'vue',
56
+ 'svelte',
57
+ 'astro',
58
+ 'py',
59
+ 'rs',
60
+ 'go',
61
+ 'yml',
62
+ 'yaml',
63
+ 'toml',
64
+ 'lock',
65
+ 'log',
66
+ 'txt',
67
+ 'map',
68
+ 'sh',
69
+ 'env',
70
+ 'd',
71
+ ]);
72
+ /** Top-level domains common enough that a one-dot name ending in one is a host. */
73
+ const COMMON_TLDS = new Set([
74
+ 'com',
75
+ 'net',
76
+ 'org',
77
+ 'io',
78
+ 'dev',
79
+ 'app',
80
+ 'co',
81
+ 'ai',
82
+ 'cloud',
83
+ 'internal',
84
+ 'local',
85
+ 'corp',
86
+ 'lan',
87
+ 'site',
88
+ 'tech',
89
+ 'xyz',
90
+ 'us',
91
+ 'uk',
92
+ 'de',
93
+ 'in',
94
+ 'eu',
95
+ ]);
37
96
  /**
38
97
  * The shapes that leak. Ordered most-specific first — a URL carrying inline credentials must be
39
98
  * caught as a URL before the bare-token rule chews the middle out of it.
@@ -45,6 +104,15 @@ export const REDACTED = '[redacted]';
45
104
  const REDACTIONS = [
46
105
  // scheme://user:pass@host — the credential is in the authority section.
47
106
  { pattern: /\b([a-z][a-z0-9+.-]*:\/\/)[^\s/@]+:[^\s/@]+@/gi, label: 'url-credentials' },
107
+ // A URL keeps its scheme, and its host and path ONLY when the host is this machine (the app under
108
+ // test, which is what a report is about). Any other host is a staging site, a customer's domain
109
+ // or an internal service, so it goes with its path. The query and fragment always go: that is
110
+ // where ids, emails and tokens ride.
111
+ {
112
+ pattern: /\b([a-z][a-z0-9+.-]*:\/\/)([^\s/?#"'<>`]+)([^\s?#"'<>`]*)(?:[?#][^\s"'<>`]*)?/gi,
113
+ label: 'url',
114
+ replace: (_m, scheme = '', host = '', path = '') => LOCAL_HOST.test(host) ? `${scheme}${host}${path}` : `${scheme}${REDACTED}`,
115
+ },
48
116
  { pattern: /\b[\w.%+-]+@[\w.-]+\.[a-z]{2,}\b/gi, label: 'email' },
49
117
  // Credential assignments: the KEY stays (it is the useful part), the VALUE goes. The auth SCHEME
50
118
  // (`Bearer`, `Basic`, `Token`) is consumed as part of the value, not left as the value — matching
@@ -59,24 +127,72 @@ const REDACTIONS = [
59
127
  { pattern: /\bAKIA[0-9A-Z]{16}\b/g, label: 'aws-key' },
60
128
  { pattern: /\bxox[baprs]-[A-Za-z0-9-]{10,}\b/g, label: 'slack-token' },
61
129
  { pattern: /\beyJ[A-Za-z0-9_-]{10,}\.[A-Za-z0-9_-]{10,}\.[A-Za-z0-9_-]{10,}\b/g, label: 'jwt' },
62
- // Home directories carry the account name, and a trace is full of them.
63
- { pattern: /(?:\/Users\/|\/home\/|[A-Z]:\\Users\\)[^\s/\\:"']+/g, label: 'home-path' },
130
+ // Home directories carry the account name, and a trace is full of them. The name runs to the next
131
+ // separator, quote or line end, NOT the next space: `C:\Users\Jane Doe\…` stopped at the space and
132
+ // sent the surname. Then the rest of the path goes with it. Over-redacting a sentence that follows
133
+ // a bare home directory is the price, and it is the right way round.
134
+ {
135
+ pattern: /(?:\\\\\?\\)?(?:\/Users\/|\/home\/|[A-Za-z]:[\\/]Users[\\/])[^\\/\r\n"'`]+(?:[\\/][^\s\\/"'`]*)*/g,
136
+ label: 'home-path',
137
+ },
138
+ // Any other absolute path: a Windows one (segments may hold spaces when a separator follows)...
139
+ {
140
+ pattern: /(?:\\\\\?\\)?\b[A-Za-z]:[\\/](?:[^\\/\r\n"'`<>|*?]+[\\/])*[^\s\\/"'`<>|*?]*/g,
141
+ label: 'path',
142
+ },
143
+ // ...a home-relative one, and a POSIX one of two or more segments. A path is a directory layout,
144
+ // and a directory layout names clients, projects and people.
145
+ { pattern: /~[\\/][^\s"'`]*/g, label: 'path' },
146
+ { pattern: /(?<![\w.~])\/[\w.@+-]+(?:\/[\w.@+-]+)+\/?/g, label: 'path' },
147
+ {
148
+ pattern: /\b\d{1,3}(?:\.\d{1,3}){3}\b/g,
149
+ label: 'ip',
150
+ replace: (ip) => (LOCAL_HOST.test(ip) ? ip : REDACTED),
151
+ },
152
+ // Hostnames: a staging site, an internal service, a customer's domain. A dotted name is a host when
153
+ // it has two or more dots or ends in a common top-level domain, and never when it ends in a source
154
+ // file's extension — `vite.config.ts` is what a report is about, `db.internal.acme.com` is not.
155
+ {
156
+ pattern: /\b(?:[a-z0-9-]+\.)+[a-z][a-z0-9-]*\b/gi,
157
+ label: 'hostname',
158
+ replace: (name) => {
159
+ const labels = name.toLowerCase().split('.');
160
+ const last = labels[labels.length - 1] ?? '';
161
+ if (FILE_EXTENSIONS.has(last))
162
+ return name;
163
+ return labels.length > 2 || COMMON_TLDS.has(last) ? REDACTED : name;
164
+ },
165
+ },
64
166
  ];
65
167
  /** Strip credential/PII shapes and cap the length. Pure — the tests read like a spec of what leaks. */
66
168
  export function redactFeedbackText(input, max) {
67
169
  const removed = new Set();
68
170
  let text = input;
69
- for (const { pattern, label } of REDACTIONS) {
70
- text = text.replace(pattern, (_match, ...groups) => {
71
- removed.add(label);
171
+ for (const { pattern, label, replace } of REDACTIONS) {
172
+ text = text.replace(pattern, (match, ...groups) => {
173
+ const captures = groups.map((g) => ('string' === typeof g ? g : ''));
72
174
  // A rule with a leading capture keeps it (the scheme, the `api_key=` key) so the reader still
73
175
  // sees WHAT was removed, not just that something was.
74
- const prefix = 'string' === typeof groups[0] ? groups[0] : '';
75
- return `${prefix}${REDACTED}`;
176
+ const out = replace === undefined ? `${captures[0] ?? ''}${REDACTED}` : replace(match, ...captures);
177
+ if (out !== match)
178
+ removed.add(label);
179
+ return out;
76
180
  });
77
181
  }
78
182
  return { text: text.slice(0, max), removed: [...removed] };
79
183
  }
184
+ /** Our words in a trace: tool names and the verdict vocabulary. Nothing else is kept. */
185
+ const TRACE_WORDS = /\breticle_[a-z_]+\b|\b(?:verified|yes|no|unknown|no-fault|ok|passed|failed|refused|error|timeout)\b/gi;
186
+ /**
187
+ * A trace reduced to Reticle's own words, in order: which tools were called and what verdict each
188
+ * gave. The raw trace is the call/response trail, and the responses carry the page's text and what
189
+ * was typed into it, which no redaction rule can tell from prose. So nothing else is kept.
190
+ */
191
+ export function summarizeTrace(trace) {
192
+ return (trace.match(TRACE_WORDS) ?? []).join(' ').slice(0, FEEDBACK_TRACE_MAX);
193
+ }
194
+ /** The removal label when a trace lost anything to `summarizeTrace`. */
195
+ const TRACE_VALUES_LABEL = 'trace-values';
80
196
  /** True when the feedback channel is switched off on its own (the emitter's switches apply as well). */
81
197
  export function feedbackDisabled(env = process.env) {
82
198
  const value = (env[FEEDBACK_ENV] ?? '').toLowerCase();
@@ -98,6 +214,7 @@ const AUTHOR_WRITTEN_FIELDS = new Set([
98
214
  'currentApproach',
99
215
  'model',
100
216
  ]);
217
+ const TRACE_FIELD = 'trace';
101
218
  /** Per-field caps; anything unlisted uses the standard field cap. */
102
219
  const FIELD_CAPS = {
103
220
  text: FEEDBACK_TEXT_MAX,
@@ -120,14 +237,7 @@ export async function submitFeedback(input, opts = {}) {
120
237
  // sk-…" would have shipped the token. Enumerating the fields to protect is the same class of
121
238
  // mistake as hand-copying an enum: correct on the day it is written, quietly wrong at the next
122
239
  // addition. Deriving the set means a sixth field is covered the moment it exists.
123
- const redactions = new Map();
124
- for (const [key, value] of Object.entries(input)) {
125
- if (typeof value !== 'string' || '' === value)
126
- continue;
127
- if (!AUTHOR_WRITTEN_FIELDS.has(key))
128
- continue;
129
- redactions.set(key, redactFeedbackText(value, FIELD_CAPS[key] ?? FEEDBACK_FIELD_MAX));
130
- }
240
+ const redactions = redactAuthorFields(input);
131
241
  const body = redactions.get('text') ?? { text: '', removed: [] };
132
242
  const redacted = [...new Set([...redactions.values()].flatMap((r) => r.removed))];
133
243
  if (feedbackDisabled(env)) {
@@ -231,6 +341,62 @@ export async function submitFeedback(input, opts = {}) {
231
341
  context,
232
342
  };
233
343
  }
344
+ /**
345
+ * Every author-written field of a report, redacted under the CURRENT rules. One function for the
346
+ * send and for the outbox drain, so a report queued under older, weaker rules is re-redacted before
347
+ * it finally goes.
348
+ */
349
+ function redactAuthorFields(input) {
350
+ const redactions = new Map();
351
+ for (const [key, value] of Object.entries(input)) {
352
+ if (typeof value !== 'string' || '' === value)
353
+ continue;
354
+ if (!AUTHOR_WRITTEN_FIELDS.has(key))
355
+ continue;
356
+ if (TRACE_FIELD === key) {
357
+ const summary = summarizeTrace(value);
358
+ redactions.set(key, {
359
+ text: summary,
360
+ removed: summary === value ? [] : [TRACE_VALUES_LABEL],
361
+ });
362
+ continue;
363
+ }
364
+ redactions.set(key, redactFeedbackText(value, FIELD_CAPS[key] ?? FEEDBACK_FIELD_MAX));
365
+ }
366
+ return redactions;
367
+ }
368
+ /** Reports one daemon start retries. A backlog drains over several starts, never in one burst. */
369
+ const OUTBOX_DRAIN_MAX = 5;
370
+ /**
371
+ * Retry what the outbox holds: the receipt for an undelivered report promises "It will be retried",
372
+ * and until this ran on daemon start nothing ever read the outbox back. Bounded, sequential, and
373
+ * best-effort; a report the endpoint does not accept stays queued. Returns how many were delivered.
374
+ */
375
+ export async function drainFeedbackOutbox(telemetry = getTelemetry(), home = homedir()) {
376
+ if (!telemetry.enabled || feedbackDisabled())
377
+ return 0;
378
+ let delivered = 0;
379
+ for (const entry of readOutbox(home).slice(0, OUTBOX_DRAIN_MAX)) {
380
+ const queued = FeedbackSchema.safeParse(entry.payload);
381
+ // A payload that cannot pass the schema can never be sent; it stays where a person can read it.
382
+ if (!queued.success)
383
+ continue;
384
+ const fields = Object.fromEntries([...redactAuthorFields(queued.data)].map(([key, r]) => [key, r.text]));
385
+ const parsed = FeedbackSchema.safeParse({ ...queued.data, ...fields });
386
+ if (!parsed.success)
387
+ continue;
388
+ try {
389
+ if (await telemetry.emit(TelemetryEventKind.FEEDBACK_SUBMITTED, { feedback: parsed.data })) {
390
+ markDelivered(entry.id, home);
391
+ delivered += 1;
392
+ }
393
+ }
394
+ catch {
395
+ /* stays queued for the next start */
396
+ }
397
+ }
398
+ return delivered;
399
+ }
234
400
  /**
235
401
  * The receipt's context PLUS the fields the emitter stamps on every event regardless of kind — the
236
402
  * reticle version, the OS, and whether this is CI. They are the single most-asked question of any bug
@@ -0,0 +1,18 @@
1
+ import { HarnessRunSource, type HarnessRun } from '@reticlehq/core/telemetry';
2
+ import { DriveOrigin, DriveStatus } from '../features/harness/drive-runs.js';
3
+ import { type Telemetry } from './telemetry.js';
4
+ export interface HarnessRunStart {
5
+ source: HarnessRunSource;
6
+ hosted: boolean;
7
+ }
8
+ /** Who started it. A saved plan is a plan whoever pressed Run. */
9
+ export declare function harnessRunSource(origin: DriveOrigin, planId: string | undefined): HarnessRunSource;
10
+ /** How a finished run ended, from what the registry recorded. */
11
+ export declare function harnessRunEnd(status: DriveStatus, result: Record<string, unknown> | undefined): Pick<HarnessRun, 'outcome' | 'journeys' | 'replayed'>;
12
+ /** Report the run's start, run it, report its end, and hand back exactly what it did. */
13
+ export declare function reportHarnessRun<T extends {
14
+ status: DriveStatus;
15
+ result: Record<string, unknown>;
16
+ }>(start: HarnessRunStart, run: () => Promise<T>, refused: (error: unknown) => boolean, telemetry?: Pick<Telemetry, 'emit'>): Promise<T>;
17
+ /** A run the gate refused before it could start: still somebody who asked for one. */
18
+ export declare function reportHarnessBlocked(start: HarnessRunStart, telemetry?: Pick<Telemetry, 'emit'>): void;
@@ -0,0 +1,80 @@
1
+ /**
2
+ * `harness_run`: the Harness funnel. One `started` and one `completed` per run, whoever started it.
3
+ *
4
+ * Emitted around the drive itself (`startDrive`'s run), not read off the tool answer: a drive started
5
+ * from the HUD is never polled by an agent, and a drive whose daemon is asked again later answers
6
+ * from disk, so only the run's own start and end see every run exactly once.
7
+ *
8
+ * A drive the gate refuses before it starts is still a run somebody asked for, and reports as a
9
+ * `started` + `completed: blocked` pair, so the funnel's denominator is everyone who pressed Run.
10
+ */
11
+ import { asRecord } from '@reticlehq/core';
12
+ import { JourneyBy } from '@reticlehq/core/artifacts';
13
+ import { HarnessRunOutcome, HarnessRunPhase, HarnessRunSource, TelemetryEventKind, countBucket, } from '@reticlehq/core/telemetry';
14
+ import { DriveOrigin, DriveStatus } from '../features/harness/drive-runs.js';
15
+ import { getTelemetry } from './telemetry.js';
16
+ const SOURCE_OF = {
17
+ [DriveOrigin.AGENT]: HarnessRunSource.AGENT,
18
+ [DriveOrigin.HUD]: HarnessRunSource.HUD,
19
+ [DriveOrigin.CHAT]: HarnessRunSource.DASHBOARD,
20
+ [DriveOrigin.TRY]: HarnessRunSource.CLI_TRY,
21
+ };
22
+ /** Who started it. A saved plan is a plan whoever pressed Run. */
23
+ export function harnessRunSource(origin, planId) {
24
+ return planId === undefined ? SOURCE_OF[origin] : HarnessRunSource.PLAN;
25
+ }
26
+ /** How a finished run ended, from what the registry recorded. */
27
+ export function harnessRunEnd(status, result) {
28
+ const journeys = Array.isArray(result?.['journeys']) ? result['journeys'] : undefined;
29
+ const replayed = (journeys ?? []).filter((j) => JourneyBy.REPLAY === asRecord(j)['by']).length;
30
+ const outcome = DriveStatus.REFUSED === status
31
+ ? HarnessRunOutcome.BLOCKED
32
+ : DriveStatus.BROKEN === status
33
+ ? HarnessRunOutcome.FAILED
34
+ : DriveStatus.STOPPED === status
35
+ ? HarnessRunOutcome.STOPPED
36
+ : true === result?.['proved']
37
+ ? HarnessRunOutcome.PROVED
38
+ : HarnessRunOutcome.NOT_PROVED;
39
+ // An unplanned drive is one journey; a refused one drove none.
40
+ const count = journeys?.length ?? (HarnessRunOutcome.BLOCKED === outcome ? 0 : 1);
41
+ return { outcome, journeys: countBucket(count), replayed: countBucket(replayed) };
42
+ }
43
+ function emit(telemetry, harness) {
44
+ try {
45
+ void telemetry.emit(TelemetryEventKind.HARNESS_RUN, { harness });
46
+ }
47
+ catch {
48
+ /* a metric may never change a drive */
49
+ }
50
+ }
51
+ /** Report the run's start, run it, report its end, and hand back exactly what it did. */
52
+ export async function reportHarnessRun(start, run, refused, telemetry = getTelemetry()) {
53
+ emit(telemetry, { phase: HarnessRunPhase.STARTED, ...start });
54
+ try {
55
+ const done = await run();
56
+ emit(telemetry, {
57
+ phase: HarnessRunPhase.COMPLETED,
58
+ ...start,
59
+ ...harnessRunEnd(done.status, done.result),
60
+ });
61
+ return done;
62
+ }
63
+ catch (error) {
64
+ emit(telemetry, {
65
+ phase: HarnessRunPhase.COMPLETED,
66
+ ...start,
67
+ ...harnessRunEnd(refused(error) ? DriveStatus.REFUSED : DriveStatus.BROKEN, undefined),
68
+ });
69
+ throw error;
70
+ }
71
+ }
72
+ /** A run the gate refused before it could start: still somebody who asked for one. */
73
+ export function reportHarnessBlocked(start, telemetry = getTelemetry()) {
74
+ emit(telemetry, { phase: HarnessRunPhase.STARTED, ...start });
75
+ emit(telemetry, {
76
+ phase: HarnessRunPhase.COMPLETED,
77
+ ...start,
78
+ ...harnessRunEnd(DriveStatus.REFUSED, undefined),
79
+ });
80
+ }
@@ -0,0 +1,16 @@
1
+ /**
2
+ * The HUD's own events: `hud_viewed` when a page is opened, `hud_signin_prompted` when a sign-in or
3
+ * link ask is shown. The windowed summary (`hudPanelMs`, `hudJourney`) says how long and in what
4
+ * order; these say how often and by whom, which a window summed across a session cannot.
5
+ *
6
+ * Sent by the daemon, like every HUD measure, so every opt-out applies, and only from the names the
7
+ * wire schema already narrowed. The dedupe (per tab, per page or surface) lives in `HudMetrics`.
8
+ */
9
+ import type { HudUseData } from '@reticlehq/core';
10
+ import { type Telemetry } from './telemetry.js';
11
+ /** Count one HUD use from one tab, and send the events it amounts to. */
12
+ export declare function reportHudUse(use: HudUseData, tab: string, telemetry?: Pick<Telemetry, 'emit'>): void;
13
+ /** The tab went into the background or came back: its HUD time pauses while it is hidden. */
14
+ export declare function noteHudTabHidden(tab: string, hidden: boolean): void;
15
+ /** The tab went away. */
16
+ export declare function noteHudTabClosed(tab: string): void;
@@ -0,0 +1,27 @@
1
+ import { TelemetryEventKind, countBucket } from '@reticlehq/core/telemetry';
2
+ import { getSessionMetrics } from './session-metrics.js';
3
+ import { getTelemetry } from './telemetry.js';
4
+ /** Count one HUD use from one tab, and send the events it amounts to. */
5
+ export function reportHudUse(use, tab, telemetry = getTelemetry()) {
6
+ const signals = getSessionMetrics().recordHudUse(use, tab);
7
+ const tabs = countBucket(signals.tabs);
8
+ try {
9
+ if (signals.viewed !== undefined)
10
+ void telemetry.emit(TelemetryEventKind.HUD_VIEWED, { hud: { view: signals.viewed, tabs } });
11
+ if (signals.prompted !== undefined)
12
+ void telemetry.emit(TelemetryEventKind.HUD_SIGNIN_PROMPTED, {
13
+ hud: { surface: signals.prompted, tabs },
14
+ });
15
+ }
16
+ catch {
17
+ /* a metric may never change behaviour */
18
+ }
19
+ }
20
+ /** The tab went into the background or came back: its HUD time pauses while it is hidden. */
21
+ export function noteHudTabHidden(tab, hidden) {
22
+ getSessionMetrics().setHudTabHidden(tab, hidden);
23
+ }
24
+ /** The tab went away. */
25
+ export function noteHudTabClosed(tab) {
26
+ getSessionMetrics().closeHudTab(tab);
27
+ }
@@ -1,32 +1,55 @@
1
- import { HudPanel, HudView, type HudUseData } from '@reticlehq/core';
1
+ import { HudPanel, HudView, type HudPromptSurface, type HudUseData } from '@reticlehq/core';
2
2
  /**
3
3
  * How people use the in-page HUD, rolled into the session summary.
4
4
  *
5
5
  * Windowed like the tool histograms beside it: a periodic flush reports what happened since the
6
6
  * last one, so a dashboard sums across a session's events. Names only — every key is a control id
7
7
  * the wire schema already checked against core's closed list.
8
+ *
9
+ * Time is kept PER TAB and only while the tab is visible. Two tabs used to share one open view, so
10
+ * one tab's change closed the other's clock, and a hidden or closed tab kept accruing for as long as
11
+ * the daemon lived.
8
12
  */
9
13
  /** How many steps of the journey one window keeps. A journey longer than this is cut, and says so. */
10
14
  export declare const HUD_JOURNEY_MAX = 60;
11
15
  export interface HudSummary {
12
16
  /** Presses per control; a toggle counts under `id:on` / `id:off` so a switch reads both ways. */
13
17
  hudControls?: Record<string, number>;
14
- /** Milliseconds the HUD spent in each view during the window. */
18
+ /** Milliseconds the HUD spent in each view during the window, summed over visible tabs. */
15
19
  hudViewMs?: Partial<Record<HudView, number>>;
16
- /** Milliseconds each panel was showing during the window. */
20
+ /** Milliseconds each panel was showing during the window, summed over visible tabs. */
17
21
  hudPanelMs?: Partial<Record<HudPanel, number>>;
18
22
  /** The window's presses and view changes, in order, cut at HUD_JOURNEY_MAX. */
19
23
  hudJourney?: string[];
20
24
  /** Present, and true, only when the journey was cut. */
21
25
  hudJourneyCut?: true;
26
+ /** Times each rail slide became the visible one. Slide ids are Reticle's own, never page text. */
27
+ hudSlides?: Record<string, number>;
28
+ }
29
+ /** The same page opened again on the same tab within this long is one view, not two. */
30
+ export declare const HUD_VIEW_DEDUPE_MS = 30000;
31
+ /** What one HUD use means for the per-event signals, beside what it adds to the summary. */
32
+ export interface HudSignals {
33
+ /** A page this tab had not opened within the dedupe window. */
34
+ viewed?: HudPanel;
35
+ /** A sign-in prompt this tab had not shown before. */
36
+ prompted?: HudPromptSurface;
37
+ /** Tabs with a HUD right now. */
38
+ tabs: number;
22
39
  }
23
40
  export declare class HudMetrics {
24
41
  #private;
25
42
  constructor(now: () => number);
26
- record(use: HudUseData): void;
43
+ record(use: HudUseData, tabId?: string): HudSignals;
44
+ /** The tab went into the background: its HUD stops accruing time until it is shown again. */
45
+ hide(tabId: string): void;
46
+ /** The tab is in front again: its HUD's view and panel accrue from now. */
47
+ show(tabId: string): void;
48
+ /** The tab went away: whatever it had open is counted up to now and stops. */
49
+ close(tabId: string): void;
27
50
  get empty(): boolean;
28
- /** The window so far. Open view and panel are counted up to now, and keep running after. */
51
+ /** The window so far. Open views and panels are counted up to now, and keep running after. */
29
52
  summarize(): HudSummary;
30
- /** Start the next window. The current view and panel carry over, timed from now. */
53
+ /** Start the next window. Each visible tab's view and panel carry over, timed from now. */
31
54
  reset(): void;
32
55
  }