@reticlehq/server 3.7.0 → 3.8.1

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 (578) hide show
  1. package/SKILL.md +59 -68
  2. package/bin/reticle.js +9 -2
  3. package/dist/command/cli/adhoc-suite.js +1 -1
  4. package/dist/command/cli/adhoc-verdict.d.ts +12 -0
  5. package/dist/command/cli/adhoc-verdict.js +62 -4
  6. package/dist/command/cli/answers/gate-hook-message.d.ts +2 -0
  7. package/dist/command/cli/answers/gate-hook-message.js +5 -1
  8. package/dist/command/cli/auth/cloud-session.d.ts +11 -19
  9. package/dist/command/cli/auth/cloud-session.js +23 -0
  10. package/dist/command/cli/auth/device-flow.d.ts +3 -37
  11. package/dist/command/cli/cli-doctor.js +66 -21
  12. package/dist/command/cli/cli-flow-commands.js +53 -11
  13. package/dist/command/cli/cli-kill.d.ts +8 -0
  14. package/dist/command/cli/cli-kill.js +43 -3
  15. package/dist/command/cli/cli-parse-feedback.d.ts +4 -0
  16. package/dist/command/cli/cli-parse-feedback.js +13 -1
  17. package/dist/command/cli/cli-parse-grammar.d.ts +1 -2
  18. package/dist/command/cli/cli-parse-grammar.js +1 -6
  19. package/dist/command/cli/cli-parse-serve.d.ts +24 -0
  20. package/dist/command/cli/cli-parse-serve.js +124 -0
  21. package/dist/command/cli/cli-parse.d.ts +12 -11
  22. package/dist/command/cli/cli-parse.js +100 -123
  23. package/dist/command/cli/cli-usage.d.ts +0 -11
  24. package/dist/command/cli/cli-usage.js +43 -16
  25. package/dist/command/cli/cli-verify.d.ts +1 -1
  26. package/dist/command/cli/cli-verify.js +29 -14
  27. package/dist/command/cli/cloud-cli.js +27 -9
  28. package/dist/command/cli/cloud-kit.js +3 -3
  29. package/dist/command/cli/cloud-link.d.ts +1 -20
  30. package/dist/command/cli/cloud-link.js +2 -0
  31. package/dist/command/cli/cloud-login.d.ts +6 -2
  32. package/dist/command/cli/cloud-login.js +13 -41
  33. package/dist/command/cli/config/checkout.d.ts +10 -0
  34. package/dist/command/cli/config/checkout.js +78 -0
  35. package/dist/command/cli/doctor/doctor-agent-link.d.ts +23 -0
  36. package/dist/command/cli/doctor/doctor-agent-link.js +28 -0
  37. package/dist/command/cli/doctor/doctor-coverage-line.js +1 -7
  38. package/dist/command/cli/doctor/doctor-rows.d.ts +4 -0
  39. package/dist/command/cli/doctor/doctor-rows.js +4 -0
  40. package/dist/command/cli/drive/drive-attach.d.ts +5 -0
  41. package/dist/command/cli/drive/drive-attach.js +21 -1
  42. package/dist/command/cli/hook/codex-transcript.d.ts +20 -0
  43. package/dist/command/cli/hook/codex-transcript.js +224 -0
  44. package/dist/command/cli/hook/episode-structure.d.ts +24 -0
  45. package/dist/command/cli/hook/episode-structure.js +138 -0
  46. package/dist/command/cli/hook/hook-command.d.ts +9 -0
  47. package/dist/command/cli/hook/hook-command.js +211 -0
  48. package/dist/command/cli/hook/hook-fast.d.ts +31 -0
  49. package/dist/command/cli/hook/hook-fast.js +136 -0
  50. package/dist/command/cli/hook/prompt-hook.d.ts +30 -0
  51. package/dist/command/cli/hook/prompt-hook.js +199 -0
  52. package/dist/command/cli/hook/tool-hook.d.ts +21 -0
  53. package/dist/command/cli/hook/tool-hook.js +259 -0
  54. package/dist/command/cli/launch/cli-launch.d.ts +2 -0
  55. package/dist/command/cli/launch/cli-launch.js +22 -2
  56. package/dist/command/cli/lifecycle/daemon-lifecycle.js +28 -2
  57. package/dist/command/cli/mcp-command.d.ts +9 -0
  58. package/dist/command/cli/mcp-command.js +127 -41
  59. package/dist/command/cli/open-navigate.d.ts +43 -0
  60. package/dist/command/cli/open-navigate.js +85 -0
  61. package/dist/command/cli/ports/port-holder.d.ts +16 -4
  62. package/dist/command/cli/ports/port-holder.js +58 -12
  63. package/dist/command/cli/ports/resolve/cli-port.js +18 -2
  64. package/dist/command/cli/project-name.d.ts +1 -7
  65. package/dist/command/cli/project-name.js +1 -0
  66. package/dist/command/cli/report-command.d.ts +8 -2
  67. package/dist/command/cli/report-command.js +95 -18
  68. package/dist/command/cli/status-fields.d.ts +9 -2
  69. package/dist/command/cli/status-fields.js +148 -4
  70. package/dist/command/cli/try-command.d.ts +3 -4
  71. package/dist/command/cli/try-command.js +6 -11
  72. package/dist/command/cli/verify-results.d.ts +4 -1
  73. package/dist/command/cli/verify-results.js +3 -1
  74. package/dist/command/cli.d.ts +1 -7
  75. package/dist/command/cli.js +79 -160
  76. package/dist/command/daemon/daemon-resilience.d.ts +6 -1
  77. package/dist/command/daemon/daemon-resilience.js +31 -18
  78. package/dist/command/daemon/daemon.d.ts +11 -0
  79. package/dist/command/daemon/daemon.js +70 -2
  80. package/dist/command/daemon/lifetime/daemon-usefulness.d.ts +2 -0
  81. package/dist/command/daemon/lifetime/daemon-usefulness.js +13 -2
  82. package/dist/command/daemon/wake-decision.js +4 -2
  83. package/dist/command/daemon/win32-escape.d.ts +32 -0
  84. package/dist/command/daemon/win32-escape.js +119 -0
  85. package/dist/command/setup/agent-configs.d.ts +9 -0
  86. package/dist/command/setup/agent-configs.js +9 -0
  87. package/dist/command/setup/auto-approve.d.ts +10 -3
  88. package/dist/command/setup/auto-approve.js +51 -3
  89. package/dist/command/setup/bringup/dev-server-files.d.ts +1 -9
  90. package/dist/command/setup/bringup/dev-server-wait.js +5 -1
  91. package/dist/command/setup/bringup/ensure-daemon.js +4 -7
  92. package/dist/command/setup/init/init-host.js +6 -0
  93. package/dist/command/setup/init/init-port.js +5 -4
  94. package/dist/command/setup/init/init-runtime.js +7 -1
  95. package/dist/command/setup/node-effects.d.ts +8 -0
  96. package/dist/command/setup/node-effects.js +36 -4
  97. package/dist/command/setup/probe/dev-port.d.ts +26 -0
  98. package/dist/command/setup/probe/dev-port.js +117 -0
  99. package/dist/command/setup/probe/page-probe.d.ts +1 -1
  100. package/dist/command/setup/probe/page-probe.js +11 -3
  101. package/dist/command/setup/remaining-steps.d.ts +0 -7
  102. package/dist/command/setup/remaining-steps.js +3 -2
  103. package/dist/command/setup/run-setup.d.ts +11 -0
  104. package/dist/command/setup/run-setup.js +33 -5
  105. package/dist/command/setup/setup-command.d.ts +2 -0
  106. package/dist/command/setup/setup-command.js +22 -4
  107. package/dist/command/update/updater.d.ts +1 -6
  108. package/dist/command/update/updater.js +4 -5
  109. package/dist/command/update/version-seen.d.ts +24 -0
  110. package/dist/command/update/version-seen.js +65 -0
  111. package/dist/command/version/peer-announce.d.ts +9 -1
  112. package/dist/command/version/peer-announce.js +25 -2
  113. package/dist/command/version/sdk-fix.d.ts +5 -6
  114. package/dist/command/version/sdk-fix.js +17 -32
  115. package/dist/command/version/version-skew.d.ts +16 -1
  116. package/dist/command/version/version-skew.js +84 -10
  117. package/dist/features/crawl/crawl-tools.js +2 -2
  118. package/dist/features/crawl/crawl.js +2 -0
  119. package/dist/features/exhaust/ledger.d.ts +15 -96
  120. package/dist/features/exhaust/ledger.js +3 -3
  121. package/dist/features/harness/drive-runs.d.ts +28 -4
  122. package/dist/features/harness/drive-runs.js +99 -7
  123. package/dist/features/harness/drivers.d.ts +1 -1
  124. package/dist/features/harness/drivers.js +1 -1
  125. package/dist/features/harness/harness.d.ts +5 -0
  126. package/dist/features/harness/harness.js +24 -12
  127. package/dist/features/harness/platform/platform-drives.d.ts +7 -1
  128. package/dist/features/harness/platform/platform-drives.js +12 -7
  129. package/dist/features/harness/platform/refusal.d.ts +1 -1
  130. package/dist/features/harness/platform/refusal.js +4 -4
  131. package/dist/features/harness/platform/remote-drive.js +70 -28
  132. package/dist/features/harness/platform/server-driver.js +22 -1
  133. package/dist/features/harness/platform-config.d.ts +1 -10
  134. package/dist/features/harness/platform-config.js +0 -20
  135. package/dist/features/license/license.d.ts +2 -14
  136. package/dist/features/visual/step-shots.d.ts +33 -1
  137. package/dist/features/visual/step-shots.js +155 -1
  138. package/dist/features/visual/visual-tools.js +12 -4
  139. package/dist/hooks/coding-agents.d.ts +6 -0
  140. package/dist/hooks/coding-agents.js +24 -3
  141. package/dist/hooks/episode-stamp.d.ts +32 -0
  142. package/dist/hooks/episode-stamp.js +61 -0
  143. package/dist/hooks/hook-commands.js +19 -9
  144. package/dist/index.d.ts +5 -1
  145. package/dist/index.js +66 -24
  146. package/dist/judgement/app-graph/journal-steps.d.ts +8 -0
  147. package/dist/judgement/app-graph/journal-steps.js +92 -0
  148. package/dist/judgement/capsule/capsule-store.d.ts +2 -39
  149. package/dist/judgement/domain/domain-model.js +1 -10
  150. package/dist/judgement/domain/domain-tools.js +4 -2
  151. package/dist/judgement/runs/artifact/run-store.d.ts +28 -8
  152. package/dist/judgement/runs/artifact/run-store.js +153 -28
  153. package/dist/judgement/runs/default-run-id.d.ts +3 -1
  154. package/dist/judgement/runs/default-run-id.js +15 -3
  155. package/dist/judgement/runs/drive-run.d.ts +3 -3
  156. package/dist/judgement/runs/drive-run.js +11 -7
  157. package/dist/judgement/runs/run-ledger.d.ts +21 -0
  158. package/dist/judgement/runs/run-ledger.js +143 -0
  159. package/dist/judgement/runs/runner-port.d.ts +1 -1
  160. package/dist/judgement/runs/runner-port.js +8 -2
  161. package/dist/judgement/runs/verification-sync.d.ts +4 -3
  162. package/dist/judgement/runs/verification-sync.js +27 -5
  163. package/dist/language/flows/affected-tools.js +2 -1
  164. package/dist/language/flows/annotate-notes/annotate.js +8 -3
  165. package/dist/language/flows/annotate-tools.js +1 -1
  166. package/dist/language/flows/change/affected.d.ts +8 -0
  167. package/dist/language/flows/change/affected.js +20 -7
  168. package/dist/language/flows/decision.js +19 -4
  169. package/dist/language/flows/fields/flow-secret-field.d.ts +9 -0
  170. package/dist/language/flows/fields/flow-secret-field.js +67 -5
  171. package/dist/language/flows/flow-anchor.d.ts +5 -0
  172. package/dist/language/flows/flow-anchor.js +4 -0
  173. package/dist/language/flows/flow-cross-step.d.ts +7 -1
  174. package/dist/language/flows/flow-cross-step.js +9 -0
  175. package/dist/language/flows/flow-expect-grammar.js +15 -10
  176. package/dist/language/flows/flow-intent.js +6 -1
  177. package/dist/language/flows/flow-journey.d.ts +8 -0
  178. package/dist/language/flows/flow-journey.js +13 -0
  179. package/dist/language/flows/flow-lease.d.ts +27 -0
  180. package/dist/language/flows/flow-lease.js +59 -0
  181. package/dist/language/flows/flow-replay-run.d.ts +1 -87
  182. package/dist/language/flows/flow-replay-run.js +111 -310
  183. package/dist/language/flows/flow-replay.js +21 -19
  184. package/dist/language/flows/flow-replayable.d.ts +38 -0
  185. package/dist/language/flows/flow-replayable.js +179 -0
  186. package/dist/language/flows/flow-start-path.d.ts +108 -0
  187. package/dist/language/flows/flow-start-path.js +313 -0
  188. package/dist/language/flows/flow-step-runners.d.ts +23 -2
  189. package/dist/language/flows/flow-step-runners.js +191 -32
  190. package/dist/language/flows/flow-store-for-session.d.ts +8 -1
  191. package/dist/language/flows/flow-store-for-session.js +6 -0
  192. package/dist/language/flows/flow-tools.d.ts +2 -23
  193. package/dist/language/flows/flow-tools.js +63 -113
  194. package/dist/language/flows/flows.d.ts +4 -6
  195. package/dist/language/flows/flows.js +90 -15
  196. package/dist/language/flows/heal-run.d.ts +10 -4
  197. package/dist/language/flows/heal-run.js +26 -9
  198. package/dist/language/flows/recording/flake.d.ts +3 -27
  199. package/dist/language/flows/recording/flake.js +1 -1
  200. package/dist/language/flows/recording/recording-backtrack.js +1 -4
  201. package/dist/language/flows/recording/tape/recordings.d.ts +11 -1
  202. package/dist/language/flows/recording/tape/recordings.js +9 -3
  203. package/dist/language/flows/replay.d.ts +25 -5
  204. package/dist/language/flows/replay.js +83 -16
  205. package/dist/language/flows/stores/assertion-tiers-store.js +1 -1
  206. package/dist/language/flows/suite/coverage.d.ts +9 -0
  207. package/dist/language/flows/suite/coverage.js +12 -1
  208. package/dist/language/flows/suite-selection.d.ts +25 -0
  209. package/dist/language/flows/suite-selection.js +41 -9
  210. package/dist/machine/git-tracks.d.ts +6 -0
  211. package/dist/machine/git-tracks.js +36 -0
  212. package/dist/memory/cloud/background-sync.d.ts +25 -0
  213. package/dist/memory/cloud/background-sync.js +79 -0
  214. package/dist/memory/cloud/cloud-config.d.ts +12 -1
  215. package/dist/memory/cloud/cloud-config.js +39 -13
  216. package/dist/memory/cloud/cloud-sync.d.ts +3 -24
  217. package/dist/memory/cloud/cloud-sync.js +5 -2
  218. package/dist/memory/cloud/harness-config.d.ts +0 -7
  219. package/dist/memory/cloud/memory-scope.d.ts +19 -0
  220. package/dist/memory/cloud/memory-scope.js +48 -0
  221. package/dist/memory/cloud/sync-answer.d.ts +43 -0
  222. package/dist/memory/cloud/sync-answer.js +42 -0
  223. package/dist/memory/cloud/sync-cycle.d.ts +40 -10
  224. package/dist/memory/cloud/sync-cycle.js +97 -144
  225. package/dist/memory/cloud/sync-daemon.d.ts +50 -3
  226. package/dist/memory/cloud/sync-daemon.js +473 -83
  227. package/dist/memory/cloud/sync-describe.d.ts +28 -0
  228. package/dist/memory/cloud/sync-describe.js +92 -0
  229. package/dist/memory/cloud/sync-disk.d.ts +9 -1
  230. package/dist/memory/cloud/sync-disk.js +137 -33
  231. package/dist/memory/cloud/sync-flow-versions.d.ts +26 -0
  232. package/dist/memory/cloud/sync-flow-versions.js +42 -0
  233. package/dist/memory/impact/impact-store.js +32 -15
  234. package/dist/memory/intent/intent-shard.d.ts +41 -266
  235. package/dist/memory/intent/intent-tools.js +20 -61
  236. package/dist/memory/intent/record-request.d.ts +27 -0
  237. package/dist/memory/intent/record-request.js +88 -0
  238. package/dist/memory/intent/settled-words.js +9 -1
  239. package/dist/memory/journal/drive-flow.d.ts +3 -0
  240. package/dist/memory/journal/drive-flow.js +11 -41
  241. package/dist/memory/journal/envelope-store.js +1 -1
  242. package/dist/memory/journal/envelope.d.ts +6 -154
  243. package/dist/memory/journal/episode-log.d.ts +107 -0
  244. package/dist/memory/journal/episode-log.js +302 -0
  245. package/dist/memory/journal/journal-recorder.d.ts +7 -0
  246. package/dist/memory/journal/journal-recorder.js +22 -9
  247. package/dist/memory/journal/on-disk/ambient-file.d.ts +1 -7
  248. package/dist/memory/journal/on-disk/ambient-file.js +1 -1
  249. package/dist/memory/journal/on-disk/workspace-gitignore.d.ts +24 -3
  250. package/dist/memory/journal/on-disk/workspace-gitignore.js +38 -7
  251. package/dist/memory/journal/on-disk/workspace-tiers.js +7 -0
  252. package/dist/memory/journal/self-observation.js +3 -1
  253. package/dist/memory/journal/session-end.js +23 -9
  254. package/dist/memory/journal/session-journal.js +39 -20
  255. package/dist/memory/project/artifact-root-resolver.d.ts +14 -1
  256. package/dist/memory/project/artifact-root-resolver.js +68 -23
  257. package/dist/memory/project/artifact-root.d.ts +17 -3
  258. package/dist/memory/project/artifact-root.js +47 -9
  259. package/dist/memory/project/fs/fs-port.d.ts +5 -0
  260. package/dist/memory/project/fs/fs-port.js +13 -0
  261. package/dist/memory/project/learned-routes.d.ts +3 -4
  262. package/dist/memory/project/learned-routes.js +3 -11
  263. package/dist/memory/project/link-directory.js +5 -2
  264. package/dist/memory/project/root-claims.d.ts +3 -1
  265. package/dist/memory/project/root-claims.js +41 -7
  266. package/dist/memory/project/session-root.d.ts +1 -1
  267. package/dist/memory/project/session-root.js +1 -15
  268. package/dist/memory/project/sync-status.js +5 -6
  269. package/dist/memory/recall/memory-tools.js +2 -2
  270. package/dist/memory/recall/platform-memory.d.ts +3 -1
  271. package/dist/memory/recall/platform-memory.js +9 -1
  272. package/dist/memory/recall/project-memory.js +15 -19
  273. package/dist/portal/bridge/auth-failure-reason.d.ts +13 -0
  274. package/dist/portal/bridge/auth-failure-reason.js +19 -0
  275. package/dist/portal/bridge/bridge.d.ts +19 -4
  276. package/dist/portal/bridge/bridge.js +150 -177
  277. package/dist/portal/bridge/harness-request.d.ts +15 -0
  278. package/dist/portal/bridge/harness-request.js +19 -0
  279. package/dist/portal/bridge/origin/origin-follow.d.ts +46 -0
  280. package/dist/portal/bridge/origin/origin-follow.js +110 -0
  281. package/dist/portal/bridge/pairing-token.d.ts +6 -0
  282. package/dist/portal/bridge/pairing-token.js +47 -16
  283. package/dist/portal/bridge/protocol-skew.d.ts +27 -2
  284. package/dist/portal/bridge/protocol-skew.js +66 -2
  285. package/dist/portal/bridge/session-nonces.d.ts +46 -0
  286. package/dist/portal/bridge/session-nonces.js +72 -0
  287. package/dist/portal/input/viewport-tools.d.ts +31 -0
  288. package/dist/portal/input/viewport-tools.js +106 -15
  289. package/dist/portal/pool/bounded-close.d.ts +23 -0
  290. package/dist/portal/pool/bounded-close.js +38 -0
  291. package/dist/portal/pool/browser-pool.d.ts +44 -39
  292. package/dist/portal/pool/browser-pool.js +247 -95
  293. package/dist/portal/pool/context-permissions.d.ts +9 -1
  294. package/dist/portal/pool/context-permissions.js +26 -0
  295. package/dist/portal/pool/lease-emulation.d.ts +37 -0
  296. package/dist/portal/pool/lease-emulation.js +29 -0
  297. package/dist/portal/pool/playwright-launcher.d.ts +6 -0
  298. package/dist/portal/pool/playwright-launcher.js +74 -7
  299. package/dist/portal/pool/pool-contract.d.ts +23 -1
  300. package/dist/portal/pool/pool-lease.d.ts +128 -0
  301. package/dist/portal/pool/pool-lease.js +49 -0
  302. package/dist/portal/pool/zero-install.d.ts +8 -1
  303. package/dist/portal/pool/zero-install.js +24 -2
  304. package/dist/portal/production/production-activation.d.ts +136 -0
  305. package/dist/portal/production/production-activation.js +173 -0
  306. package/dist/portal/production/production-drive.d.ts +52 -0
  307. package/dist/portal/production/production-drive.js +301 -0
  308. package/dist/portal/production/production-hello.d.ts +23 -0
  309. package/dist/portal/production/production-hello.js +23 -0
  310. package/dist/portal/realm/web-realm.js +42 -15
  311. package/dist/portal/session/control-envelope.d.ts +1 -1
  312. package/dist/portal/session/dev-server/served-document.d.ts +0 -5
  313. package/dist/portal/session/dev-server/served-document.js +6 -8
  314. package/dist/portal/session/facts/handshake-facts.d.ts +8 -1
  315. package/dist/portal/session/first-run-wiring.d.ts +3 -36
  316. package/dist/portal/session/first-run-wiring.js +10 -103
  317. package/dist/portal/session/live-control-tools.js +61 -19
  318. package/dist/portal/session/no-session-next-action.d.ts +11 -0
  319. package/dist/portal/session/no-session-next-action.js +40 -15
  320. package/dist/portal/session/no-session-watch.d.ts +7 -0
  321. package/dist/portal/session/no-session-watch.js +67 -23
  322. package/dist/portal/session/output-budget.d.ts +10 -0
  323. package/dist/portal/session/output-budget.js +16 -0
  324. package/dist/portal/session/presence/session-lease.d.ts +2 -0
  325. package/dist/portal/session/presence/session-lease.js +8 -0
  326. package/dist/portal/session/recorded-gaps.d.ts +15 -11
  327. package/dist/portal/session/recorded-gaps.js +39 -18
  328. package/dist/portal/session/serving-directory.d.ts +24 -2
  329. package/dist/portal/session/serving-directory.js +93 -5
  330. package/dist/portal/session/session-info.d.ts +26 -0
  331. package/dist/portal/session/session-info.js +20 -0
  332. package/dist/portal/session/session-manager.d.ts +35 -3
  333. package/dist/portal/session/session-manager.js +69 -14
  334. package/dist/portal/session/session-successor.js +1 -9
  335. package/dist/portal/session/session-tools.js +22 -4
  336. package/dist/portal/session/session.d.ts +10 -10
  337. package/dist/portal/session/session.js +37 -29
  338. package/dist/portal/session/zero-install-first-call.d.ts +7 -2
  339. package/dist/portal/session/zero-install-first-call.js +43 -20
  340. package/dist/start-wiring.d.ts +2 -2
  341. package/dist/start-wiring.js +17 -3
  342. package/dist/status-payload.d.ts +11 -1
  343. package/dist/status-payload.js +7 -1
  344. package/dist/surface/agent-presence-grace.d.ts +11 -0
  345. package/dist/surface/agent-presence-grace.js +34 -0
  346. package/dist/surface/http-server.d.ts +12 -1
  347. package/dist/surface/http-server.js +64 -15
  348. package/dist/surface/mcp/faults/mcp-outage.d.ts +12 -2
  349. package/dist/surface/mcp/faults/mcp-outage.js +19 -1
  350. package/dist/surface/mcp/mcp-proxy.d.ts +17 -74
  351. package/dist/surface/mcp/mcp-proxy.js +194 -267
  352. package/dist/surface/mcp/mcp.d.ts +20 -3
  353. package/dist/surface/mcp/mcp.js +88 -25
  354. package/dist/surface/mcp/proxy/drive-calls.d.ts +44 -0
  355. package/dist/surface/mcp/proxy/drive-calls.js +114 -5
  356. package/dist/surface/mcp/proxy/proxy-boot.d.ts +11 -0
  357. package/dist/surface/mcp/proxy/proxy-boot.js +1 -0
  358. package/dist/surface/mcp/proxy/proxy-daemon-probe.d.ts +6 -0
  359. package/dist/surface/mcp/proxy/proxy-daemon-probe.js +14 -1
  360. package/dist/surface/mcp/proxy/proxy-handshake.d.ts +34 -2
  361. package/dist/surface/mcp/proxy/proxy-handshake.js +76 -8
  362. package/dist/surface/mcp/server-instructions.js +35 -16
  363. package/dist/surface/mcp/shared-params.d.ts +8 -0
  364. package/dist/surface/mcp/shared-params.js +15 -1
  365. package/dist/surface/mcp/sse-frame-parser.d.ts +11 -0
  366. package/dist/surface/mcp/sse-frame-parser.js +18 -0
  367. package/dist/surface/mcp/surface-vocabulary.d.ts +2 -0
  368. package/dist/surface/mcp/surface-vocabulary.js +13 -0
  369. package/dist/surface/mcp/tool-catalog-cache.d.ts +2 -0
  370. package/dist/surface/mcp/tool-catalog-cache.js +14 -4
  371. package/dist/surface/tools/account-tool.d.ts +4 -3
  372. package/dist/surface/tools/account-tool.js +20 -31
  373. package/dist/surface/tools/act/act-danger.d.ts +2 -0
  374. package/dist/surface/tools/act/act-danger.js +41 -14
  375. package/dist/surface/tools/act/act-observation.d.ts +11 -0
  376. package/dist/surface/tools/act/act-observation.js +33 -0
  377. package/dist/surface/tools/act/act-preflight.js +10 -3
  378. package/dist/surface/tools/act/act-sequence-retry.js +2 -1
  379. package/dist/surface/tools/act/act-target.js +19 -5
  380. package/dist/surface/tools/act/durable.js +1 -1
  381. package/dist/surface/tools/act/navigation/navigate-arrival.d.ts +9 -7
  382. package/dist/surface/tools/act/navigation/navigate-arrival.js +11 -14
  383. package/dist/surface/tools/act/unsettled-find.d.ts +36 -0
  384. package/dist/surface/tools/act/unsettled-find.js +71 -0
  385. package/dist/surface/tools/act-sequence-tool.js +53 -24
  386. package/dist/surface/tools/act-tools.d.ts +2 -3
  387. package/dist/surface/tools/act-tools.js +49 -47
  388. package/dist/surface/tools/agent/compact-envelope.d.ts +2 -2
  389. package/dist/surface/tools/agent/for-the-agent.js +41 -3
  390. package/dist/surface/tools/assert/assert-grade.js +8 -3
  391. package/dist/surface/tools/assert/assert-verdict.js +4 -2
  392. package/dist/surface/tools/browser-tools.js +7 -4
  393. package/dist/surface/tools/chat-drives.js +50 -25
  394. package/dist/surface/tools/coverage-tools.js +1 -1
  395. package/dist/surface/tools/dynamic-tools.d.ts +8 -0
  396. package/dist/surface/tools/dynamic-tools.js +89 -34
  397. package/dist/surface/tools/empty-session-list.d.ts +18 -25
  398. package/dist/surface/tools/empty-session-list.js +67 -38
  399. package/dist/surface/tools/error-recovery.d.ts +17 -7
  400. package/dist/surface/tools/error-recovery.js +53 -20
  401. package/dist/surface/tools/explore-tools.d.ts +10 -0
  402. package/dist/surface/tools/explore-tools.js +72 -19
  403. package/dist/surface/tools/feedback-tools.js +23 -2
  404. package/dist/surface/tools/gap-novelty.d.ts +6 -0
  405. package/dist/surface/tools/gap-novelty.js +9 -0
  406. package/dist/surface/tools/gaps/capability-absences.js +4 -3
  407. package/dist/surface/tools/harness-explore.d.ts +1 -1
  408. package/dist/surface/tools/harness-explore.js +6 -4
  409. package/dist/surface/tools/harness-gate.d.ts +43 -21
  410. package/dist/surface/tools/harness-gate.js +55 -81
  411. package/dist/surface/tools/harness-script.d.ts +2 -0
  412. package/dist/surface/tools/harness-script.js +11 -6
  413. package/dist/surface/tools/harness-toolset.js +3 -4
  414. package/dist/surface/tools/invoke-tool.d.ts +0 -8
  415. package/dist/surface/tools/invoke-tool.js +164 -178
  416. package/dist/surface/tools/lease-hint.d.ts +9 -0
  417. package/dist/surface/tools/lease-hint.js +22 -3
  418. package/dist/surface/tools/lease-permissions.d.ts +1 -1
  419. package/dist/surface/tools/lease-readiness.d.ts +55 -0
  420. package/dist/surface/tools/lease-readiness.js +150 -2
  421. package/dist/surface/tools/lease-tools.d.ts +3 -75
  422. package/dist/surface/tools/lease-tools.js +124 -188
  423. package/dist/surface/tools/map-tools.d.ts +20 -0
  424. package/dist/surface/tools/map-tools.js +145 -0
  425. package/dist/surface/tools/merge-tools.js +11 -7
  426. package/dist/surface/tools/next-step.js +6 -3
  427. package/dist/surface/tools/observe-tools.js +46 -35
  428. package/dist/surface/tools/platform-moment.d.ts +3 -12
  429. package/dist/surface/tools/platform-moment.js +12 -24
  430. package/dist/surface/tools/read/complete-snapshot.d.ts +7 -1
  431. package/dist/surface/tools/read/complete-snapshot.js +13 -2
  432. package/dist/surface/tools/read/query-paginate.js +6 -0
  433. package/dist/surface/tools/read/query-shape.d.ts +9 -0
  434. package/dist/surface/tools/read/query-shape.js +15 -0
  435. package/dist/surface/tools/read/snapshot-unmounted-note.d.ts +1 -0
  436. package/dist/surface/tools/read/snapshot-unmounted-note.js +73 -0
  437. package/dist/surface/tools/read-tools.js +5 -5
  438. package/dist/surface/tools/real-input-attempt.d.ts +11 -0
  439. package/dist/surface/tools/real-input-attempt.js +206 -38
  440. package/dist/surface/tools/reconcile-tools.js +21 -8
  441. package/dist/surface/tools/reticle-result.d.ts +3 -0
  442. package/dist/surface/tools/reticle-result.js +8 -1
  443. package/dist/surface/tools/run-report.d.ts +22 -0
  444. package/dist/surface/tools/run-report.js +141 -0
  445. package/dist/surface/tools/session-ports.d.ts +57 -0
  446. package/dist/surface/tools/session-ports.js +102 -0
  447. package/dist/surface/tools/tool-kit.d.ts +58 -4
  448. package/dist/surface/tools/tool-kit.js +140 -6
  449. package/dist/surface/tools/tool-surface.d.ts +2 -0
  450. package/dist/surface/tools/tool-surface.js +45 -0
  451. package/dist/surface/tools/tools.js +49 -87
  452. package/dist/telemetry/automation-hint.d.ts +5 -0
  453. package/dist/telemetry/automation-hint.js +7 -0
  454. package/dist/telemetry/cli-telemetry.d.ts +22 -0
  455. package/dist/telemetry/cli-telemetry.js +80 -11
  456. package/dist/telemetry/daemon-telemetry.d.ts +3 -1
  457. package/dist/telemetry/daemon-telemetry.js +9 -2
  458. package/dist/telemetry/feedback-cli.d.ts +1 -1
  459. package/dist/telemetry/feedback-cli.js +8 -3
  460. package/dist/telemetry/feedback.d.ts +1 -1
  461. package/dist/telemetry/feedback.js +51 -4
  462. package/dist/telemetry/harness-run.d.ts +3 -3
  463. package/dist/telemetry/harness-run.js +18 -7
  464. package/dist/telemetry/hud-events.d.ts +1 -1
  465. package/dist/telemetry/hud-metrics.d.ts +6 -3
  466. package/dist/telemetry/hud-metrics.js +20 -8
  467. package/dist/telemetry/install-source.js +1 -1
  468. package/dist/telemetry/mcp-connection.d.ts +1 -1
  469. package/dist/telemetry/mcp-connection.js +21 -2
  470. package/dist/telemetry/onboarding-firsts.d.ts +6 -1
  471. package/dist/telemetry/onboarding-firsts.js +41 -1
  472. package/dist/telemetry/proxy-telemetry.d.ts +42 -0
  473. package/dist/telemetry/proxy-telemetry.js +70 -1
  474. package/dist/telemetry/session-metrics.d.ts +1 -3
  475. package/dist/telemetry/session-metrics.js +16 -12
  476. package/dist/telemetry/telemetry.d.ts +9 -1
  477. package/dist/telemetry/telemetry.js +16 -1
  478. package/dist/telemetry/verification-of.d.ts +3 -1
  479. package/dist/telemetry/verification-of.js +7 -1
  480. package/dist/wire-journal.js +12 -2
  481. package/docs/README.md +4 -2
  482. package/docs/actions.mdx +7 -6
  483. package/docs/adapters.md +2 -1
  484. package/docs/agent-cheatsheet.md +19 -5
  485. package/docs/architecture.md +13 -10
  486. package/docs/autodrive.md +6 -5
  487. package/docs/benchmarks.md +2 -2
  488. package/docs/capabilities.mdx +1 -1
  489. package/docs/cli/affected.mdx +1 -1
  490. package/docs/cli/cloud.mdx +6 -6
  491. package/docs/cli/doctor.mdx +3 -1
  492. package/docs/cli/feedback.mdx +11 -7
  493. package/docs/cli/gate.mdx +1 -1
  494. package/docs/cli/help.mdx +1 -1
  495. package/docs/cli/init.mdx +20 -16
  496. package/docs/cli/mcp.mdx +5 -2
  497. package/docs/cli/open.mdx +5 -2
  498. package/docs/cli/report.mdx +1 -1
  499. package/docs/cli/restart.mdx +1 -1
  500. package/docs/cli/rollback.mdx +4 -4
  501. package/docs/cli/serve.mdx +7 -5
  502. package/docs/cli/setup.mdx +1 -1
  503. package/docs/cli/status.mdx +6 -2
  504. package/docs/cli/stop.mdx +3 -3
  505. package/docs/cli/telemetry.mdx +5 -1
  506. package/docs/cli/try.mdx +8 -8
  507. package/docs/cli/update.mdx +8 -5
  508. package/docs/cli/verify.mdx +12 -5
  509. package/docs/cli/version.mdx +1 -1
  510. package/docs/cli.mdx +10 -6
  511. package/docs/debugging.md +1 -1
  512. package/docs/deploy-checks.md +8 -6
  513. package/docs/desktop.mdx +14 -18
  514. package/docs/enterprise.md +6 -6
  515. package/docs/environment.mdx +5 -3
  516. package/docs/faq.mdx +9 -6
  517. package/docs/first-drive.md +19 -9
  518. package/docs/flows.md +3 -4
  519. package/docs/for-agents.md +1 -1
  520. package/docs/frameworks.mdx +34 -11
  521. package/docs/getting-started.md +46 -29
  522. package/docs/http-transport.md +2 -2
  523. package/docs/human-control.md +8 -8
  524. package/docs/index.mdx +2 -2
  525. package/docs/install-agentic.mdx +18 -19
  526. package/docs/install-manual.mdx +8 -4
  527. package/docs/integration-patterns.md +5 -5
  528. package/docs/multi-agent-testing.md +7 -5
  529. package/docs/packages/browser.mdx +34 -2
  530. package/docs/packages/core.mdx +2 -1
  531. package/docs/packages/electron.mdx +15 -3
  532. package/docs/packages/eslint-plugin.mdx +1 -1
  533. package/docs/packages/next.mdx +17 -5
  534. package/docs/packages/react.mdx +8 -1
  535. package/docs/packages/server.mdx +3 -3
  536. package/docs/packages/tauri.mdx +3 -3
  537. package/docs/packages/vite-plugin.mdx +1 -1
  538. package/docs/packages.mdx +19 -6
  539. package/docs/platform-integration.md +12 -4
  540. package/docs/predicates.mdx +18 -7
  541. package/docs/production-mode.md +108 -0
  542. package/docs/prompt-capture.md +99 -0
  543. package/docs/quickstart.mdx +14 -12
  544. package/docs/recipes.mdx +9 -8
  545. package/docs/required-checks.md +3 -2
  546. package/docs/skill-file.mdx +4 -3
  547. package/docs/skill-setup.md +2 -2
  548. package/docs/skill.md +62 -70
  549. package/docs/state-files.md +1 -0
  550. package/docs/state-management.mdx +11 -9
  551. package/docs/system-map.md +14 -13
  552. package/docs/telemetry.md +32 -24
  553. package/docs/testing.md +9 -5
  554. package/docs/tools/act-and-wait.mdx +17 -13
  555. package/docs/tools/act-sequence.mdx +40 -66
  556. package/docs/tools/act.mdx +7 -5
  557. package/docs/tools/assert.mdx +1 -1
  558. package/docs/tools/look.mdx +1 -1
  559. package/docs/tools/navigate.mdx +1 -1
  560. package/docs/tools/network.mdx +13 -11
  561. package/docs/tools/overview.mdx +3 -3
  562. package/docs/tools/query.mdx +3 -3
  563. package/docs/tools/session-and-feedback.mdx +9 -6
  564. package/docs/tools/sessions.mdx +7 -0
  565. package/docs/tools/snapshot.mdx +9 -7
  566. package/docs/tools/tools-and-run.mdx +11 -10
  567. package/docs/tools/verify.mdx +1 -1
  568. package/docs/troubleshooting.mdx +21 -9
  569. package/docs/usage.md +58 -43
  570. package/docs/use-cases.mdx +2 -2
  571. package/docs/vs-chrome-devtools-mcp.mdx +5 -5
  572. package/docs/vs-playwright-mcp.mdx +5 -4
  573. package/docs/what-is-recorded.md +12 -7
  574. package/docs/what-is-reticle.mdx +2 -2
  575. package/docs/why-reticle.mdx +1 -1
  576. package/package.json +9 -12
  577. package/dist/command/dev/stale-issue-guard.d.ts +0 -34
  578. package/dist/command/dev/stale-issue-guard.js +0 -69
