@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,102 +3,18 @@
3
3
  * The parser stays pure and unit-testable; `cli.ts` owns the side-effecting handlers and dispatch,
4
4
  * and re-exports this surface.
5
5
  */
6
- import { TutorialAudience } from './tutorial.js';
7
6
  import { parseFeedbackArgs } from './cli-parse-feedback.js';
8
7
  import { parseVerifySuffix } from './cli-parse-verify.js';
9
- import { HEADED_FLAG, PORT_FLAG, VERIFY_COMMAND, missingOperand, missingValue, notANumber, retiredFlag, unknownArgument, } from './cli-parse-grammar.js';
8
+ import { HEADED_FLAG, PORT_FLAG, VERIFY_COMMAND, missingOperand, missingValue, notANumber, retiredFlag, unknownArgument, CLOUD_COMMANDS, REMOVED_COMMANDS, removedNote, } from './cli-parse-grammar.js';
10
9
  // Re-exported because the daemon's own argv builder reaches for these through this module, which is
11
10
  // where the grammar has always lived as far as every caller is concerned.
12
11
  export { HEADED_FLAG, PORT_FLAG };
13
12
  import { FORCE_FLAG } from './cli-kill.js';
14
13
  // Re-exported so every existing importer of these flags is unaffected by the file split.
15
14
  export { AGENT_FLAG, BUG_FLAG, FEEDBACK_KINDS, KIND_FLAG, RATING_FLAG, } from './cli-parse-feedback.js';
16
- /**
17
- * The lines below say `reticle <command>`, which is the bin this package installs and is correct
18
- * once it is on PATH. Copied into `npx`, it is not: `npx reticle` resolves the PACKAGE named
19
- * `reticle`, which belongs to somebody else, and npx will happily fetch and run it. The docs were
20
- * telling readers to do exactly that on 110 lines before it was caught, so the invocation now leads
21
- * the usage block rather than being a footnote somewhere else.
22
- */
23
- export const CLI_USAGE = `usage: npx @reticlehq/server <command> (or \`reticle <command>\` once the bin is on your PATH)
24
-
25
- reticle init [--dry-run] [--port N] [--no-mcp] [--no-install] [--app <dir>]
26
- [--env KEY=VALUE]... [--files-only] [--hooks] (wire Reticle into the project in this directory)
27
- init is ONBOARDING: it wires the project, boots the app and proves a session
28
- connected. It does not drive. The FIRST RUN is the stage that proves a flow:
29
- reticle verify <url> --explore --persona "<who does what>", or the same thing
30
- from an agent as reticle_verify { action: "explore", persona: "…" }
31
- --app picks WHICH app in a monorepo, when several are found
32
- --env is what the app needs to reach a usable state: the key from
33
- .env.example, the mock backend, the variable that skips an auth wall.
34
- Repeatable, and a value may contain spaces and equals signs
35
- --files-only writes the files and stops, which is what init did before it
36
- learned to boot the app and prove the install works
37
- --relaunch prints the exact command that restarts THIS conversation with
38
- the tools loaded, so the restart is not a chore handed to a human. It
39
- refuses when the session id has no transcript behind it, because
40
- --resume on an empty id opens a blank conversation that looks like
41
- success. Works with --files-only
42
- --license writes the key to .env and keeps .env out of git
43
- --json puts the result on stdout, so an agent reads one object
44
- --no-open / --no-agents / --url / --timeout are the runtime dials: CI, a
45
- headless box, or an app you already run
46
- --no-mcp skips MORE than the server registration: also the agent rule files
47
- (CLAUDE.md / AGENTS.md / .cursor) and the /reticle command, because all three
48
- only make sense once the tools are reachable.
49
- reticle serve [--port N] [--drive <url>] [--headless] [--http] [--http-port N] [--http-token T]
50
- reticle stop [--port N] [--quiet] (stop the daemon we started, by its recorded pid)
51
- reticle kill [--port N] [--force] (free the port by its LISTENER, never the agent's mcp proxy)
52
- reticle restart [--port N] [--force] (kill, then start a daemon and wait for a real bind)
53
- reticle status [--port N] [--json] (a readable block; --json for the event)
54
- reticle doctor [--port N] (one command to diagnose setup: Chromium, daemon, port)
55
- reticle open [url] [--port N] (show the app: reuse the connected tab, else open one)
56
- reticle verify <url> [--port N] [--headed] [--timeout N] [--storage-state <file>] [--session-id <id>] (one-shot: drive the URL, verify saved flows, exit 0=pass)
57
- [--explore] [--persona <who>] (no saved flows? let Reticle drive the app itself and record them)
58
- [--select <label>] (repeatable: verify only flows carrying these labels — no model, exit 0=pass)
59
- [--expect '<json predicate>' | --expect-file <path>] (one verdict, no saved
60
- flows needed. --expect-file is the form no shell can mangle: cmd.exe keeps the
61
- single quotes the docs show, and PowerShell strips the inner double quotes, and
62
- a predicate that does not parse produces no verdict at all — asks the daemon that
63
- is already running, so nothing is bound and nothing is stopped. It NEEDS that
64
- daemon: with none on the port it refuses and names the flag, rather than reporting
65
- on your saved flows instead. Cannot be combined with --storage-state, which this
66
- path has nowhere to load. This is the path when your client never loaded the
67
- reticle_* tools. exit 0 ONLY on verified:"yes" — "unknown" is not a pass)
68
- reticle affected [--since <ref>] [file...] (which saved flows must re-verify for the changed files)
69
- reticle gate [--since <ref>] [--accept-coverage] [file...] (exit non-zero unless passing artifacts cover the affected flows)
70
- reticle report [--session <id>] [--hook] (what the latest session claimed, and what held)
71
- reticle setup mcp (register the MCP server with your agents; the installer's registration half)
72
- reticle capsules (list the saved fail-to-pass bug capsules in .reticle/capsules)
73
- reticle hunt <dir> (aggregate a directory of crawl reports into one false-green rate)
74
- reticle watch [url] (on save, report which saved flows must re-verify)
75
- reticle drive <url> [--headless] (foreground mode, for debugging)
76
- reticle mcp [--port N] [--drive <url>] [--headless] (MCP stdio proxy; auto-starts daemon if needed)
77
- reticle update (install the latest server version and restart)
78
- reticle rollback (restore the previous server version and restart)
79
- reticle license (show enterprise license status: active | eval | missing)
80
- reticle telemetry [status|enable|disable] (anonymous usage metrics; status shows what's sent + the policy)
81
- reticle feedback [--rating 1-5] [--bug] "message" (tell us what worked and what didn't; prints exactly what it sends)
82
- reticle feedback --agent --kind <bug|gap|ambiguity|feature_request|improvement|experience> "message"
83
- (agents: file from anywhere, including a setup that never finished)
84
- reticle identify --context company|side_project|open_source|learning [--company N] [--email E] [--forget]
85
- (OPT-IN: tell us who you are, e.g. for support or an enterprise trial)
86
-
87
- Cloud (link this project to Reticle; runs/flows recorded on the dashboard):
88
- reticle connect [--project <name|id>] [--url <cloud origin>]
89
- (wire this app if needed, sign in, link, send local history)
90
- reticle login [--url <u>] [--email <e>] [--code <c>] [--org <n>]
91
- (browser device flow by default; --email mails a code)
92
- reticle logout [--url <u>] (sign out of ONE host; others stay signed in)
93
- reticle link [--project <name|id>] (bind this repo: mints a scoped key, writes .reticle/cloud.json)
94
- reticle whoami (who am I signed in as, and is this repo attached?)
95
- reticle project <ls|create <name>> (list or create cloud projects)
96
- reticle config [--runs on|off] [--memory on|off] [--flows on|off] [--verify local|server]
97
- reticle push | sync [--watch] (one sync cycle: send the difference, collect decisions)
98
- reticle runs | regression | share <runId> (read cloud state; regression exits 3 if any flow broke)
99
-
100
- 'drive' shows the browser; everything else is hidden (serve/mcp own the pool behind leases, replay
101
- and the spec runner: batch work). --headed opts any of them in, --headless hides drive, CI hides it.`;
15
+ // The help text lives on its own page; re-exported so every importer of it is unaffected.
16
+ import { CLI_USAGE } from './cli-usage.js';
17
+ export { CLI_USAGE };
102
18
  const INIT_COMMAND = 'init';
