@pyric/cli 0.1.0-alpha.13 → 0.1.0-alpha.15

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 (614) hide show
  1. package/dist/assurance/.generated/conformance-verdicts.d.ts +120 -75
  2. package/dist/assurance/.generated/conformance-verdicts.d.ts.map +1 -1
  3. package/dist/assurance/.generated/conformance-verdicts.js +120 -75
  4. package/dist/assurance/.generated/conformance-verdicts.js.map +1 -1
  5. package/dist/cli/serve.d.ts +1 -1
  6. package/dist/cli/serve.d.ts.map +1 -1
  7. package/dist/cli/serve.js +208 -285
  8. package/dist/cli/serve.js.map +1 -1
  9. package/dist/cli/service-command-records/database-rules-generate.d.ts +4 -0
  10. package/dist/cli/service-command-records/database-rules-generate.d.ts.map +1 -0
  11. package/dist/cli/service-command-records/database-rules-generate.js +3 -0
  12. package/dist/cli/service-command-records/database-rules-generate.js.map +1 -0
  13. package/dist/cli/service-command-records/database-rules-lint.d.ts +4 -0
  14. package/dist/cli/service-command-records/database-rules-lint.d.ts.map +1 -0
  15. package/dist/cli/service-command-records/database-rules-lint.js +3 -0
  16. package/dist/cli/service-command-records/database-rules-lint.js.map +1 -0
  17. package/dist/cli/service-command-records/database-rules-simulate.d.ts +4 -0
  18. package/dist/cli/service-command-records/database-rules-simulate.d.ts.map +1 -0
  19. package/dist/cli/service-command-records/database-rules-simulate.js +3 -0
  20. package/dist/cli/service-command-records/database-rules-simulate.js.map +1 -0
  21. package/dist/cli/service-command-records/database-rules-validate.d.ts +4 -0
  22. package/dist/cli/service-command-records/database-rules-validate.d.ts.map +1 -0
  23. package/dist/cli/service-command-records/database-rules-validate.js +3 -0
  24. package/dist/cli/service-command-records/database-rules-validate.js.map +1 -0
  25. package/dist/cli/service-command-records/firestore-indexes-generate.d.ts +4 -0
  26. package/dist/cli/service-command-records/firestore-indexes-generate.d.ts.map +1 -0
  27. package/dist/cli/service-command-records/firestore-indexes-generate.js +3 -0
  28. package/dist/cli/service-command-records/firestore-indexes-generate.js.map +1 -0
  29. package/dist/cli/service-command-records/firestore-rules-lint.d.ts +4 -0
  30. package/dist/cli/service-command-records/firestore-rules-lint.d.ts.map +1 -0
  31. package/dist/cli/service-command-records/firestore-rules-lint.js +3 -0
  32. package/dist/cli/service-command-records/firestore-rules-lint.js.map +1 -0
  33. package/dist/cli/service-command-records/firestore-rules-resolve.d.ts +4 -0
  34. package/dist/cli/service-command-records/firestore-rules-resolve.d.ts.map +1 -0
  35. package/dist/cli/service-command-records/firestore-rules-resolve.js +3 -0
  36. package/dist/cli/service-command-records/firestore-rules-resolve.js.map +1 -0
  37. package/dist/cli/service-command-records/firestore-rules-simulate.d.ts +4 -0
  38. package/dist/cli/service-command-records/firestore-rules-simulate.d.ts.map +1 -0
  39. package/dist/cli/service-command-records/firestore-rules-simulate.js +3 -0
  40. package/dist/cli/service-command-records/firestore-rules-simulate.js.map +1 -0
  41. package/dist/cli/service-command-records/firestore-rules-validate.d.ts +4 -0
  42. package/dist/cli/service-command-records/firestore-rules-validate.d.ts.map +1 -0
  43. package/dist/cli/service-command-records/firestore-rules-validate.js +3 -0
  44. package/dist/cli/service-command-records/firestore-rules-validate.js.map +1 -0
  45. package/dist/cli/service-command-records/storage-rules-lint.d.ts +4 -0
  46. package/dist/cli/service-command-records/storage-rules-lint.d.ts.map +1 -0
  47. package/dist/cli/service-command-records/storage-rules-lint.js +3 -0
  48. package/dist/cli/service-command-records/storage-rules-lint.js.map +1 -0
  49. package/dist/cli/service-command-records/storage-rules-simulate.d.ts +4 -0
  50. package/dist/cli/service-command-records/storage-rules-simulate.d.ts.map +1 -0
  51. package/dist/cli/service-command-records/storage-rules-simulate.js +3 -0
  52. package/dist/cli/service-command-records/storage-rules-simulate.js.map +1 -0
  53. package/dist/cli/service-commands.d.ts +7 -0
  54. package/dist/cli/service-commands.d.ts.map +1 -1
  55. package/dist/cli/service-commands.generated.d.ts +35 -0
  56. package/dist/cli/service-commands.generated.d.ts.map +1 -0
  57. package/dist/cli/service-commands.generated.js +25 -0
  58. package/dist/cli/service-commands.generated.js.map +1 -0
  59. package/dist/cli/service-commands.js +23 -40
  60. package/dist/cli/service-commands.js.map +1 -1
  61. package/dist/conformance/.generated/can-i-use-browser.d.ts.map +1 -1
  62. package/dist/conformance/.generated/can-i-use-browser.js +1 -1
  63. package/dist/conformance/.generated/can-i-use-browser.js.map +1 -1
  64. package/dist/conformance/.generated/can-i-use.d.ts.map +1 -1
  65. package/dist/conformance/.generated/can-i-use.js +1 -1
  66. package/dist/conformance/.generated/can-i-use.js.map +1 -1
  67. package/dist/conformance/.generated/conformance-docs.d.ts.map +1 -1
  68. package/dist/conformance/.generated/conformance-docs.js +1 -1
  69. package/dist/conformance/.generated/conformance-docs.js.map +1 -1
  70. package/dist/functions-rtdb/development-runtime.d.ts +63 -0
  71. package/dist/functions-rtdb/development-runtime.d.ts.map +1 -0
  72. package/dist/functions-rtdb/development-runtime.js +244 -0
  73. package/dist/functions-rtdb/development-runtime.js.map +1 -0
  74. package/dist/serve/bridge-mount.d.ts +32 -2
  75. package/dist/serve/bridge-mount.d.ts.map +1 -1
  76. package/dist/serve/bridge-mount.js +232 -18
  77. package/dist/serve/bridge-mount.js.map +1 -1
  78. package/dist/serve/bundler.d.ts +4 -18
  79. package/dist/serve/bundler.d.ts.map +1 -1
  80. package/dist/serve/bundler.js +15 -37
  81. package/dist/serve/bundler.js.map +1 -1
  82. package/dist/serve/entries/app-client.d.ts.map +1 -1
  83. package/dist/serve/entries/app-client.js +5 -5
  84. package/dist/serve/entries/app-client.js.map +1 -1
  85. package/dist/serve/entries/auth-helper-core.d.ts +23 -6
  86. package/dist/serve/entries/auth-helper-core.d.ts.map +1 -1
  87. package/dist/serve/entries/auth-helper-core.js +55 -24
  88. package/dist/serve/entries/auth-helper-core.js.map +1 -1
  89. package/dist/serve/entries/database.d.ts +28 -0
  90. package/dist/serve/entries/database.d.ts.map +1 -1
  91. package/dist/serve/entries/database.js +95 -26
  92. package/dist/serve/entries/database.js.map +1 -1
  93. package/dist/serve/entries/init.d.ts.map +1 -1
  94. package/dist/serve/entries/init.js +21 -12
  95. package/dist/serve/entries/init.js.map +1 -1
  96. package/dist/serve/html-injection.d.ts +5 -0
  97. package/dist/serve/html-injection.d.ts.map +1 -0
  98. package/dist/serve/html-injection.js +59 -0
  99. package/dist/serve/html-injection.js.map +1 -0
  100. package/dist/serve/namespace.d.ts +6 -22
  101. package/dist/serve/namespace.d.ts.map +1 -1
  102. package/dist/serve/namespace.js +23 -145
  103. package/dist/serve/namespace.js.map +1 -1
  104. package/dist/serve/runtime/worker-generation.d.ts +10 -2
  105. package/dist/serve/runtime/worker-generation.d.ts.map +1 -1
  106. package/dist/serve/runtime/worker-generation.js +29 -8
  107. package/dist/serve/runtime/worker-generation.js.map +1 -1
  108. package/dist/serve/runtime/worker-replacement.d.ts +1 -2
  109. package/dist/serve/runtime/worker-replacement.d.ts.map +1 -1
  110. package/dist/serve/sandbox-session.d.ts +78 -0
  111. package/dist/serve/sandbox-session.d.ts.map +1 -0
  112. package/dist/serve/sandbox-session.js +171 -0
  113. package/dist/serve/sandbox-session.js.map +1 -0
  114. package/dist/serve/server.d.ts +5 -2
  115. package/dist/serve/server.d.ts.map +1 -1
  116. package/dist/serve/server.js +21 -5
  117. package/dist/serve/server.js.map +1 -1
  118. package/dist/serve/site-tree.d.ts +8 -0
  119. package/dist/serve/site-tree.d.ts.map +1 -0
  120. package/dist/serve/site-tree.js +113 -0
  121. package/dist/serve/site-tree.js.map +1 -0
  122. package/dist/serve/site-ui/_astro/RulesCodeEditor.CzwHdCi9.js +23 -0
  123. package/dist/serve/site-ui/_astro/_example_.jevZ7OdV.css +1 -0
  124. package/dist/serve/site-ui/_astro/_slug_.BoKXYrnu.css +1 -0
  125. package/dist/serve/site-ui/_astro/_studio_.BtYpqe1A.css +1 -0
  126. package/dist/serve/site-ui/_astro/app.BnMC0ywl.js +109 -0
  127. package/dist/serve/site-ui/_astro/app.BsFsMjn0.css +1 -0
  128. package/dist/serve/site-ui/_astro/app.DVXXR-WI.js +1 -0
  129. package/dist/serve/site-ui/_astro/chess-showcase.DzPO6kz0.js +1 -0
  130. package/dist/serve/site-ui/_astro/chess-source-explorer.C5k9c5yK.js +1 -0
  131. package/dist/serve/site-ui/_astro/chess-v2.CFHmd3UL.js +354 -0
  132. package/dist/serve/site-ui/_astro/client.D2ORs4B-.js +25 -0
  133. package/dist/serve/site-ui/_astro/example-runtime.CM0H02rx.js +291 -0
  134. package/dist/serve/site-ui/_astro/index.B4Kh80he.js +1 -0
  135. package/dist/serve/site-ui/_astro/index.DBy5LfQW.js +9 -0
  136. package/dist/serve/site-ui/_astro/index.DNyk7q8W.js +9 -0
  137. package/dist/serve/site-ui/_astro/jsx-runtime.D_zvdyIk.js +9 -0
  138. package/dist/serve/site-ui/_astro/reads.D1exkX1-.js +1 -0
  139. package/dist/serve/site-ui/_astro/sandbox-controls.BqMePr5V.js +1153 -0
  140. package/dist/serve/site-ui/_astro/seed.BCn5DhHS.js +20 -0
  141. package/dist/serve/site-ui/auth/index.html +11 -0
  142. package/dist/serve/site-ui/docs/_rhythm/index.html +100 -0
  143. package/dist/serve/site-ui/docs/agent/set-up-your-agent/index.html +43 -0
  144. package/dist/serve/site-ui/docs/agent/watch-and-review/index.html +26 -0
  145. package/dist/serve/site-ui/docs/agent/work-with-an-agent/index.html +70 -0
  146. package/dist/serve/{docs-ui → site-ui}/docs/ai-compat/index.html +3 -3
  147. package/dist/serve/site-ui/docs/api-reference/index.html +68 -0
  148. package/dist/serve/{docs-ui → site-ui}/docs/app-compat/index.html +3 -3
  149. package/dist/serve/{docs-ui → site-ui}/docs/auth-compat/index.html +3 -3
  150. package/dist/serve/site-ui/docs/build/ai-logic/index.html +64 -0
  151. package/dist/serve/site-ui/docs/build/authentication/index.html +66 -0
  152. package/dist/serve/site-ui/docs/build/cloud-firestore/index.html +84 -0
  153. package/dist/serve/site-ui/docs/build/cloud-messaging/index.html +71 -0
  154. package/dist/serve/site-ui/docs/build/cloud-storage/index.html +66 -0
  155. package/dist/serve/{docs-ui → site-ui}/docs/build/cloud-storage.md +2 -2
  156. package/dist/serve/site-ui/docs/build/realtime-database/index.html +67 -0
  157. package/dist/serve/site-ui/docs/conformance-scores/index.html +50 -0
  158. package/dist/serve/{docs-ui → site-ui}/docs/conformance-scores.md +3 -3
  159. package/dist/serve/site-ui/docs/create-pyric-reference-api/index.html +531 -0
  160. package/dist/serve/{docs-ui → site-ui}/docs/database-compat/index.html +211 -168
  161. package/dist/serve/{docs-ui → site-ui}/docs/database-compat.md +208 -170
  162. package/dist/serve/site-ui/docs/examples/chess/index.html +384 -0
  163. package/dist/serve/site-ui/docs/examples/chess.md +57 -0
  164. package/dist/serve/site-ui/docs/examples/index.html +3 -0
  165. package/dist/serve/site-ui/docs/examples.md +4 -0
  166. package/dist/serve/{docs-ui → site-ui}/docs/firestore-compat/index.html +55 -91
  167. package/dist/serve/{docs-ui → site-ui}/docs/firestore-compat.md +52 -88
  168. package/dist/serve/site-ui/docs/functions-rtdb-compat/index.html +73 -0
  169. package/dist/serve/site-ui/docs/get-started/how-the-swap-works/index.html +29 -0
  170. package/dist/serve/site-ui/docs/get-started/start-building/index.html +33 -0
  171. package/dist/serve/{docs-ui → site-ui}/docs/index.json +595 -26
  172. package/dist/serve/site-ui/docs/messaging-compat/index.html +324 -0
  173. package/dist/serve/{docs-ui → site-ui}/docs/messaging-compat.md +71 -1
  174. package/dist/serve/site-ui/docs/observe/resolve-runtime-status/index.html +28 -0
  175. package/dist/serve/site-ui/docs/observe/see-whats-happening/index.html +74 -0
  176. package/dist/serve/site-ui/docs/observe/shape-your-data/index.html +45 -0
  177. package/dist/serve/site-ui/docs/overview/index.html +17 -0
  178. package/dist/serve/site-ui/docs/pyric-admin-app-reference-api/index.html +186 -0
  179. package/dist/serve/{docs-ui → site-ui}/docs/pyric-admin-auth-reference-api/index.html +4 -4
  180. package/dist/serve/{docs-ui → site-ui}/docs/pyric-admin-database-reference-api/index.html +4 -4
  181. package/dist/serve/{docs-ui → site-ui}/docs/pyric-admin-firestore-reference-api/index.html +318 -202
  182. package/dist/serve/{docs-ui → site-ui}/docs/pyric-admin-firestore-reference-api.md +154 -27
  183. package/dist/serve/{docs-ui → site-ui}/docs/pyric-admin-messaging-reference-api/index.html +5 -5
  184. package/dist/serve/site-ui/docs/pyric-admin-storage-reference-api/index.html +318 -0
  185. package/dist/serve/{docs-ui → site-ui}/docs/pyric-ai-reference-api/index.html +5 -5
  186. package/dist/serve/site-ui/docs/pyric-ai-scripting-reference-api/index.html +160 -0
  187. package/dist/serve/site-ui/docs/pyric-app-reference-api/index.html +425 -0
  188. package/dist/serve/{docs-ui → site-ui}/docs/pyric-auth-reference-api/index.html +5 -5
  189. package/dist/serve/site-ui/docs/pyric-cli-assurance-browser-reference-api/index.html +60 -0
  190. package/dist/serve/{docs-ui → site-ui}/docs/pyric-cli-assurance-reference-api/index.html +4 -4
  191. package/dist/serve/{docs-ui → site-ui}/docs/pyric-cli-bridge-client-reference-api/index.html +4 -4
  192. package/dist/serve/site-ui/docs/pyric-cli-bridge-reference-api/index.html +507 -0
  193. package/dist/serve/site-ui/docs/pyric-cli-conformance-browser-reference-api/index.html +258 -0
  194. package/dist/serve/site-ui/docs/pyric-cli-conformance-docs-reference-api/index.html +51 -0
  195. package/dist/serve/site-ui/docs/pyric-cli-conformance-reference-api/index.html +308 -0
  196. package/dist/serve/site-ui/docs/pyric-cli-credentials-node-reference-api/index.html +68 -0
  197. package/dist/serve/{docs-ui → site-ui}/docs/pyric-cli-discover-reference-api/index.html +4 -4
  198. package/dist/serve/site-ui/docs/pyric-cli-register-reference-api/index.html +11 -0
  199. package/dist/serve/{docs-ui → site-ui}/docs/pyric-cli-remote-reference-api/index.html +4 -4
  200. package/dist/serve/{docs-ui → site-ui}/docs/pyric-cli-serve-worker-reference-api/index.html +1186 -1384
  201. package/dist/serve/{docs-ui → site-ui}/docs/pyric-cli-serve-worker-reference-api.md +817 -1291
  202. package/dist/serve/{docs-ui → site-ui}/docs/pyric-cli-verify-reference-api/index.html +4 -4
  203. package/dist/serve/site-ui/docs/pyric-cli-vite-reference-api/index.html +126 -0
  204. package/dist/serve/{docs-ui → site-ui}/docs/pyric-cli-vite-reference-api.md +1 -1
  205. package/dist/serve/site-ui/docs/pyric-database-reference-api/index.html +2641 -0
  206. package/dist/serve/{docs-ui → site-ui}/docs/pyric-database-reference-api.md +1055 -158
  207. package/dist/serve/{docs-ui → site-ui}/docs/pyric-firestore-reference-api/index.html +311 -249
  208. package/dist/serve/{docs-ui → site-ui}/docs/pyric-firestore-reference-api.md +72 -54
  209. package/dist/serve/site-ui/docs/pyric-messaging-reference-api/index.html +509 -0
  210. package/dist/serve/site-ui/docs/pyric-messaging-sw-reference-api/index.html +182 -0
  211. package/dist/serve/{docs-ui → site-ui}/docs/pyric-rules-reference-api/index.html +7 -26
  212. package/dist/serve/{docs-ui → site-ui}/docs/pyric-rules-reference-api.md +13 -23
  213. package/dist/serve/site-ui/docs/pyric-sandbox-database-reference-api/index.html +121 -0
  214. package/dist/serve/site-ui/docs/pyric-sandbox-firestore-reference-api/index.html +203 -0
  215. package/dist/serve/{docs-ui → site-ui}/docs/pyric-sandbox-reference-api/index.html +26 -5
  216. package/dist/serve/{docs-ui → site-ui}/docs/pyric-sandbox-reference-api.md +22 -22
  217. package/dist/serve/{docs-ui → site-ui}/docs/pyric-storage-reference-api/index.html +5 -15
  218. package/dist/serve/{docs-ui → site-ui}/docs/pyric-storage-reference-api.md +0 -13
  219. package/dist/serve/site-ui/docs/pyric-ui-agents-reference-api/index.html +639 -0
  220. package/dist/serve/site-ui/docs/pyric-ui-auth-hooks-reference-api/index.html +100 -0
  221. package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-auth-reference-api/index.html +4 -4
  222. package/dist/serve/site-ui/docs/pyric-ui-events-hooks-reference-api/index.html +24 -0
  223. package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-events-reference-api/index.html +4 -4
  224. package/dist/serve/site-ui/docs/pyric-ui-firestore-hooks-reference-api/index.html +136 -0
  225. package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-firestore-reference-api/index.html +7 -7
  226. package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-firestore-reference-api.md +4 -4
  227. package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-primitives-reference-api/index.html +4 -4
  228. package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-rtdb-reference-api/index.html +4 -4
  229. package/dist/serve/site-ui/docs/pyric-ui-rules-hooks-reference-api/index.html +16 -0
  230. package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-rules-reference-api/index.html +4 -4
  231. package/dist/serve/site-ui/docs/pyric-ui-storage-hooks-reference-api/index.html +176 -0
  232. package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-storage-reference-api/index.html +10 -11
  233. package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-storage-reference-api.md +7 -8
  234. package/dist/serve/site-ui/docs/pyric-ui-traffic-hooks-reference-api/index.html +188 -0
  235. package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-traffic-reference-api/index.html +4 -4
  236. package/dist/serve/{docs-ui → site-ui}/docs/rules-compat/index.html +87 -57
  237. package/dist/serve/{docs-ui → site-ui}/docs/rules-compat.md +84 -54
  238. package/dist/serve/site-ui/docs/secure/audit-your-rules/index.html +51 -0
  239. package/dist/serve/site-ui/docs/secure/firestore-rules-limits/index.html +106 -0
  240. package/dist/serve/site-ui/docs/secure/read-a-denial/index.html +41 -0
  241. package/dist/serve/site-ui/docs/secure/rtdb-rules-in-typescript/index.html +67 -0
  242. package/dist/serve/site-ui/docs/secure/rules-standard-library/index.html +159 -0
  243. package/dist/serve/{docs-ui → site-ui}/docs/secure/rules-standard-library.md +2 -2
  244. package/dist/serve/site-ui/docs/secure/secure-it-with-rules/index.html +47 -0
  245. package/dist/serve/site-ui/docs/secure/simulate-and-lint/index.html +95 -0
  246. package/dist/serve/site-ui/docs/secure/write-a-rules-test-suite/index.html +82 -0
  247. package/dist/serve/site-ui/docs/ship/ship-to-production/index.html +37 -0
  248. package/dist/serve/site-ui/docs/ship/test-in-node/index.html +75 -0
  249. package/dist/serve/{docs-ui → site-ui}/docs/storage-compat/index.html +8 -8
  250. package/dist/serve/{docs-ui → site-ui}/docs/storage-compat.md +5 -5
  251. package/dist/serve/site-ui/docs/trust/how-we-know-it-matches-firebase/index.html +132 -0
  252. package/dist/serve/site-ui/docs/trust/rules-standard-library/index.html +861 -0
  253. package/dist/serve/site-ui/docs/trust/rules-standard-library.md +344 -0
  254. package/dist/serve/site-ui/docs/trust/storage-rules-stdlib-research/index.html +582 -0
  255. package/dist/serve/site-ui/docs/trust/storage-rules-stdlib-research.md +448 -0
  256. package/dist/serve/site-ui/docs/trust/versioning-and-compatibility/index.html +14 -0
  257. package/dist/serve/{docs-ui → site-ui}/docs/tutorial/index.html +4 -4
  258. package/dist/serve/{docs-ui → site-ui}/docs/tutorial.md +1 -1
  259. package/dist/serve/site-ui/examples/chess/index.html +2 -0
  260. package/dist/serve/site-ui/examples/firestore-first-write/index.html +2 -0
  261. package/dist/serve/site-ui/firestore/index.html +11 -0
  262. package/dist/serve/site-ui/index.html +11 -0
  263. package/dist/serve/{docs-ui → site-ui}/llms.txt +6 -2
  264. package/dist/serve/site-ui/rtdb/index.html +11 -0
  265. package/dist/serve/site-ui/settings/index.html +11 -0
  266. package/dist/serve/site-ui/storage/index.html +11 -0
  267. package/dist/serve/site-ui/studio-routes.json +1 -0
  268. package/dist/serve/site-ui/traffic/index.html +11 -0
  269. package/dist/serve/standalone-assets.d.ts +4 -10
  270. package/dist/serve/standalone-assets.d.ts.map +1 -1
  271. package/dist/serve/standalone-assets.js +8 -21
  272. package/dist/serve/standalone-assets.js.map +1 -1
  273. package/dist/serve/vite-ai-config.d.ts +2 -0
  274. package/dist/serve/vite-ai-config.d.ts.map +1 -1
  275. package/dist/serve/vite-ai-config.js +4 -0
  276. package/dist/serve/vite-ai-config.js.map +1 -1
  277. package/dist/serve/vite-functions-development.d.ts +29 -0
  278. package/dist/serve/vite-functions-development.d.ts.map +1 -0
  279. package/dist/serve/vite-functions-development.js +150 -0
  280. package/dist/serve/vite-functions-development.js.map +1 -0
  281. package/dist/serve/vite-generation-bridge.d.ts +17 -0
  282. package/dist/serve/vite-generation-bridge.d.ts.map +1 -0
  283. package/dist/serve/vite-generation-bridge.js +47 -0
  284. package/dist/serve/vite-generation-bridge.js.map +1 -0
  285. package/dist/serve/vite-generation-functions.d.ts +35 -0
  286. package/dist/serve/vite-generation-functions.d.ts.map +1 -0
  287. package/dist/serve/vite-generation-functions.js +46 -0
  288. package/dist/serve/vite-generation-functions.js.map +1 -0
  289. package/dist/serve/vite-generation-middleware.d.ts +10 -0
  290. package/dist/serve/vite-generation-middleware.d.ts.map +1 -0
  291. package/dist/serve/vite-generation-middleware.js +40 -0
  292. package/dist/serve/vite-generation-middleware.js.map +1 -0
  293. package/dist/serve/vite-generation-rules-watch.d.ts +8 -0
  294. package/dist/serve/vite-generation-rules-watch.d.ts.map +1 -0
  295. package/dist/serve/vite-generation-rules-watch.js +33 -0
  296. package/dist/serve/vite-generation-rules-watch.js.map +1 -0
  297. package/dist/serve/vite-module-swap.d.ts +16 -0
  298. package/dist/serve/vite-module-swap.d.ts.map +1 -0
  299. package/dist/serve/vite-module-swap.js +96 -0
  300. package/dist/serve/vite-module-swap.js.map +1 -0
  301. package/dist/serve/vite-page-runtime.d.ts +29 -0
  302. package/dist/serve/vite-page-runtime.d.ts.map +1 -0
  303. package/dist/serve/vite-page-runtime.js +71 -0
  304. package/dist/serve/vite-page-runtime.js.map +1 -0
  305. package/dist/serve/vite-plugin.d.ts +44 -4
  306. package/dist/serve/vite-plugin.d.ts.map +1 -1
  307. package/dist/serve/vite-plugin.js +62 -864
  308. package/dist/serve/vite-plugin.js.map +1 -1
  309. package/dist/serve/vite-sandbox-generation.d.ts +57 -0
  310. package/dist/serve/vite-sandbox-generation.d.ts.map +1 -0
  311. package/dist/serve/vite-sandbox-generation.js +178 -0
  312. package/dist/serve/vite-sandbox-generation.js.map +1 -0
  313. package/dist/serve/vite-worker-runtime.d.ts +1 -1
  314. package/dist/serve/vite-worker-runtime.d.ts.map +1 -1
  315. package/dist/serve/vite-worker-runtime.js +8 -4
  316. package/dist/serve/vite-worker-runtime.js.map +1 -1
  317. package/dist/serve/worker/client/disconnect.d.ts.map +1 -1
  318. package/dist/serve/worker/client/disconnect.js +2 -0
  319. package/dist/serve/worker/client/disconnect.js.map +1 -1
  320. package/dist/serve/worker/client/handles.d.ts +5 -0
  321. package/dist/serve/worker/client/handles.d.ts.map +1 -1
  322. package/dist/serve/worker/client/handles.js.map +1 -1
  323. package/dist/serve/worker/client/pagehide.d.ts +13 -0
  324. package/dist/serve/worker/client/pagehide.d.ts.map +1 -0
  325. package/dist/serve/worker/client/pagehide.js +19 -0
  326. package/dist/serve/worker/client/pagehide.js.map +1 -0
  327. package/dist/serve/worker/client/rtdb-admin.d.ts +8 -0
  328. package/dist/serve/worker/client/rtdb-admin.d.ts.map +1 -0
  329. package/dist/serve/worker/client/rtdb-admin.js +39 -0
  330. package/dist/serve/worker/client/rtdb-admin.js.map +1 -0
  331. package/dist/serve/worker/client/rtdb-connection-lifecycle.d.ts +15 -0
  332. package/dist/serve/worker/client/rtdb-connection-lifecycle.d.ts.map +1 -0
  333. package/dist/serve/worker/client/rtdb-connection-lifecycle.js +45 -0
  334. package/dist/serve/worker/client/rtdb-connection-lifecycle.js.map +1 -0
  335. package/dist/serve/worker/client/rtdb-controls.d.ts +6 -0
  336. package/dist/serve/worker/client/rtdb-controls.d.ts.map +1 -0
  337. package/dist/serve/worker/client/rtdb-controls.js +8 -0
  338. package/dist/serve/worker/client/rtdb-controls.js.map +1 -0
  339. package/dist/serve/worker/client/rtdb-listeners.d.ts +24 -0
  340. package/dist/serve/worker/client/rtdb-listeners.d.ts.map +1 -0
  341. package/dist/serve/worker/client/rtdb-listeners.js +262 -0
  342. package/dist/serve/worker/client/rtdb-listeners.js.map +1 -0
  343. package/dist/serve/worker/client/rtdb-reads.d.ts +4 -0
  344. package/dist/serve/worker/client/rtdb-reads.d.ts.map +1 -0
  345. package/dist/serve/worker/client/rtdb-reads.js +11 -0
  346. package/dist/serve/worker/client/rtdb-reads.js.map +1 -0
  347. package/dist/serve/worker/client/rtdb-references.d.ts +19 -0
  348. package/dist/serve/worker/client/rtdb-references.d.ts.map +1 -0
  349. package/dist/serve/worker/client/rtdb-references.js +63 -0
  350. package/dist/serve/worker/client/rtdb-references.js.map +1 -0
  351. package/dist/serve/worker/client/rtdb-snapshots.d.ts +20 -0
  352. package/dist/serve/worker/client/rtdb-snapshots.d.ts.map +1 -0
  353. package/dist/serve/worker/client/rtdb-snapshots.js +64 -0
  354. package/dist/serve/worker/client/rtdb-snapshots.js.map +1 -0
  355. package/dist/serve/worker/client/rtdb-transactions.d.ts +14 -0
  356. package/dist/serve/worker/client/rtdb-transactions.d.ts.map +1 -0
  357. package/dist/serve/worker/client/rtdb-transactions.js +34 -0
  358. package/dist/serve/worker/client/rtdb-transactions.js.map +1 -0
  359. package/dist/serve/worker/client/rtdb-writes.d.ts +8 -0
  360. package/dist/serve/worker/client/rtdb-writes.d.ts.map +1 -0
  361. package/dist/serve/worker/client/rtdb-writes.js +65 -0
  362. package/dist/serve/worker/client/rtdb-writes.js.map +1 -0
  363. package/dist/serve/worker/client.d.ts +0 -2
  364. package/dist/serve/worker/client.d.ts.map +1 -1
  365. package/dist/serve/worker/client.js +0 -2
  366. package/dist/serve/worker/client.js.map +1 -1
  367. package/dist/serve/worker/entry.js +2 -2
  368. package/dist/serve/worker/entry.js.map +1 -1
  369. package/dist/serve/worker/host/dispatch.d.ts +2 -0
  370. package/dist/serve/worker/host/dispatch.d.ts.map +1 -1
  371. package/dist/serve/worker/host/dispatch.js +24 -2
  372. package/dist/serve/worker/host/dispatch.js.map +1 -1
  373. package/dist/serve/worker/host/rtdb.d.ts +6 -2
  374. package/dist/serve/worker/host/rtdb.d.ts.map +1 -1
  375. package/dist/serve/worker/host/rtdb.js +224 -2
  376. package/dist/serve/worker/host/rtdb.js.map +1 -1
  377. package/dist/serve/worker/host/studio.d.ts.map +1 -1
  378. package/dist/serve/worker/host/studio.js +2 -0
  379. package/dist/serve/worker/host/studio.js.map +1 -1
  380. package/dist/serve/worker/host/subscriptions.d.ts.map +1 -1
  381. package/dist/serve/worker/host/subscriptions.js +3 -3
  382. package/dist/serve/worker/host/subscriptions.js.map +1 -1
  383. package/dist/serve/worker/host.d.ts +1 -1
  384. package/dist/serve/worker/host.d.ts.map +1 -1
  385. package/dist/serve/worker/host.js +1 -1
  386. package/dist/serve/worker/host.js.map +1 -1
  387. package/dist/serve/worker/index.d.ts +16 -1
  388. package/dist/serve/worker/index.d.ts.map +1 -1
  389. package/dist/serve/worker/index.js +17 -4
  390. package/dist/serve/worker/index.js.map +1 -1
  391. package/dist/serve/worker/protocol.d.ts +57 -0
  392. package/dist/serve/worker/protocol.d.ts.map +1 -1
  393. package/dist/serve/worker/protocol.js.map +1 -1
  394. package/dist/serve/worker/rtdb-value-equality.d.ts +3 -0
  395. package/dist/serve/worker/rtdb-value-equality.d.ts.map +1 -0
  396. package/dist/serve/worker/rtdb-value-equality.js +18 -0
  397. package/dist/serve/worker/rtdb-value-equality.js.map +1 -0
  398. package/dist/serve/worker/serve-init.js +2 -2
  399. package/dist/serve/worker/serve-init.js.map +1 -1
  400. package/dist/serve/worker/service-worker-relay.js +2 -2
  401. package/dist/serve/worker/service-worker-relay.js.map +1 -1
  402. package/package.json +7 -5
  403. package/src/assurance/.generated/conformance-verdicts.ts +120 -75
  404. package/src/cli/serve.ts +216 -308
  405. package/src/cli/service-command-records/database-rules-generate.ts +3 -0
  406. package/src/cli/service-command-records/database-rules-lint.ts +3 -0
  407. package/src/cli/service-command-records/database-rules-simulate.ts +3 -0
  408. package/src/cli/service-command-records/database-rules-validate.ts +3 -0
  409. package/src/cli/service-command-records/firestore-indexes-generate.ts +3 -0
  410. package/src/cli/service-command-records/firestore-rules-lint.ts +3 -0
  411. package/src/cli/service-command-records/firestore-rules-resolve.ts +3 -0
  412. package/src/cli/service-command-records/firestore-rules-simulate.ts +3 -0
  413. package/src/cli/service-command-records/firestore-rules-validate.ts +3 -0
  414. package/src/cli/service-command-records/storage-rules-lint.ts +3 -0
  415. package/src/cli/service-command-records/storage-rules-simulate.ts +3 -0
  416. package/src/cli/service-commands.generated.ts +27 -0
  417. package/src/cli/service-commands.test.ts +43 -0
  418. package/src/cli/service-commands.ts +36 -51
  419. package/src/conformance/.generated/can-i-use-browser.ts +1 -1
  420. package/src/conformance/.generated/can-i-use.ts +1 -1
  421. package/src/conformance/.generated/conformance-docs.ts +1 -1
  422. package/src/functions-rtdb/development-runtime.ts +299 -0
  423. package/src/serve/bridge-mount.ts +253 -19
  424. package/src/serve/bundler.ts +17 -36
  425. package/src/serve/entries/app-client.ts +5 -4
  426. package/src/serve/entries/auth-helper-core.ts +83 -30
  427. package/src/serve/entries/database.ts +180 -57
  428. package/src/serve/entries/init.ts +30 -20
  429. package/src/serve/html-injection.ts +65 -0
  430. package/src/serve/namespace.ts +26 -169
  431. package/src/serve/runtime/worker-generation.ts +29 -7
  432. package/src/serve/runtime/worker-replacement.ts +1 -1
  433. package/src/serve/sandbox-session.ts +233 -0
  434. package/src/serve/server.ts +20 -5
  435. package/src/serve/site-tree.ts +146 -0
  436. package/src/serve/standalone-assets.ts +9 -26
  437. package/src/serve/vite-ai-config.ts +8 -0
  438. package/src/serve/vite-functions-development.ts +201 -0
  439. package/src/serve/vite-generation-bridge.ts +66 -0
  440. package/src/serve/vite-generation-functions.ts +78 -0
  441. package/src/serve/vite-generation-middleware.ts +56 -0
  442. package/src/serve/vite-generation-rules-watch.ts +37 -0
  443. package/src/serve/vite-module-swap.ts +119 -0
  444. package/src/serve/vite-page-runtime.ts +100 -0
  445. package/src/serve/vite-plugin.ts +78 -882
  446. package/src/serve/vite-sandbox-generation.ts +255 -0
  447. package/src/serve/vite-worker-runtime.ts +12 -5
  448. package/src/serve/worker/client/disconnect.ts +3 -1
  449. package/src/serve/worker/client/handles.ts +5 -0
  450. package/src/serve/worker/client/pagehide.ts +31 -0
  451. package/src/serve/worker/client/rtdb-admin.ts +74 -0
  452. package/src/serve/worker/client/rtdb-connection-lifecycle.ts +52 -0
  453. package/src/serve/worker/client/rtdb-controls.ts +8 -0
  454. package/src/serve/worker/client/rtdb-listeners.ts +337 -0
  455. package/src/serve/worker/client/rtdb-reads.ts +12 -0
  456. package/src/serve/worker/client/rtdb-references.ts +85 -0
  457. package/src/serve/worker/client/rtdb-snapshots.ts +118 -0
  458. package/src/serve/worker/client/rtdb-transactions.ts +51 -0
  459. package/src/serve/worker/client/rtdb-writes.ts +74 -0
  460. package/src/serve/worker/client.ts +0 -2
  461. package/src/serve/worker/entry.ts +2 -2
  462. package/src/serve/worker/host/dispatch.ts +22 -2
  463. package/src/serve/worker/host/rtdb.ts +243 -2
  464. package/src/serve/worker/host/studio.ts +2 -0
  465. package/src/serve/worker/host/subscriptions.ts +8 -4
  466. package/src/serve/worker/host.ts +1 -1
  467. package/src/serve/worker/index.ts +58 -10
  468. package/src/serve/worker/protocol.ts +23 -2
  469. package/src/serve/worker/rtdb-value-equality.ts +17 -0
  470. package/src/serve/worker/serve-init.ts +2 -2
  471. package/src/serve/worker/service-worker-relay.ts +2 -2
  472. package/dist/serve/docs-ui/_astro/_slug_.DUci-duz.css +0 -1
  473. package/dist/serve/docs-ui/docs/_rhythm/index.html +0 -100
  474. package/dist/serve/docs-ui/docs/agent/set-up-your-agent/index.html +0 -43
  475. package/dist/serve/docs-ui/docs/agent/watch-and-review/index.html +0 -26
  476. package/dist/serve/docs-ui/docs/agent/work-with-an-agent/index.html +0 -70
  477. package/dist/serve/docs-ui/docs/api-reference/index.html +0 -68
  478. package/dist/serve/docs-ui/docs/build/ai-logic/index.html +0 -64
  479. package/dist/serve/docs-ui/docs/build/authentication/index.html +0 -66
  480. package/dist/serve/docs-ui/docs/build/cloud-firestore/index.html +0 -70
  481. package/dist/serve/docs-ui/docs/build/cloud-messaging/index.html +0 -71
  482. package/dist/serve/docs-ui/docs/build/cloud-storage/index.html +0 -66
  483. package/dist/serve/docs-ui/docs/build/realtime-database/index.html +0 -67
  484. package/dist/serve/docs-ui/docs/conformance-scores/index.html +0 -50
  485. package/dist/serve/docs-ui/docs/create-pyric-reference-api/index.html +0 -531
  486. package/dist/serve/docs-ui/docs/functions-rtdb-compat/index.html +0 -73
  487. package/dist/serve/docs-ui/docs/get-started/how-the-swap-works/index.html +0 -29
  488. package/dist/serve/docs-ui/docs/get-started/start-building/index.html +0 -33
  489. package/dist/serve/docs-ui/docs/messaging-compat/index.html +0 -265
  490. package/dist/serve/docs-ui/docs/observe/resolve-runtime-status/index.html +0 -28
  491. package/dist/serve/docs-ui/docs/observe/see-whats-happening/index.html +0 -74
  492. package/dist/serve/docs-ui/docs/observe/shape-your-data/index.html +0 -45
  493. package/dist/serve/docs-ui/docs/overview/index.html +0 -17
  494. package/dist/serve/docs-ui/docs/pyric-admin-app-reference-api/index.html +0 -186
  495. package/dist/serve/docs-ui/docs/pyric-admin-storage-reference-api/index.html +0 -318
  496. package/dist/serve/docs-ui/docs/pyric-ai-scripting-reference-api/index.html +0 -160
  497. package/dist/serve/docs-ui/docs/pyric-app-reference-api/index.html +0 -425
  498. package/dist/serve/docs-ui/docs/pyric-cli-assurance-browser-reference-api/index.html +0 -60
  499. package/dist/serve/docs-ui/docs/pyric-cli-bridge-reference-api/index.html +0 -507
  500. package/dist/serve/docs-ui/docs/pyric-cli-conformance-browser-reference-api/index.html +0 -258
  501. package/dist/serve/docs-ui/docs/pyric-cli-conformance-docs-reference-api/index.html +0 -51
  502. package/dist/serve/docs-ui/docs/pyric-cli-conformance-reference-api/index.html +0 -308
  503. package/dist/serve/docs-ui/docs/pyric-cli-credentials-node-reference-api/index.html +0 -68
  504. package/dist/serve/docs-ui/docs/pyric-cli-register-reference-api/index.html +0 -11
  505. package/dist/serve/docs-ui/docs/pyric-cli-vite-reference-api/index.html +0 -126
  506. package/dist/serve/docs-ui/docs/pyric-database-reference-api/index.html +0 -1852
  507. package/dist/serve/docs-ui/docs/pyric-messaging-reference-api/index.html +0 -509
  508. package/dist/serve/docs-ui/docs/pyric-messaging-sw-reference-api/index.html +0 -182
  509. package/dist/serve/docs-ui/docs/pyric-sandbox-database-reference-api/index.html +0 -121
  510. package/dist/serve/docs-ui/docs/pyric-sandbox-firestore-reference-api/index.html +0 -203
  511. package/dist/serve/docs-ui/docs/pyric-ui-agents-reference-api/index.html +0 -639
  512. package/dist/serve/docs-ui/docs/pyric-ui-auth-hooks-reference-api/index.html +0 -100
  513. package/dist/serve/docs-ui/docs/pyric-ui-events-hooks-reference-api/index.html +0 -24
  514. package/dist/serve/docs-ui/docs/pyric-ui-firestore-hooks-reference-api/index.html +0 -136
  515. package/dist/serve/docs-ui/docs/pyric-ui-rules-hooks-reference-api/index.html +0 -16
  516. package/dist/serve/docs-ui/docs/pyric-ui-storage-hooks-reference-api/index.html +0 -176
  517. package/dist/serve/docs-ui/docs/pyric-ui-traffic-hooks-reference-api/index.html +0 -188
  518. package/dist/serve/docs-ui/docs/secure/audit-your-rules/index.html +0 -51
  519. package/dist/serve/docs-ui/docs/secure/firestore-rules-limits/index.html +0 -106
  520. package/dist/serve/docs-ui/docs/secure/read-a-denial/index.html +0 -41
  521. package/dist/serve/docs-ui/docs/secure/rtdb-rules-in-typescript/index.html +0 -67
  522. package/dist/serve/docs-ui/docs/secure/rules-standard-library/index.html +0 -159
  523. package/dist/serve/docs-ui/docs/secure/secure-it-with-rules/index.html +0 -47
  524. package/dist/serve/docs-ui/docs/secure/simulate-and-lint/index.html +0 -95
  525. package/dist/serve/docs-ui/docs/secure/write-a-rules-test-suite/index.html +0 -82
  526. package/dist/serve/docs-ui/docs/ship/ship-to-production/index.html +0 -37
  527. package/dist/serve/docs-ui/docs/ship/test-in-node/index.html +0 -75
  528. package/dist/serve/docs-ui/docs/trust/how-we-know-it-matches-firebase/index.html +0 -132
  529. package/dist/serve/docs-ui/docs/trust/versioning-and-compatibility/index.html +0 -14
  530. package/dist/serve/docs-ui/index.html +0 -1
  531. package/dist/serve/studio-ui/assets/RulesCodeEditor-BDlH-5lp.js +0 -23
  532. package/dist/serve/studio-ui/assets/index-Bf9SSE8L.js +0 -1218
  533. package/dist/serve/studio-ui/assets/index-BlSGru_r.css +0 -1
  534. package/dist/serve/studio-ui/assets/seed-D_UjxfOU.js +0 -20
  535. package/dist/serve/studio-ui/index.html +0 -32
  536. package/dist/serve/worker/client/rtdb.d.ts +0 -36
  537. package/dist/serve/worker/client/rtdb.d.ts.map +0 -1
  538. package/dist/serve/worker/client/rtdb.js +0 -241
  539. package/dist/serve/worker/client/rtdb.js.map +0 -1
  540. package/src/serve/worker/client/rtdb.ts +0 -311
  541. /package/dist/serve/{docs-ui → site-ui}/404.html +0 -0
  542. /package/dist/serve/{docs-ui → site-ui}/_astro/_slug_.CXh9yTP1.css +0 -0
  543. /package/dist/serve/{docs-ui → site-ui}/docs/_rhythm.md +0 -0
  544. /package/dist/serve/{docs-ui → site-ui}/docs/agent/set-up-your-agent.md +0 -0
  545. /package/dist/serve/{docs-ui → site-ui}/docs/agent/watch-and-review.md +0 -0
  546. /package/dist/serve/{docs-ui → site-ui}/docs/agent/work-with-an-agent.md +0 -0
  547. /package/dist/serve/{docs-ui → site-ui}/docs/ai-compat.md +0 -0
  548. /package/dist/serve/{docs-ui → site-ui}/docs/api-reference.md +0 -0
  549. /package/dist/serve/{docs-ui → site-ui}/docs/app-compat.md +0 -0
  550. /package/dist/serve/{docs-ui → site-ui}/docs/auth-compat.md +0 -0
  551. /package/dist/serve/{docs-ui → site-ui}/docs/build/ai-logic.md +0 -0
  552. /package/dist/serve/{docs-ui → site-ui}/docs/build/authentication.md +0 -0
  553. /package/dist/serve/{docs-ui → site-ui}/docs/build/cloud-firestore.md +0 -0
  554. /package/dist/serve/{docs-ui → site-ui}/docs/build/cloud-messaging.md +0 -0
  555. /package/dist/serve/{docs-ui → site-ui}/docs/build/realtime-database.md +0 -0
  556. /package/dist/serve/{docs-ui → site-ui}/docs/create-pyric-reference-api.md +0 -0
  557. /package/dist/serve/{docs-ui → site-ui}/docs/functions-rtdb-compat.md +0 -0
  558. /package/dist/serve/{docs-ui → site-ui}/docs/get-started/how-the-swap-works.md +0 -0
  559. /package/dist/serve/{docs-ui → site-ui}/docs/get-started/start-building.md +0 -0
  560. /package/dist/serve/{docs-ui → site-ui}/docs/index.html +0 -0
  561. /package/dist/serve/{docs-ui → site-ui}/docs/observe/resolve-runtime-status.md +0 -0
  562. /package/dist/serve/{docs-ui → site-ui}/docs/observe/see-whats-happening.md +0 -0
  563. /package/dist/serve/{docs-ui → site-ui}/docs/observe/shape-your-data.md +0 -0
  564. /package/dist/serve/{docs-ui → site-ui}/docs/overview.md +0 -0
  565. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-admin-app-reference-api.md +0 -0
  566. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-admin-auth-reference-api.md +0 -0
  567. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-admin-database-reference-api.md +0 -0
  568. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-admin-messaging-reference-api.md +0 -0
  569. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-admin-storage-reference-api.md +0 -0
  570. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-ai-reference-api.md +0 -0
  571. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-ai-scripting-reference-api.md +0 -0
  572. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-app-reference-api.md +0 -0
  573. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-auth-reference-api.md +0 -0
  574. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-cli-assurance-browser-reference-api.md +0 -0
  575. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-cli-assurance-reference-api.md +0 -0
  576. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-cli-bridge-client-reference-api.md +0 -0
  577. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-cli-bridge-reference-api.md +0 -0
  578. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-cli-conformance-browser-reference-api.md +0 -0
  579. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-cli-conformance-docs-reference-api.md +0 -0
  580. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-cli-conformance-reference-api.md +0 -0
  581. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-cli-credentials-node-reference-api.md +0 -0
  582. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-cli-discover-reference-api.md +0 -0
  583. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-cli-register-reference-api.md +0 -0
  584. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-cli-remote-reference-api.md +0 -0
  585. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-cli-verify-reference-api.md +0 -0
  586. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-messaging-reference-api.md +0 -0
  587. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-messaging-sw-reference-api.md +0 -0
  588. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-sandbox-database-reference-api.md +0 -0
  589. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-sandbox-firestore-reference-api.md +0 -0
  590. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-agents-reference-api.md +0 -0
  591. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-auth-hooks-reference-api.md +0 -0
  592. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-auth-reference-api.md +0 -0
  593. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-events-hooks-reference-api.md +0 -0
  594. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-events-reference-api.md +0 -0
  595. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-firestore-hooks-reference-api.md +0 -0
  596. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-primitives-reference-api.md +0 -0
  597. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-rtdb-reference-api.md +0 -0
  598. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-rules-hooks-reference-api.md +0 -0
  599. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-rules-reference-api.md +0 -0
  600. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-storage-hooks-reference-api.md +0 -0
  601. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-traffic-hooks-reference-api.md +0 -0
  602. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-traffic-reference-api.md +0 -0
  603. /package/dist/serve/{docs-ui → site-ui}/docs/secure/audit-your-rules.md +0 -0
  604. /package/dist/serve/{docs-ui → site-ui}/docs/secure/firestore-rules-limits.md +0 -0
  605. /package/dist/serve/{docs-ui → site-ui}/docs/secure/read-a-denial.md +0 -0
  606. /package/dist/serve/{docs-ui → site-ui}/docs/secure/rtdb-rules-in-typescript.md +0 -0
  607. /package/dist/serve/{docs-ui → site-ui}/docs/secure/secure-it-with-rules.md +0 -0
  608. /package/dist/serve/{docs-ui → site-ui}/docs/secure/simulate-and-lint.md +0 -0
  609. /package/dist/serve/{docs-ui → site-ui}/docs/secure/write-a-rules-test-suite.md +0 -0
  610. /package/dist/serve/{docs-ui → site-ui}/docs/ship/ship-to-production.md +0 -0
  611. /package/dist/serve/{docs-ui → site-ui}/docs/ship/test-in-node.md +0 -0
  612. /package/dist/serve/{docs-ui → site-ui}/docs/trust/how-we-know-it-matches-firebase.md +0 -0
  613. /package/dist/serve/{docs-ui → site-ui}/docs/trust/versioning-and-compatibility.md +0 -0
  614. /package/dist/serve/{studio-ui → site-ui}/pyric-logo.svg +0 -0