@@ -43,111 +43,39 @@ export type IntentStatus = (typeof IntentStatus)[keyof typeof IntentStatus];
43
43
  declare const IntentRecordSchema: z.ZodObject<{
44
44
  id: z.ZodString;
45
45
  statement: z.ZodString;
46
- state: z.ZodEnum<["declared", "bound", "proved"]>;
46
+ state: z.ZodEnum<{
47
+ proved: "proved";
48
+ declared: "declared";
49
+ bound: "bound";
50
+ }>;
47
51
  declaredAt: z.ZodNumber;
48
52
  binding: z.ZodOptional<z.ZodUnknown>;
49
53
  surface: z.ZodOptional<z.ZodObject<{
50
54
  route: z.ZodOptional<z.ZodString>;
51
55
  flow: z.ZodOptional<z.ZodString>;
52
- files: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
53
- }, "strip", z.ZodTypeAny, {
54
- route?: string | undefined;
55
- flow?: string | undefined;
56
- files?: string[] | undefined;
57
- }, {
58
- route?: string | undefined;
59
- flow?: string | undefined;
60
- files?: string[] | undefined;
61
- }>>;
56
+ files: z.ZodOptional<z.ZodArray<z.ZodString>>;
57
+ }, z.core.$strip>>;
62
58
  provenBy: z.ZodOptional<z.ZodObject<{
63
59
  verdictId: z.ZodString;
64
60
  grade: z.ZodString;
65
61
  at: z.ZodNumber;
66
62
  runId: z.ZodOptional<z.ZodString>;
67
- }, "strip", z.ZodTypeAny, {
68
- at: number;
69
- grade: string;
70
- verdictId: string;
71
- runId?: string | undefined;
72
- }, {
73
- at: number;
74
- grade: string;
75
- verdictId: string;
76
- runId?: string | undefined;
77
- }>>;
63
+ }, z.core.$strip>>;
78
64
  amended: z.ZodOptional<z.ZodArray<z.ZodObject<{
79
65
  statement: z.ZodString;
80
66
  at: z.ZodNumber;
81
- }, "strip", z.ZodTypeAny, {
82
- at: number;
83
- statement: string;
84
- }, {
85
- at: number;
86
- statement: string;
87
- }>, "many">>;
88
- } & {
89
- /** Which shard this lives in. Stored as well as implied, so a file read alone is self-describing. */
67
+ }, z.core.$strip>>>;
90
68
  subject: z.ZodString;
