@pyric/cli 0.1.0-alpha.10

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 (903) hide show
  1. package/LICENSE +216 -0
  2. package/README.md +180 -0
  3. package/README.md.orig +141 -0
  4. package/dist/assurance/.generated/conformance-verdicts.d.ts +1071 -0
  5. package/dist/assurance/.generated/conformance-verdicts.d.ts.map +1 -0
  6. package/dist/assurance/.generated/conformance-verdicts.js +1070 -0
  7. package/dist/assurance/.generated/conformance-verdicts.js.map +1 -0
  8. package/dist/assurance/attachment.d.ts +24 -0
  9. package/dist/assurance/attachment.d.ts.map +1 -0
  10. package/dist/assurance/attachment.js +138 -0
  11. package/dist/assurance/attachment.js.map +1 -0
  12. package/dist/assurance/browser.d.ts +7 -0
  13. package/dist/assurance/browser.d.ts.map +1 -0
  14. package/dist/assurance/browser.js +68 -0
  15. package/dist/assurance/browser.js.map +1 -0
  16. package/dist/assurance/campaign.d.ts +41 -0
  17. package/dist/assurance/campaign.d.ts.map +1 -0
  18. package/dist/assurance/campaign.js +364 -0
  19. package/dist/assurance/campaign.js.map +1 -0
  20. package/dist/assurance/capabilities.d.ts +11 -0
  21. package/dist/assurance/capabilities.d.ts.map +1 -0
  22. package/dist/assurance/capabilities.js +282 -0
  23. package/dist/assurance/capabilities.js.map +1 -0
  24. package/dist/assurance/cases.d.ts +14 -0
  25. package/dist/assurance/cases.d.ts.map +1 -0
  26. package/dist/assurance/cases.js +27 -0
  27. package/dist/assurance/cases.js.map +1 -0
  28. package/dist/assurance/index.d.ts +10 -0
  29. package/dist/assurance/index.d.ts.map +1 -0
  30. package/dist/assurance/index.js +9 -0
  31. package/dist/assurance/index.js.map +1 -0
  32. package/dist/assurance/runner.d.ts +3 -0
  33. package/dist/assurance/runner.d.ts.map +1 -0
  34. package/dist/assurance/runner.js +633 -0
  35. package/dist/assurance/runner.js.map +1 -0
  36. package/dist/assurance/tool-names.d.ts +4 -0
  37. package/dist/assurance/tool-names.d.ts.map +1 -0
  38. package/dist/assurance/tool-names.js +14 -0
  39. package/dist/assurance/tool-names.js.map +1 -0
  40. package/dist/assurance/tools.d.ts +19 -0
  41. package/dist/assurance/tools.d.ts.map +1 -0
  42. package/dist/assurance/tools.js +737 -0
  43. package/dist/assurance/tools.js.map +1 -0
  44. package/dist/assurance/types.d.ts +347 -0
  45. package/dist/assurance/types.d.ts.map +1 -0
  46. package/dist/assurance/types.js +7 -0
  47. package/dist/assurance/types.js.map +1 -0
  48. package/dist/assurance/validation.d.ts +8 -0
  49. package/dist/assurance/validation.d.ts.map +1 -0
  50. package/dist/assurance/validation.js +269 -0
  51. package/dist/assurance/validation.js.map +1 -0
  52. package/dist/bridge/client/bridge.d.ts +133 -0
  53. package/dist/bridge/client/bridge.d.ts.map +1 -0
  54. package/dist/bridge/client/bridge.js +429 -0
  55. package/dist/bridge/client/bridge.js.map +1 -0
  56. package/dist/bridge/client/dispatch.d.ts +41 -0
  57. package/dist/bridge/client/dispatch.d.ts.map +1 -0
  58. package/dist/bridge/client/dispatch.js +111 -0
  59. package/dist/bridge/client/dispatch.js.map +1 -0
  60. package/dist/bridge/client.d.ts +24 -0
  61. package/dist/bridge/client.d.ts.map +1 -0
  62. package/dist/bridge/client.js +26 -0
  63. package/dist/bridge/client.js.map +1 -0
  64. package/dist/bridge/protocol.d.ts +227 -0
  65. package/dist/bridge/protocol.d.ts.map +1 -0
  66. package/dist/bridge/protocol.js +131 -0
  67. package/dist/bridge/protocol.js.map +1 -0
  68. package/dist/bridge/server/audit.d.ts +19 -0
  69. package/dist/bridge/server/audit.d.ts.map +1 -0
  70. package/dist/bridge/server/audit.js +46 -0
  71. package/dist/bridge/server/audit.js.map +1 -0
  72. package/dist/bridge/server/bridge.d.ts +126 -0
  73. package/dist/bridge/server/bridge.d.ts.map +1 -0
  74. package/dist/bridge/server/bridge.js +383 -0
  75. package/dist/bridge/server/bridge.js.map +1 -0
  76. package/dist/bridge/server/headless.d.ts +36 -0
  77. package/dist/bridge/server/headless.d.ts.map +1 -0
  78. package/dist/bridge/server/headless.js +142 -0
  79. package/dist/bridge/server/headless.js.map +1 -0
  80. package/dist/bridge/server/json-schema-to-zod.d.ts +37 -0
  81. package/dist/bridge/server/json-schema-to-zod.d.ts.map +1 -0
  82. package/dist/bridge/server/json-schema-to-zod.js +93 -0
  83. package/dist/bridge/server/json-schema-to-zod.js.map +1 -0
  84. package/dist/bridge/server/local-bridge.d.ts +33 -0
  85. package/dist/bridge/server/local-bridge.d.ts.map +1 -0
  86. package/dist/bridge/server/local-bridge.js +41 -0
  87. package/dist/bridge/server/local-bridge.js.map +1 -0
  88. package/dist/bridge/server/logger.d.ts +28 -0
  89. package/dist/bridge/server/logger.d.ts.map +1 -0
  90. package/dist/bridge/server/logger.js +42 -0
  91. package/dist/bridge/server/logger.js.map +1 -0
  92. package/dist/bridge/server/mcp-contract.d.ts +21 -0
  93. package/dist/bridge/server/mcp-contract.d.ts.map +1 -0
  94. package/dist/bridge/server/mcp-contract.js +63 -0
  95. package/dist/bridge/server/mcp-contract.js.map +1 -0
  96. package/dist/bridge/server/mcp.d.ts +26 -0
  97. package/dist/bridge/server/mcp.d.ts.map +1 -0
  98. package/dist/bridge/server/mcp.js +102 -0
  99. package/dist/bridge/server/mcp.js.map +1 -0
  100. package/dist/bridge/server/peer.d.ts +39 -0
  101. package/dist/bridge/server/peer.d.ts.map +1 -0
  102. package/dist/bridge/server/peer.js +189 -0
  103. package/dist/bridge/server/peer.js.map +1 -0
  104. package/dist/bridge/server/standalone.d.ts +49 -0
  105. package/dist/bridge/server/standalone.d.ts.map +1 -0
  106. package/dist/bridge/server/standalone.js +267 -0
  107. package/dist/bridge/server/standalone.js.map +1 -0
  108. package/dist/bridge/server/tool-metadata.d.ts +38 -0
  109. package/dist/bridge/server/tool-metadata.d.ts.map +1 -0
  110. package/dist/bridge/server/tool-metadata.js +84 -0
  111. package/dist/bridge/server/tool-metadata.js.map +1 -0
  112. package/dist/bridge/server.d.ts +21 -0
  113. package/dist/bridge/server.d.ts.map +1 -0
  114. package/dist/bridge/server.js +18 -0
  115. package/dist/bridge/server.js.map +1 -0
  116. package/dist/cli/can-i-use.d.ts +5 -0
  117. package/dist/cli/can-i-use.d.ts.map +1 -0
  118. package/dist/cli/can-i-use.js +49 -0
  119. package/dist/cli/can-i-use.js.map +1 -0
  120. package/dist/cli/database-rules.d.ts +43 -0
  121. package/dist/cli/database-rules.d.ts.map +1 -0
  122. package/dist/cli/database-rules.js +261 -0
  123. package/dist/cli/database-rules.js.map +1 -0
  124. package/dist/cli/dev-runner.d.ts +112 -0
  125. package/dist/cli/dev-runner.d.ts.map +1 -0
  126. package/dist/cli/dev-runner.js +239 -0
  127. package/dist/cli/dev-runner.js.map +1 -0
  128. package/dist/cli/firebase-json.d.ts +66 -0
  129. package/dist/cli/firebase-json.d.ts.map +1 -0
  130. package/dist/cli/firebase-json.js +60 -0
  131. package/dist/cli/firebase-json.js.map +1 -0
  132. package/dist/cli/firestore-indexes.d.ts +21 -0
  133. package/dist/cli/firestore-indexes.d.ts.map +1 -0
  134. package/dist/cli/firestore-indexes.js +39 -0
  135. package/dist/cli/firestore-indexes.js.map +1 -0
  136. package/dist/cli/index.d.ts +56 -0
  137. package/dist/cli/index.d.ts.map +1 -0
  138. package/dist/cli/index.js +387 -0
  139. package/dist/cli/index.js.map +1 -0
  140. package/dist/cli/init.d.ts +50 -0
  141. package/dist/cli/init.d.ts.map +1 -0
  142. package/dist/cli/init.js +182 -0
  143. package/dist/cli/init.js.map +1 -0
  144. package/dist/cli/mcp-proxy.d.ts +10 -0
  145. package/dist/cli/mcp-proxy.d.ts.map +1 -0
  146. package/dist/cli/mcp-proxy.js +129 -0
  147. package/dist/cli/mcp-proxy.js.map +1 -0
  148. package/dist/cli/parse-args.d.ts +20 -0
  149. package/dist/cli/parse-args.d.ts.map +1 -0
  150. package/dist/cli/parse-args.js +74 -0
  151. package/dist/cli/parse-args.js.map +1 -0
  152. package/dist/cli/rules.d.ts +55 -0
  153. package/dist/cli/rules.d.ts.map +1 -0
  154. package/dist/cli/rules.js +199 -0
  155. package/dist/cli/rules.js.map +1 -0
  156. package/dist/cli/scope.d.ts +12 -0
  157. package/dist/cli/scope.d.ts.map +1 -0
  158. package/dist/cli/scope.js +44 -0
  159. package/dist/cli/scope.js.map +1 -0
  160. package/dist/cli/serve.d.ts +122 -0
  161. package/dist/cli/serve.d.ts.map +1 -0
  162. package/dist/cli/serve.js +844 -0
  163. package/dist/cli/serve.js.map +1 -0
  164. package/dist/cli/service-commands.d.ts +8 -0
  165. package/dist/cli/service-commands.d.ts.map +1 -0
  166. package/dist/cli/service-commands.js +58 -0
  167. package/dist/cli/service-commands.js.map +1 -0
  168. package/dist/cli/snapshot.d.ts +22 -0
  169. package/dist/cli/snapshot.d.ts.map +1 -0
  170. package/dist/cli/snapshot.js +139 -0
  171. package/dist/cli/snapshot.js.map +1 -0
  172. package/dist/cli/storage-rules.d.ts +21 -0
  173. package/dist/cli/storage-rules.d.ts.map +1 -0
  174. package/dist/cli/storage-rules.js +121 -0
  175. package/dist/cli/storage-rules.js.map +1 -0
  176. package/dist/cli/verify.d.ts +23 -0
  177. package/dist/cli/verify.d.ts.map +1 -0
  178. package/dist/cli/verify.js +349 -0
  179. package/dist/cli/verify.js.map +1 -0
  180. package/dist/conformance/.generated/can-i-use-browser.d.ts +44 -0
  181. package/dist/conformance/.generated/can-i-use-browser.d.ts.map +1 -0
  182. package/dist/conformance/.generated/can-i-use-browser.js +67 -0
  183. package/dist/conformance/.generated/can-i-use-browser.js.map +1 -0
  184. package/dist/conformance/.generated/can-i-use.d.ts +61 -0
  185. package/dist/conformance/.generated/can-i-use.d.ts.map +1 -0
  186. package/dist/conformance/.generated/can-i-use.js +68 -0
  187. package/dist/conformance/.generated/can-i-use.js.map +1 -0
  188. package/dist/conformance/browser.d.ts +7 -0
  189. package/dist/conformance/browser.d.ts.map +1 -0
  190. package/dist/conformance/browser.js +8 -0
  191. package/dist/conformance/browser.js.map +1 -0
  192. package/dist/conformance/can-i-use-tool.d.ts +21 -0
  193. package/dist/conformance/can-i-use-tool.d.ts.map +1 -0
  194. package/dist/conformance/can-i-use-tool.js +40 -0
  195. package/dist/conformance/can-i-use-tool.js.map +1 -0
  196. package/dist/conformance/can-i-use.d.ts +6 -0
  197. package/dist/conformance/can-i-use.d.ts.map +1 -0
  198. package/dist/conformance/can-i-use.js +10 -0
  199. package/dist/conformance/can-i-use.js.map +1 -0
  200. package/dist/conformance/index.d.ts +8 -0
  201. package/dist/conformance/index.d.ts.map +1 -0
  202. package/dist/conformance/index.js +2 -0
  203. package/dist/conformance/index.js.map +1 -0
  204. package/dist/conformance/tools.d.ts +4 -0
  205. package/dist/conformance/tools.d.ts.map +1 -0
  206. package/dist/conformance/tools.js +14 -0
  207. package/dist/conformance/tools.js.map +1 -0
  208. package/dist/credentials/core/memoize-ttl.d.ts +58 -0
  209. package/dist/credentials/core/memoize-ttl.d.ts.map +1 -0
  210. package/dist/credentials/core/memoize-ttl.js +88 -0
  211. package/dist/credentials/core/memoize-ttl.js.map +1 -0
  212. package/dist/credentials/core/types.d.ts +11 -0
  213. package/dist/credentials/core/types.d.ts.map +1 -0
  214. package/dist/credentials/core/types.js +2 -0
  215. package/dist/credentials/core/types.js.map +1 -0
  216. package/dist/credentials/node/from-adc.d.ts +10 -0
  217. package/dist/credentials/node/from-adc.d.ts.map +1 -0
  218. package/dist/credentials/node/from-adc.js +76 -0
  219. package/dist/credentials/node/from-adc.js.map +1 -0
  220. package/dist/credentials/node/from-service-account.d.ts +24 -0
  221. package/dist/credentials/node/from-service-account.d.ts.map +1 -0
  222. package/dist/credentials/node/from-service-account.js +108 -0
  223. package/dist/credentials/node/from-service-account.js.map +1 -0
  224. package/dist/credentials/node/index.d.ts +7 -0
  225. package/dist/credentials/node/index.d.ts.map +1 -0
  226. package/dist/credentials/node/index.js +7 -0
  227. package/dist/credentials/node/index.js.map +1 -0
  228. package/dist/discover/concurrency.d.ts +42 -0
  229. package/dist/discover/concurrency.d.ts.map +1 -0
  230. package/dist/discover/concurrency.js +113 -0
  231. package/dist/discover/concurrency.js.map +1 -0
  232. package/dist/discover/crawler-adapter.d.ts +48 -0
  233. package/dist/discover/crawler-adapter.d.ts.map +1 -0
  234. package/dist/discover/crawler-adapter.js +92 -0
  235. package/dist/discover/crawler-adapter.js.map +1 -0
  236. package/dist/discover/crawler.d.ts +294 -0
  237. package/dist/discover/crawler.d.ts.map +1 -0
  238. package/dist/discover/crawler.js +764 -0
  239. package/dist/discover/crawler.js.map +1 -0
  240. package/dist/discover/credential-free.d.ts +19 -0
  241. package/dist/discover/credential-free.d.ts.map +1 -0
  242. package/dist/discover/credential-free.js +18 -0
  243. package/dist/discover/credential-free.js.map +1 -0
  244. package/dist/discover/findCollectionGroup.d.ts +44 -0
  245. package/dist/discover/findCollectionGroup.d.ts.map +1 -0
  246. package/dist/discover/findCollectionGroup.js +81 -0
  247. package/dist/discover/findCollectionGroup.js.map +1 -0
  248. package/dist/discover/firestore-source.d.ts +60 -0
  249. package/dist/discover/firestore-source.d.ts.map +1 -0
  250. package/dist/discover/firestore-source.js +11 -0
  251. package/dist/discover/firestore-source.js.map +1 -0
  252. package/dist/discover/index.d.ts +3 -0
  253. package/dist/discover/index.d.ts.map +1 -0
  254. package/dist/discover/index.js +5 -0
  255. package/dist/discover/index.js.map +1 -0
  256. package/dist/discover/merge.d.ts +108 -0
  257. package/dist/discover/merge.d.ts.map +1 -0
  258. package/dist/discover/merge.js +394 -0
  259. package/dist/discover/merge.js.map +1 -0
  260. package/dist/discover/session.d.ts +116 -0
  261. package/dist/discover/session.d.ts.map +1 -0
  262. package/dist/discover/session.js +331 -0
  263. package/dist/discover/session.js.map +1 -0
  264. package/dist/discover/tools.d.ts +58 -0
  265. package/dist/discover/tools.d.ts.map +1 -0
  266. package/dist/discover/tools.js +115 -0
  267. package/dist/discover/tools.js.map +1 -0
  268. package/dist/discover/types.d.ts +190 -0
  269. package/dist/discover/types.d.ts.map +1 -0
  270. package/dist/discover/types.js +12 -0
  271. package/dist/discover/types.js.map +1 -0
  272. package/dist/discover/wire.d.ts +70 -0
  273. package/dist/discover/wire.d.ts.map +1 -0
  274. package/dist/discover/wire.js +309 -0
  275. package/dist/discover/wire.js.map +1 -0
  276. package/dist/functions-rtdb/child.d.ts +52 -0
  277. package/dist/functions-rtdb/child.d.ts.map +1 -0
  278. package/dist/functions-rtdb/child.js +283 -0
  279. package/dist/functions-rtdb/child.js.map +1 -0
  280. package/dist/functions-rtdb/delivery.d.ts +4 -0
  281. package/dist/functions-rtdb/delivery.d.ts.map +1 -0
  282. package/dist/functions-rtdb/delivery.js +2 -0
  283. package/dist/functions-rtdb/delivery.js.map +1 -0
  284. package/dist/functions-rtdb/discovery.d.ts +41 -0
  285. package/dist/functions-rtdb/discovery.d.ts.map +1 -0
  286. package/dist/functions-rtdb/discovery.js +86 -0
  287. package/dist/functions-rtdb/discovery.js.map +1 -0
  288. package/dist/functions-rtdb/event.d.ts +20 -0
  289. package/dist/functions-rtdb/event.d.ts.map +1 -0
  290. package/dist/functions-rtdb/event.js +45 -0
  291. package/dist/functions-rtdb/event.js.map +1 -0
  292. package/dist/functions-rtdb/execution.d.ts +20 -0
  293. package/dist/functions-rtdb/execution.d.ts.map +1 -0
  294. package/dist/functions-rtdb/execution.js +70 -0
  295. package/dist/functions-rtdb/execution.js.map +1 -0
  296. package/dist/functions-rtdb/in-memory-delivery.d.ts +9 -0
  297. package/dist/functions-rtdb/in-memory-delivery.d.ts.map +1 -0
  298. package/dist/functions-rtdb/in-memory-delivery.js +36 -0
  299. package/dist/functions-rtdb/in-memory-delivery.js.map +1 -0
  300. package/dist/functions-rtdb/project.d.ts +7 -0
  301. package/dist/functions-rtdb/project.d.ts.map +1 -0
  302. package/dist/functions-rtdb/project.js +54 -0
  303. package/dist/functions-rtdb/project.js.map +1 -0
  304. package/dist/functions-rtdb/projection.d.ts +14 -0
  305. package/dist/functions-rtdb/projection.d.ts.map +1 -0
  306. package/dist/functions-rtdb/projection.js +65 -0
  307. package/dist/functions-rtdb/projection.js.map +1 -0
  308. package/dist/functions-rtdb/reference-pattern.d.ts +5 -0
  309. package/dist/functions-rtdb/reference-pattern.d.ts.map +1 -0
  310. package/dist/functions-rtdb/reference-pattern.js +14 -0
  311. package/dist/functions-rtdb/reference-pattern.js.map +1 -0
  312. package/dist/functions-rtdb/remote-delivery.d.ts +9 -0
  313. package/dist/functions-rtdb/remote-delivery.d.ts.map +1 -0
  314. package/dist/functions-rtdb/remote-delivery.js +11 -0
  315. package/dist/functions-rtdb/remote-delivery.js.map +1 -0
  316. package/dist/pkg-version.d.ts +2 -0
  317. package/dist/pkg-version.d.ts.map +1 -0
  318. package/dist/pkg-version.js +47 -0
  319. package/dist/pkg-version.js.map +1 -0
  320. package/dist/register/esm-exports.d.ts +26 -0
  321. package/dist/register/esm-exports.d.ts.map +1 -0
  322. package/dist/register/esm-exports.js +61 -0
  323. package/dist/register/esm-exports.js.map +1 -0
  324. package/dist/register/hooks.d.ts +13 -0
  325. package/dist/register/hooks.d.ts.map +1 -0
  326. package/dist/register/hooks.js +15 -0
  327. package/dist/register/hooks.js.map +1 -0
  328. package/dist/register/index.d.ts +5 -0
  329. package/dist/register/index.d.ts.map +1 -0
  330. package/dist/register/index.js +124 -0
  331. package/dist/register/index.js.map +1 -0
  332. package/dist/register/mapping.d.ts +19 -0
  333. package/dist/register/mapping.d.ts.map +1 -0
  334. package/dist/register/mapping.js +35 -0
  335. package/dist/register/mapping.js.map +1 -0
  336. package/dist/remote/index.d.ts +232 -0
  337. package/dist/remote/index.d.ts.map +1 -0
  338. package/dist/remote/index.js +720 -0
  339. package/dist/remote/index.js.map +1 -0
  340. package/dist/rtdb/crawl-snapshot.d.ts +17 -0
  341. package/dist/rtdb/crawl-snapshot.d.ts.map +1 -0
  342. package/dist/rtdb/crawl-snapshot.js +72 -0
  343. package/dist/rtdb/crawl-snapshot.js.map +1 -0
  344. package/dist/rtdb/inspection.d.ts +8 -0
  345. package/dist/rtdb/inspection.d.ts.map +1 -0
  346. package/dist/rtdb/inspection.js +111 -0
  347. package/dist/rtdb/inspection.js.map +1 -0
  348. package/dist/rtdb/load-rules-document.d.ts +25 -0
  349. package/dist/rtdb/load-rules-document.d.ts.map +1 -0
  350. package/dist/rtdb/load-rules-document.js +38 -0
  351. package/dist/rtdb/load-rules-document.js.map +1 -0
  352. package/dist/rtdb/rules-generation-tool.d.ts +4 -0
  353. package/dist/rtdb/rules-generation-tool.d.ts.map +1 -0
  354. package/dist/rtdb/rules-generation-tool.js +35 -0
  355. package/dist/rtdb/rules-generation-tool.js.map +1 -0
  356. package/dist/rtdb/rules-json.d.ts +8 -0
  357. package/dist/rtdb/rules-json.d.ts.map +1 -0
  358. package/dist/rtdb/rules-json.js +17 -0
  359. package/dist/rtdb/rules-json.js.map +1 -0
  360. package/dist/serve/bridge-mount.d.ts +36 -0
  361. package/dist/serve/bridge-mount.d.ts.map +1 -0
  362. package/dist/serve/bridge-mount.js +162 -0
  363. package/dist/serve/bridge-mount.js.map +1 -0
  364. package/dist/serve/bundler.d.ts +110 -0
  365. package/dist/serve/bundler.d.ts.map +1 -0
  366. package/dist/serve/bundler.js +432 -0
  367. package/dist/serve/bundler.js.map +1 -0
  368. package/dist/serve/capture-store.d.ts +27 -0
  369. package/dist/serve/capture-store.d.ts.map +1 -0
  370. package/dist/serve/capture-store.js +47 -0
  371. package/dist/serve/capture-store.js.map +1 -0
  372. package/dist/serve/discovery.d.ts +71 -0
  373. package/dist/serve/discovery.d.ts.map +1 -0
  374. package/dist/serve/discovery.js +158 -0
  375. package/dist/serve/discovery.js.map +1 -0
  376. package/dist/serve/docs-ui/_astro/_slug_.DPUwShm2.css +1 -0
  377. package/dist/serve/docs-ui/docs/_rhythm/index.html +99 -0
  378. package/dist/serve/docs-ui/docs/_rhythm.md +97 -0
  379. package/dist/serve/docs-ui/docs/agent/set-up-your-agent/index.html +42 -0
  380. package/dist/serve/docs-ui/docs/agent/set-up-your-agent.md +72 -0
  381. package/dist/serve/docs-ui/docs/agent/watch-and-review/index.html +25 -0
  382. package/dist/serve/docs-ui/docs/agent/watch-and-review.md +38 -0
  383. package/dist/serve/docs-ui/docs/agent/work-with-an-agent/index.html +69 -0
  384. package/dist/serve/docs-ui/docs/agent/work-with-an-agent.md +74 -0
  385. package/dist/serve/docs-ui/docs/ai-compat/index.html +423 -0
  386. package/dist/serve/docs-ui/docs/ai-compat.md +456 -0
  387. package/dist/serve/docs-ui/docs/api-reference/index.html +66 -0
  388. package/dist/serve/docs-ui/docs/api-reference.md +69 -0
  389. package/dist/serve/docs-ui/docs/app-compat/index.html +159 -0
  390. package/dist/serve/docs-ui/docs/app-compat.md +178 -0
  391. package/dist/serve/docs-ui/docs/auth-compat/index.html +644 -0
  392. package/dist/serve/docs-ui/docs/auth-compat.md +701 -0
  393. package/dist/serve/docs-ui/docs/build/ai-logic/index.html +27 -0
  394. package/dist/serve/docs-ui/docs/build/ai-logic.md +39 -0
  395. package/dist/serve/docs-ui/docs/build/authentication/index.html +65 -0
  396. package/dist/serve/docs-ui/docs/build/authentication.md +95 -0
  397. package/dist/serve/docs-ui/docs/build/cloud-firestore/index.html +69 -0
  398. package/dist/serve/docs-ui/docs/build/cloud-firestore.md +93 -0
  399. package/dist/serve/docs-ui/docs/build/cloud-messaging/index.html +27 -0
  400. package/dist/serve/docs-ui/docs/build/cloud-messaging.md +37 -0
  401. package/dist/serve/docs-ui/docs/build/cloud-storage/index.html +65 -0
  402. package/dist/serve/docs-ui/docs/build/cloud-storage.md +86 -0
  403. package/dist/serve/docs-ui/docs/build/realtime-database/index.html +49 -0
  404. package/dist/serve/docs-ui/docs/build/realtime-database.md +67 -0
  405. package/dist/serve/docs-ui/docs/conformance-scores/index.html +49 -0
  406. package/dist/serve/docs-ui/docs/conformance-scores.md +53 -0
  407. package/dist/serve/docs-ui/docs/create-pyric-reference-api/index.html +498 -0
  408. package/dist/serve/docs-ui/docs/create-pyric-reference-api.md +345 -0
  409. package/dist/serve/docs-ui/docs/database-compat/index.html +1037 -0
  410. package/dist/serve/docs-ui/docs/database-compat.md +1099 -0
  411. package/dist/serve/docs-ui/docs/firestore-compat/index.html +823 -0
  412. package/dist/serve/docs-ui/docs/firestore-compat.md +881 -0
  413. package/dist/serve/docs-ui/docs/functions-rtdb-compat/index.html +72 -0
  414. package/dist/serve/docs-ui/docs/functions-rtdb-compat.md +83 -0
  415. package/dist/serve/docs-ui/docs/get-started/how-the-swap-works/index.html +27 -0
  416. package/dist/serve/docs-ui/docs/get-started/how-the-swap-works.md +50 -0
  417. package/dist/serve/docs-ui/docs/get-started/start-building/index.html +31 -0
  418. package/dist/serve/docs-ui/docs/get-started/start-building.md +53 -0
  419. package/dist/serve/docs-ui/docs/index.html +2 -0
  420. package/dist/serve/docs-ui/docs/index.json +11719 -0
  421. package/dist/serve/docs-ui/docs/messaging-compat/index.html +264 -0
  422. package/dist/serve/docs-ui/docs/messaging-compat.md +285 -0
  423. package/dist/serve/docs-ui/docs/observe/see-whats-happening/index.html +73 -0
  424. package/dist/serve/docs-ui/docs/observe/see-whats-happening.md +69 -0
  425. package/dist/serve/docs-ui/docs/observe/shape-your-data/index.html +44 -0
  426. package/dist/serve/docs-ui/docs/observe/shape-your-data.md +74 -0
  427. package/dist/serve/docs-ui/docs/overview/index.html +16 -0
  428. package/dist/serve/docs-ui/docs/overview.md +31 -0
  429. package/dist/serve/docs-ui/docs/pyric-admin-app-reference-api/index.html +185 -0
  430. package/dist/serve/docs-ui/docs/pyric-admin-app-reference-api.md +206 -0
  431. package/dist/serve/docs-ui/docs/pyric-admin-auth-reference-api/index.html +617 -0
  432. package/dist/serve/docs-ui/docs/pyric-admin-auth-reference-api.md +441 -0
  433. package/dist/serve/docs-ui/docs/pyric-admin-database-reference-api/index.html +583 -0
  434. package/dist/serve/docs-ui/docs/pyric-admin-database-reference-api.md +597 -0
  435. package/dist/serve/docs-ui/docs/pyric-admin-firestore-reference-api/index.html +32 -0
  436. package/dist/serve/docs-ui/docs/pyric-admin-firestore-reference-api.md +30 -0
  437. package/dist/serve/docs-ui/docs/pyric-admin-storage-reference-api/index.html +317 -0
  438. package/dist/serve/docs-ui/docs/pyric-admin-storage-reference-api.md +285 -0
  439. package/dist/serve/docs-ui/docs/pyric-ai-reference-api/index.html +5830 -0
  440. package/dist/serve/docs-ui/docs/pyric-ai-reference-api.md +5439 -0
  441. package/dist/serve/docs-ui/docs/pyric-ai-scripting-reference-api/index.html +159 -0
  442. package/dist/serve/docs-ui/docs/pyric-ai-scripting-reference-api.md +122 -0
  443. package/dist/serve/docs-ui/docs/pyric-app-reference-api/index.html +420 -0
  444. package/dist/serve/docs-ui/docs/pyric-app-reference-api.md +326 -0
  445. package/dist/serve/docs-ui/docs/pyric-auth-reference-api/index.html +5452 -0
  446. package/dist/serve/docs-ui/docs/pyric-auth-reference-api.md +5271 -0
  447. package/dist/serve/docs-ui/docs/pyric-cli-assurance-browser-reference-api/index.html +98 -0
  448. package/dist/serve/docs-ui/docs/pyric-cli-assurance-browser-reference-api.md +88 -0
  449. package/dist/serve/docs-ui/docs/pyric-cli-assurance-reference-api/index.html +2263 -0
  450. package/dist/serve/docs-ui/docs/pyric-cli-assurance-reference-api.md +1477 -0
  451. package/dist/serve/docs-ui/docs/pyric-cli-bridge-client-reference-api/index.html +546 -0
  452. package/dist/serve/docs-ui/docs/pyric-cli-bridge-client-reference-api.md +485 -0
  453. package/dist/serve/docs-ui/docs/pyric-cli-bridge-reference-api/index.html +506 -0
  454. package/dist/serve/docs-ui/docs/pyric-cli-bridge-reference-api.md +419 -0
  455. package/dist/serve/docs-ui/docs/pyric-cli-conformance-browser-reference-api/index.html +257 -0
  456. package/dist/serve/docs-ui/docs/pyric-cli-conformance-browser-reference-api.md +197 -0
  457. package/dist/serve/docs-ui/docs/pyric-cli-conformance-reference-api/index.html +307 -0
  458. package/dist/serve/docs-ui/docs/pyric-cli-conformance-reference-api.md +254 -0
  459. package/dist/serve/docs-ui/docs/pyric-cli-credentials-node-reference-api/index.html +67 -0
  460. package/dist/serve/docs-ui/docs/pyric-cli-credentials-node-reference-api.md +59 -0
  461. package/dist/serve/docs-ui/docs/pyric-cli-discover-reference-api/index.html +2355 -0
  462. package/dist/serve/docs-ui/docs/pyric-cli-discover-reference-api.md +2036 -0
  463. package/dist/serve/docs-ui/docs/pyric-cli-register-reference-api/index.html +10 -0
  464. package/dist/serve/docs-ui/docs/pyric-cli-register-reference-api.md +16 -0
  465. package/dist/serve/docs-ui/docs/pyric-cli-remote-reference-api/index.html +1044 -0
  466. package/dist/serve/docs-ui/docs/pyric-cli-remote-reference-api.md +952 -0
  467. package/dist/serve/docs-ui/docs/pyric-cli-serve-worker-reference-api/index.html +5041 -0
  468. package/dist/serve/docs-ui/docs/pyric-cli-serve-worker-reference-api.md +4739 -0
  469. package/dist/serve/docs-ui/docs/pyric-cli-verify-reference-api/index.html +926 -0
  470. package/dist/serve/docs-ui/docs/pyric-cli-verify-reference-api.md +586 -0
  471. package/dist/serve/docs-ui/docs/pyric-cli-vite-reference-api/index.html +102 -0
  472. package/dist/serve/docs-ui/docs/pyric-cli-vite-reference-api.md +76 -0
  473. package/dist/serve/docs-ui/docs/pyric-database-reference-api/index.html +1851 -0
  474. package/dist/serve/docs-ui/docs/pyric-database-reference-api.md +1842 -0
  475. package/dist/serve/docs-ui/docs/pyric-firestore-reference-api/index.html +3623 -0
  476. package/dist/serve/docs-ui/docs/pyric-firestore-reference-api.md +3399 -0
  477. package/dist/serve/docs-ui/docs/pyric-firestore-values-reference-api/index.html +30 -0
  478. package/dist/serve/docs-ui/docs/pyric-firestore-values-reference-api.md +30 -0
  479. package/dist/serve/docs-ui/docs/pyric-messaging-reference-api/index.html +508 -0
  480. package/dist/serve/docs-ui/docs/pyric-messaging-reference-api.md +374 -0
  481. package/dist/serve/docs-ui/docs/pyric-messaging-sw-reference-api/index.html +482 -0
  482. package/dist/serve/docs-ui/docs/pyric-messaging-sw-reference-api.md +348 -0
  483. package/dist/serve/docs-ui/docs/pyric-rules-reference-api/index.html +2629 -0
  484. package/dist/serve/docs-ui/docs/pyric-rules-reference-api.md +2213 -0
  485. package/dist/serve/docs-ui/docs/pyric-sandbox-database-reference-api/index.html +120 -0
  486. package/dist/serve/docs-ui/docs/pyric-sandbox-database-reference-api.md +110 -0
  487. package/dist/serve/docs-ui/docs/pyric-sandbox-firestore-reference-api/index.html +202 -0
  488. package/dist/serve/docs-ui/docs/pyric-sandbox-firestore-reference-api.md +134 -0
  489. package/dist/serve/docs-ui/docs/pyric-sandbox-reference-api/index.html +5019 -0
  490. package/dist/serve/docs-ui/docs/pyric-sandbox-reference-api.md +4060 -0
  491. package/dist/serve/docs-ui/docs/pyric-storage-reference-api/index.html +2120 -0
  492. package/dist/serve/docs-ui/docs/pyric-storage-reference-api.md +1687 -0
  493. package/dist/serve/docs-ui/docs/pyric-ui-agents-reference-api/index.html +638 -0
  494. package/dist/serve/docs-ui/docs/pyric-ui-agents-reference-api.md +430 -0
  495. package/dist/serve/docs-ui/docs/pyric-ui-auth-hooks-reference-api/index.html +813 -0
  496. package/dist/serve/docs-ui/docs/pyric-ui-auth-hooks-reference-api.md +634 -0
  497. package/dist/serve/docs-ui/docs/pyric-ui-auth-reference-api/index.html +1708 -0
  498. package/dist/serve/docs-ui/docs/pyric-ui-auth-reference-api.md +1300 -0
  499. package/dist/serve/docs-ui/docs/pyric-ui-events-hooks-reference-api/index.html +177 -0
  500. package/dist/serve/docs-ui/docs/pyric-ui-events-hooks-reference-api.md +111 -0
  501. package/dist/serve/docs-ui/docs/pyric-ui-events-reference-api/index.html +1542 -0
  502. package/dist/serve/docs-ui/docs/pyric-ui-events-reference-api.md +903 -0
  503. package/dist/serve/docs-ui/docs/pyric-ui-firestore-hooks-reference-api/index.html +1024 -0
  504. package/dist/serve/docs-ui/docs/pyric-ui-firestore-hooks-reference-api.md +640 -0
  505. package/dist/serve/docs-ui/docs/pyric-ui-firestore-reference-api/index.html +2753 -0
  506. package/dist/serve/docs-ui/docs/pyric-ui-firestore-reference-api.md +2171 -0
  507. package/dist/serve/docs-ui/docs/pyric-ui-primitives-reference-api/index.html +1005 -0
  508. package/dist/serve/docs-ui/docs/pyric-ui-primitives-reference-api.md +693 -0
  509. package/dist/serve/docs-ui/docs/pyric-ui-rtdb-reference-api/index.html +1388 -0
  510. package/dist/serve/docs-ui/docs/pyric-ui-rtdb-reference-api.md +1340 -0
  511. package/dist/serve/docs-ui/docs/pyric-ui-rules-hooks-reference-api/index.html +131 -0
  512. package/dist/serve/docs-ui/docs/pyric-ui-rules-hooks-reference-api.md +76 -0
  513. package/dist/serve/docs-ui/docs/pyric-ui-rules-reference-api/index.html +648 -0
  514. package/dist/serve/docs-ui/docs/pyric-ui-rules-reference-api.md +508 -0
  515. package/dist/serve/docs-ui/docs/pyric-ui-storage-hooks-reference-api/index.html +1457 -0
  516. package/dist/serve/docs-ui/docs/pyric-ui-storage-hooks-reference-api.md +1029 -0
  517. package/dist/serve/docs-ui/docs/pyric-ui-storage-reference-api/index.html +2476 -0
  518. package/dist/serve/docs-ui/docs/pyric-ui-storage-reference-api.md +1919 -0
  519. package/dist/serve/docs-ui/docs/pyric-ui-traffic-hooks-reference-api/index.html +1241 -0
  520. package/dist/serve/docs-ui/docs/pyric-ui-traffic-hooks-reference-api.md +817 -0
  521. package/dist/serve/docs-ui/docs/pyric-ui-traffic-reference-api/index.html +2289 -0
  522. package/dist/serve/docs-ui/docs/pyric-ui-traffic-reference-api.md +1489 -0
  523. package/dist/serve/docs-ui/docs/rules-compat/index.html +272 -0
  524. package/dist/serve/docs-ui/docs/rules-compat.md +287 -0
  525. package/dist/serve/docs-ui/docs/secure/audit-your-rules/index.html +34 -0
  526. package/dist/serve/docs-ui/docs/secure/audit-your-rules.md +67 -0
  527. package/dist/serve/docs-ui/docs/secure/firestore-rules-limits/index.html +105 -0
  528. package/dist/serve/docs-ui/docs/secure/firestore-rules-limits.md +152 -0
  529. package/dist/serve/docs-ui/docs/secure/read-a-denial/index.html +40 -0
  530. package/dist/serve/docs-ui/docs/secure/read-a-denial.md +58 -0
  531. package/dist/serve/docs-ui/docs/secure/rtdb-rules-in-typescript/index.html +66 -0
  532. package/dist/serve/docs-ui/docs/secure/rtdb-rules-in-typescript.md +89 -0
  533. package/dist/serve/docs-ui/docs/secure/rules-standard-library/index.html +158 -0
  534. package/dist/serve/docs-ui/docs/secure/rules-standard-library.md +116 -0
  535. package/dist/serve/docs-ui/docs/secure/secure-it-with-rules/index.html +46 -0
  536. package/dist/serve/docs-ui/docs/secure/secure-it-with-rules.md +51 -0
  537. package/dist/serve/docs-ui/docs/secure/simulate-and-lint/index.html +94 -0
  538. package/dist/serve/docs-ui/docs/secure/simulate-and-lint.md +86 -0
  539. package/dist/serve/docs-ui/docs/secure/write-a-rules-test-suite/index.html +81 -0
  540. package/dist/serve/docs-ui/docs/secure/write-a-rules-test-suite.md +105 -0
  541. package/dist/serve/docs-ui/docs/ship/ship-to-production/index.html +36 -0
  542. package/dist/serve/docs-ui/docs/ship/ship-to-production.md +64 -0
  543. package/dist/serve/docs-ui/docs/ship/test-in-node/index.html +74 -0
  544. package/dist/serve/docs-ui/docs/ship/test-in-node.md +94 -0
  545. package/dist/serve/docs-ui/docs/storage-compat/index.html +532 -0
  546. package/dist/serve/docs-ui/docs/storage-compat.md +577 -0
  547. package/dist/serve/docs-ui/docs/trust/how-we-know-it-matches-firebase/index.html +131 -0
  548. package/dist/serve/docs-ui/docs/trust/how-we-know-it-matches-firebase.md +155 -0
  549. package/dist/serve/docs-ui/docs/trust/versioning-and-compatibility/index.html +13 -0
  550. package/dist/serve/docs-ui/docs/trust/versioning-and-compatibility.md +21 -0
  551. package/dist/serve/docs-ui/index.html +1 -0
  552. package/dist/serve/docs-ui/llms.txt +123 -0
  553. package/dist/serve/entries/ai.d.ts +4 -0
  554. package/dist/serve/entries/ai.d.ts.map +1 -0
  555. package/dist/serve/entries/ai.js +184 -0
  556. package/dist/serve/entries/ai.js.map +1 -0
  557. package/dist/serve/entries/app-backend.d.ts +2 -0
  558. package/dist/serve/entries/app-backend.d.ts.map +1 -0
  559. package/dist/serve/entries/app-backend.js +4 -0
  560. package/dist/serve/entries/app-backend.js.map +1 -0
  561. package/dist/serve/entries/app-client.d.ts +5 -0
  562. package/dist/serve/entries/app-client.d.ts.map +1 -0
  563. package/dist/serve/entries/app-client.js +23 -0
  564. package/dist/serve/entries/app-client.js.map +1 -0
  565. package/dist/serve/entries/app-session-store.d.ts +14 -0
  566. package/dist/serve/entries/app-session-store.d.ts.map +1 -0
  567. package/dist/serve/entries/app-session-store.js +37 -0
  568. package/dist/serve/entries/app-session-store.js.map +1 -0
  569. package/dist/serve/entries/app.d.ts +2 -0
  570. package/dist/serve/entries/app.d.ts.map +1 -0
  571. package/dist/serve/entries/app.js +10 -0
  572. package/dist/serve/entries/app.js.map +1 -0
  573. package/dist/serve/entries/auth-helper-core.d.ts +52 -0
  574. package/dist/serve/entries/auth-helper-core.d.ts.map +1 -0
  575. package/dist/serve/entries/auth-helper-core.js +118 -0
  576. package/dist/serve/entries/auth-helper-core.js.map +1 -0
  577. package/dist/serve/entries/auth-helper-dom.d.ts +14 -0
  578. package/dist/serve/entries/auth-helper-dom.d.ts.map +1 -0
  579. package/dist/serve/entries/auth-helper-dom.js +116 -0
  580. package/dist/serve/entries/auth-helper-dom.js.map +1 -0
  581. package/dist/serve/entries/auth-helper-runtime.d.ts +5 -0
  582. package/dist/serve/entries/auth-helper-runtime.d.ts.map +1 -0
  583. package/dist/serve/entries/auth-helper-runtime.js +11 -0
  584. package/dist/serve/entries/auth-helper-runtime.js.map +1 -0
  585. package/dist/serve/entries/auth.d.ts +77 -0
  586. package/dist/serve/entries/auth.d.ts.map +1 -0
  587. package/dist/serve/entries/auth.js +201 -0
  588. package/dist/serve/entries/auth.js.map +1 -0
  589. package/dist/serve/entries/bridge-url.d.ts +25 -0
  590. package/dist/serve/entries/bridge-url.d.ts.map +1 -0
  591. package/dist/serve/entries/bridge-url.js +30 -0
  592. package/dist/serve/entries/bridge-url.js.map +1 -0
  593. package/dist/serve/entries/database.d.ts +46 -0
  594. package/dist/serve/entries/database.d.ts.map +1 -0
  595. package/dist/serve/entries/database.js +80 -0
  596. package/dist/serve/entries/database.js.map +1 -0
  597. package/dist/serve/entries/firestore.d.ts +104 -0
  598. package/dist/serve/entries/firestore.d.ts.map +1 -0
  599. package/dist/serve/entries/firestore.js +202 -0
  600. package/dist/serve/entries/firestore.js.map +1 -0
  601. package/dist/serve/entries/init.d.ts +2 -0
  602. package/dist/serve/entries/init.d.ts.map +1 -0
  603. package/dist/serve/entries/init.js +40 -0
  604. package/dist/serve/entries/init.js.map +1 -0
  605. package/dist/serve/entries/keepalive.d.ts +20 -0
  606. package/dist/serve/entries/keepalive.d.ts.map +1 -0
  607. package/dist/serve/entries/keepalive.js +38 -0
  608. package/dist/serve/entries/keepalive.js.map +1 -0
  609. package/dist/serve/entries/messaging-sw.d.ts +10 -0
  610. package/dist/serve/entries/messaging-sw.d.ts.map +1 -0
  611. package/dist/serve/entries/messaging-sw.js +36 -0
  612. package/dist/serve/entries/messaging-sw.js.map +1 -0
  613. package/dist/serve/entries/messaging.d.ts +11 -0
  614. package/dist/serve/entries/messaging.d.ts.map +1 -0
  615. package/dist/serve/entries/messaging.js +53 -0
  616. package/dist/serve/entries/messaging.js.map +1 -0
  617. package/dist/serve/entries/runtime.d.ts +46 -0
  618. package/dist/serve/entries/runtime.d.ts.map +1 -0
  619. package/dist/serve/entries/runtime.js +435 -0
  620. package/dist/serve/entries/runtime.js.map +1 -0
  621. package/dist/serve/entries/session-store.d.ts +48 -0
  622. package/dist/serve/entries/session-store.d.ts.map +1 -0
  623. package/dist/serve/entries/session-store.js +82 -0
  624. package/dist/serve/entries/session-store.js.map +1 -0
  625. package/dist/serve/entries/storage.d.ts +25 -0
  626. package/dist/serve/entries/storage.d.ts.map +1 -0
  627. package/dist/serve/entries/storage.js +61 -0
  628. package/dist/serve/entries/storage.js.map +1 -0
  629. package/dist/serve/entries/tab-sync-wiring.d.ts +88 -0
  630. package/dist/serve/entries/tab-sync-wiring.d.ts.map +1 -0
  631. package/dist/serve/entries/tab-sync-wiring.js +217 -0
  632. package/dist/serve/entries/tab-sync-wiring.js.map +1 -0
  633. package/dist/serve/entries/worker-runtime.d.ts +10 -0
  634. package/dist/serve/entries/worker-runtime.d.ts.map +1 -0
  635. package/dist/serve/entries/worker-runtime.js +59 -0
  636. package/dist/serve/entries/worker-runtime.js.map +1 -0
  637. package/dist/serve/init-payload.d.ts +21 -0
  638. package/dist/serve/init-payload.d.ts.map +1 -0
  639. package/dist/serve/init-payload.js +2 -0
  640. package/dist/serve/init-payload.js.map +1 -0
  641. package/dist/serve/namespace.d.ts +73 -0
  642. package/dist/serve/namespace.d.ts.map +1 -0
  643. package/dist/serve/namespace.js +470 -0
  644. package/dist/serve/namespace.js.map +1 -0
  645. package/dist/serve/open-browser.d.ts +23 -0
  646. package/dist/serve/open-browser.d.ts.map +1 -0
  647. package/dist/serve/open-browser.js +58 -0
  648. package/dist/serve/open-browser.js.map +1 -0
  649. package/dist/serve/rules.d.ts +77 -0
  650. package/dist/serve/rules.d.ts.map +1 -0
  651. package/dist/serve/rules.js +202 -0
  652. package/dist/serve/rules.js.map +1 -0
  653. package/dist/serve/sandbox-marker.d.ts +9 -0
  654. package/dist/serve/sandbox-marker.d.ts.map +1 -0
  655. package/dist/serve/sandbox-marker.js +31 -0
  656. package/dist/serve/sandbox-marker.js.map +1 -0
  657. package/dist/serve/server.d.ts +135 -0
  658. package/dist/serve/server.d.ts.map +1 -0
  659. package/dist/serve/server.js +328 -0
  660. package/dist/serve/server.js.map +1 -0
  661. package/dist/serve/standalone-assets.d.ts +67 -0
  662. package/dist/serve/standalone-assets.d.ts.map +1 -0
  663. package/dist/serve/standalone-assets.js +134 -0
  664. package/dist/serve/standalone-assets.js.map +1 -0
  665. package/dist/serve/state-store.d.ts +45 -0
  666. package/dist/serve/state-store.d.ts.map +1 -0
  667. package/dist/serve/state-store.js +120 -0
  668. package/dist/serve/state-store.js.map +1 -0
  669. package/dist/serve/studio/disk-project-store.d.ts +9 -0
  670. package/dist/serve/studio/disk-project-store.d.ts.map +1 -0
  671. package/dist/serve/studio/disk-project-store.js +173 -0
  672. package/dist/serve/studio/disk-project-store.js.map +1 -0
  673. package/dist/serve/studio/disk-workspace.d.ts +14 -0
  674. package/dist/serve/studio/disk-workspace.d.ts.map +1 -0
  675. package/dist/serve/studio/disk-workspace.js +152 -0
  676. package/dist/serve/studio/disk-workspace.js.map +1 -0
  677. package/dist/serve/studio/index.d.ts +10 -0
  678. package/dist/serve/studio/index.d.ts.map +1 -0
  679. package/dist/serve/studio/index.js +9 -0
  680. package/dist/serve/studio/index.js.map +1 -0
  681. package/dist/serve/studio/routes.d.ts +40 -0
  682. package/dist/serve/studio/routes.d.ts.map +1 -0
  683. package/dist/serve/studio/routes.js +182 -0
  684. package/dist/serve/studio/routes.js.map +1 -0
  685. package/dist/serve/studio/store-types.d.ts +45 -0
  686. package/dist/serve/studio/store-types.d.ts.map +1 -0
  687. package/dist/serve/studio/store-types.js +11 -0
  688. package/dist/serve/studio/store-types.js.map +1 -0
  689. package/dist/serve/studio-ui/assets/RulesCodeEditor-CXdSLKhO.js +23 -0
  690. package/dist/serve/studio-ui/assets/index-BlSGru_r.css +1 -0
  691. package/dist/serve/studio-ui/assets/index-BvtQIpGn.js +1211 -0
  692. package/dist/serve/studio-ui/assets/seed-3DMedLL3.js +2 -0
  693. package/dist/serve/studio-ui/index.html +32 -0
  694. package/dist/serve/studio-ui/pyric-logo.svg +76 -0
  695. package/dist/serve/vite-plugin.d.ts +57 -0
  696. package/dist/serve/vite-plugin.d.ts.map +1 -0
  697. package/dist/serve/vite-plugin.js +664 -0
  698. package/dist/serve/vite-plugin.js.map +1 -0
  699. package/dist/serve/worker/client/admin-firestore.d.ts +18 -0
  700. package/dist/serve/worker/client/admin-firestore.d.ts.map +1 -0
  701. package/dist/serve/worker/client/admin-firestore.js +26 -0
  702. package/dist/serve/worker/client/admin-firestore.js.map +1 -0
  703. package/dist/serve/worker/client/ai.d.ts +31 -0
  704. package/dist/serve/worker/client/ai.d.ts.map +1 -0
  705. package/dist/serve/worker/client/ai.js +89 -0
  706. package/dist/serve/worker/client/ai.js.map +1 -0
  707. package/dist/serve/worker/client/auth.d.ts +168 -0
  708. package/dist/serve/worker/client/auth.d.ts.map +1 -0
  709. package/dist/serve/worker/client/auth.js +322 -0
  710. package/dist/serve/worker/client/auth.js.map +1 -0
  711. package/dist/serve/worker/client/connection.d.ts +80 -0
  712. package/dist/serve/worker/client/connection.d.ts.map +1 -0
  713. package/dist/serve/worker/client/connection.js +148 -0
  714. package/dist/serve/worker/client/connection.js.map +1 -0
  715. package/dist/serve/worker/client/core.d.ts +109 -0
  716. package/dist/serve/worker/client/core.d.ts.map +1 -0
  717. package/dist/serve/worker/client/core.js +248 -0
  718. package/dist/serve/worker/client/core.js.map +1 -0
  719. package/dist/serve/worker/client/disconnect.d.ts +7 -0
  720. package/dist/serve/worker/client/disconnect.d.ts.map +1 -0
  721. package/dist/serve/worker/client/disconnect.js +26 -0
  722. package/dist/serve/worker/client/disconnect.js.map +1 -0
  723. package/dist/serve/worker/client/firestore-reads.d.ts +49 -0
  724. package/dist/serve/worker/client/firestore-reads.d.ts.map +1 -0
  725. package/dist/serve/worker/client/firestore-reads.js +139 -0
  726. package/dist/serve/worker/client/firestore-reads.js.map +1 -0
  727. package/dist/serve/worker/client/firestore-refs.d.ts +54 -0
  728. package/dist/serve/worker/client/firestore-refs.d.ts.map +1 -0
  729. package/dist/serve/worker/client/firestore-refs.js +167 -0
  730. package/dist/serve/worker/client/firestore-refs.js.map +1 -0
  731. package/dist/serve/worker/client/firestore-writes.d.ts +70 -0
  732. package/dist/serve/worker/client/firestore-writes.d.ts.map +1 -0
  733. package/dist/serve/worker/client/firestore-writes.js +169 -0
  734. package/dist/serve/worker/client/firestore-writes.js.map +1 -0
  735. package/dist/serve/worker/client/handles.d.ts +73 -0
  736. package/dist/serve/worker/client/handles.d.ts.map +1 -0
  737. package/dist/serve/worker/client/handles.js +4 -0
  738. package/dist/serve/worker/client/handles.js.map +1 -0
  739. package/dist/serve/worker/client/messaging.d.ts +16 -0
  740. package/dist/serve/worker/client/messaging.d.ts.map +1 -0
  741. package/dist/serve/worker/client/messaging.js +60 -0
  742. package/dist/serve/worker/client/messaging.js.map +1 -0
  743. package/dist/serve/worker/client/presence.d.ts +43 -0
  744. package/dist/serve/worker/client/presence.d.ts.map +1 -0
  745. package/dist/serve/worker/client/presence.js +132 -0
  746. package/dist/serve/worker/client/presence.js.map +1 -0
  747. package/dist/serve/worker/client/rtdb.d.ts +36 -0
  748. package/dist/serve/worker/client/rtdb.d.ts.map +1 -0
  749. package/dist/serve/worker/client/rtdb.js +241 -0
  750. package/dist/serve/worker/client/rtdb.js.map +1 -0
  751. package/dist/serve/worker/client/rules.d.ts +24 -0
  752. package/dist/serve/worker/client/rules.d.ts.map +1 -0
  753. package/dist/serve/worker/client/rules.js +44 -0
  754. package/dist/serve/worker/client/rules.js.map +1 -0
  755. package/dist/serve/worker/client/service-worker-connection.d.ts +3 -0
  756. package/dist/serve/worker/client/service-worker-connection.d.ts.map +1 -0
  757. package/dist/serve/worker/client/service-worker-connection.js +53 -0
  758. package/dist/serve/worker/client/service-worker-connection.js.map +1 -0
  759. package/dist/serve/worker/client/snapshots.d.ts +32 -0
  760. package/dist/serve/worker/client/snapshots.d.ts.map +1 -0
  761. package/dist/serve/worker/client/snapshots.js +46 -0
  762. package/dist/serve/worker/client/snapshots.js.map +1 -0
  763. package/dist/serve/worker/client/storage.d.ts +64 -0
  764. package/dist/serve/worker/client/storage.d.ts.map +1 -0
  765. package/dist/serve/worker/client/storage.js +125 -0
  766. package/dist/serve/worker/client/storage.js.map +1 -0
  767. package/dist/serve/worker/client/studio.d.ts +32 -0
  768. package/dist/serve/worker/client/studio.d.ts.map +1 -0
  769. package/dist/serve/worker/client/studio.js +61 -0
  770. package/dist/serve/worker/client/studio.js.map +1 -0
  771. package/dist/serve/worker/client.d.ts +43 -0
  772. package/dist/serve/worker/client.d.ts.map +1 -0
  773. package/dist/serve/worker/client.js +44 -0
  774. package/dist/serve/worker/client.js.map +1 -0
  775. package/dist/serve/worker/entry.d.ts +40 -0
  776. package/dist/serve/worker/entry.d.ts.map +1 -0
  777. package/dist/serve/worker/entry.js +144 -0
  778. package/dist/serve/worker/entry.js.map +1 -0
  779. package/dist/serve/worker/host/admin-firestore.d.ts +17 -0
  780. package/dist/serve/worker/host/admin-firestore.d.ts.map +1 -0
  781. package/dist/serve/worker/host/admin-firestore.js +92 -0
  782. package/dist/serve/worker/host/admin-firestore.js.map +1 -0
  783. package/dist/serve/worker/host/connection.d.ts +40 -0
  784. package/dist/serve/worker/host/connection.d.ts.map +1 -0
  785. package/dist/serve/worker/host/connection.js +153 -0
  786. package/dist/serve/worker/host/connection.js.map +1 -0
  787. package/dist/serve/worker/host/core.d.ts +159 -0
  788. package/dist/serve/worker/host/core.d.ts.map +1 -0
  789. package/dist/serve/worker/host/core.js +296 -0
  790. package/dist/serve/worker/host/core.js.map +1 -0
  791. package/dist/serve/worker/host/dispatch.d.ts +34 -0
  792. package/dist/serve/worker/host/dispatch.d.ts.map +1 -0
  793. package/dist/serve/worker/host/dispatch.js +267 -0
  794. package/dist/serve/worker/host/dispatch.js.map +1 -0
  795. package/dist/serve/worker/host/firestore-reads.d.ts +17 -0
  796. package/dist/serve/worker/host/firestore-reads.d.ts.map +1 -0
  797. package/dist/serve/worker/host/firestore-reads.js +108 -0
  798. package/dist/serve/worker/host/firestore-reads.js.map +1 -0
  799. package/dist/serve/worker/host/firestore-writes.d.ts +37 -0
  800. package/dist/serve/worker/host/firestore-writes.d.ts.map +1 -0
  801. package/dist/serve/worker/host/firestore-writes.js +409 -0
  802. package/dist/serve/worker/host/firestore-writes.js.map +1 -0
  803. package/dist/serve/worker/host/presence.d.ts +38 -0
  804. package/dist/serve/worker/host/presence.d.ts.map +1 -0
  805. package/dist/serve/worker/host/presence.js +280 -0
  806. package/dist/serve/worker/host/presence.js.map +1 -0
  807. package/dist/serve/worker/host/rtdb.d.ts +18 -0
  808. package/dist/serve/worker/host/rtdb.d.ts.map +1 -0
  809. package/dist/serve/worker/host/rtdb.js +128 -0
  810. package/dist/serve/worker/host/rtdb.js.map +1 -0
  811. package/dist/serve/worker/host/rules.d.ts +17 -0
  812. package/dist/serve/worker/host/rules.d.ts.map +1 -0
  813. package/dist/serve/worker/host/rules.js +118 -0
  814. package/dist/serve/worker/host/rules.js.map +1 -0
  815. package/dist/serve/worker/host/storage.d.ts +19 -0
  816. package/dist/serve/worker/host/storage.d.ts.map +1 -0
  817. package/dist/serve/worker/host/storage.js +260 -0
  818. package/dist/serve/worker/host/storage.js.map +1 -0
  819. package/dist/serve/worker/host/studio.d.ts +13 -0
  820. package/dist/serve/worker/host/studio.d.ts.map +1 -0
  821. package/dist/serve/worker/host/studio.js +30 -0
  822. package/dist/serve/worker/host/studio.js.map +1 -0
  823. package/dist/serve/worker/host/subscriptions.d.ts +21 -0
  824. package/dist/serve/worker/host/subscriptions.d.ts.map +1 -0
  825. package/dist/serve/worker/host/subscriptions.js +162 -0
  826. package/dist/serve/worker/host/subscriptions.js.map +1 -0
  827. package/dist/serve/worker/host-ai.d.ts +59 -0
  828. package/dist/serve/worker/host-ai.d.ts.map +1 -0
  829. package/dist/serve/worker/host-ai.js +158 -0
  830. package/dist/serve/worker/host-ai.js.map +1 -0
  831. package/dist/serve/worker/host-auth.d.ts +47 -0
  832. package/dist/serve/worker/host-auth.d.ts.map +1 -0
  833. package/dist/serve/worker/host-auth.js +464 -0
  834. package/dist/serve/worker/host-auth.js.map +1 -0
  835. package/dist/serve/worker/host-context.d.ts +220 -0
  836. package/dist/serve/worker/host-context.d.ts.map +1 -0
  837. package/dist/serve/worker/host-context.js +45 -0
  838. package/dist/serve/worker/host-context.js.map +1 -0
  839. package/dist/serve/worker/host-events.d.ts +21 -0
  840. package/dist/serve/worker/host-events.d.ts.map +1 -0
  841. package/dist/serve/worker/host-events.js +87 -0
  842. package/dist/serve/worker/host-events.js.map +1 -0
  843. package/dist/serve/worker/host-messaging.d.ts +60 -0
  844. package/dist/serve/worker/host-messaging.d.ts.map +1 -0
  845. package/dist/serve/worker/host-messaging.js +226 -0
  846. package/dist/serve/worker/host-messaging.js.map +1 -0
  847. package/dist/serve/worker/host.d.ts +36 -0
  848. package/dist/serve/worker/host.d.ts.map +1 -0
  849. package/dist/serve/worker/host.js +39 -0
  850. package/dist/serve/worker/host.js.map +1 -0
  851. package/dist/serve/worker/index.d.ts +22 -0
  852. package/dist/serve/worker/index.d.ts.map +1 -0
  853. package/dist/serve/worker/index.js +61 -0
  854. package/dist/serve/worker/index.js.map +1 -0
  855. package/dist/serve/worker/presence-timing.d.ts +14 -0
  856. package/dist/serve/worker/presence-timing.d.ts.map +1 -0
  857. package/dist/serve/worker/presence-timing.js +14 -0
  858. package/dist/serve/worker/presence-timing.js.map +1 -0
  859. package/dist/serve/worker/protocol.d.ts +1150 -0
  860. package/dist/serve/worker/protocol.d.ts.map +1 -0
  861. package/dist/serve/worker/protocol.js +228 -0
  862. package/dist/serve/worker/protocol.js.map +1 -0
  863. package/dist/serve/worker/serve-init.d.ts +201 -0
  864. package/dist/serve/worker/serve-init.d.ts.map +1 -0
  865. package/dist/serve/worker/serve-init.js +579 -0
  866. package/dist/serve/worker/serve-init.js.map +1 -0
  867. package/dist/serve/worker/service-worker-channel.d.ts +23 -0
  868. package/dist/serve/worker/service-worker-channel.d.ts.map +1 -0
  869. package/dist/serve/worker/service-worker-channel.js +9 -0
  870. package/dist/serve/worker/service-worker-channel.js.map +1 -0
  871. package/dist/serve/worker/service-worker-relay.d.ts +22 -0
  872. package/dist/serve/worker/service-worker-relay.d.ts.map +1 -0
  873. package/dist/serve/worker/service-worker-relay.js +63 -0
  874. package/dist/serve/worker/service-worker-relay.js.map +1 -0
  875. package/dist/serve/writer-lock.d.ts +32 -0
  876. package/dist/serve/writer-lock.d.ts.map +1 -0
  877. package/dist/serve/writer-lock.js +43 -0
  878. package/dist/serve/writer-lock.js.map +1 -0
  879. package/dist/verify/cases.d.ts +37 -0
  880. package/dist/verify/cases.d.ts.map +1 -0
  881. package/dist/verify/cases.js +173 -0
  882. package/dist/verify/cases.js.map +1 -0
  883. package/dist/verify/fixture.d.ts +100 -0
  884. package/dist/verify/fixture.d.ts.map +1 -0
  885. package/dist/verify/fixture.js +156 -0
  886. package/dist/verify/fixture.js.map +1 -0
  887. package/dist/verify/index.d.ts +102 -0
  888. package/dist/verify/index.d.ts.map +1 -0
  889. package/dist/verify/index.js +318 -0
  890. package/dist/verify/index.js.map +1 -0
  891. package/dist/verify/tools.d.ts +7 -0
  892. package/dist/verify/tools.d.ts.map +1 -0
  893. package/dist/verify/tools.js +83 -0
  894. package/dist/verify/tools.js.map +1 -0
  895. package/dist/version/compat-target.d.ts +18 -0
  896. package/dist/version/compat-target.d.ts.map +1 -0
  897. package/dist/version/compat-target.js +18 -0
  898. package/dist/version/compat-target.js.map +1 -0
  899. package/dist/vite.d.ts +12 -0
  900. package/dist/vite.d.ts.map +1 -0
  901. package/dist/vite.js +16 -0
  902. package/dist/vite.js.map +1 -0
  903. package/package.json +144 -0
