@reticlehq/server 2.0.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 (483) hide show
  1. package/LICENSE +105 -0
  2. package/README.md +17 -0
  3. package/dist/bridge-security.d.ts +23 -0
  4. package/dist/bridge-security.d.ts.map +1 -0
  5. package/dist/bridge-security.js +44 -0
  6. package/dist/bridge-security.js.map +1 -0
  7. package/dist/bridge.d.ts +42 -0
  8. package/dist/bridge.d.ts.map +1 -0
  9. package/dist/bridge.js +281 -0
  10. package/dist/bridge.js.map +1 -0
  11. package/dist/bridge.test-harness.d.ts +42 -0
  12. package/dist/bridge.test-harness.d.ts.map +1 -0
  13. package/dist/bridge.test-harness.js +192 -0
  14. package/dist/bridge.test-harness.js.map +1 -0
  15. package/dist/cli-launch.d.ts +53 -0
  16. package/dist/cli-launch.d.ts.map +1 -0
  17. package/dist/cli-launch.js +109 -0
  18. package/dist/cli-launch.js.map +1 -0
  19. package/dist/cli-parse.d.ts +74 -0
  20. package/dist/cli-parse.d.ts.map +1 -0
  21. package/dist/cli-parse.js +321 -0
  22. package/dist/cli-parse.js.map +1 -0
  23. package/dist/cli-port.d.ts +26 -0
  24. package/dist/cli-port.d.ts.map +1 -0
  25. package/dist/cli-port.js +57 -0
  26. package/dist/cli-port.js.map +1 -0
  27. package/dist/cli-verify.d.ts +46 -0
  28. package/dist/cli-verify.d.ts.map +1 -0
  29. package/dist/cli-verify.js +181 -0
  30. package/dist/cli-verify.js.map +1 -0
  31. package/dist/cli.d.ts +6 -0
  32. package/dist/cli.d.ts.map +1 -0
  33. package/dist/cli.js +337 -0
  34. package/dist/cli.js.map +1 -0
  35. package/dist/cloud/cloud-sync.d.ts +50 -0
  36. package/dist/cloud/cloud-sync.d.ts.map +1 -0
  37. package/dist/cloud/cloud-sync.js +47 -0
  38. package/dist/cloud/cloud-sync.js.map +1 -0
  39. package/dist/crawl/crawl-tools.d.ts +8 -0
  40. package/dist/crawl/crawl-tools.d.ts.map +1 -0
  41. package/dist/crawl/crawl-tools.js +61 -0
  42. package/dist/crawl/crawl-tools.js.map +1 -0
  43. package/dist/crawl/crawl.d.ts +45 -0
  44. package/dist/crawl/crawl.d.ts.map +1 -0
  45. package/dist/crawl/crawl.js +106 -0
  46. package/dist/crawl/crawl.js.map +1 -0
  47. package/dist/daemon-resilience.d.ts +17 -0
  48. package/dist/daemon-resilience.d.ts.map +1 -0
  49. package/dist/daemon-resilience.js +23 -0
  50. package/dist/daemon-resilience.js.map +1 -0
  51. package/dist/daemon.d.ts +26 -0
  52. package/dist/daemon.d.ts.map +1 -0
  53. package/dist/daemon.js +122 -0
  54. package/dist/daemon.js.map +1 -0
  55. package/dist/domain/domain-model.d.ts +64 -0
  56. package/dist/domain/domain-model.d.ts.map +1 -0
  57. package/dist/domain/domain-model.js +127 -0
  58. package/dist/domain/domain-model.js.map +1 -0
  59. package/dist/domain/domain-tools.d.ts +9 -0
  60. package/dist/domain/domain-tools.d.ts.map +1 -0
  61. package/dist/domain/domain-tools.js +66 -0
  62. package/dist/domain/domain-tools.js.map +1 -0
  63. package/dist/domain/flow-risk.d.ts +34 -0
  64. package/dist/domain/flow-risk.d.ts.map +1 -0
  65. package/dist/domain/flow-risk.js +81 -0
  66. package/dist/domain/flow-risk.js.map +1 -0
  67. package/dist/ee/audit-log.d.ts +15 -0
  68. package/dist/ee/audit-log.d.ts.map +1 -0
  69. package/dist/ee/audit-log.js +12 -0
  70. package/dist/ee/audit-log.js.map +1 -0
  71. package/dist/events/event-filters.d.ts +65 -0
  72. package/dist/events/event-filters.d.ts.map +1 -0
  73. package/dist/events/event-filters.js +98 -0
  74. package/dist/events/event-filters.js.map +1 -0
  75. package/dist/events/predicate-eval.d.ts +91 -0
  76. package/dist/events/predicate-eval.d.ts.map +1 -0
  77. package/dist/events/predicate-eval.js +299 -0
  78. package/dist/events/predicate-eval.js.map +1 -0
  79. package/dist/events/predicate.d.ts +19 -0
  80. package/dist/events/predicate.d.ts.map +1 -0
  81. package/dist/events/predicate.js +188 -0
  82. package/dist/events/predicate.js.map +1 -0
  83. package/dist/events/reaction.d.ts +34 -0
  84. package/dist/events/reaction.d.ts.map +1 -0
  85. package/dist/events/reaction.js +60 -0
  86. package/dist/events/reaction.js.map +1 -0
  87. package/dist/events/ring-buffer.d.ts +32 -0
  88. package/dist/events/ring-buffer.d.ts.map +1 -0
  89. package/dist/events/ring-buffer.js +75 -0
  90. package/dist/events/ring-buffer.js.map +1 -0
  91. package/dist/flows/annotate-tools.d.ts +16 -0
  92. package/dist/flows/annotate-tools.d.ts.map +1 -0
  93. package/dist/flows/annotate-tools.js +136 -0
  94. package/dist/flows/annotate-tools.js.map +1 -0
  95. package/dist/flows/annotate.d.ts +22 -0
  96. package/dist/flows/annotate.d.ts.map +1 -0
  97. package/dist/flows/annotate.js +134 -0
  98. package/dist/flows/annotate.js.map +1 -0
  99. package/dist/flows/annotation-store.d.ts +23 -0
  100. package/dist/flows/annotation-store.d.ts.map +1 -0
  101. package/dist/flows/annotation-store.js +51 -0
  102. package/dist/flows/annotation-store.js.map +1 -0
  103. package/dist/flows/decision.d.ts +13 -0
  104. package/dist/flows/decision.d.ts.map +1 -0
  105. package/dist/flows/decision.js +111 -0
  106. package/dist/flows/decision.js.map +1 -0
  107. package/dist/flows/flow-classify.d.ts +52 -0
  108. package/dist/flows/flow-classify.d.ts.map +1 -0
  109. package/dist/flows/flow-classify.js +99 -0
  110. package/dist/flows/flow-classify.js.map +1 -0
  111. package/dist/flows/flow-replay-run.d.ts +15 -0
  112. package/dist/flows/flow-replay-run.d.ts.map +1 -0
  113. package/dist/flows/flow-replay-run.js +120 -0
  114. package/dist/flows/flow-replay-run.js.map +1 -0
  115. package/dist/flows/flow-replay.d.ts +49 -0
  116. package/dist/flows/flow-replay.d.ts.map +1 -0
  117. package/dist/flows/flow-replay.js +391 -0
  118. package/dist/flows/flow-replay.js.map +1 -0
  119. package/dist/flows/flow-report.d.ts +23 -0
  120. package/dist/flows/flow-report.d.ts.map +1 -0
  121. package/dist/flows/flow-report.js +106 -0
  122. package/dist/flows/flow-report.js.map +1 -0
  123. package/dist/flows/flow-scope.d.ts +25 -0
  124. package/dist/flows/flow-scope.d.ts.map +1 -0
  125. package/dist/flows/flow-scope.js +32 -0
  126. package/dist/flows/flow-scope.js.map +1 -0
  127. package/dist/flows/flow-success.d.ts +33 -0
  128. package/dist/flows/flow-success.d.ts.map +1 -0
  129. package/dist/flows/flow-success.js +131 -0
  130. package/dist/flows/flow-success.js.map +1 -0
  131. package/dist/flows/flow-tools.d.ts +4 -0
  132. package/dist/flows/flow-tools.d.ts.map +1 -0
  133. package/dist/flows/flow-tools.js +460 -0
  134. package/dist/flows/flow-tools.js.map +1 -0
  135. package/dist/flows/flows.d.ts +86 -0
  136. package/dist/flows/flows.d.ts.map +1 -0
  137. package/dist/flows/flows.js +319 -0
  138. package/dist/flows/flows.js.map +1 -0
  139. package/dist/flows/heal.d.ts +43 -0
  140. package/dist/flows/heal.d.ts.map +1 -0
  141. package/dist/flows/heal.js +98 -0
  142. package/dist/flows/heal.js.map +1 -0
  143. package/dist/flows/recordings.d.ts +46 -0
  144. package/dist/flows/recordings.d.ts.map +1 -0
  145. package/dist/flows/recordings.js +43 -0
  146. package/dist/flows/recordings.js.map +1 -0
  147. package/dist/flows/replay.d.ts +23 -0
  148. package/dist/flows/replay.d.ts.map +1 -0
  149. package/dist/flows/replay.js +160 -0
  150. package/dist/flows/replay.js.map +1 -0
  151. package/dist/http-server.d.ts +39 -0
  152. package/dist/http-server.d.ts.map +1 -0
  153. package/dist/http-server.js +145 -0
  154. package/dist/http-server.js.map +1 -0
  155. package/dist/idle-shutdown.d.ts +34 -0
  156. package/dist/idle-shutdown.d.ts.map +1 -0
  157. package/dist/idle-shutdown.js +68 -0
  158. package/dist/idle-shutdown.js.map +1 -0
  159. package/dist/index.d.ts +135 -0
  160. package/dist/index.d.ts.map +1 -0
  161. package/dist/index.js +371 -0
  162. package/dist/index.js.map +1 -0
  163. package/dist/init/cursor.d.ts +25 -0
  164. package/dist/init/cursor.d.ts.map +1 -0
  165. package/dist/init/cursor.js +49 -0
  166. package/dist/init/cursor.js.map +1 -0
  167. package/dist/init/detect.d.ts +49 -0
  168. package/dist/init/detect.d.ts.map +1 -0
  169. package/dist/init/detect.js +84 -0
  170. package/dist/init/detect.js.map +1 -0
  171. package/dist/init/mcp.d.ts +40 -0
  172. package/dist/init/mcp.d.ts.map +1 -0
  173. package/dist/init/mcp.js +55 -0
  174. package/dist/init/mcp.js.map +1 -0
  175. package/dist/init/node-io.d.ts +8 -0
  176. package/dist/init/node-io.d.ts.map +1 -0
  177. package/dist/init/node-io.js +57 -0
  178. package/dist/init/node-io.js.map +1 -0
  179. package/dist/init/plan.d.ts +72 -0
  180. package/dist/init/plan.d.ts.map +1 -0
  181. package/dist/init/plan.js +280 -0
  182. package/dist/init/plan.js.map +1 -0
  183. package/dist/init/project-id.d.ts +17 -0
  184. package/dist/init/project-id.d.ts.map +1 -0
  185. package/dist/init/project-id.js +38 -0
  186. package/dist/init/project-id.js.map +1 -0
  187. package/dist/init/run.d.ts +42 -0
  188. package/dist/init/run.d.ts.map +1 -0
  189. package/dist/init/run.js +171 -0
  190. package/dist/init/run.js.map +1 -0
  191. package/dist/init/snippets.d.ts +33 -0
  192. package/dist/init/snippets.d.ts.map +1 -0
  193. package/dist/init/snippets.js +117 -0
  194. package/dist/init/snippets.js.map +1 -0
  195. package/dist/init/vite-config.d.ts +25 -0
  196. package/dist/init/vite-config.d.ts.map +1 -0
  197. package/dist/init/vite-config.js +45 -0
  198. package/dist/init/vite-config.js.map +1 -0
  199. package/dist/input/network-mock-tools.d.ts +3 -0
  200. package/dist/input/network-mock-tools.d.ts.map +1 -0
  201. package/dist/input/network-mock-tools.js +94 -0
  202. package/dist/input/network-mock-tools.js.map +1 -0
  203. package/dist/input/network-mock.d.ts +55 -0
  204. package/dist/input/network-mock.d.ts.map +1 -0
  205. package/dist/input/network-mock.js +62 -0
  206. package/dist/input/network-mock.js.map +1 -0
  207. package/dist/input/real-input.d.ts +174 -0
  208. package/dist/input/real-input.d.ts.map +1 -0
  209. package/dist/input/real-input.js +289 -0
  210. package/dist/input/real-input.js.map +1 -0
  211. package/dist/input/scroll-find.d.ts +41 -0
  212. package/dist/input/scroll-find.d.ts.map +1 -0
  213. package/dist/input/scroll-find.js +59 -0
  214. package/dist/input/scroll-find.js.map +1 -0
  215. package/dist/input/scroll-tools.d.ts +8 -0
  216. package/dist/input/scroll-tools.d.ts.map +1 -0
  217. package/dist/input/scroll-tools.js +68 -0
  218. package/dist/input/scroll-tools.js.map +1 -0
  219. package/dist/input/viewport-tools.d.ts +3 -0
  220. package/dist/input/viewport-tools.d.ts.map +1 -0
  221. package/dist/input/viewport-tools.js +65 -0
  222. package/dist/input/viewport-tools.js.map +1 -0
  223. package/dist/license/license.d.ts +108 -0
  224. package/dist/license/license.d.ts.map +1 -0
  225. package/dist/license/license.js +203 -0
  226. package/dist/license/license.js.map +1 -0
  227. package/dist/log.d.ts +6 -0
  228. package/dist/log.d.ts.map +1 -0
  229. package/dist/log.js +9 -0
  230. package/dist/log.js.map +1 -0
  231. package/dist/mcp-proxy.d.ts +16 -0
  232. package/dist/mcp-proxy.d.ts.map +1 -0
  233. package/dist/mcp-proxy.js +168 -0
  234. package/dist/mcp-proxy.js.map +1 -0
  235. package/dist/mcp.d.ts +14 -0
  236. package/dist/mcp.d.ts.map +1 -0
  237. package/dist/mcp.js +101 -0
  238. package/dist/mcp.js.map +1 -0
  239. package/dist/pairing-token.d.ts +28 -0
  240. package/dist/pairing-token.d.ts.map +1 -0
  241. package/dist/pairing-token.js +62 -0
  242. package/dist/pairing-token.js.map +1 -0
  243. package/dist/pool/browser-pool.d.ts +90 -0
  244. package/dist/pool/browser-pool.d.ts.map +1 -0
  245. package/dist/pool/browser-pool.js +221 -0
  246. package/dist/pool/browser-pool.js.map +1 -0
  247. package/dist/pool/lease-reaper.d.ts +16 -0
  248. package/dist/pool/lease-reaper.d.ts.map +1 -0
  249. package/dist/pool/lease-reaper.js +41 -0
  250. package/dist/pool/lease-reaper.js.map +1 -0
  251. package/dist/pool/playwright-launcher.d.ts +19 -0
  252. package/dist/pool/playwright-launcher.d.ts.map +1 -0
  253. package/dist/pool/playwright-launcher.js +51 -0
  254. package/dist/pool/playwright-launcher.js.map +1 -0
  255. package/dist/project/baselines.d.ts +22 -0
  256. package/dist/project/baselines.d.ts.map +1 -0
  257. package/dist/project/baselines.js +45 -0
  258. package/dist/project/baselines.js.map +1 -0
  259. package/dist/project/fs-port.d.ts +27 -0
  260. package/dist/project/fs-port.d.ts.map +1 -0
  261. package/dist/project/fs-port.js +32 -0
  262. package/dist/project/fs-port.js.map +1 -0
  263. package/dist/project/project-store.d.ts +32 -0
  264. package/dist/project/project-store.d.ts.map +1 -0
  265. package/dist/project/project-store.js +127 -0
  266. package/dist/project/project-store.js.map +1 -0
  267. package/dist/project/project-tools.d.ts +9 -0
  268. package/dist/project/project-tools.d.ts.map +1 -0
  269. package/dist/project/project-tools.js +118 -0
  270. package/dist/project/project-tools.js.map +1 -0
  271. package/dist/project/reticle-dir.d.ts +61 -0
  272. package/dist/project/reticle-dir.d.ts.map +1 -0
  273. package/dist/project/reticle-dir.js +144 -0
  274. package/dist/project/reticle-dir.js.map +1 -0
  275. package/dist/runs/build-verification-run.d.ts +30 -0
  276. package/dist/runs/build-verification-run.d.ts.map +1 -0
  277. package/dist/runs/build-verification-run.js +71 -0
  278. package/dist/runs/build-verification-run.js.map +1 -0
  279. package/dist/runs/profile-redact.d.ts +16 -0
  280. package/dist/runs/profile-redact.d.ts.map +1 -0
  281. package/dist/runs/profile-redact.js +32 -0
  282. package/dist/runs/profile-redact.js.map +1 -0
  283. package/dist/runs/render-report.d.ts +9 -0
  284. package/dist/runs/render-report.d.ts.map +1 -0
  285. package/dist/runs/render-report.js +70 -0
  286. package/dist/runs/render-report.js.map +1 -0
  287. package/dist/runs/repair-prompt.d.ts +15 -0
  288. package/dist/runs/repair-prompt.d.ts.map +1 -0
  289. package/dist/runs/repair-prompt.js +59 -0
  290. package/dist/runs/repair-prompt.js.map +1 -0
  291. package/dist/runs/replay-mapping.d.ts +12 -0
  292. package/dist/runs/replay-mapping.d.ts.map +1 -0
  293. package/dist/runs/replay-mapping.js +35 -0
  294. package/dist/runs/replay-mapping.js.map +1 -0
  295. package/dist/runs/reticle-runner.d.ts +48 -0
  296. package/dist/runs/reticle-runner.d.ts.map +1 -0
  297. package/dist/runs/reticle-runner.js +56 -0
  298. package/dist/runs/reticle-runner.js.map +1 -0
  299. package/dist/runs/risk-classify.d.ts +27 -0
  300. package/dist/runs/risk-classify.d.ts.map +1 -0
  301. package/dist/runs/risk-classify.js +76 -0
  302. package/dist/runs/risk-classify.js.map +1 -0
  303. package/dist/runs/run-store.d.ts +40 -0
  304. package/dist/runs/run-store.d.ts.map +1 -0
  305. package/dist/runs/run-store.js +118 -0
  306. package/dist/runs/run-store.js.map +1 -0
  307. package/dist/runs/run-tools.d.ts +10 -0
  308. package/dist/runs/run-tools.d.ts.map +1 -0
  309. package/dist/runs/run-tools.js +69 -0
  310. package/dist/runs/run-tools.js.map +1 -0
  311. package/dist/runs/runner-port.d.ts +14 -0
  312. package/dist/runs/runner-port.d.ts.map +1 -0
  313. package/dist/runs/runner-port.js +23 -0
  314. package/dist/runs/runner-port.js.map +1 -0
  315. package/dist/runs/verify-http.d.ts +34 -0
  316. package/dist/runs/verify-http.d.ts.map +1 -0
  317. package/dist/runs/verify-http.js +102 -0
  318. package/dist/runs/verify-http.js.map +1 -0
  319. package/dist/runs/verify-server.d.ts +26 -0
  320. package/dist/runs/verify-server.d.ts.map +1 -0
  321. package/dist/runs/verify-server.js +99 -0
  322. package/dist/runs/verify-server.js.map +1 -0
  323. package/dist/server-version.d.ts +3 -0
  324. package/dist/server-version.d.ts.map +1 -0
  325. package/dist/server-version.js +5 -0
  326. package/dist/server-version.js.map +1 -0
  327. package/dist/session/control-envelope.d.ts +49 -0
  328. package/dist/session/control-envelope.d.ts.map +1 -0
  329. package/dist/session/control-envelope.js +44 -0
  330. package/dist/session/control-envelope.js.map +1 -0
  331. package/dist/session/live-control-tools.d.ts +16 -0
  332. package/dist/session/live-control-tools.d.ts.map +1 -0
  333. package/dist/session/live-control-tools.js +204 -0
  334. package/dist/session/live-control-tools.js.map +1 -0
  335. package/dist/session/output-budget.d.ts +41 -0
  336. package/dist/session/output-budget.d.ts.map +1 -0
  337. package/dist/session/output-budget.js +54 -0
  338. package/dist/session/output-budget.js.map +1 -0
  339. package/dist/session/presenter-args.d.ts +8 -0
  340. package/dist/session/presenter-args.d.ts.map +1 -0
  341. package/dist/session/presenter-args.js +15 -0
  342. package/dist/session/presenter-args.js.map +1 -0
  343. package/dist/session/review-store.d.ts +40 -0
  344. package/dist/session/review-store.d.ts.map +1 -0
  345. package/dist/session/review-store.js +61 -0
  346. package/dist/session/review-store.js.map +1 -0
  347. package/dist/session/session-health.d.ts +22 -0
  348. package/dist/session/session-health.d.ts.map +1 -0
  349. package/dist/session/session-health.js +26 -0
  350. package/dist/session/session-health.js.map +1 -0
  351. package/dist/session/session-manager.d.ts +43 -0
  352. package/dist/session/session-manager.d.ts.map +1 -0
  353. package/dist/session/session-manager.js +155 -0
  354. package/dist/session/session-manager.js.map +1 -0
  355. package/dist/session/session-readiness.d.ts +35 -0
  356. package/dist/session/session-readiness.d.ts.map +1 -0
  357. package/dist/session/session-readiness.js +32 -0
  358. package/dist/session/session-readiness.js.map +1 -0
  359. package/dist/session/session-reaper.d.ts +37 -0
  360. package/dist/session/session-reaper.d.ts.map +1 -0
  361. package/dist/session/session-reaper.js +94 -0
  362. package/dist/session/session-reaper.js.map +1 -0
  363. package/dist/session/session-recommendation.d.ts +18 -0
  364. package/dist/session/session-recommendation.d.ts.map +1 -0
  365. package/dist/session/session-recommendation.js +14 -0
  366. package/dist/session/session-recommendation.js.map +1 -0
  367. package/dist/session/session-tools.d.ts +9 -0
  368. package/dist/session/session-tools.d.ts.map +1 -0
  369. package/dist/session/session-tools.js +43 -0
  370. package/dist/session/session-tools.js.map +1 -0
  371. package/dist/session/session.d.ts +166 -0
  372. package/dist/session/session.d.ts.map +1 -0
  373. package/dist/session/session.js +408 -0
  374. package/dist/session/session.js.map +1 -0
  375. package/dist/session/state-select.d.ts +8 -0
  376. package/dist/session/state-select.d.ts.map +1 -0
  377. package/dist/session/state-select.js +8 -0
  378. package/dist/session/state-select.js.map +1 -0
  379. package/dist/token-auth.d.ts +24 -0
  380. package/dist/token-auth.d.ts.map +1 -0
  381. package/dist/token-auth.js +71 -0
  382. package/dist/token-auth.js.map +1 -0
  383. package/dist/tools/act-tools.d.ts +3 -0
  384. package/dist/tools/act-tools.d.ts.map +1 -0
  385. package/dist/tools/act-tools.js +327 -0
  386. package/dist/tools/act-tools.js.map +1 -0
  387. package/dist/tools/act-view.d.ts +19 -0
  388. package/dist/tools/act-view.d.ts.map +1 -0
  389. package/dist/tools/act-view.js +46 -0
  390. package/dist/tools/act-view.js.map +1 -0
  391. package/dist/tools/assert-grade.d.ts +21 -0
  392. package/dist/tools/assert-grade.d.ts.map +1 -0
  393. package/dist/tools/assert-grade.js +52 -0
  394. package/dist/tools/assert-grade.js.map +1 -0
  395. package/dist/tools/browser-tools.d.ts +3 -0
  396. package/dist/tools/browser-tools.d.ts.map +1 -0
  397. package/dist/tools/browser-tools.js +52 -0
  398. package/dist/tools/browser-tools.js.map +1 -0
  399. package/dist/tools/contract-tools.d.ts +8 -0
  400. package/dist/tools/contract-tools.d.ts.map +1 -0
  401. package/dist/tools/contract-tools.js +62 -0
  402. package/dist/tools/contract-tools.js.map +1 -0
  403. package/dist/tools/dynamic-tools.d.ts +7 -0
  404. package/dist/tools/dynamic-tools.d.ts.map +1 -0
  405. package/dist/tools/dynamic-tools.js +103 -0
  406. package/dist/tools/dynamic-tools.js.map +1 -0
  407. package/dist/tools/error-recovery.d.ts +31 -0
  408. package/dist/tools/error-recovery.d.ts.map +1 -0
  409. package/dist/tools/error-recovery.js +52 -0
  410. package/dist/tools/error-recovery.js.map +1 -0
  411. package/dist/tools/invoke-tool.d.ts +23 -0
  412. package/dist/tools/invoke-tool.d.ts.map +1 -0
  413. package/dist/tools/invoke-tool.js +99 -0
  414. package/dist/tools/invoke-tool.js.map +1 -0
  415. package/dist/tools/lease-tools.d.ts +31 -0
  416. package/dist/tools/lease-tools.d.ts.map +1 -0
  417. package/dist/tools/lease-tools.js +164 -0
  418. package/dist/tools/lease-tools.js.map +1 -0
  419. package/dist/tools/observe-tools.d.ts +3 -0
  420. package/dist/tools/observe-tools.d.ts.map +1 -0
  421. package/dist/tools/observe-tools.js +259 -0
  422. package/dist/tools/observe-tools.js.map +1 -0
  423. package/dist/tools/profiles.d.ts +33 -0
  424. package/dist/tools/profiles.d.ts.map +1 -0
  425. package/dist/tools/profiles.js +105 -0
  426. package/dist/tools/profiles.js.map +1 -0
  427. package/dist/tools/query-paginate.d.ts +15 -0
  428. package/dist/tools/query-paginate.d.ts.map +1 -0
  429. package/dist/tools/query-paginate.js +31 -0
  430. package/dist/tools/query-paginate.js.map +1 -0
  431. package/dist/tools/read-tools.d.ts +3 -0
  432. package/dist/tools/read-tools.d.ts.map +1 -0
  433. package/dist/tools/read-tools.js +329 -0
  434. package/dist/tools/read-tools.js.map +1 -0
  435. package/dist/tools/snapshot-delta.d.ts +59 -0
  436. package/dist/tools/snapshot-delta.d.ts.map +1 -0
  437. package/dist/tools/snapshot-delta.js +0 -0
  438. package/dist/tools/snapshot-delta.js.map +1 -0
  439. package/dist/tools/tool-invoker.d.ts +15 -0
  440. package/dist/tools/tool-invoker.d.ts.map +1 -0
  441. package/dist/tools/tool-invoker.js +20 -0
  442. package/dist/tools/tool-invoker.js.map +1 -0
  443. package/dist/tools/tool-kit.d.ts +60 -0
  444. package/dist/tools/tool-kit.d.ts.map +1 -0
  445. package/dist/tools/tool-kit.js +33 -0
  446. package/dist/tools/tool-kit.js.map +1 -0
  447. package/dist/tools/tool-names.d.ts +89 -0
  448. package/dist/tools/tool-names.d.ts.map +1 -0
  449. package/dist/tools/tool-names.js +88 -0
  450. package/dist/tools/tool-names.js.map +1 -0
  451. package/dist/tools/tools-helpers.d.ts +12 -0
  452. package/dist/tools/tools-helpers.d.ts.map +1 -0
  453. package/dist/tools/tools-helpers.js +22 -0
  454. package/dist/tools/tools-helpers.js.map +1 -0
  455. package/dist/tools/tools.d.ts +4 -0
  456. package/dist/tools/tools.d.ts.map +1 -0
  457. package/dist/tools/tools.js +268 -0
  458. package/dist/tools/tools.js.map +1 -0
  459. package/dist/update/update-checker.d.ts +20 -0
  460. package/dist/update/update-checker.d.ts.map +1 -0
  461. package/dist/update/update-checker.js +94 -0
  462. package/dist/update/update-checker.js.map +1 -0
  463. package/dist/update/update-tools.d.ts +3 -0
  464. package/dist/update/update-tools.d.ts.map +1 -0
  465. package/dist/update/update-tools.js +94 -0
  466. package/dist/update/update-tools.js.map +1 -0
  467. package/dist/update/updater.d.ts +31 -0
  468. package/dist/update/updater.d.ts.map +1 -0
  469. package/dist/update/updater.js +120 -0
  470. package/dist/update/updater.js.map +1 -0
  471. package/dist/visual/visual-diff.d.ts +46 -0
  472. package/dist/visual/visual-diff.d.ts.map +1 -0
  473. package/dist/visual/visual-diff.js +100 -0
  474. package/dist/visual/visual-diff.js.map +1 -0
  475. package/dist/visual/visual-store.d.ts +22 -0
  476. package/dist/visual/visual-store.d.ts.map +1 -0
  477. package/dist/visual/visual-store.js +60 -0
  478. package/dist/visual/visual-store.js.map +1 -0
  479. package/dist/visual/visual-tools.d.ts +9 -0
  480. package/dist/visual/visual-tools.d.ts.map +1 -0
  481. package/dist/visual/visual-tools.js +182 -0
  482. package/dist/visual/visual-tools.js.map +1 -0
  483. package/package.json +68 -0