91
- status: z.ZodEnum<["proposed", "agreed", "proved", "stale"]>;
92
- /** WHY it must be true. The half the old file had no room for. */
69
+ status: z.ZodEnum<{
70
+ proved: "proved";
71
+ proposed: "proposed";
72
+ agreed: "agreed";
73
+ stale: "stale";
74
+ }>;
93
75
  why: z.ZodOptional<z.ZodString>;
94
- /** Where it came from — "the user, in conversation" beats an anonymous assertion in six months. */
95
76
  source: z.ZodOptional<z.ZodString>;
96
- /** When it was last touched, so a stale-looking record can be told from an untouched one. */
97
77
  updatedAt: z.ZodOptional<z.ZodNumber>;
98
- }, "strip", z.ZodTypeAny, {
99
- status: "proved" | "proposed" | "agreed" | "stale";
100
- state: "proved" | "declared" | "bound";
101
- id: string;
102
- subject: string;
103
- statement: string;
104
- declaredAt: number;
105
- surface?: {
106
- route?: string | undefined;
107
- flow?: string | undefined;
108
- files?: string[] | undefined;
109
- } | undefined;
110
- source?: string | undefined;
111
- why?: string | undefined;
112
- updatedAt?: number | undefined;
113
- binding?: unknown;
114
- provenBy?: {
115
- at: number;
116
- grade: string;
117
- verdictId: string;
118
- runId?: string | undefined;
119
- } | undefined;
120
- amended?: {
121
- at: number;
122
- statement: string;
123
- }[] | undefined;
124
- }, {
125
- status: "proved" | "proposed" | "agreed" | "stale";
126
- state: "proved" | "declared" | "bound";
127
- id: string;
128
- subject: string;
129
- statement: string;
130
- declaredAt: number;
131
- surface?: {
132
- route?: string | undefined;
133
- flow?: string | undefined;
134
- files?: string[] | undefined;
135
- } | undefined;
136
- source?: string | undefined;
137
- why?: string | undefined;
138
- updatedAt?: number | undefined;
139
- binding?: unknown;
140
- provenBy?: {
141
- at: number;
142
- grade: string;
143
- verdictId: string;
144
- runId?: string | undefined;
145
- } | undefined;
146
- amended?: {
147
- at: number;
148
- statement: string;
149
- }[] | undefined;
150
- }>;
78
+ }, z.core.$strip>;
151
79
  export type IntentRecord = z.infer<typeof IntentRecordSchema>;
