@reticlehq/server 2.2.1 → 2.4.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 (790) hide show
  1. package/README.md +1 -1
  2. package/dist/bridge-security.d.ts +0 -1
  3. package/dist/bridge-security.js +0 -1
  4. package/dist/bridge.d.ts +0 -1
  5. package/dist/bridge.js +102 -12
  6. package/dist/bridge.test-harness.d.ts +5 -1
  7. package/dist/bridge.test-harness.js +12 -1
  8. package/dist/capsule/capsule-store.d.ts +2 -3
  9. package/dist/capsule/capsule-store.js +0 -1
  10. package/dist/capsule/capsule.d.ts +0 -1
  11. package/dist/capsule/capsule.js +0 -1
  12. package/dist/capsule/causal-summary.d.ts +21 -1
  13. package/dist/capsule/causal-summary.js +20 -2
  14. package/dist/capsule/divergence.d.ts +0 -1
  15. package/dist/capsule/divergence.js +0 -1
  16. package/dist/capsule/minimize.d.ts +0 -1
  17. package/dist/capsule/minimize.js +0 -1
  18. package/dist/capsule/predicate-to-links.d.ts +0 -1
  19. package/dist/capsule/predicate-to-links.js +0 -1
  20. package/dist/cli-doctor.d.ts +6 -0
  21. package/dist/cli-doctor.js +60 -0
  22. package/dist/cli-flow-commands.d.ts +0 -1
  23. package/dist/cli-flow-commands.js +0 -1
  24. package/dist/cli-launch.d.ts +0 -1
  25. package/dist/cli-launch.js +7 -3
  26. package/dist/cli-parse.d.ts +47 -3
  27. package/dist/cli-parse.js +147 -13
  28. package/dist/cli-port.d.ts +3 -1
  29. package/dist/cli-port.js +21 -1
  30. package/dist/cli-verify.d.ts +0 -1
  31. package/dist/cli-verify.js +1 -2
  32. package/dist/cli.d.ts +0 -1
  33. package/dist/cli.js +88 -69
  34. package/dist/cloud/cloud-config.d.ts +0 -1
  35. package/dist/cloud/cloud-config.js +0 -1
  36. package/dist/cloud/cloud-sync.d.ts +4 -5
  37. package/dist/cloud/cloud-sync.js +0 -1
  38. package/dist/cloud-cli.d.ts +0 -1
  39. package/dist/cloud-cli.js +9 -2
  40. package/dist/crawl/crawl-tools.d.ts +0 -1
  41. package/dist/crawl/crawl-tools.js +1 -2
  42. package/dist/crawl/crawl.d.ts +17 -3
  43. package/dist/crawl/crawl.js +43 -4
  44. package/dist/daemon-resilience.d.ts +6 -1
  45. package/dist/daemon-resilience.js +63 -1
  46. package/dist/daemon.d.ts +23 -3
  47. package/dist/daemon.js +36 -24
  48. package/dist/domain/domain-model.d.ts +0 -1
  49. package/dist/domain/domain-model.js +1 -2
  50. package/dist/domain/domain-tools.d.ts +0 -7
  51. package/dist/domain/domain-tools.js +21 -4
  52. package/dist/domain/flow-risk.d.ts +0 -1
  53. package/dist/domain/flow-risk.js +0 -1
  54. package/dist/ee/audit-log.d.ts +0 -1
  55. package/dist/ee/audit-log.js +0 -1
  56. package/dist/events/body-failures.d.ts +4 -0
  57. package/dist/events/body-failures.js +113 -0
  58. package/dist/events/contradictions.d.ts +53 -0
  59. package/dist/events/contradictions.js +282 -0
  60. package/dist/events/echo-mismatch.d.ts +4 -0
  61. package/dist/events/echo-mismatch.js +138 -0
  62. package/dist/events/event-filters.d.ts +17 -3
  63. package/dist/events/event-filters.js +13 -3
  64. package/dist/events/json-salvage.d.ts +32 -0
  65. package/dist/events/json-salvage.js +96 -0
  66. package/dist/events/predicate-eval.d.ts +2 -1
  67. package/dist/events/predicate-eval.js +56 -9
  68. package/dist/events/predicate.d.ts +0 -1
  69. package/dist/events/predicate.js +56 -2
  70. package/dist/events/reaction.d.ts +0 -1
  71. package/dist/events/reaction.js +0 -1
  72. package/dist/events/reconcile.d.ts +39 -0
  73. package/dist/events/reconcile.js +211 -0
  74. package/dist/events/ring-buffer.d.ts +0 -1
  75. package/dist/events/ring-buffer.js +0 -1
  76. package/dist/events/stale-response.d.ts +4 -0
  77. package/dist/events/stale-response.js +139 -0
  78. package/dist/events/unit-mismatch.d.ts +16 -0
  79. package/dist/events/unit-mismatch.js +167 -0
  80. package/dist/flows/affected-tools.d.ts +18 -0
  81. package/dist/flows/affected-tools.js +52 -0
  82. package/dist/flows/affected.d.ts +0 -1
  83. package/dist/flows/affected.js +0 -1
  84. package/dist/flows/annotate-tools.d.ts +0 -1
  85. package/dist/flows/annotate-tools.js +21 -3
  86. package/dist/flows/annotate.d.ts +0 -1
  87. package/dist/flows/annotate.js +0 -1
  88. package/dist/flows/annotation-store.d.ts +0 -1
  89. package/dist/flows/annotation-store.js +0 -1
  90. package/dist/flows/assertion-integrity.d.ts +0 -1
  91. package/dist/flows/assertion-integrity.js +0 -1
  92. package/dist/flows/assertion-tiers-store.d.ts +0 -1
  93. package/dist/flows/assertion-tiers-store.js +0 -1
  94. package/dist/flows/buddy-status.d.ts +0 -1
  95. package/dist/flows/buddy-status.js +0 -1
  96. package/dist/flows/coverage.d.ts +0 -1
  97. package/dist/flows/coverage.js +0 -1
  98. package/dist/flows/decision.d.ts +0 -7
  99. package/dist/flows/decision.js +47 -7
  100. package/dist/flows/flake-store.d.ts +0 -1
  101. package/dist/flows/flake-store.js +0 -1
  102. package/dist/flows/flake.d.ts +0 -1
  103. package/dist/flows/flake.js +0 -1
  104. package/dist/flows/flow-classify.d.ts +0 -1
  105. package/dist/flows/flow-classify.js +0 -1
  106. package/dist/flows/flow-replay-run.d.ts +0 -1
  107. package/dist/flows/flow-replay-run.js +2 -3
  108. package/dist/flows/flow-replay.d.ts +20 -4
  109. package/dist/flows/flow-replay.js +9 -43
  110. package/dist/flows/flow-report.d.ts +0 -1
  111. package/dist/flows/flow-report.js +0 -1
  112. package/dist/flows/flow-scope.d.ts +0 -1
  113. package/dist/flows/flow-scope.js +0 -1
  114. package/dist/flows/flow-sources.d.ts +0 -1
  115. package/dist/flows/flow-sources.js +0 -1
  116. package/dist/flows/flow-step-runners.d.ts +23 -0
  117. package/dist/flows/flow-step-runners.js +102 -0
  118. package/dist/flows/flow-success.d.ts +0 -1
  119. package/dist/flows/flow-success.js +0 -1
  120. package/dist/flows/flow-tools.d.ts +0 -1
  121. package/dist/flows/flow-tools.js +44 -14
  122. package/dist/flows/flows.d.ts +6 -2
  123. package/dist/flows/flows.js +15 -2
  124. package/dist/flows/gate.d.ts +0 -1
  125. package/dist/flows/gate.js +0 -1
  126. package/dist/flows/git-changed.d.ts +0 -1
  127. package/dist/flows/git-changed.js +0 -1
  128. package/dist/flows/heal-run.d.ts +0 -1
  129. package/dist/flows/heal-run.js +0 -1
  130. package/dist/flows/heal.d.ts +0 -1
  131. package/dist/flows/heal.js +0 -1
  132. package/dist/flows/parallel-suite.d.ts +0 -1
  133. package/dist/flows/parallel-suite.js +0 -1
  134. package/dist/flows/recordings.d.ts +0 -1
  135. package/dist/flows/recordings.js +0 -1
  136. package/dist/flows/replay.d.ts +0 -1
  137. package/dist/flows/replay.js +71 -4
  138. package/dist/flows/server-verify.d.ts +0 -1
  139. package/dist/flows/server-verify.js +0 -1
  140. package/dist/flows/verify-change-tools.d.ts +2 -0
  141. package/dist/flows/verify-change-tools.js +187 -0
  142. package/dist/flows/watch-batcher.d.ts +0 -1
  143. package/dist/flows/watch-batcher.js +0 -1
  144. package/dist/honesty/accepted-write.d.ts +14 -0
  145. package/dist/honesty/accepted-write.js +17 -0
  146. package/dist/honesty/blind-spots.d.ts +18 -1
  147. package/dist/honesty/blind-spots.js +47 -5
  148. package/dist/honesty/honesty.d.ts +0 -1
  149. package/dist/honesty/honesty.js +0 -1
  150. package/dist/honesty/uncaptured-bodies.d.ts +19 -0
  151. package/dist/honesty/uncaptured-bodies.js +30 -0
  152. package/dist/honesty/unread-outcome.d.ts +2 -0
  153. package/dist/honesty/unread-outcome.js +50 -0
  154. package/dist/honesty/verified.d.ts +40 -0
  155. package/dist/honesty/verified.js +86 -0
  156. package/dist/http-server.d.ts +0 -1
  157. package/dist/http-server.js +5 -1
  158. package/dist/hunt/hunt-report.d.ts +50 -0
  159. package/dist/hunt/hunt-report.js +84 -0
  160. package/dist/idle-shutdown.d.ts +0 -1
  161. package/dist/idle-shutdown.js +0 -1
  162. package/dist/index.d.ts +0 -1
  163. package/dist/index.js +0 -1
  164. package/dist/init/agent-rules.d.ts +0 -1
  165. package/dist/init/agent-rules.js +4 -2
  166. package/dist/init/capabilities.d.ts +17 -0
  167. package/dist/init/capabilities.js +51 -0
  168. package/dist/init/cursor.d.ts +0 -1
  169. package/dist/init/cursor.js +0 -1
  170. package/dist/init/desktop-doctor.d.ts +40 -0
  171. package/dist/init/desktop-doctor.js +198 -0
  172. package/dist/init/detect.d.ts +25 -1
  173. package/dist/init/detect.js +65 -4
  174. package/dist/init/mcp.d.ts +0 -1
  175. package/dist/init/mcp.js +0 -1
  176. package/dist/init/next-patch.d.ts +41 -0
  177. package/dist/init/next-patch.js +106 -0
  178. package/dist/init/node-io.d.ts +0 -1
  179. package/dist/init/node-io.js +25 -1
  180. package/dist/init/patch-kind.d.ts +20 -0
  181. package/dist/init/patch-kind.js +10 -0
  182. package/dist/init/plan-framework.d.ts +35 -0
  183. package/dist/init/plan-framework.js +217 -0
  184. package/dist/init/plan.d.ts +55 -4
  185. package/dist/init/plan.js +130 -112
  186. package/dist/init/project-id.d.ts +0 -1
  187. package/dist/init/project-id.js +0 -1
  188. package/dist/init/run.d.ts +17 -1
  189. package/dist/init/run.js +237 -18
  190. package/dist/init/slash-command.d.ts +18 -0
  191. package/dist/init/slash-command.js +52 -0
  192. package/dist/init/snippets.d.ts +48 -3
  193. package/dist/init/snippets.js +156 -6
  194. package/dist/init/vite-config.d.ts +4 -11
  195. package/dist/init/vite-config.js +15 -8
  196. package/dist/input/driven-redaction.d.ts +15 -0
  197. package/dist/input/driven-redaction.js +76 -0
  198. package/dist/input/network-detail.d.ts +9 -4
  199. package/dist/input/network-detail.js +35 -16
  200. package/dist/input/network-mock-tools.d.ts +0 -1
  201. package/dist/input/network-mock-tools.js +3 -4
  202. package/dist/input/network-mock.d.ts +0 -1
  203. package/dist/input/network-mock.js +0 -1
  204. package/dist/input/real-input.d.ts +14 -1
  205. package/dist/input/real-input.js +45 -3
  206. package/dist/input/scroll-find.d.ts +0 -1
  207. package/dist/input/scroll-find.js +0 -1
  208. package/dist/input/scroll-tools.d.ts +0 -1
  209. package/dist/input/scroll-tools.js +0 -1
  210. package/dist/input/viewport-tools.d.ts +0 -1
  211. package/dist/input/viewport-tools.js +3 -4
  212. package/dist/journal/ambient-store.d.ts +0 -1
  213. package/dist/journal/ambient-store.js +0 -1
  214. package/dist/journal/ambient.d.ts +0 -1
  215. package/dist/journal/ambient.js +0 -1
  216. package/dist/journal/attach-journal.d.ts +0 -1
  217. package/dist/journal/attach-journal.js +0 -1
  218. package/dist/journal/deviation-report.d.ts +0 -1
  219. package/dist/journal/deviation-report.js +0 -1
  220. package/dist/journal/deviation-service.d.ts +0 -1
  221. package/dist/journal/deviation-service.js +0 -1
  222. package/dist/journal/envelope-store.d.ts +0 -1
  223. package/dist/journal/envelope-store.js +0 -1
  224. package/dist/journal/envelope.d.ts +8 -9
  225. package/dist/journal/envelope.js +0 -1
  226. package/dist/journal/journal-query.d.ts +0 -1
  227. package/dist/journal/journal-query.js +0 -1
  228. package/dist/journal/journal-recorder.d.ts +0 -1
  229. package/dist/journal/journal-recorder.js +0 -1
  230. package/dist/journal/retention.d.ts +0 -1
  231. package/dist/journal/retention.js +0 -1
  232. package/dist/journal/rollups.d.ts +0 -1
  233. package/dist/journal/rollups.js +0 -1
  234. package/dist/journal/session-end.d.ts +0 -1
  235. package/dist/journal/session-end.js +0 -1
  236. package/dist/journal/session-journal.d.ts +0 -1
  237. package/dist/journal/session-journal.js +0 -1
  238. package/dist/license/license.d.ts +0 -1
  239. package/dist/license/license.js +0 -1
  240. package/dist/log.d.ts +0 -1
  241. package/dist/log.js +0 -1
  242. package/dist/mcp-proxy.d.ts +35 -4
  243. package/dist/mcp-proxy.js +174 -28
  244. package/dist/mcp.d.ts +15 -1
  245. package/dist/mcp.js +145 -17
  246. package/dist/oracles/flow-instrument-gaps.d.ts +0 -1
  247. package/dist/oracles/flow-instrument-gaps.js +0 -1
  248. package/dist/oracles/propose-consequences.d.ts +0 -1
  249. package/dist/oracles/propose-consequences.js +0 -1
  250. package/dist/oracles/self-instrument.d.ts +0 -1
  251. package/dist/oracles/self-instrument.js +0 -1
  252. package/dist/pairing-token.d.ts +0 -1
  253. package/dist/pairing-token.js +0 -1
  254. package/dist/phenomena/phenomena.d.ts +0 -1
  255. package/dist/phenomena/phenomena.js +0 -1
  256. package/dist/pool/browser-pool.d.ts +0 -1
  257. package/dist/pool/browser-pool.js +0 -1
  258. package/dist/pool/lease-reaper.d.ts +0 -1
  259. package/dist/pool/lease-reaper.js +0 -1
  260. package/dist/pool/playwright-launcher.d.ts +0 -1
  261. package/dist/pool/playwright-launcher.js +10 -2
  262. package/dist/project/baselines.d.ts +0 -1
  263. package/dist/project/baselines.js +0 -1
  264. package/dist/project/file-lock.d.ts +2 -1
  265. package/dist/project/file-lock.js +12 -2
  266. package/dist/project/fs-port.d.ts +0 -1
  267. package/dist/project/fs-port.js +0 -1
  268. package/dist/project/project-store.d.ts +0 -1
  269. package/dist/project/project-store.js +0 -1
  270. package/dist/project/project-tools.d.ts +0 -1
  271. package/dist/project/project-tools.js +29 -4
  272. package/dist/project/reticle-dir.d.ts +0 -1
  273. package/dist/project/reticle-dir.js +0 -1
  274. package/dist/runs/build-verification-run.d.ts +0 -1
  275. package/dist/runs/build-verification-run.js +0 -1
  276. package/dist/runs/profile-redact.d.ts +0 -1
  277. package/dist/runs/profile-redact.js +0 -1
  278. package/dist/runs/render-report.d.ts +0 -1
  279. package/dist/runs/render-report.js +0 -1
  280. package/dist/runs/repair-prompt.d.ts +0 -1
  281. package/dist/runs/repair-prompt.js +0 -1
  282. package/dist/runs/replay-mapping.d.ts +0 -1
  283. package/dist/runs/replay-mapping.js +0 -1
  284. package/dist/runs/reticle-runner.d.ts +0 -1
  285. package/dist/runs/reticle-runner.js +4 -2
  286. package/dist/runs/risk-classify.d.ts +0 -1
  287. package/dist/runs/risk-classify.js +0 -1
  288. package/dist/runs/run-diff.d.ts +0 -1
  289. package/dist/runs/run-diff.js +0 -1
  290. package/dist/runs/run-store.d.ts +0 -1
  291. package/dist/runs/run-store.js +0 -1
  292. package/dist/runs/run-tools.d.ts +0 -1
  293. package/dist/runs/run-tools.js +0 -1
  294. package/dist/runs/runner-port.d.ts +0 -1
  295. package/dist/runs/runner-port.js +0 -1
  296. package/dist/runs/verification-sync.d.ts +0 -1
  297. package/dist/runs/verification-sync.js +0 -1
  298. package/dist/runs/verify-http.d.ts +0 -1
  299. package/dist/runs/verify-http.js +0 -1
  300. package/dist/runs/verify-server.d.ts +0 -1
  301. package/dist/runs/verify-server.js +0 -1
  302. package/dist/server-version.d.ts +0 -1
  303. package/dist/server-version.js +0 -1
  304. package/dist/session/command-timeout.d.ts +35 -0
  305. package/dist/session/command-timeout.js +41 -0
  306. package/dist/session/control-envelope.d.ts +2 -3
  307. package/dist/session/control-envelope.js +2 -3
  308. package/dist/session/last-act.d.ts +31 -0
  309. package/dist/session/last-act.js +24 -0
  310. package/dist/session/live-control-tools.d.ts +0 -1
  311. package/dist/session/live-control-tools.js +3 -4
  312. package/dist/session/live-control.d.ts +0 -1
  313. package/dist/session/live-control.js +0 -1
  314. package/dist/session/observed-state.d.ts +12 -2
  315. package/dist/session/observed-state.js +29 -2
  316. package/dist/session/output-budget.d.ts +0 -1
  317. package/dist/session/output-budget.js +0 -1
  318. package/dist/session/pending-commands.d.ts +12 -0
  319. package/dist/session/pending-commands.js +36 -0
  320. package/dist/session/presenter-args.d.ts +0 -1
  321. package/dist/session/presenter-args.js +0 -1
  322. package/dist/session/review-store.d.ts +0 -1
  323. package/dist/session/review-store.js +0 -1
  324. package/dist/session/session-health.d.ts +26 -2
  325. package/dist/session/session-health.js +13 -1
  326. package/dist/session/session-info.d.ts +29 -0
  327. package/dist/session/session-info.js +1 -0
  328. package/dist/session/session-lease.d.ts +25 -0
  329. package/dist/session/session-lease.js +14 -0
  330. package/dist/session/session-manager.d.ts +7 -19
  331. package/dist/session/session-manager.js +35 -2
  332. package/dist/session/session-readiness.d.ts +0 -1
  333. package/dist/session/session-readiness.js +3 -4
  334. package/dist/session/session-reaper.d.ts +0 -1
  335. package/dist/session/session-reaper.js +0 -1
  336. package/dist/session/session-recommendation.d.ts +0 -1
  337. package/dist/session/session-recommendation.js +0 -1
  338. package/dist/session/session-tools.d.ts +0 -1
  339. package/dist/session/session-tools.js +2 -3
  340. package/dist/session/session.d.ts +33 -53
  341. package/dist/session/session.js +102 -66
  342. package/dist/session/state-select.d.ts +0 -1
  343. package/dist/session/state-select.js +0 -1
  344. package/dist/telemetry/argument-shape.d.ts +41 -0
  345. package/dist/telemetry/argument-shape.js +87 -0
  346. package/dist/telemetry/bug-found.d.ts +33 -0
  347. package/dist/telemetry/bug-found.js +95 -0
  348. package/dist/telemetry/cli-telemetry.d.ts +13 -0
  349. package/dist/telemetry/cli-telemetry.js +43 -0
  350. package/dist/telemetry/connect-failure.d.ts +16 -0
  351. package/dist/telemetry/connect-failure.js +44 -0
  352. package/dist/telemetry/daemon-telemetry.d.ts +19 -0
  353. package/dist/telemetry/daemon-telemetry.js +76 -0
  354. package/dist/telemetry/dev-repo.d.ts +10 -0
  355. package/dist/telemetry/dev-repo.js +80 -0
  356. package/dist/telemetry/error-fingerprint.d.ts +24 -0
  357. package/dist/telemetry/error-fingerprint.js +88 -0
  358. package/dist/telemetry/feedback-cli.d.ts +31 -0
  359. package/dist/telemetry/feedback-cli.js +102 -0
  360. package/dist/telemetry/feedback-context.d.ts +32 -0
  361. package/dist/telemetry/feedback-context.js +143 -0
  362. package/dist/telemetry/feedback.d.ts +66 -0
  363. package/dist/telemetry/feedback.js +175 -0
  364. package/dist/telemetry/git-facts.d.ts +21 -0
  365. package/dist/telemetry/git-facts.js +109 -0
  366. package/dist/telemetry/identify.d.ts +22 -0
  367. package/dist/telemetry/identify.js +73 -0
  368. package/dist/telemetry/init-telemetry.d.ts +26 -0
  369. package/dist/telemetry/init-telemetry.js +33 -0
  370. package/dist/telemetry/machine-snapshot.d.ts +6 -0
  371. package/dist/telemetry/machine-snapshot.js +39 -0
  372. package/dist/telemetry/mcp-connection.d.ts +5 -0
  373. package/dist/telemetry/mcp-connection.js +44 -0
  374. package/dist/telemetry/project-profile.d.ts +44 -0
  375. package/dist/telemetry/project-profile.js +205 -0
  376. package/dist/telemetry/run-telemetry.d.ts +21 -0
  377. package/dist/telemetry/run-telemetry.js +62 -0
  378. package/dist/telemetry/session-metrics.d.ts +103 -0
  379. package/dist/telemetry/session-metrics.js +329 -0
  380. package/dist/telemetry/telemetry.d.ts +35 -8
  381. package/dist/telemetry/telemetry.js +105 -12
  382. package/dist/token-auth.d.ts +0 -1
  383. package/dist/token-auth.js +0 -1
  384. package/dist/tools/act-capsule.d.ts +23 -0
  385. package/dist/tools/act-capsule.js +47 -0
  386. package/dist/tools/act-danger.d.ts +7 -0
  387. package/dist/tools/act-danger.js +44 -0
  388. package/dist/tools/act-helpers.d.ts +17 -0
  389. package/dist/tools/act-helpers.js +40 -0
  390. package/dist/tools/act-tools.d.ts +8 -1
  391. package/dist/tools/act-tools.js +96 -98
  392. package/dist/tools/act-view.d.ts +7 -1
  393. package/dist/tools/act-view.js +13 -1
  394. package/dist/tools/assert-grade.d.ts +22 -1
  395. package/dist/tools/assert-grade.js +46 -1
  396. package/dist/tools/assert-verdict.d.ts +21 -0
  397. package/dist/tools/assert-verdict.js +62 -0
  398. package/dist/tools/browser-tools.d.ts +0 -1
  399. package/dist/tools/browser-tools.js +2 -2
  400. package/dist/tools/contract-tools.d.ts +0 -1
  401. package/dist/tools/contract-tools.js +0 -1
  402. package/dist/tools/coverage-tools.d.ts +9 -0
  403. package/dist/tools/coverage-tools.js +92 -0
  404. package/dist/tools/dynamic-tools.d.ts +0 -1
  405. package/dist/tools/dynamic-tools.js +21 -2
  406. package/dist/tools/error-recovery.d.ts +18 -2
  407. package/dist/tools/error-recovery.js +42 -7
  408. package/dist/tools/feedback-tools.d.ts +24 -0
  409. package/dist/tools/feedback-tools.js +180 -0
  410. package/dist/tools/invoke-tool.d.ts +0 -1
  411. package/dist/tools/invoke-tool.js +115 -5
  412. package/dist/tools/lease-tools.d.ts +0 -1
  413. package/dist/tools/lease-tools.js +6 -5
  414. package/dist/tools/merge-tools.d.ts +0 -1
  415. package/dist/tools/merge-tools.js +0 -1
  416. package/dist/tools/observe-tools.d.ts +0 -1
  417. package/dist/tools/observe-tools.js +91 -39
  418. package/dist/tools/profiles.d.ts +1 -2
  419. package/dist/tools/profiles.js +43 -16
  420. package/dist/tools/query-paginate.d.ts +0 -1
  421. package/dist/tools/query-paginate.js +0 -1
  422. package/dist/tools/read-tools.d.ts +0 -1
  423. package/dist/tools/read-tools.js +14 -8
  424. package/dist/tools/reconcile-tools.d.ts +2 -0
  425. package/dist/tools/reconcile-tools.js +111 -0
  426. package/dist/tools/snapshot-delta.d.ts +0 -1
  427. package/dist/tools/snapshot-delta.js +0 -0
  428. package/dist/tools/tool-invoker.d.ts +0 -1
  429. package/dist/tools/tool-invoker.js +0 -1
  430. package/dist/tools/tool-kit.d.ts +16 -1
  431. package/dist/tools/tool-kit.js +8 -2
  432. package/dist/tools/tool-names.d.ts +6 -1
  433. package/dist/tools/tool-names.js +6 -1
  434. package/dist/tools/tools-helpers.d.ts +0 -1
  435. package/dist/tools/tools-helpers.js +0 -1
  436. package/dist/tools/tools.d.ts +0 -1
  437. package/dist/tools/tools.js +24 -4
  438. package/dist/update/update-checker.d.ts +0 -1
  439. package/dist/update/update-checker.js +0 -1
  440. package/dist/update/update-nudge.d.ts +20 -0
  441. package/dist/update/update-nudge.js +72 -0
  442. package/dist/update/updater.d.ts +14 -1
  443. package/dist/update/updater.js +33 -2
  444. package/dist/visual/visual-diff.d.ts +0 -1
  445. package/dist/visual/visual-diff.js +0 -1
  446. package/dist/visual/visual-store.d.ts +0 -1
  447. package/dist/visual/visual-store.js +0 -1
  448. package/dist/visual/visual-tools.d.ts +0 -1
  449. package/dist/visual/visual-tools.js +103 -16
  450. package/package.json +2 -2
  451. package/dist/bridge-security.d.ts.map +0 -1
  452. package/dist/bridge-security.js.map +0 -1
  453. package/dist/bridge.d.ts.map +0 -1
  454. package/dist/bridge.js.map +0 -1
  455. package/dist/bridge.test-harness.d.ts.map +0 -1
  456. package/dist/bridge.test-harness.js.map +0 -1
  457. package/dist/capsule/capsule-store.d.ts.map +0 -1
  458. package/dist/capsule/capsule-store.js.map +0 -1
  459. package/dist/capsule/capsule.d.ts.map +0 -1
  460. package/dist/capsule/capsule.js.map +0 -1
  461. package/dist/capsule/causal-summary.d.ts.map +0 -1
  462. package/dist/capsule/causal-summary.js.map +0 -1
  463. package/dist/capsule/divergence.d.ts.map +0 -1
  464. package/dist/capsule/divergence.js.map +0 -1
  465. package/dist/capsule/minimize.d.ts.map +0 -1
  466. package/dist/capsule/minimize.js.map +0 -1
  467. package/dist/capsule/predicate-to-links.d.ts.map +0 -1
  468. package/dist/capsule/predicate-to-links.js.map +0 -1
  469. package/dist/cli-flow-commands.d.ts.map +0 -1
  470. package/dist/cli-flow-commands.js.map +0 -1
  471. package/dist/cli-launch.d.ts.map +0 -1
  472. package/dist/cli-launch.js.map +0 -1
  473. package/dist/cli-parse.d.ts.map +0 -1
  474. package/dist/cli-parse.js.map +0 -1
  475. package/dist/cli-port.d.ts.map +0 -1
  476. package/dist/cli-port.js.map +0 -1
  477. package/dist/cli-verify.d.ts.map +0 -1
  478. package/dist/cli-verify.js.map +0 -1
  479. package/dist/cli.d.ts.map +0 -1
  480. package/dist/cli.js.map +0 -1
  481. package/dist/cloud/cloud-config.d.ts.map +0 -1
  482. package/dist/cloud/cloud-config.js.map +0 -1
  483. package/dist/cloud/cloud-sync.d.ts.map +0 -1
  484. package/dist/cloud/cloud-sync.js.map +0 -1
  485. package/dist/cloud-cli.d.ts.map +0 -1
  486. package/dist/cloud-cli.js.map +0 -1
  487. package/dist/crawl/crawl-tools.d.ts.map +0 -1
  488. package/dist/crawl/crawl-tools.js.map +0 -1
  489. package/dist/crawl/crawl.d.ts.map +0 -1
  490. package/dist/crawl/crawl.js.map +0 -1
  491. package/dist/daemon-resilience.d.ts.map +0 -1
  492. package/dist/daemon-resilience.js.map +0 -1
  493. package/dist/daemon.d.ts.map +0 -1
  494. package/dist/daemon.js.map +0 -1
  495. package/dist/domain/domain-model.d.ts.map +0 -1
  496. package/dist/domain/domain-model.js.map +0 -1
  497. package/dist/domain/domain-tools.d.ts.map +0 -1
  498. package/dist/domain/domain-tools.js.map +0 -1
  499. package/dist/domain/flow-risk.d.ts.map +0 -1
  500. package/dist/domain/flow-risk.js.map +0 -1
  501. package/dist/ee/audit-log.d.ts.map +0 -1
  502. package/dist/ee/audit-log.js.map +0 -1
  503. package/dist/events/event-filters.d.ts.map +0 -1
  504. package/dist/events/event-filters.js.map +0 -1
  505. package/dist/events/predicate-eval.d.ts.map +0 -1
  506. package/dist/events/predicate-eval.js.map +0 -1
  507. package/dist/events/predicate.d.ts.map +0 -1
  508. package/dist/events/predicate.js.map +0 -1
  509. package/dist/events/reaction.d.ts.map +0 -1
  510. package/dist/events/reaction.js.map +0 -1
  511. package/dist/events/ring-buffer.d.ts.map +0 -1
  512. package/dist/events/ring-buffer.js.map +0 -1
  513. package/dist/flows/affected.d.ts.map +0 -1
  514. package/dist/flows/affected.js.map +0 -1
  515. package/dist/flows/annotate-tools.d.ts.map +0 -1
  516. package/dist/flows/annotate-tools.js.map +0 -1
  517. package/dist/flows/annotate.d.ts.map +0 -1
  518. package/dist/flows/annotate.js.map +0 -1
  519. package/dist/flows/annotation-store.d.ts.map +0 -1
  520. package/dist/flows/annotation-store.js.map +0 -1
  521. package/dist/flows/assertion-integrity.d.ts.map +0 -1
  522. package/dist/flows/assertion-integrity.js.map +0 -1
  523. package/dist/flows/assertion-tiers-store.d.ts.map +0 -1
  524. package/dist/flows/assertion-tiers-store.js.map +0 -1
  525. package/dist/flows/buddy-status.d.ts.map +0 -1
  526. package/dist/flows/buddy-status.js.map +0 -1
  527. package/dist/flows/coverage.d.ts.map +0 -1
  528. package/dist/flows/coverage.js.map +0 -1
  529. package/dist/flows/decision.d.ts.map +0 -1
  530. package/dist/flows/decision.js.map +0 -1
  531. package/dist/flows/flake-store.d.ts.map +0 -1
  532. package/dist/flows/flake-store.js.map +0 -1
  533. package/dist/flows/flake.d.ts.map +0 -1
  534. package/dist/flows/flake.js.map +0 -1
  535. package/dist/flows/flow-classify.d.ts.map +0 -1
  536. package/dist/flows/flow-classify.js.map +0 -1
  537. package/dist/flows/flow-replay-run.d.ts.map +0 -1
  538. package/dist/flows/flow-replay-run.js.map +0 -1
  539. package/dist/flows/flow-replay.d.ts.map +0 -1
  540. package/dist/flows/flow-replay.js.map +0 -1
  541. package/dist/flows/flow-report.d.ts.map +0 -1
  542. package/dist/flows/flow-report.js.map +0 -1
  543. package/dist/flows/flow-scope.d.ts.map +0 -1
  544. package/dist/flows/flow-scope.js.map +0 -1
  545. package/dist/flows/flow-sources.d.ts.map +0 -1
  546. package/dist/flows/flow-sources.js.map +0 -1
  547. package/dist/flows/flow-success.d.ts.map +0 -1
  548. package/dist/flows/flow-success.js.map +0 -1
  549. package/dist/flows/flow-tools.d.ts.map +0 -1
  550. package/dist/flows/flow-tools.js.map +0 -1
  551. package/dist/flows/flows.d.ts.map +0 -1
  552. package/dist/flows/flows.js.map +0 -1
  553. package/dist/flows/gate.d.ts.map +0 -1
  554. package/dist/flows/gate.js.map +0 -1
  555. package/dist/flows/git-changed.d.ts.map +0 -1
  556. package/dist/flows/git-changed.js.map +0 -1
  557. package/dist/flows/heal-run.d.ts.map +0 -1
  558. package/dist/flows/heal-run.js.map +0 -1
  559. package/dist/flows/heal.d.ts.map +0 -1
  560. package/dist/flows/heal.js.map +0 -1
  561. package/dist/flows/parallel-suite.d.ts.map +0 -1
  562. package/dist/flows/parallel-suite.js.map +0 -1
  563. package/dist/flows/recordings.d.ts.map +0 -1
  564. package/dist/flows/recordings.js.map +0 -1
  565. package/dist/flows/replay.d.ts.map +0 -1
  566. package/dist/flows/replay.js.map +0 -1
  567. package/dist/flows/server-verify.d.ts.map +0 -1
  568. package/dist/flows/server-verify.js.map +0 -1
  569. package/dist/flows/watch-batcher.d.ts.map +0 -1
  570. package/dist/flows/watch-batcher.js.map +0 -1
  571. package/dist/honesty/blind-spots.d.ts.map +0 -1
  572. package/dist/honesty/blind-spots.js.map +0 -1
  573. package/dist/honesty/honesty.d.ts.map +0 -1
  574. package/dist/honesty/honesty.js.map +0 -1
  575. package/dist/http-server.d.ts.map +0 -1
  576. package/dist/http-server.js.map +0 -1
  577. package/dist/idle-shutdown.d.ts.map +0 -1
  578. package/dist/idle-shutdown.js.map +0 -1
  579. package/dist/index.d.ts.map +0 -1
  580. package/dist/index.js.map +0 -1
  581. package/dist/init/agent-rules.d.ts.map +0 -1
  582. package/dist/init/agent-rules.js.map +0 -1
  583. package/dist/init/cursor.d.ts.map +0 -1
  584. package/dist/init/cursor.js.map +0 -1
  585. package/dist/init/detect.d.ts.map +0 -1
  586. package/dist/init/detect.js.map +0 -1
  587. package/dist/init/mcp.d.ts.map +0 -1
  588. package/dist/init/mcp.js.map +0 -1
  589. package/dist/init/node-io.d.ts.map +0 -1
  590. package/dist/init/node-io.js.map +0 -1
  591. package/dist/init/plan.d.ts.map +0 -1
  592. package/dist/init/plan.js.map +0 -1
  593. package/dist/init/project-id.d.ts.map +0 -1
  594. package/dist/init/project-id.js.map +0 -1
  595. package/dist/init/run.d.ts.map +0 -1
  596. package/dist/init/run.js.map +0 -1
  597. package/dist/init/snippets.d.ts.map +0 -1
  598. package/dist/init/snippets.js.map +0 -1
  599. package/dist/init/vite-config.d.ts.map +0 -1
  600. package/dist/init/vite-config.js.map +0 -1
  601. package/dist/input/network-detail.d.ts.map +0 -1
  602. package/dist/input/network-detail.js.map +0 -1
  603. package/dist/input/network-mock-tools.d.ts.map +0 -1
  604. package/dist/input/network-mock-tools.js.map +0 -1
  605. package/dist/input/network-mock.d.ts.map +0 -1
  606. package/dist/input/network-mock.js.map +0 -1
  607. package/dist/input/real-input.d.ts.map +0 -1
  608. package/dist/input/real-input.js.map +0 -1
  609. package/dist/input/scroll-find.d.ts.map +0 -1
  610. package/dist/input/scroll-find.js.map +0 -1
  611. package/dist/input/scroll-tools.d.ts.map +0 -1
  612. package/dist/input/scroll-tools.js.map +0 -1
  613. package/dist/input/viewport-tools.d.ts.map +0 -1
  614. package/dist/input/viewport-tools.js.map +0 -1
  615. package/dist/journal/ambient-store.d.ts.map +0 -1
  616. package/dist/journal/ambient-store.js.map +0 -1
  617. package/dist/journal/ambient.d.ts.map +0 -1
  618. package/dist/journal/ambient.js.map +0 -1
  619. package/dist/journal/attach-journal.d.ts.map +0 -1
  620. package/dist/journal/attach-journal.js.map +0 -1
  621. package/dist/journal/deviation-report.d.ts.map +0 -1
  622. package/dist/journal/deviation-report.js.map +0 -1
  623. package/dist/journal/deviation-service.d.ts.map +0 -1
  624. package/dist/journal/deviation-service.js.map +0 -1
  625. package/dist/journal/envelope-store.d.ts.map +0 -1
  626. package/dist/journal/envelope-store.js.map +0 -1
  627. package/dist/journal/envelope.d.ts.map +0 -1
  628. package/dist/journal/envelope.js.map +0 -1
  629. package/dist/journal/journal-query.d.ts.map +0 -1
  630. package/dist/journal/journal-query.js.map +0 -1
  631. package/dist/journal/journal-recorder.d.ts.map +0 -1
  632. package/dist/journal/journal-recorder.js.map +0 -1
  633. package/dist/journal/retention.d.ts.map +0 -1
  634. package/dist/journal/retention.js.map +0 -1
  635. package/dist/journal/rollups.d.ts.map +0 -1
  636. package/dist/journal/rollups.js.map +0 -1
  637. package/dist/journal/session-end.d.ts.map +0 -1
  638. package/dist/journal/session-end.js.map +0 -1
  639. package/dist/journal/session-journal.d.ts.map +0 -1
  640. package/dist/journal/session-journal.js.map +0 -1
  641. package/dist/license/license.d.ts.map +0 -1
  642. package/dist/license/license.js.map +0 -1
  643. package/dist/log.d.ts.map +0 -1
  644. package/dist/log.js.map +0 -1
  645. package/dist/mcp-proxy.d.ts.map +0 -1
  646. package/dist/mcp-proxy.js.map +0 -1
  647. package/dist/mcp.d.ts.map +0 -1
  648. package/dist/mcp.js.map +0 -1
  649. package/dist/oracles/flow-instrument-gaps.d.ts.map +0 -1
  650. package/dist/oracles/flow-instrument-gaps.js.map +0 -1
  651. package/dist/oracles/propose-consequences.d.ts.map +0 -1
  652. package/dist/oracles/propose-consequences.js.map +0 -1
  653. package/dist/oracles/self-instrument.d.ts.map +0 -1
  654. package/dist/oracles/self-instrument.js.map +0 -1
  655. package/dist/pairing-token.d.ts.map +0 -1
  656. package/dist/pairing-token.js.map +0 -1
  657. package/dist/phenomena/phenomena.d.ts.map +0 -1
  658. package/dist/phenomena/phenomena.js.map +0 -1
  659. package/dist/pool/browser-pool.d.ts.map +0 -1
  660. package/dist/pool/browser-pool.js.map +0 -1
  661. package/dist/pool/lease-reaper.d.ts.map +0 -1
  662. package/dist/pool/lease-reaper.js.map +0 -1
  663. package/dist/pool/playwright-launcher.d.ts.map +0 -1
  664. package/dist/pool/playwright-launcher.js.map +0 -1
  665. package/dist/project/baselines.d.ts.map +0 -1
  666. package/dist/project/baselines.js.map +0 -1
  667. package/dist/project/file-lock.d.ts.map +0 -1
  668. package/dist/project/file-lock.js.map +0 -1
  669. package/dist/project/fs-port.d.ts.map +0 -1
  670. package/dist/project/fs-port.js.map +0 -1
  671. package/dist/project/project-store.d.ts.map +0 -1
  672. package/dist/project/project-store.js.map +0 -1
  673. package/dist/project/project-tools.d.ts.map +0 -1
  674. package/dist/project/project-tools.js.map +0 -1
  675. package/dist/project/reticle-dir.d.ts.map +0 -1
  676. package/dist/project/reticle-dir.js.map +0 -1
  677. package/dist/runs/build-verification-run.d.ts.map +0 -1
  678. package/dist/runs/build-verification-run.js.map +0 -1
  679. package/dist/runs/profile-redact.d.ts.map +0 -1
  680. package/dist/runs/profile-redact.js.map +0 -1
  681. package/dist/runs/render-report.d.ts.map +0 -1
  682. package/dist/runs/render-report.js.map +0 -1
  683. package/dist/runs/repair-prompt.d.ts.map +0 -1
  684. package/dist/runs/repair-prompt.js.map +0 -1
  685. package/dist/runs/replay-mapping.d.ts.map +0 -1
  686. package/dist/runs/replay-mapping.js.map +0 -1
  687. package/dist/runs/reticle-runner.d.ts.map +0 -1
  688. package/dist/runs/reticle-runner.js.map +0 -1
  689. package/dist/runs/risk-classify.d.ts.map +0 -1
  690. package/dist/runs/risk-classify.js.map +0 -1
  691. package/dist/runs/run-diff.d.ts.map +0 -1
  692. package/dist/runs/run-diff.js.map +0 -1
  693. package/dist/runs/run-store.d.ts.map +0 -1
  694. package/dist/runs/run-store.js.map +0 -1
  695. package/dist/runs/run-tools.d.ts.map +0 -1
  696. package/dist/runs/run-tools.js.map +0 -1
  697. package/dist/runs/runner-port.d.ts.map +0 -1
  698. package/dist/runs/runner-port.js.map +0 -1
  699. package/dist/runs/verification-sync.d.ts.map +0 -1
  700. package/dist/runs/verification-sync.js.map +0 -1
  701. package/dist/runs/verify-http.d.ts.map +0 -1
  702. package/dist/runs/verify-http.js.map +0 -1
  703. package/dist/runs/verify-server.d.ts.map +0 -1
  704. package/dist/runs/verify-server.js.map +0 -1
  705. package/dist/server-version.d.ts.map +0 -1
  706. package/dist/server-version.js.map +0 -1
  707. package/dist/session/control-envelope.d.ts.map +0 -1
  708. package/dist/session/control-envelope.js.map +0 -1
  709. package/dist/session/live-control-tools.d.ts.map +0 -1
  710. package/dist/session/live-control-tools.js.map +0 -1
  711. package/dist/session/live-control.d.ts.map +0 -1
  712. package/dist/session/live-control.js.map +0 -1
  713. package/dist/session/observed-state.d.ts.map +0 -1
  714. package/dist/session/observed-state.js.map +0 -1
  715. package/dist/session/output-budget.d.ts.map +0 -1
  716. package/dist/session/output-budget.js.map +0 -1
  717. package/dist/session/presenter-args.d.ts.map +0 -1
  718. package/dist/session/presenter-args.js.map +0 -1
  719. package/dist/session/review-store.d.ts.map +0 -1
  720. package/dist/session/review-store.js.map +0 -1
  721. package/dist/session/session-health.d.ts.map +0 -1
  722. package/dist/session/session-health.js.map +0 -1
  723. package/dist/session/session-manager.d.ts.map +0 -1
  724. package/dist/session/session-manager.js.map +0 -1
  725. package/dist/session/session-readiness.d.ts.map +0 -1
  726. package/dist/session/session-readiness.js.map +0 -1
  727. package/dist/session/session-reaper.d.ts.map +0 -1
  728. package/dist/session/session-reaper.js.map +0 -1
  729. package/dist/session/session-recommendation.d.ts.map +0 -1
  730. package/dist/session/session-recommendation.js.map +0 -1
  731. package/dist/session/session-tools.d.ts.map +0 -1
  732. package/dist/session/session-tools.js.map +0 -1
  733. package/dist/session/session.d.ts.map +0 -1
  734. package/dist/session/session.js.map +0 -1
  735. package/dist/session/state-select.d.ts.map +0 -1
  736. package/dist/session/state-select.js.map +0 -1
  737. package/dist/telemetry/telemetry.d.ts.map +0 -1
  738. package/dist/telemetry/telemetry.js.map +0 -1
  739. package/dist/token-auth.d.ts.map +0 -1
  740. package/dist/token-auth.js.map +0 -1
  741. package/dist/tools/act-tools.d.ts.map +0 -1
  742. package/dist/tools/act-tools.js.map +0 -1
  743. package/dist/tools/act-view.d.ts.map +0 -1
  744. package/dist/tools/act-view.js.map +0 -1
  745. package/dist/tools/assert-grade.d.ts.map +0 -1
  746. package/dist/tools/assert-grade.js.map +0 -1
  747. package/dist/tools/browser-tools.d.ts.map +0 -1
  748. package/dist/tools/browser-tools.js.map +0 -1
  749. package/dist/tools/contract-tools.d.ts.map +0 -1
  750. package/dist/tools/contract-tools.js.map +0 -1
  751. package/dist/tools/dynamic-tools.d.ts.map +0 -1
  752. package/dist/tools/dynamic-tools.js.map +0 -1
  753. package/dist/tools/error-recovery.d.ts.map +0 -1
  754. package/dist/tools/error-recovery.js.map +0 -1
  755. package/dist/tools/invoke-tool.d.ts.map +0 -1
  756. package/dist/tools/invoke-tool.js.map +0 -1
  757. package/dist/tools/lease-tools.d.ts.map +0 -1
  758. package/dist/tools/lease-tools.js.map +0 -1
  759. package/dist/tools/merge-tools.d.ts.map +0 -1
  760. package/dist/tools/merge-tools.js.map +0 -1
  761. package/dist/tools/observe-tools.d.ts.map +0 -1
  762. package/dist/tools/observe-tools.js.map +0 -1
  763. package/dist/tools/profiles.d.ts.map +0 -1
  764. package/dist/tools/profiles.js.map +0 -1
  765. package/dist/tools/query-paginate.d.ts.map +0 -1
  766. package/dist/tools/query-paginate.js.map +0 -1
  767. package/dist/tools/read-tools.d.ts.map +0 -1
  768. package/dist/tools/read-tools.js.map +0 -1
  769. package/dist/tools/snapshot-delta.d.ts.map +0 -1
  770. package/dist/tools/snapshot-delta.js.map +0 -1
  771. package/dist/tools/tool-invoker.d.ts.map +0 -1
  772. package/dist/tools/tool-invoker.js.map +0 -1
  773. package/dist/tools/tool-kit.d.ts.map +0 -1
  774. package/dist/tools/tool-kit.js.map +0 -1
  775. package/dist/tools/tool-names.d.ts.map +0 -1
  776. package/dist/tools/tool-names.js.map +0 -1
  777. package/dist/tools/tools-helpers.d.ts.map +0 -1
  778. package/dist/tools/tools-helpers.js.map +0 -1
  779. package/dist/tools/tools.d.ts.map +0 -1
  780. package/dist/tools/tools.js.map +0 -1
  781. package/dist/update/update-checker.d.ts.map +0 -1
  782. package/dist/update/update-checker.js.map +0 -1
  783. package/dist/update/updater.d.ts.map +0 -1
  784. package/dist/update/updater.js.map +0 -1
  785. package/dist/visual/visual-diff.d.ts.map +0 -1
  786. package/dist/visual/visual-diff.js.map +0 -1
  787. package/dist/visual/visual-store.d.ts.map +0 -1
  788. package/dist/visual/visual-store.js.map +0 -1
  789. package/dist/visual/visual-tools.d.ts.map +0 -1
  790. package/dist/visual/visual-tools.js.map +0 -1