103
19
  const SERVE_COMMAND = 'serve';
104
20
  const STOP_COMMAND = 'stop';
@@ -108,16 +24,15 @@ const STATUS_COMMAND = 'status';
108
24
  const OPEN_COMMAND = 'open';
109
25
  const DRIVE_COMMAND = 'drive';
110
26
  const AFFECTED_COMMAND = 'affected';
111
- const HUNT_COMMAND = 'hunt';
112
- const CAPSULES_COMMAND = 'capsules';
113
27
  const GATE_COMMAND = 'gate';
114
28
  /** Hook mode: prose a human can read, and silence when there was simply nothing to check. */
115
29
  const HOOK_FLAG = '--hook';
116
30
  const ACCEPT_COVERAGE_FLAG = '--accept-coverage';
117
31
  /** `reticle report [--session <id>] [--hook]` — what the latest session claimed, and what held. */
118
32
  const REPORT_COMMAND = 'report';
33
+ /** `reticle context --compact`: the resume block, from disk. A SessionStart hook prints it. */
34
+ const CONTEXT_COMMAND = 'context';
119
35
  const SESSION_FLAG = '--session';
120
- const WATCH_COMMAND = 'watch';
121
36
  const UPDATE_COMMAND = 'update';
122
37
  const ROLLBACK_COMMAND = 'rollback';
123
38
  const MCP_COMMAND = 'mcp';
@@ -125,11 +40,8 @@ const LICENSE_COMMAND = 'license';
125
40
  const VERSION_COMMAND = 'version';