152
80
  export declare const IntentShardSchema: z.ZodObject<{
153
81
  version: z.ZodLiteral<1>;
@@ -155,172 +83,40 @@ export declare const IntentShardSchema: z.ZodObject<{
155
83
  intents: z.ZodRecord<z.ZodString, z.ZodObject<{
156
84
  id: z.ZodString;
157
85
  statement: z.ZodString;
158
- state: z.ZodEnum<["declared", "bound", "proved"]>;
86
+ state: z.ZodEnum<{
87
+ proved: "proved";
88
+ declared: "declared";
89
+ bound: "bound";
90
+ }>;
159
91
  declaredAt: z.ZodNumber;
160
92
  binding: z.ZodOptional<z.ZodUnknown>;
161
93
  surface: z.ZodOptional<z.ZodObject<{
162
94
  route: z.ZodOptional<z.ZodString>;
163
95
  flow: z.ZodOptional<z.ZodString>;
164
- files: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
165
- }, "strip", z.ZodTypeAny, {
166
- route?: string | undefined;
167
- flow?: string | undefined;
168
- files?: string[] | undefined;
169
- }, {
170
- route?: string | undefined;
171
- flow?: string | undefined;
172
- files?: string[] | undefined;
173
- }>>;
96
+ files: z.ZodOptional<z.ZodArray<z.ZodString>>;
97
+ }, z.core.$strip>>;
174
98
  provenBy: z.ZodOptional<z.ZodObject<{
175
99
  verdictId: z.ZodString;
176
100
  grade: z.ZodString;
177
101
  at: z.ZodNumber;
178
102
  runId: z.ZodOptional<z.ZodString>;
179
- }, "strip", z.ZodTypeAny, {
180
- at: number;
181
- grade: string;
182
- verdictId: string;
183
- runId?: string | undefined;
184
- }, {
185
- at: number;
186
- grade: string;
187
- verdictId: string;
188
- runId?: string | undefined;
189
- }>>;
103
+ }, z.core.$strip>>;
190
104
  amended: z.ZodOptional<z.ZodArray<z.ZodObject<{
191
105
  statement: z.ZodString;
192
106
  at: z.ZodNumber;
193
- }, "strip", z.ZodTypeAny, {
194
- at: number;
195
- statement: string;
196
- }, {
197
- at: number;
198
- statement: string;
199
- }>, "many">>;
200
- } & {
201
- /** Which shard this lives in. Stored as well as implied, so a file read alone is self-describing. */
107
+ }, z.core.$strip>>>;
202
108
  subject: z.ZodString;