@@ -0,0 +1,280 @@
1
+ /**
2
+ * Pure assembly of the `reticle init` action plan. Given the detection result and the relevant file
3
+ * contents, produce an ordered list of steps — each marked apply / manual / already / skip. The
4
+ * runner performs the `write` side-effects; this module decides *what* should happen.
5
+ */
6
+ import { Framework, installCommand, installCommandParts } from './detect.js';
7
+ import { claudeAddCommand, mcpManual } from './mcp.js';
8
+ import { mergeCursorConfig, CursorMergeStatus, cursorServerEntry } from './cursor.js';
9
+ import { patchViteConfig, VitePatchKind } from './vite-config.js';
10
+ import { viteManual, htmlManual, NEXT_LAYOUT_MANUAL, nextReticleDevFile, NEXT_RETICLE_DEV_PATH, nextConfigManual, reticleConfigContent, svelteKitHooksFile, SVELTEKIT_HOOKS_PATH, } from './snippets.js';
11
+ // An app dev installs exactly the audience-scoped browser-side dependencies — never the retired
12
+ // `@reticlehq/core` umbrella (which dragged the Node MCP server + ws into every app). The kit is the
13
+ // framework adapter (it re-exports the browser sensor), paired with that framework's dev-only build
14
+ // plugin for source mapping + connect() injection.
15
+ const RETICLE_REACT_KIT = '@reticlehq/react';
16
+ const RETICLE_VITE_PLUGIN = '@reticlehq/vite-plugin';
17
+ const RETICLE_NEXT_PLUGIN = '@reticlehq/next';
18
+ /** The dev-dependencies `reticle init` installs for a given framework — kit first, build plugin next. */
19
+ export function frameworkPackages(framework) {
20
+ switch (framework) {
21
+ case Framework.NEXT:
22
+ return [RETICLE_REACT_KIT, RETICLE_NEXT_PLUGIN];
23
+ case Framework.VITE:
24
+ case Framework.SVELTEKIT:
25
+ // SvelteKit builds on Vite; until a dedicated Svelte kit exists it uses the Vite build plugin.
26
+ return [RETICLE_REACT_KIT, RETICLE_VITE_PLUGIN];
27
+ case Framework.HTML:
28
+ // No bundler plugin to install — just the kit; connect() is wired by hand (see htmlManual).
29
+ return [RETICLE_REACT_KIT];
30
+ }
31
+ }
32
+ const MCP_TARGET = 'global (claude user scope)';
33
+ const RETICLE_CONFIG_FILE = '.reticle.json';
34
+ export const StepStatus = {
35
+ APPLY: 'apply',
36
+ MANUAL: 'manual',
37
+ ALREADY: 'already',
38
+ SKIP: 'skip',
39
+ };
40
+ const CLAUDE_MCP_TITLE = 'MCP server (Claude, global)';
41
+ const CURSOR_MCP_TITLE = 'MCP server (Cursor, global)';
42
+ function claudeMcpStep(input) {
43
+ if (!input.claudeCli)
44
+ return null;
45
+ if (input.mcpExists) {
46
+ return {
47
+ title: CLAUDE_MCP_TITLE,
48
+ target: MCP_TARGET,
49
+ status: StepStatus.ALREADY,
50
+ detail: 'reticle already registered (install once, used by every project)',
51
+ };
52
+ }
53
+ const cmd = claudeAddCommand();
54
+ return {
55
+ title: CLAUDE_MCP_TITLE,
56
+ target: MCP_TARGET,
57
+ status: StepStatus.APPLY,
58
+ detail: 'register reticle globally for all projects',
59
+ exec: { command: cmd.command, args: cmd.args, fallback: cmd.display },
60
+ };
61
+ }
62
+ function cursorMcpStep(input) {
63
+ if (!input.cursorPresent)
64
+ return null;
65
+ const r = mergeCursorConfig(input.cursorConfig);
66
+ if (r.status === CursorMergeStatus.ALREADY) {
67
+ return {
68
+ title: CURSOR_MCP_TITLE,
69
+ target: input.cursorConfigPath,
70
+ status: StepStatus.ALREADY,
71
+ detail: 'reticle already in Cursor global config',
72
+ };
73
+ }
74
+ if (r.status === CursorMergeStatus.MANUAL) {
75
+ return {
76
+ title: CURSOR_MCP_TITLE,
77
+ target: input.cursorConfigPath,
78
+ status: StepStatus.MANUAL,
79
+ detail: `couldn't parse ${input.cursorConfigPath} — add this server by hand:\n "reticle": ${JSON.stringify(cursorServerEntry())}`,
80
+ };
81
+ }
82
+ return {
83
+ title: CURSOR_MCP_TITLE,
84
+ target: input.cursorConfigPath,
85
+ status: StepStatus.APPLY,
86
+ detail: 'register reticle in Cursor global config',
87
+ write: { path: input.cursorConfigPath, content: r.content },
88
+ };
89
+ }
90
+ /** One global registration per detected agent (Claude + Cursor). Falls back to a manual note. */
91
+ function mcpSteps(input) {
92
+ if (!input.options.mcp) {
93
+ return [
94
+ {
95
+ title: 'MCP server (global)',
96
+ target: MCP_TARGET,
97
+ status: StepStatus.SKIP,
98
+ detail: '--no-mcp',
99
+ },
100
+ ];
101
+ }
102
+ const steps = [claudeMcpStep(input), cursorMcpStep(input)].filter((s) => s !== null);
103
+ if (steps.length > 0)
104
+ return steps;
105
+ // No supported agent detected — print the one-time global instructions.
106
+ return [
107
+ {
108
+ title: 'MCP server (global)',
109
+ target: MCP_TARGET,
110
+ status: StepStatus.MANUAL,
111
+ detail: mcpManual(),
112
+ },
113
+ ];
114
+ }
115
+ function installStep(input) {
116
+ const pm = input.detection.packageManager;
117
+ const packages = frameworkPackages(input.detection.framework);
118
+ const command = installCommand(pm, packages);
119
+ if (!input.options.install) {
120
+ return {
121
+ title: 'Install dependencies',
122
+ target: 'package.json',
123
+ status: StepStatus.MANUAL,
124
+ detail: command,
125
+ };
126
+ }
127
+ const parts = installCommandParts(pm, packages);
128
+ return {
129
+ title: 'Install dependencies',
130
+ target: 'package.json',
131
+ status: StepStatus.APPLY,
132
+ detail: command,
133
+ exec: { command: parts.command, args: parts.args, fallback: command },
134
+ };
135
+ }
136
+ function viteSteps(input) {
137
+ const cfg = input.viteConfig;
138
+ const port = input.options.port;
139
+ if (cfg === null) {
140
+ return [
141
+ {
142
+ title: 'Vite plugin',
143
+ target: 'vite.config',
144
+ status: StepStatus.MANUAL,
145
+ detail: viteManual(port),
146
+ },
147
+ ];
148
+ }
149
+ const patch = patchViteConfig(cfg.source, port);
150
+ if (patch.kind === VitePatchKind.ALREADY) {
151
+ return [
152
+ {
153
+ title: 'Vite plugin',
154
+ target: cfg.path,
155
+ status: StepStatus.ALREADY,
156
+ detail: 'reticle() already in plugins',
157
+ },
158
+ ];
159
+ }
160
+ if (patch.kind === VitePatchKind.MANUAL) {
161
+ return [
162
+ {
163
+ title: 'Vite plugin',
164
+ target: cfg.path,
165
+ status: StepStatus.MANUAL,
166
+ detail: `${patch.reason}\n\n${viteManual(port)}`,
167
+ },
168
+ ];
169
+ }
170
+ return [
171
+ {
172
+ title: 'Vite plugin',
173
+ target: cfg.path,
174
+ status: StepStatus.APPLY,
175
+ detail: 'add reticle() to plugins (also injects connect())',
176
+ write: { path: cfg.path, content: patch.code },
177
+ },
178
+ ];
179
+ }
180
+ function nextSteps(input) {
181
+ const configFile = input.nextConfigFile ?? 'next.config.mjs';
182
+ const devFile = input.nextReticleDevExists
183
+ ? {
184
+ title: 'ReticleDev component',
185
+ target: NEXT_RETICLE_DEV_PATH,
186
+ status: StepStatus.ALREADY,
187
+ detail: 'file exists',
188
+ }
189
+ : {
190
+ title: 'ReticleDev component',
191
+ target: NEXT_RETICLE_DEV_PATH,
192
+ status: StepStatus.APPLY,
193
+ detail: 'create dev-only connect component',
194
+ write: {
195
+ path: NEXT_RETICLE_DEV_PATH,
196
+ content: nextReticleDevFile(input.options.port, input.options.projectId),
197
+ },
198
+ };
199
+ return [
200
+ devFile,
201
+ {
202
+ title: 'Next config (withReticle)',
203
+ target: configFile,
204
+ status: StepStatus.MANUAL,
205
+ detail: nextConfigManual(configFile),
206
+ },
207
+ {
208
+ title: 'Mount ReticleDev',
209
+ target: 'app/layout.tsx',
210
+ status: StepStatus.MANUAL,
211
+ detail: NEXT_LAYOUT_MANUAL,
212
+ },
213
+ ];
214
+ }
215
+ function svelteKitSteps(input) {
216
+ // SvelteKit can't use the Vite-plugin injection (renders via app.html) — wire a client hook that
217
+ // SvelteKit runs on startup. This is verified to register a session where the plugin does not.
218
+ if (input.svelteKitHooksExists === true) {
219
+ return [
220
+ {
221
+ title: 'Reticle client hook',
222
+ target: SVELTEKIT_HOOKS_PATH,
223
+ status: StepStatus.ALREADY,
224
+ detail: 'file exists',
225
+ },
226
+ ];
227
+ }
228
+ return [
229
+ {
230
+ title: 'Reticle client hook',
231
+ target: SVELTEKIT_HOOKS_PATH,
232
+ status: StepStatus.APPLY,
233
+ detail: 'create dev-only client connect (SvelteKit renders via app.html)',
234
+ write: {
235
+ path: SVELTEKIT_HOOKS_PATH,
236
+ content: svelteKitHooksFile(input.options.port, input.options.projectId),
237
+ },
238
+ },
239
+ ];
240
+ }
241
+ function reticleConfigStep(input) {
242
+ if (input.reticleConfigExists === true) {
243
+ return {
244
+ title: 'Reticle config',
245
+ target: RETICLE_CONFIG_FILE,
246
+ status: StepStatus.ALREADY,
247
+ detail: '.reticle.json already exists',
248
+ };
249
+ }
250
+ const content = reticleConfigContent(input.detection.framework, input.options.port, input.options.projectId);
251
+ return {
252
+ title: 'Reticle config',
253
+ target: RETICLE_CONFIG_FILE,
254
+ status: StepStatus.APPLY,
255
+ detail: 'write project config (framework + port)',
256
+ write: { path: RETICLE_CONFIG_FILE, content },
257
+ };
258
+ }
259
+ export function buildPlan(input) {
260
+ const steps = [...mcpSteps(input), installStep(input), reticleConfigStep(input)];
261
+ if (input.detection.framework === Framework.VITE) {
262
+ steps.push(...viteSteps(input));
263
+ }
264
+ else if (input.detection.framework === Framework.NEXT) {
265
+ steps.push(...nextSteps(input));
266
+ }
267
+ else if (input.detection.framework === Framework.SVELTEKIT) {
268
+ steps.push(...svelteKitSteps(input));
269
+ }
270
+ else {
271
+ steps.push({
272
+ title: 'Connect snippet',
273
+ target: 'index.html',
274
+ status: StepStatus.MANUAL,
275
+ detail: htmlManual(input.options.port, input.options.projectId),
276
+ });
277
+ }
278
+ return { framework: input.detection.framework, steps };
279
+ }
280
+ //# sourceMappingURL=plan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan.js","sourceRoot":"","sources":["../../src/init/plan.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Project-identity derivation for `reticle init` — the Next/HTML/.reticle.json side of the same scheme the
3
+ * Vite plugin uses at build time. Kept algorithmically identical (slug of package.json name + 8-char
4
+ * hash of the absolute root) so a Vite app's plugin-stamped projectId matches what init records.
5
+ */
6
+ /** `@acme/web` → `acme-web`; non-alphanumerics collapse to single dashes; edges trimmed. */
7
+ export declare function slugifyPackageName(name: string): string;
8
+ /** Short, stable hex fingerprint of the absolute project root. */
9
+ export declare function shortHash(input: string): string;
10
+ /**
11
+ * Derive the stable projectId from the package name (may be undefined) and the absolute root path.
12
+ * Falls back to the root folder name, then "app". Pure.
13
+ */
14
+ export declare function deriveProjectId(pkgName: string | undefined, rootPath: string): string;
15
+ /** Pull a string `name` out of an already-parsed package.json object, or undefined. */
16
+ export declare function packageName(pkg: unknown): string | undefined;
17
+ //# sourceMappingURL=project-id.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-id.d.ts","sourceRoot":"","sources":["../../src/init/project-id.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,4FAA4F;AAC5F,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAMvD;AAED,kEAAkE;AAClE,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAIrF;AAED,uFAAuF;AACvF,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAM5D"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Project-identity derivation for `reticle init` — the Next/HTML/.reticle.json side of the same scheme the
3
+ * Vite plugin uses at build time. Kept algorithmically identical (slug of package.json name + 8-char
4
+ * hash of the absolute root) so a Vite app's plugin-stamped projectId matches what init records.
5
+ */
6
+ import { createHash } from 'node:crypto';
7
+ import { basename } from 'node:path';
8
+ /** `@acme/web` → `acme-web`; non-alphanumerics collapse to single dashes; edges trimmed. */
9
+ export function slugifyPackageName(name) {
10
+ return name
11
+ .toLowerCase()
12
+ .replace(/^@/, '')
13
+ .replace(/[^a-z0-9]+/g, '-')
14
+ .replace(/^-+|-+$/g, '');
15
+ }
16
+ /** Short, stable hex fingerprint of the absolute project root. */
17
+ export function shortHash(input) {
18
+ return createHash('sha1').update(input).digest('hex').slice(0, 8);
19
+ }
20
+ /**
21
+ * Derive the stable projectId from the package name (may be undefined) and the absolute root path.
22
+ * Falls back to the root folder name, then "app". Pure.
23
+ */
24
+ export function deriveProjectId(pkgName, rootPath) {
25
+ const fromName = pkgName !== undefined ? slugifyPackageName(pkgName) : '';
26
+ const base = fromName.length > 0 ? fromName : slugifyPackageName(basename(rootPath)) || 'app';
27
+ return `${base}-${shortHash(rootPath)}`;
28
+ }
29
+ /** Pull a string `name` out of an already-parsed package.json object, or undefined. */
30
+ export function packageName(pkg) {
31
+ if (typeof pkg === 'object' && pkg !== null) {
32
+ const name = pkg['name'];
33
+ if (typeof name === 'string' && name.length > 0)
34
+ return name;
35
+ }
36
+ return undefined;
37
+ }
38
+ //# sourceMappingURL=project-id.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-id.js","sourceRoot":"","sources":["../../src/init/project-id.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAErC,4FAA4F;AAC5F,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,OAAO,IAAI;SACR,WAAW,EAAE;SACb,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;SACjB,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;SAC3B,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;AAC7B,CAAC;AAED,kEAAkE;AAClE,MAAM,UAAU,SAAS,CAAC,KAAa;IACrC,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACpE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,OAA2B,EAAE,QAAgB;IAC3E,MAAM,QAAQ,GAAG,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC1E,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,kBAAkB,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,IAAI,KAAK,CAAC;IAC9F,OAAO,GAAG,IAAI,IAAI,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC;AAC1C,CAAC;AAED,uFAAuF;AACvF,MAAM,UAAU,WAAW,CAAC,GAAY;IACtC,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QAC5C,MAAM,IAAI,GAAI,GAA+B,CAAC,MAAM,CAAC,CAAC;QACtD,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;IAC/D,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * The impure shell for `reticle init`: gather project files via an injected IO surface, build the
3
+ * plan (pure), optionally write the apply-steps, and print a human-readable report. All filesystem
4
+ * access goes through `InitIo` so the orchestration is unit-testable with an in-memory IO.
5
+ */
6
+ /**
7
+ * Resolve the lockfiles set used to pick the package manager. A lockfile in the project root wins;
8
+ * otherwise we walk UP the directory tree (monorepos keep the lockfile at the workspace root, not in
9
+ * each package) so `reticle init` in a sub-package suggests `pnpm add` instead of defaulting to `npm i`.
10
+ */
11
+ export declare function resolveLockfiles(rootFiles: ReadonlySet<string>, cwd: string, io: Pick<InitIo, 'exists'>): Set<string>;
12
+ export interface InitOptions {
13
+ cwd: string;
14
+ port: number | undefined;
15
+ mcp: boolean;
16
+ dryRun: boolean;
17
+ install: boolean;
18
+ }
19
+ export interface InitIo {
20
+ /** Returns file content or null if it does not exist. Path is project-relative or absolute. */
21
+ readFile(relPath: string): string | null;
22
+ /** Writes content, creating parent directories. Path is project-relative or absolute. */
23
+ writeFile(relPath: string, content: string): void;
24
+ exists(relPath: string): boolean;
25
+ /** The user's home directory (for global agent config like ~/.cursor/mcp.json). */
26
+ homeDir(): string;
27
+ /** Basenames present in the project root. */
28
+ rootFiles(): readonly string[];
29
+ /** Runs a subprocess to completion (inherits stdio); returns true on exit code 0. */
30
+ exec(command: string, args: readonly string[]): boolean;
31
+ /** Runs a subprocess quietly (no stdio) for a yes/no check; returns true on exit code 0. */
32
+ probe(command: string, args: readonly string[]): boolean;
33
+ print(line: string): void;
34
+ }
35
+ interface InitResult {
36
+ ok: boolean;
37
+ applied: number;
38
+ manual: number;
39
+ }
40
+ export declare function runInit(options: InitOptions, io: InitIo): InitResult;
41
+ export {};
42
+ //# sourceMappingURL=run.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/init/run.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAkBH;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,WAAW,CAAC,MAAM,CAAC,EAC9B,GAAG,EAAE,MAAM,EACX,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,GACzB,GAAG,CAAC,MAAM,CAAC,CAgBb;AAkBD,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,GAAG,EAAE,OAAO,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,MAAM;IACrB,+FAA+F;IAC/F,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IACzC,yFAAyF;IACzF,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAClD,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;IACjC,mFAAmF;IACnF,OAAO,IAAI,MAAM,CAAC;IAClB,6CAA6C;IAC7C,SAAS,IAAI,SAAS,MAAM,EAAE,CAAC;IAC/B,qFAAqF;IACrF,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC;IACxD,4FAA4F;IAC5F,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC;IACzD,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,UAAU,UAAU;IAClB,EAAE,EAAE,OAAO,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AA4GD,wBAAgB,OAAO,CAAC,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,GAAG,UAAU,CAUpE"}
@@ -0,0 +1,171 @@
1
+ /**
2
+ * The impure shell for `reticle init`: gather project files via an injected IO surface, build the
3
+ * plan (pure), optionally write the apply-steps, and print a human-readable report. All filesystem
4
+ * access goes through `InitIo` so the orchestration is unit-testable with an in-memory IO.
5
+ */
6
+ import { dirname, join } from 'node:path';
7
+ import { detect, Framework } from './detect.js';
8
+ import { buildPlan, StepStatus } from './plan.js';
9
+ import { claudeAvailableProbe, claudeExistsProbe } from './mcp.js';
10
+ import { CURSOR_DIR_RELPATH, CURSOR_MCP_RELPATH } from './cursor.js';
11
+ import { deriveProjectId, packageName } from './project-id.js';
12
+ /** Lockfile basenames, in package-manager preference order (mirrors detect.ts). */
13
+ const LOCKFILE_NAMES = [
14
+ 'pnpm-lock.yaml',
15
+ 'yarn.lock',
16
+ 'bun.lockb',
17
+ 'bun.lock',
18
+ 'package-lock.json',
19
+ ];
20
+ /**
21
+ * Resolve the lockfiles set used to pick the package manager. A lockfile in the project root wins;
22
+ * otherwise we walk UP the directory tree (monorepos keep the lockfile at the workspace root, not in
23
+ * each package) so `reticle init` in a sub-package suggests `pnpm add` instead of defaulting to `npm i`.
24
+ */
25
+ export function resolveLockfiles(rootFiles, cwd, io) {
26
+ const set = new Set(rootFiles);
27
+ if (LOCKFILE_NAMES.some((name) => set.has(name)))
28
+ return set; // local lockfile is authoritative
29
+ let dir = cwd;
30
+ for (let depth = 0; depth < 50; depth++) {
31
+ for (const name of LOCKFILE_NAMES) {
32
+ if (io.exists(join(dir, name))) {
33
+ set.add(name);
34
+ return set;
35
+ }
36
+ }
37
+ const parent = dirname(dir);
38
+ if (parent === dir)
39
+ break; // filesystem root
40
+ dir = parent;
41
+ }
42
+ return set;
43
+ }
44
+ const PACKAGE_JSON = 'package.json';
45
+ const NEXT_RETICLE_DEV = 'app/reticle-dev.tsx';
46
+ const SVELTEKIT_HOOKS = 'src/hooks.client.ts';
47
+ const VITE_CONFIG_CANDIDATES = [
48
+ 'vite.config.ts',
49
+ 'vite.config.js',
50
+ 'vite.config.mjs',
51
+ 'vite.config.mts',
52
+ ];
53
+ const NEXT_CONFIG_CANDIDATES = [
54
+ 'next.config.mjs',
55
+ 'next.config.js',
56
+ 'next.config.ts',
57
+ 'next.config.cjs',
58
+ ];
59
+ const STATUS_SYMBOL = {
60
+ [StepStatus.APPLY]: '✓',
61
+ [StepStatus.MANUAL]: '⚠',
62
+ [StepStatus.ALREADY]: '·',
63
+ [StepStatus.SKIP]: '–',
64
+ };
65
+ function firstPresent(files, candidates) {
66
+ for (const c of candidates)
67
+ if (files.has(c))
68
+ return c;
69
+ return null;
70
+ }
71
+ function gatherPlanInput(options, io, pkgRaw) {
72
+ const pkg = JSON.parse(pkgRaw);
73
+ // Stable identity derived from the app's package.json name + root, so it survives port changes.
74
+ const projectId = deriveProjectId(packageName(pkg), options.cwd);
75
+ const rootFiles = new Set(io.rootFiles());
76
+ const detectInput = {
77
+ pkg: typeof pkg === 'object' && pkg !== null ? pkg : {},
78
+ configFiles: rootFiles,
79
+ // Walk up for the lockfile so a monorepo sub-package picks the workspace's package manager.
80
+ lockfiles: resolveLockfiles(rootFiles, options.cwd, io),
81
+ };
82
+ const detection = detect(detectInput);
83
+ const vitePath = firstPresent(rootFiles, VITE_CONFIG_CANDIDATES);
84
+ const viteSource = vitePath === null ? null : io.readFile(vitePath);
85
+ const viteConfig = vitePath !== null && viteSource !== null ? { path: vitePath, source: viteSource } : null;
86
+ // Global MCP registration targets each agent that's present: Claude via its CLI, Cursor via its
87
+ // global config file. Only probe when the MCP step is in play.
88
+ const availableProbe = claudeAvailableProbe();
89
+ const claudeCli = options.mcp ? io.probe(availableProbe.command, availableProbe.args) : false;
90
+ const existsProbe = claudeExistsProbe();
91
+ const mcpExists = claudeCli ? io.probe(existsProbe.command, existsProbe.args) : false;
92
+ const cursorDir = `${io.homeDir()}/${CURSOR_DIR_RELPATH}`;
93
+ const cursorConfigPath = `${io.homeDir()}/${CURSOR_MCP_RELPATH}`;
94
+ const cursorPresent = options.mcp && io.exists(cursorDir);
95
+ const cursorConfig = cursorPresent ? io.readFile(cursorConfigPath) : null;
96
+ return {
97
+ detection,
98
+ claudeCli,
99
+ mcpExists,
100
+ cursorPresent,
101
+ cursorConfig,
102
+ cursorConfigPath,
103
+ viteConfig,
104
+ nextConfigFile: firstPresent(rootFiles, NEXT_CONFIG_CANDIDATES),
105
+ nextReticleDevExists: io.exists(NEXT_RETICLE_DEV),
106
+ svelteKitHooksExists: io.exists(SVELTEKIT_HOOKS),
107
+ reticleConfigExists: io.exists('.reticle.json'),
108
+ options: { port: options.port, mcp: options.mcp, install: options.install, projectId },
109
+ };
110
+ }
111
+ function restartHint(framework) {
112
+ if (framework === Framework.NEXT)
113
+ return 'Restart `next dev`, then ask your agent: "List Reticle sessions".';
114
+ if (framework === Framework.VITE)
115
+ return 'Restart `vite`, then ask your agent: "List Reticle sessions".';
116
+ if (framework === Framework.SVELTEKIT)
117
+ return 'Restart your dev server (`npm run dev`), then ask your agent: "List Reticle sessions".';
118
+ return 'Reload your app on localhost, then ask your agent: "List Reticle sessions".';
119
+ }
120
+ function report(plan, dryRun, failed, io) {
121
+ io.print(dryRun ? 'reticle init (dry run — no files written)' : 'reticle init');
122
+ io.print('');
123
+ let applied = 0;
124
+ let manual = 0;
125
+ for (const s of plan.steps) {
126
+ // A side effect that failed to apply is reported as a manual step with its fallback command.
127
+ const downgraded = failed.has(s.target);
128
+ const status = downgraded ? StepStatus.MANUAL : s.status;
129
+ const detail = downgraded && s.exec !== undefined
130
+ ? `step failed — run manually: ${s.exec.fallback}`
131
+ : s.detail;
132
+ io.print(` [${STATUS_SYMBOL[status]}] ${s.title} → ${s.target}`);
133
+ if (status === StepStatus.APPLY)
134
+ applied++;
135
+ if (status === StepStatus.MANUAL) {
136
+ manual++;
137
+ for (const line of detail.split('\n'))
138
+ io.print(` ${line}`);
139
+ }
140
+ else if (detail.length > 0) {
141
+ io.print(` ${detail}`);
142
+ }
143
+ }
144
+ io.print('');
145
+ io.print(restartHint(plan.framework));
146
+ return { ok: true, applied, manual };
147
+ }
148
+ /** Perform the apply-step side effects; return the targets whose side effect failed. */
149
+ function applyEffects(plan, io) {
150
+ const failed = new Set();
151
+ for (const s of plan.steps) {
152
+ if (s.status !== StepStatus.APPLY)
153
+ continue;
154
+ if (s.write !== undefined)
155
+ io.writeFile(s.write.path, s.write.content);
156
+ if (s.exec !== undefined && !io.exec(s.exec.command, s.exec.args))
157
+ failed.add(s.target);
158
+ }
159
+ return failed;
160
+ }
161
+ export function runInit(options, io) {
162
+ const pkgRaw = io.readFile(PACKAGE_JSON);
163
+ if (pkgRaw === null) {
164
+ io.print('No package.json found. Run `reticle init` from your project root.');
165
+ return { ok: false, applied: 0, manual: 0 };
166
+ }
167
+ const plan = buildPlan(gatherPlanInput(options, io, pkgRaw));
168
+ const failed = options.dryRun ? new Set() : applyEffects(plan, io);
169
+ return report(plan, options.dryRun, failed, io);
170
+ }
171
+ //# sourceMappingURL=run.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/init/run.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Generated file contents and copy-paste snippets for `reticle init`. Kept as named constants/builders
3
+ * so the runner never inlines free strings.
4
+ */
5
+ /** The Vite-config snippet printed when we can't safely auto-patch the config. */
6
+ export declare function viteManual(port: number | undefined): string;
7
+ /** Next.js config wrap — always printed (we never auto-rewrite next.config). */
8
+ export declare function nextConfigManual(configFile: string): string;
9
+ /** The dev-only client component that connects Reticle after hydration. */
10
+ export declare function nextReticleDevFile(port: number | undefined, projectId?: string): string;
11
+ /** Mount instruction for the root layout. */
12
+ export declare const NEXT_LAYOUT_MANUAL = "Mount <ReticleDev /> in your root layout (app/layout.tsx), dev-only:\n\n import { ReticleDev } from './reticle-dev';\n // inside <body>:\n {process.env.NODE_ENV === 'development' ? <ReticleDev /> : null}";
13
+ /**
14
+ * Manual connect guidance for projects without a Vite/Next plugin. Most such projects still use a
15
+ * BUNDLER (CRA, webpack, Parcel, Vue/Svelte CLIs) — for those, the connect goes in the entry MODULE,
16
+ * where a bare `@reticlehq/react` import resolves. A bare import in a plain index.html does NOT resolve in
17
+ * the browser, so we never tell a bundled app to do that (the old advice silently failed for CRA).
18
+ */
19
+ export declare function htmlManual(port: number | undefined, projectId?: string): string;
20
+ export declare const NEXT_RETICLE_DEV_PATH = "app/reticle-dev.tsx";
21
+ export declare const SVELTEKIT_HOOKS_PATH = "src/hooks.client.ts";
22
+ /**
23
+ * Dev-only client hook that connects Reticle in a SvelteKit app. SvelteKit renders through app.html and
24
+ * never triggers Vite's index.html injection (verified), so the standard plugin can't auto-connect —
25
+ * a client hook is the reliable path. SvelteKit runs src/hooks.client.ts on the client at startup.
26
+ */
27
+ export declare function svelteKitHooksFile(port: number | undefined, projectId?: string): string;
28
+ /**
29
+ * Root-level project config for Reticle. Written by `reticle init`; read by `reticle mcp` for the port
30
+ * and by tooling for the stable projectId (the app's identity across port changes).
31
+ */
32
+ export declare function reticleConfigContent(framework: string, port: number | undefined, projectId?: string): string;
33
+ //# sourceMappingURL=snippets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snippets.d.ts","sourceRoot":"","sources":["../../src/init/snippets.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAiBH,kFAAkF;AAClF,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAW3D;AAED,gFAAgF;AAChF,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAM3D;AAED,2EAA2E;AAC3E,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAgBvF;AAED,6CAA6C;AAC7C,eAAO,MAAM,kBAAkB,mNAIoC,CAAC;AAEpE;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAgB/E;AAED,eAAO,MAAM,qBAAqB,wBAAwB,CAAC;AAC3D,eAAO,MAAM,oBAAoB,wBAAwB,CAAC;AAE1D;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAUvF;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,SAAS,CAAC,EAAE,MAAM,GACjB,MAAM,CAKR"}