@@ -55,7 +55,7 @@ import { createIndexedDBBackend } from 'pyric/sandbox';
55
55
 
56
56
  import {
57
57
  handleMessage,
58
- cleanupPort,
58
+ cleanupPortWithDisconnect,
59
59
  type HostCtx,
60
60
  type PortLike,
61
61
  } from './host.js';
@@ -188,7 +188,7 @@ workerScope.onconnect = (e: MessageEvent) => {
188
188
  // best-effort; subscriptions also GC when the worker itself dies.
189
189
  port.addEventListener('close', () => {
190
190
  retirement.disconnect(port);
191
- if (_ctx) cleanupPort(_ctx, port as unknown as PortLike);
191
+ if (_ctx) void cleanupPortWithDisconnect(_ctx, port as unknown as PortLike).catch(() => undefined);
192
192
  });
193
193
  };
194
194
 
@@ -61,7 +61,7 @@ import { isFirestoreReadOp, handleFirestoreReadOp } from './firestore-reads.js';
61
61
  import { isFirestoreWriteOp, handleFirestoreWriteOp } from './firestore-writes.js';
62
62
  import { isRulesOp, handleRulesOp } from './rules.js';
63
63
  import { isAdminFirestoreOp, handleAdminFirestoreOp } from './admin-firestore.js';