203
- status: z.ZodEnum<["proposed", "agreed", "proved", "stale"]>;
204
- /** WHY it must be true. The half the old file had no room for. */
109
+ status: z.ZodEnum<{
110
+ proved: "proved";
111
+ proposed: "proposed";
112
+ agreed: "agreed";
113
+ stale: "stale";
114
+ }>;
205
115
  why: z.ZodOptional<z.ZodString>;
206
- /** Where it came from — "the user, in conversation" beats an anonymous assertion in six months. */
207
116
  source: z.ZodOptional<z.ZodString>;
208
- /** When it was last touched, so a stale-looking record can be told from an untouched one. */
209
117
  updatedAt: z.ZodOptional<z.ZodNumber>;
210
- }, "strip", z.ZodTypeAny, {
211
- status: "proved" | "proposed" | "agreed" | "stale";
212
- state: "proved" | "declared" | "bound";
213
- id: string;
214
- subject: string;
215
- statement: string;
216
- declaredAt: number;
217
- surface?: {
218
- route?: string | undefined;
219
- flow?: string | undefined;
220
- files?: string[] | undefined;
221
- } | undefined;
222
- source?: string | undefined;
223
- why?: string | undefined;
224
- updatedAt?: number | undefined;
225
- binding?: unknown;
226
- provenBy?: {
227
- at: number;
228
- grade: string;
229
- verdictId: string;
230
- runId?: string | undefined;
231
- } | undefined;
232
- amended?: {
233
- at: number;
234
- statement: string;
235
- }[] | undefined;
236
- }, {
237
- status: "proved" | "proposed" | "agreed" | "stale";
238
- state: "proved" | "declared" | "bound";
239
- id: string;
240
- subject: string;
241
- statement: string;
242
- declaredAt: number;
243
- surface?: {
244
- route?: string | undefined;
245
- flow?: string | undefined;
246
- files?: string[] | undefined;
247
- } | undefined;
248
- source?: string | undefined;
249
- why?: string | undefined;
250
- updatedAt?: number | undefined;
251
- binding?: unknown;
252
- provenBy?: {
253
- at: number;
254
- grade: string;
255
- verdictId: string;
256
- runId?: string | undefined;
257
- } | undefined;
258
- amended?: {
259
- at: number;
260
- statement: string;
261
- }[] | undefined;
262
- }>>;
263
- }, "strip", z.ZodTypeAny, {
264
- version: 1;
265
- intents: Record<string, {
266
- status: "proved" | "proposed" | "agreed" | "stale";
267
- state: "proved" | "declared" | "bound";
268
- id: string;
269
- subject: string;
270
- statement: string;
271
- declaredAt: number;
272
- surface?: {
273
- route?: string | undefined;
274
- flow?: string | undefined;
275
- files?: string[] | undefined;
276
- } | undefined;
277
- source?: string | undefined;
278
- why?: string | undefined;
279
- updatedAt?: number | undefined;
280
- binding?: unknown;
281
- provenBy?: {
282
- at: number;
283
- grade: string;
284
- verdictId: string;
285
- runId?: string | undefined;
286
- } | undefined;
287
- amended?: {
288
- at: number;
289
- statement: string;
290
- }[] | undefined;
291
- }>;
292
- subject: string;
293
- }, {
294
- version: 1;
295
- intents: Record<string, {
296
- status: "proved" | "proposed" | "agreed" | "stale";
297
- state: "proved" | "declared" | "bound";
298
- id: string;
299
- subject: string;
300
- statement: string;
301
- declaredAt: number;
302
- surface?: {
303
- route?: string | undefined;
304
- flow?: string | undefined;
305
- files?: string[] | undefined;
306
- } | undefined;
307
- source?: string | undefined;
308
- why?: string | undefined;
309
- updatedAt?: number | undefined;
310
- binding?: unknown;
311
- provenBy?: {
312
- at: number;
313
- grade: string;
314
- verdictId: string;
315
- runId?: string | undefined;
316
- } | undefined;
317
- amended?: {
318
- at: number;
319
- statement: string;
320
- }[] | undefined;
321
- }>;
322
- subject: string;
323
- }>;
118
+ }, z.core.$strip>>;
119
+ }, z.core.$strip>;
324
120
  export type IntentShard = z.infer<typeof IntentShardSchema>;
