@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
@@ -3,8 +3,9 @@ import { notePendingNoSessionReason } from '../../telemetry/tool-refused.js';
3
3
  import { declareDrivenRedactionKeys, forgetDrivenRedactionKeys, } from '../input/driven-redaction.js';
4
4
  import { Session } from './session.js';
5
5
  import { AttachmentHistory } from './presence/attachment-history.js';
6
- import { openedBeforeDeparture, pickDocumentSuccessor, } from './session-successor.js';
7
- import { SESSION_DISCONNECTED_REASON } from './facts/session-replaced.js';
6
+ import { claimedSessionOf, openedBeforeDeparture, pickDocumentSuccessor, } from './session-successor.js';
7
+ import { SESSION_DISCONNECTED_REASON, SESSION_PARKED_REASON } from './facts/session-replaced.js';
8
+ import { isErrorDocument } from './session-info.js';
8
9
  /** The scheme://host:port of a URL, or undefined if it can't be parsed. Used to compare origins. */
9
10
  export function originOf(url) {
10
11
  if (url === undefined)
@@ -43,19 +44,31 @@ function scopeSessions(sessions, scope) {
43
44
  * reader goes looking at their app instead of at the scope. Name what IS connected and how to
44
45
  * target it: both facts are already in hand here.
45
46
  */
46
- function scopeMissError(connected, scope) {
47
+ export function scopeMissError(connected, scope) {
47
48
  const who = scope?.projectId !== undefined
48
49
  ? `project '${scope.projectId}'`
49
50
  : scope?.url !== undefined
50
51
  ? `your app at ${scope.url}`
51
52
  : 'the active project';
53
+ const anyUntagged = connected.some((s) => s.projectId === undefined);
54
+ const anyTagged = connected.some((s) => s.projectId !== undefined);
55
+ const how = anyUntagged && !anyTagged
56
+ ? 'with no projectId'
57
+ : anyUntagged && anyTagged
58
+ ? 'under a different project or with no projectId'
59
+ : 'under a different project';
52
60
  const listed = connected
53
- .map((s) => `'${s.projectId ?? 'untagged'}' (${s.url}, sessionId '${s.id}')`)
61
+ .map((s) => s.projectId !== undefined
62
+ ? `'${s.projectId}' (${s.url}, sessionId '${s.id}')`
63
+ : `(no projectId: the page's connect() carries none) (${s.url}, sessionId '${s.id}')`)
54
64
  .join(', ');
55
- return (`no browser session for ${who}, but ${String(connected.length)} session(s) ARE connected under a ` +
56
- `different project: ${listed}. The daemon scopes to the .reticle.json of the directory it was ` +
57
- `started in, so this is a scope mismatch, not a dead app. Pass the sessionId above to target one, ` +
58
- `or restart the daemon from that app's directory.`);
65
+ const advice = anyUntagged
66
+ ? `Pass the sessionId above to target one, add a projectId to the app's connect() call or ` +
67
+ `.reticle.json, or restart the daemon from that app's directory.`
68
+ : `Pass the sessionId above to target one, or restart the daemon from that app's directory.`;
69
+ return (`no browser session for ${who}, but ${String(connected.length)} session(s) ARE connected ${how}: ` +
70
+ `${listed}. The daemon scopes to the .reticle.json of the directory it was started in, so ` +
71
+ `this is a scope mismatch, not a dead app. ${advice}`);
59
72
  }
60
73
  /**
61
74
  * Owns the set of connected browser sessions and the smart auto-selection that resolves which one a
@@ -72,6 +85,8 @@ const MAX_REMEMBERED_CLOSURES = 5;
72
85
  * Bounded so a long-lived daemon cannot accumulate one record per tab forever.
73
86
  */
74
87
  const MAX_TOMBSTONES = 32;
88
+ /** How a leased tab's id begins (`lease-tools.ts` mints them). */
89
+ const LEASE_ID_PREFIX = 'lease-';
75
90
  export class SessionManager {
76
91
  #sessions = new Map();
77
92
  /**
@@ -112,6 +127,8 @@ export class SessionManager {
112
127
  }
113
128
  add(session) {
114
129
  this.#everConnected = true;
130
+ if (session.projectId !== undefined)
131
+ this.#connectedProjects.add(session.projectId);
115
132
  // Ordering, not lifetime: this is what makes a remembered refusal distinguishable from a live
116
133
  // one. Here for the same reason `#everConnected` is — `add` is the one method every path that
117
134
  // registers a session goes through.
@@ -144,6 +161,24 @@ export class SessionManager {
144
161
  const scope = driven.projectId === undefined ? { url: driven.url } : { projectId: driven.projectId };
145
162
  return scopeSessions([...this.#sessions.values()], scope).filter((s) => s !== driven);
146
163
  }
164
+ /**
165
+ * Close a window's connection and refuse its id until the daemon restarts.
166
+ *
167
+ * Reported from a Tauri app whose hidden windows kept reconnecting: ending the session only ended
168
+ * the presenter, so the window came straight back. A reload keeps its id (sessionStorage), so the
169
+ * id is what stays parked; the 1008 close tells the SDK not to retry. Its tombstone goes too, so a
170
+ * call naming it is refused rather than handed a sibling window.
171
+ */
172
+ park(session) {
173
+ this.#parked.add(session.id);
174
+ session.disconnect(SESSION_PARKED_REASON);
175
+ this.remove(session);
176
+ this.#tombstones.delete(session.id);
177
+ }
178
+ isParked(sessionId) {
179
+ return this.#parked.has(sessionId);
180
+ }
181
+ #parked = new Set();
147
182
  remove(session) {
148
183
  if (this.#sessions.get(session.id) !== session)
149
184
  return false;
@@ -164,10 +199,13 @@ export class SessionManager {
164
199
  this.#siblingsAtDeparture.set(session.id, new Set([...this.#sessions.values()]
165
200
  .filter((s) => s !== session && openedBeforeDeparture(s, session))
166
201
  .map((s) => s.id)));
202
+ const departedTo = session.departedTo();
167
203
  this.#tombstones.set(session.id, {
168
204
  id: session.id,
169
205
  url: session.url,
170
206
  ...(session.projectId === undefined ? {} : { projectId: session.projectId }),
207
+ // Where the tab was seen heading, kept off `url`: successor matching needs the old origin.
208
+ ...(departedTo === undefined ? {} : { departedTo }),
171
209
  });
172
210
  while (this.#tombstones.size > MAX_TOMBSTONES) {
173
211
  const oldest = this.#tombstones.keys().next().value;
@@ -222,6 +260,15 @@ export class SessionManager {
222
260
  all() {
223
261
  return [...this.#sessions.values()];
224
262
  }
263
+ /**
264
+ * The connected sessions an id-less call may consider: the active project's, when one is set.
265
+ *
266
+ * The same set `resolve()` chooses from, so a caller that falls back from a refused resolution
267
+ * (an id-less yield) never reaches a tab the project scope would never have handed it.
268
+ */
269
+ inScope() {
270
+ return scopeSessions(this.all(), this.#defaultScope);
271
+ }
225
272
  count() {
226
273
  return this.#sessions.size;
227
274
  }
@@ -322,9 +369,20 @@ export class SessionManager {
322
369
  }
323
370
  /** Whether any session has connected since this daemon booted — half the diagnosis. */
324
371
  #everConnected = false;
372
+ /**
373
+ * Which projects have registered a session in this process.
374
+ *
375
+ * `#everConnected` is one bit for the whole daemon. A second project asking "has anything
376
+ * connected" was answered about the first. The set is the same fact, per project.
377
+ */
378
+ #connectedProjects = new Set();
325
379
  everConnected() {
326
380
  return this.#everConnected;
327
381
  }
382
+ /** Whether a session for this project has registered since boot. An unknown id has not. */
383
+ everConnectedTo(projectId) {
384
+ return this.#connectedProjects.has(projectId);
385
+ }
328
386
  /**
329
387
  * Record a bridge-initiated close so `resolve` can explain a session that vanished.
330
388
  *
@@ -385,6 +443,24 @@ export class SessionManager {
385
443
  last = record;
386
444
  return last;
387
445
  }
446
+ /**
447
+ * The most recent departed session for one project.
448
+ *
449
+ * `lastKnown` is the newest tombstone of any project. A shared daemon that quoted it to every
450
+ * caller told the second project to reopen the first project's tab.
451
+ */
452
+ lastKnownFor(projectId) {
453
+ let last;
454
+ for (const record of this.#tombstones.values()) {
455
+ if (record.projectId === projectId)
456
+ last = record;
457
+ }
458
+ return last;
459
+ }
460
+ /** Every departed session's URL, oldest first. The port scan has to see all of them, not only the newest. */
461
+ tombstoneUrls() {
462
+ return [...this.#tombstones.values()].map((record) => record.url);
463
+ }
388
464
  /**
389
465
  * A dead `sessionId`, answered with what the caller needs to recover — not with an errand.
390
466
  *
@@ -410,8 +486,17 @@ export class SessionManager {
410
486
  ' The app is not dialling this daemon; call ' +
411
487
  'reticle_sessions for the diagnosis rather than retrying this call.');
412
488
  }
413
- const named = live.map((s) => `'${s.id}' (${s.url})`).join(', ');
414
- return (`no connected session with id '${sessionId}'. Connected right now: ${named}. ` +
489
+ // A leased tab belongs to whoever holds the lease: naming it, and the page it is on, told one
490
+ // agent what every other agent on this daemon was doing. Only the app's own tabs are offered.
491
+ const own = live.filter((s) => claimedSessionOf(s.url) === undefined);
492
+ const ended = sessionId.startsWith(LEASE_ID_PREFIX)
493
+ ? ` Lease '${sessionId}' has ended (it expired or was released); lease a new tab to go on.`
494
+ : '';
495
+ if (0 === own.length)
496
+ return (`no connected session with id '${sessionId}'.${ended} ` +
497
+ 'Omit sessionId to let Reticle scope to your project, or lease a tab of your own.');
498
+ const named = own.map((s) => `'${s.id}' (${s.url})`).join(', ');
499
+ return (`no connected session with id '${sessionId}'.${ended} Your app's tabs: ${named}. ` +
415
500
  'Retry with one of those, or omit sessionId entirely and let Reticle scope to your project.');
416
501
  }
417
502
  resolve(sessionId, scope) {
@@ -495,7 +580,9 @@ export class SessionManager {
495
580
  // every call auto-targeted the one tab guaranteed to time out.
496
581
  const scored = all.map((s) => ({
497
582
  s,
498
- score: s.unresponsive() ? 2 : s.throttled() ? 1 : 0,
583
+ // An error document (a dev server's 404 that still mounted the SDK) ranks below any working
584
+ // page, hidden or not: it is never the app the agent was asked about.
585
+ score: s.unresponsive() ? 3 : isErrorDocument(s.page) ? 2 : s.throttled() ? 1 : 0,
499
586
  ms: s.lastSeenMs(),
500
587
  }));
501
588
  const bestScore = Math.min(...scored.map((x) => x.score));
@@ -101,7 +101,10 @@ export function endAllSessions(sessions, reason) {
101
101
  for (const session of sessions.all()) {
102
102
  if (session.isEnded())
103
103
  continue;
104
- endWithUndelivered(session, reason, PresenterTone.WARN);
104
+ // WAITING, not WARN: a dropped MCP connection is far more often an agent that finished its turn
105
+ // than one that crashed, and the daemon cannot tell them apart. Red at the end of every
106
+ // completed Harness or agent run read as an error the run never had.
107
+ endWithUndelivered(session, reason, PresenterTone.WAITING);
105
108
  ended.push(session.id);
106
109
  }
107
110
  if (ended.length > 0)
@@ -14,11 +14,24 @@ export interface SessionIdentity {
14
14
  id: string;
15
15
  url: string;
16
16
  projectId?: string;
17
+ /**
18
+ * Where the tab was seen heading just before it went away (#1256). Separate from `url` — the
19
+ * old origin — because successor matching must match on where the tab WAS.
20
+ */
21
+ departedTo?: string;
17
22
  }
18
23
  export interface SuccessorClock {
19
24
  now: () => number;
20
25
  sleep: (ms: number) => Promise<void>;
21
26
  }
27
+ /**
28
+ * The session a URL explicitly CLAIMS to be, via `__reticle_session`.
29
+ *
30
+ * A leased tab carries this marker so the pool can find the context it opened, and an app can set it
31
+ * deliberately so a battery addresses a known id. Either way it is a claim of identity, not a
32
+ * coincidence of origin — which is what makes it the right thing to gate succession on.
33
+ */
34
+ export declare function claimedSessionOf(url: string): string | undefined;
22
35
  /**
23
36
  * The one live session that can honestly take over from `departed`, or undefined when none or more
24
37
  * than one could.
@@ -30,7 +30,7 @@ function originOf(url) {
30
30
  * deliberately so a battery addresses a known id. Either way it is a claim of identity, not a
31
31
  * coincidence of origin — which is what makes it the right thing to gate succession on.
32
32
  */
33
- function claimedSessionOf(url) {
33
+ export function claimedSessionOf(url) {
34
34
  try {
35
35
  return new URL(url).searchParams.get(RETICLE_URL_PARAM.SESSION) ?? undefined;
36
36
  }
@@ -1,5 +1,5 @@
1
1
  import { z } from 'zod';
2
- import { ReticleCommand } from '@reticlehq/core';
2
+ import { HudCorner, HudVisibility, ReticleCommand } from '@reticlehq/core';
3
3
  import { ReticleTool } from '@reticlehq/core';
4
4
  import { asNumber, asString } from '@reticlehq/core';
5
5
  import { idleMsSchema } from '../../surface/tools/args/numeric-bounds.js';
@@ -12,11 +12,17 @@ import { idleMsSchema } from '../../surface/tools/args/numeric-bounds.js';
12
12
  export const SESSION_TOOLS = [
13
13
  {
14
14
  name: ReticleTool.SESSION_TUNE,
15
- description: 'Tune the presenter session for this app. { idleEndMs } sets how long the session stays open after you go quiet before the panel shows the human you are WAITING (your turn). Default 5min — the SLOW backstop; signal handback IMMEDIATELY with reticle_session{action:"yield"} instead of waiting for this. Lower it for snappier auto-handback, raise it for a slow app where long gaps between your tool calls are normal. Enforced SERVER-SIDE (immune to background-tab throttling); it also fires if you (the MCP client) disconnect — so a forgotten or crashed session never leaves the HUD reading "live". Going quiet then acting again revives the session automatically. Returns { applied, idleEndMs }.',
15
+ description: 'Tune the presenter session for this app. { idleEndMs } sets how long the session stays open after you go quiet before the panel shows the human you are WAITING (your turn). Default 5min — the SLOW backstop; signal handback IMMEDIATELY with reticle_session{action:"yield"} instead of waiting for this. Lower it for snappier auto-handback, raise it for a slow app where long gaps between your tool calls are normal. Enforced SERVER-SIDE (immune to background-tab throttling); it also fires if you (the MCP client) disconnect — so a forgotten or crashed session never leaves the HUD reading "live". Going quiet then acting again revives the session automatically. Also moves the HUD out of your way: { hud: "hidden" | "shown" | "removed" } (removed lasts until the page reloads), or a corner to move it to: { hud: "top-left" }. Use it when the HUD covers a control you must test; say so in your report. Returns { applied, idleEndMs, hud }.',
16
16
  inputSchema: {
17
17
  idleEndMs: idleMsSchema
18
18
  .optional()
19
19
  .describe('Idle window in milliseconds after which the panel shows WAITING (your turn). Default: 300000 (5 min) — the slow backstop; prefer reticle_session{action:"yield"}. Raise for slow apps.'),
20
+ hud: z
21
+ .enum([
22
+ ...Object.values(HudVisibility),
23
+ ...Object.values(HudCorner),
24
+ ])
25
+ .optional(),
20
26
  sessionId: z
21
27
  .string()
22
28
  .optional()
@@ -25,6 +31,7 @@ export const SESSION_TOOLS = [
25
31
  outputSchema: {
26
32
  applied: z.boolean(),
27
33
  idleEndMs: z.number().optional(),
34
+ hud: z.array(z.string()).optional(),
28
35
  },
29
36
  handler: async (deps, args) => {
30
37
  const session = deps.sessions.resolve(asString(args['sessionId']));
@@ -33,9 +40,25 @@ export const SESSION_TOOLS = [
33
40
  // authority), so the agent-set window is honored even when the tab is backgrounded.
34
41
  if (idleEndMs !== undefined)
35
42
  session.setIdleEndMs(idleEndMs);
36
- const res = await session.command(ReticleCommand.SESSION_CONFIG, idleEndMs !== undefined ? { idleEndMs } : {});
43
+ // One parameter on the wire to the agent, two to the page: a corner moves it, anything else
44
+ // shows, hides or removes it.
45
+ const asked = asString(args['hud']);
46
+ const isCorner = Object.values(HudCorner).includes(asked);
47
+ const hud = isCorner ? undefined : asked;
48
+ const corner = isCorner ? asked : undefined;
49
+ const res = await session.command(ReticleCommand.SESSION_CONFIG, {
50
+ ...(idleEndMs === undefined ? {} : { idleEndMs }),
51
+ ...(hud === undefined ? {} : { hud }),
52
+ ...(corner === undefined ? {} : { corner }),
53
+ });
37
54
  if (!res.ok)
38
55
  throw new Error(res.error ?? 'session config failed');
56
+ // Asked to move the HUD and the page says nothing about it: an SDK older than this daemon, or
57
+ // no HUD mounted. Reported, never `applied: true`: an agent told the HUD moved would test a
58
+ // control it is still covering.
59
+ const applied = res.result?.hud;
60
+ if ((hud !== undefined || corner !== undefined) && !Array.isArray(applied))
61
+ throw new Error('the page did not apply `hud`: its Reticle SDK predates it, or no HUD is mounted. Update the SDK (npx @reticlehq/server update) or test with the HUD where it is.');
39
62
  return res.result ?? { applied: true };
40
63
  },
41
64
  },
@@ -1,13 +1,13 @@
1
1
  import type { WebSocket } from 'ws';
2
2
  import { type ChannelId, type ImpactSnapshot, type ProjectId } from '@reticlehq/core';
3
+ import { type NarrationBy } from './narration-args.js';
3
4
  import type { HandshakeFacts } from './facts/handshake-facts.js';
4
5
  import { LastAct } from './last-act.js';
5
6
  import { GapLedger } from '@reticlehq/engine/evidence/gap-ledger.js';
6
- import { CaptureLedger } from '../../surface/tools/feature-capture.js';
7
7
  import { type PageRuntime } from './timing/command-timeout.js';
8
- import { type SessionHealth } from './session-health.js';
8
+ import { readHealthEvent, type SessionHealth } from './session-health.js';
9
9
  export type { SessionHealth };
10
- import { PresenterTone, SessionState, type BrowserBrand, type CommandResult, type JournalAction, type JournalWriteLoss, type HelloMessage, type HumanControlData, type ReticleEvent } from '@reticlehq/core';
10
+ import { ReticleCommand, PresenterTone, SessionState, type BrowserBrand, type CommandResult, type JournalAction, type JournalWriteLoss, type HelloMessage, type HumanControlData, type ReticleEvent } from '@reticlehq/core';
11
11
  import type { JournalReader, JournalRecorder } from '../../memory/journal/journal-recorder.js';
12
12
  import { type EventQueryOptions } from '../../memory/journal/journal-query.js';
13
13
  import { type AmbientCounts } from '@reticlehq/engine/window/ambient.js';
@@ -15,8 +15,8 @@ import { type InboxMessage } from './human/live-control.js';
15
15
  export type { InboxMessage } from './human/live-control.js';
16
16
  import { type ReviewMark } from './human/review-store.js';
17
17
  import { type SessionLease } from './presence/session-lease.js';
18
- import type { SessionInfo } from './session-info.js';
19
18
  export type { SessionInfo } from './session-info.js';
19
+ import { type SessionInfo } from './session-info.js';
20
20
  type Clock = () => number;
21
21
  /**
22
22
  * One connected browser tab. Owns its socket, a ring buffer of observations, and the
@@ -35,13 +35,8 @@ export declare class Session implements HandshakeFacts {
35
35
  readonly projectId: ProjectId | undefined;
36
36
  /**
37
37
  * The `.reticle` directory this session's evidence belongs in — impact counters AND capsules.
38
- *
39
- * Stamped once when the session is created, from the project it declared in HELLO, rather than
40
- * resolved per call: the answer cannot change while the tab is connected, and resolving it once
41
- * means every counter that fires for this session agrees about where it goes.
42
- *
43
- * Undefined when nothing could name a project — the caller then falls back to the daemon's own
44
- * root, which is what every counter did unconditionally before this existed.
38
+ * Stamped once, from the project it declared in HELLO, so every counter agrees where it goes.
39
+ * Undefined when nothing could name a project: callers fall back to the daemon's own root.
45
40
  */
46
41
  artifactRoot: string | undefined;
47
42
  /**
@@ -60,9 +55,14 @@ export declare class Session implements HandshakeFacts {
60
55
  commands?: readonly string[] | undefined;
61
56
  sourceMapping?: boolean | undefined;
62
57
  readonly redactKeys: readonly string[];
58
+ /** The desktop window this is and its document's HTTP status, merged from every PAGE_HEALTH. */
59
+ readonly page: ReturnType<typeof readHealthEvent>['page'];
60
+ /** The newest journal action: a verdict's screenshot names it, so the run pairs it with its check. */
61
+ lastActionId: string | undefined;
63
62
  constructor(hello: HelloMessage, socket: WebSocket, clock: Clock);
64
63
  /** Milliseconds since this session connected — the authoritative buffer clock. */
65
64
  elapsed(): number;
65
+ departedTo(): string | undefined;
66
66
  /** Mark that the SDK was just heard from. Called on every inbound message. */
67
67
  touch(): void;
68
68
  /** ms since the SDK last reported anything (distinct from elapsed-since-connect). */
@@ -104,7 +104,7 @@ export declare class Session implements HandshakeFacts {
104
104
  preconditionFailure(): string | undefined;
105
105
  /** What the rules that decide a verdict need from the daemon. See daemon-answers.ts. */
106
106
  readonly note: typeof import("../../log.js").log;
107
- readonly keepCallerContext: typeof import("../../trace.js").bindSpanContext;
107
+ readonly keepCallerContext: <A extends unknown[]>(fn: (...args: A) => void) => ((...args: A) => void);
108
108
  /** Re-stamp an incoming event with server-relative time, buffer it, and fan out. */
109
109
  pushEvent(event: ReticleEvent, byteSize?: number): void;
110
110
  recordActedRef(ref: string): void;
@@ -121,7 +121,7 @@ export declare class Session implements HandshakeFacts {
121
121
  provedLabels(): ReadonlySet<string>;
122
122
  actedRefs(): ReadonlySet<string>;
123
123
  noteRateLimited(dropped: number): void;
124
- blindSpots(): Readonly<Record<string, number>>;
124
+ blindSpots(since?: number): Readonly<Record<string, number>>;
125
125
  /** Learned ambient-churn counts (PredicateSession hook the settle oracle reads). */
126
126
  ambientCounts(): AmbientCounts;
127
127
  /** Only what THIS session observed — what teardown accumulates onto the persisted map. */
@@ -141,10 +141,7 @@ export declare class Session implements HandshakeFacts {
141
141
  queryEvents(options: EventQueryOptions): Promise<ReticleEvent[]>;
142
142
  /** What the durable ledger could not WRITE — see `readJournalWriteLoss` for the rule and why. */
143
143
  journalWriteLoss(): Promise<JournalWriteLoss | undefined>;
144
- /**
145
- * Open an action-attribution window: events observed until finishAction attribute to the returned
146
- * action id. Ids are minted independently of command correlation ids so the journal is self-contained.
147
- */
144
+ /** Open an attribution window: events until finishAction carry the returned (journal-own) id. */
148
145
  beginAction(tool: string, args: Record<string, unknown>): string;
149
146
  /**
150
147
  * Record one action WITHOUT opening an attribution window — for a tool that returns a verdict but
@@ -186,11 +183,6 @@ export declare class Session implements HandshakeFacts {
186
183
  * end of it.
187
184
  */
188
185
  readonly gaps: GapLedger;
189
- /**
190
- * The read-only calls the journal does not keep, so "was `reticle_context` ever called" has
191
- * something to fold. See surface/tools/feature-capture.ts — it is the only state that instrument adds.
192
- */
193
- readonly capture: CaptureLedger;
194
186
  /**
195
187
  * Stamp the wall-clock of the latest AGENT command (called whenever a tool resolves this session).
196
188
  * If the reaper had auto-ended the session, a fresh command means the agent is alive again, so the
@@ -242,9 +234,9 @@ export declare class Session implements HandshakeFacts {
242
234
  * summary) so a transition never emits two PRESENTER commands.
243
235
  */
244
236
  setState(next: SessionState, text?: string, tone?: PresenterTone): void;
245
- /** Push a human note onto the inbox (see LiveControl). */
237
+ /** Push a human note onto the inbox (see LiveControl); the HUD shows it as sent. */
246
238
  pushMessage(text: string): void;
247
- /** Queued human notes, cleared as they are read (delivered-once). */
239
+ /** Queued human notes, cleared as they are read (delivered-once); the HUD shows them as seen. */
248
240
  drainInbox(): InboxMessage[];
249
241
  /** Diagnostic read of the inbox depth (does not clear). */
250
242
  inboxSize(): number;
@@ -264,15 +256,15 @@ export declare class Session implements HandshakeFacts {
264
256
  */
265
257
  applyHumanControl(data: HumanControlData): void;
266
258
  /**
267
- * Push the impact record to this tab's HUD.
268
- *
269
- * Debounced: the record changes on every tool call, and the panel does not need 200 frames to
270
- * show a counter going up. The LAST state always lands, because the timer re-reads the store
271
- * when it fires rather than capturing a snapshot when it was scheduled.
259
+ * Push the impact record to this tab's HUD. Debounced (a counter needs no 200 frames); the LAST
260
+ * state always lands, because the timer re-reads the store when it fires.
272
261
  */
273
262
  pushImpact(read: () => ImpactSnapshot | undefined, immediate?: boolean): void;
274
263
  pushPresenter(state: SessionState, text?: string, tone?: PresenterTone): void;
275
- pushNarration(text: string): void;
264
+ /** `mirror: false` for a notice about THIS page (its SDK is behind), which every tab says itself. */
265
+ pushNarration(text: string, mirror?: boolean, by?: NarrationBy): void;
266
+ /** A HUD replay's progress, or the Harness's drive plan: pictures the HUD redraws as they change. */
267
+ pushView(name: typeof ReticleCommand.FLOW_PROGRESS | typeof ReticleCommand.PLAN, args: object): void;
276
268
  /** The one-time lease block on the first agent command, then undefined forever after. */
277
269
  takeSessionLease(): SessionLease | undefined;
278
270
  /**