@@ -6,6 +6,7 @@ export declare const Framework: {
6
6
  readonly NEXT: "next";
7
7
  readonly VITE: "vite";
8
8
  readonly SVELTEKIT: "sveltekit";
9
+ readonly ASTRO: "astro";
9
10
  readonly HTML: "html";
10
11
  };
11
12
  export type Framework = (typeof Framework)[keyof typeof Framework];
@@ -27,9 +28,31 @@ export interface DetectInput {
27
28
  configFiles: ReadonlySet<string>;
28
29
  /** Lockfile basenames present in the project root. */
29
30
  lockfiles: ReadonlySet<string>;
31
+ /** Marker basenames inside `node_modules` (`.modules.yaml`, `.yarn-state.yml`, …), if installed. */
32
+ nodeModulesMarkers?: ReadonlySet<string>;
30
33
  }
34
+ /**
35
+ * The UI library the app renders with. Detection used to key on "vite is in package.json" and stop
36
+ * there, so a Vue or Preact app got `@reticlehq/react` installed and an all-green report with no
37
+ * mention that the React adapter has nothing to attach to.
38
+ */
39
+ export declare const UiLibrary: {
40
+ readonly REACT: "react";
41
+ readonly PREACT: "preact";
42
+ readonly VUE: "vue";
43
+ readonly SVELTE: "svelte";
44
+ readonly UNKNOWN: "unknown";
45
+ };
46
+ export type UiLibrary = (typeof UiLibrary)[keyof typeof UiLibrary];
31
47
  export interface Detection {
32
48
  framework: Framework;
49
+ uiLibrary: UiLibrary;
50
+ /**
51
+ * Whether the project is TypeScript. Not cosmetic: generating a `.tsx` file into a JavaScript
52
+ * project makes Next auto-install TypeScript on the next `next dev`, which on Next 13 takes its
53
+ * require-hook down with it and the dev server never starts.
54
+ */
55
+ typescript: boolean;
33
56
  reactMajor: number | undefined;
34
57
  /** React 19 dropped _debugSource, so it needs the build-time source-map stamp. */
35
58
  needsSourceMapping: boolean;
@@ -37,6 +60,8 @@ export interface Detection {
37
60
  }
38
61
  /** Extract the leading major version from a semver range like "^19.0.0" or "19.1.1". */
39
62
  export declare function parseMajor(range: string | undefined): number | undefined;
63
+ /** Marker basenames present inside the project's `node_modules`, if it has one. */
64
+ export declare function packageManagerFromNodeModules(markers: ReadonlySet<string>): PackageManager | undefined;
40
65
  export declare function detect(input: DetectInput): Detection;
41
66
  interface InstallCommand {
42
67
  command: string;
@@ -46,4 +71,3 @@ interface InstallCommand {
46
71
  export declare function installCommandParts(pm: PackageManager, pkgs: string | readonly string[]): InstallCommand;
47
72
  export declare function installCommand(pm: PackageManager, pkgs: string | readonly string[]): string;
48
73
  export {};
49
- //# sourceMappingURL=detect.d.ts.map
@@ -6,6 +6,7 @@ export const Framework = {
6
6
  NEXT: 'next',
7
7
  VITE: 'vite',
8
8
  SVELTEKIT: 'sveltekit',
9
+ ASTRO: 'astro',
9
10
  HTML: 'html',
10
11
  };
11
12
  export const PackageManager = {
@@ -14,9 +15,22 @@ export const PackageManager = {
14
15
  BUN: 'bun',
15
16
  NPM: 'npm',
16
17
  };
18
+ /**
19
+ * The UI library the app renders with. Detection used to key on "vite is in package.json" and stop
20
+ * there, so a Vue or Preact app got `@reticlehq/react` installed and an all-green report with no
21
+ * mention that the React adapter has nothing to attach to.
22
+ */
23
+ export const UiLibrary = {
24
+ REACT: 'react',
25
+ PREACT: 'preact',
26
+ VUE: 'vue',
27
+ SVELTE: 'svelte',
28
+ UNKNOWN: 'unknown',
29
+ };
17
30
  const NEXT_CONFIGS = ['next.config.js', 'next.config.mjs', 'next.config.ts', 'next.config.cjs'];
18
31
  const VITE_CONFIGS = ['vite.config.js', 'vite.config.ts', 'vite.config.mjs', 'vite.config.mts'];
19
32
  const SVELTE_CONFIGS = ['svelte.config.js', 'svelte.config.ts', 'svelte.config.mjs'];
33
+ const ASTRO_CONFIGS = ['astro.config.mjs', 'astro.config.js', 'astro.config.ts', 'astro.config.cjs'];
20
34
  function depVersion(pkg, name) {
21
35
  return pkg.dependencies?.[name] ?? pkg.devDependencies?.[name] ?? pkg.peerDependencies?.[name];
22
36
  }
@@ -33,14 +47,36 @@ export function parseMajor(range) {
33
47
  const major = parseInt(match[1], 10);
34
48
  return isNaN(major) ? undefined : major;
35
49
  }
36
- function detectPackageManager(lockfiles) {
50
+ /**
51
+ * Markers each package manager leaves INSIDE `node_modules`. An installed tree is the strongest
52
+ * evidence there is — stronger than a lockfile, which may simply not be committed.
53
+ *
54
+ * Without this, a pnpm-installed project with no committed lockfile was read as npm, and `npm i -D`
55
+ * then died on pnpm's symlink layout with `Cannot read properties of null (reading 'matches')`. Worse,
56
+ * it left the package present in `node_modules` but absent from `package.json`, so every later run
57
+ * reported the same failure — a setup that could not be retried into working.
58
+ */
59
+ const NODE_MODULES_MARKERS = [
60
+ ['.modules.yaml', PackageManager.PNPM],
61
+ ['.yarn-state.yml', PackageManager.YARN],
62
+ ['.package-lock.json', PackageManager.NPM],
63
+ ];
64
+ /** Marker basenames present inside the project's `node_modules`, if it has one. */
65
+ export function packageManagerFromNodeModules(markers) {
66
+ for (const [name, pm] of NODE_MODULES_MARKERS)
67
+ if (markers.has(name))
68
+ return pm;
69
+ return undefined;
70
+ }
71
+ function detectPackageManager(lockfiles, nodeModulesMarkers) {
37
72
  if (lockfiles.has('pnpm-lock.yaml'))
38
73
  return PackageManager.PNPM;
39
74
  if (lockfiles.has('yarn.lock'))
40
75
  return PackageManager.YARN;
41
76
  if (lockfiles.has('bun.lockb') || lockfiles.has('bun.lock'))
42
77
  return PackageManager.BUN;
43
- return PackageManager.NPM;
78
+ // No lockfile is not the same as "npm". An already-installed tree says which manager built it.
79
+ return packageManagerFromNodeModules(nodeModulesMarkers) ?? PackageManager.NPM;
44
80
  }
45
81
  function detectFramework(input) {
46
82
  const { pkg, configFiles } = input;
@@ -52,18 +88,44 @@ function detectFramework(input) {
52
88
  if (depVersion(pkg, '@sveltejs/kit') !== undefined || hasAnyConfig(configFiles, SVELTE_CONFIGS)) {
53
89
  return Framework.SVELTEKIT;
54
90
  }
91
+ // Astro is Vite-based but SSRs its own HTML, so the plugin's index.html injection never fires and
92
+ // `vite` is not a direct dependency — it used to fall all the way through to HTML and be handed
93
+ // connect instructions for a bundler it does not have. Check BEFORE the generic Vite branch.
94
+ if (depVersion(pkg, 'astro') !== undefined || hasAnyConfig(configFiles, ASTRO_CONFIGS)) {
95
+ return Framework.ASTRO;
96
+ }
55
97
  if (depVersion(pkg, 'vite') !== undefined || hasAnyConfig(configFiles, VITE_CONFIGS)) {
56
98
  return Framework.VITE;
57
99
  }
58
100
  return Framework.HTML;
59
101
  }
102
+ /**
103
+ * React first: a Preact app using preact/compat aliases React, and Next/Remix apps list both. The
104
+ * order is the precedence — whichever the app actually renders through is the one it depends on
105
+ * directly.
106
+ */
107
+ function detectUiLibrary(pkg) {
108
+ if (depVersion(pkg, 'react') !== undefined)
109
+ return UiLibrary.REACT;
110
+ if (depVersion(pkg, 'preact') !== undefined)
111
+ return UiLibrary.PREACT;
112
+ if (depVersion(pkg, 'vue') !== undefined)
113
+ return UiLibrary.VUE;
114
+ if (depVersion(pkg, 'svelte') !== undefined)
115
+ return UiLibrary.SVELTE;
116
+ return UiLibrary.UNKNOWN;
117
+ }
118
+ const TS_CONFIGS = ['tsconfig.json'];
60
119
  export function detect(input) {
61
120
  const reactMajor = parseMajor(depVersion(input.pkg, 'react'));
62
121
  return {
63
122
  framework: detectFramework(input),
123
+ uiLibrary: detectUiLibrary(input.pkg),
124
+ typescript: hasAnyConfig(input.configFiles, TS_CONFIGS) ||
125
+ depVersion(input.pkg, 'typescript') !== undefined,
64
126
  reactMajor,
65
127
  needsSourceMapping: reactMajor !== undefined && reactMajor >= 19,
66
- packageManager: detectPackageManager(input.lockfiles),
128
+ packageManager: detectPackageManager(input.lockfiles, input.nodeModulesMarkers ?? new Set()),
67
129
  };
68
130
  }
69
131
  const INSTALL_ARGS = {
@@ -81,4 +143,3 @@ export function installCommand(pm, pkgs) {
81
143
  const { command, args } = installCommandParts(pm, pkgs);
82
144
  return `${command} ${args.join(' ')}`;
83
145
  }
84
- //# sourceMappingURL=detect.js.map
@@ -37,4 +37,3 @@ export declare function claudeAvailableProbe(): {
37
37
  /** Printed when the `claude` CLI isn't available — register Reticle globally once, by hand. */
38
38
  export declare function mcpManual(): string;
39
39
  export {};
40
- //# sourceMappingURL=mcp.d.ts.map
package/dist/init/mcp.js CHANGED
@@ -53,4 +53,3 @@ Or, for another agent, add this to its global MCP config (e.g. Cursor's ~/.curso
53
53
 
54
54
  "${MCP_SERVER_NAME}": { "command": "${NPX}", "args": ${JSON.stringify(serverInvocation().slice(1))} }`;
55
55
  }
56
- //# sourceMappingURL=mcp.js.map
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Pure, conservative patchers for the two files a Next app needed edited BY HAND: `next.config.*`
3
+ * (wrap the export in `withReticle`) and `app/layout.tsx` (mount `<ReticleDev />`). Same contract as
4
+ * the Vite patcher — recognise the obvious shape, bail to `manual` on anything ambiguous, never
5
+ * half-edit. Leaving these manual is why Next connected 0% of the time: both edits are silent when
6
+ * skipped, and one of them is JSX.
7
+ */
8
+ import { type SourcePatch } from './patch-kind.js';
9
+ export declare const NEXT_CONFIG_IMPORT = "import { withReticle } from '@reticlehq/next';";
10
+ export declare const NEXT_CONFIG_REQUIRE = "const { withReticle } = require('@reticlehq/next');";
11
+ export declare const RETICLE_DEV_IMPORT: string;
12
+ /** Where the generated connect component goes, and how the mount file should import it. */
13
+ export interface ReticleDevLocation {
14
+ /** Project-relative path to write. */
15
+ path: string;
16
+ /** What the mount file (`app/layout.*` or `pages/_app.*`) should import. */
17
+ importSpecifier: string;
18
+ }
19
+ /**
20
+ * Decide where the connect component lives, from the file that will mount it.
21
+ *
22
+ * Two things this gets wrong if hardcoded, both of which broke real apps:
23
+ *
24
+ * - **Pages Router routes on presence.** EVERY file under `pages/` is a route, so a component
25
+ * dropped there has no default export: `/reticle-dev` 500s and `next build` fails. It has to go
26
+ * somewhere that is not a route directory. App Router routes on FILENAME (`page`/`layout`/
27
+ * `route`), so an extra file beside the layout is inert and can stay there.
28
+ * - **The extension is not cosmetic.** A `.tsx` file in a JavaScript project makes Next auto-install
29
+ * TypeScript on the next `next dev` — and on Next 13 that takes its require-hook down with it, so
30
+ * the dev server never starts. The install then looks like it broke the app, because it did.
31
+ */
32
+ export declare function reticleDevLocation(mountPath: string, typescript: boolean): ReticleDevLocation;
33
+ export declare function patchNextConfig(source: string): SourcePatch;
34
+ /**
35
+ * Pages Router has no root layout to mount into — `app/layout.tsx` does not exist — so the connect
36
+ * rides in `pages/_app` instead, wrapped in a fragment alongside the page. Without this, `init`
37
+ * wrote `app/reticle-dev.tsx` into a directory the app does not have and nothing ever connected,
38
+ * with no error to say so.
39
+ */
40
+ export declare function patchPagesApp(source: string, importSpecifier?: string): SourcePatch;
41
+ export declare function patchRootLayout(source: string): SourcePatch;
@@ -0,0 +1,106 @@
1
+ /**
2
+ * Pure, conservative patchers for the two files a Next app needed edited BY HAND: `next.config.*`
3
+ * (wrap the export in `withReticle`) and `app/layout.tsx` (mount `<ReticleDev />`). Same contract as
4
+ * the Vite patcher — recognise the obvious shape, bail to `manual` on anything ambiguous, never
5
+ * half-edit. Leaving these manual is why Next connected 0% of the time: both edits are silent when
6
+ * skipped, and one of them is JSX.
7
+ */
8
+ import { PatchKind } from './patch-kind.js';
9
+ const RETICLE_NEXT_PACKAGE = '@reticlehq/next';
10
+ export const NEXT_CONFIG_IMPORT = `import { withReticle } from '${RETICLE_NEXT_PACKAGE}';`;
11
+ export const NEXT_CONFIG_REQUIRE = `const { withReticle } = require('${RETICLE_NEXT_PACKAGE}');`;
12
+ const RETICLE_DEV_COMPONENT = 'ReticleDev';
13
+ const RETICLE_DEV_BASENAME = 'reticle-dev';
14
+ /** Default import specifier: the component sits beside the file importing it (App Router). */
15
+ const RETICLE_DEV_SIBLING = `./${RETICLE_DEV_BASENAME}`;
16
+ const reticleDevImport = (specifier) => `import { ${RETICLE_DEV_COMPONENT} } from '${specifier}';`;
17
+ export const RETICLE_DEV_IMPORT = reticleDevImport(RETICLE_DEV_SIBLING);
18
+ /**
19
+ * Decide where the connect component lives, from the file that will mount it.
20
+ *
21
+ * Two things this gets wrong if hardcoded, both of which broke real apps:
22
+ *
23
+ * - **Pages Router routes on presence.** EVERY file under `pages/` is a route, so a component
24
+ * dropped there has no default export: `/reticle-dev` 500s and `next build` fails. It has to go
25
+ * somewhere that is not a route directory. App Router routes on FILENAME (`page`/`layout`/
26
+ * `route`), so an extra file beside the layout is inert and can stay there.
27
+ * - **The extension is not cosmetic.** A `.tsx` file in a JavaScript project makes Next auto-install
28
+ * TypeScript on the next `next dev` — and on Next 13 that takes its require-hook down with it, so
29
+ * the dev server never starts. The install then looks like it broke the app, because it did.
30
+ */
31
+ export function reticleDevLocation(mountPath, typescript) {
32
+ const ext = typescript ? '.tsx' : '.jsx';
33
+ const slash = mountPath.lastIndexOf('/');
34
+ const dir = slash === -1 ? '' : mountPath.slice(0, slash);
35
+ const isPagesRouter = /(^|\/)pages$/.test(dir);
36
+ if (!isPagesRouter) {
37
+ return {
38
+ path: `${dir === '' ? '' : `${dir}/`}${RETICLE_DEV_BASENAME}${ext}`,
39
+ importSpecifier: RETICLE_DEV_SIBLING,
40
+ };
41
+ }
42
+ // Siblings of `pages/`, so `src/pages/_app.js` → `src/components/…` and `pages/_app.js` → `components/…`.
43
+ const parent = dir.slice(0, Math.max(0, dir.length - 'pages'.length));
44
+ return {
45
+ path: `${parent}components/${RETICLE_DEV_BASENAME}${ext}`,
46
+ importSpecifier: `../components/${RETICLE_DEV_BASENAME}`,
47
+ };
48
+ }
49
+ /** The dev-guarded mount. Production strips it — `process.env.NODE_ENV` is inlined at build time. */
50
+ const RETICLE_DEV_MOUNT = `{process.env.NODE_ENV === 'development' ? <${RETICLE_DEV_COMPONENT} /> : null}`;
51
+ /** `export default <expr>;` — the ESM shape every `create-next-app` config uses. */
52
+ const ESM_DEFAULT_EXPORT = /export\s+default\s+([\s\S]+?);?\s*$/;
53
+ /** `module.exports = <expr>;` — the CJS shape older configs use. */
54
+ const CJS_EXPORT = /module\.exports\s*=\s*([\s\S]+?);?\s*$/;
55
+ /** The opening `<body ...>` tag, whose first child is where the mount goes. */
56
+ const BODY_OPEN_TAG = /<body(\s[^>]*)?>/g;
57
+ const NO_EXPORT_REASON = "couldn't find an `export default` or `module.exports` to wrap";
58
+ const NO_BODY_REASON = "couldn't find a single <body> tag to mount <ReticleDev /> inside";
59
+ export function patchNextConfig(source) {
60
+ if (source.includes(RETICLE_NEXT_PACKAGE))
61
+ return { kind: PatchKind.ALREADY };
62
+ const esm = ESM_DEFAULT_EXPORT.exec(source);
63
+ if (esm?.[1] !== undefined) {
64
+ const wrapped = source.replace(ESM_DEFAULT_EXPORT, `export default withReticle(${esm[1]});\n`);
65
+ return { kind: PatchKind.APPLY, code: `${NEXT_CONFIG_IMPORT}\n${wrapped}` };
66
+ }
67
+ const cjs = CJS_EXPORT.exec(source);
68
+ if (cjs?.[1] !== undefined) {
69
+ const wrapped = source.replace(CJS_EXPORT, `module.exports = withReticle(${cjs[1]});\n`);
70
+ return { kind: PatchKind.APPLY, code: `${NEXT_CONFIG_REQUIRE}\n${wrapped}` };
71
+ }
72
+ return { kind: PatchKind.MANUAL, reason: NO_EXPORT_REASON };
73
+ }
74
+ /** `<Component {...pageProps} />` — the one element every `pages/_app` renders. */
75
+ const PAGES_APP_COMPONENT = /<Component\b[^>]*\/>/g;
76
+ const NO_PAGES_COMPONENT_REASON = "couldn't find a single <Component {...pageProps} /> to wrap in pages/_app";
77
+ /**
78
+ * Pages Router has no root layout to mount into — `app/layout.tsx` does not exist — so the connect
79
+ * rides in `pages/_app` instead, wrapped in a fragment alongside the page. Without this, `init`
80
+ * wrote `app/reticle-dev.tsx` into a directory the app does not have and nothing ever connected,
81
+ * with no error to say so.
82
+ */
83
+ export function patchPagesApp(source, importSpecifier = RETICLE_DEV_SIBLING) {
84
+ if (source.includes(RETICLE_DEV_COMPONENT))
85
+ return { kind: PatchKind.ALREADY };
86
+ const matches = [...source.matchAll(PAGES_APP_COMPONENT)];
87
+ const match = matches.length === 1 ? matches[0] : undefined;
88
+ if (match?.index === undefined)
89
+ return { kind: PatchKind.MANUAL, reason: NO_PAGES_COMPONENT_REASON };
90
+ const wrapped = `<>${RETICLE_DEV_MOUNT}${match[0]}</>`;
91
+ const code = source.slice(0, match.index) + wrapped + source.slice(match.index + match[0].length);
92
+ return { kind: PatchKind.APPLY, code: `${reticleDevImport(importSpecifier)}\n${code}` };
93
+ }
94
+ export function patchRootLayout(source) {
95
+ if (source.includes(RETICLE_DEV_COMPONENT))
96
+ return { kind: PatchKind.ALREADY };
97
+ const tags = [...source.matchAll(BODY_OPEN_TAG)];
98
+ // Exactly one <body> or we cannot tell which one actually renders — and mounting into the wrong
99
+ // one is the same silent no-connect as not mounting at all.
100
+ const tag = tags.length === 1 ? tags[0] : undefined;
101
+ if (tag?.index === undefined)
102
+ return { kind: PatchKind.MANUAL, reason: NO_BODY_REASON };
103
+ const insertAt = tag.index + tag[0].length;
104
+ const mounted = `${source.slice(0, insertAt)}${RETICLE_DEV_MOUNT}${source.slice(insertAt)}`;
105
+ return { kind: PatchKind.APPLY, code: `${RETICLE_DEV_IMPORT}\n${mounted}` };
106
+ }
@@ -5,4 +5,3 @@
5
5
  */
6
6
  import type { InitIo } from './run.js';
7
7
  export declare function buildNodeIo(cwd: string): InitIo;
8
- //# sourceMappingURL=node-io.d.ts.map
@@ -38,6 +38,31 @@ export function buildNodeIo(cwd) {
38
38
  }
39
39
  });
40
40
  },
41
+ listDirs(rel) {
42
+ const path = abs(rel);
43
+ if (!existsSync(path))
44
+ return [];
45
+ try {
46
+ return readdirSync(path).filter((name) => statSync(join(path, name)).isDirectory());
47
+ }
48
+ catch {
49
+ return [];
50
+ }
51
+ },
52
+ listFiles(rel) {
53
+ const path = abs(rel);
54
+ if (!existsSync(path))
55
+ return [];
56
+ try {
57
+ return readdirSync(path).filter((name) => !statSync(join(path, name)).isDirectory());
58
+ }
59
+ catch {
60
+ return [];
61
+ }
62
+ },
63
+ scoped(rel) {
64
+ return buildNodeIo(abs(rel));
65
+ },
41
66
  exec(command, args) {
42
67
  // `shell: true` lets package-manager shims (pnpm.cmd, etc.) resolve on Windows; inherit
43
68
  // stdio so the install's own progress is visible to the user.
@@ -54,4 +79,3 @@ export function buildNodeIo(cwd) {
54
79
  },
55
80
  };
56
81
  }
57
- //# sourceMappingURL=node-io.js.map
@@ -0,0 +1,20 @@
1
+ /**
2
+ * The outcome vocabulary shared by every conservative source patcher in `init` (Vite config, Next
3
+ * config, Next root layout). One enum so a new patcher cannot invent a fourth status the reporter
4
+ * has no symbol for.
5
+ */
6
+ export declare const PatchKind: {
7
+ readonly APPLY: "apply";
8
+ readonly ALREADY: "already";
9
+ readonly MANUAL: "manual";
10
+ };
11
+ export type PatchKind = (typeof PatchKind)[keyof typeof PatchKind];
12
+ export type SourcePatch = {
13
+ kind: typeof PatchKind.APPLY;
14
+ code: string;
15
+ } | {
16
+ kind: typeof PatchKind.ALREADY;
17
+ } | {
18
+ kind: typeof PatchKind.MANUAL;
19
+ reason: string;
20
+ };
@@ -0,0 +1,10 @@
1
+ /**
2
+ * The outcome vocabulary shared by every conservative source patcher in `init` (Vite config, Next
3
+ * config, Next root layout). One enum so a new patcher cannot invent a fourth status the reporter
4
+ * has no symbol for.
5
+ */
6
+ export const PatchKind = {
7
+ APPLY: 'apply',
8
+ ALREADY: 'already',
9
+ MANUAL: 'manual',
10
+ };
@@ -0,0 +1,35 @@
1
+ /**
2
+ * How each framework gets wired: the Vite plugin, the three Next files, the SvelteKit client hook.
3
+ * Split out of `plan.ts` — that file is the plan's SHAPE (statuses, ordering, the agent/MCP steps),
4
+ * this one is the per-framework detail, and they grow for different reasons.
5
+ */
6
+ import { type PlanInput, type Step } from './plan.js';
7
+ /** What adding `reticle()` to a Vite config buys, which differs by framework. */
8
+ export declare const VITE_PLUGIN_DETAIL: {
9
+ /** A plain Vite app gets both halves from the plugin. */
10
+ readonly VITE: "add reticle() to plugins (also injects connect())";
11
+ /**
12
+ * SvelteKit renders through app.html, so the plugin's HTML injection never fires and connect()
13
+ * comes from the client hook instead. The plugin is still required: it is what stamps
14
+ * data-reticle-source into .svelte components, and without it every verdict on a SvelteKit app
15
+ * comes back with no file:line at all.
16
+ */
17
+ readonly SVELTEKIT: "add reticle() to plugins (stamps data-reticle-source in .svelte components)";
18
+ };
19
+ export declare const CAPABILITIES_TITLE = "Capabilities + store";
20
+ export declare function viteSteps(input: PlanInput, detail?: string): Step[];
21
+ /**
22
+ * Next used to be the ONLY stack with hand edits left over — and both of them fail silently when
23
+ * skipped, so a Next user's app booted, connected to nothing, and said nothing about why. Both are
24
+ * now patched by the same conservative rules the Vite config gets.
25
+ */
26
+ export declare function nextSteps(input: PlanInput): Step[];
27
+ /**
28
+ * SvelteKit is WIRED but not SUPPORTED, and the plan says so out loud.
29
+ *
30
+ * There is no SvelteKit app in `apps/` and no CI gate for one, so nothing proves this hook still
31
+ * registers a session — every other framework init offers (React, Next, Remix, Astro) has both. The
32
+ * wiring is real and may well work; what is missing is anything that would tell us when it stops.
33
+ * Silently emitting it reads as a support claim, which is the thing this project exists to not do.
34
+ */
35
+ export declare function svelteKitSteps(input: PlanInput): Step[];
@@ -0,0 +1,217 @@
1
+ /**
2
+ * How each framework gets wired: the Vite plugin, the three Next files, the SvelteKit client hook.
3
+ * Split out of `plan.ts` — that file is the plan's SHAPE (statuses, ordering, the agent/MCP steps),
4
+ * this one is the per-framework detail, and they grow for different reasons.
5
+ */
6
+ import { patchViteConfig, VitePatchKind } from './vite-config.js';
7
+ import { patchNextConfig, patchRootLayout, patchPagesApp } from './next-patch.js';
8
+ import { PatchKind } from './patch-kind.js';
9
+ import { viteManual, NEXT_LAYOUT_MANUAL, NEXT_LAYOUT_PATH, viteDevModuleFile, VITE_DEV_MODULE_PATH, nextReticleDevFile, NEXT_RETICLE_DEV_PATH, nextConfigManual, svelteKitHooksFile, SVELTEKIT_HOOKS_PATH, UNVERIFIED_FRAMEWORK_NOTE, } from './snippets.js';
10
+ import { StepStatus } from './plan.js';
11
+ /** What adding `reticle()` to a Vite config buys, which differs by framework. */
12
+ export const VITE_PLUGIN_DETAIL = {
13
+ /** A plain Vite app gets both halves from the plugin. */
14
+ VITE: 'add reticle() to plugins (also injects connect())',
15
+ /**
16
+ * SvelteKit renders through app.html, so the plugin's HTML injection never fires and connect()
17
+ * comes from the client hook instead. The plugin is still required: it is what stamps
18
+ * data-reticle-source into .svelte components, and without it every verdict on a SvelteKit app
19
+ * comes back with no file:line at all.
20
+ */
21
+ SVELTEKIT: 'add reticle() to plugins (stamps data-reticle-source in .svelte components)',
22
+ };
23
+ export const CAPABILITIES_TITLE = 'Capabilities + store';
24
+ /**
25
+ * The dev module carrying `registerCapabilities` / `registerStore`.
26
+ *
27
+ * Without it every app came up `hasCapabilities: false` with a `reticle_state` holding nothing but
28
+ * `__reticle_renders` — the state-truth read was unavailable on every app out of the box. Written
29
+ * only when absent, because it is the one generated file a user is expected to EDIT.
30
+ */
31
+ function capabilitiesStep(input) {
32
+ if (input.viteDevModuleExists === true) {
33
+ return [
34
+ {
35
+ title: CAPABILITIES_TITLE,
36
+ target: VITE_DEV_MODULE_PATH,
37
+ status: StepStatus.ALREADY,
38
+ detail: 'file exists — left alone, it is yours to edit',
39
+ },
40
+ ];
41
+ }
42
+ const testids = input.testids ?? [];
43
+ const stores = input.storeHints ?? [];
44
+ const found = testids.length > 0 ? `${String(testids.length)} data-testid values` : 'no data-testid values yet';
45
+ return [
46
+ {
47
+ title: CAPABILITIES_TITLE,
48
+ target: VITE_DEV_MODULE_PATH,
49
+ status: StepStatus.APPLY,
50
+ detail: `${found}; ${stores.length > 0 ? `store: uncomment the ${String(stores.length)} suggested line(s)` : 'no state library detected'}`,
51
+ write: { path: VITE_DEV_MODULE_PATH, content: viteDevModuleFile(testids, stores) },
52
+ dependsOnInstall: true,
53
+ },
54
+ ];
55
+ }
56
+ export function viteSteps(input, detail = VITE_PLUGIN_DETAIL.VITE) {
57
+ // Capabilities are independent of whether the config needed patching. Attaching them to the APPLY
58
+ // branch meant a re-run on an already-wired app silently never created the module.
59
+ return [...viteConfigSteps(input, detail), ...capabilitiesStep(input)];
60
+ }
61
+ function viteConfigSteps(input, detail) {
62
+ const cfg = input.viteConfig;
63
+ const port = input.options.port;
64
+ if (cfg === null) {
65
+ return [
66
+ {
67
+ title: 'Vite plugin',
68
+ target: 'vite.config',
69
+ status: StepStatus.MANUAL,
70
+ detail: viteManual(port),
71
+ },
72
+ ];
73
+ }
74
+ const patch = patchViteConfig(cfg.source, port);
75
+ if (patch.kind === VitePatchKind.ALREADY) {
76
+ return [
77
+ {
78
+ title: 'Vite plugin',
79
+ target: cfg.path,
80
+ status: StepStatus.ALREADY,
81
+ detail: 'reticle() already in plugins',
82
+ },
83
+ ];
84
+ }
85
+ if (patch.kind === VitePatchKind.MANUAL) {
86
+ return [
87
+ {
88
+ title: 'Vite plugin',
89
+ target: cfg.path,
90
+ status: StepStatus.MANUAL,
91
+ detail: `${patch.reason}\n\n${viteManual(port)}`,
92
+ },
93
+ ];
94
+ }
95
+ return [
96
+ {
97
+ title: 'Vite plugin',
98
+ target: cfg.path,
99
+ status: StepStatus.APPLY,
100
+ detail,
101
+ write: { path: cfg.path, content: patch.code },
102
+ dependsOnInstall: true,
103
+ },
104
+ ];
105
+ }
106
+ /**
107
+ * Turn a conservative source patch into a step: applied when it patched, already when the wiring is
108
+ * there, and the hand-edit instructions when the file shape wasn't one we recognise.
109
+ */
110
+ function patchStep(title, path, patch, applyDetail, manualDetail) {
111
+ if (patch.kind === PatchKind.ALREADY) {
112
+ return { title, target: path, status: StepStatus.ALREADY, detail: 'already wired' };
113
+ }
114
+ if (patch.kind === PatchKind.MANUAL) {
115
+ return {
116
+ title,
117
+ target: path,
118
+ status: StepStatus.MANUAL,
119
+ detail: `${patch.reason}\n\n${manualDetail}`,
120
+ };
121
+ }
122
+ return {
123
+ title,
124
+ target: path,
125
+ status: StepStatus.APPLY,
126
+ detail: applyDetail,
127
+ write: { path, content: patch.code },
128
+ dependsOnInstall: true,
129
+ };
130
+ }
131
+ /**
132
+ * Next used to be the ONLY stack with hand edits left over — and both of them fail silently when
133
+ * skipped, so a Next user's app booted, connected to nothing, and said nothing about why. Both are
134
+ * now patched by the same conservative rules the Vite config gets.
135
+ */
136
+ export function nextSteps(input) {
137
+ const configFile = input.nextConfigFile ?? 'next.config.mjs';
138
+ const devPath = input.nextReticleDevPath ?? NEXT_RETICLE_DEV_PATH;
139
+ const devFile = input.nextReticleDevExists
140
+ ? {
141
+ title: 'ReticleDev component',
142
+ target: devPath,
143
+ status: StepStatus.ALREADY,
144
+ detail: 'file exists',
145
+ }
146
+ : {
147
+ title: 'ReticleDev component',
148
+ target: devPath,
149
+ status: StepStatus.APPLY,
150
+ detail: 'create dev-only connect component',
151
+ write: {
152
+ path: devPath,
153
+ content: nextReticleDevFile(input.options.port, input.options.projectId, input.testids ?? [], input.storeHints ?? []),
154
+ },
155
+ dependsOnInstall: true,
156
+ };
157
+ const configPatch = input.nextConfigSource === null || input.nextConfigSource === undefined
158
+ ? { kind: PatchKind.MANUAL, reason: `no ${configFile} found` }
159
+ : patchNextConfig(input.nextConfigSource);
160
+ const layout = input.nextLayout ?? null;
161
+ // Pages Router mounts through pages/_app, App Router through the root layout — different edits,
162
+ // and picking by path is what stops a Pages app being handed the layout patch that cannot apply.
163
+ const isPagesRouter = layout !== null && /(^|\/)pages\/_app\.[jt]sx?$/.test(layout.path);
164
+ const layoutPatch = layout === null
165
+ ? { kind: PatchKind.MANUAL, reason: 'no root layout (app/layout.tsx) or pages/_app found' }
166
+ : isPagesRouter
167
+ ? patchPagesApp(layout.source, input.nextReticleDevImport)
168
+ : patchRootLayout(layout.source);
169
+ return [
170
+ devFile,
171
+ patchStep('Next config (withReticle)', configFile, configPatch, 'wrap the export in withReticle (source mapping, dev-only)', nextConfigManual(configFile)),
172
+ patchStep('Mount ReticleDev', layout?.path ?? NEXT_LAYOUT_PATH, layoutPatch, 'mount <ReticleDev /> in the root layout (dev-only)', NEXT_LAYOUT_MANUAL),
173
+ ];
174
+ }
175
+ /**
176
+ * SvelteKit is WIRED but not SUPPORTED, and the plan says so out loud.
177
+ *
178
+ * There is no SvelteKit app in `apps/` and no CI gate for one, so nothing proves this hook still
179
+ * registers a session — every other framework init offers (React, Next, Remix, Astro) has both. The
180
+ * wiring is real and may well work; what is missing is anything that would tell us when it stops.
181
+ * Silently emitting it reads as a support claim, which is the thing this project exists to not do.
182
+ */
183
+ export function svelteKitSteps(input) {
184
+ const unverified = {
185
+ title: 'SvelteKit is UNVERIFIED',
186
+ target: SVELTEKIT_HOOKS_PATH,
187
+ status: StepStatus.NOTICE,
188
+ detail: UNVERIFIED_FRAMEWORK_NOTE,
189
+ };
190
+ // SvelteKit can't use the Vite-plugin injection (it renders via app.html) — wire a client hook
191
+ // that SvelteKit runs on startup, which is the path that can register a session at all.
192
+ if (input.svelteKitHooksExists === true) {
193
+ return [
194
+ unverified,
195
+ {
196
+ title: 'Reticle client hook',
197
+ target: SVELTEKIT_HOOKS_PATH,
198
+ status: StepStatus.ALREADY,
199
+ detail: 'file exists',
200
+ },
201
+ ];
202
+ }
203
+ return [
204
+ unverified,
205
+ {
206
+ title: 'Reticle client hook',
207
+ target: SVELTEKIT_HOOKS_PATH,
208
+ status: StepStatus.APPLY,
209
+ detail: 'create dev-only client connect (SvelteKit renders via app.html)',
210
+ write: {
211
+ path: SVELTEKIT_HOOKS_PATH,
212
+ content: svelteKitHooksFile(input.options.port, input.options.projectId),
213
+ },
214
+ dependsOnInstall: true,
215
+ },
216
+ ];
217
+ }