325
121
  export declare const IntentIndexSchema: z.ZodObject<{
326
122
  version: z.ZodLiteral<1>;
@@ -328,35 +124,14 @@ export declare const IntentIndexSchema: z.ZodObject<{
328
124
  id: z.ZodString;
329
125
  subject: z.ZodString;
330
126
  statement: z.ZodString;
331
- status: z.ZodEnum<["proposed", "agreed", "proved", "stale"]>;
332
- }, "strip", z.ZodTypeAny, {
333
- status: "proved" | "proposed" | "agreed" | "stale";
334
- id: string;
335
- subject: string;
336
- statement: string;
337
- }, {
338
- status: "proved" | "proposed" | "agreed" | "stale";
339
- id: string;
340
- subject: string;
341
- statement: string;
342
- }>, "many">;
343
- }, "strip", z.ZodTypeAny, {
344
- entries: {
345
- status: "proved" | "proposed" | "agreed" | "stale";
346
- id: string;
347
- subject: string;
348
- statement: string;
349
- }[];
350
- version: 1;
351
- }, {
352
- entries: {
353
- status: "proved" | "proposed" | "agreed" | "stale";
354
- id: string;
355
- subject: string;
356
- statement: string;
357
- }[];
358
- version: 1;
359
- }>;
127
+ status: z.ZodEnum<{
128
+ proved: "proved";
129
+ proposed: "proposed";
130
+ agreed: "agreed";
131
+ stale: "stale";
132
+ }>;
133
+ }, z.core.$strip>>;
134
+ }, z.core.$strip>;
360
135
  export type IntentIndex = z.infer<typeof IntentIndexSchema>;
