@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,59 @@
1
+ /** SharedWorker availability, control-port ownership, presence, and staleness. */
2
+ import { getFirestore, getWorkerVersion, startPresence, subscribePresence, } from '../worker/client.js';
3
+ import { getServiceWorkerFirestore } from '../worker/client/service-worker-connection.js';
4
+ import { isServiceWorkerRealm } from '../worker/service-worker-channel.js';
5
+ const hasSharedWorker = typeof SharedWorker !== 'undefined';
6
+ export const useWorker = (hasSharedWorker || (isServiceWorkerRealm() && typeof BroadcastChannel !== 'undefined'))
7
+ && !globalThis.__PYRIC_FORCE_INPAGE__;
8
+ export const WORKER_URL = '/__pyric/sdk/worker.js';
9
+ export const WORKER_NAME = 'pyric-shared-worker';
10
+ /** Control traffic only; Firebase apps receive independent app-owned ports. */
11
+ export const workerDb = useWorker
12
+ ? hasSharedWorker
13
+ ? getFirestore(WORKER_URL, WORKER_NAME)
14
+ : null
15
+ : null;
16
+ export function openWorkerDb(appName) {
17
+ if (hasSharedWorker)
18
+ return getFirestore(WORKER_URL, WORKER_NAME);
19
+ if (isServiceWorkerRealm())
20
+ return getServiceWorkerFirestore(appName);
21
+ throw new Error('No Pyric worker transport is available in this browser context.');
22
+ }
23
+ export const presenceSession = useWorker && workerDb
24
+ ? startPresence({ db: workerDb, kind: 'app' })
25
+ : null;
26
+ if (useWorker && typeof document !== 'undefined') {
27
+ const servedVersion = document
28
+ .querySelector('meta[name="pyric-worker-v"]')
29
+ ?.getAttribute('content');
30
+ void getWorkerVersion(workerDb)
31
+ .then(async (runningVersion) => {
32
+ if (!servedVersion
33
+ || !runningVersion
34
+ || runningVersion === 'dev'
35
+ || servedVersion === runningVersion)
36
+ return;
37
+ const otherPages = await new Promise((resolve) => {
38
+ const unsubscribe = subscribePresence(workerDb, (snapshot) => {
39
+ unsubscribe();
40
+ resolve(snapshot.clients.filter((client) => client.clientId !== presenceSession?.clientId).length);
41
+ });
42
+ setTimeout(() => {
43
+ unsubscribe();
44
+ resolve(-1);
45
+ }, 2_000);
46
+ });
47
+ const othersHint = otherPages > 0
48
+ ? ` ${otherPages} other page${otherPages === 1 ? '' : 's'} must disconnect before the worker can restart.`
49
+ : otherPages === 0
50
+ ? ' This is the only connected page — reload it to pick up the new worker.'
51
+ : '';
52
+ console.warn(`[pyric dev] the SharedWorker is running OLDER code (build ${runningVersion}) than what is now `
53
+ + `served (build ${servedVersion}). A SharedWorker can't hot-update — CLOSE ALL TABS of this origin `
54
+ + 'and reopen to load the new worker. (All tabs share one worker, so a partial reload leaves '
55
+ + `the old code running for everyone.)${othersHint}`);
56
+ })
57
+ .catch(() => { });
58
+ }
59
+ //# sourceMappingURL=worker-runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker-runtime.js","sourceRoot":"","sources":["../../../src/serve/entries/worker-runtime.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAClF,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,aAAa,EACb,iBAAiB,GAElB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,yBAAyB,EAAE,MAAM,+CAA+C,CAAC;AAC1F,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAE3E,MAAM,eAAe,GAAG,OAAO,YAAY,KAAK,WAAW,CAAC;AAE5D,MAAM,CAAC,MAAM,SAAS,GACpB,CAAC,eAAe,IAAI,CAAC,oBAAoB,EAAE,IAAI,OAAO,gBAAgB,KAAK,WAAW,CAAC,CAAC;OACrF,CAAE,UAAmD,CAAC,sBAAsB,CAAC;AAElF,MAAM,CAAC,MAAM,UAAU,GAAG,wBAAwB,CAAC;AACnD,MAAM,CAAC,MAAM,WAAW,GAAG,qBAAqB,CAAC;AAEjD,+EAA+E;AAC/E,MAAM,CAAC,MAAM,QAAQ,GAAoB,SAAS;IAChD,CAAC,CAAC,eAAe;QACf,CAAC,CAAC,YAAY,CAAC,UAAU,EAAE,WAAW,CAAC;QACvC,CAAC,CAAC,IAAI;IACR,CAAC,CAAC,IAAI,CAAC;AAET,MAAM,UAAU,YAAY,CAAC,OAAe;IAC1C,IAAI,eAAe;QAAE,OAAO,YAAY,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;IAClE,IAAI,oBAAoB,EAAE;QAAE,OAAO,yBAAyB,CAAC,OAAO,CAAC,CAAC;IACtE,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAC;AACrF,CAAC;AAED,MAAM,CAAC,MAAM,eAAe,GAAG,SAAS,IAAI,QAAQ;IAClD,CAAC,CAAC,aAAa,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IAC9C,CAAC,CAAC,IAAI,CAAC;AAET,IAAI,SAAS,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE,CAAC;IACjD,MAAM,aAAa,GAAG,QAAQ;SAC3B,aAAa,CAAC,6BAA6B,CAAC;QAC7C,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC;IAC5B,KAAK,gBAAgB,CAAC,QAAS,CAAC;SAC7B,IAAI,CAAC,KAAK,EAAE,cAAc,EAAE,EAAE;QAC7B,IACE,CAAC,aAAa;eACX,CAAC,cAAc;eACf,cAAc,KAAK,KAAK;eACxB,aAAa,KAAK,cAAc;YACnC,OAAO;QACT,MAAM,UAAU,GAAG,MAAM,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,EAAE;YACvD,MAAM,WAAW,GAAG,iBAAiB,CAAC,QAAS,EAAE,CAAC,QAAQ,EAAE,EAAE;gBAC5D,WAAW,EAAE,CAAC;gBACd,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAC7B,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,KAAK,eAAe,EAAE,QAAQ,CAC1D,CAAC,MAAM,CAAC,CAAC;YACZ,CAAC,CAAC,CAAC;YACH,UAAU,CAAC,GAAG,EAAE;gBACd,WAAW,EAAE,CAAC;gBACd,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;YACd,CAAC,EAAE,KAAK,CAAC,CAAC;QACZ,CAAC,CAAC,CAAC;QACH,MAAM,UAAU,GAAG,UAAU,GAAG,CAAC;YAC/B,CAAC,CAAC,IAAI,UAAU,cAAc,UAAU,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,iDAAiD;YAC1G,CAAC,CAAC,UAAU,KAAK,CAAC;gBAChB,CAAC,CAAC,yEAAyE;gBAC3E,CAAC,CAAC,EAAE,CAAC;QACT,OAAO,CAAC,IAAI,CACV,6DAA6D,cAAc,qBAAqB;cAC5F,iBAAiB,aAAa,qEAAqE;cACnG,4FAA4F;cAC5F,sCAAsC,UAAU,EAAE,CACvD,CAAC;IACJ,CAAC,CAAC;SACD,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;AACrB,CAAC"}
@@ -0,0 +1,21 @@
1
+ /** Browser-safe wire contract served by `/__pyric/init.json`. */
2
+ export interface InitPayload {
3
+ rules: string | null;
4
+ rulesHash: string | null;
5
+ databaseRules?: {
6
+ rules: Record<string, unknown>;
7
+ } | null;
8
+ databaseRulesHash?: string | null;
9
+ databaseUrl?: string | null;
10
+ /** Storage rules are installed once, before the first Storage operation. */
11
+ storageRules: string | null;
12
+ storageRulesHash: string | null;
13
+ bridgeUrl: string | null;
14
+ seed: Record<string, Record<string, unknown>> | null;
15
+ persist?: boolean;
16
+ seedState?: unknown | null;
17
+ authUsers?: ReadonlyArray<Record<string, unknown>> | null;
18
+ capture?: boolean;
19
+ messaging?: boolean;
20
+ }
21
+ //# sourceMappingURL=init-payload.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init-payload.d.ts","sourceRoot":"","sources":["../../src/serve/init-payload.ts"],"names":[],"mappings":"AAAA,iEAAiE;AACjE,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,aAAa,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,GAAG,IAAI,CAAC;IAC1D,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,4EAA4E;IAC5E,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IACrD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC3B,SAAS,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAC1D,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=init-payload.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init-payload.js","sourceRoot":"","sources":["../../src/serve/init-payload.ts"],"names":[],"mappings":""}
@@ -0,0 +1,73 @@
1
+ import type { IncomingMessage, ServerResponse } from 'node:http';
2
+ import { type StateStore } from './state-store.js';
3
+ import { type StudioRouteOptions } from './studio/index.js';
4
+ import type { InitPayload } from './init-payload.js';
5
+ export type { InitPayload } from './init-payload.js';
6
+ /**
7
+ * Server-sent-events hub for `/__pyric/events` — the hot-reload channel
8
+ * (P3). The runtime opens an EventSource; the rules watcher broadcasts
9
+ * `rules-changed` and connected pages re-deploy without a refresh.
10
+ */
11
+ export interface ServeEventHub {
12
+ /** Mounted inside the namespace handler. */
13
+ handle(req: IncomingMessage, res: ServerResponse): void;
14
+ broadcast(event: string, data: unknown): void;
15
+ clientCount(): number;
16
+ }
17
+ export declare function createEventHub(): ServeEventHub;
18
+ export interface NamespaceOptions {
19
+ /** The bundle output dir (`BundleResult.outDir`). */
20
+ sdkDir: string;
21
+ /** Producer for `/__pyric/init.json` — a function so hot-reload serves
22
+ * the latest rules without server restart. */
23
+ initPayload: () => InitPayload;
24
+ /** Hot-reload channel; serves `/__pyric/events` when present. */
25
+ events?: ServeEventHub;
26
+ /** `--persist`: mounts GET/POST /__pyric/state (the state channel). */
27
+ state?: StateStore;
28
+ /** `--capture`: mounts GET/POST /__pyric/capture. POST — the page/worker
29
+ * pushes its session fixture here; the handler writes it verbatim to
30
+ * `.pyric/last-session.json` for `pyric verify` to replay. GET — returns the
31
+ * current fixture JSON (200) or 404 when nothing is captured yet, so the
32
+ * served worker can re-hydrate its event history on boot after a death. */
33
+ capture?: {
34
+ write(json: string): void;
35
+ read(): string | null;
36
+ };
37
+ /** `--ui` (Pyric Studio): mounts `/__pyric/workspace` + `/__pyric/projects`
38
+ * (disk-backed `WorkspaceStore`/`ProjectStore`, plus the SSE watch stream)
39
+ * that `@pyric/studio`'s `local` mode talks to. */
40
+ studio?: StudioRouteOptions;
41
+ /** `--ui` (Pyric Studio): the dir of the built Studio app, served under
42
+ * `/__pyric/ui/`. Resolved by file path in the CLI (@pyric/cli never
43
+ * imports `@pyric/studio`). Absent when `--ui` is off or the build is
44
+ * missing. */
45
+ studioUiDir?: string;
46
+ /** `--ui` (Pyric Studio): the built docs site (site-docs), served so the
47
+ * Studio Docs tab has local docs without the hosted site. Built with base
48
+ * `/__pyric/ui/`, so its output straddles two subtrees under the mount:
49
+ * the pages/twins/index.json live under `/__pyric/ui/docs/`, but the shared
50
+ * assets live at `/__pyric/ui/_astro/` (Astro's asset dir, at the base
51
+ * root — NOT under `docs/`). Both are served from this one dir. */
52
+ docsUiDir?: string;
53
+ /** The OpenAI-compatible upstream `/__pyric/ai-proxy` forwards to
54
+ * (pyric/ai — cdd-deltas #98.2). Falls back to the
55
+ * `PYRIC_AI_PROXY_UPSTREAM` env var, then `http://localhost:11434/v1`
56
+ * (local Ollama). Always mounted — the route only touches the network
57
+ * when a request arrives. */
58
+ aiProxyUpstream?: string;
59
+ }
60
+ /** Default upstream: local Ollama's OpenAI-compatible endpoint. */
61
+ export declare const AI_PROXY_DEFAULT_UPSTREAM = "http://localhost:11434/v1";
62
+ export declare function createPyricNamespace(opts: NamespaceOptions): (req: IncomingMessage, res: ServerResponse, url: URL) => boolean | Promise<boolean>;
63
+ /** The import-map targets. Spec → served URL. */
64
+ export declare function sdkImportMap(): Record<string, string>;
65
+ /**
66
+ * Inject the import map + init script into an HTML document. The import map
67
+ * MUST precede any module script that imports a mapped specifier, so both
68
+ * tags go at the very start of `<head>` (fallbacks: after `<html>`, else
69
+ * prepended). Idempotent — a page already carrying the marker is untouched
70
+ * (matters when transformHtml runs over an SPA fallback repeatedly).
71
+ */
72
+ export declare function injectServeTags(html: string, importMap?: Record<string, string>, workerVersion?: string, forceInPage?: boolean): string;
73
+ //# sourceMappingURL=namespace.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"namespace.d.ts","sourceRoot":"","sources":["../../src/serve/namespace.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAEjE,OAAO,EAAqC,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEtF,OAAO,EAAsB,KAAK,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAGhF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,YAAY,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,4CAA4C;IAC5C,MAAM,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,GAAG,IAAI,CAAC;IACxD,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI,CAAC;IAC9C,WAAW,IAAI,MAAM,CAAC;CACvB;AAED,wBAAgB,cAAc,IAAI,aAAa,CA4B9C;AAED,MAAM,WAAW,gBAAgB;IAC/B,qDAAqD;IACrD,MAAM,EAAE,MAAM,CAAC;IACf;mDAC+C;IAC/C,WAAW,EAAE,MAAM,WAAW,CAAC;IAC/B,iEAAiE;IACjE,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,uEAAuE;IACvE,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB;;;;gFAI4E;IAC5E,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,IAAI,IAAI,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;IAC/D;;wDAEoD;IACpD,MAAM,CAAC,EAAE,kBAAkB,CAAC;IAC5B;;;mBAGe;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;wEAKoE;IACpE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;kCAI8B;IAC9B,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAID,mEAAmE;AACnE,eAAO,MAAM,yBAAyB,8BAA8B,CAAC;AA8PrE,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,gBAAgB,IAGjD,KAAK,eAAe,EAAE,KAAK,cAAc,EAAE,KAAK,GAAG,KAAG,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CA8GzF;AAID,iDAAiD;AACjD,wBAAgB,YAAY,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAWrD;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,MAAM,EACZ,SAAS,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAkB,EAClD,aAAa,CAAC,EAAE,MAAM,EACtB,WAAW,UAAQ,GAClB,MAAM,CAuDR"}
@@ -0,0 +1,470 @@
1
+ /**
2
+ * The `/__pyric/` reserved namespace — pyric's analog of firebase serve's
3
+ * `/__/firebase/` namespace:
4
+ *
5
+ * /__pyric/sdk/<file>.js the bundled SDK files (import-map targets +
6
+ * the injected init script + shared chunks)
7
+ * /__pyric/init.json the page init payload (rules, bridge URL) —
8
+ * fetched by the runtime chunk at module init
9
+ *
10
+ * Bridge routes (`/__pyric/mcp`, `/__pyric/sandbox`) mount here in P2.
11
+ */
12
+ import { existsSync, statSync } from 'node:fs';
13
+ import { basename, extname, join } from 'node:path';
14
+ import { collectBody } from '../bridge/server/peer.js';
15
+ import { StateFileError } from './state-store.js';
16
+ import { createWriterLock } from './writer-lock.js';
17
+ import { createStudioRoutes } from './studio/index.js';
18
+ import { contentTypeFor, pipeFileToResponse, resolveStaticFile } from './server.js';
19
+ import { SANDBOX_BUILD_MARKER } from './sandbox-marker.js';
20
+ export function createEventHub() {
21
+ const clients = new Set();
22
+ return {
23
+ handle(req, res) {
24
+ res.writeHead(200, {
25
+ 'content-type': 'text/event-stream',
26
+ 'cache-control': 'no-store',
27
+ connection: 'keep-alive',
28
+ });
29
+ res.write(': connected\n\n');
30
+ clients.add(res);
31
+ req.on('close', () => clients.delete(res));
32
+ // A dying SSE socket must never surface an unhandled 'error' event
33
+ // (which would kill the whole serve process) — drop the client instead.
34
+ res.on('error', () => clients.delete(res));
35
+ },
36
+ broadcast(event, data) {
37
+ const frame = `event: ${event}\ndata: ${JSON.stringify(data)}\n\n`;
38
+ for (const res of clients) {
39
+ try {
40
+ res.write(frame);
41
+ }
42
+ catch {
43
+ clients.delete(res); // half-closed socket in the close race window
44
+ }
45
+ }
46
+ },
47
+ clientCount: () => clients.size,
48
+ };
49
+ }
50
+ // ─── AI proxy (`/__pyric/ai-proxy` — pyric/ai, cdd-deltas #98.2) ───────────
51
+ /** Default upstream: local Ollama's OpenAI-compatible endpoint. */
52
+ export const AI_PROXY_DEFAULT_UPSTREAM = 'http://localhost:11434/v1';
53
+ /**
54
+ * Request headers that must NOT be forwarded upstream: origin-sensitive
55
+ * browser context (`origin`/`referer`/`cookie` — the upstream is a different
56
+ * origin and must never see the page's), hop-by-hop headers, and the two the
57
+ * proxy re-derives (`host`, `content-length`). `accept-encoding` is dropped
58
+ * so fetch negotiates its own compression and the streamed body needs no
59
+ * length fixups.
60
+ */
61
+ const AI_PROXY_STRIPPED_HEADERS = new Set([
62
+ 'host',
63
+ 'origin',
64
+ 'referer',
65
+ 'cookie',
66
+ 'connection',
67
+ 'content-length',
68
+ 'accept-encoding',
69
+ 'keep-alive',
70
+ 'proxy-authorization',
71
+ 'te',
72
+ 'trailer',
73
+ 'transfer-encoding',
74
+ 'upgrade',
75
+ ]);
76
+ /**
77
+ * Handle `POST /__pyric/ai-proxy/<suffix>` — a same-origin passthrough to the
78
+ * configured OpenAI-compatible upstream, so the browser openai engine
79
+ * (running in the served page or the SharedWorker host) reaches a localhost
80
+ * upstream like Ollama with ZERO CORS setup (no `OLLAMA_ORIGINS`, ever).
81
+ *
82
+ * Behavior:
83
+ * - POST only (the OpenAI chat-completions surface is POST); 405 otherwise.
84
+ * - the path suffix + query ride through verbatim
85
+ * (`/__pyric/ai-proxy/chat/completions` → `<upstream>/chat/completions`).
86
+ * - the request body is forwarded verbatim; headers minus the
87
+ * origin-sensitive/hop-by-hop set above (`authorization` DOES forward —
88
+ * upstreams may require a key).
89
+ * - the response body is STREAMED through chunk-by-chunk — SSE passthrough
90
+ * must never buffer, or `stream: true` completions would arrive all at
91
+ * once at the end.
92
+ * - an unreachable upstream answers 502 with a plain-text explanation.
93
+ */
94
+ async function handleAiProxy(configuredUpstream, req, res, url) {
95
+ if (req.method !== 'POST') {
96
+ res.writeHead(405, { allow: 'POST' }).end('method not allowed');
97
+ return;
98
+ }
99
+ const upstreamBase = (configuredUpstream ??
100
+ process.env.PYRIC_AI_PROXY_UPSTREAM ??
101
+ AI_PROXY_DEFAULT_UPSTREAM).replace(/\/$/, '');
102
+ const suffix = url.pathname.slice('/__pyric/ai-proxy'.length);
103
+ const target = `${upstreamBase}${suffix}${url.search}`;
104
+ // Buffer the REQUEST body (small JSON payloads); the RESPONSE streams.
105
+ const raw = await new Promise((resolve, reject) => {
106
+ const chunks = [];
107
+ req.on('data', (c) => chunks.push(c));
108
+ req.on('end', () => resolve(Buffer.concat(chunks)));
109
+ req.on('error', reject);
110
+ });
111
+ // Copy into a plain-ArrayBuffer view — fetch's BodyInit typing rejects
112
+ // Buffer's ArrayBufferLike backing.
113
+ const body = new Uint8Array(raw.byteLength);
114
+ body.set(raw);
115
+ const headers = {};
116
+ for (const [key, value] of Object.entries(req.headers)) {
117
+ if (value === undefined)
118
+ continue;
119
+ if (AI_PROXY_STRIPPED_HEADERS.has(key.toLowerCase()))
120
+ continue;
121
+ headers[key] = Array.isArray(value) ? value.join(', ') : value;
122
+ }
123
+ let upstream;
124
+ try {
125
+ upstream = await fetch(target, { method: 'POST', headers, body });
126
+ }
127
+ catch (e) {
128
+ res.writeHead(502, { 'content-type': 'text/plain' });
129
+ res.end(`pyric dev ai-proxy: upstream ${target} unreachable: ` +
130
+ `${e instanceof Error ? e.message : String(e)}\n` +
131
+ 'Set PYRIC_AI_PROXY_UPSTREAM to an OpenAI-compatible base URL ' +
132
+ `(default ${AI_PROXY_DEFAULT_UPSTREAM}).`);
133
+ return;
134
+ }
135
+ const responseHeaders = { 'cache-control': 'no-store' };
136
+ const contentType = upstream.headers.get('content-type');
137
+ if (contentType)
138
+ responseHeaders['content-type'] = contentType;
139
+ res.writeHead(upstream.status, responseHeaders);
140
+ if (!upstream.body) {
141
+ res.end();
142
+ return;
143
+ }
144
+ res.flushHeaders?.();
145
+ // Chunk-by-chunk passthrough. A dropped client cancels the upstream read
146
+ // so an abandoned SSE stream doesn't keep the upstream generating.
147
+ const reader = upstream.body.getReader();
148
+ res.on('close', () => {
149
+ void reader.cancel().catch(() => { });
150
+ });
151
+ try {
152
+ for (;;) {
153
+ const { done, value } = await reader.read();
154
+ if (done)
155
+ break;
156
+ res.write(value);
157
+ }
158
+ }
159
+ catch {
160
+ // Upstream or client dropped mid-stream — nothing to salvage.
161
+ }
162
+ res.end();
163
+ }
164
+ /** The page's persistence backend speaks this route:
165
+ * GET /__pyric/state → whole envelope (404 when absent)
166
+ * GET /__pyric/state?section=firestore → that section (404 when null)
167
+ * POST /__pyric/state?section=... → write the section (204; 423 if
168
+ * another tab holds the writer lock)
169
+ * DELETE /__pyric/state → release the writer lock (beacon)
170
+ * Writes carry `x-pyric-writer: <id>`; the first writer wins, others get 423
171
+ * and drop to read-only (pre-mortem #3). The firestore body is the sandbox
172
+ * persistence controller's own blob — stored verbatim, never interpreted. */
173
+ async function handleState(state, lock, req, res, url) {
174
+ const section = url.searchParams.get('section');
175
+ const writerId = req.headers['x-pyric-writer'] ?? '';
176
+ try {
177
+ if (req.method === 'GET') {
178
+ const value = section ? state.readSection(section) : state.load();
179
+ if (value === null) {
180
+ res.writeHead(404, { 'content-type': 'application/json' }).end('null');
181
+ return;
182
+ }
183
+ res.writeHead(200, {
184
+ 'content-type': 'application/json; charset=utf-8',
185
+ 'cache-control': 'no-store',
186
+ // Lets `pyric snapshot` detect it scanned into a NEIGHBOR project's
187
+ // serve (pre-mortem #4) and warn instead of promoting the wrong DB.
188
+ 'x-pyric-project-dir': state.projectDir,
189
+ });
190
+ res.end(JSON.stringify(value));
191
+ return;
192
+ }
193
+ if (req.method === 'DELETE') {
194
+ if (writerId)
195
+ lock.release(writerId);
196
+ res.writeHead(204).end();
197
+ return;
198
+ }
199
+ if (req.method === 'PUT') {
200
+ // Lock heartbeat — refresh/claim WITHOUT writing state. 423 if another
201
+ // live tab holds it.
202
+ res.writeHead(lock.claim(writerId || 'anon', Date.now()) ? 204 : 423).end();
203
+ return;
204
+ }
205
+ if (req.method === 'POST') {
206
+ if (section !== 'firestore' && section !== 'auth') {
207
+ res.writeHead(400).end('section must be firestore|auth');
208
+ return;
209
+ }
210
+ // Single-writer: the first page to flush claims the lock; a different
211
+ // live page is refused (423) so it can't erase the writer's world.
212
+ if (!lock.claim(writerId || 'anon', Date.now())) {
213
+ res.writeHead(423, { 'content-type': 'text/plain' }).end(`another tab holds the persist writer lock (held by ${lock.holder()})`);
214
+ return;
215
+ }
216
+ const body = await collectBody(req);
217
+ state.writeSection(section, body);
218
+ res.writeHead(204).end();
219
+ return;
220
+ }
221
+ res.writeHead(405, { allow: 'GET, POST, DELETE' }).end('method not allowed');
222
+ }
223
+ catch (e) {
224
+ // StateFileError (corrupt/version) or bad body — surface, don't clobber.
225
+ res.writeHead(e instanceof StateFileError ? 409 : 400, { 'content-type': 'text/plain' });
226
+ res.end(e instanceof Error ? e.message : String(e));
227
+ }
228
+ }
229
+ /**
230
+ * Handle POST /__pyric/capture — the page pushes its full session fixture
231
+ * (JSON-serialized history + snapshot + rules) whenever the sandbox changes.
232
+ * The server writes it verbatim to `.pyric/last-session.json` so
233
+ * `pyric verify` can pick it up without any extra arguments.
234
+ *
235
+ * GET returns the current fixture JSON verbatim (200), or 404 when nothing
236
+ * has been captured yet. The served SharedWorker fetches this on boot to
237
+ * re-hydrate its in-memory event history after a worker death (Traffic /
238
+ * activity / metrics survive the refresh even though the worker restarted).
239
+ * Cheap + read-only.
240
+ *
241
+ * POST fails fast rather than silently swallowing write errors so the
242
+ * developer knows the capture is broken.
243
+ *
244
+ * We collect the RAW request body as a string rather than using
245
+ * `collectBody` (which parses JSON). The capture must be stored verbatim
246
+ * — re-serializing a parsed object would round-trip through JS values and
247
+ * could alter key order or lose whitespace, making the file differ from
248
+ * what the page intended to write.
249
+ */
250
+ async function handleCapture(capture, req, res) {
251
+ if (req.method === 'GET') {
252
+ const body = capture.read();
253
+ if (body === null) {
254
+ res.writeHead(404, { 'content-type': 'application/json' }).end('null');
255
+ return;
256
+ }
257
+ res.writeHead(200, {
258
+ 'content-type': 'application/json; charset=utf-8',
259
+ 'cache-control': 'no-store',
260
+ });
261
+ res.end(body);
262
+ return;
263
+ }
264
+ if (req.method !== 'POST') {
265
+ res.writeHead(405, { allow: 'GET, POST' }).end('method not allowed');
266
+ return;
267
+ }
268
+ try {
269
+ const body = await new Promise((resolve, reject) => {
270
+ let raw = '';
271
+ req.setEncoding('utf8');
272
+ req.on('data', (chunk) => { raw += chunk; });
273
+ req.on('end', () => resolve(raw));
274
+ req.on('error', reject);
275
+ });
276
+ capture.write(body);
277
+ res.writeHead(204).end();
278
+ }
279
+ catch (e) {
280
+ res.writeHead(400, { 'content-type': 'text/plain' });
281
+ res.end(e instanceof Error ? e.message : String(e));
282
+ }
283
+ }
284
+ export function createPyricNamespace(opts) {
285
+ const writerLock = createWriterLock();
286
+ const studioRoutes = opts.studio ? createStudioRoutes(opts.studio) : null;
287
+ return (req, res, url) => {
288
+ if (studioRoutes &&
289
+ (url.pathname.startsWith('/__pyric/workspace') ||
290
+ url.pathname.startsWith('/__pyric/projects'))) {
291
+ return studioRoutes(req, res, url);
292
+ }
293
+ if (opts.state && url.pathname === '/__pyric/state') {
294
+ return handleState(opts.state, writerLock, req, res, url).then(() => true);
295
+ }
296
+ if (opts.capture && url.pathname === '/__pyric/capture') {
297
+ return handleCapture(opts.capture, req, res).then(() => true);
298
+ }
299
+ if (opts.events && url.pathname === '/__pyric/events') {
300
+ opts.events.handle(req, res);
301
+ return true;
302
+ }
303
+ if (url.pathname === '/__pyric/ai-proxy' || url.pathname.startsWith('/__pyric/ai-proxy/')) {
304
+ return handleAiProxy(opts.aiProxyUpstream, req, res, url).then(() => true);
305
+ }
306
+ if (url.pathname === '/__pyric/init.json') {
307
+ res.writeHead(200, { 'content-type': 'application/json; charset=utf-8', 'cache-control': 'no-store' });
308
+ res.end(JSON.stringify(opts.initPayload()));
309
+ return true;
310
+ }
311
+ if (url.pathname.startsWith('/__pyric/sdk/')) {
312
+ // basename() flattens any traversal attempt — the sdk dir is flat.
313
+ const file = join(opts.sdkDir, basename(url.pathname));
314
+ if (!existsSync(file)) {
315
+ res.writeHead(404).end('not found');
316
+ return true;
317
+ }
318
+ const type = file.endsWith('.map') ? 'application/json' : 'text/javascript; charset=utf-8';
319
+ // Immutable-friendly: bundle filenames are content-hashed chunks or
320
+ // cache-keyed outputs; still no-store in dev for simplicity.
321
+ res.writeHead(200, { 'content-type': type, 'cache-control': 'no-store' });
322
+ pipeFileToResponse(file, res);
323
+ return true;
324
+ }
325
+ // Embedded docs site (site-docs). MUST run BEFORE the general
326
+ // `/__pyric/ui/` studio handler below: that handler's SPA fallback answers
327
+ // every miss with Studio's index.html, which would swallow docs pages and
328
+ // (worse) return HTML for a missing docs asset. Built with base
329
+ // `/__pyric/ui/`, the docs output lives in TWO subtrees under the mount —
330
+ // pages/twins/index.json under `/__pyric/ui/docs/`, and shared assets at
331
+ // `/__pyric/ui/_astro/` (Astro's asset dir sits at the base root, not under
332
+ // `docs/`). We claim both; `_astro` is Astro-specific and never collides
333
+ // with Studio (Vite emits `/__pyric/ui/assets/`). No SPA fallback here — a
334
+ // genuinely missing docs page 404s (a broken doc link must fail loudly, not
335
+ // masquerade as another page). Directory-format pages (`<slug>/index.html`)
336
+ // and `bunx serve`-style extensionless→trailing-slash redirects are handled
337
+ // by resolveStaticFile + the directory redirect below.
338
+ if (opts.docsUiDir &&
339
+ (url.pathname === '/__pyric/ui/docs' ||
340
+ url.pathname.startsWith('/__pyric/ui/docs/') ||
341
+ url.pathname.startsWith('/__pyric/ui/_astro/'))) {
342
+ const rel = url.pathname.slice('/__pyric/ui'.length) || '/';
343
+ // `bunx serve` parity: an extensionless path that names a real directory
344
+ // (e.g. `/__pyric/ui/docs` or `/__pyric/ui/docs/<slug>`) redirects to the
345
+ // trailing-slash form so the directory's index.html loads with correct
346
+ // relative-URL resolution.
347
+ if (!rel.endsWith('/') && !extname(rel)) {
348
+ const dir = join(opts.docsUiDir, decodeURIComponent(rel));
349
+ if (existsSync(dir) && statSync(dir).isDirectory()) {
350
+ res.writeHead(301, { location: `${url.pathname}/` }).end();
351
+ return true;
352
+ }
353
+ }
354
+ const file = resolveStaticFile(opts.docsUiDir, rel);
355
+ if (!file) {
356
+ res.writeHead(404).end('not found');
357
+ return true;
358
+ }
359
+ res.writeHead(200, { 'content-type': contentTypeFor(file), 'cache-control': 'no-store' });
360
+ pipeFileToResponse(file, res);
361
+ return true;
362
+ }
363
+ if (opts.studioUiDir &&
364
+ (url.pathname === '/__pyric/ui' || url.pathname.startsWith('/__pyric/ui/'))) {
365
+ // The built Pyric Studio app. Served verbatim (NOT through
366
+ // injectServeTags: that import-map/init injection is for sandbox pages,
367
+ // not Studio). Studio uses History-API routing under this mount, so any
368
+ // path that doesn't resolve to a real file falls back to index.html —
369
+ // INCLUDING paths with dots (deep links like /storage/uploads/logo.png).
370
+ // Only misses under Vite's content-hashed asset dir stay hard 404s, so a
371
+ // broken script/style URL fails loudly instead of returning HTML.
372
+ if (url.pathname === '/__pyric/ui') {
373
+ res.writeHead(301, { location: '/__pyric/ui/' }).end();
374
+ return true;
375
+ }
376
+ const rel = url.pathname.slice('/__pyric/ui'.length) || '/';
377
+ let file = resolveStaticFile(opts.studioUiDir, rel);
378
+ if (!file && !rel.startsWith('/assets/')) {
379
+ file = resolveStaticFile(opts.studioUiDir, '/index.html');
380
+ }
381
+ if (!file) {
382
+ res.writeHead(404).end('not found');
383
+ return true;
384
+ }
385
+ res.writeHead(200, { 'content-type': contentTypeFor(file), 'cache-control': 'no-store' });
386
+ pipeFileToResponse(file, res);
387
+ return true;
388
+ }
389
+ return false; // unknown /__pyric/* → caller 404s
390
+ };
391
+ }
392
+ // ─── HTML injection ───────────────────────────────────────────────────
393
+ /** The import-map targets. Spec → served URL. */
394
+ export function sdkImportMap() {
395
+ return {
396
+ 'firebase/ai': '/__pyric/sdk/ai.js',
397
+ 'firebase/app': '/__pyric/sdk/app.js',
398
+ 'firebase/auth': '/__pyric/sdk/auth.js',
399
+ 'firebase/database': '/__pyric/sdk/database.js',
400
+ 'firebase/firestore': '/__pyric/sdk/firestore.js',
401
+ 'firebase/messaging': '/__pyric/sdk/messaging.js',
402
+ 'firebase/messaging/sw': '/__pyric/sdk/messaging-sw.js',
403
+ 'firebase/storage': '/__pyric/sdk/storage.js',
404
+ };
405
+ }
406
+ /**
407
+ * Inject the import map + init script into an HTML document. The import map
408
+ * MUST precede any module script that imports a mapped specifier, so both
409
+ * tags go at the very start of `<head>` (fallbacks: after `<html>`, else
410
+ * prepended). Idempotent — a page already carrying the marker is untouched
411
+ * (matters when transformHtml runs over an SPA fallback repeatedly).
412
+ */
413
+ export function injectServeTags(html, importMap = sdkImportMap(), workerVersion, forceInPage = false) {
414
+ const MARKER = 'data-pyric-serve';
415
+ if (html.includes(MARKER))
416
+ return html;
417
+ // A pyric SANDBOX BUILD (`vite build` under the pyricSandbox plugin's sandbox
418
+ // mode) already BUNDLES its own runtime + init chunk — injecting the import
419
+ // map + /__pyric/sdk/init.js on top would boot a SECOND runtime instance on
420
+ // the page (two banners, two bridge peer registrations, races between them).
421
+ // The bundle owns the sandbox for a marked page: it fetches
422
+ // /__pyric/init.json itself (worker path: the SharedWorker does; in-page
423
+ // path: the runtime does) and owns rules hot-reload the same way. The ONLY
424
+ // serve-time contribution left is the worker-version staleness stamp, which
425
+ // the bundled runtime reads from this meta to warn about a stale
426
+ // still-running SharedWorker.
427
+ if (html.includes(SANDBOX_BUILD_MARKER)) {
428
+ if (!workerVersion || html.includes('pyric-worker-v'))
429
+ return html;
430
+ const meta = `<meta name="pyric-worker-v" content="${workerVersion}" ${MARKER}>`;
431
+ const headTag = html.match(/<head[^>]*>/i);
432
+ if (headTag && headTag.index !== undefined) {
433
+ const at = headTag.index + headTag[0].length;
434
+ return html.slice(0, at) + meta + html.slice(at);
435
+ }
436
+ return meta + html;
437
+ }
438
+ // Stamp the worker's content hash so the page can DETECT staleness: a live
439
+ // SharedWorker survives serve restarts + reloads and can't hot-update, so it
440
+ // keeps running old code until every tab of the origin closes. The worker
441
+ // name is intentionally STABLE (one backend shared by all tabs), so rather
442
+ // than split tabs across versions, `runtime.ts` compares this served hash to
443
+ // the running worker's baked hash and warns the user to close all tabs.
444
+ const versionMeta = workerVersion
445
+ ? `<meta name="pyric-worker-v" content="${workerVersion}" ${MARKER}>`
446
+ : '';
447
+ // `--bridge`: the MCP bridge peers with the IN-PAGE sandbox, so force the page
448
+ // off the default SharedWorker path. Otherwise the agent drives an empty
449
+ // in-page sandbox while the app's data lives in the worker. Set before any app
450
+ // code runs; mirrors the Vite plugin's transformIndexHtml.
451
+ const forceTag = forceInPage
452
+ ? `<script ${MARKER}>globalThis.__PYRIC_FORCE_INPAGE__=true;</script>`
453
+ : '';
454
+ const tags = versionMeta +
455
+ forceTag +
456
+ `<script type="importmap" ${MARKER}>${JSON.stringify({ imports: importMap })}</script>` +
457
+ `<script type="module" src="/__pyric/sdk/init.js" ${MARKER}></script>`;
458
+ const head = html.match(/<head[^>]*>/i);
459
+ if (head && head.index !== undefined) {
460
+ const at = head.index + head[0].length;
461
+ return html.slice(0, at) + tags + html.slice(at);
462
+ }
463
+ const htmlTag = html.match(/<html[^>]*>/i);
464
+ if (htmlTag && htmlTag.index !== undefined) {
465
+ const at = htmlTag.index + htmlTag[0].length;
466
+ return html.slice(0, at) + tags + html.slice(at);
467
+ }
468
+ return tags + html;
469
+ }
470
+ //# sourceMappingURL=namespace.js.map