64
- import { isRtdbOp, handleRtdbOp } from './rtdb.js';
64
+ import { isRtdbOp, handleRtdbOp, drainPortRtdbDisconnects, forgetPortRtdbConnection } from './rtdb.js';
65
65
  import { isStorageOp, handleStorageOp } from './storage.js';
66
66
  import { isConnectionOp, handleConnectionOp } from './connection.js';
67
67
  import { isStudioOp, handleStudioOp } from './studio.js';
@@ -256,7 +256,7 @@ async function dispatchMessage(
256
256
  }
257
257
  } else if (msg.t === 'disconnect') {
258
258
  try {
259
- cleanupPort(ctx, port);
259
+ await cleanupPortWithDisconnect(ctx, port);
260
260
  ok(port, msg.id, undefined);
261
261
  } catch (error) {
262
262
  fail(port, msg.id, error);
@@ -266,6 +266,25 @@ async function dispatchMessage(
266
266
  }
267
267
  }
268
268
 
269
+ /** Best-effort close path: drain queued RTDB work before session teardown. */
270
+ export async function cleanupPortWithDisconnect(ctx: HostCtx, port: PortLike): Promise<void> {
271
+ let drainFailure: unknown;
272
+ try {
273
+ await drainPortRtdbDisconnects(ctx, port);
274
+ } catch (error) {
275
+ drainFailure = error;
276
+ }
277
+ try {
278
+ cleanupPort(ctx, port);
279
+ } catch (error) {
280
+ if (drainFailure !== undefined) {
281
+ throw new AggregateError([drainFailure, error], 'Multiple SharedWorker port resources failed to tear down');
282
+ }
283
+ throw error;
284
+ }
285
+ if (drainFailure !== undefined) throw drainFailure;
286
+ }
287
+
269
288
  // ─── Port cleanup ─────────────────────────────────────────────────────────
270
289
 
271
290
  /**
@@ -303,6 +322,7 @@ export function cleanupPort(ctx: HostCtx, port: PortLike): void {
303
322
  // Presence: best-effort remove this port's logical client when it was the
304
323
  // last association (lease expiry remains the correctness path).
305
324
  attempt(() => { cleanupPortPresence(ctx, port); });
325
+ attempt(() => { forgetPortRtdbConnection(ctx, port); });
306
326
 
307
327
  const portSubs = ctx.subs.get(port);
308
328
  if (portSubs) {
@@ -14,23 +14,71 @@ import {
14
14
  ref as rtdbRef,
15
15
  get as rtdbGet,
16
16
  set as rtdbSet,
17
+ setPriority as rtdbSetPriority,
18
+ setWithPriority as rtdbSetWithPriority,
17
19
  update as rtdbUpdate,
18
20
  remove as rtdbRemove,
21
+ onDisconnect as rtdbOnDisconnect,
19
22
  serverTimestamp as rtdbServerTimestamp,
23
+ runTransaction as rtdbRunTransaction,
24
+ QUERY_SYMBOL,
20
25
  sandbox as rtdbSandbox,
21
26
  type DataSnapshot,
27
+ type DatabaseReference,
28
+ type Query,
22
29
  } from 'pyric/database';
30
+ import {
31
+ DisconnectOperationQueue,
32
+ type DisconnectOperation,
33
+ } from 'pyric/database/internal';
23
34
 
24
- import type { OpMessage } from '../protocol.js';
35
+ import type { OpMessage, RtdbQuerySpec } from '../protocol.js';
25
36
  import { type HostCtx, type PortLike, ok, fail, bestEffortFlush } from '../host-context.js';
26
37
  import { lensRtdb } from './core.js';
38
+ import { sameRtdbValue } from '../rtdb-value-equality.js';
27
39
 
28
40
  export function rtdbSnapToWire(snap: DataSnapshot): unknown {
41
+ const entries: Array<{
42
+ key: string;
43
+ value: unknown;
44
+ priority: string | number | null;
45
+ exportValue: unknown;
46
+ }> = [];
47
+ snap.forEach((child) => {
48
+ if (child.key !== null) {
49
+ entries.push({
50
+ key: child.key,
51
+ value: child.val(),
52
+ priority: child.priority,
53
+ exportValue: child.exportVal(),
54
+ });
55
+ }
56
+ });
29
57
  return {
30
58
  key: snap.key,
31
59
  exists: snap.exists(),
32
60
  value: snap.val(),
33
61
  size: snap.size,
62
+ priority: snap.priority,
63
+ exportValue: snap.exportVal(),
64
+ entries,
65
+ };
66
+ }
67
+
68
+ export function rtdbTarget(
69
+ db: Parameters<typeof rtdbRef>[0],
70
+ path: string,
71
+ spec?: RtdbQuerySpec,
72
+ ): DatabaseReference | Query {
73
+ const targetRef = rtdbRef(db, path);
74
+ if (!spec) return targetRef;
75
+ return {
76
+ ref: targetRef,
77
+ _spec: spec,
78
+ [QUERY_SYMBOL]: true,
79
+ isEqual: (other) => other === null ? false : other.ref === targetRef && other._spec === spec,
80
+ toJSON: () => targetRef.toString(),
81
+ toString: () => targetRef.toString(),
34
82
  };
35
83
  }
36
84
 
@@ -50,12 +98,102 @@ function resolveRtdbSentinels(value: unknown): unknown {
50
98
  const RTDB_METHODS = new Set<string>([
51
99
  'rtdb.get',
52
100
  'rtdb.set',
101
+ 'rtdb.setPriority',
102
+ 'rtdb.setWithPriority',
53
103
  'rtdb.update',
54
104
  'rtdb.remove',
55
105
  'rtdb.push',
56
106
  'rtdb.adminSnapshot',
107
+ 'rtdb.onDisconnectSet',
108
+ 'rtdb.onDisconnectUpdate',
109
+ 'rtdb.onDisconnectRemove',
110
+ 'rtdb.onDisconnectCancel',
111
+ 'rtdb.goOffline',
112
+ 'rtdb.goOnline',
113
+ 'rtdb.transactionCommit',
57
114
  ]);
58
115
 
116
+ interface PortDisconnectMetadata {
117
+ actAs?: OpMessage['actAs'];
118
+ }
119
+
120
+ type PortDisconnectOperation = DisconnectOperation<PortDisconnectMetadata>;
121
+
122
+ const disconnectQueues = new WeakMap<HostCtx, Map<PortLike, DisconnectOperationQueue<PortDisconnectMetadata>>>();
123
+ const offlinePorts = new WeakMap<HostCtx, Set<PortLike>>();
124
+
125
+ function offlinePortSet(ctx: HostCtx): Set<PortLike> {
126
+ let ports = offlinePorts.get(ctx);
127
+ if (!ports) offlinePorts.set(ctx, ports = new Set());
128
+ return ports;
129
+ }
130
+
131
+ function portQueue(ctx: HostCtx, port: PortLike): DisconnectOperationQueue<PortDisconnectMetadata> {
132
+ let ports = disconnectQueues.get(ctx);
133
+ if (!ports) disconnectQueues.set(ctx, ports = new Map());
134
+ let queue = ports.get(port);
135
+ if (!queue) ports.set(port, queue = new DisconnectOperationQueue());
136
+ return queue;
137
+ }
138
+
139
+ async function validateDisconnectOperation(ctx: HostCtx, port: PortLike, operation: PortDisconnectOperation): Promise<void> {
140
+ const db = lensRtdb(ctx, operation.actAs, port);
141
+ const handle = rtdbOnDisconnect(rtdbRef(db, operation.path));
142
+ if (operation.kind === 'update') await handle.update(operation.values);
143
+ else if (operation.kind === 'remove') await handle.remove();
144
+ else if (operation.priority !== undefined) await handle.setWithPriority(operation.value, operation.priority);
145
+ else await handle.set(operation.value as never);
146
+ await handle.cancel();
147
+ }
148
+
149
+ async function queueDisconnectOperation(ctx: HostCtx, port: PortLike, operation: PortDisconnectOperation): Promise<void> {
150
+ await validateDisconnectOperation(ctx, port, operation);
151
+ const queue = portQueue(ctx, port);
152
+ queue.set(operation);
153
+ }
154
+
155
+ export async function drainPortRtdbDisconnects(ctx: HostCtx, port: PortLike): Promise<void> {
156
+ const ports = disconnectQueues.get(ctx);
157
+ const queue = ports?.get(port);
158
+ if (!queue) return;
159
+ ports!.delete(port);
160
+ const failures: unknown[] = [];
161
+ for (const operation of queue.takeAll()) {
162
+ try {
163
+ const db = lensRtdb(ctx, operation.actAs, port);
164
+ const target = rtdbRef(db, operation.path);
165
+ if (operation.kind === 'update') await rtdbUpdate(target, resolveRtdbSentinels(operation.values) as Record<string, unknown>);
166
+ else if (operation.kind === 'remove') await rtdbRemove(target);
167
+ else if (
168
+ operation.mergeAfterChildRegistration && operation.value !== null &&
169
+ typeof operation.value === 'object' && !Array.isArray(operation.value)
170
+ ) await rtdbUpdate(target, resolveRtdbSentinels(operation.value) as Record<string, unknown>);
171
+ else if (operation.priority !== undefined) {
172
+ await rtdbSetWithPriority(
173
+ target,
174
+ resolveRtdbSentinels(operation.value) as never,
175
+ operation.priority,
176
+ );
177
+ } else await rtdbSet(target, resolveRtdbSentinels(operation.value) as never);
178
+ } catch (error) {
179
+ failures.push(error);
180
+ }
181
+ }
182
+ await bestEffortFlush(ctx);
183
+ if (failures.length === 1) throw failures[0];
184
+ if (failures.length > 1) throw new AggregateError(failures, 'Multiple SharedWorker onDisconnect operations failed');
185
+ }
186
+
187
+ export function clearAllRtdbDisconnects(ctx: HostCtx): void {
188
+ disconnectQueues.get(ctx)?.clear();
189
+ offlinePorts.get(ctx)?.clear();
190
+ }
191
+
192
+ export function forgetPortRtdbConnection(ctx: HostCtx, port: PortLike): void {
193
+ disconnectQueues.get(ctx)?.delete(port);
194
+ offlinePorts.get(ctx)?.delete(port);
195
+ }
196
+
59
197
  export function isRtdbOp(method: OpMessage['method']): boolean {
60
198
  return RTDB_METHODS.has(method);
61
199
  }
@@ -69,7 +207,7 @@ export async function handleRtdbOp(
69
207
  case 'rtdb.get': {
70
208
  try {
71
209
  const db = lensRtdb(ctx, msg.actAs, port);
72
- ok(port, msg.id, rtdbSnapToWire(await rtdbGet(rtdbRef(db, msg.path))));
210
+ ok(port, msg.id, rtdbSnapToWire(await rtdbGet(rtdbTarget(db, msg.path, msg.query))));
73
211
  } catch (e) { fail(port, msg.id, e); }
74
212
  break;
75
213
  }
@@ -85,6 +223,30 @@ export async function handleRtdbOp(
85
223
  break;
86
224
  }
87
225
 
226
+ case 'rtdb.setPriority': {
227
+ try {
228
+ const db = lensRtdb(ctx, msg.actAs, port);
229
+ await rtdbSetPriority(rtdbRef(db, msg.path), msg.priority);
230
+ await bestEffortFlush(ctx);
231
+ ok(port, msg.id, null);
232
+ } catch (e) { fail(port, msg.id, e); }
233
+ break;
234
+ }
235
+
236
+ case 'rtdb.setWithPriority': {
237
+ try {
238
+ const db = lensRtdb(ctx, msg.actAs, port);
239
+ await rtdbSetWithPriority(
240
+ rtdbRef(db, msg.path),
241
+ resolveRtdbSentinels(msg.value) as never,
242
+ msg.priority,
243
+ );
244
+ await bestEffortFlush(ctx);
245
+ ok(port, msg.id, null);
246
+ } catch (e) { fail(port, msg.id, e); }
247
+ break;
248
+ }
249
+
88
250
  case 'rtdb.update': {
89
251
  try {
90
252
  const db = lensRtdb(ctx, msg.actAs, port);
@@ -129,6 +291,85 @@ export async function handleRtdbOp(
129
291
  break;
130
292
  }
131
293
 
294
+ case 'rtdb.onDisconnectSet': {
295
+ try {
296
+ await queueDisconnectOperation(ctx, port, {
297
+ kind: 'set', path: msg.path, value: resolveRtdbSentinels(msg.value), priority: msg.priority, actAs: msg.actAs,
298
+ });
299
+ ok(port, msg.id, null);
300
+ } catch (e) { fail(port, msg.id, e); }
301
+ break;
302
+ }
303
+
304
+ case 'rtdb.onDisconnectUpdate': {
305
+ try {
306
+ await queueDisconnectOperation(ctx, port, {
307
+ kind: 'update', path: msg.path, values: resolveRtdbSentinels(msg.values) as Record<string, unknown>, actAs: msg.actAs,
308
+ });
309
+ ok(port, msg.id, null);
310
+ } catch (e) { fail(port, msg.id, e); }
311
+ break;
312
+ }
313
+
314
+ case 'rtdb.onDisconnectRemove': {
315
+ try {
316
+ await queueDisconnectOperation(ctx, port, { kind: 'remove', path: msg.path, actAs: msg.actAs });
317
+ ok(port, msg.id, null);
318
+ } catch (e) { fail(port, msg.id, e); }
319
+ break;
320
+ }
321
+
322
+ case 'rtdb.onDisconnectCancel': {
323
+ const queue = portQueue(ctx, port);
324
+ queue.cancel(msg.path);
325
+ ok(port, msg.id, null);
326
+ break;
327
+ }
328
+
329
+ case 'rtdb.goOffline': {
330
+ try {
331
+ const offline = offlinePortSet(ctx);
332
+ if (!offline.has(port)) {
333
+ offline.add(port);
334
+ await drainPortRtdbDisconnects(ctx, port);
335
+ }
336
+ ok(port, msg.id, null);
337
+ } catch (e) { fail(port, msg.id, e); }
338
+ break;
339
+ }
340
+
341
+ case 'rtdb.goOnline': {
342
+ offlinePortSet(ctx).delete(port);
343
+ ok(port, msg.id, null);
344
+ break;
345
+ }
346
+
347
+ case 'rtdb.transactionCommit': {
348
+ try {
349
+ const db = lensRtdb(ctx, msg.actAs, port);
350
+ const target = rtdbRef(db, msg.path);
351
+ let retry = false;
352
+ const result = await rtdbRunTransaction(
353
+ target,
354
+ (current) => {
355
+ if (!sameRtdbValue(current, msg.expected)) {
356
+ retry = true;
357
+ return undefined;
358
+ }
359
+ return resolveRtdbSentinels(msg.value) as never;
360
+ },
361
+ { applyLocally: msg.applyLocally },
362
+ );
363
+ await bestEffortFlush(ctx);
364
+ ok(port, msg.id, {
365
+ retry,
366
+ committed: result.committed,
367
+ snapshot: rtdbSnapToWire(result.snapshot),
368
+ });
369
+ } catch (e) { fail(port, msg.id, e); }
370
+ break;
371
+ }
372
+
132
373
  default: {
133
374
  fail(port, msg.id, new Error(`Unknown method: ${String((msg as { method: unknown }).method)}`));
134
375
  }
@@ -11,6 +11,7 @@ import { setRules } from 'pyric/sandbox/firestore';
11
11
 
12
12
  import type { OpMessage } from '../protocol.js';
13
13
  import { type HostCtx, type PortLike, ok, fail } from '../host-context.js';
14
+ import { clearAllRtdbDisconnects } from './rtdb.js';
14
15
 
15
16
  /** The Studio control op methods routed to {@link handleStudioOp}. */
16
17
  const STUDIO_METHODS = new Set<string>([
@@ -45,6 +46,7 @@ export async function handleStudioOp(
45
46
  // payload's `errors` so Studio can surface a half-clear instead of
46
47
  // reporting a clean reset.
47
48
  try {
49
+ clearAllRtdbDisconnects(ctx);
48
50
  const { errors } = await ctx.sandbox.resetAll();
49
51
  // `resetAll` swapped the env, wiping env-owned FIRESTORE rules (RTDB /
50
52
  // storage rules live on their service objects and survive). Re-deploy
@@ -18,9 +18,9 @@ import {
18
18
  type Query,
19
19
  } from 'pyric/firestore';
20
20
  import {
21
- ref as rtdbRef,
22
21
  onValue as rtdbOnValue,
23
22
  type DatabaseReference,
23
+ type Query as RtdbQuery,
24
24
  } from 'pyric/database';
25
25
 
26
26
  import type { FirestoreSubMessage, RtdbValueSubMessage, UnsubMessage } from '../protocol.js';
@@ -34,7 +34,7 @@ import {
34
34
  resolveTarget,
35
35
  serializeDocSnap,
36
36
  } from './core.js';
37
- import { rtdbSnapToWire } from './rtdb.js';
37
+ import { rtdbSnapToWire, rtdbTarget } from './rtdb.js';
38
38
 
39
39
  /**
40
40
  * Session-bound sub registry (#754): the original sub message for every
@@ -155,9 +155,13 @@ export function handleRtdbSub(ctx: HostCtx, port: PortLike, msg: RtdbValueSubMes
155
155
  }
156
156
 
157
157
  try {
158
- const ref = rtdbRef(lensRtdb(ctx, msg.actAs, port), msg.target.path);
158
+ const ref = rtdbTarget(
159
+ lensRtdb(ctx, msg.actAs, port),
160
+ msg.target.path,
161
+ msg.target.query,
162
+ );
159
163
  const unsub = rtdbOnValue(
160
- ref as DatabaseReference,
164
+ ref as DatabaseReference | RtdbQuery,
161
165
  (snap) => post(port, { t: 'snap', subId: msg.subId, value: rtdbSnapToWire(snap) }),
162
166
  );
163
167
  portSubs.set(msg.subId, unsub);
@@ -44,4 +44,4 @@ export {
44
44
  listBranchNames,
45
45
  } from './host/connection.js';
46
46
  // The message dispatcher seam (entry.ts + tests) and per-port teardown.
47
- export { handleMessage, cleanupPort } from './host/dispatch.js';
47
+ export { handleMessage, cleanupPort, cleanupPortWithDisconnect } from './host/dispatch.js';
@@ -19,6 +19,32 @@
19
19
  * '@pyric/cli/serve/worker'` and reach the live SharedWorker backend.
20
20
  */
21
21
 
22
+ export {
23
+ PYRIC_WORKER_NAME,
24
+ PYRIC_WORKER_URL,
25
+ readPyricRuntimeManifest,
26
+ type PyricRuntimeManifest,
27
+ } from '../runtime/manifest.js';
28
+ export {
29
+ PYRIC_WORKER_GENERATION_KEY,
30
+ preflightWorkerEpochStorage,
31
+ rememberWorkerEpoch,
32
+ workerNameForEpoch,
33
+ } from '../runtime/worker-generation.js';
34
+ export {
35
+ createWorkerReplacement,
36
+ type WorkerReplacement,
37
+ } from '../runtime/worker-replacement.js';
38
+ export {
39
+ onWorkerRuntimeReload,
40
+ retireWorkerRuntime,
41
+ } from './client/runtime-control.js';
42
+ export {
43
+ disconnectClient,
44
+ type DisconnectClientOptions,
45
+ } from './client/disconnect.js';
46
+ export { ownClientUntilPagehide } from './client/pagehide.js';
47
+
22
48
  export {
23
49
  // Bridge-peer relay seams (leaf-safe: ids are re-minted in-page, frames go
24
50
  // over the worker port). The served page wires these into `connectBridge`'s
@@ -163,29 +189,51 @@ export {
163
189
  getSnapshot,
164
190
  // Sandbox-owned full reset (issue #359): Firestore + every registered service
165
191
  resetAll,
166
- // RTDB shared-worker preview bridge. Aliased to avoid colliding with Storage
167
- // `ref` and Firestore sentinels in this worker barrel.
168
- rtdbGetDatabase,
169
- rtdbRef,
170
- rtdbChild,
171
- rtdbGet,
192
+ } from './client.js';
193
+
194
+ // RTDB bridge families are exported directly from their owning modules. This
195
+ // public package index is the sole aggregation point for the worker surface.
196
+ export { rtdbGetDatabase, rtdbRef, rtdbChild } from './client/rtdb-references.js';
197
+ export { rtdbGet } from './client/rtdb-reads.js';
198
+ export {
172
199
  rtdbSet,
200
+ rtdbSetPriority,
201
+ rtdbSetWithPriority,
173
202
  rtdbUpdate,
174
203
  rtdbRemove,
175
204
  rtdbPush,
205
+ } from './client/rtdb-writes.js';
206
+ export {
176
207
  rtdbOnValue,
208
+ rtdbOnChildAdded,
209
+ rtdbOnChildChanged,
210
+ rtdbOnChildMoved,
211
+ rtdbOnChildRemoved,
177
212
  rtdbOff,
213
+ } from './client/rtdb-listeners.js';
214
+ export { rtdbRunTransaction } from './client/rtdb-transactions.js';
215
+ export {
216
+ rtdbOnDisconnect,
217
+ rtdbGoOffline,
218
+ rtdbGoOnline,
219
+ RtdbOnDisconnect,
220
+ } from './client/rtdb-connection-lifecycle.js';
221
+ export {
178
222
  rtdbServerTimestamp,
179
223
  rtdbConnectDatabaseEmulator,
224
+ } from './client/rtdb-controls.js';
225
+ export {
180
226
  adminReadRtdbState,
181
227
  adminSetRtdbValue,
182
228
  adminUpdateRtdbValue,
183
229
  adminDeleteRtdbValue,
184
230
  adminSubscribeRtdbValue,
185
- type ClientRtdb,
186
- type RtdbRefHandle,
187
- type RtdbDataSnapshot,
188
- } from './client.js';
231
+ } from './client/rtdb-admin.js';
232
+ export type {
233
+ ClientRtdb,
234
+ RtdbRefHandle,
235
+ RtdbDataSnapshot,
236
+ } from './client/handles.js';
189
237
 
190
238
  export type {
191
239
  AuthPersistenceMode,
@@ -53,6 +53,7 @@ import { rehydrateDocValue } from 'pyric/firestore/internal/value-codec';
53
53
  // The auth-lens contract and the cross-service event envelope are shared with
54
54
  // the sandbox's event provenance — Studio's Action Center folds these verbatim.
55
55
  import type { AuthLens, SandboxEvent, DenialContext } from 'pyric/sandbox';
56
+ import type { Query as RtdbQuery } from 'pyric/database';
56
57
  // TYPE-ONLY (same rationale): the broker's own wire shapes for the
57
58
  // `messaging.*` ops — all plain JSON, structured-clone-safe by construction.
58
59
  import type {
@@ -401,12 +402,29 @@ export type OpMessage = (
401
402
  | { t: 'op'; id: string; method: 'admin.setDocument'; path: string; data: unknown }
402
403
  | { t: 'op'; id: string; method: 'admin.deleteDocument'; path: string }
403
404
  | { t: 'op'; id: string; method: 'admin.readState'; path?: string; maxDepth?: number }
404
- | { t: 'op'; id: string; method: 'rtdb.get'; path: string }
405
+ | { t: 'op'; id: string; method: 'rtdb.get'; path: string; query?: RtdbQuerySpec }
405
406
  | { t: 'op'; id: string; method: 'rtdb.set'; path: string; value: unknown }
407
+ | { t: 'op'; id: string; method: 'rtdb.setPriority'; path: string; priority: string | number | null }
408
+ | { t: 'op'; id: string; method: 'rtdb.setWithPriority'; path: string; value: unknown; priority: string | number | null }
406
409
  | { t: 'op'; id: string; method: 'rtdb.update'; path: string; values: Record<string, unknown> }
407
410
  | { t: 'op'; id: string; method: 'rtdb.remove'; path: string }
408
411
  | { t: 'op'; id: string; method: 'rtdb.push'; path: string; key: string; value?: unknown }
409
412
  | { t: 'op'; id: string; method: 'rtdb.adminSnapshot' }
413
+ | { t: 'op'; id: string; method: 'rtdb.onDisconnectSet'; path: string; value: unknown; priority?: string | number | null }
414
+ | { t: 'op'; id: string; method: 'rtdb.onDisconnectUpdate'; path: string; values: Record<string, unknown> }
415
+ | { t: 'op'; id: string; method: 'rtdb.onDisconnectRemove'; path: string }
416
+ | { t: 'op'; id: string; method: 'rtdb.onDisconnectCancel'; path: string }
417
+ | { t: 'op'; id: string; method: 'rtdb.goOffline' }
418
+ | { t: 'op'; id: string; method: 'rtdb.goOnline' }
419
+ | {
420
+ t: 'op';
421
+ id: string;
422
+ method: 'rtdb.transactionCommit';
423
+ path: string;
424
+ expected: unknown;
425
+ value: unknown;
426
+ applyLocally?: boolean;
427
+ }
410
428
  // Collection enumeration (Pyric Studio data browse): the modular SDK has no
411
429
  // client `listCollections`, so the host enumerates the sandbox keyspace via
412
430
  // `getInternalEnv(sandbox)`. Reply: `{ ids: string[] }`.
@@ -681,7 +699,7 @@ export interface EventSubMessage {
681
699
  export interface RtdbValueSubMessage {
682
700
  t: 'sub';
683
701
  subId: string;
684
- target: { service: 'rtdb'; path: string };
702
+ target: { service: 'rtdb'; path: string; query?: RtdbQuerySpec };
685
703
  /** Mirrors Firestore subscriptions: absent/app-session uses this port's session. */
686
704
  actAs?: AuthLens;
687
705
  /** Mechanical op provenance — see the field's doc on {@link OpMessage}. */
@@ -690,6 +708,9 @@ export interface RtdbValueSubMessage {
690
708
  relaySource?: 'remote';
691
709
  }
692
710
 
711
+ /** Structured-clone-safe query plan carried by `pyric/database` Query values. */
712
+ export type RtdbQuerySpec = RtdbQuery['_spec'];
713
+
693
714
  /**
694
715
  * Stream a `generateContent` call as a SUBSCRIPTION (cdd-deltas #98.3:
695
716
  * "chunks over the existing subscription/event mechanism"). Unlike the
@@ -0,0 +1,17 @@
1
+ /** Browser-safe structural equality for values crossing the RTDB worker wire. */
2
+ export function sameRtdbValue(left: unknown, right: unknown): boolean {
3
+ if (Object.is(left, right)) return true;
4
+ if (Array.isArray(left) || Array.isArray(right)) {
5
+ return Array.isArray(left) && Array.isArray(right)
6
+ && left.length === right.length
7
+ && left.every((value, index) => sameRtdbValue(value, right[index]));
8
+ }
9
+ if (!left || !right || typeof left !== 'object' || typeof right !== 'object') return false;
10
+ const leftRecord = left as Record<string, unknown>;
11
+ const rightRecord = right as Record<string, unknown>;
12
+ const leftKeys = Object.keys(leftRecord).sort();
13
+ const rightKeys = Object.keys(rightRecord).sort();
14
+ return leftKeys.length === rightKeys.length && leftKeys.every(
15
+ (key, index) => key === rightKeys[index] && sameRtdbValue(leftRecord[key], rightRecord[key]),
16
+ );
17
+ }
@@ -33,7 +33,7 @@ import { getDatabase, sandbox as rtdbSandbox } from 'pyric/database';
33
33
  import { getAuth, sandbox as authOps, type SeedUser } from 'pyric/auth';
34
34
  import { getStorageSandbox } from 'pyric/storage';
35
35
  import type { PersistenceBackend } from 'pyric/sandbox';
36
- import { initializeSandbox } from 'pyric/sandbox';
36
+ import { createSandboxRoot } from 'pyric/sandbox/internal';
37
37
  import {
38
38
  primeEventHistory,
39
39
  } from 'pyric/sandbox/internal';
@@ -485,7 +485,7 @@ export async function buildWorkerCtx(bootEnv: WorkerBootEnv): Promise<HostCtx> {
485
485
  // plain-call wrapper doesn't need (nothing in this module uses it).
486
486
  fetch: ((...args: Parameters<typeof fetch>) => ambientFetch(...args)) as typeof fetch,
487
487
  };
488
- const sandbox = initializeSandbox();
488
+ const sandbox = createSandboxRoot();
489
489
 
490
490
  // Deploy permissive starter rules via admin-firestore.
491
491
  // Callers override at runtime via the setRules op.
@@ -1,6 +1,6 @@
1
1
  /** Session-aware Service Worker relay over the authoritative SharedWorker host. */
2
2
  import {
3
- cleanupPort,
3
+ cleanupPortWithDisconnect,
4
4
  handleMessage,
5
5
  type HostCtx,
6
6
  type PortLike,
@@ -53,7 +53,7 @@ export function createServiceWorkerRelay(options: {
53
53
  if (!previous) return;
54
54
  try {
55
55
  const ctx = await options.getCtx();
56
- cleanupPort(ctx, previous.port);
56
+ await cleanupPortWithDisconnect(ctx, previous.port);
57
57
  } catch (error) {
58
58
  options.onError?.(error, envelope);
59
59
  }
@@ -1 +0,0 @@
1
- .prose .conformance-flow{display:flex;flex-wrap:wrap;align-items:stretch;gap:var(--space-2)}.prose .flow-step{flex:1 1 0;min-width:92px;display:flex;flex-direction:column;justify-content:center;gap:var(--space-1);padding:var(--space-3);text-align:center;background:var(--panel);border:1px solid var(--line);border-radius:8px;font-size:.9rem;font-weight:550;line-height:1.3;color:var(--ink)}.prose .flow-sub{font-size:var(--fs-caption);font-weight:400;color:var(--muted)}.prose .flow-arrow{display:flex;align-items:center;color:var(--faint);font-size:1.1rem}.prose .compat-stat{display:flex;flex-direction:column;gap:var(--space-3);padding-top:var(--space-4);border-top:1px solid var(--line)}.prose .compat-stat-surface{font-size:.85rem;color:var(--muted);font-variant-numeric:tabular-nums}.prose .compat-stat-surface strong,.prose .compat-stat-item strong{color:var(--ink)}.prose .compat-stat-figure{display:flex;align-items:baseline;flex-wrap:wrap;gap:var(--space-3);line-height:1}.prose .compat-stat-pct{font-size:2.75rem;font-weight:750;line-height:1;letter-spacing:-.02em;color:var(--ink);font-variant-numeric:tabular-nums}.prose .compat-stat-label{font-size:1rem;color:var(--muted)}.prose .compat-stat-denom{font-size:.85rem;color:var(--faint);font-variant-numeric:tabular-nums}.prose .compat-stat-bar{display:flex;gap:2px;width:100%;height:10px;border-radius:5px;overflow:hidden}.prose .compat-stat-seg{flex-basis:0;min-width:0;background:var(--muted)}.prose .compat-stat-seg[data-status=ok]{background:var(--diff-add)}.prose .compat-stat-seg[data-status=unsupported]{background:var(--line-2)}.prose .compat-stat-seg[data-status=unverified]{background:transparent;box-shadow:inset 0 0 0 1px var(--faint)}.prose .compat-stat-seg[data-status=diverged]{background:repeating-linear-gradient(135deg,var(--accent) 0 4px,color-mix(in srgb,var(--accent) 45%,transparent) 4px 7px)}.prose .compat-stat-seg[data-status=bug]{background:repeating-linear-gradient(45deg,var(--diff-remove) 0 3px,color-mix(in srgb,var(--diff-remove) 40%,transparent) 3px 6px)}.prose .compat-stat-key{padding:0;display:flex;flex-wrap:wrap;gap:var(--space-2) var(--space-4);list-style:none}.prose .compat-stat-item{display:inline-flex;align-items:center;gap:var(--space-2);font-size:var(--fs-caption);color:var(--muted);font-variant-numeric:tabular-nums}.prose .compat-stat-note{font-size:var(--fs-caption);color:var(--muted)}.prose .compat-meters{display:flex;flex-direction:column;gap:var(--space-2)}.prose .compat-meter{display:grid;grid-template-columns:minmax(9rem,auto) 1fr auto;align-items:center;gap:var(--space-3);font-size:var(--fs-caption);color:var(--muted);font-variant-numeric:tabular-nums}.prose .compat-meter-label{color:var(--muted)}.prose .compat-meter-value{color:var(--ink);font-weight:600;text-align:right}.prose .compat-meter-track{display:block;width:100%;height:8px;border-radius:4px;background:var(--line-2);overflow:hidden}.prose .compat-meter-fill{display:block;height:100%;border-radius:4px;background:var(--diff-add)}.prose .compat-meter-track--mini{height:5px;margin-top:var(--space-1)}.prose .compat-score-table{width:100%;border-collapse:collapse;font-size:.875rem}.prose .compat-score-table thead th{text-align:left;font-size:.6875rem;font-weight:600;text-transform:uppercase;letter-spacing:.06em;color:var(--ink-3, #667);padding:var(--space-2) var(--space-3);border-bottom:1px solid var(--line)}.prose .compat-score-table td,.prose .compat-score-table th[scope=row]{padding:var(--space-2) var(--space-3);border-bottom:1px solid var(--line);vertical-align:middle;text-align:left}.prose .compat-score-table th[scope=row]{font-weight:600;white-space:nowrap}.prose .compat-score-cell{white-space:nowrap}.prose .compat-score-cell .compat-score-pct{font-variant-numeric:tabular-nums;font-weight:600;margin-right:var(--space-2)}.prose .compat-score-cell .compat-meter-track--mini{display:inline-block;width:8rem;vertical-align:middle}.prose .compat-score-detail{color:var(--ink-3, #667);font-size:.8125rem;white-space:nowrap}.prose .compat-score-row--overall th[scope=row],.prose .compat-score-row--overall td{border-top:2px solid var(--line);border-bottom:0}} .prose .compat-score-tbd{color:var(--ink-3, #667);font-size:.8125rem;font-style:italic}.prose .compat-score-stack{display:grid;gap:var(--space-1)}.prose .compat-score-bar{display:flex;align-items:center;gap:var(--space-2)}.prose .compat-score-bar .compat-meter-track{flex:1 1 auto}.prose .compat-score-basis{font-size:.8125rem;color:var(--ink-3, #667)}:root{--rhythm-para: .875rem;--rhythm-group: 1.5rem;--rhythm-subsection: 2.25rem;--rhythm-section: 3.25rem;--rhythm-list: calc(var(--rhythm-para) * .75)}.prose>*,.prose blockquote>*,.prose li>*,.prose .compat-stat>*{margin-block:0}.prose>*+*{margin-block-start:var(--rhythm-group)}.prose>*+h2{margin-block-start:var(--rhythm-section)}.prose>*+h3,.prose>*+h4{margin-block-start:var(--rhythm-subsection)}.prose>h1+*,.prose>h2+*,.prose>h3+*,.prose>h4+*{margin-block-start:var(--rhythm-para)}.prose>p+p{margin-block-start:var(--rhythm-para)}.prose>p+ul,.prose>p+ol,.prose>p+blockquote{margin-block-start:var(--rhythm-para)}.prose li+li{margin-block-start:var(--rhythm-list)}.prose li>ul,.prose li>ol{margin-block-start:var(--rhythm-list)}.prose li>*+*,.prose blockquote>*+*{margin-block-start:var(--rhythm-para)}.api-reference-header{margin:0 0 2.5rem;padding:0 0 2rem;border-bottom:1px solid var(--line)}.api-reference-kicker{margin:0 0 .65rem;color:var(--muted);font-size:var(--fs-micro);font-weight:600;letter-spacing:var(--tracking-micro);text-transform:uppercase}.api-reference-header h1{margin:0;color:var(--ink);font-size:clamp(1.7rem,4vw,2.45rem);font-weight:600;letter-spacing:-.035em}.api-reference-header h1 code{padding:0;color:inherit;background:transparent;font:inherit}.api-reference-meta,.api-reference-source{margin:.7rem 0 0;color:var(--muted);font-size:var(--fs-body)}.api-reference-source{margin-top:.3rem}.api-reference-evidence{display:inline-block;margin-top:1rem;color:var(--ink);font-size:var(--fs-label);font-weight:600;text-underline-offset:.18em}.api-reference-body>h2{margin-top:3.75rem;padding-bottom:.65rem;border-bottom:1px solid var(--line)}.api-reference-body>h3{margin-top:2.75rem}.api-reference-body>h3 code{font-size:inherit}.api-reference-body h4{margin-top:1.8rem}.api-reference-body h5,.api-reference-body h6{margin-top:1.35rem}.api-reference-body pre{overflow-x:auto}.api-reference-body table{display:block;max-width:100%;overflow-x:auto;white-space:nowrap}.api-symbols{max-height:calc(100vh - 5rem);overflow:auto;scrollbar-width:thin}.api-symbol-filter{width:100%;margin:.2rem 0 1rem;padding:.5rem .6rem;border:1px solid var(--line);border-radius:.35rem;color:var(--ink);background:var(--panel);font:inherit;font-size:var(--fs-caption)}.api-symbol-filter:focus{border-color:var(--muted);outline:none}.api-symbol-group+.api-symbol-group{margin-top:1rem}.api-symbol-kind{display:block;margin-bottom:.35rem;color:var(--muted);font-size:var(--fs-micro);font-weight:600;letter-spacing:var(--tracking-micro);text-transform:uppercase}.api-symbol-group ul{margin:0;padding:0;list-style:none}.api-symbol-group li+li{margin-top:.22rem}.api-symbol-group li a{display:block;overflow:hidden;color:var(--muted);font-family:var(--font-mono);font-size:var(--fs-caption);text-overflow:ellipsis;white-space:nowrap}.api-symbol-group li a:hover,.api-symbol-kind:hover{color:var(--ink)}.api-symbol-empty{color:var(--muted);font-size:var(--fs-caption)}