361
136
  export declare const emptyShard: (subject: string) => IntentShard;
362
137
  /** The verification lifecycle a legacy record carried, mapped onto the settledness axis. */
@@ -1,14 +1,12 @@
1
- import { existsSync, readFileSync } from 'node:fs';
2
1
  import { dirname, join } from 'node:path';
3
2
  import { z } from 'zod';
4
- import { StatementSource, classifyStatement, splitStatements, } from '@reticlehq/core/artifacts';
5
- import { redactFeedbackText } from '../../telemetry/feedback.js';
3
+ import { promptContextFor, sharesRequests } from './record-request.js';
6
4
  import { reticleDirPaths } from '../project/dir/reticle-dir.js';
7
5
  import { IntentStore } from './intent-store.js';
8
6
  import { IntentShardStore } from './intent-shard-store.js';
9
7
  import { IntentStatus } from './intent-shard.js';
10
8
  import { UNSORTED_SUBJECT } from './intent-subject.js';
11
- import { ReticleDir, ReticleTool, apiKeyFrom } from '@reticlehq/core';
9
+ import { ReticleTool } from '@reticlehq/core';
12
10
  import { sessionIdShape } from '../../surface/tools/tool-kit.js';
13
11
  import { PredicateSchema } from '@reticlehq/engine/question/predicate/predicate.js';
14
12
  import { sessionRoot } from '../project/session-root.js';