@@ -0,0 +1,664 @@
1
+ /**
2
+ * `@pyric/cli/vite` — the firebase→pyric-sandbox swap as a Vite plugin.
3
+ *
4
+ * The serve analog for SOURCE-driven apps: instead of `vite build && pyric dev
5
+ * dist`, a team keeps `vite dev` (HMR, source maps) with the in-process sandbox
6
+ * standing in for Firebase. The app's `firebase/*` imports are UNCHANGED — the
7
+ * plugin swaps them at the module-resolution layer (`resolveId`), the same way
8
+ * `pyric dev` swaps via a runtime import map. (Design: `plans/pyric-vite-plugin.md`.)
9
+ *
10
+ * Two flavors, one `apply` function. Under `vite dev` the swap is ALWAYS on.
11
+ * For `vite build` the swap is MODE-gated: a plain `vite build` (mode
12
+ * `production`) ships the real `firebase` package — the swap never reaches the
13
+ * prod artifact — while `vite build --mode development` (any NON-production
14
+ * mode) produces a SANDBOX build that bundles pyric's in-page adapters instead
15
+ * of the real SDK: self-contained, meant to be previewed under `pyric dev`, and
16
+ * stamped with the sandbox-build marker so it can never be deployed (`pyric
17
+ * deploy hosting` refuses it). `pyricSandbox({ swapInBuild })` forces the build
18
+ * behavior on/off regardless of mode. See `sandbox-marker.ts`.
19
+ *
20
+ * This is a thin adapter over serve's proven machinery. It REUSES, not reimplements:
21
+ * - the node-builtin shims — `NODE_BUILTIN_SHIMS`;
22
+ * - the swap targets — `defaultSdkEntries()` (the `serve/entries/*` wrappers,
23
+ * compiled-dist preferred, src fallback);
24
+ * - the `/__pyric/*` namespace — `createPyricNamespace` mounted verbatim behind
25
+ * a connect-middleware adapter;
26
+ * - rules load + prepare — `loadProjectRules` / `prepareRulesSource`;
27
+ * - the SharedWorker host — `bundleWorker` served at `/__pyric/sdk/worker.js`;
28
+ * - durable stores — `createStateStore` (persist) / `createCaptureStore`.
29
+ *
30
+ * Scope = M1 (swap + rules) + M2 (SharedWorker multi-tab + persist/capture/seed)
31
+ * + M3 (the MCP bridge fold — `{ bridge }`). M3 reuses `createBridgeMount` (the
32
+ * proven serve-flavored bridge behind `pyric dev --bridge`), composing it into
33
+ * the same `/__pyric` middleware; bridge mode forces the in-page sandbox path so
34
+ * the agent and the app share one backend.
35
+ *
36
+ * Serving `worker.js` flips `runtime.ts` to the worker path (one backend across
37
+ * tabs, IndexedDB-durable); on that path the WORKER owns persist/capture/seed via
38
+ * the same `/__pyric/*` routes. If the worker bundle fails, the plugin falls back
39
+ * to the in-page sandbox (single-tab, ephemeral).
40
+ */
41
+ import { readFile } from 'node:fs/promises';
42
+ import { existsSync, readFileSync, rmSync, writeFileSync, mkdirSync } from 'node:fs';
43
+ import { homedir } from 'node:os';
44
+ import path from 'node:path';
45
+ import { SDK_MODULES, defaultSdkEntries, resolveStudioUiDir, pyricPackageRoot, bundleWorker, workerSourceHash, NODE_BUILTIN_RE, NODE_BUILTIN_SHIMS, } from './bundler.js';
46
+ import { createEventHub, createPyricNamespace } from './namespace.js';
47
+ import { diskWorkspace, diskProjectStore } from './studio/index.js';
48
+ import { createBridgeMount } from './bridge-mount.js';
49
+ import { loadProjectDatabaseRules, loadProjectRules, loadProjectStorageRules, prepareRulesSource, rulesHashOf, } from './rules.js';
50
+ import { createStateStore, STATE_FILE_VERSION } from './state-store.js';
51
+ import { createCaptureStore } from './capture-store.js';
52
+ import { isAllowedHost } from './server.js';
53
+ import { SANDBOX_BUILD_META } from './sandbox-marker.js';
54
+ import { readFirebaseJson } from '../cli/firebase-json.js';
55
+ /**
56
+ * Whether a `vite build` should run the firebase→pyric swap (produce a SANDBOX
57
+ * build). MODE-based with a plugin-config override:
58
+ * - `options.swapInBuild` wins outright when set (force on/off);
59
+ * - otherwise swap for any NON-production mode. A plain `vite build` (mode
60
+ * `production`) ships real firebase; `vite build --mode development` (or any
61
+ * custom non-prod mode) is a sandbox build.
62
+ * `vite dev` is handled separately in `apply` (always on).
63
+ */
64
+ function swapsInBuild(env, swapInBuild) {
65
+ if (swapInBuild !== undefined)
66
+ return swapInBuild;
67
+ return env.mode !== 'production';
68
+ }
69
+ /** Any `firebase/<sub>` specifier. */
70
+ const FB_ANY = /^firebase\/([a-z-]+(?:\/[a-z-]+)*)$/;
71
+ /** The firebase subpaths with swap entries. */
72
+ const SERVED = new Set(SDK_MODULES.map((specifier) => specifier.slice('firebase/'.length)));
73
+ const entryKey = (subpath) => subpath.replaceAll('/', '-');
74
+ const NODE_SHIM_PREFIX = '\0pyric:node-shim:';
75
+ /** Walk up from a file to the nearest directory containing a package.json. */
76
+ function packageRootOf(file) {
77
+ let dir = path.dirname(file);
78
+ while (dir !== path.dirname(dir) && !existsSync(path.join(dir, 'package.json'))) {
79
+ dir = path.dirname(dir);
80
+ }
81
+ return dir;
82
+ }
83
+ /**
84
+ * The dev-only Vite plugin. Add to `vite.config`:
85
+ *
86
+ * import { pyricSandbox } from '@pyric/cli/vite';
87
+ * export default defineConfig({ plugins: [pyricSandbox()] });
88
+ */
89
+ export function pyricSandbox(options = {}) {
90
+ // Resolved once. `defaultSdkEntries()` prefers compiled dist `.js` and falls
91
+ // back to source `.ts` in the workspace.
92
+ const entries = defaultSdkEntries(); // { app, auth, firestore, init } → abs paths
93
+ const pyricRoot = pyricPackageRoot();
94
+ // The @pyric/cli package root — covers the served entries AND their siblings
95
+ // (`worker/client.js`, the bridge client) that the entries statically import.
96
+ const cliRoot = packageRootOf(entries.init);
97
+ // section 8 refinement: a firebase import is "pyric-internal" iff its importer lives
98
+ // under the resolved pyric package root — keyed on the root, not a `/pyric/`
99
+ // substring (which a user project path could false-positive).
100
+ const isPyricImporter = (importer) => {
101
+ if (!importer)
102
+ return false;
103
+ const f = importer.split('?')[0];
104
+ return f === pyricRoot || f.startsWith(pyricRoot + path.sep);
105
+ };
106
+ // Node builtins are reached only from OUR code (pyric internals + the served
107
+ // entries) — shim those, but NEVER hijack a user app or third-party library's
108
+ // own `fs`/`path`/`url` (which Vite, or the user's polyfill plugin, should
109
+ // resolve). The firebase branch stays scoped to pyric; this is the wider "ours".
110
+ const isOurCode = (importer) => {
111
+ if (!importer)
112
+ return false;
113
+ if (isPyricImporter(importer))
114
+ return true;
115
+ const f = importer.split('?')[0];
116
+ return f === cliRoot || f.startsWith(cliRoot + path.sep);
117
+ };
118
+ const shimFor = (spec) => NODE_BUILTIN_SHIMS[spec.replace(/^node:/, '')];
119
+ // The esbuild mirror for Vite's dep optimizer — REQUIRED so a node_modules
120
+ // library's `firebase/*` swaps too (the optimizer's esbuild pass bypasses the
121
+ // Rollup-pipeline resolveId below and would otherwise pre-bake real firebase).
122
+ const esbuildMirror = {
123
+ name: 'pyric-sandbox-optimizer',
124
+ setup(build) {
125
+ build.onResolve({ filter: FB_ANY }, (args) => {
126
+ const sub = FB_ANY.exec(args.path)[1];
127
+ if (SERVED.has(sub))
128
+ return { path: entries[entryKey(sub)] };
129
+ return null; // non-served firebase from a lib → real firebase
130
+ });
131
+ build.onResolve({ filter: NODE_BUILTIN_RE }, (args) => {
132
+ if (!isOurCode(args.importer))
133
+ return null; // user/lib node builtins → Vite/their polyfill
134
+ return { path: args.path.replace(/^node:/, ''), namespace: 'pyric-node-shim' };
135
+ });
136
+ build.onLoad({ filter: /.*/, namespace: 'pyric-node-shim' }, (args) => ({
137
+ contents: NODE_BUILTIN_SHIMS[args.path],
138
+ loader: 'js',
139
+ }));
140
+ },
141
+ };
142
+ // Live rules box — the watcher swaps it; the init payload always serves the
143
+ // current version.
144
+ const live = {
145
+ rules: null,
146
+ rulesHash: null,
147
+ databaseRules: null,
148
+ databaseRulesHash: null,
149
+ databaseUrl: null,
150
+ storageRules: null,
151
+ storageRulesHash: null,
152
+ };
153
+ // M2: the SharedWorker bundle's content hash (sync) — stamped into the page so
154
+ // a still-running OLD worker is detected as stale. `workerReady` flips true once
155
+ // `bundleWorker` succeeds in configureServer; until then (or on bundle failure)
156
+ // the page is forced onto the in-page sandbox path. transformIndexHtml reads it.
157
+ const workerVersion = workerSourceHash();
158
+ let workerReady = false;
159
+ // Set by the `config` hook. When the plugin runs under `vite build` at all it
160
+ // is a SANDBOX build (the `apply` gate below only lets build through under the
161
+ // sandbox trigger), so `command === 'build'` is sufficient to know we are
162
+ // producing marker-stamped, non-production output.
163
+ let sandboxBuild = false;
164
+ // Sandbox build: the serve init entry (runtime bootstrap + the ServeAuthHelper
165
+ // popup picker) is emitted as its OWN chunk and script-tagged into index.html.
166
+ // Rollup dedupes the shared runtime module between this chunk and the app
167
+ // chunk (both import the same absolute file), so the page runs exactly ONE
168
+ // sandbox runtime — unlike serve-time injection of /__pyric/sdk/init.js,
169
+ // which is a separately-bundled second runtime copy (the double-init bug:
170
+ // two banners, two bridge registrations). `pyric dev` sees the marker and
171
+ // skips its injection for these pages (see injectServeTags).
172
+ let initChunkRef;
173
+ let initChunkFile;
174
+ // M3 bridge fold: normalize `bridge` once (true ⇒ `{}`, falsy ⇒ null). When
175
+ // on, the MCP mount is composed into the /__pyric middleware (createBridgeMount,
176
+ // shared with `pyric dev --bridge`) AND the page is forced onto the in-page
177
+ // sandbox path — the bridge peer is the in-page sandbox, never the SharedWorker,
178
+ // so multi-tab is disabled under bridge to keep agent + app on one backend.
179
+ const bridgeOpts = options.bridge === true ? {} : options.bridge || null;
180
+ return {
181
+ name: 'pyric:sandbox',
182
+ // Active for `vite dev` ALWAYS, and for `vite build` only when it is a
183
+ // SANDBOX build (any non-`production` mode, or `swapInBuild: true`). A plain
184
+ // `vite build` keeps the real firebase package — the swap never reaches
185
+ // production output. A sandbox build applies the same swap so the output
186
+ // bundles pyric's in-page adapters (self-contained; preview it under
187
+ // `pyric dev`, never deploy it).
188
+ apply(_config, env) {
189
+ if (env.command === 'serve')
190
+ return true;
191
+ return swapsInBuild(env, options.swapInBuild);
192
+ },
193
+ enforce: 'pre',
194
+ config(_config, env) {
195
+ sandboxBuild = env.command === 'build';
196
+ // Cast: the `esbuild` package's `Plugin` type skews slightly from Vite's
197
+ // bundled esbuild types (benign — the Plugin shape is stable across the
198
+ // versions in range).
199
+ return {
200
+ optimizeDeps: {
201
+ // Keep firebase out of the optimizer's pre-bake; the resolver swaps it
202
+ // per-importer at request time.
203
+ exclude: [...SDK_MODULES],
204
+ // The excluded SDK is served as ESM straight from dist, so Vite never
205
+ // scans it for dependencies. js-md5 / js-sha256 are CJS-only (no ESM
206
+ // named exports); without a forced pre-bundle the browser gets the raw
207
+ // UMD source and `import { md5 }` throws a SyntaxError. Force-including
208
+ // them gives the dist imports the interop-wrapped optimized copies.
209
+ include: ['js-md5', 'js-sha256'],
210
+ esbuildOptions: { plugins: [esbuildMirror] },
211
+ },
212
+ // Sandbox build only: the swapped-in runtime chunk uses TOP-LEVEL AWAIT
213
+ // (it deploys rules before app code runs — load-bearing, see
214
+ // entries/runtime.ts). Vite's default build target predates TLA and the
215
+ // esbuild transpile would fail. A sandbox build is a throwaway preview
216
+ // served under `pyric dev` (modern browser), so pin an ESNext target
217
+ // that keeps TLA. A plain production `vite build` never runs this plugin,
218
+ // so the user's own target is untouched there.
219
+ ...(sandboxBuild ? { build: { target: 'esnext' } } : {}),
220
+ };
221
+ },
222
+ configResolved(resolved) {
223
+ // AUGMENT (don't replace) the fs allow-list: pyric dist + the @pyric/cli
224
+ // tree live outside the app root, but setting `server.fs.allow` in config()
225
+ // would clobber Vite's auto-added root/workspace entries and 403 the app's
226
+ // own source. Push the two PACKAGE ROOTS — @pyric/cli' root (not just the
227
+ // entries dir) is needed because the served init entry statically imports
228
+ // siblings (`worker/client.js`, the bridge client) outside entries/.
229
+ const allow = resolved.server?.fs?.allow;
230
+ if (allow) {
231
+ for (const dir of [pyricRoot, cliRoot]) {
232
+ if (!allow.includes(dir))
233
+ allow.push(dir);
234
+ }
235
+ }
236
+ },
237
+ resolveId(source, importer) {
238
+ const fb = FB_ANY.exec(source);
239
+ if (fb) {
240
+ const sub = fb[1];
241
+ if (SERVED.has(sub))
242
+ return entries[entryKey(sub)]; // swap served set for user/lib
243
+ return null; // non-served firebase from user → real firebase
244
+ }
245
+ const node = NODE_BUILTIN_RE.exec(source);
246
+ // Shim node builtins ONLY when reached from our own code — never hijack a
247
+ // user app or library's own fs/path/url (Vite/their polyfill handles those).
248
+ if (node && isOurCode(importer))
249
+ return NODE_SHIM_PREFIX + node[2];
250
+ return null;
251
+ },
252
+ load(id) {
253
+ if (id.startsWith(NODE_SHIM_PREFIX))
254
+ return shimFor(id.slice(NODE_SHIM_PREFIX.length));
255
+ return null;
256
+ },
257
+ async configureServer(server) {
258
+ const cwd = options.root ?? server.config.root;
259
+ // Reproduce serve's rules prelude: firebase.json (optional) → loadProjectRules.
260
+ let fbJson = null;
261
+ try {
262
+ fbJson = await readFirebaseJson(cwd);
263
+ }
264
+ catch {
265
+ /* optional — serve without a firebase.json */
266
+ }
267
+ // Honor an explicit `rules` option by overriding the resolved config.
268
+ const config = options.rules
269
+ ? { ...(fbJson ?? {}), firestore: { ...(fbJson?.firestore ?? {}), rules: options.rules } }
270
+ : fbJson;
271
+ const loaded = await loadProjectRules(cwd, config);
272
+ const loadedDatabase = await loadProjectDatabaseRules(cwd, config);
273
+ const loadedStorage = await loadProjectStorageRules(cwd, config);
274
+ live.rules = loaded.rules;
275
+ live.rulesHash = loaded.rulesHash;
276
+ live.databaseRules = loadedDatabase.rules;
277
+ live.databaseRulesHash = loadedDatabase.rulesHash;
278
+ live.databaseUrl = loadedDatabase.databaseUrl;
279
+ live.storageRules = loadedStorage.rules;
280
+ live.storageRulesHash = loadedStorage.rulesHash;
281
+ // ── M2 durable stores (mirrors serve's startServe orchestration) ──────
282
+ // Capture (default-on): the worker/page pushes its session fixture to
283
+ // /__pyric/capture; the store writes .pyric/last-session.json for `pyric verify`.
284
+ const capture = (options.capture ?? true) ? createCaptureStore(cwd) : undefined;
285
+ // Persist: createStateStore IS the durable sandbox. Load eagerly so a
286
+ // corrupt/mismatched file fails the start (not silently ephemeral).
287
+ const state = options.persist ? createStateStore(cwd) : undefined;
288
+ if (state && options.fresh) {
289
+ for (const p of [state.path, state.backupPath])
290
+ if (existsSync(p))
291
+ rmSync(p);
292
+ server.config.logger.info(' ⓘ [pyric] fresh: discarded the existing state file; re-seeding');
293
+ }
294
+ // Eager load (mirrors serve.ts:158) — parse the file NOW so a corrupt or
295
+ // version-mismatched state file throws StateFileError and FAILS THE START
296
+ // with the actionable inspect-or-delete message. Without this the first
297
+ // parse is deferred into initPayload() at request time, where it throws
298
+ // synchronously AFTER namespace.ts has committed `writeHead(200)`: the
299
+ // client gets a 200 with an empty body, the page/worker swallow the JSON
300
+ // error, and the sandbox silently runs WITHOUT the persisted data + rules.
301
+ // (No-op on first run: load() returns null for a missing file.)
302
+ // configureServer is async, so an uncaught throw aborts the dev start.
303
+ if (state)
304
+ state.load();
305
+ // Seed: a "collection/doc" → fields map, OR a `pyric snapshot` state-file
306
+ // envelope (detected by its `version` key). Ported from serve.ts.
307
+ let seed = null;
308
+ let seedState = null;
309
+ let seedUsers = null;
310
+ if (options.seed) {
311
+ const seedPath = path.resolve(cwd, options.seed);
312
+ let parsed;
313
+ try {
314
+ parsed = JSON.parse(readFileSync(seedPath, 'utf8'));
315
+ }
316
+ catch (e) {
317
+ throw new Error(`@pyric/cli/vite: failed to read seed ${seedPath}: ${e instanceof Error ? e.message : String(e)}`);
318
+ }
319
+ if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {
320
+ throw new Error('@pyric/cli/vite: seed must be a JSON object of "collection/doc" → fields');
321
+ }
322
+ const obj = parsed;
323
+ if (obj.version === STATE_FILE_VERSION && ('firestore' in obj || 'auth' in obj)) {
324
+ const fixture = obj;
325
+ if (state && !state.exists()) {
326
+ // persist first run from a fixture: prime the store, then the normal
327
+ // persist path restores it like any lived state.
328
+ if (fixture.firestore != null)
329
+ state.writeSection('firestore', fixture.firestore);
330
+ if (fixture.auth != null)
331
+ state.writeSection('auth', fixture.auth);
332
+ }
333
+ else if (!state) {
334
+ seedState = fixture.firestore ?? null;
335
+ seedUsers = fixture.auth?.users ?? null;
336
+ }
337
+ // persist + existing state: lived state wins; the fixture is inert.
338
+ }
339
+ else {
340
+ seed = parsed;
341
+ }
342
+ }
343
+ // ── M2 SharedWorker host: bundle it (cached per version) and serve it at
344
+ // /__pyric/sdk/worker.js. This is what flips runtime.ts to the worker path.
345
+ // On bundle failure, fall back to the in-page sandbox (workerReady stays
346
+ // false → transformIndexHtml forces in-page).
347
+ const sdkDir = path.join(homedir(), '.pyric', 'vite-worker', workerVersion);
348
+ try {
349
+ await bundleWorker({ outDir: sdkDir });
350
+ workerReady = true;
351
+ }
352
+ catch (e) {
353
+ server.config.logger.warn(` ⚠ [pyric] SharedWorker bundle failed — using the in-page sandbox (single-tab, ephemeral): ${e instanceof Error ? e.message : String(e)}`);
354
+ }
355
+ // ── M3 MCP bridge (mirrors serve.ts:221–274) ─────────────────────────
356
+ // The mount is long-lived (one bridge per dev session); its MCP transport
357
+ // is rebuilt per request (stateless). Composed into the /__pyric middleware
358
+ // below (handler tier) + the server's WS upgrade. middlewareMode has no
359
+ // httpServer → HTTP routes still work, no WS peer.
360
+ // Guard the WS upgrade with the SAME allow rule Vite's own host check
361
+ // uses (host + allowedHosts, where `true` = opted into all hosts). Vite's
362
+ // upgrade path bypasses connect middleware, so this is the only guard on it.
363
+ const mount = bridgeOpts
364
+ ? createBridgeMount({
365
+ ...bridgeOpts,
366
+ upgradeGuard: {
367
+ boundHost: typeof server.config.server.host === 'string' ? server.config.server.host : 'localhost',
368
+ allowedHosts: server.config.server.allowedHosts === true
369
+ ? true
370
+ : Array.isArray(server.config.server.allowedHosts)
371
+ ? server.config.server.allowedHosts
372
+ : [],
373
+ },
374
+ })
375
+ : null;
376
+ // The /__pyric/* namespace, reused VERBATIM (now with the sdk dir + state +
377
+ // capture routes live).
378
+ const events = createEventHub();
379
+ const initPayload = () => ({
380
+ rules: live.rules,
381
+ rulesHash: live.rulesHash,
382
+ databaseRules: live.databaseRules,
383
+ databaseRulesHash: live.databaseRulesHash,
384
+ databaseUrl: live.databaseUrl,
385
+ storageRules: live.storageRules,
386
+ storageRulesHash: live.storageRulesHash,
387
+ // The bound port is known only after `listen`; initPayload runs per
388
+ // request (after listen), so resolve it lazily here. Absolute ws://host:port
389
+ // mirrors serve (the browser reads this as the bridge peer URL).
390
+ bridgeUrl: (() => {
391
+ if (!mount)
392
+ return null;
393
+ const addr = server.httpServer?.address();
394
+ const port = addr && typeof addr === 'object' ? addr.port : 0;
395
+ const host = (typeof server.config.server.host === 'string' && server.config.server.host) || 'localhost';
396
+ return port > 0 ? mount.wsUrl({ host, port }) : null;
397
+ })(),
398
+ // Precedence: once a state file exists, lived state is the truth — seed
399
+ // applies only on the first (state-less) run.
400
+ seed: state?.exists() ? null : seed,
401
+ seedState,
402
+ persist: Boolean(state),
403
+ capture: Boolean(capture),
404
+ authUsers: state
405
+ ? (state.readSection('auth')?.users ?? null)
406
+ : seedUsers,
407
+ // Messaging is part of the canonical firebase/* sandbox swap.
408
+ messaging: true,
409
+ });
410
+ // Pyric Studio: mount the disk-backed workspace/project routes that
411
+ // Studio's `local` mode talks to + serve the built Studio app at
412
+ // /__pyric/ui/. Mirrors `pyric dev --ui`; the studio-ui assets are
413
+ // vendored in this package's dist (resolveStudioUiDir).
414
+ //
415
+ // ON BY DEFAULT, including under `bridge`: the bridge now routes agent
416
+ // tool-calls THROUGH the SharedWorker (see `connectBridgePeer`), so the
417
+ // app, Studio, and agent all observe the ONE sandbox. Explicit `ui: false`
418
+ // still wins.
419
+ const uiEnabled = options.ui ?? true;
420
+ const studio = uiEnabled
421
+ ? {
422
+ workspace: diskWorkspace(cwd),
423
+ projects: diskProjectStore(path.join(cwd, '.pyric', 'projects')),
424
+ }
425
+ : undefined;
426
+ let studioUiDir;
427
+ if (uiEnabled) {
428
+ studioUiDir = resolveStudioUiDir() ?? undefined;
429
+ if (!studioUiDir) {
430
+ server.config.logger.warn('[pyric] ui: built Studio app not found; /__pyric/ui/ will 404 ' +
431
+ '(run the full build, or reinstall @pyric/cli).');
432
+ }
433
+ }
434
+ const namespace = createPyricNamespace({
435
+ sdkDir,
436
+ initPayload,
437
+ events,
438
+ state,
439
+ capture,
440
+ studio,
441
+ studioUiDir,
442
+ });
443
+ // DNS-rebinding guard for the /__pyric/* surface. Vite has its own host
444
+ // check, but a `configureServer` hook that doesn't return a function mounts
445
+ // BEFORE it (and the ordering differs across Vite 5/6/7), so guard here too
446
+ // — independent of Vite's internals. Reuses serve's `isAllowedHost`.
447
+ const srvOpts = server.config.server;
448
+ const hostAllowed = (req) => {
449
+ if (srvOpts.allowedHosts === true)
450
+ return true; // user opted into all hosts
451
+ const boundHost = typeof srvOpts.host === 'string' ? srvOpts.host : 'localhost';
452
+ const extra = Array.isArray(srvOpts.allowedHosts) ? srvOpts.allowedHosts : [];
453
+ return isAllowedHost(req.headers.host, boundHost, extra);
454
+ };
455
+ // Connect-middleware adapter (build `url` from originalUrl; next() when the
456
+ // namespace closure returns false; never rewrite route bodies).
457
+ server.middlewares.use('/__pyric', (req, res, next) => {
458
+ if (!hostAllowed(req)) {
459
+ res.statusCode = 403;
460
+ res.end(`pyric: refused request for Host '${req.headers.host ?? ''}' (DNS-rebinding guard).`);
461
+ return;
462
+ }
463
+ const url = new URL(req.originalUrl ?? req.url ?? '/', `http://${req.headers.host ?? 'localhost'}`);
464
+ // Bridge first (mirrors serve.ts): /__pyric/mcp + /__pyric/health must be
465
+ // handled by the mount, not 404 through the namespace. Falls through to the
466
+ // namespace when the mount returns false (every non-bridge route).
467
+ Promise.resolve(mount ? mount.handler(req, res, url) : false)
468
+ .then((bridged) => (bridged ? true : Promise.resolve(namespace(req, res, url))))
469
+ .then((handled) => {
470
+ if (!handled)
471
+ next();
472
+ })
473
+ .catch((err) => {
474
+ if (!res.headersSent)
475
+ res.statusCode = 500;
476
+ res.end(err instanceof Error ? err.message : String(err));
477
+ });
478
+ });
479
+ // WS upgrade for the in-page sandbox peer (ws://…/__pyric/sandbox). The
480
+ // listener only fires once upgrades arrive (after listen), so adding it in
481
+ // configureServer is safe. middlewareMode has no httpServer → HTTP bridge
482
+ // routes still work, just no WS peer.
483
+ // Cast: Vite types `httpServer` as http.Server | http2.Http2SecureServer;
484
+ // attachUpgrade only needs `.on('upgrade')`, present on both. (serve passes
485
+ // a plain http.Server, so this widening is plugin-specific.)
486
+ if (mount && server.httpServer)
487
+ mount.attachUpgrade(server.httpServer);
488
+ // A2 discovery pointer: the stdio `mcp-proxy` (the sanctioned Claude Code
489
+ // entrypoint) reads `.pyric/serve.json` to find the bridge without a fixed
490
+ // URL -- it takes the PORT and probes BOTH loopback families, defeating the
491
+ // IPv6/IPv4 trap that broke the hand-written `.mcp.json`. serve writes this
492
+ // pointer; the Vite plugin must too. Written after listen (port known),
493
+ // removed on close.
494
+ if (mount && server.httpServer) {
495
+ const httpServer = server.httpServer;
496
+ const pointer = path.join(cwd, '.pyric', 'serve.json');
497
+ const host = (typeof server.config.server.host === 'string' && server.config.server.host) || 'localhost';
498
+ const writePointer = () => {
499
+ const addr = httpServer.address();
500
+ const port = addr && typeof addr === 'object' ? addr.port : 0;
501
+ if (!port)
502
+ return;
503
+ try {
504
+ mkdirSync(path.dirname(pointer), { recursive: true });
505
+ writeFileSync(pointer, JSON.stringify({
506
+ url: `http://${host}:${port}`,
507
+ mcpUrl: mount.mcpUrl({ host, port }),
508
+ port,
509
+ pid: process.pid,
510
+ instanceId: mount.instanceId,
511
+ project: bridgeOpts?.project ?? 'sandbox',
512
+ }, null, 2) + '\n');
513
+ }
514
+ catch {
515
+ /* best-effort: the proxy falls back to a port scan */
516
+ }
517
+ };
518
+ // Cross-family collision guard: once listening, probe BOTH loopback
519
+ // families on our port. If a DIFFERENT sandbox answers on the other
520
+ // family, two dev servers are colliding (IPv4 `*:P` + IPv6 `[::1]:P`)
521
+ // and the agent/browser can split across them (writes seem to vanish).
522
+ // #697's dual-bind can't apply here — Vite owns the single listen — so
523
+ // we can only warn, loudly. (Our own family answers with our instanceId
524
+ // and is skipped; a dual-stack bind owns both and never trips this.)
525
+ const warnOnCollision = async () => {
526
+ const a = httpServer.address();
527
+ const p = a && typeof a === 'object' ? a.port : 0;
528
+ if (!p)
529
+ return;
530
+ for (const probe of [`http://127.0.0.1:${p}`, `http://[::1]:${p}`]) {
531
+ try {
532
+ const res = await fetch(`${probe}/__pyric/health`, { signal: AbortSignal.timeout(1000) });
533
+ if (res.status !== 200)
534
+ continue;
535
+ const body = (await res.json());
536
+ if (body.mode === 'sandbox' && body.instanceId && body.instanceId !== mount.instanceId) {
537
+ server.config.logger.warn(`\n⚠ pyric: another sandbox already serves port ${p} on a different loopback ` +
538
+ `family (${probe}). Two dev servers are colliding across IPv4/IPv6 — your MCP ` +
539
+ `agent and browser can land on DIFFERENT sandboxes (writes seem to vanish). ` +
540
+ `Stop the other server, or give this app a unique \`server.port\` so the two ` +
541
+ `don't share one (pinning server.host to a family the squatter holds would ` +
542
+ `just EADDRINUSE).\n`, { timestamp: true });
543
+ return; // one warning is enough
544
+ }
545
+ }
546
+ catch {
547
+ /* other family silent — no collision */
548
+ }
549
+ }
550
+ };
551
+ const announce = () => {
552
+ writePointer();
553
+ void warnOnCollision();
554
+ };
555
+ if (httpServer.listening)
556
+ announce();
557
+ else
558
+ httpServer.once('listening', announce);
559
+ httpServer.once('close', () => {
560
+ try {
561
+ rmSync(pointer);
562
+ }
563
+ catch {
564
+ /* gone already */
565
+ }
566
+ });
567
+ }
568
+ // Rules hot-reload from Vite's OWN watcher (no second fs watcher). Reuse
569
+ // prepareRulesSource (resolve + lint); last-good stays live on a broken save.
570
+ // Debounced (editors emit several change events per save) — matches
571
+ // watchProjectRules' 150ms cadence, which we can't reuse here (it opens its
572
+ // own fs watcher).
573
+ if (loaded.sourcePath) {
574
+ const rulesFile = loaded.sourcePath;
575
+ let debounce = null;
576
+ server.watcher.add(rulesFile);
577
+ server.watcher.on('change', (file) => {
578
+ if (path.resolve(file) !== path.resolve(rulesFile))
579
+ return;
580
+ if (debounce)
581
+ clearTimeout(debounce);
582
+ debounce = setTimeout(() => {
583
+ void readFile(rulesFile, 'utf8').then((raw) => {
584
+ try {
585
+ const rules = prepareRulesSource(raw, rulesFile);
586
+ live.rules = rules;
587
+ live.rulesHash = rulesHashOf(rules);
588
+ events.broadcast('rules-changed', { rules, rulesHash: live.rulesHash });
589
+ server.config.logger.info(` ↻ [pyric] rules reloaded (${live.rulesHash})`);
590
+ }
591
+ catch (e) {
592
+ server.config.logger.warn(` ⚠ [pyric] rules NOT reloaded (last-good stays live): ${e instanceof Error ? e.message : String(e)}`);
593
+ }
594
+ }, () => { });
595
+ }, 150);
596
+ });
597
+ }
598
+ },
599
+ // Sandbox build only: emit the serve init entry as its own chunk. Emitted in
600
+ // buildStart (module graph time); its final filename is resolved in
601
+ // generateBundle. Our plugin is `enforce: 'pre'`, so our generateBundle runs
602
+ // BEFORE Vite's build-html plugin applies transformIndexHtml — the filename
603
+ // is always available when the script tag is injected below.
604
+ buildStart() {
605
+ if (sandboxBuild) {
606
+ initChunkRef = this.emitFile({
607
+ type: 'chunk',
608
+ id: entries.init,
609
+ name: 'pyric-sandbox-init',
610
+ });
611
+ }
612
+ },
613
+ generateBundle() {
614
+ if (initChunkRef)
615
+ initChunkFile = this.getFileName(initChunkRef);
616
+ },
617
+ transformIndexHtml(html) {
618
+ // Sandbox BUILD: the app's own `firebase/*` imports were already swapped
619
+ // (resolveId, above) to pyric's in-page adapters and BUNDLED into the app
620
+ // chunk, and the emitted init chunk (script-tagged here) carries the
621
+ // runtime bootstrap + the ServeAuthHelper popup picker — rollup shares
622
+ // ONE runtime module between the two, so the output is fully
623
+ // self-contained. `pyric dev` sees the marker below and skips its own
624
+ // serve-time injection for this page (a second injected runtime would
625
+ // double-init: two banners, two bridge peers). The marker is also the
626
+ // signal that makes `pyric dev` trust this dist (skip the inlined-SDK
627
+ // scan). transformIndexHtml runs BEFORE Vite writes index.html, so both
628
+ // land in the emitted asset.
629
+ if (sandboxBuild) {
630
+ if (html.includes(SANDBOX_BUILD_META))
631
+ return html;
632
+ const initTag = initChunkFile
633
+ ? `<script type="module" crossorigin src="/${initChunkFile}" data-pyric-sandbox-init></script>`
634
+ : '';
635
+ const tags = SANDBOX_BUILD_META + initTag;
636
+ return html.includes('</head>')
637
+ ? html.replace('</head>', `${tags}</head>`)
638
+ : tags + html;
639
+ }
640
+ const MARKER = 'data-pyric-sandbox';
641
+ if (html.includes(MARKER))
642
+ return html;
643
+ // Worker path (default): stamp the served worker's content hash so the page
644
+ // can WARN when a still-running OLD worker is stale (a SharedWorker can't
645
+ // hot-update). In-page path: force it via the explicit flag before the init
646
+ // module evaluates — a classic inline script runs before the deferred module.
647
+ // The flag (not nulling `window.SharedWorker`) leaves the user's own
648
+ // SharedWorker usage intact. We force in-page ONLY when the worker bundle
649
+ // failed (workerReady false) — the ephemeral fallback. `bridge` no longer
650
+ // forces in-page: the bridge peer routes agent tool-calls THROUGH the
651
+ // worker (see `connectBridgePeer`), so the agent shares the one sandbox the
652
+ // app + Studio use.
653
+ const head = workerReady
654
+ ? `<meta name="pyric-worker-v" content="${workerVersion}" ${MARKER}>`
655
+ : `<script ${MARKER}>globalThis.__PYRIC_FORCE_INPAGE__=true;</script>`;
656
+ // Boot the sandbox by loading the real init entry as a module (Vite
657
+ // serves + transforms it). The init module's top-level await deploys rules
658
+ // before app code runs. Mirrors serve's injectServeTags.
659
+ const tag = head + `<script type="module" src="/@fs/${entries.init}" ${MARKER}></script>`;
660
+ return html.includes('</head>') ? html.replace('</head>', `${tag}</head>`) : tag + html;
661
+ },
662
+ };
663
+ }
664
+ //# sourceMappingURL=vite-plugin.js.map