126
41
  const TELEMETRY_COMMAND = 'telemetry';
127
42
  const FEEDBACK_COMMAND = 'feedback';
128
- const IDENTIFY_COMMAND = 'identify';
129
- const COMPANY_FLAG = '--company';
130
- const EMAIL_FLAG = '--email';
131
- const CONTEXT_FLAG = '--context';
132
- const FORGET_FLAG = '--forget';
43
+ const DOCTOR_COMMAND = 'doctor';
44
+ const SETUP_COMMAND = 'setup';
133
45
  /** The `reticle telemetry` sub-actions. Bare `reticle telemetry` means `status`. */
134
46
  export const TelemetryAction = {
135
47
  STATUS: 'status',
@@ -147,7 +59,10 @@ export const DAEMON_INNER_COMMAND = '_daemon';
147
59
  * defined; a second list somewhere else would drift the first time a command is added.
148
60
  */
149
61
  export const UNKNOWN_COMMAND = 'unknown';
150
- const KNOWN_COMMANDS = new Set([
62
+ const HELP_COMMAND = 'help';
63
+ const HELP_FLAGS = new Set(['--help', '-h']);
64
+ /** Every command the typed parser below routes. The parser refuses any word not in this list. */
65
+ export const LOCAL_COMMANDS = [
151
66
  INIT_COMMAND,
152
67
  SERVE_COMMAND,
153
68
  STOP_COMMAND,
@@ -158,11 +73,9 @@ const KNOWN_COMMANDS = new Set([
158
73
  DRIVE_COMMAND,
159
74
  VERIFY_COMMAND,
160
75
  AFFECTED_COMMAND,
161
- HUNT_COMMAND,
162
- CAPSULES_COMMAND,
163
76
  GATE_COMMAND,
164
77
  REPORT_COMMAND,
165
- WATCH_COMMAND,
78
+ CONTEXT_COMMAND,
166
79
  UPDATE_COMMAND,
167
80
  ROLLBACK_COMMAND,
168
81
  MCP_COMMAND,
@@ -170,25 +83,23 @@ const KNOWN_COMMANDS = new Set([
170
83
  VERSION_COMMAND,
171
84
  TELEMETRY_COMMAND,
172
85
  FEEDBACK_COMMAND,
173
- IDENTIFY_COMMAND,
174
86
  DAEMON_INNER_COMMAND,
175
- 'connect',
176
- 'login',
177
- 'logout',
178
- 'whoami',
179
- 'link',
180
- 'project',
181
- 'config',
182
- 'push',
183
- 'runs',
184
- 'issues',
185
- 'memory',
186
- 'regression',
187
- 'share',
188
- 'doctor',
189
- 'setup',
190
- 'tutorial',
191
- 'help',
87
+ DOCTOR_COMMAND,
88
+ SETUP_COMMAND,
89
+ ];
90
+ const LOCAL_COMMAND_SET = new Set(LOCAL_COMMANDS);
91
+ const KNOWN_COMMANDS = new Set([
92
+ ...LOCAL_COMMANDS,
93
+ ...CLOUD_COMMANDS,
94
+ ...REMOVED_COMMANDS.keys(),
95
+ HELP_COMMAND,
96
+ ]);
97
+ /** The conventional flag spellings of two commands, reported as the command they ask for. */
98
+ const COMMAND_FLAG_ALIASES = new Map([
99
+ ['--version', VERSION_COMMAND],
100
+ ['-v', VERSION_COMMAND],
101
+ ['--help', HELP_COMMAND],
102
+ ['-h', HELP_COMMAND],
192
103
  ]);
193
104
  /**
194
105
  * A non-negative integer flag, or 0.
@@ -207,15 +118,15 @@ function numberFlag(args, name) {
207
118
  /** The subcommand name if we recognize it, else `unknown`. Bare `reticle` reports `help`. */
208
119
  export function knownCommand(arg) {
209
120
  if (arg === undefined || '' === arg)
210
- return 'help';
211
- return KNOWN_COMMANDS.has(arg) ? arg : UNKNOWN_COMMAND;
121
+ return HELP_COMMAND;
122
+ return KNOWN_COMMANDS.has(arg) ? arg : (COMMAND_FLAG_ALIASES.get(arg) ?? UNKNOWN_COMMAND);
212
123
  }
213
124
  /**
214
125
  * Force a hidden browser. The default is now HEADED: a run nobody can see is a run nobody trusts,
215
126
  * and every "did it actually do anything?" question cost a round-trip. CI passes this (or just sets
216
127
  * CI, which flips the default) because there is no display there to be headed on.
217
128
  */
218
- const HEADLESS_FLAG = '--headless';
129
+ export const HEADLESS_FLAG = '--headless';
219
130
  export const DRIVE_FLAG = '--drive';
220
131
  const QUIET_FLAG = '--quiet';
221
132
  const DRY_RUN_FLAG = '--dry-run';
@@ -236,6 +147,8 @@ const FLOW_FLAG = '--flow';
236
147
  const FIRST_RUN_MOVED = 'onboarding wires the project, the FIRST RUN proves a flow. Drive one with reticle_verify { action: "explore", persona: "<who does what>" }, or npx @reticlehq/server verify <url> --explore --persona "<who does what>"';
237
148
  const ENV_FLAG = '--env';
238
149
  const FILES_ONLY_FLAG = '--files-only';
150
+ /** With `--app`, also start the app: naming one app of a workspace otherwise writes its files only. */
151
+ const START_FLAG = '--start';
239
152
  /**
240
153
  * Write `captureNetworkBodies: true` into the app's config. OFF unless asked (#705).
241
154
  *
@@ -256,6 +169,8 @@ const HOOKS_FLAG = '--hooks';
256
169
  const JSON_FLAG = '--json';
257
170
  const NO_DRIVE_FLAG = '--no-drive';
258
171
  const NO_OPEN_FLAG = '--no-open';
172
+ /** Connect and stop: no coverage summary and no prompt at the end. */
173
+ const NO_FIRST_RUN_FLAG = '--no-first-run';
259
174
  const NO_AGENTS_FLAG = '--no-agents';
260
175
  /**
261
176
  * Restart the calling client so IT gets the tools.
@@ -281,12 +196,6 @@ const NO_INSTALL_FLAG = '--no-install';
281
196
  export const HTTP_FLAG = '--http';
282
197
  export const HTTP_PORT_FLAG = '--http-port';
283
198
  export const HTTP_TOKEN_FLAG = '--http-token';
284
- /**
285
- * `serve` / `mcp` / `_daemon` own the browser POOL, which backs automated work — leased contexts for
286
- * parallel agents, flow replay, the spec runner. Those are batch: nobody is watching, and launching
287
- * them headed changed timing enough to break four e2e specs. The headed default belongs to the
288
- * INTERACTIVE command (`drive`), where a human asked to see the run. `--headed` still opts in here.
289
- */
290
199
  /**
291
200
  * A usage error names the thing that was wrong.
292
201
  *
@@ -307,10 +216,10 @@ const unknownCommand = (command) => ({
307
216
  kind: 'error',
308
217
  message: `unknown command '${command}'`,
309
218
  });
310
- function parseServeFlags(args, defaultPort, _defaultHeadless) {
219
+ function parseServeFlags(args, defaultPort, defaultHeadless) {
311
220
  let port = defaultPort;
312
221
  let driveUrl;
313
- let headless = true;
222
+ let headless = defaultHeadless;
314
223
  let http = false;
315
224
  let httpPort;
316
225
  let httpToken;
@@ -427,10 +336,12 @@ function parseInitFlags(args) {
427
336
  // Repeatable: one variable per flag, so a value containing spaces or `=` needs no quoting rules.
428
337
  const env = [];
429
338
  let filesOnly = false;
339
+ let start = false;
430
340
  let captureBodies = false;
431
341
  let hooks = false;
432
342
  let json = false;
433
343
  let open = true;
344
+ let firstRun = true;
434
345
  let relaunch = false;
435
346
  let agents = true;
436
347
  let url;
@@ -473,6 +384,9 @@ function parseInitFlags(args) {
473
384
  else if (arg === FILES_ONLY_FLAG) {
474
385
  filesOnly = true;
475
386
  }
387
+ else if (arg === START_FLAG) {
388
+ start = true;
389
+ }
476
390
  else if (arg === CAPTURE_BODIES_FLAG) {
477
391
  captureBodies = true;
478
392
  }
@@ -485,6 +399,9 @@ function parseInitFlags(args) {
485
399
  else if (arg === NO_OPEN_FLAG) {
486
400
  open = false;
487
401
  }
402
+ else if (arg === NO_FIRST_RUN_FLAG) {
403
+ firstRun = false;
404
+ }
488
405
  else if (arg === RELAUNCH_FLAG) {
489
406
  relaunch = true;
490
407
  }
@@ -540,11 +457,14 @@ function parseInitFlags(args) {
540
457
  install,
541
458
  app,
542
459
  env,
543
- filesOnly,
460
+ // One app of a workspace, named: its files, and nothing started unless asked (`--start`). Its
461
+ // dev server is often run from the root, and a monorepo init started the daemon and failed it.
462
+ filesOnly: filesOnly || (app !== undefined && !start),
544
463
  captureBodies,
545
464
  hooks,
546
465
  json,
547
466
  open,
467
+ firstRun,
548
468
  relaunch,
549
469
  agents,
550
470
  url,
@@ -592,8 +512,6 @@ function parseTargetArgs(rest) {
592
512
  export function dialsTheDaemon(parsed) {
593
513
  if ('init' === parsed.kind)
594
514
  return false;
595
- if ('tutorial' === parsed.kind)
596
- return parsed.run;
597
515
  return 'port' in parsed;
598
516
  }
599
517
  /**
@@ -603,9 +521,9 @@ export function dialsTheDaemon(parsed) {
603
521
  * trustworthy, and asking people to opt into seeing their own app was backwards.
604
522
  */
605
523
  export function parseCliArgs(argv, defaultPort, defaultHeadless = false) {
606
- // Bare `reticle` is `serve` — a pool-owning command, so headless like the rest of that family.
524
+ // Bare `reticle` is `serve`.
607
525
  if (0 === argv.length)
608
- return { kind: 'serve', port: defaultPort, headless: true, http: false };
526
+ return { kind: 'serve', port: defaultPort, headless: defaultHeadless, http: false };
609
527
  const [cmd, ...rest] = argv;
610
528
  // Guaranteed by the bare-argv check above; restated so the unknown-command error can name it.
611
529
  if (cmd === undefined)
@@ -623,9 +541,22 @@ export function parseCliArgs(argv, defaultPort, defaultHeadless = false) {
623
541
  // `reticle_usage_error: unknown argument '--help'` on stderr with exit 1. The usage text was
624
542
  // printed underneath it, so the request was in fact answered; it was simply answered as a failure,
625
543
  // which is the wrong first impression to give somebody who has just asked a tool what it does.
626
- if ('help' === cmd || argv.some((arg) => '--help' === arg || '-h' === arg)) {
627
- return { kind: 'help' };
544
+ //
545
+ // Removed commands answer before help does: `reticle hunt --help` should say it is gone, not
546
+ // describe something that no longer runs.
547
+ const removed = REMOVED_COMMANDS.get(cmd);
548
+ if (removed !== undefined)
549
+ return { kind: 'removed', message: removedNote(cmd, removed) };
550
+ if (HELP_COMMAND === cmd || HELP_FLAGS.has(cmd)) {
551
+ // `reticle help all`, `reticle --help all`, `reticle help init`.
552
+ const topic = rest.find((arg) => !HELP_FLAGS.has(arg));
553
+ return topic === undefined ? { kind: 'help' } : { kind: 'help', topic };
628
554
  }
555
+ if (argv.some((arg) => HELP_FLAGS.has(arg)))
556
+ return { kind: 'help', topic: cmd };
557
+ // The list is the gate, so a command cannot be routed without also being named in telemetry.
558
+ if (!LOCAL_COMMAND_SET.has(cmd))
559
+ return unknownCommand(cmd);
629
560
  switch (cmd) {
630
561
  case INIT_COMMAND: {
631
562
  const r = parseInitFlags(rest);
@@ -644,6 +575,7 @@ export function parseCliArgs(argv, defaultPort, defaultHeadless = false) {
644
575
  hooks: r.hooks,
645
576
  json: r.json,
646
577
  open: r.open,
578
+ firstRun: r.firstRun,
647
579
  relaunch: r.relaunch,
648
580
  agents: r.agents,
649
581
  url: r.url,
@@ -667,6 +599,10 @@ export function parseCliArgs(argv, defaultPort, defaultHeadless = false) {
667
599
  }
668
600
  case STOP_COMMAND: {
669
601
  const port = parsePortFlag(rest, defaultPort);
602
+ // `stop --force` is what `kill` was: free the port by its listener, which must still be a
603
+ // Reticle daemon. Overriding that refusal stays on `restart --force` and the old `kill --force`.
604
+ if (rest.includes(FORCE_FLAG))
605
+ return { kind: 'kill', port, force: false };
670
606
  const quiet = rest.includes(QUIET_FLAG);
671
607
  return { kind: 'stop', port, quiet };
672
608
  }
@@ -685,22 +621,7 @@ export function parseCliArgs(argv, defaultPort, defaultHeadless = false) {
685
621
  // parsing it knows to ask for the object.
686
622
  return { kind: 'status', port, json: rest.includes(JSON_FLAG) };
687
623
  }
688
- case 'tutorial': {
689
- // `--agent` is the opt-in, because a person typing this is the common case and should not have
690
- // to ask for prose. An agent knows to pass the flag; a human would not know to avoid it.
691
- const audience = argv.includes('--agent') ? TutorialAudience.AGENT : TutorialAudience.HUMAN;
692
- // `--run` drives the demo instead of describing it. Opt-in rather than the default: the tour
693
- // starts a daemon and opens a browser, and a command that did that to somebody who typed it
694
- // expecting a page of text would be a surprise in the one place surprises are least welcome.
695
- return {
696
- kind: 'tutorial',
697
- audience,
698
- run: argv.includes('--run'),
699
- port: parsePortFlag(rest, defaultPort),
700
- headless: !argv.includes('--headed'),
701
- };
702
- }
703
- case 'doctor': {
624
+ case DOCTOR_COMMAND: {
704
625
  const port = parsePortFlag(rest, defaultPort);
705
626
  return { kind: 'doctor', port };
706
627
  }
@@ -716,7 +637,7 @@ export function parseCliArgs(argv, defaultPort, defaultHeadless = false) {
716
637
  * no flag: it tells a reader a confirmation exists. What this writes is stated before it runs
717
638
  * and printed after, which is the honest version of the same reassurance.
718
639
  */
719
- case 'setup': {
640
+ case SETUP_COMMAND: {
720
641
  const what = rest[0];
721
642
  /*
722
643
  * `setup install` — the Node half of the one-line installer.
@@ -737,7 +658,7 @@ export function parseCliArgs(argv, defaultPort, defaultHeadless = false) {
737
658
  // Only `mcp` today. A bare `reticle setup` falls to help rather than guessing, because the
738
659
  // next subcommand here will not be a synonym for this one.
739
660
  if (what !== 'mcp')
740
- return { kind: 'help' };
661
+ return { kind: 'help', topic: SETUP_COMMAND };
741
662
  return { kind: 'setup-mcp' };
742
663
  }
743
664
  case LICENSE_COMMAND:
@@ -751,22 +672,6 @@ export function parseCliArgs(argv, defaultPort, defaultHeadless = false) {
751
672
  }
752
673
  return { kind: 'telemetry', action };
753
674
  }
754
- case IDENTIFY_COMMAND: {
755
- const flag = (name) => {
756
- const at = rest.indexOf(name);
757
- return -1 === at ? undefined : rest[at + 1];
758
- };
759
- const context = flag(CONTEXT_FLAG);
760
- const company = flag(COMPANY_FLAG);
761
- const email = flag(EMAIL_FLAG);
762
- return {
763
- kind: 'identify',
764
- ...(context !== undefined ? { context } : {}),
765
- ...(company !== undefined ? { company } : {}),
766
- ...(email !== undefined ? { email } : {}),
767
- forget: rest.includes(FORGET_FLAG),
768
- };
769
- }
770
675
  case FEEDBACK_COMMAND:
771
676
  return parseFeedbackArgs(rest);
772
677
  case OPEN_COMMAND: {
@@ -812,16 +717,10 @@ export function parseCliArgs(argv, defaultPort, defaultHeadless = false) {
812
717
  ...(true === r.explore ? { explore: true } : {}),
813
718
  ...(r.persona !== undefined ? { persona: r.persona } : {}),
814
719
  ...(r.select !== undefined ? { select: r.select } : {}),
720
+ ...(r.resultsJson !== undefined ? { resultsJson: r.resultsJson } : {}),
721
+ ...(true === r.confirmDangerous ? { confirmDangerous: true } : {}),
815
722
  };
816
723
  }
817
- case CAPSULES_COMMAND:
818
- return { kind: 'capsules' };
819
- case HUNT_COMMAND: {
820
- const dir = rest.find((a) => !a.startsWith('-'));
821
- return dir === undefined
822
- ? { kind: 'error', message: 'usage: reticle hunt <dir-of-crawl-reports>' }
823
- : { kind: 'hunt', dir };
824
- }
825
724
  case AFFECTED_COMMAND: {
826
725
  const t = parseTargetArgs(rest);
827
726
  const since = t.since ?? implicitSince(t.files);
@@ -850,10 +749,11 @@ export function parseCliArgs(argv, defaultPort, defaultHeadless = false) {
850
749
  ...(session === undefined ? {} : { session }),
851
750
  };
852
751
  }
853
- case WATCH_COMMAND: {
854
- // `reticle watch [url]` — on file save, report which saved flows must re-verify.
855
- const url = rest.find((arg) => !arg.startsWith('-'));
856
- return url === undefined ? { kind: 'watch' } : { kind: 'watch', url };
752
+ case CONTEXT_COMMAND: {
753
+ // `--compact` is the only form; accepted so the hook line reads as what it does.
754
+ const at = rest.indexOf(SESSION_FLAG);
755
+ const session = -1 === at ? undefined : rest[at + 1];
756
+ return { kind: 'context', ...(session === undefined ? {} : { session }) };
857
757
  }
858
758
  case UPDATE_COMMAND:
859
759
  return { kind: 'update' };
@@ -1,4 +1,4 @@
1
1
  /** `reticle update` — install the latest server version, sync the app's SDK, and restart. */
2
- export declare function handleUpdate(): Promise<void>;
2
+ export declare function handleUpdate(cwd?: string): Promise<void>;
3
3
  /** `reticle rollback` — restore the previous server version and restart. */
4
4
  export declare function handleRollback(): Promise<void>;
@@ -6,15 +6,43 @@
6
6
  * for entirely different reasons.
7
7
  */
8
8
  import { checkForUpdate } from '../update/update-checker.js';
9
- import { updateTarget } from '../update/update-nudge.js';
9
+ import { isNewerVersion, updateTarget } from '../update/update-nudge.js';
10
10
  import { applyUpdate, rollback } from '../update/updater.js';
11
- import { refreshAgentRules, detectPackageManager, buildNodeIo, SILENT_HOST } from '@reticlehq/init';
11
+ import { refreshAgentRules, detectPackageManager, buildNodeIo, enclosingWorkspaceRoot, SILENT_HOST, } from '@reticlehq/init';
12
12
  import { SERVER_VERSION } from '../version/identity/server-version.js';
13
13
  import { log } from '../../log.js';
14
14
  import { readFileSync, writeFileSync, existsSync } from 'node:fs';
15
15
  import { join } from 'node:path';
16
16
  import { reticleDepsOf, sdkSyncCommand } from '../update/sdk-sync.js';
17
+ import { installedSdkVersion, readTextFile } from './launch/sdk-version-match.js';
17
18
  const WINDOWS_MANUAL_UPDATE = 'irm https://raw.githubusercontent.com/reticlehq/reticle/main/install/install.ps1 | iex';
19
+ /**
20
+ * What a person reads. `log` lines are JSON on stderr for the daemon's log, and a human running
21
+ * `reticle update` in a terminal used to see nothing else — not even that the restart was theirs.
22
+ */
23
+ const MSG_SDK_SYNCED = (version) => `Updated this app's Reticle SDK to ${version}. Now restart your dev server and reload the tab: ` +
24
+ 'a running dev server keeps serving the old SDK, overlay included.';
25
+ const MSG_SDK_SYNC_FAILED = (command) => `Could not update this app's Reticle SDK. Run \`${command}\`, then restart your dev server.`;
26
+ const MSG_SDK_LINKED = 'This app links its Reticle packages locally, so `reticle update` leaves them as they are.';
27
+ /** Dependency specs that point at a local copy, not the registry: rewriting one to a pin breaks it. */
28
+ const LOCAL_SPEC = /^(workspace|link|file|portal):/;
29
+ function linksLocally(manifest, packages) {
30
+ if ('object' !== typeof manifest || null === manifest)
31
+ return false;
32
+ const m = manifest;
33
+ return packages.some((name) => ['dependencies', 'devDependencies'].some((field) => {
34
+ const deps = m[field];
35
+ if ('object' !== typeof deps || null === deps)
36
+ return false;
37
+ const spec = deps[name];
38
+ return 'string' === typeof spec && LOCAL_SPEC.test(spec);
39
+ }));
40
+ }
41
+ const MSG_NO_SDK_HERE = "No Reticle SDK in this folder, so only the CLI was checked. Run `reticle update` in your app's " +
42
+ 'folder to bring its SDK up too.';
43
+ function say(line) {
44
+ process.stdout.write(`${line}\n`);
45
+ }
18
46
  /**
19
47
  * Bring the SDK in the CURRENT project to the version being installed.
20
48
  *
@@ -23,41 +51,65 @@ const WINDOWS_MANUAL_UPDATE = 'irm https://raw.githubusercontent.com/reticlehq/r
23
51
  * packages, simply has nothing to sync — that is a normal outcome, not a failure, and it must never
24
52
  * stop the CLI half from happening.
25
53
  */
26
- function syncProjectSdk(target) {
27
- const cwd = process.cwd();
54
+ function syncProjectSdk(target, cwd) {
28
55
  let manifest;
29
56
  try {
30
57
  manifest = JSON.parse(readFileSync(join(cwd, 'package.json'), 'utf8'));
31
58
  }
32
59
  catch {
60
+ say(MSG_NO_SDK_HERE);
33
61
  return; // not an app directory
34
62
  }
35
63
  const packages = reticleDepsOf(manifest);
64
+ if (linksLocally(manifest, packages)) {
65
+ say(MSG_SDK_LINKED);
66
+ return;
67
+ }
36
68
  // Nothing to trace and nothing to report: this reads the manifest and runs one package-manager
37
69
  // command. It never enters `runInit`, so there is no init outcome for a host to carry.
38
70
  const io = buildNodeIo(cwd, SILENT_HOST);
39
- const pm = detectPackageManager(new Set(io.rootFiles()), new Set(io.listDirs('node_modules')));
71
+ // A workspace member keeps its lockfile at the workspace root: read both, or an app in a pnpm
72
+ // workspace looks lockfile-less and is installed with npm.
73
+ const workspace = enclosingWorkspaceRoot(cwd, io);
74
+ const rootIo = workspace === undefined ? io : buildNodeIo(workspace, SILENT_HOST);
75
+ const pm = detectPackageManager(new Set([...io.rootFiles(), ...rootIo.rootFiles()]), new Set([...io.listDirs('node_modules'), ...rootIo.listDirs('node_modules')]));
40
76
  const cmd = sdkSyncCommand(pm, packages, target);
41
77
  if (null === cmd) {
42
78
  log('reticle_update_sdk', { synced: false, reason: 'no @reticlehq packages in this project' });
79
+ say(MSG_NO_SDK_HERE);
43
80
  return;
44
81
  }
45
82
  const ok = io.exec(cmd.command, cmd.args);
46
83
  log('reticle_update_sdk', { synced: ok, packages, to: target, packageManager: pm });
47
84
  if (!ok) {
85
+ const line = `${cmd.command} ${cmd.args.join(' ')}`;
48
86
  log('reticle_update_sdk_failed', {
49
- hint: `run \`${cmd.command} ${cmd.args.join(' ')}\` by hand, then restart the dev server`,
87
+ hint: `run \`${line}\` by hand, then restart the dev server`,
50
88
  });
89
+ say(MSG_SDK_SYNC_FAILED(line));
90
+ return;
51
91
  }
92
+ say(MSG_SDK_SYNCED(target));
52
93
  }
53
94
  /** `reticle update` — install the latest server version, sync the app's SDK, and restart. */
54
- export async function handleUpdate() {
95
+ export async function handleUpdate(cwd = process.cwd()) {
55
96
  try {
56
97
  const manifest = await checkForUpdate(SERVER_VERSION, () => Date.now());
57
98
  // Direction, not inequality: the registry being DIFFERENT is not the registry being newer, and
58
99
  // the old gate happily installed a downgrade — reported by a user. See updateTarget.
59
100
  const target = updateTarget(manifest);
60
101
  if (target === undefined) {
102
+ // The CLI being current says nothing about the app. A CLI from the installer or a fresh npx
103
+ // is on the latest release while the app keeps the SDK `init` pinned months ago, and this
104
+ // branch used to return before the sync — so the one command that should fix that pair
105
+ // answered "already on the latest version" and left the old overlay in the page.
106
+ const installed = installedSdkVersion(cwd, readTextFile);
107
+ if (installed === undefined)
108
+ say(MSG_NO_SDK_HERE);
109
+ // Only UP. A CLI that could not reach the registry also lands here, and an older one must
110
+ // never pin a newer app back to itself.
111
+ else if (isNewerVersion(SERVER_VERSION, installed))
112
+ syncProjectSdk(SERVER_VERSION, cwd);
61
113
  log('reticle_update', {
62
114
  ok: false,
63
115
  message: 'already on the latest version',
@@ -76,7 +128,7 @@ export async function handleUpdate() {
76
128
  // That is backwards: the people who most need better instructions are the ones already
77
129
  // installed and not getting value, and this is the moment they are touching the install anyway.
78
130
  // Only files that ALREADY carry the block are touched, and only inside the markers.
79
- const refreshed = refreshAgentRules(process.cwd(), {
131
+ const refreshed = refreshAgentRules(cwd, {
80
132
  read: (path) => (existsSync(path) ? readFileSync(path, 'utf8') : null),
81
133
  write: (path, content) => {
82
134
  writeFileSync(path, content, 'utf8');
@@ -91,7 +143,7 @@ export async function handleUpdate() {
91
143
  // Before the CLI swap because `applyUpdate` never returns (it execs and exits). If this half
92
144
  // fails the daemon is still the older one, which is the direction the HELLO check names clearly
93
145
  // and a re-run fixes; the reverse would leave a new daemon talking to an old page.
94
- syncProjectSdk(target);
146
+ syncProjectSdk(target, cwd);
95
147
  await applyUpdate(target); // calls process.exit; Claude Code restarts
96
148
  }
97
149
  catch (error) {
@@ -0,0 +1,33 @@
1
+ /**
2
+ * The `reticle` help text.
3
+ *
4
+ * `reticle --help` is short: the commands a person needs, one line each, in four groups. Every other
5
+ * command is still there and still works; `reticle help all` lists it, and `reticle <command> --help`
6
+ * carries the detail that used to sit in the one long page.
7
+ *
8
+ * The lines say `reticle <command>`, which is the bin this package installs. Copied into `npx` it is
9
+ * not: `npx reticle` resolves the PACKAGE named `reticle`, which belongs to somebody else, and npx
10
+ * will happily fetch and run it. So the npx spelling leads every page.
11
+ */
12
+ export declare const HelpGroup: {
13
+ readonly START: "Get started";
14
+ readonly CHECK: "Check your app";
15
+ readonly MACHINE: "Reticle on this machine";
16
+ readonly ACCOUNT: "Account";
17
+ /** Listed only by `reticle help all`. */
18
+ readonly MORE: "More commands";
19
+ };
20
+ export type HelpGroup = (typeof HelpGroup)[keyof typeof HelpGroup];
21
+ /** `reticle help all` and `reticle --help all`. */
22
+ export declare const HELP_ALL_TOPIC = "all";
23
+ /** `reticle --help`: printed by `help`, `--help` and under every usage error. */
24
+ export declare const CLI_USAGE: string;
25
+ /** `reticle help all`. */
26
+ export declare const CLI_USAGE_ALL: string;
27
+ /** Every command the help names, for checks that each one really parses. */
28
+ export declare const DOCUMENTED_COMMANDS: readonly string[];
29
+ /**
30
+ * The help for one topic: the short page, every command, or one command's detail. An old name
31
+ * answers with the page of the command that replaced it, and says so.
32
+ */
33
+ export declare function renderHelp(topic: string | undefined, renamed?: ReadonlyMap<string, string>): string;