@@ -81,7 +79,10 @@ export const INTENT_TOOLS = [
81
79
  .optional()
82
80
  .describe('declare only. Batchable — declare every intent for a feature in one call.'),
83
81
  request: z.string().optional().describe("declare: the user's words, verbatim."),
84
- id: z.string().optional().describe('bind only: which intent the predicate proves.'),
82
+ id: z
83
+ .string()
84
+ .optional()
85
+ .describe('bind, get and record: which intent. For bind, the intent the predicate proves.'),
85
86
  /*
86
87
  * The predicate schema, not `unknown`.
87
88
  *
@@ -136,18 +137,26 @@ export const INTENT_TOOLS = [
136
137
  const store = new IntentStore(deps.fs, root, { now: deps.now });
137
138
  const shards = new IntentShardStore(deps.fs, root, { now: deps.now });
138
139
  const action = asString(args['action']);
140
+ // An empty argument answered "there is none" (`null`, `[]`, `bound: false`), or a raw zod
141
+ // path for `record`, instead of saying which argument the call left out.
142
+ const need = (name) => {
143
+ const value = asString(args[name]);
144
+ if (value !== undefined && 0 < value.trim().length)
145
+ return value;
146
+ throw new Error(`${ReticleTool.INTENT} ${String(action)}: \`${name}\` is required, and none was given — nothing was read or stored`);
147
+ };
139
148
  if (INDEX === action)
140
149
  return { entries: (await shards.index()).entries, path: root };
141
150
  if (SUBJECT === action)
142
- return { records: await shards.subject(asString(args['subject']) ?? ''), path: root };
151
+ return { records: await shards.subject(need('subject')), path: root };
143
152
  if (GET === action)
144
- return { record: await shards.get(asString(args['id']) ?? '') };
153
+ return { record: await shards.get(need('id')) };
145
154
  if (MIGRATE === action)
146
155
  return { ...(await shards.migrate()), path: root };
147
156
  if (RECORD === action) {
148
157
  const written = await shards.record({
149
- id: asString(args['id']) ?? '',
150
- statement: asString(args['statement']) ?? '',
158
+ id: need('id'),
159
+ statement: need('statement'),
151
160
  subject: asString(args['subject']),
152
161
  why: asString(args['why']),
153
162
  source: asString(args['source']),
@@ -157,7 +166,7 @@ export const INTENT_TOOLS = [
157
166
  return { record: written, path: root };
158
167
  }
159
168
  if (BIND === action) {
160
- const id = asString(args['id']) ?? '';
169
+ const id = need('id');
161
170
  return { bound: await store.bind(id, args['binding']) };
162
171
  }
163
172
  if (LIST === action) {
@@ -223,38 +232,6 @@ async function withExistingFiles(deps, projectDir, entries) {
223
232
  return { entries: kept, missing };
224
233
  }
225
234
  const NO_SUBJECT_FIX = 'Nothing says what these are about, so an agent looking for them cannot find them: declare each again with surface.route (the page it is about) or surface.flow.';
226
- const MAX_REQUEST = 20_000;
227
- const MAX_STATEMENT = 500;
228
- const MAX_STATEMENTS = 100;
229
- const PROJECT_CONFIG = '.reticle.json';
230
- /** Credentials and personal data out, length capped: the same rules feedback reports follow. */
231
- function redactSecrets(text, max) {
232
- return redactFeedbackText(text, max).text;
233
- }
234
- /**
235
- * Whether the request goes to the platform with the runs that verify it.
236
- *
237
- * A LINKED project shares it unless `.reticle.json` says `"shareRequests": false`: the platform
238
- * reads what each run was for, which is half of what a run means. An unlinked project has nowhere
239
- * to send it, and `"shareRequests": true` still shares from one that links later.
240
- */
241
- function sharesRequests(projectDir, reticleRoot) {
242
- let setting;
243
- try {
244
- const config = JSON.parse(readFileSync(join(projectDir, PROJECT_CONFIG), 'utf8'));
245
- setting = config?.shareRequests;
246
- }
247
- catch {
248
- setting = undefined;
249
- }
250
- if (false === setting)
251
- return false;
252
- if (true === setting)
253
- return true;
254
- // Linked by `reticle connect` (cloud.json), or by a key in the environment, the way CI syncs.
255
- return (existsSync(join(reticleRoot, ReticleDir.CLOUD_LINK_FILE)) ||
256
- apiKeyFrom(process.env) !== undefined);
257
- }
258
235
  /**
259
236
  * Keep the user's request, and every statement in it and in the declared intents, classified and
260
237
  * attributed, for the runs that verify it. Secrets are redacted before anything is written.
@@ -262,29 +239,11 @@ function sharesRequests(projectDir, reticleRoot) {
262
239
  * Shared with the platform from a linked project unless `.reticle.json` says `"shareRequests": false`.
263
240
  */
264
241
  async function recordRequest(deps, root, request, declared) {
265
- const text = redactSecrets(request, MAX_REQUEST);
266
242
  const agentStatements = declared.flatMap((d) => {
267
243
  const statement = d?.statement;
268
244
  return 'string' === typeof statement ? [statement] : [];
269
245
  });
270
- const context = {
271
- request: text,
272
- statements: [
273
- ...splitStatements(text).map((t) => ({ text: t, source: StatementSource.USER })),
274
- ...agentStatements.map((t) => ({
275
- text: redactSecrets(t, MAX_STATEMENT),
276
- source: StatementSource.AGENT,
277
- })),
278
- ]
279
- .slice(0, MAX_STATEMENTS)
280
- .map((s) => ({
281
- ...s,
282
- text: s.text.slice(0, MAX_STATEMENT),
283
- kind: classifyStatement(s.text),
284
- })),
285
- at: deps.now(),
286
- shared: sharesRequests(dirname(root), root),
287
- };
246
+ const context = promptContextFor(request, agentStatements, deps.now(), sharesRequests(dirname(root), root));
288
247
  const path = reticleDirPaths(root).request;
289
248
  await deps.fs.mkdir(dirname(path));
290
249
  await deps.fs.writeFile(path, `${JSON.stringify(context, null, 2)}\n`);
@@ -0,0 +1,27 @@
1
+ import { type PromptContext } from '@reticlehq/core/artifacts';
2
+ export declare const MAX_REQUEST = 20000;
3
+ export declare const PROJECT_CONFIG = ".reticle.json";
4
+ /** Credentials and personal data out, length capped: the same rules feedback reports follow. */
5
+ export declare function redactSecrets(text: string, max: number): string;
6
+ /** One setting from the project's `.reticle.json`, or undefined when it is absent or unreadable. */
7
+ export declare function projectSetting(projectDir: string, key: string): unknown;
8
+ /**
9
+ * The one switch for everything the agent hooks keep: prompts, tool calls, the model and the
10
+ * closing message. `RETICLE_PROMPT_CAPTURE=0` stops it on this machine.
11
+ */
12
+ export declare function agentCaptureOff(env: NodeJS.ProcessEnv): boolean;
13
+ /** The same switch for one project: `"promptCapture": false` in its `.reticle.json`. */
14
+ export declare function agentCaptureOffIn(projectDir: string): boolean;
15
+ /**
16
+ * Whether the request goes to the platform with the runs that verify it.
17
+ *
18
+ * A LINKED project shares it unless `.reticle.json` says `"shareRequests": false`: the platform
19
+ * reads what each run was for, which is half of what a run means. An unlinked project has nowhere
20
+ * to send it, and `"shareRequests": true` still shares from one that links later.
21
+ */
22
+ export declare function sharesRequests(projectDir: string, reticleRoot: string): boolean;
23
+ /**
24
+ * The prompt context for one request. `agentStatements` are the statements the agent declared
25
+ * beside it; the hook has none. Pure: the clock and the share decision arrive as values.
26
+ */
27
+ export declare function promptContextFor(request: string, agentStatements: readonly string[], at: number, shared: boolean): PromptContext;
@@ -0,0 +1,88 @@
1
+ /**
2
+ * The user's request as Reticle keeps it: redacted, split into statements, classified, and marked
3
+ * shared or not. Two writers use it. `reticle_intent { declare, request }` records what the agent
4
+ * relays, and `reticle hook prompt` records what the user typed, before the agent sees it. One
5
+ * function, so the two writers cannot keep the request in two shapes.
6
+ */
7
+ import { existsSync, readFileSync } from 'node:fs';
8
+ import { join } from 'node:path';
9
+ import { StatementSource, classifyStatement, splitStatements, } from '@reticlehq/core/artifacts';
10
+ import { ReticleDir, ReticleEnv, apiKeyFrom, mainCheckoutTwin } from '@reticlehq/core';
11
+ import { readTextOrUndefined } from '../project/fs/fs-port.js';
12
+ import { redactFeedbackText } from '../../telemetry/feedback.js';
13
+ export const MAX_REQUEST = 20_000;
14
+ const MAX_STATEMENT = 500;
15
+ const MAX_STATEMENTS = 100;
16
+ export const PROJECT_CONFIG = '.reticle.json';
17
+ const OFF_VALUES = new Set(['0', 'false', 'off', 'no']);
18
+ /** Credentials and personal data out, length capped: the same rules feedback reports follow. */
19
+ export function redactSecrets(text, max) {
20
+ return redactFeedbackText(text, max).text;
21
+ }
22
+ /** One setting from the project's `.reticle.json`, or undefined when it is absent or unreadable. */
23
+ export function projectSetting(projectDir, key) {
24
+ try {
25
+ const config = JSON.parse(readFileSync(join(projectDir, PROJECT_CONFIG), 'utf8'));
26
+ return 'object' === typeof config && null !== config
27
+ ? config[key]
28
+ : undefined;
29
+ }
30
+ catch {
31
+ return undefined;
32
+ }
33
+ }
34
+ /**
35
+ * The one switch for everything the agent hooks keep: prompts, tool calls, the model and the
36
+ * closing message. `RETICLE_PROMPT_CAPTURE=0` stops it on this machine.
37
+ */
38
+ export function agentCaptureOff(env) {
39
+ return OFF_VALUES.has((env[ReticleEnv.PROMPT_CAPTURE] ?? '').toLowerCase());
40
+ }
41
+ /** The same switch for one project: `"promptCapture": false` in its `.reticle.json`. */
42
+ export function agentCaptureOffIn(projectDir) {
43
+ return false === projectSetting(projectDir, 'promptCapture');
44
+ }
45
+ /**
46
+ * Whether the request goes to the platform with the runs that verify it.
47
+ *
48
+ * A LINKED project shares it unless `.reticle.json` says `"shareRequests": false`: the platform
49
+ * reads what each run was for, which is half of what a run means. An unlinked project has nowhere
50
+ * to send it, and `"shareRequests": true` still shares from one that links later.
51
+ */
52
+ export function sharesRequests(projectDir, reticleRoot) {
53
+ const setting = projectSetting(projectDir, 'shareRequests');
54
+ if (false === setting)
55
+ return false;
56
+ if (true === setting)
57
+ return true;
58
+ // Linked by `reticle connect` (cloud.json), or by a key in the environment, the way CI syncs.
59
+ return (existsSync(join(reticleRoot, ReticleDir.CLOUD_LINK_FILE)) ||
60
+ // A git worktree of a linked project is linked: its `.reticle/` is often git-ignored.
61
+ existsSync(join(mainCheckoutTwin(reticleRoot, readTextOrUndefined) ?? reticleRoot, ReticleDir.CLOUD_LINK_FILE)) ||
62
+ apiKeyFrom(process.env) !== undefined);
63
+ }
64
+ /**
65
+ * The prompt context for one request. `agentStatements` are the statements the agent declared
66
+ * beside it; the hook has none. Pure: the clock and the share decision arrive as values.
67
+ */
68
+ export function promptContextFor(request, agentStatements, at, shared) {
69
+ const text = redactSecrets(request, MAX_REQUEST);
70
+ return {
71
+ request: text,
72
+ statements: [
73
+ ...splitStatements(text).map((t) => ({ text: t, source: StatementSource.USER })),
74
+ ...agentStatements.map((t) => ({
75
+ text: redactSecrets(t, MAX_STATEMENT),
76
+ source: StatementSource.AGENT,
77
+ })),
78
+ ]
79
+ .slice(0, MAX_STATEMENTS)
80
+ .map((s) => ({
81
+ ...s,
82
+ text: s.text.slice(0, MAX_STATEMENT),
83
+ kind: classifyStatement(s.text),
84
+ })),
85
+ at,
86
+ shared,
87
+ };
88
+ }
@@ -77,6 +77,9 @@ export async function applySettledWords(store, settled) {
77
77
  const decision = settled.find((s) => s.setAside === record.statement);
78
78
  if (decision === undefined)
79
79
  continue;
80
+ // The status the team settled on the kept words comes with them, in this same read: the next
81
+ // read of an unchanged memory is a 304, which would leave the record proposed.
82
+ const keptStatus = settled.find((s) => s.status !== undefined && s.kept === decision.kept)?.status;
80
83
  const next = await store.upsert(record.id, (existing) =>
81
84
  // The check bound to the words set aside proves nothing about the words kept.
82
85
  existing === undefined
@@ -89,7 +92,12 @@ export async function applySettledWords(store, settled) {
89
92
  ...existing.surface,
90
93
  files: decision.file === undefined ? [] : [decision.file],
91
94
  },
92
- }, { source: decidedBy(decision.by) });
95
+ }, {
96
+ source: decidedBy(decision.by),
97
+ ...(keptStatus !== undefined && RANK[keptStatus] > RANK[record.status]
98
+ ? { status: keptStatus }
99
+ : {}),
100
+ });
93
101
  if (next?.statement === decision.kept)
94
102
  changed += 1;
95
103
  }
@@ -29,6 +29,9 @@ export interface DriveProgram {
29
29
  steps: TapeStep[];
30
30
  startPath?: string;
31
31
  author?: FlowFile['author'];
32
+ /** Built from the steps' expects when no step declared an intent. Never a declared goal. */
33
+ intent?: string;
34
+ intentDerived?: true;
32
35
  }
33
36
  /**
34
37
  * What a session drove, saved as a replayable flow — without anybody asking for it.