pyric-tools 0.1.0-alpha.7

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 (1052) hide show
  1. package/README.md +125 -0
  2. package/dist/auth/domains/handler.d.ts +6 -0
  3. package/dist/auth/domains/handler.d.ts.map +1 -0
  4. package/dist/auth/domains/handler.js +75 -0
  5. package/dist/auth/domains/handler.js.map +1 -0
  6. package/dist/auth/domains/spec.d.ts +25 -0
  7. package/dist/auth/domains/spec.d.ts.map +1 -0
  8. package/dist/auth/domains/spec.js +6 -0
  9. package/dist/auth/domains/spec.js.map +1 -0
  10. package/dist/auth/index.d.ts +34 -0
  11. package/dist/auth/index.d.ts.map +1 -0
  12. package/dist/auth/index.js +30 -0
  13. package/dist/auth/index.js.map +1 -0
  14. package/dist/auth/mapper.d.ts +5 -0
  15. package/dist/auth/mapper.d.ts.map +1 -0
  16. package/dist/auth/mapper.js +49 -0
  17. package/dist/auth/mapper.js.map +1 -0
  18. package/dist/auth/provider/handler.d.ts +9 -0
  19. package/dist/auth/provider/handler.d.ts.map +1 -0
  20. package/dist/auth/provider/handler.js +128 -0
  21. package/dist/auth/provider/handler.js.map +1 -0
  22. package/dist/auth/provider/spec.d.ts +29 -0
  23. package/dist/auth/provider/spec.d.ts.map +1 -0
  24. package/dist/auth/provider/spec.js +12 -0
  25. package/dist/auth/provider/spec.js.map +1 -0
  26. package/dist/auth/resolver.d.ts +16 -0
  27. package/dist/auth/resolver.d.ts.map +1 -0
  28. package/dist/auth/resolver.js +32 -0
  29. package/dist/auth/resolver.js.map +1 -0
  30. package/dist/auth/tools.d.ts +23 -0
  31. package/dist/auth/tools.d.ts.map +1 -0
  32. package/dist/auth/tools.js +71 -0
  33. package/dist/auth/tools.js.map +1 -0
  34. package/dist/auth/types.d.ts +37 -0
  35. package/dist/auth/types.d.ts.map +1 -0
  36. package/dist/auth/types.js +17 -0
  37. package/dist/auth/types.js.map +1 -0
  38. package/dist/bridge/client/bridge.d.ts +133 -0
  39. package/dist/bridge/client/bridge.d.ts.map +1 -0
  40. package/dist/bridge/client/bridge.js +430 -0
  41. package/dist/bridge/client/bridge.js.map +1 -0
  42. package/dist/bridge/client/dispatch.d.ts +49 -0
  43. package/dist/bridge/client/dispatch.d.ts.map +1 -0
  44. package/dist/bridge/client/dispatch.js +103 -0
  45. package/dist/bridge/client/dispatch.js.map +1 -0
  46. package/dist/bridge/client.d.ts +24 -0
  47. package/dist/bridge/client.d.ts.map +1 -0
  48. package/dist/bridge/client.js +26 -0
  49. package/dist/bridge/client.js.map +1 -0
  50. package/dist/bridge/protocol.d.ts +228 -0
  51. package/dist/bridge/protocol.d.ts.map +1 -0
  52. package/dist/bridge/protocol.js +131 -0
  53. package/dist/bridge/protocol.js.map +1 -0
  54. package/dist/bridge/server/audit.d.ts +19 -0
  55. package/dist/bridge/server/audit.d.ts.map +1 -0
  56. package/dist/bridge/server/audit.js +46 -0
  57. package/dist/bridge/server/audit.js.map +1 -0
  58. package/dist/bridge/server/bridge.d.ts +165 -0
  59. package/dist/bridge/server/bridge.d.ts.map +1 -0
  60. package/dist/bridge/server/bridge.js +410 -0
  61. package/dist/bridge/server/bridge.js.map +1 -0
  62. package/dist/bridge/server/confirm-policy.d.ts +56 -0
  63. package/dist/bridge/server/confirm-policy.d.ts.map +1 -0
  64. package/dist/bridge/server/confirm-policy.js +107 -0
  65. package/dist/bridge/server/confirm-policy.js.map +1 -0
  66. package/dist/bridge/server/confirm-prompt.d.ts +73 -0
  67. package/dist/bridge/server/confirm-prompt.d.ts.map +1 -0
  68. package/dist/bridge/server/confirm-prompt.js +199 -0
  69. package/dist/bridge/server/confirm-prompt.js.map +1 -0
  70. package/dist/bridge/server/confirm.d.ts +92 -0
  71. package/dist/bridge/server/confirm.d.ts.map +1 -0
  72. package/dist/bridge/server/confirm.js +210 -0
  73. package/dist/bridge/server/confirm.js.map +1 -0
  74. package/dist/bridge/server/headless.d.ts +36 -0
  75. package/dist/bridge/server/headless.d.ts.map +1 -0
  76. package/dist/bridge/server/headless.js +132 -0
  77. package/dist/bridge/server/headless.js.map +1 -0
  78. package/dist/bridge/server/json-schema-to-zod.d.ts +37 -0
  79. package/dist/bridge/server/json-schema-to-zod.d.ts.map +1 -0
  80. package/dist/bridge/server/json-schema-to-zod.js +93 -0
  81. package/dist/bridge/server/json-schema-to-zod.js.map +1 -0
  82. package/dist/bridge/server/local-bridge.d.ts +33 -0
  83. package/dist/bridge/server/local-bridge.d.ts.map +1 -0
  84. package/dist/bridge/server/local-bridge.js +42 -0
  85. package/dist/bridge/server/local-bridge.js.map +1 -0
  86. package/dist/bridge/server/logger.d.ts +28 -0
  87. package/dist/bridge/server/logger.d.ts.map +1 -0
  88. package/dist/bridge/server/logger.js +42 -0
  89. package/dist/bridge/server/logger.js.map +1 -0
  90. package/dist/bridge/server/mcp.d.ts +33 -0
  91. package/dist/bridge/server/mcp.d.ts.map +1 -0
  92. package/dist/bridge/server/mcp.js +159 -0
  93. package/dist/bridge/server/mcp.js.map +1 -0
  94. package/dist/bridge/server/peer.d.ts +39 -0
  95. package/dist/bridge/server/peer.d.ts.map +1 -0
  96. package/dist/bridge/server/peer.js +189 -0
  97. package/dist/bridge/server/peer.js.map +1 -0
  98. package/dist/bridge/server/standalone.d.ts +102 -0
  99. package/dist/bridge/server/standalone.d.ts.map +1 -0
  100. package/dist/bridge/server/standalone.js +352 -0
  101. package/dist/bridge/server/standalone.js.map +1 -0
  102. package/dist/bridge/server/tool-metadata.d.ts +38 -0
  103. package/dist/bridge/server/tool-metadata.d.ts.map +1 -0
  104. package/dist/bridge/server/tool-metadata.js +79 -0
  105. package/dist/bridge/server/tool-metadata.js.map +1 -0
  106. package/dist/bridge/server.d.ts +25 -0
  107. package/dist/bridge/server.d.ts.map +1 -0
  108. package/dist/bridge/server.js +23 -0
  109. package/dist/bridge/server.js.map +1 -0
  110. package/dist/cli/auth.d.ts +37 -0
  111. package/dist/cli/auth.d.ts.map +1 -0
  112. package/dist/cli/auth.js +119 -0
  113. package/dist/cli/auth.js.map +1 -0
  114. package/dist/cli/database-rules.d.ts +25 -0
  115. package/dist/cli/database-rules.d.ts.map +1 -0
  116. package/dist/cli/database-rules.js +215 -0
  117. package/dist/cli/database-rules.js.map +1 -0
  118. package/dist/cli/deploy-progress.d.ts +35 -0
  119. package/dist/cli/deploy-progress.d.ts.map +1 -0
  120. package/dist/cli/deploy-progress.js +69 -0
  121. package/dist/cli/deploy-progress.js.map +1 -0
  122. package/dist/cli/deploy.d.ts +81 -0
  123. package/dist/cli/deploy.d.ts.map +1 -0
  124. package/dist/cli/deploy.js +413 -0
  125. package/dist/cli/deploy.js.map +1 -0
  126. package/dist/cli/dev-runner.d.ts +112 -0
  127. package/dist/cli/dev-runner.d.ts.map +1 -0
  128. package/dist/cli/dev-runner.js +227 -0
  129. package/dist/cli/dev-runner.js.map +1 -0
  130. package/dist/cli/discover.d.ts +47 -0
  131. package/dist/cli/discover.d.ts.map +1 -0
  132. package/dist/cli/discover.js +77 -0
  133. package/dist/cli/discover.js.map +1 -0
  134. package/dist/cli/firebase-json.d.ts +66 -0
  135. package/dist/cli/firebase-json.d.ts.map +1 -0
  136. package/dist/cli/firebase-json.js +60 -0
  137. package/dist/cli/firebase-json.js.map +1 -0
  138. package/dist/cli/index.d.ts +55 -0
  139. package/dist/cli/index.d.ts.map +1 -0
  140. package/dist/cli/index.js +500 -0
  141. package/dist/cli/index.js.map +1 -0
  142. package/dist/cli/init-templates.d.ts +37 -0
  143. package/dist/cli/init-templates.d.ts.map +1 -0
  144. package/dist/cli/init-templates.js +638 -0
  145. package/dist/cli/init-templates.js.map +1 -0
  146. package/dist/cli/init.d.ts +124 -0
  147. package/dist/cli/init.d.ts.map +1 -0
  148. package/dist/cli/init.js +423 -0
  149. package/dist/cli/init.js.map +1 -0
  150. package/dist/cli/login.d.ts +18 -0
  151. package/dist/cli/login.d.ts.map +1 -0
  152. package/dist/cli/login.js +59 -0
  153. package/dist/cli/login.js.map +1 -0
  154. package/dist/cli/mcp-proxy.d.ts +10 -0
  155. package/dist/cli/mcp-proxy.d.ts.map +1 -0
  156. package/dist/cli/mcp-proxy.js +126 -0
  157. package/dist/cli/mcp-proxy.js.map +1 -0
  158. package/dist/cli/parse-args.d.ts +20 -0
  159. package/dist/cli/parse-args.d.ts.map +1 -0
  160. package/dist/cli/parse-args.js +69 -0
  161. package/dist/cli/parse-args.js.map +1 -0
  162. package/dist/cli/rules.d.ts +40 -0
  163. package/dist/cli/rules.d.ts.map +1 -0
  164. package/dist/cli/rules.js +162 -0
  165. package/dist/cli/rules.js.map +1 -0
  166. package/dist/cli/scope.d.ts +38 -0
  167. package/dist/cli/scope.d.ts.map +1 -0
  168. package/dist/cli/scope.js +63 -0
  169. package/dist/cli/scope.js.map +1 -0
  170. package/dist/cli/serve.d.ts +122 -0
  171. package/dist/cli/serve.d.ts.map +1 -0
  172. package/dist/cli/serve.js +685 -0
  173. package/dist/cli/serve.js.map +1 -0
  174. package/dist/cli/snapshot.d.ts +22 -0
  175. package/dist/cli/snapshot.d.ts.map +1 -0
  176. package/dist/cli/snapshot.js +139 -0
  177. package/dist/cli/snapshot.js.map +1 -0
  178. package/dist/cli/verify.d.ts +23 -0
  179. package/dist/cli/verify.d.ts.map +1 -0
  180. package/dist/cli/verify.js +349 -0
  181. package/dist/cli/verify.js.map +1 -0
  182. package/dist/credentials/core/authorize.d.ts +22 -0
  183. package/dist/credentials/core/authorize.d.ts.map +1 -0
  184. package/dist/credentials/core/authorize.js +39 -0
  185. package/dist/credentials/core/authorize.js.map +1 -0
  186. package/dist/credentials/core/client.d.ts +14 -0
  187. package/dist/credentials/core/client.d.ts.map +1 -0
  188. package/dist/credentials/core/client.js +13 -0
  189. package/dist/credentials/core/client.js.map +1 -0
  190. package/dist/credentials/core/exchange.d.ts +24 -0
  191. package/dist/credentials/core/exchange.d.ts.map +1 -0
  192. package/dist/credentials/core/exchange.js +46 -0
  193. package/dist/credentials/core/exchange.js.map +1 -0
  194. package/dist/credentials/core/flow.d.ts +15 -0
  195. package/dist/credentials/core/flow.d.ts.map +1 -0
  196. package/dist/credentials/core/flow.js +40 -0
  197. package/dist/credentials/core/flow.js.map +1 -0
  198. package/dist/credentials/core/from-user-credential.d.ts +3 -0
  199. package/dist/credentials/core/from-user-credential.d.ts.map +1 -0
  200. package/dist/credentials/core/from-user-credential.js +19 -0
  201. package/dist/credentials/core/from-user-credential.js.map +1 -0
  202. package/dist/credentials/core/scopes.d.ts +26 -0
  203. package/dist/credentials/core/scopes.d.ts.map +1 -0
  204. package/dist/credentials/core/scopes.js +32 -0
  205. package/dist/credentials/core/scopes.js.map +1 -0
  206. package/dist/credentials/core/types.d.ts +72 -0
  207. package/dist/credentials/core/types.d.ts.map +1 -0
  208. package/dist/credentials/core/types.js +2 -0
  209. package/dist/credentials/core/types.js.map +1 -0
  210. package/dist/credentials/index.d.ts +14 -0
  211. package/dist/credentials/index.d.ts.map +1 -0
  212. package/dist/credentials/index.js +13 -0
  213. package/dist/credentials/index.js.map +1 -0
  214. package/dist/credentials/node/ensure-scope.d.ts +29 -0
  215. package/dist/credentials/node/ensure-scope.d.ts.map +1 -0
  216. package/dist/credentials/node/ensure-scope.js +42 -0
  217. package/dist/credentials/node/ensure-scope.js.map +1 -0
  218. package/dist/credentials/node/file-store.d.ts +4 -0
  219. package/dist/credentials/node/file-store.d.ts.map +1 -0
  220. package/dist/credentials/node/file-store.js +52 -0
  221. package/dist/credentials/node/file-store.js.map +1 -0
  222. package/dist/credentials/node/from-adc.d.ts +10 -0
  223. package/dist/credentials/node/from-adc.d.ts.map +1 -0
  224. package/dist/credentials/node/from-adc.js +60 -0
  225. package/dist/credentials/node/from-adc.js.map +1 -0
  226. package/dist/credentials/node/index.d.ts +10 -0
  227. package/dist/credentials/node/index.d.ts.map +1 -0
  228. package/dist/credentials/node/index.js +10 -0
  229. package/dist/credentials/node/index.js.map +1 -0
  230. package/dist/credentials/node/loopback-authorizer.d.ts +12 -0
  231. package/dist/credentials/node/loopback-authorizer.d.ts.map +1 -0
  232. package/dist/credentials/node/loopback-authorizer.js +61 -0
  233. package/dist/credentials/node/loopback-authorizer.js.map +1 -0
  234. package/dist/credentials/node/resolve-local-token.d.ts +20 -0
  235. package/dist/credentials/node/resolve-local-token.d.ts.map +1 -0
  236. package/dist/credentials/node/resolve-local-token.js +97 -0
  237. package/dist/credentials/node/resolve-local-token.js.map +1 -0
  238. package/dist/credentials/server/bff.d.ts +44 -0
  239. package/dist/credentials/server/bff.d.ts.map +1 -0
  240. package/dist/credentials/server/bff.js +43 -0
  241. package/dist/credentials/server/bff.js.map +1 -0
  242. package/dist/deploy/api-enablement.d.ts +45 -0
  243. package/dist/deploy/api-enablement.d.ts.map +1 -0
  244. package/dist/deploy/api-enablement.js +125 -0
  245. package/dist/deploy/api-enablement.js.map +1 -0
  246. package/dist/deploy/firestore/databases.d.ts +41 -0
  247. package/dist/deploy/firestore/databases.d.ts.map +1 -0
  248. package/dist/deploy/firestore/databases.js +63 -0
  249. package/dist/deploy/firestore/databases.js.map +1 -0
  250. package/dist/deploy/firestore/indexes.d.ts +120 -0
  251. package/dist/deploy/firestore/indexes.d.ts.map +1 -0
  252. package/dist/deploy/firestore/indexes.js +243 -0
  253. package/dist/deploy/firestore/indexes.js.map +1 -0
  254. package/dist/deploy/firestore/recipes.d.ts +21 -0
  255. package/dist/deploy/firestore/recipes.d.ts.map +1 -0
  256. package/dist/deploy/firestore/recipes.js +34 -0
  257. package/dist/deploy/firestore/recipes.js.map +1 -0
  258. package/dist/deploy/firestore/rules.d.ts +76 -0
  259. package/dist/deploy/firestore/rules.d.ts.map +1 -0
  260. package/dist/deploy/firestore/rules.js +180 -0
  261. package/dist/deploy/firestore/rules.js.map +1 -0
  262. package/dist/deploy/from-admin-app.d.ts +20 -0
  263. package/dist/deploy/from-admin-app.d.ts.map +1 -0
  264. package/dist/deploy/from-admin-app.js +18 -0
  265. package/dist/deploy/from-admin-app.js.map +1 -0
  266. package/dist/deploy/from-service-account.d.ts +29 -0
  267. package/dist/deploy/from-service-account.d.ts.map +1 -0
  268. package/dist/deploy/from-service-account.js +115 -0
  269. package/dist/deploy/from-service-account.js.map +1 -0
  270. package/dist/deploy/functions/bundle.d.ts +37 -0
  271. package/dist/deploy/functions/bundle.d.ts.map +1 -0
  272. package/dist/deploy/functions/bundle.js +181 -0
  273. package/dist/deploy/functions/bundle.js.map +1 -0
  274. package/dist/deploy/functions/core.d.ts +18 -0
  275. package/dist/deploy/functions/core.d.ts.map +1 -0
  276. package/dist/deploy/functions/core.js +211 -0
  277. package/dist/deploy/functions/core.js.map +1 -0
  278. package/dist/deploy/functions/iam.d.ts +17 -0
  279. package/dist/deploy/functions/iam.d.ts.map +1 -0
  280. package/dist/deploy/functions/iam.js +40 -0
  281. package/dist/deploy/functions/iam.js.map +1 -0
  282. package/dist/deploy/functions/operation.d.ts +39 -0
  283. package/dist/deploy/functions/operation.d.ts.map +1 -0
  284. package/dist/deploy/functions/operation.js +37 -0
  285. package/dist/deploy/functions/operation.js.map +1 -0
  286. package/dist/deploy/functions/spec.d.ts +69 -0
  287. package/dist/deploy/functions/spec.d.ts.map +1 -0
  288. package/dist/deploy/functions/spec.js +7 -0
  289. package/dist/deploy/functions/spec.js.map +1 -0
  290. package/dist/deploy/functions/types.d.ts +50 -0
  291. package/dist/deploy/functions/types.d.ts.map +1 -0
  292. package/dist/deploy/functions/types.js +3 -0
  293. package/dist/deploy/functions/types.js.map +1 -0
  294. package/dist/deploy/hosting/channels.d.ts +93 -0
  295. package/dist/deploy/hosting/channels.d.ts.map +1 -0
  296. package/dist/deploy/hosting/channels.js +134 -0
  297. package/dist/deploy/hosting/channels.js.map +1 -0
  298. package/dist/deploy/hosting/config.d.ts +28 -0
  299. package/dist/deploy/hosting/config.d.ts.map +1 -0
  300. package/dist/deploy/hosting/config.js +261 -0
  301. package/dist/deploy/hosting/config.js.map +1 -0
  302. package/dist/deploy/hosting/core.d.ts +38 -0
  303. package/dist/deploy/hosting/core.d.ts.map +1 -0
  304. package/dist/deploy/hosting/core.js +311 -0
  305. package/dist/deploy/hosting/core.js.map +1 -0
  306. package/dist/deploy/hosting/gzip.d.ts +11 -0
  307. package/dist/deploy/hosting/gzip.d.ts.map +1 -0
  308. package/dist/deploy/hosting/gzip.js +20 -0
  309. package/dist/deploy/hosting/gzip.js.map +1 -0
  310. package/dist/deploy/hosting/hash.d.ts +6 -0
  311. package/dist/deploy/hosting/hash.d.ts.map +1 -0
  312. package/dist/deploy/hosting/hash.js +17 -0
  313. package/dist/deploy/hosting/hash.js.map +1 -0
  314. package/dist/deploy/hosting/sites.d.ts +77 -0
  315. package/dist/deploy/hosting/sites.d.ts.map +1 -0
  316. package/dist/deploy/hosting/sites.js +73 -0
  317. package/dist/deploy/hosting/sites.js.map +1 -0
  318. package/dist/deploy/hosting/spec.d.ts +140 -0
  319. package/dist/deploy/hosting/spec.d.ts.map +1 -0
  320. package/dist/deploy/hosting/spec.js +8 -0
  321. package/dist/deploy/hosting/spec.js.map +1 -0
  322. package/dist/deploy/hosting/types.d.ts +71 -0
  323. package/dist/deploy/hosting/types.d.ts.map +1 -0
  324. package/dist/deploy/hosting/types.js +3 -0
  325. package/dist/deploy/hosting/types.js.map +1 -0
  326. package/dist/deploy/hosting/walk.d.ts +31 -0
  327. package/dist/deploy/hosting/walk.d.ts.map +1 -0
  328. package/dist/deploy/hosting/walk.js +167 -0
  329. package/dist/deploy/hosting/walk.js.map +1 -0
  330. package/dist/deploy/index.d.ts +51 -0
  331. package/dist/deploy/index.d.ts.map +1 -0
  332. package/dist/deploy/index.js +50 -0
  333. package/dist/deploy/index.js.map +1 -0
  334. package/dist/deploy/memoize-ttl.d.ts +58 -0
  335. package/dist/deploy/memoize-ttl.d.ts.map +1 -0
  336. package/dist/deploy/memoize-ttl.js +88 -0
  337. package/dist/deploy/memoize-ttl.js.map +1 -0
  338. package/dist/deploy/namespaces.d.ts +119 -0
  339. package/dist/deploy/namespaces.d.ts.map +1 -0
  340. package/dist/deploy/namespaces.js +192 -0
  341. package/dist/deploy/namespaces.js.map +1 -0
  342. package/dist/deploy/preflight.d.ts +119 -0
  343. package/dist/deploy/preflight.d.ts.map +1 -0
  344. package/dist/deploy/preflight.js +440 -0
  345. package/dist/deploy/preflight.js.map +1 -0
  346. package/dist/deploy/provider.d.ts +130 -0
  347. package/dist/deploy/provider.d.ts.map +1 -0
  348. package/dist/deploy/provider.js +21 -0
  349. package/dist/deploy/provider.js.map +1 -0
  350. package/dist/deploy/providers/database.d.ts +8 -0
  351. package/dist/deploy/providers/database.d.ts.map +1 -0
  352. package/dist/deploy/providers/database.js +37 -0
  353. package/dist/deploy/providers/database.js.map +1 -0
  354. package/dist/deploy/providers/firestore.d.ts +11 -0
  355. package/dist/deploy/providers/firestore.d.ts.map +1 -0
  356. package/dist/deploy/providers/firestore.js +43 -0
  357. package/dist/deploy/providers/firestore.js.map +1 -0
  358. package/dist/deploy/providers/functions.d.ts +9 -0
  359. package/dist/deploy/providers/functions.d.ts.map +1 -0
  360. package/dist/deploy/providers/functions.js +49 -0
  361. package/dist/deploy/providers/functions.js.map +1 -0
  362. package/dist/deploy/providers/hosting.d.ts +13 -0
  363. package/dist/deploy/providers/hosting.d.ts.map +1 -0
  364. package/dist/deploy/providers/hosting.js +149 -0
  365. package/dist/deploy/providers/hosting.js.map +1 -0
  366. package/dist/deploy/providers/storage.d.ts +9 -0
  367. package/dist/deploy/providers/storage.d.ts.map +1 -0
  368. package/dist/deploy/providers/storage.js +46 -0
  369. package/dist/deploy/providers/storage.js.map +1 -0
  370. package/dist/deploy/registry.d.ts +17 -0
  371. package/dist/deploy/registry.d.ts.map +1 -0
  372. package/dist/deploy/registry.js +15 -0
  373. package/dist/deploy/registry.js.map +1 -0
  374. package/dist/deploy/rtdb/rules.d.ts +21 -0
  375. package/dist/deploy/rtdb/rules.d.ts.map +1 -0
  376. package/dist/deploy/rtdb/rules.js +104 -0
  377. package/dist/deploy/rtdb/rules.js.map +1 -0
  378. package/dist/deploy/scope.d.ts +81 -0
  379. package/dist/deploy/scope.d.ts.map +1 -0
  380. package/dist/deploy/scope.js +44 -0
  381. package/dist/deploy/scope.js.map +1 -0
  382. package/dist/deploy/tools.d.ts +55 -0
  383. package/dist/deploy/tools.d.ts.map +1 -0
  384. package/dist/deploy/tools.js +329 -0
  385. package/dist/deploy/tools.js.map +1 -0
  386. package/dist/deploy/with-resolved-scope.d.ts +31 -0
  387. package/dist/deploy/with-resolved-scope.d.ts.map +1 -0
  388. package/dist/deploy/with-resolved-scope.js +73 -0
  389. package/dist/deploy/with-resolved-scope.js.map +1 -0
  390. package/dist/discover/concurrency.d.ts +42 -0
  391. package/dist/discover/concurrency.d.ts.map +1 -0
  392. package/dist/discover/concurrency.js +113 -0
  393. package/dist/discover/concurrency.js.map +1 -0
  394. package/dist/discover/crawler-adapter.d.ts +49 -0
  395. package/dist/discover/crawler-adapter.d.ts.map +1 -0
  396. package/dist/discover/crawler-adapter.js +92 -0
  397. package/dist/discover/crawler-adapter.js.map +1 -0
  398. package/dist/discover/crawler.d.ts +333 -0
  399. package/dist/discover/crawler.d.ts.map +1 -0
  400. package/dist/discover/crawler.js +764 -0
  401. package/dist/discover/crawler.js.map +1 -0
  402. package/dist/discover/findCollectionGroup.d.ts +80 -0
  403. package/dist/discover/findCollectionGroup.d.ts.map +1 -0
  404. package/dist/discover/findCollectionGroup.js +81 -0
  405. package/dist/discover/findCollectionGroup.js.map +1 -0
  406. package/dist/discover/index.d.ts +15 -0
  407. package/dist/discover/index.d.ts.map +1 -0
  408. package/dist/discover/index.js +24 -0
  409. package/dist/discover/index.js.map +1 -0
  410. package/dist/discover/merge.d.ts +108 -0
  411. package/dist/discover/merge.d.ts.map +1 -0
  412. package/dist/discover/merge.js +394 -0
  413. package/dist/discover/merge.js.map +1 -0
  414. package/dist/discover/rest-crawler-firestore.d.ts +51 -0
  415. package/dist/discover/rest-crawler-firestore.d.ts.map +1 -0
  416. package/dist/discover/rest-crawler-firestore.js +154 -0
  417. package/dist/discover/rest-crawler-firestore.js.map +1 -0
  418. package/dist/discover/session.d.ts +116 -0
  419. package/dist/discover/session.d.ts.map +1 -0
  420. package/dist/discover/session.js +331 -0
  421. package/dist/discover/session.js.map +1 -0
  422. package/dist/discover/tools.d.ts +59 -0
  423. package/dist/discover/tools.d.ts.map +1 -0
  424. package/dist/discover/tools.js +115 -0
  425. package/dist/discover/tools.js.map +1 -0
  426. package/dist/discover/types.d.ts +191 -0
  427. package/dist/discover/types.d.ts.map +1 -0
  428. package/dist/discover/types.js +12 -0
  429. package/dist/discover/types.js.map +1 -0
  430. package/dist/discover/wire.d.ts +81 -0
  431. package/dist/discover/wire.d.ts.map +1 -0
  432. package/dist/discover/wire.js +308 -0
  433. package/dist/discover/wire.js.map +1 -0
  434. package/dist/pkg-version.d.ts +2 -0
  435. package/dist/pkg-version.d.ts.map +1 -0
  436. package/dist/pkg-version.js +47 -0
  437. package/dist/pkg-version.js.map +1 -0
  438. package/dist/register/esm-exports.d.ts +26 -0
  439. package/dist/register/esm-exports.d.ts.map +1 -0
  440. package/dist/register/esm-exports.js +61 -0
  441. package/dist/register/esm-exports.js.map +1 -0
  442. package/dist/register/exempt.d.ts +11 -0
  443. package/dist/register/exempt.d.ts.map +1 -0
  444. package/dist/register/exempt.js +74 -0
  445. package/dist/register/exempt.js.map +1 -0
  446. package/dist/register/hooks.d.ts +13 -0
  447. package/dist/register/hooks.d.ts.map +1 -0
  448. package/dist/register/hooks.js +15 -0
  449. package/dist/register/hooks.js.map +1 -0
  450. package/dist/register/index.d.ts +5 -0
  451. package/dist/register/index.d.ts.map +1 -0
  452. package/dist/register/index.js +126 -0
  453. package/dist/register/index.js.map +1 -0
  454. package/dist/register/mapping.d.ts +17 -0
  455. package/dist/register/mapping.d.ts.map +1 -0
  456. package/dist/register/mapping.js +31 -0
  457. package/dist/register/mapping.js.map +1 -0
  458. package/dist/registry/admin-deps.d.ts +17 -0
  459. package/dist/registry/admin-deps.d.ts.map +1 -0
  460. package/dist/registry/admin-deps.js +68 -0
  461. package/dist/registry/admin-deps.js.map +1 -0
  462. package/dist/registry/compose.d.ts +68 -0
  463. package/dist/registry/compose.d.ts.map +1 -0
  464. package/dist/registry/compose.js +113 -0
  465. package/dist/registry/compose.js.map +1 -0
  466. package/dist/registry/index.d.ts +11 -0
  467. package/dist/registry/index.d.ts.map +1 -0
  468. package/dist/registry/index.js +11 -0
  469. package/dist/registry/index.js.map +1 -0
  470. package/dist/remote/index.d.ts +232 -0
  471. package/dist/remote/index.d.ts.map +1 -0
  472. package/dist/remote/index.js +719 -0
  473. package/dist/remote/index.js.map +1 -0
  474. package/dist/rtdb/rules-json.d.ts +8 -0
  475. package/dist/rtdb/rules-json.d.ts.map +1 -0
  476. package/dist/rtdb/rules-json.js +17 -0
  477. package/dist/rtdb/rules-json.js.map +1 -0
  478. package/dist/serve/bridge-mount.d.ts +38 -0
  479. package/dist/serve/bridge-mount.d.ts.map +1 -0
  480. package/dist/serve/bridge-mount.js +162 -0
  481. package/dist/serve/bridge-mount.js.map +1 -0
  482. package/dist/serve/bundler.d.ts +134 -0
  483. package/dist/serve/bundler.d.ts.map +1 -0
  484. package/dist/serve/bundler.js +452 -0
  485. package/dist/serve/bundler.js.map +1 -0
  486. package/dist/serve/capture-store.d.ts +27 -0
  487. package/dist/serve/capture-store.d.ts.map +1 -0
  488. package/dist/serve/capture-store.js +47 -0
  489. package/dist/serve/capture-store.js.map +1 -0
  490. package/dist/serve/discovery.d.ts +71 -0
  491. package/dist/serve/discovery.d.ts.map +1 -0
  492. package/dist/serve/discovery.js +158 -0
  493. package/dist/serve/discovery.js.map +1 -0
  494. package/dist/serve/docs-ui/_astro/_slug_.BsN3bPok.css +1 -0
  495. package/dist/serve/docs-ui/docs/_rhythm/index.html +99 -0
  496. package/dist/serve/docs-ui/docs/_rhythm.md +101 -0
  497. package/dist/serve/docs-ui/docs/index.html +1 -0
  498. package/dist/serve/docs-ui/docs/index.json +9914 -0
  499. package/dist/serve/docs-ui/docs/pyric-admin-firestore/index.html +38 -0
  500. package/dist/serve/docs-ui/docs/pyric-admin-firestore-explanation-error-translation/index.html +57 -0
  501. package/dist/serve/docs-ui/docs/pyric-admin-firestore-explanation-error-translation.md +87 -0
  502. package/dist/serve/docs-ui/docs/pyric-admin-firestore-explanation-per-call-delegate/index.html +58 -0
  503. package/dist/serve/docs-ui/docs/pyric-admin-firestore-explanation-per-call-delegate.md +86 -0
  504. package/dist/serve/docs-ui/docs/pyric-admin-firestore-explanation-why-mirror-admin-shape/index.html +59 -0
  505. package/dist/serve/docs-ui/docs/pyric-admin-firestore-explanation-why-mirror-admin-shape.md +82 -0
  506. package/dist/serve/docs-ui/docs/pyric-admin-firestore-how-to-run-a-transaction/index.html +53 -0
  507. package/dist/serve/docs-ui/docs/pyric-admin-firestore-how-to-run-a-transaction.md +70 -0
  508. package/dist/serve/docs-ui/docs/pyric-admin-firestore-how-to-seed-and-set-rules/index.html +62 -0
  509. package/dist/serve/docs-ui/docs/pyric-admin-firestore-how-to-seed-and-set-rules.md +86 -0
  510. package/dist/serve/docs-ui/docs/pyric-admin-firestore-how-to-translate-denials/index.html +80 -0
  511. package/dist/serve/docs-ui/docs/pyric-admin-firestore-how-to-translate-denials.md +92 -0
  512. package/dist/serve/docs-ui/docs/pyric-admin-firestore-how-to-use-onsnapshot/index.html +57 -0
  513. package/dist/serve/docs-ui/docs/pyric-admin-firestore-how-to-use-onsnapshot.md +78 -0
  514. package/dist/serve/docs-ui/docs/pyric-admin-firestore-how-to-write-a-batch/index.html +50 -0
  515. package/dist/serve/docs-ui/docs/pyric-admin-firestore-how-to-write-a-batch.md +67 -0
  516. package/dist/serve/docs-ui/docs/pyric-admin-firestore-reference-api/index.html +53 -0
  517. package/dist/serve/docs-ui/docs/pyric-admin-firestore-reference-api.md +73 -0
  518. package/dist/serve/docs-ui/docs/pyric-admin-firestore-reference-onsnapshot/index.html +68 -0
  519. package/dist/serve/docs-ui/docs/pyric-admin-firestore-reference-onsnapshot.md +75 -0
  520. package/dist/serve/docs-ui/docs/pyric-admin-firestore-reference-re-exported-types/index.html +76 -0
  521. package/dist/serve/docs-ui/docs/pyric-admin-firestore-reference-re-exported-types.md +95 -0
  522. package/dist/serve/docs-ui/docs/pyric-admin-firestore-reference-sandbox-firestore/index.html +40 -0
  523. package/dist/serve/docs-ui/docs/pyric-admin-firestore-reference-sandbox-firestore.md +73 -0
  524. package/dist/serve/docs-ui/docs/pyric-admin-firestore-tutorials-01-first-admin-session/index.html +118 -0
  525. package/dist/serve/docs-ui/docs/pyric-admin-firestore-tutorials-01-first-admin-session.md +146 -0
  526. package/dist/serve/docs-ui/docs/pyric-admin-firestore.md +49 -0
  527. package/dist/serve/docs-ui/docs/pyric-auth/index.html +64 -0
  528. package/dist/serve/docs-ui/docs/pyric-auth-compat/index.html +874 -0
  529. package/dist/serve/docs-ui/docs/pyric-auth-compat.md +265 -0
  530. package/dist/serve/docs-ui/docs/pyric-auth-reference-api/index.html +112 -0
  531. package/dist/serve/docs-ui/docs/pyric-auth-reference-api.md +129 -0
  532. package/dist/serve/docs-ui/docs/pyric-auth-reference-feature-matrix/index.html +781 -0
  533. package/dist/serve/docs-ui/docs/pyric-auth-reference-feature-matrix.md +198 -0
  534. package/dist/serve/docs-ui/docs/pyric-auth-reference-sandbox-test-driver/index.html +80 -0
  535. package/dist/serve/docs-ui/docs/pyric-auth-reference-sandbox-test-driver.md +107 -0
  536. package/dist/serve/docs-ui/docs/pyric-auth.md +84 -0
  537. package/dist/serve/docs-ui/docs/pyric-database/index.html +36 -0
  538. package/dist/serve/docs-ui/docs/pyric-database-compat/index.html +2428 -0
  539. package/dist/serve/docs-ui/docs/pyric-database-compat.md +850 -0
  540. package/dist/serve/docs-ui/docs/pyric-database-explanation-rules-authoring-and-deploy-are-separate/index.html +23 -0
  541. package/dist/serve/docs-ui/docs/pyric-database-explanation-rules-authoring-and-deploy-are-separate.md +29 -0
  542. package/dist/serve/docs-ui/docs/pyric-database-reference-rules-tooling/index.html +263 -0
  543. package/dist/serve/docs-ui/docs/pyric-database-reference-rules-tooling.md +288 -0
  544. package/dist/serve/docs-ui/docs/pyric-database-tutorials-01-author-rtdb-rules-with-constraints/index.html +116 -0
  545. package/dist/serve/docs-ui/docs/pyric-database-tutorials-01-author-rtdb-rules-with-constraints.md +142 -0
  546. package/dist/serve/docs-ui/docs/pyric-database.md +18 -0
  547. package/dist/serve/docs-ui/docs/pyric-firestore/index.html +54 -0
  548. package/dist/serve/docs-ui/docs/pyric-firestore-compat/index.html +1345 -0
  549. package/dist/serve/docs-ui/docs/pyric-firestore-compat.md +366 -0
  550. package/dist/serve/docs-ui/docs/pyric-firestore-explanation-rules-tooling-is-separate/index.html +79 -0
  551. package/dist/serve/docs-ui/docs/pyric-firestore-explanation-rules-tooling-is-separate.md +62 -0
  552. package/dist/serve/docs-ui/docs/pyric-firestore-explanation-target-symbol-opacity/index.html +59 -0
  553. package/dist/serve/docs-ui/docs/pyric-firestore-explanation-target-symbol-opacity.md +85 -0
  554. package/dist/serve/docs-ui/docs/pyric-firestore-explanation-two-backends-one-surface/index.html +61 -0
  555. package/dist/serve/docs-ui/docs/pyric-firestore-explanation-two-backends-one-surface.md +87 -0
  556. package/dist/serve/docs-ui/docs/pyric-firestore-how-to-build-queries/index.html +105 -0
  557. package/dist/serve/docs-ui/docs/pyric-firestore-how-to-build-queries.md +138 -0
  558. package/dist/serve/docs-ui/docs/pyric-firestore-how-to-migrate-from-firebase-firestore/index.html +65 -0
  559. package/dist/serve/docs-ui/docs/pyric-firestore-how-to-migrate-from-firebase-firestore.md +93 -0
  560. package/dist/serve/docs-ui/docs/pyric-firestore-how-to-pick-a-backend/index.html +112 -0
  561. package/dist/serve/docs-ui/docs/pyric-firestore-how-to-pick-a-backend.md +100 -0
  562. package/dist/serve/docs-ui/docs/pyric-firestore-how-to-run-a-transaction/index.html +42 -0
  563. package/dist/serve/docs-ui/docs/pyric-firestore-how-to-run-a-transaction.md +55 -0
  564. package/dist/serve/docs-ui/docs/pyric-firestore-how-to-use-onsnapshot/index.html +61 -0
  565. package/dist/serve/docs-ui/docs/pyric-firestore-how-to-use-onsnapshot.md +83 -0
  566. package/dist/serve/docs-ui/docs/pyric-firestore-how-to-use-sandbox-ops/index.html +52 -0
  567. package/dist/serve/docs-ui/docs/pyric-firestore-how-to-use-sandbox-ops.md +73 -0
  568. package/dist/serve/docs-ui/docs/pyric-firestore-reference-api/index.html +132 -0
  569. package/dist/serve/docs-ui/docs/pyric-firestore-reference-api.md +160 -0
  570. package/dist/serve/docs-ui/docs/pyric-firestore-reference-feature-matrix/index.html +793 -0
  571. package/dist/serve/docs-ui/docs/pyric-firestore-reference-feature-matrix.md +239 -0
  572. package/dist/serve/docs-ui/docs/pyric-firestore-reference-getfirestore/index.html +55 -0
  573. package/dist/serve/docs-ui/docs/pyric-firestore-reference-getfirestore.md +76 -0
  574. package/dist/serve/docs-ui/docs/pyric-firestore-reference-query-constraints/index.html +78 -0
  575. package/dist/serve/docs-ui/docs/pyric-firestore-reference-query-constraints.md +115 -0
  576. package/dist/serve/docs-ui/docs/pyric-firestore-reference-sandbox-ops/index.html +53 -0
  577. package/dist/serve/docs-ui/docs/pyric-firestore-reference-sandbox-ops.md +76 -0
  578. package/dist/serve/docs-ui/docs/pyric-firestore-reference-tool-factories/index.html +51 -0
  579. package/dist/serve/docs-ui/docs/pyric-firestore-reference-tool-factories.md +65 -0
  580. package/dist/serve/docs-ui/docs/pyric-firestore-tutorials-01-write-a-sandbox-demo/index.html +127 -0
  581. package/dist/serve/docs-ui/docs/pyric-firestore-tutorials-01-write-a-sandbox-demo.md +157 -0
  582. package/dist/serve/docs-ui/docs/pyric-firestore-tutorials-02-swap-to-prod-backend/index.html +85 -0
  583. package/dist/serve/docs-ui/docs/pyric-firestore-tutorials-02-swap-to-prod-backend.md +122 -0
  584. package/dist/serve/docs-ui/docs/pyric-firestore.md +69 -0
  585. package/dist/serve/docs-ui/docs/pyric-rules/index.html +93 -0
  586. package/dist/serve/docs-ui/docs/pyric-rules-explanation-agent-failure-modes/index.html +50 -0
  587. package/dist/serve/docs-ui/docs/pyric-rules-explanation-agent-failure-modes.md +74 -0
  588. package/dist/serve/docs-ui/docs/pyric-rules-explanation-lint-vs-validate-vs-simulate-vs-test/index.html +79 -0
  589. package/dist/serve/docs-ui/docs/pyric-rules-explanation-lint-vs-validate-vs-simulate-vs-test.md +69 -0
  590. package/dist/serve/docs-ui/docs/pyric-rules-explanation-runtime-budget-and-shared-gates/index.html +67 -0
  591. package/dist/serve/docs-ui/docs/pyric-rules-explanation-runtime-budget-and-shared-gates.md +71 -0
  592. package/dist/serve/docs-ui/docs/pyric-rules-explanation-sentinel-expression-engine/index.html +49 -0
  593. package/dist/serve/docs-ui/docs/pyric-rules-explanation-sentinel-expression-engine.md +70 -0
  594. package/dist/serve/docs-ui/docs/pyric-rules-explanation-simulator-vs-rules-test-api/index.html +96 -0
  595. package/dist/serve/docs-ui/docs/pyric-rules-explanation-simulator-vs-rules-test-api.md +76 -0
  596. package/dist/serve/docs-ui/docs/pyric-rules-explanation-the-2-plus-modules-extension/index.html +58 -0
  597. package/dist/serve/docs-ui/docs/pyric-rules-explanation-the-2-plus-modules-extension.md +75 -0
  598. package/dist/serve/docs-ui/docs/pyric-rules-explanation-value-wrappers-design/index.html +62 -0
  599. package/dist/serve/docs-ui/docs/pyric-rules-explanation-value-wrappers-design.md +80 -0
  600. package/dist/serve/docs-ui/docs/pyric-rules-explanation-why-this-package-exists/index.html +34 -0
  601. package/dist/serve/docs-ui/docs/pyric-rules-explanation-why-this-package-exists.md +43 -0
  602. package/dist/serve/docs-ui/docs/pyric-rules-how-to-compare-rulesets-for-weakening/index.html +54 -0
  603. package/dist/serve/docs-ui/docs/pyric-rules-how-to-compare-rulesets-for-weakening.md +69 -0
  604. package/dist/serve/docs-ui/docs/pyric-rules-how-to-inspect-rules-via-the-ast/index.html +89 -0
  605. package/dist/serve/docs-ui/docs/pyric-rules-how-to-inspect-rules-via-the-ast.md +113 -0
  606. package/dist/serve/docs-ui/docs/pyric-rules-how-to-lint-rules-source/index.html +50 -0
  607. package/dist/serve/docs-ui/docs/pyric-rules-how-to-lint-rules-source.md +73 -0
  608. package/dist/serve/docs-ui/docs/pyric-rules-how-to-pin-request-time/index.html +47 -0
  609. package/dist/serve/docs-ui/docs/pyric-rules-how-to-pin-request-time.md +58 -0
  610. package/dist/serve/docs-ui/docs/pyric-rules-how-to-register-tools-with-an-agent/index.html +61 -0
  611. package/dist/serve/docs-ui/docs/pyric-rules-how-to-register-tools-with-an-agent.md +78 -0
  612. package/dist/serve/docs-ui/docs/pyric-rules-how-to-resolve-module-imports/index.html +92 -0
  613. package/dist/serve/docs-ui/docs/pyric-rules-how-to-resolve-module-imports.md +93 -0
  614. package/dist/serve/docs-ui/docs/pyric-rules-how-to-simulate-rules-locally/index.html +89 -0
  615. package/dist/serve/docs-ui/docs/pyric-rules-how-to-simulate-rules-locally.md +117 -0
  616. package/dist/serve/docs-ui/docs/pyric-rules-how-to-test-rules-against-firebase/index.html +70 -0
  617. package/dist/serve/docs-ui/docs/pyric-rules-how-to-test-rules-against-firebase.md +93 -0
  618. package/dist/serve/docs-ui/docs/pyric-rules-reference-api/index.html +129 -0
  619. package/dist/serve/docs-ui/docs/pyric-rules-reference-api.md +176 -0
  620. package/dist/serve/docs-ui/docs/pyric-rules-reference-ast/index.html +85 -0
  621. package/dist/serve/docs-ui/docs/pyric-rules-reference-ast.md +105 -0
  622. package/dist/serve/docs-ui/docs/pyric-rules-reference-errors/index.html +63 -0
  623. package/dist/serve/docs-ui/docs/pyric-rules-reference-errors.md +89 -0
  624. package/dist/serve/docs-ui/docs/pyric-rules-reference-lint-rules/index.html +148 -0
  625. package/dist/serve/docs-ui/docs/pyric-rules-reference-lint-rules.md +159 -0
  626. package/dist/serve/docs-ui/docs/pyric-rules-reference-simulator-context/index.html +66 -0
  627. package/dist/serve/docs-ui/docs/pyric-rules-reference-simulator-context.md +98 -0
  628. package/dist/serve/docs-ui/docs/pyric-rules-reference-stdlib-modules/index.html +239 -0
  629. package/dist/serve/docs-ui/docs/pyric-rules-reference-stdlib-modules.md +135 -0
  630. package/dist/serve/docs-ui/docs/pyric-rules-reference-test-case-schema/index.html +93 -0
  631. package/dist/serve/docs-ui/docs/pyric-rules-reference-test-case-schema.md +109 -0
  632. package/dist/serve/docs-ui/docs/pyric-rules-reference-validator-findings/index.html +86 -0
  633. package/dist/serve/docs-ui/docs/pyric-rules-reference-validator-findings.md +113 -0
  634. package/dist/serve/docs-ui/docs/pyric-rules-reference-value-wrappers/index.html +101 -0
  635. package/dist/serve/docs-ui/docs/pyric-rules-reference-value-wrappers.md +134 -0
  636. package/dist/serve/docs-ui/docs/pyric-rules-tutorials-01-lint-your-first-rules-file/index.html +107 -0
  637. package/dist/serve/docs-ui/docs/pyric-rules-tutorials-01-lint-your-first-rules-file.md +142 -0
  638. package/dist/serve/docs-ui/docs/pyric-rules-tutorials-02-write-a-test-suite-for-your-rules/index.html +151 -0
  639. package/dist/serve/docs-ui/docs/pyric-rules-tutorials-02-write-a-test-suite-for-your-rules.md +194 -0
  640. package/dist/serve/docs-ui/docs/pyric-rules.md +88 -0
  641. package/dist/serve/docs-ui/docs/pyric-sandbox/index.html +67 -0
  642. package/dist/serve/docs-ui/docs/pyric-sandbox-explanation-every-op-is-a-request/index.html +141 -0
  643. package/dist/serve/docs-ui/docs/pyric-sandbox-explanation-every-op-is-a-request.md +157 -0
  644. package/dist/serve/docs-ui/docs/pyric-sandbox-explanation-identity-is-a-context/index.html +66 -0
  645. package/dist/serve/docs-ui/docs/pyric-sandbox-explanation-identity-is-a-context.md +98 -0
  646. package/dist/serve/docs-ui/docs/pyric-sandbox-explanation-internal-adapter-protocol/index.html +71 -0
  647. package/dist/serve/docs-ui/docs/pyric-sandbox-explanation-internal-adapter-protocol.md +105 -0
  648. package/dist/serve/docs-ui/docs/pyric-sandbox-explanation-listener-re-evaluation/index.html +56 -0
  649. package/dist/serve/docs-ui/docs/pyric-sandbox-explanation-listener-re-evaluation.md +80 -0
  650. package/dist/serve/docs-ui/docs/pyric-sandbox-explanation-local-backend-vs-firestore-offline/index.html +64 -0
  651. package/dist/serve/docs-ui/docs/pyric-sandbox-explanation-local-backend-vs-firestore-offline.md +56 -0
  652. package/dist/serve/docs-ui/docs/pyric-sandbox-explanation-why-adapters-are-siblings/index.html +88 -0
  653. package/dist/serve/docs-ui/docs/pyric-sandbox-explanation-why-adapters-are-siblings.md +87 -0
  654. package/dist/serve/docs-ui/docs/pyric-sandbox-explanation-why-this-package-exists/index.html +69 -0
  655. package/dist/serve/docs-ui/docs/pyric-sandbox-explanation-why-this-package-exists.md +57 -0
  656. package/dist/serve/docs-ui/docs/pyric-sandbox-how-to-multiple-isolated-sandboxes/index.html +63 -0
  657. package/dist/serve/docs-ui/docs/pyric-sandbox-how-to-multiple-isolated-sandboxes.md +83 -0
  658. package/dist/serve/docs-ui/docs/pyric-sandbox-how-to-observe-events/index.html +159 -0
  659. package/dist/serve/docs-ui/docs/pyric-sandbox-how-to-observe-events.md +154 -0
  660. package/dist/serve/docs-ui/docs/pyric-sandbox-how-to-pick-an-adapter/index.html +79 -0
  661. package/dist/serve/docs-ui/docs/pyric-sandbox-how-to-pick-an-adapter.md +69 -0
  662. package/dist/serve/docs-ui/docs/pyric-sandbox-how-to-replay-events/index.html +89 -0
  663. package/dist/serve/docs-ui/docs/pyric-sandbox-how-to-replay-events.md +87 -0
  664. package/dist/serve/docs-ui/docs/pyric-sandbox-how-to-reset-between-tests/index.html +68 -0
  665. package/dist/serve/docs-ui/docs/pyric-sandbox-how-to-reset-between-tests.md +86 -0
  666. package/dist/serve/docs-ui/docs/pyric-sandbox-how-to-seed-data-and-rules/index.html +91 -0
  667. package/dist/serve/docs-ui/docs/pyric-sandbox-how-to-seed-data-and-rules.md +112 -0
  668. package/dist/serve/docs-ui/docs/pyric-sandbox-how-to-switch-users/index.html +50 -0
  669. package/dist/serve/docs-ui/docs/pyric-sandbox-how-to-switch-users.md +70 -0
  670. package/dist/serve/docs-ui/docs/pyric-sandbox-how-to-use-admin-reads/index.html +54 -0
  671. package/dist/serve/docs-ui/docs/pyric-sandbox-how-to-use-admin-reads.md +73 -0
  672. package/dist/serve/docs-ui/docs/pyric-sandbox-reference-api/index.html +77 -0
  673. package/dist/serve/docs-ui/docs/pyric-sandbox-reference-api.md +117 -0
  674. package/dist/serve/docs-ui/docs/pyric-sandbox-reference-divergences/index.html +125 -0
  675. package/dist/serve/docs-ui/docs/pyric-sandbox-reference-divergences.md +137 -0
  676. package/dist/serve/docs-ui/docs/pyric-sandbox-reference-error-codes/index.html +110 -0
  677. package/dist/serve/docs-ui/docs/pyric-sandbox-reference-error-codes.md +114 -0
  678. package/dist/serve/docs-ui/docs/pyric-sandbox-reference-internal-protocol/index.html +72 -0
  679. package/dist/serve/docs-ui/docs/pyric-sandbox-reference-internal-protocol.md +99 -0
  680. package/dist/serve/docs-ui/docs/pyric-sandbox-reference-sandbox-and-context/index.html +90 -0
  681. package/dist/serve/docs-ui/docs/pyric-sandbox-reference-sandbox-and-context.md +128 -0
  682. package/dist/serve/docs-ui/docs/pyric-sandbox-reference-sandbox-event/index.html +146 -0
  683. package/dist/serve/docs-ui/docs/pyric-sandbox-reference-sandbox-event.md +188 -0
  684. package/dist/serve/docs-ui/docs/pyric-sandbox-reference-snapshot-and-admin/index.html +53 -0
  685. package/dist/serve/docs-ui/docs/pyric-sandbox-reference-snapshot-and-admin.md +77 -0
  686. package/dist/serve/docs-ui/docs/pyric-sandbox-tutorials-01-your-first-sandbox-session/index.html +115 -0
  687. package/dist/serve/docs-ui/docs/pyric-sandbox-tutorials-01-your-first-sandbox-session.md +154 -0
  688. package/dist/serve/docs-ui/docs/pyric-sandbox-tutorials-02-use-the-sandbox-in-a-test-harness/index.html +191 -0
  689. package/dist/serve/docs-ui/docs/pyric-sandbox-tutorials-02-use-the-sandbox-in-a-test-harness.md +222 -0
  690. package/dist/serve/docs-ui/docs/pyric-sandbox-tutorials-03-build-a-traffic-monitor/index.html +163 -0
  691. package/dist/serve/docs-ui/docs/pyric-sandbox-tutorials-03-build-a-traffic-monitor.md +192 -0
  692. package/dist/serve/docs-ui/docs/pyric-sandbox.md +63 -0
  693. package/dist/serve/docs-ui/docs/pyric-storage/index.html +65 -0
  694. package/dist/serve/docs-ui/docs/pyric-storage-compat/index.html +1076 -0
  695. package/dist/serve/docs-ui/docs/pyric-storage-compat.md +337 -0
  696. package/dist/serve/docs-ui/docs/pyric-storage-explanation-implementation-scope/index.html +63 -0
  697. package/dist/serve/docs-ui/docs/pyric-storage-explanation-implementation-scope.md +104 -0
  698. package/dist/serve/docs-ui/docs/pyric-storage-explanation-session-archive-use-case/index.html +58 -0
  699. package/dist/serve/docs-ui/docs/pyric-storage-explanation-session-archive-use-case.md +80 -0
  700. package/dist/serve/docs-ui/docs/pyric-storage-explanation-why-indexeddb/index.html +50 -0
  701. package/dist/serve/docs-ui/docs/pyric-storage-explanation-why-indexeddb.md +82 -0
  702. package/dist/serve/docs-ui/docs/pyric-storage-how-to-enforce-rules/index.html +104 -0
  703. package/dist/serve/docs-ui/docs/pyric-storage-how-to-enforce-rules.md +111 -0
  704. package/dist/serve/docs-ui/docs/pyric-storage-how-to-list-and-delete/index.html +53 -0
  705. package/dist/serve/docs-ui/docs/pyric-storage-how-to-list-and-delete.md +76 -0
  706. package/dist/serve/docs-ui/docs/pyric-storage-how-to-round-trip-metadata/index.html +77 -0
  707. package/dist/serve/docs-ui/docs/pyric-storage-how-to-round-trip-metadata.md +100 -0
  708. package/dist/serve/docs-ui/docs/pyric-storage-how-to-switch-backends/index.html +65 -0
  709. package/dist/serve/docs-ui/docs/pyric-storage-how-to-switch-backends.md +82 -0
  710. package/dist/serve/docs-ui/docs/pyric-storage-how-to-test-rule-expressions/index.html +70 -0
  711. package/dist/serve/docs-ui/docs/pyric-storage-how-to-test-rule-expressions.md +82 -0
  712. package/dist/serve/docs-ui/docs/pyric-storage-reference-api/index.html +92 -0
  713. package/dist/serve/docs-ui/docs/pyric-storage-reference-api.md +152 -0
  714. package/dist/serve/docs-ui/docs/pyric-storage-reference-error-codes/index.html +46 -0
  715. package/dist/serve/docs-ui/docs/pyric-storage-reference-error-codes.md +66 -0
  716. package/dist/serve/docs-ui/docs/pyric-storage-reference-rules-subset/index.html +73 -0
  717. package/dist/serve/docs-ui/docs/pyric-storage-reference-rules-subset.md +90 -0
  718. package/dist/serve/docs-ui/docs/pyric-storage-reference-storage-options/index.html +45 -0
  719. package/dist/serve/docs-ui/docs/pyric-storage-reference-storage-options.md +65 -0
  720. package/dist/serve/docs-ui/docs/pyric-storage-tutorials-01-upload-and-download/index.html +114 -0
  721. package/dist/serve/docs-ui/docs/pyric-storage-tutorials-01-upload-and-download.md +141 -0
  722. package/dist/serve/docs-ui/docs/pyric-storage.md +63 -0
  723. package/dist/serve/docs-ui/docs/pyric-tools/index.html +45 -0
  724. package/dist/serve/docs-ui/docs/pyric-tools-bridge/index.html +71 -0
  725. package/dist/serve/docs-ui/docs/pyric-tools-bridge.md +90 -0
  726. package/dist/serve/docs-ui/docs/pyric-tools-deploy/index.html +59 -0
  727. package/dist/serve/docs-ui/docs/pyric-tools-deploy-explanation-primitives-vs-orchestrators/index.html +63 -0
  728. package/dist/serve/docs-ui/docs/pyric-tools-deploy-explanation-primitives-vs-orchestrators.md +83 -0
  729. package/dist/serve/docs-ui/docs/pyric-tools-deploy-explanation-token-caching/index.html +47 -0
  730. package/dist/serve/docs-ui/docs/pyric-tools-deploy-explanation-token-caching.md +70 -0
  731. package/dist/serve/docs-ui/docs/pyric-tools-deploy-explanation-why-no-firebase-cli/index.html +36 -0
  732. package/dist/serve/docs-ui/docs/pyric-tools-deploy-explanation-why-no-firebase-cli.md +50 -0
  733. package/dist/serve/docs-ui/docs/pyric-tools-deploy-explanation-why-this-package-exists/index.html +47 -0
  734. package/dist/serve/docs-ui/docs/pyric-tools-deploy-explanation-why-this-package-exists.md +60 -0
  735. package/dist/serve/docs-ui/docs/pyric-tools-deploy-how-to-build-projectscope-from-firebase-auth/index.html +55 -0
  736. package/dist/serve/docs-ui/docs/pyric-tools-deploy-how-to-build-projectscope-from-firebase-auth.md +68 -0
  737. package/dist/serve/docs-ui/docs/pyric-tools-deploy-how-to-build-projectscope-from-service-account/index.html +35 -0
  738. package/dist/serve/docs-ui/docs/pyric-tools-deploy-how-to-build-projectscope-from-service-account.md +52 -0
  739. package/dist/serve/docs-ui/docs/pyric-tools-deploy-how-to-bundle-and-deploy-a-function/index.html +81 -0
  740. package/dist/serve/docs-ui/docs/pyric-tools-deploy-how-to-bundle-and-deploy-a-function.md +98 -0
  741. package/dist/serve/docs-ui/docs/pyric-tools-deploy-how-to-deploy-firestore-indexes/index.html +71 -0
  742. package/dist/serve/docs-ui/docs/pyric-tools-deploy-how-to-deploy-firestore-indexes.md +91 -0
  743. package/dist/serve/docs-ui/docs/pyric-tools-deploy-how-to-deploy-firestore-rules/index.html +100 -0
  744. package/dist/serve/docs-ui/docs/pyric-tools-deploy-how-to-deploy-firestore-rules.md +105 -0
  745. package/dist/serve/docs-ui/docs/pyric-tools-deploy-how-to-deploy-hosting-rewrites/index.html +86 -0
  746. package/dist/serve/docs-ui/docs/pyric-tools-deploy-how-to-deploy-hosting-rewrites.md +92 -0
  747. package/dist/serve/docs-ui/docs/pyric-tools-deploy-how-to-deploy-realtime-database-rules/index.html +132 -0
  748. package/dist/serve/docs-ui/docs/pyric-tools-deploy-how-to-deploy-realtime-database-rules.md +165 -0
  749. package/dist/serve/docs-ui/docs/pyric-tools-deploy-how-to-deploy-to-a-preview-channel/index.html +46 -0
  750. package/dist/serve/docs-ui/docs/pyric-tools-deploy-how-to-deploy-to-a-preview-channel.md +62 -0
  751. package/dist/serve/docs-ui/docs/pyric-tools-deploy-how-to-handle-errors-and-outcomes/index.html +75 -0
  752. package/dist/serve/docs-ui/docs/pyric-tools-deploy-how-to-handle-errors-and-outcomes.md +94 -0
  753. package/dist/serve/docs-ui/docs/pyric-tools-deploy-how-to-provision-a-firestore-database/index.html +48 -0
  754. package/dist/serve/docs-ui/docs/pyric-tools-deploy-how-to-provision-a-firestore-database.md +65 -0
  755. package/dist/serve/docs-ui/docs/pyric-tools-deploy-how-to-register-tools-with-an-agent/index.html +65 -0
  756. package/dist/serve/docs-ui/docs/pyric-tools-deploy-how-to-register-tools-with-an-agent.md +82 -0
  757. package/dist/serve/docs-ui/docs/pyric-tools-deploy-reference-api/index.html +155 -0
  758. package/dist/serve/docs-ui/docs/pyric-tools-deploy-reference-api.md +190 -0
  759. package/dist/serve/docs-ui/docs/pyric-tools-deploy-reference-cli-agent-io/index.html +84 -0
  760. package/dist/serve/docs-ui/docs/pyric-tools-deploy-reference-cli-agent-io.md +66 -0
  761. package/dist/serve/docs-ui/docs/pyric-tools-deploy-reference-error-codes/index.html +71 -0
  762. package/dist/serve/docs-ui/docs/pyric-tools-deploy-reference-error-codes.md +102 -0
  763. package/dist/serve/docs-ui/docs/pyric-tools-deploy-reference-firestore-namespace/index.html +138 -0
  764. package/dist/serve/docs-ui/docs/pyric-tools-deploy-reference-firestore-namespace.md +175 -0
  765. package/dist/serve/docs-ui/docs/pyric-tools-deploy-reference-functions-namespace/index.html +105 -0
  766. package/dist/serve/docs-ui/docs/pyric-tools-deploy-reference-functions-namespace.md +133 -0
  767. package/dist/serve/docs-ui/docs/pyric-tools-deploy-reference-hosting-config/index.html +194 -0
  768. package/dist/serve/docs-ui/docs/pyric-tools-deploy-reference-hosting-config.md +95 -0
  769. package/dist/serve/docs-ui/docs/pyric-tools-deploy-reference-hosting-namespace/index.html +99 -0
  770. package/dist/serve/docs-ui/docs/pyric-tools-deploy-reference-hosting-namespace.md +126 -0
  771. package/dist/serve/docs-ui/docs/pyric-tools-deploy-reference-rtdb-namespace/index.html +110 -0
  772. package/dist/serve/docs-ui/docs/pyric-tools-deploy-reference-rtdb-namespace.md +133 -0
  773. package/dist/serve/docs-ui/docs/pyric-tools-deploy-reference-scope-and-outcome/index.html +68 -0
  774. package/dist/serve/docs-ui/docs/pyric-tools-deploy-reference-scope-and-outcome.md +88 -0
  775. package/dist/serve/docs-ui/docs/pyric-tools-deploy-reference-tool-factories/index.html +160 -0
  776. package/dist/serve/docs-ui/docs/pyric-tools-deploy-reference-tool-factories.md +104 -0
  777. package/dist/serve/docs-ui/docs/pyric-tools-deploy-tutorials-01-deploy-a-cloud-function/index.html +88 -0
  778. package/dist/serve/docs-ui/docs/pyric-tools-deploy-tutorials-01-deploy-a-cloud-function.md +119 -0
  779. package/dist/serve/docs-ui/docs/pyric-tools-deploy.md +52 -0
  780. package/dist/serve/docs-ui/docs/pyric-tools-how-to-build-a-standalone-binary/index.html +92 -0
  781. package/dist/serve/docs-ui/docs/pyric-tools-how-to-build-a-standalone-binary.md +95 -0
  782. package/dist/serve/docs-ui/docs/pyric-tools-how-to-configure-auth-providers-and-domains/index.html +101 -0
  783. package/dist/serve/docs-ui/docs/pyric-tools-how-to-configure-auth-providers-and-domains.md +126 -0
  784. package/dist/serve/docs-ui/docs/pyric-tools-how-to-discover-a-schema-from-firestore/index.html +95 -0
  785. package/dist/serve/docs-ui/docs/pyric-tools-how-to-discover-a-schema-from-firestore.md +119 -0
  786. package/dist/serve/docs-ui/docs/pyric-tools-how-to-promote-sandbox-state-to-a-fixture/index.html +52 -0
  787. package/dist/serve/docs-ui/docs/pyric-tools-how-to-promote-sandbox-state-to-a-fixture.md +83 -0
  788. package/dist/serve/docs-ui/docs/pyric-tools-how-to-serve-persistence-and-multi-tab/index.html +232 -0
  789. package/dist/serve/docs-ui/docs/pyric-tools-how-to-serve-persistence-and-multi-tab.md +178 -0
  790. package/dist/serve/docs-ui/docs/pyric-tools-how-to-use-the-vite-plugin/index.html +340 -0
  791. package/dist/serve/docs-ui/docs/pyric-tools-how-to-use-the-vite-plugin.md +288 -0
  792. package/dist/serve/docs-ui/docs/pyric-tools-how-to-verify-against-a-captured-session/index.html +128 -0
  793. package/dist/serve/docs-ui/docs/pyric-tools-how-to-verify-against-a-captured-session.md +173 -0
  794. package/dist/serve/docs-ui/docs/pyric-tools-reference-cli/index.html +433 -0
  795. package/dist/serve/docs-ui/docs/pyric-tools-reference-cli.md +252 -0
  796. package/dist/serve/docs-ui/docs/pyric-tools-reference-verify/index.html +81 -0
  797. package/dist/serve/docs-ui/docs/pyric-tools-reference-verify.md +98 -0
  798. package/dist/serve/docs-ui/docs/pyric-tools-tutorials-getting-started/index.html +92 -0
  799. package/dist/serve/docs-ui/docs/pyric-tools-tutorials-getting-started.md +117 -0
  800. package/dist/serve/docs-ui/docs/pyric-tools-tutorials-server-adoption/index.html +221 -0
  801. package/dist/serve/docs-ui/docs/pyric-tools-tutorials-server-adoption.md +239 -0
  802. package/dist/serve/docs-ui/docs/pyric-tools-tutorials-wire-claude-code/index.html +205 -0
  803. package/dist/serve/docs-ui/docs/pyric-tools-tutorials-wire-claude-code.md +250 -0
  804. package/dist/serve/docs-ui/docs/pyric-tools.md +47 -0
  805. package/dist/serve/docs-ui/docs/ui/index.html +76 -0
  806. package/dist/serve/docs-ui/docs/ui-auth-authsigninhelper/index.html +194 -0
  807. package/dist/serve/docs-ui/docs/ui-auth-authsigninhelper.md +108 -0
  808. package/dist/serve/docs-ui/docs/ui-auth-authusers/index.html +258 -0
  809. package/dist/serve/docs-ui/docs/ui-auth-authusers.md +174 -0
  810. package/dist/serve/docs-ui/docs/ui-firestore-collectionlist/index.html +92 -0
  811. package/dist/serve/docs-ui/docs/ui-firestore-collectionlist.md +71 -0
  812. package/dist/serve/docs-ui/docs/ui-firestore-deletewithconfirm/index.html +128 -0
  813. package/dist/serve/docs-ui/docs/ui-firestore-deletewithconfirm.md +94 -0
  814. package/dist/serve/docs-ui/docs/ui-firestore-documenteditor/index.html +154 -0
  815. package/dist/serve/docs-ui/docs/ui-firestore-documenteditor.md +107 -0
  816. package/dist/serve/docs-ui/docs/ui-firestore-documentlist/index.html +132 -0
  817. package/dist/serve/docs-ui/docs/ui-firestore-documentlist.md +86 -0
  818. package/dist/serve/docs-ui/docs/ui-firestore-documentpreview/index.html +159 -0
  819. package/dist/serve/docs-ui/docs/ui-firestore-documentpreview.md +78 -0
  820. package/dist/serve/docs-ui/docs/ui-firestore-querybuilder/index.html +104 -0
  821. package/dist/serve/docs-ui/docs/ui-firestore-querybuilder.md +95 -0
  822. package/dist/serve/docs-ui/docs/ui-firestore-referencepicker/index.html +113 -0
  823. package/dist/serve/docs-ui/docs/ui-firestore-referencepicker.md +85 -0
  824. package/dist/serve/docs-ui/docs/ui-primitives-badge/index.html +56 -0
  825. package/dist/serve/docs-ui/docs/ui-primitives-badge.md +34 -0
  826. package/dist/serve/docs-ui/docs/ui-primitives-confirmdialog/index.html +140 -0
  827. package/dist/serve/docs-ui/docs/ui-primitives-confirmdialog.md +98 -0
  828. package/dist/serve/docs-ui/docs/ui-primitives-copybutton/index.html +58 -0
  829. package/dist/serve/docs-ui/docs/ui-primitives-copybutton.md +31 -0
  830. package/dist/serve/docs-ui/docs/ui-primitives-jsonview/index.html +58 -0
  831. package/dist/serve/docs-ui/docs/ui-primitives-jsonview.md +41 -0
  832. package/dist/serve/docs-ui/docs/ui-primitives-segmentedcontrol/index.html +70 -0
  833. package/dist/serve/docs-ui/docs/ui-primitives-segmentedcontrol.md +44 -0
  834. package/dist/serve/docs-ui/docs/ui-primitives-toast/index.html +87 -0
  835. package/dist/serve/docs-ui/docs/ui-primitives-toast.md +74 -0
  836. package/dist/serve/docs-ui/docs/ui-primitives-virtuallist/index.html +85 -0
  837. package/dist/serve/docs-ui/docs/ui-primitives-virtuallist.md +48 -0
  838. package/dist/serve/docs-ui/docs/ui-storage/index.html +154 -0
  839. package/dist/serve/docs-ui/docs/ui-storage-deleteselectionwithconfirm/index.html +127 -0
  840. package/dist/serve/docs-ui/docs/ui-storage-deleteselectionwithconfirm.md +83 -0
  841. package/dist/serve/docs-ui/docs/ui-storage-objectbrowser/index.html +137 -0
  842. package/dist/serve/docs-ui/docs/ui-storage-objectbrowser.md +84 -0
  843. package/dist/serve/docs-ui/docs/ui-storage-objectinspector/index.html +139 -0
  844. package/dist/serve/docs-ui/docs/ui-storage-objectinspector.md +87 -0
  845. package/dist/serve/docs-ui/docs/ui-storage-pathbreadcrumb/index.html +72 -0
  846. package/dist/serve/docs-ui/docs/ui-storage-pathbreadcrumb.md +51 -0
  847. package/dist/serve/docs-ui/docs/ui-storage-rules-aware-affordances/index.html +65 -0
  848. package/dist/serve/docs-ui/docs/ui-storage-rules-aware-affordances.md +53 -0
  849. package/dist/serve/docs-ui/docs/ui-storage-uploaddropzone/index.html +93 -0
  850. package/dist/serve/docs-ui/docs/ui-storage-uploaddropzone.md +72 -0
  851. package/dist/serve/docs-ui/docs/ui-storage-usestoragerulesgate/index.html +153 -0
  852. package/dist/serve/docs-ui/docs/ui-storage-usestoragerulesgate.md +105 -0
  853. package/dist/serve/docs-ui/docs/ui-storage.md +165 -0
  854. package/dist/serve/docs-ui/docs/ui-traffic/index.html +88 -0
  855. package/dist/serve/docs-ui/docs/ui-traffic-ruleheatmap/index.html +79 -0
  856. package/dist/serve/docs-ui/docs/ui-traffic-ruleheatmap.md +54 -0
  857. package/dist/serve/docs-ui/docs/ui-traffic-trafficdetail/index.html +78 -0
  858. package/dist/serve/docs-ui/docs/ui-traffic-trafficdetail.md +53 -0
  859. package/dist/serve/docs-ui/docs/ui-traffic-trafficlog/index.html +118 -0
  860. package/dist/serve/docs-ui/docs/ui-traffic-trafficlog.md +63 -0
  861. package/dist/serve/docs-ui/docs/ui-traffic-trafficstats/index.html +51 -0
  862. package/dist/serve/docs-ui/docs/ui-traffic-trafficstats.md +40 -0
  863. package/dist/serve/docs-ui/docs/ui-traffic.md +96 -0
  864. package/dist/serve/docs-ui/docs/ui.md +88 -0
  865. package/dist/serve/docs-ui/index.html +1 -0
  866. package/dist/serve/docs-ui/llms.txt +221 -0
  867. package/dist/serve/entries/app.d.ts +26 -0
  868. package/dist/serve/entries/app.d.ts.map +1 -0
  869. package/dist/serve/entries/app.js +51 -0
  870. package/dist/serve/entries/app.js.map +1 -0
  871. package/dist/serve/entries/auth-helper-core.d.ts +47 -0
  872. package/dist/serve/entries/auth-helper-core.d.ts.map +1 -0
  873. package/dist/serve/entries/auth-helper-core.js +121 -0
  874. package/dist/serve/entries/auth-helper-core.js.map +1 -0
  875. package/dist/serve/entries/auth-helper-dom.d.ts +14 -0
  876. package/dist/serve/entries/auth-helper-dom.d.ts.map +1 -0
  877. package/dist/serve/entries/auth-helper-dom.js +116 -0
  878. package/dist/serve/entries/auth-helper-dom.js.map +1 -0
  879. package/dist/serve/entries/auth.d.ts +62 -0
  880. package/dist/serve/entries/auth.d.ts.map +1 -0
  881. package/dist/serve/entries/auth.js +128 -0
  882. package/dist/serve/entries/auth.js.map +1 -0
  883. package/dist/serve/entries/bridge-url.d.ts +25 -0
  884. package/dist/serve/entries/bridge-url.d.ts.map +1 -0
  885. package/dist/serve/entries/bridge-url.js +30 -0
  886. package/dist/serve/entries/bridge-url.js.map +1 -0
  887. package/dist/serve/entries/database.d.ts +34 -0
  888. package/dist/serve/entries/database.d.ts.map +1 -0
  889. package/dist/serve/entries/database.js +42 -0
  890. package/dist/serve/entries/database.js.map +1 -0
  891. package/dist/serve/entries/firestore.d.ts +68 -0
  892. package/dist/serve/entries/firestore.d.ts.map +1 -0
  893. package/dist/serve/entries/firestore.js +115 -0
  894. package/dist/serve/entries/firestore.js.map +1 -0
  895. package/dist/serve/entries/init.d.ts +2 -0
  896. package/dist/serve/entries/init.d.ts.map +1 -0
  897. package/dist/serve/entries/init.js +14 -0
  898. package/dist/serve/entries/init.js.map +1 -0
  899. package/dist/serve/entries/keepalive.d.ts +20 -0
  900. package/dist/serve/entries/keepalive.d.ts.map +1 -0
  901. package/dist/serve/entries/keepalive.js +38 -0
  902. package/dist/serve/entries/keepalive.js.map +1 -0
  903. package/dist/serve/entries/runtime.d.ts +60 -0
  904. package/dist/serve/entries/runtime.d.ts.map +1 -0
  905. package/dist/serve/entries/runtime.js +555 -0
  906. package/dist/serve/entries/runtime.js.map +1 -0
  907. package/dist/serve/entries/session-store.d.ts +45 -0
  908. package/dist/serve/entries/session-store.d.ts.map +1 -0
  909. package/dist/serve/entries/session-store.js +71 -0
  910. package/dist/serve/entries/session-store.js.map +1 -0
  911. package/dist/serve/entries/storage.d.ts +23 -0
  912. package/dist/serve/entries/storage.d.ts.map +1 -0
  913. package/dist/serve/entries/storage.js +49 -0
  914. package/dist/serve/entries/storage.js.map +1 -0
  915. package/dist/serve/entries/tab-sync-wiring.d.ts +88 -0
  916. package/dist/serve/entries/tab-sync-wiring.d.ts.map +1 -0
  917. package/dist/serve/entries/tab-sync-wiring.js +217 -0
  918. package/dist/serve/entries/tab-sync-wiring.js.map +1 -0
  919. package/dist/serve/namespace.d.ts +93 -0
  920. package/dist/serve/namespace.d.ts.map +1 -0
  921. package/dist/serve/namespace.js +367 -0
  922. package/dist/serve/namespace.js.map +1 -0
  923. package/dist/serve/open-browser.d.ts +23 -0
  924. package/dist/serve/open-browser.d.ts.map +1 -0
  925. package/dist/serve/open-browser.js +58 -0
  926. package/dist/serve/open-browser.js.map +1 -0
  927. package/dist/serve/playground-ui/_astro/HomePage.BFOjZGZp.js +2 -0
  928. package/dist/serve/playground-ui/_astro/PlaygroundPage.3jki8il0.js +3300 -0
  929. package/dist/serve/playground-ui/_astro/PlaygroundPage.MhP_vFvK.css +32 -0
  930. package/dist/serve/playground-ui/_astro/TopBar.ChifCjLD.js +5025 -0
  931. package/dist/serve/playground-ui/_astro/client.D61DpmEZ.js +274 -0
  932. package/dist/serve/playground-ui/_astro/client.GCK88uRs.js +1 -0
  933. package/dist/serve/playground-ui/_astro/esbuild.BHljloGq.wasm +0 -0
  934. package/dist/serve/playground-ui/_astro/index.B9aLOeXL.js +29 -0
  935. package/dist/serve/playground-ui/_astro/index.BTKE7uRF.js +1227 -0
  936. package/dist/serve/playground-ui/_astro/index.BfCthstx.css +1 -0
  937. package/dist/serve/playground-ui/_astro/index.Mr0Dtjih.js +342 -0
  938. package/dist/serve/playground-ui/_astro/ort-wasm-simd-threaded.asyncify.DMmc6YqF.wasm +0 -0
  939. package/dist/serve/playground-ui/favicon.svg +4 -0
  940. package/dist/serve/playground-ui/index.html +2 -0
  941. package/dist/serve/playground-ui/playground/index.html +2 -0
  942. package/dist/serve/rules.d.ts +45 -0
  943. package/dist/serve/rules.d.ts.map +1 -0
  944. package/dist/serve/rules.js +139 -0
  945. package/dist/serve/rules.js.map +1 -0
  946. package/dist/serve/sandbox-marker.d.ts +9 -0
  947. package/dist/serve/sandbox-marker.d.ts.map +1 -0
  948. package/dist/serve/sandbox-marker.js +32 -0
  949. package/dist/serve/sandbox-marker.js.map +1 -0
  950. package/dist/serve/server.d.ts +135 -0
  951. package/dist/serve/server.d.ts.map +1 -0
  952. package/dist/serve/server.js +328 -0
  953. package/dist/serve/server.js.map +1 -0
  954. package/dist/serve/standalone-assets.d.ts +66 -0
  955. package/dist/serve/standalone-assets.d.ts.map +1 -0
  956. package/dist/serve/standalone-assets.js +144 -0
  957. package/dist/serve/standalone-assets.js.map +1 -0
  958. package/dist/serve/state-store.d.ts +45 -0
  959. package/dist/serve/state-store.d.ts.map +1 -0
  960. package/dist/serve/state-store.js +120 -0
  961. package/dist/serve/state-store.js.map +1 -0
  962. package/dist/serve/studio/disk-project-store.d.ts +9 -0
  963. package/dist/serve/studio/disk-project-store.d.ts.map +1 -0
  964. package/dist/serve/studio/disk-project-store.js +173 -0
  965. package/dist/serve/studio/disk-project-store.js.map +1 -0
  966. package/dist/serve/studio/disk-workspace.d.ts +14 -0
  967. package/dist/serve/studio/disk-workspace.d.ts.map +1 -0
  968. package/dist/serve/studio/disk-workspace.js +152 -0
  969. package/dist/serve/studio/disk-workspace.js.map +1 -0
  970. package/dist/serve/studio/index.d.ts +10 -0
  971. package/dist/serve/studio/index.d.ts.map +1 -0
  972. package/dist/serve/studio/index.js +9 -0
  973. package/dist/serve/studio/index.js.map +1 -0
  974. package/dist/serve/studio/routes.d.ts +40 -0
  975. package/dist/serve/studio/routes.d.ts.map +1 -0
  976. package/dist/serve/studio/routes.js +182 -0
  977. package/dist/serve/studio/routes.js.map +1 -0
  978. package/dist/serve/studio/store-types.d.ts +45 -0
  979. package/dist/serve/studio/store-types.d.ts.map +1 -0
  980. package/dist/serve/studio/store-types.js +11 -0
  981. package/dist/serve/studio/store-types.js.map +1 -0
  982. package/dist/serve/studio-ui/assets/RulesCodeEditor-Bncteb8z.js +23 -0
  983. package/dist/serve/studio-ui/assets/index-CmkJxFcG.js +4577 -0
  984. package/dist/serve/studio-ui/assets/index-DNK39P6C.css +1 -0
  985. package/dist/serve/studio-ui/assets/seed-Bab4ArXQ.js +2 -0
  986. package/dist/serve/studio-ui/index.html +32 -0
  987. package/dist/serve/studio-ui/pyric-logo.svg +76 -0
  988. package/dist/serve/vite-plugin.d.ts +57 -0
  989. package/dist/serve/vite-plugin.d.ts.map +1 -0
  990. package/dist/serve/vite-plugin.js +687 -0
  991. package/dist/serve/vite-plugin.js.map +1 -0
  992. package/dist/serve/worker/client.d.ts +668 -0
  993. package/dist/serve/worker/client.d.ts.map +1 -0
  994. package/dist/serve/worker/client.js +1635 -0
  995. package/dist/serve/worker/client.js.map +1 -0
  996. package/dist/serve/worker/entry.d.ts +40 -0
  997. package/dist/serve/worker/entry.d.ts.map +1 -0
  998. package/dist/serve/worker/entry.js +122 -0
  999. package/dist/serve/worker/entry.js.map +1 -0
  1000. package/dist/serve/worker/host-auth.d.ts +47 -0
  1001. package/dist/serve/worker/host-auth.d.ts.map +1 -0
  1002. package/dist/serve/worker/host-auth.js +434 -0
  1003. package/dist/serve/worker/host-auth.js.map +1 -0
  1004. package/dist/serve/worker/host-context.d.ts +180 -0
  1005. package/dist/serve/worker/host-context.d.ts.map +1 -0
  1006. package/dist/serve/worker/host-context.js +45 -0
  1007. package/dist/serve/worker/host-context.js.map +1 -0
  1008. package/dist/serve/worker/host-events.d.ts +21 -0
  1009. package/dist/serve/worker/host-events.d.ts.map +1 -0
  1010. package/dist/serve/worker/host-events.js +87 -0
  1011. package/dist/serve/worker/host-events.js.map +1 -0
  1012. package/dist/serve/worker/host.d.ts +81 -0
  1013. package/dist/serve/worker/host.d.ts.map +1 -0
  1014. package/dist/serve/worker/host.js +1605 -0
  1015. package/dist/serve/worker/host.js.map +1 -0
  1016. package/dist/serve/worker/index.d.ts +22 -0
  1017. package/dist/serve/worker/index.d.ts.map +1 -0
  1018. package/dist/serve/worker/index.js +61 -0
  1019. package/dist/serve/worker/index.js.map +1 -0
  1020. package/dist/serve/worker/protocol.d.ts +955 -0
  1021. package/dist/serve/worker/protocol.d.ts.map +1 -0
  1022. package/dist/serve/worker/protocol.js +197 -0
  1023. package/dist/serve/worker/protocol.js.map +1 -0
  1024. package/dist/serve/worker/serve-init.d.ts +192 -0
  1025. package/dist/serve/worker/serve-init.d.ts.map +1 -0
  1026. package/dist/serve/worker/serve-init.js +555 -0
  1027. package/dist/serve/worker/serve-init.js.map +1 -0
  1028. package/dist/serve/writer-lock.d.ts +32 -0
  1029. package/dist/serve/writer-lock.d.ts.map +1 -0
  1030. package/dist/serve/writer-lock.js +43 -0
  1031. package/dist/serve/writer-lock.js.map +1 -0
  1032. package/dist/verify/cases.d.ts +37 -0
  1033. package/dist/verify/cases.d.ts.map +1 -0
  1034. package/dist/verify/cases.js +173 -0
  1035. package/dist/verify/cases.js.map +1 -0
  1036. package/dist/verify/fixture.d.ts +79 -0
  1037. package/dist/verify/fixture.d.ts.map +1 -0
  1038. package/dist/verify/fixture.js +114 -0
  1039. package/dist/verify/fixture.js.map +1 -0
  1040. package/dist/verify/index.d.ts +102 -0
  1041. package/dist/verify/index.d.ts.map +1 -0
  1042. package/dist/verify/index.js +318 -0
  1043. package/dist/verify/index.js.map +1 -0
  1044. package/dist/verify/tools.d.ts +7 -0
  1045. package/dist/verify/tools.d.ts.map +1 -0
  1046. package/dist/verify/tools.js +83 -0
  1047. package/dist/verify/tools.js.map +1 -0
  1048. package/dist/vite.d.ts +12 -0
  1049. package/dist/vite.d.ts.map +1 -0
  1050. package/dist/vite.js +16 -0
  1051. package/dist/vite.js.map +1 -0
  1052. package/package.json +127 -0
@@ -0,0 +1,221 @@
1
+ # Pyric
2
+
3
+ > Pyric is Firebase for agents: a Firebase-shaped SDK and toolchain
4
+ > (in-browser sandbox, rules tooling, replay verification, deploy)
5
+ > that lets developers and AI agents work against Firebase semantics
6
+ > without touching a live project.
7
+
8
+ Every page below is also served as raw markdown at the linked `.md` URL.
9
+
10
+ ## pyric-tools
11
+
12
+ - [pyric-tools](/__pyric/ui/docs/pyric-tools.md): The pyric CLI + programmatic helpers (deploy, bridge, discover, auth-config), organised by the four Diátaxis quadrants: learn, do, look up, understand.
13
+ - [Getting started — scaffold, run pyric dev, and let an agent drive](/__pyric/ui/docs/pyric-tools-tutorials-getting-started.md): By the end of this tutorial you will have:
14
+ - [Server adoption — run your firebase-admin app on the pyric sandbox](/__pyric/ui/docs/pyric-tools-tutorials-server-adoption.md): You have an existing Node server that uses firebase-admin — Realtime Database, Auth, Storage. By the end of this tutorial it runs against the pyric in-browser sandbox with zero code changes: no pyric imports, no config edits, no emulator suite, no Firebase project.
15
+ - [Wire Claude Code to your pyric sandbox (manual MCP wiring)](/__pyric/ui/docs/pyric-tools-tutorials-wire-claude-code.md): By the end of this tutorial you will have:
16
+ - [Build a standalone pyric binary](/__pyric/ui/docs/pyric-tools-how-to-build-a-standalone-binary.md): Ship pyric as a single self-contained executable — no Node, no npm, no node_modules. Built with bun build --compile.
17
+ - [How to configure auth providers and authorised domains](/__pyric/ui/docs/pyric-tools-how-to-configure-auth-providers-and-domains.md): When you move from building in the sandbox to running against a real Firebase project, you have to prepare that project's authentication: turn on the sign-in providers your app uses, and authorise the domains your app will redirect from. pyric auth:configure-provider and pyric auth:manage-domains do both from the CLI (or from an agent), so you don't have to click through the Firebase Console.
18
+ - [How to infer a schema from an existing Firestore](/__pyric/ui/docs/pyric-tools-how-to-discover-a-schema-from-firestore.md): You have a real Firestore database and you want its inferred shape — the collections, their fields, field types, presence ratios, enum-like value sets, and example values. This guide walks you through running pyric firestore:discover against that database so you can use the output to write security rules, seed the local sandbox, or hand a schema to an agent.
19
+ - [How to promote sandbox state to a committable fixture](/__pyric/ui/docs/pyric-tools-how-to-promote-sandbox-state-to-a-fixture.md): You have been working in the sandbox interactively — signing in test users, creating documents — and you want to commit that state so teammates, tests, and CI all start from the same place. pyric snapshot promotes the lived sandbox state into a single fixture file that pyric verify and pyric dev --seed can consume.
20
+ - [Persistence and multi-tab with pyric dev](/__pyric/ui/docs/pyric-tools-how-to-serve-persistence-and-multi-tab.md): When you run pyric dev, your app's firebase/* imports are served from an in-browser pyric sandbox instead of real Firebase. This guide covers how that sandbox keeps (or doesn't keep) data, the flags that control it, and what to do if the SharedWorker that backs it acts up.
21
+ - [Use the Vite plugin (pyric-tools/vite)](/__pyric/ui/docs/pyric-tools-how-to-use-the-vite-plugin.md): The pyricSandbox() Vite plugin gives a source-driven app the same firebase/ → pyric-sandbox swap that pyric dev gives a static app — without leaving your normal vite dev loop (HMR, source maps, your own router/UI stack). Your app's firebase/ imports stay exactly as written; the plugin swaps them at Vite's module-resolution layer. A plain vite build keeps the real firebase package; only vite dev and an explicit sandbox build (vite build --mode development) run the swap — see Two build flavors.
22
+ - [How to verify your rules against a captured session](/__pyric/ui/docs/pyric-tools-how-to-verify-against-a-captured-session.md): pyric verify replays a captured sandbox session against candidate rules and reports service-labelled divergences. It works for Firestore and Realtime Database captures. It answers the question that makes "build in the sandbox, swap to prod" safe: will the rules I'm about to ship break what I built?
23
+ - [pyric CLI reference](/__pyric/ui/docs/pyric-tools-reference-cli.md): The complete command + flag surface of the pyric binary. This is the authoritative source for flags, defaults, and exit codes — guides and tutorials link here rather than restating them.
24
+ - [Verify API](/__pyric/ui/docs/pyric-tools-reference-verify.md): pyric-tools/verify verifies captured sandbox sessions from code. It uses the same fixture format and replay behavior as pyric verify.
25
+ - [pyric-tools/bridge](/__pyric/ui/docs/pyric-tools-bridge.md): Bridge between an external MCP client (Claude Code, Cursor) and a browser-resident pyric sandbox.
26
+
27
+ ## pyric-tools / deploy
28
+
29
+ - [pyric-tools/deploy](/__pyric/ui/docs/pyric-tools-deploy.md): Firebase control-plane primitives — Hosting, Cloud Functions Gen 2, Firestore rules, Firestore indexes, Firestore database provisioning, and Realtime Database rules — without the firebase CLI. Pure-fetch over OAuth access tokens; works in Node and the browser alike.
30
+ - [Deploy a Cloud Function](/__pyric/ui/docs/pyric-tools-deploy-tutorials-01-deploy-a-cloud-function.md): In this tutorial you will use pyric-tools/deploy to deploy a small Cloud Function Gen 2 to a Firebase project. By the end you will have:
31
+ - [How to build a ProjectScope from Firebase Auth (browser)](/__pyric/ui/docs/pyric-tools-deploy-how-to-build-projectscope-from-firebase-auth.md): This guide shows you how to build a ProjectScope in a browser host using the currently-signed-in Firebase Auth user.
32
+ - [How to build a ProjectScope from a service account](/__pyric/ui/docs/pyric-tools-deploy-how-to-build-projectscope-from-service-account.md): This guide shows you how to wire a Google service-account JSON into a ProjectScope for use with every primitive in pyric-tools/deploy.
33
+ - [How to bundle and deploy a Cloud Function](/__pyric/ui/docs/pyric-tools-deploy-how-to-bundle-and-deploy-a-function.md): This guide shows you how to deploy one or more Cloud Functions Gen 2 from a source directory.
34
+ - [How to deploy Firestore indexes](/__pyric/ui/docs/pyric-tools-deploy-how-to-deploy-firestore-indexes.md): This guide shows you how to deploy a firestore.indexes.json-shaped config and how to wait for the resulting builds.
35
+ - [How to deploy Firestore rules](/__pyric/ui/docs/pyric-tools-deploy-how-to-deploy-firestore-rules.md): This guide shows you how to deploy a Firestore rules source through pyric-tools/deploy. Choose the approach that matches your situation — a one-shot replace, an idempotent ensure, or a manual flow.
36
+ - [How to deploy Hosting rewrites that route to Cloud Functions](/__pyric/ui/docs/pyric-tools-deploy-how-to-deploy-hosting-rewrites.md): This guide shows you how to deploy static files to Firebase Hosting with rewrites that send specific URL paths to a deployed Cloud Function.
37
+ - [How to deploy Realtime Database rules](/__pyric/ui/docs/pyric-tools-deploy-how-to-deploy-realtime-database-rules.md): This guide shows you how to deploy a Realtime Database rules JSON file through the Pyric CLI or through pyric-tools/deploy.
38
+ - [How to deploy to a Hosting preview channel](/__pyric/ui/docs/pyric-tools-deploy-how-to-deploy-to-a-preview-channel.md): This guide shows you how to deploy a site to a temporary preview URL instead of the live channel — the same model as firebase hosting:channel:deploy.
39
+ - [How to handle AdminApiError and Outcome failures](/__pyric/ui/docs/pyric-tools-deploy-how-to-handle-errors-and-outcomes.md): This guide shows you how to react to failures from pyric-tools/deploy. Two error shapes turn up depending on whether you called a primitive (throws) or an orchestrator (returns).
40
+ - [How to provision a Firestore database](/__pyric/ui/docs/pyric-tools-deploy-how-to-provision-a-firestore-database.md): This guide shows you how to create (or confirm the existence of) a Firestore database in a Firebase project.
41
+ - [How to register deploy tools with an agent](/__pyric/ui/docs/pyric-tools-deploy-how-to-register-tools-with-an-agent.md): This guide shows you how to expose pyric-tools/deploy's primitives as @inbrowser/agent tool handlers, so an LLM-driven agent can deploy rules, indexes, and functions through structured tool calls.
42
+ - [Public API](/__pyric/ui/docs/pyric-tools-deploy-reference-api.md): This page describes every symbol re-exported from pyric-tools/deploy. Symbols are grouped by submodule and listed in the order they appear in index.ts.
43
+ - [pyric deploy agent I/O — --schema and --json](/__pyric/ui/docs/pyric-tools-deploy-reference-cli-agent-io.md): The deploy CLI wraps ToolHandlers, and the ToolHandler is the schema — there is no hand-authored copy to drift. Three knobs (wired for hosting today; rules / indexes / functions are follow-ups and reject the flags with a clear error):
44
+ - [Error codes by operation](/__pyric/ui/docs/pyric-tools-deploy-reference-error-codes.md): Every operation in pyric-tools/deploy surfaces failures one of three ways:
45
+ - [firestore namespace](/__pyric/ui/docs/pyric-tools-deploy-reference-firestore-namespace.md): Firestore rules, indexes, and database provisioning primitives.
46
+ - [functions namespace](/__pyric/ui/docs/pyric-tools-deploy-reference-functions-namespace.md): Cloud Functions Gen 2 deploy primitives. Every method takes a ProjectScope first.
47
+ - [firebase.json hosting config — supported keys and REST translation](/__pyric/ui/docs/pyric-tools-deploy-reference-hosting-config.md): The hosting block of firebase.json is the public config shape (HostingJsonConfig). It is translated to the Hosting REST ServingConfig exactly the way firebase-tools' convertConfig does (clones/firebase-tools/src/deploy/hosting/convertConfig.ts — every translation below is pinned by a test in test/deploy/hosting/config.test.ts citing the relevant lines).
48
+ - [hosting namespace](/__pyric/ui/docs/pyric-tools-deploy-reference-hosting-namespace.md): Firebase Hosting deploy primitives. Every method takes a ProjectScope as its first argument and resolves the token internally per-dispatch.
49
+ - [rtdb namespace](/__pyric/ui/docs/pyric-tools-deploy-reference-rtdb-namespace.md): Realtime Database rules deploy primitives.
50
+ - [ProjectScope, Outcome, AdminApiError](/__pyric/ui/docs/pyric-tools-deploy-reference-scope-and-outcome.md): The three foundation types every primitive and orchestrator in pyric-tools/deploy uses.
51
+ - [Tool factories](/__pyric/ui/docs/pyric-tools-deploy-reference-tool-factories.md): Four factories wrap the namespaces as @inbrowser/agent ToolHandler[]. Each takes a ProjectScopedDeps shape and returns the handlers for its domain.
52
+ - [Primitives throw, orchestrators return](/__pyric/ui/docs/pyric-tools-deploy-explanation-primitives-vs-orchestrators.md): Every public function in pyric-tools/deploy is one of two things, and the two report failures differently. Knowing which is which makes the error-handling code make sense.
53
+ - [Token caching and memoizeTtl](/__pyric/ui/docs/pyric-tools-deploy-explanation-token-caching.md): OAuth access tokens have a TTL, typically 3600 seconds for Google Cloud. Refresh too often and you waste round trips and rate limits; refresh too late and a token expires mid-deploy and the operation fails. memoizeTtl is the package's answer to "when do I get a fresh token?"
54
+ - [Why no firebase CLI dependency](/__pyric/ui/docs/pyric-tools-deploy-explanation-why-no-firebase-cli.md): pyric-tools/deploy deliberately doesn't shell out to the firebase CLI. This page explains the tradeoffs.
55
+ - [Why this package exists](/__pyric/ui/docs/pyric-tools-deploy-explanation-why-this-package-exists.md): Firebase has a deploy CLI (firebase) and a TypeScript admin SDK (firebase-admin). Both are good at what they do. Neither does what pyric-tools/deploy does, which is:
56
+
57
+ ## pyric / firestore
58
+
59
+ - [pyric/firestore](/__pyric/ui/docs/pyric-firestore.md): Modular Web SDK Firestore adapter for the Pyric sandbox. Mirrors firebase/firestore's tree-shakable shape — getDoc, setDoc, query, where, onSnapshot, runTransaction — with two backends picked at init time:
60
+ - [Write a sandbox-backed demo](/__pyric/ui/docs/pyric-firestore-tutorials-01-write-a-sandbox-demo.md): In this tutorial you will build a tiny notes-app using pyric/firestore against the sandbox backend. By the end you'll have set rules, seeded data, written, read, watched a query, and seen a denial — all in-process.
61
+ - [Swap the demo to the prod backend](/__pyric/ui/docs/pyric-firestore-tutorials-02-swap-to-prod-backend.md): In this tutorial you will take the demo from Write a sandbox-backed demo and swap it to talk to a real Firebase project. The only code change is one line.
62
+ - [How to build queries with where, orderBy, limit](/__pyric/ui/docs/pyric-firestore-how-to-build-queries.md): This guide shows you how to compose query constraints.
63
+ - [How to migrate from firebase/firestore](/__pyric/ui/docs/pyric-firestore-how-to-migrate-from-firebase-firestore.md): This guide shows you how to swap firebase/firestore for pyric/firestore in an existing codebase.
64
+ - [How to pick a backend at init time](/__pyric/ui/docs/pyric-firestore-how-to-pick-a-backend.md): This guide shows you how to choose between the sandbox and prod backends — and how to switch between them without changing the rest of your code.
65
+ - [How to run a transaction](/__pyric/ui/docs/pyric-firestore-how-to-run-a-transaction.md): This guide shows you how to use runTransaction against either backend.
66
+ - [How to use onSnapshot](/__pyric/ui/docs/pyric-firestore-how-to-use-onsnapshot.md): This guide shows you how to register snapshot listeners with the modular Web SDK shape.
67
+ - [How to use sandbox-only operations](/__pyric/ui/docs/pyric-firestore-how-to-use-sandbox-ops.md): This guide shows you how to deploy rules, seed data, and dump state — operations that only work against the sandbox backend.
68
+ - [Public API](/__pyric/ui/docs/pyric-firestore-reference-api.md): pyric/firestore re-exports a large surface that mirrors firebase/firestore. The lists below group by area; for individual function signatures, the package matches the upstream SDK closely enough that the official Web SDK reference applies.
69
+ - [Feature matrix — pyric/firestore vs firebase/firestore](/__pyric/ui/docs/pyric-firestore-reference-feature-matrix.md): Side-by-side coverage of the modular Web SDK surface. Use this to decide what's safe to write in code that has to run against both the pyric sandbox and prod Firebase.
70
+ - [getFirestore overloads](/__pyric/ui/docs/pyric-firestore-reference-getfirestore.md): The single factory dispatches by the shape of its argument.
71
+ - [Query constraints](/__pyric/ui/docs/pyric-firestore-reference-query-constraints.md): pyric/firestore mirrors firebase/firestore's constraint factories. Compose them via query(...).
72
+ - [Sandbox-only operations](/__pyric/ui/docs/pyric-firestore-reference-sandbox-ops.md): Three operations live under the sandbox namespace export and only work against sandbox-backed Firestore handles. Calling them on a prod-backed handle throws SandboxError('failed-precondition').
73
+ - [Tool factories](/__pyric/ui/docs/pyric-firestore-reference-tool-factories.md): createFirestoreDataTools(deps) wraps the modular Firestore data plane as @inbrowser/agent tool handlers.
74
+ - [Why rules tooling lives in a sibling package](/__pyric/ui/docs/pyric-firestore-explanation-rules-tooling-is-separate.md): pyric/firestore is the data plane. It doesn't ship the rules parser, the linter, the simulator, the validator, the modules resolver, or the value wrappers. Those live in pyric/rules. The split looks bureaucratic; the reason is the swap-in contract.
75
+ - [The TARGET_SYMBOL opacity contract](/__pyric/ui/docs/pyric-firestore-explanation-target-symbol-opacity.md): The public Firestore type has exactly one property:
76
+ - [Why two backends behind one surface](/__pyric/ui/docs/pyric-firestore-explanation-two-backends-one-surface.md): pyric/firestore exposes getFirestore(target) with two overloads: one accepting a SandboxContext, one accepting a FirebaseApp. The same downstream functions (getDoc, setDoc, onSnapshot, ...) work against either. This page explains the design.
77
+ - [pyric/firestore compatibility matrix](/__pyric/ui/docs/pyric-firestore-compat.md): The single readable contract for "what this shim guarantees vs the production firebase/firestore SDK."
78
+
79
+ ## pyric / rules
80
+
81
+ - [pyric/rules](/__pyric/ui/docs/pyric-rules.md): Pyric-native Firestore Security Rules tooling. A browser-safe parser, linter, modules resolver, in-process simulator, and Rules Test API client — packaged so the data-plane swap-in (pyric/firestore) stays minimal.
82
+ - [Lint your first rules file](/__pyric/ui/docs/pyric-rules-tutorials-01-lint-your-first-rules-file.md): In this tutorial you will install pyric/rules, write a small rules file with a deliberate problem in it, and use the linter to find that problem. By the end you will have seen the parse → lint cycle end-to-end, and you will know what a LintWarning looks like in practice.
83
+ - [Write a test suite for your rules](/__pyric/ui/docs/pyric-rules-tutorials-02-write-a-test-suite-for-your-rules.md): In this tutorial you will pick up where Lint your first rules file left off and add a suite of test cases. You will use the in-process simulator — SimulateFirestoreRulesHandler — so the whole loop stays local. No Firebase project, no network, no deployment.
84
+ - [How to compare two rulesets for weakening](/__pyric/ui/docs/pyric-rules-how-to-compare-rulesets-for-weakening.md): When you ship a rules change, the most dangerous mistake is silently removing a security predicate to make a failing test pass. This guide shows you how to catch that before it deploys.
85
+ - [How to inspect rules through the AST](/__pyric/ui/docs/pyric-rules-how-to-inspect-rules-via-the-ast.md): This guide shows you how to parse rules into a typed AST and walk the tree for custom analysis — building bespoke lint rules, generating documentation, or extracting structural facts the built-in linter doesn't surface.
86
+ - [How to lint a rules source](/__pyric/ui/docs/pyric-rules-how-to-lint-rules-source.md): This guide shows you how to lint a Firestore rules source and act on the result.
87
+ - [How to pin request.time for deterministic tests](/__pyric/ui/docs/pyric-rules-how-to-pin-request-time.md): A rule that reads request.time evaluates against wallclock by default. That makes any date-gated test flaky: the same TestCase run twice can decide ALLOW once and DENY the next. This guide shows you how to pin time so the verdict is reproducible.
88
+ - [How to register rules tools with an agent](/__pyric/ui/docs/pyric-rules-how-to-register-tools-with-an-agent.md): This guide shows you how to expose the rules surface as tool handlers for an @inbrowser/agent registry — so an LLM-driven agent can lint, simulate, and test rules through structured tool calls.
89
+ - [How to resolve 2+modules imports](/__pyric/ui/docs/pyric-rules-how-to-resolve-module-imports.md): This guide shows you how to write rules that import reusable helper functions and resolve them into a standard Firestore rules source.
90
+ - [How to simulate rules locally](/__pyric/ui/docs/pyric-rules-how-to-simulate-rules-locally.md): This guide shows you how to evaluate Firestore rules in-process against a list of test cases, without deploying or contacting Google's servers.
91
+ - [How to test rules against the Firebase Rules Test API](/__pyric/ui/docs/pyric-rules-how-to-test-rules-against-firebase.md): This guide shows you how to evaluate Firestore rules against Google's live Rules Test API. Use this when the local simulator returns UNSUPPORTED, or when you need parity with what production will actually decide.
92
+ - [Public API](/__pyric/ui/docs/pyric-rules-reference-api.md): This page describes every symbol re-exported from pyric/rules. Symbols are grouped by submodule and listed alphabetically within each group.
93
+ - [AST](/__pyric/ui/docs/pyric-rules-reference-ast.md): The AST is the typed tree produced by parseToAST / parseToASTOrError. Every shape is exported from pyric/rules.
94
+ - [Errors](/__pyric/ui/docs/pyric-rules-reference-errors.md): The package surfaces failures in three ways: structured values for the parser, throwable classes for the evaluator, and Outcome-shaped objects for the handlers. This page lists every error type.
95
+ - [Lint rules](/__pyric/ui/docs/pyric-rules-reference-lint-rules.md): This page lists every lint rule emitted by lintFirestoreRules. Each entry gives the rule code, default severity, what it detects, and the suggested fix.
96
+ - [Simulator context and result states](/__pyric/ui/docs/pyric-rules-reference-simulator-context.md): The simulator evaluates expressions against a SimulationContext. This page describes its shape and the three result states a test case can land in.
97
+ - [Standard library modules](/__pyric/ui/docs/pyric-rules-reference-stdlib-modules.md): Fifteen modules ship with pyric/rules. Each module is a .rules file living under src/rules/modules/stdlib/; imports resolve automatically without any configuration.
98
+ - [TestCase schema](/__pyric/ui/docs/pyric-rules-reference-test-case-schema.md): TestCase is the unit of work for both the local simulator (SimulateFirestoreRulesHandler) and the live Rules Test API client (TestFirestoreRulesHandler). The Zod schema is exported as TestCaseSchema; the inferred type is exported as TestCase.
99
+ - [Validator findings](/__pyric/ui/docs/pyric-rules-reference-validator-findings.md): validateFirestoreRules(ast) returns an array of ValidationFinding:
100
+ - [Value wrappers](/__pyric/ui/docs/pyric-rules-reference-value-wrappers.md): The simulator and the sentinel expression engine model Firestore's runtime types as TypeScript classes. Every wrapper extends RulesValue, exposes equals, toJSON, and toString, and dispatches method calls via callMethod.
101
+ - [Agent failure modes the linter catches](/__pyric/ui/docs/pyric-rules-explanation-agent-failure-modes.md): Most of the linter's compilation and budget rules came from production: we hit the limit, learned the number, encoded it. A separate set of rules came from somewhere different — watching LLM-driven agents try to write rules and fail in characteristic ways.
102
+ - [Lint vs validate vs simulate vs test](/__pyric/ui/docs/pyric-rules-explanation-lint-vs-validate-vs-simulate-vs-test.md): The package offers four distinct ways to look at a rules source. Their names suggest they overlap. They don't, and the distinction matters when you're building a CI pipeline or an agent loop.
103
+ - [The runtime budget and shared gates](/__pyric/ui/docs/pyric-rules-explanation-runtime-budget-and-shared-gates.md): Firestore rules have two kinds of limits: ones it tells you about (compilation failures, returned as 400 INVALID_ARGUMENT) and ones it doesn't (runtime evaluation budget exhaustion, returned as a silent 403 PERMISSION_DENIED that looks identical to a denied rule).
104
+ - [The sentinel expression engine ($expr)](/__pyric/ui/docs/pyric-rules-explanation-sentinel-expression-engine.md): Firestore writes are usually concrete — { count: 5, owner: 'alice' }. But sometimes you want a write whose value depends on the document at write time: "increment count by one if it's less than 100", "set lastSeen to the current request time", "merge this list with the existing one and dedupe". The Firestore SDK offers a handful of FieldValue sentinels for the most common cases (increment, arrayUnion, serverTimestamp), but anything outside that small set requires a transaction.
105
+ - [Simulator vs Rules Test API](/__pyric/ui/docs/pyric-rules-explanation-simulator-vs-rules-test-api.md): Two surfaces evaluate rules against test cases. They share a type signature and a result shape; they disagree on tradeoffs. Choosing between them is a deliberate decision, not an implementation detail.
106
+ - [The 2+modules extension](/__pyric/ui/docs/pyric-rules-explanation-the-2-plus-modules-extension.md): Firestore rules don't have imports. The DSL has functions, but every function has to be defined in the same file as the match block that calls it. This means real-world rules either repeat the same helper code across files (and drift) or live in one giant file (and become unreadable).
107
+ - [Value wrapper design](/__pyric/ui/docs/pyric-rules-explanation-value-wrappers-design.md): Firestore rules have a small but real type system. request.time is a timestamp. request.path is a path. bytes[0:10] is a bytes value. is duration, is timestamp, is reference are type tests. None of these have first-class JavaScript representations — Timestamp is not a primitive, Path is not a primitive — so the simulator has to model them somehow.
108
+ - [Why this package exists](/__pyric/ui/docs/pyric-rules-explanation-why-this-package-exists.md): Firestore Security Rules is a small DSL that sits between every read and write your app makes. In Pyric we have two distinct needs around that DSL:
109
+
110
+ ## pyric / sandbox
111
+
112
+ - [pyric/sandbox](/__pyric/ui/docs/pyric-sandbox.md): In-process Firebase sandbox — the foundation every other @pyric/* data-plane package plugs into. Holds documents, rules, and listener state for a single isolated environment. Identity-agnostic by design; every operation flows through a SandboxContext that names the auth identity it should evaluate under.
113
+ - [Your first sandbox session](/__pyric/ui/docs/pyric-sandbox-tutorials-01-your-first-sandbox-session.md): In this tutorial you will create a sandbox, deploy a tiny set of rules, write a document as one user, deny a read as another, and inspect the result. By the end you'll have seen the three core ideas — Sandbox, SandboxContext, SandboxError — work together in one short script.
114
+ - [Use the sandbox in a test harness](/__pyric/ui/docs/pyric-sandbox-tutorials-02-use-the-sandbox-in-a-test-harness.md): In this tutorial you will wire pyric/sandbox into a real test suite. By the end you will have:
115
+ - [Build a traffic monitor](/__pyric/ui/docs/pyric-sandbox-tutorials-03-build-a-traffic-monitor.md): In this tutorial you will build a tiny event monitor over the sandbox. You'll subscribe to sandbox.onEvent, see allowed and denied operations stream through, watch listener attaches and snapshot deliveries fire on the same channel, then filter the stream by kind. By the end you'll have run a working monitor against a real sandbox and felt the unified event shape through your fingers.
116
+ - [How to run multiple isolated sandboxes in parallel](/__pyric/ui/docs/pyric-sandbox-how-to-multiple-isolated-sandboxes.md): This guide shows you how to keep multiple sandboxes alive at once — for fleet tests, multi-tenant simulations, or any workload that needs more than one isolated environment.
117
+ - [How to observe sandbox events](/__pyric/ui/docs/pyric-sandbox-how-to-observe-events.md): One subscription covers everything observable. sandbox.onEvent(cb) fires a SandboxEvent for every rule evaluation, every committed write, every snapshot delivered to a listener callback, every suppressed re-eval, every listener attach / detach / errored, and every reset / dispose boundary. Filter on event.kind to recover whichever slice your code cares about.
118
+ - [How to pick between pyric-admin and pyric/firestore](/__pyric/ui/docs/pyric-sandbox-how-to-pick-an-adapter.md): Two adapter packages sit on top of pyric/sandbox. Both expose Firestore. They look the same from a distance and shape differently up close. This guide helps you pick.
119
+ - [How to replay a captured event stream](/__pyric/ui/docs/pyric-sandbox-how-to-replay-events.md): The sandbox captures every SandboxEvent it emits. Hand the captured stream to replay(events, rules) from pyric/sandbox and the engine re-issues every write against a fresh sandbox, classifying the differences against an optional snapshot of the original state.
120
+ - [How to reset between tests](/__pyric/ui/docs/pyric-sandbox-how-to-reset-between-tests.md): This guide shows you how to keep one sandbox alive across many tests without state leakage.
121
+ - [How to seed initial data and rules](/__pyric/ui/docs/pyric-sandbox-how-to-seed-data-and-rules.md): This guide shows you how to bring a fresh sandbox up to a known state — rules deployed, documents in place — before your test code runs.
122
+ - [How to switch users with withAuth](/__pyric/ui/docs/pyric-sandbox-how-to-switch-users.md): This guide shows you how to evaluate rules under different auth identities against the same sandbox.
123
+ - [How to use admin reads to assert in tests](/__pyric/ui/docs/pyric-sandbox-how-to-use-admin-reads.md): This guide shows you how to use sandbox.admin to verify state in tests without writing rules that permit your test fixture.
124
+ - [Public API](/__pyric/ui/docs/pyric-sandbox-reference-api.md): Every symbol re-exported from pyric/sandbox. The /internal sub-path is documented separately — see The /internal adapter protocol.
125
+ - [Divergence](/__pyric/ui/docs/pyric-sandbox-reference-divergences.md): What replay(events, rules, opts, originalState) returns when the replayed state doesn't perfectly match the captured state. A discriminated union — filter on kind to handle each case.
126
+ - [SandboxError codes](/__pyric/ui/docs/pyric-sandbox-reference-error-codes.md): Every error the sandbox raises is a SandboxError carrying a code. Catch with instanceof SandboxError, switch on code.
127
+ - [The /internal adapter protocol](/__pyric/ui/docs/pyric-sandbox-reference-internal-protocol.md): The pyric/sandbox/internal sub-path is the adapter-only surface. Service-adapter packages (pyric-admin, pyric/firestore, future pyric/auth) consume it to reach the underlying LocalEnvironment and related primitives.
128
+ - [Sandbox, SandboxContext, AuthState](/__pyric/ui/docs/pyric-sandbox-reference-sandbox-and-context.md): The three core types. Every other surface in the package builds on them.
129
+ - [SandboxEvent](/__pyric/ui/docs/pyric-sandbox-reference-sandbox-event.md): The discriminated union sandbox.onEvent(cb) delivers. Filter on kind to recover any individual event family. The unified channel replaces the prior onRequest / onDenial / onSnapshotError triplet.
130
+ - [SandboxSnapshot and admin reads](/__pyric/ui/docs/pyric-sandbox-reference-snapshot-and-admin.md): Two related surfaces. SandboxSnapshot is the shape returned by Sandbox.snapshot(). SandboxAdmin is the rule-bypass read surface exposed on Sandbox.admin.
131
+ - [Every operation is a request](/__pyric/ui/docs/pyric-sandbox-explanation-every-op-is-a-request.md): The sandbox started with one observation channel — onDenial — and it surfaced the wrong subset of the truth. We expanded the surface to onRequest, then to a per-channel triplet (onRequest / onDenial / onSnapshotError), and finally collapsed them into one unified onEvent. This page explains the conceptual arc, what it implies about how to think about sandbox traffic, and the trade-offs we made along the way.
132
+ - [Identity is a context, not a sandbox](/__pyric/ui/docs/pyric-sandbox-explanation-identity-is-a-context.md): The most-visible architectural decision in pyric/sandbox is that Sandbox does not carry an identity. To do anything as a user, you derive a SandboxContext via sandbox.withAuth(...). This page explains why.
133
+ - [The /internal adapter protocol](/__pyric/ui/docs/pyric-sandbox-explanation-internal-adapter-protocol.md): pyric/sandbox ships a second sub-path: pyric/sandbox/internal. The public entry stays narrow — Sandbox, SandboxContext, SandboxError, listener channels, lifecycle. Anything an adapter needs but a consumer shouldn't reach for lives behind the /internal gate.
134
+ - [Listener re-evaluation on deployRules](/__pyric/ui/docs/pyric-sandbox-explanation-listener-re-evaluation.md): A snapshot listener attached before a deployRules call gets re-evaluated under the new rules. This is a deliberate departure from production Firestore behaviour. The reasoning matters; this page lays it out.
135
+ - [A local backend, not Firestore offline persistence](/__pyric/ui/docs/pyric-sandbox-explanation-local-backend-vs-firestore-offline.md): A natural worry when you see pyric dev keep data across refreshes and sync across tabs is: "are you reimplementing Firestore's offline + multi-tab persistence?" That feature is famously one of the hardest parts of the Firestore SDK, and reimplementing it would be a massive undertaking.
136
+ - [Why service adapters live in sibling packages](/__pyric/ui/docs/pyric-sandbox-explanation-why-adapters-are-siblings.md): pyric/sandbox doesn't ship the data-plane API. The functions you actually call — getDoc, setDoc, collection, onSnapshot, runTransaction — live in pyric-admin (Admin-SDK-shaped) and pyric/firestore (modular Web-SDK-shaped). This page explains why.
137
+ - [Why this package exists](/__pyric/ui/docs/pyric-sandbox-explanation-why-this-package-exists.md): The Firebase Emulator Suite is a Google-provided tool that runs a local copy of Firestore (and other services) in a sub-process. It's the canonical answer to "I want to test without hitting production." It works, but only in environments that can spawn an emulator. pyric/sandbox is what happens when you can't.
138
+
139
+ ## pyric / storage
140
+
141
+ - [pyric/storage](/__pyric/ui/docs/pyric-storage.md): Firebase Storage adapter for the Pyric sandbox. Modular Web-SDK shape — getStorageSandbox, ref, uploadBytes, getBytes, listAll, deleteObject — backed by IndexedDB. A getStorageProd factory dispatches the same call sites to real Firebase Storage.
142
+ - [Upload and download a session archive](/__pyric/ui/docs/pyric-storage-tutorials-01-upload-and-download.md): In this tutorial you will build the session-archive flow pyric/storage was designed for: upload a JSON blob, list the archive, download an entry, enforce rules so anonymous callers can't poison the bucket.
143
+ - [How to enforce Storage rules](/__pyric/ui/docs/pyric-storage-how-to-enforce-rules.md): This guide shows you how to wire Storage rules into a sandbox-backed handle and watch them gate uploads, reads, and deletes.
144
+ - [How to list and delete objects](/__pyric/ui/docs/pyric-storage-how-to-list-and-delete.md): This guide shows you how to enumerate objects under a prefix and remove them.
145
+ - [How to round-trip metadata](/__pyric/ui/docs/pyric-storage-how-to-round-trip-metadata.md): This guide shows you how to set, read, and update Storage object metadata.
146
+ - [How to switch between sandbox and prod backends](/__pyric/ui/docs/pyric-storage-how-to-switch-backends.md): pyric/storage has two entry points: getStorageSandbox(target, options?) and getStorageProd(app, options?). Pick by where you need the data to land.
147
+ - [How to test rule expressions independently](/__pyric/ui/docs/pyric-storage-how-to-test-rule-expressions.md): This guide shows you how to verify a Storage rule expression without uploading anything. Useful when iterating on a complex rule or building a rules-test harness.
148
+ - [Public API](/__pyric/ui/docs/pyric-storage-reference-api.md): Every symbol exported from pyric/storage.
149
+ - [Error codes](/__pyric/ui/docs/pyric-storage-reference-error-codes.md): Operations through pyric/storage throw errors with Firebase-aligned code properties — 'storage/<noun>'. Catch by code.
150
+ - [Storage rules subset](/__pyric/ui/docs/pyric-storage-reference-rules-subset.md): The Storage rules grammar in the v1 scope. Anything not listed is out of scope and will produce a parse error.
151
+ - [StorageOptions](/__pyric/ui/docs/pyric-storage-reference-storage-options.md): The options bag for getStorageSandbox(target, options?).
152
+ - [Implementation scope and deferred features](/__pyric/ui/docs/pyric-storage-explanation-implementation-scope.md): pyric/storage is a deliberate v1 scope. The scope is what the session-archive use case needed; anything beyond that is deferred. This page is the canonical list of what's not in the package and why.
153
+ - [The session-archive driver](/__pyric/ui/docs/pyric-storage-explanation-session-archive-use-case.md): pyric/storage was scoped around one use case: storing completed agent sessions so a user can come back to them later. This page explains the use case and how it shaped the package.
154
+ - [Why IndexedDB](/__pyric/ui/docs/pyric-storage-explanation-why-indexeddb.md): pyric/storage's sandbox backend persists blobs and metadata in IndexedDB. This page explains why, and what the choice implies.
155
+ - [pyric/storage compatibility matrix](/__pyric/ui/docs/pyric-storage-compat.md): The single readable contract for "what this shim guarantees vs the production firebase/storage SDK."
156
+
157
+ ## pyric / auth
158
+
159
+ - [pyric/auth](/__pyric/ui/docs/pyric-auth.md): Modular Web SDK Auth adapter for the Pyric sandbox. Mirrors firebase/auth's tree-shakable shape — getAuth, signInAnonymously, signInWithEmailAndPassword, onAuthStateChanged, signInWithPopup, GoogleAuthProvider — with two backends picked at init time:
160
+ - [API reference — pyric/auth](/__pyric/ui/docs/pyric-auth-reference-api.md): Exact signatures of every public export, grouped by purpose. Sandbox-only behavior is called out per function.
161
+ - [Feature matrix — pyric/auth vs firebase/auth](/__pyric/ui/docs/pyric-auth-reference-feature-matrix.md): Side-by-side coverage of the modular Web SDK Auth surface. Use this to decide what's safe to write in code that has to run against both the pyric sandbox and prod Firebase.
162
+ - [Sandbox test driver — pyric/auth/sandbox.*](/__pyric/ui/docs/pyric-auth-reference-sandbox-test-driver.md): The sandbox export is pyric/auth's test-driver namespace. It mirrors pyric/firestore's sandbox.setRules / sandbox.seedDocuments pattern — methods exist only for sandbox-backed Auth handles and throw failed-precondition against a prod handle.
163
+ - [pyric/auth compatibility matrix](/__pyric/ui/docs/pyric-auth-compat.md): The single readable contract for "what this shim guarantees vs the production firebase/auth SDK."
164
+
165
+ ## pyric / database
166
+
167
+ - [Realtime Database](/__pyric/ui/docs/pyric-database.md): Pyric's Realtime Database surface has two parts:
168
+ - [Author your first RTDB rules with constraints](/__pyric/ui/docs/pyric-database-tutorials-01-author-rtdb-rules-with-constraints.md): This tutorial creates a small Realtime Database rules document in memory, checks it, and simulates one write before you hand the generated JSON to deploy tooling.
169
+ - [RTDB rules tooling](/__pyric/ui/docs/pyric-database-reference-rules-tooling.md): The pyric/rules/rtdb subpath is the canonical Realtime Database rules tooling entrypoint.
170
+ - [Why RTDB rules authoring and deploy are separate](/__pyric/ui/docs/pyric-database-explanation-rules-authoring-and-deploy-are-separate.md): Pyric keeps Realtime Database rules authoring in pyric/rules/rtdb and project deployment in pyric-tools/deploy.
171
+ - [@pyric/rtdb compatibility matrix](/__pyric/ui/docs/pyric-database-compat.md): The single readable contract for "what this package guarantees vs the production Firebase Realtime Database surface."
172
+
173
+ ## pyric-admin / firestore
174
+
175
+ - [pyric-admin](/__pyric/ui/docs/pyric-admin-firestore.md): Admin-SDK-shaped Firestore adapter for the Pyric sandbox. Mirrors firebase-admin/firestore — db.collection(p).doc(p).get(), db.batch(), db.runTransaction() — over pyric/sandbox's in-process substrate. Streaming reads are covered too: a production-shaped onSnapshot ships as both a free function and a chainable .onSnapshot(...) method on refs and queries.
176
+ - [Your first admin-shaped Firestore session](/__pyric/ui/docs/pyric-admin-firestore-tutorials-01-first-admin-session.md): In this tutorial you will use pyric-admin to write, read, batch, transact, and watch documents in a sandbox. By the end you will have seen every piece of the surface in action.
177
+ - [How to run a transaction](/__pyric/ui/docs/pyric-admin-firestore-how-to-run-a-transaction.md): This guide shows you how to use runTransaction on a sandbox Firestore handle.
178
+ - [How to seed and set rules](/__pyric/ui/docs/pyric-admin-firestore-how-to-seed-and-set-rules.md): This guide shows you how to use the sandbox-only setRules and seed methods on the Firestore handle.
179
+ - [How to translate denials with denialContext](/__pyric/ui/docs/pyric-admin-firestore-how-to-translate-denials.md): This guide shows you how to read the structured denial frame attached to every permission-denied error from pyric-admin operations.
180
+ - [How to use onSnapshot to watch a doc or query](/__pyric/ui/docs/pyric-admin-firestore-how-to-use-onsnapshot.md): This guide shows you how to register a snapshot listener and react to changes.
181
+ - [How to write a batch](/__pyric/ui/docs/pyric-admin-firestore-how-to-write-a-batch.md): This guide shows you how to use WriteBatch for atomic multi-document writes.
182
+ - [Public API](/__pyric/ui/docs/pyric-admin-firestore-reference-api.md): Every symbol re-exported from pyric-admin.
183
+ - [onSnapshot overloads](/__pyric/ui/docs/pyric-admin-firestore-reference-onsnapshot.md): The Web-SDK-shaped streaming surface. Four overload groups mirror firebase/firestore's onSnapshot exactly, so existing call sites copied from production code typecheck unchanged.
184
+ - [Re-exported types](/__pyric/ui/docs/pyric-admin-firestore-reference-re-exported-types.md): pyric-admin/firestore re-exports a large surface of types from the sandbox admin-firestore implementation and pyric/sandbox so most consumers can import the Firestore admin surface from one place. This page lists what comes from where and why.
185
+ - [SandboxFirestore surface](/__pyric/ui/docs/pyric-admin-firestore-reference-sandbox-firestore.md): The handle returned from getFirestore(ctx). Extends Firestore from firebase-admin/firestore (via the simulator's compat impl) and adds three sandbox-only methods.
186
+ - [Error translation and instanceof SandboxError](/__pyric/ui/docs/pyric-admin-firestore-explanation-error-translation.md): Every operation through a SandboxFirestore handle that fails throws a SandboxError. The underlying simulator throws FirestoreSimError; the admin handle wraps every method, catches those, and re-throws as SandboxError with structured denialContext. This page explains the layer.
187
+ - [Per-call delegate construction](/__pyric/ui/docs/pyric-admin-firestore-explanation-per-call-delegate.md): Every production-shaped method on SandboxFirestore constructs a fresh Firestore delegate from pyric/sandbox/admin-firestore per call. This page explains why and what it costs.
188
+ - [Why mirror the admin SDK shape](/__pyric/ui/docs/pyric-admin-firestore-explanation-why-mirror-admin-shape.md): pyric-admin re-implements the firebase-admin/firestore API. Same chainable style, same method names, same arguments, same return types. The behaviour is sandbox-aware (it talks to pyric/sandbox instead of Google's servers), but the surface is faithful.
189
+
190
+ ## @pyric/ui
191
+
192
+ - [@pyric/ui](/__pyric/ui/docs/ui.md): Per-component reference. Each page is one-screen — import, minimal example, props table, common gotchas.
193
+ - [<Badge>](/__pyric/ui/docs/ui-primitives-badge.md): Headless pill / tag. An inline <span> carrying data-pyric-badge and an optional data-pyric-badge-kind so consumers style categories with attribute selectors.
194
+ - [<ConfirmDialog> + useConfirm](/__pyric/ui/docs/ui-primitives-confirmdialog.md): Headless confirmation dialog. Two ways to use:
195
+ - [<CopyButton>](/__pyric/ui/docs/ui-primitives-copybutton.md): Clipboard button that exposes a data-copied attribute on the underlying <button> so consumers can style the success state. Ships no visual treatment of its own.
196
+ - [<JsonView>](/__pyric/ui/docs/ui-primitives-jsonview.md): Headless collapsible JSON tree — one structural step above a <pre> dump. Object/array nodes are independently expandable; there's no editing and no syntax-color theme, just data-pyric-* hooks.
197
+ - [<SegmentedControl>](/__pyric/ui/docs/ui-primitives-segmentedcontrol.md): Headless single-select chip group — reads as one widget, wired as an ARIA radiogroup.
198
+ - [<ToastProvider> + useToast](/__pyric/ui/docs/ui-primitives-toast.md): Imperative toast queue. One <ToastProvider> per scope; any descendant calls useToast() to push toasts. Renders to document.body via portal.
199
+ - [<VirtualList>](/__pyric/ui/docs/ui-primitives-virtuallist.md): Thin wrapper around @tanstack/react-virtual. Renders a scrollable container with absolutely-positioned rows; only the rows in view (plus overscan neighbors) mount to the DOM.
200
+ - [<CollectionList>](/__pyric/ui/docs/ui-firestore-collectionlist.md): Headless list renderer for collections under a parent. The component is purely presentational — fetching is the consumer's job (via useCollectionList or otherwise).
201
+ - [<DeleteWithConfirm>](/__pyric/ui/docs/ui-firestore-deletewithconfirm.md): Composition of useConfirm + useRecursiveDelete for safe deletion of a document or collection with progress tracking.
202
+ - [<DocumentEditor>](/__pyric/ui/docs/ui-firestore-documenteditor.md): Compound component over useDocumentEditor. The hook owns a reducer-backed normalized field tree; the component renders the tree with per-type Edit widgets and add/remove affordances.
203
+ - [<DocumentList>](/__pyric/ui/docs/ui-firestore-documentlist.md): Headless list renderer for documents in a collection. Above virtualizeThreshold (default 100), switches to virtualized rendering via <VirtualList>; below, renders a plain <ul>.
204
+ - [<DocumentPreview>](/__pyric/ui/docs/ui-firestore-documentpreview.md): Read-only renderer for a Firestore document. Iterates top-level fields in lexicographic order; dispatches each value through the field-editor registry on its inferred type.
205
+ - [<QueryBuilder>](/__pyric/ui/docs/ui-firestore-querybuilder.md): Single-level where/orderBy/limit query builder. Composes state into a real Firestore Query via the hook's buildQuery(base).
206
+ - [<ReferencePicker>](/__pyric/ui/docs/ui-firestore-referencepicker.md): Pick a DocumentReference by typing a path OR by browsing the tree. Improvement over firebase-tools-ui's plain text input.
207
+ - [<DeleteSelectionWithConfirm>](/__pyric/ui/docs/ui-storage-deleteselectionwithconfirm.md): Bulk + recursive delete behind the confirm-dialog primitive, with toasts on outcome — the storage counterpart of the Firestore half's <DeleteWithConfirm>. Objects delete via deleteObject; folders walk recursively (default impl: listAll-driven, including the create-folder placeholder sweep). Requires <ConfirmProvider> and <ToastProvider> ancestors.
208
+ - [<ObjectBrowser>](/__pyric/ui/docs/ui-storage-objectbrowser.md): Headless row list for a storage path — folders first, then objects, from useStorageList's entries. Folder rows navigate, object rows select. Above virtualizeThreshold (default 100), switches to virtualized rendering via <VirtualList>; below, renders a plain <ul>.
209
+ - [<ObjectInspector>](/__pyric/ui/docs/ui-storage-objectinspector.md): Headless inspector for one storage object: metadata fields + a content-type-driven preview. Previews come from a registry — image/ (blob-URL <img>) and text/ + application/json (text panel, 256KB cap, JSON pretty-printed) ship built in; consumers extend by prepending their own matchers. Bytes load lazily and only when the matched preview asks; blob URLs are revoked on path change/unmount.
210
+ - [<PathBreadcrumb>](/__pyric/ui/docs/ui-storage-pathbreadcrumb.md): Headless breadcrumb for a storage path. Renders a root crumb plus one crumb per segment; every crumb (including the current one) is a real <button> firing onNavigate with that ancestor's absolute path.
211
+ - [@pyric/ui/storage](/__pyric/ui/docs/ui-storage.md): Headless components + hooks for browsing AND administering Firebase Storage — list/navigate/select (the read path), upload, inspect, metadata editing, and bulk delete (the write path), plus rules-aware affordances (the gate pre-evaluates rules so denied actions warn BEFORE the click). Same one-handle contract as the Firestore half: every hook takes a FirebaseStorage handle (pyric/storage sandbox or prod), so the same components work against the in-browser sandbox and a real bucket.
212
+ - [<UploadDropzone>](/__pyric/ui/docs/ui-storage-uploaddropzone.md): Headless drop target for file and folder uploads. Slot-based — the children render the chrome; the component owns the drag wiring, flattens the drop (folders traverse recursively via webkitGetAsEntry), and emits DroppedFile { file, relativePath }[] ready for useObjectUpload.
213
+ - [Rules-aware affordances](/__pyric/ui/docs/ui-storage-rules-aware-affordances.md): The M7 differentiator: the storage UI knows what the rules will say before the click. One hook — useStorageRulesGate — evaluates the current identity against paths with the same evaluator the sandbox enforces with; the components annotate themselves from its verdicts. No emulator-UI equivalent exists.
214
+ - [useStorageRulesGate](/__pyric/ui/docs/ui-storage-usestoragerulesgate.md): Pre-flight rules evaluation — evaluate the current identity against storage paths before the click, so the UI can mark denied affordances (data-pyric-denied rows, disabled-with-reason buttons) instead of letting the user discover a denial through a thrown storage/unauthorized. Built on the pure evaluator exports from pyric/storage (parseStorageRules + evaluateStorageRules) — the same evaluator the sandbox enforces with.
215
+ - [@pyric/ui/traffic](/__pyric/ui/docs/ui-traffic.md): Headless components + hooks for observing rule-eval traffic — a Chrome DevTools Network-panel-style log and a per-rule heatmap, plus stats and grouping. Decoupled from pyric/sandbox: the data hook takes a source function, so the same components work against the sandbox or a production log feed.
216
+ - [<RuleHeatmap>](/__pyric/ui/docs/ui-traffic-ruleheatmap.md): Per-rule fire / deny rollup — one row per rule, busiest first. Pairs with useRuleHeatmap, which does the aggregation.
217
+ - [<TrafficDetail>](/__pyric/ui/docs/ui-traffic-trafficdetail.md): The drill-in panel for one traffic event — header, a consumer classification slot, then JSON sections for auth / request / resource before+after, the reasons list, triggeredBy, and groupId.
218
+ - [<TrafficLog> · <TrafficRow> · <TrafficGroupRow>](/__pyric/ui/docs/ui-traffic-trafficlog.md): The event stream — a Chrome DevTools Network-panel-style list. Below 100 rows it's a plain <ul>; above, it virtualizes via <VirtualList>. Pass items (from useTrafficGroups) instead of events for collapsible group rows.
219
+ - [<TrafficStats>](/__pyric/ui/docs/ui-traffic-trafficstats.md): The aggregation panel — totals, deny rate, and count breakdowns by method / origin / path. Pairs with useTrafficStats.
220
+ - [<AuthSignInHelper> + useAuthFlowHelper](/__pyric/ui/docs/ui-auth-authsigninhelper.md): Emulator-style sign-in helper for sandbox auth: when an app calls signInWithPopup / signInWithRedirect against a sandbox Auth handle, the flow parks on a helper request; this pair renders an account picker + add-account form and settles the app's promise.
221
+ - [Auth users admin — useAuthUsers, <AuthUserList>, <AuthUserForm>](/__pyric/ui/docs/ui-auth-authusers.md): Emulator-style user administration for a sandbox Auth handle: a live users table, an add/edit form with emulator-grade validation, and confirm-gated destructive actions.
@@ -0,0 +1,26 @@
1
+ /**
2
+ * The bundle the import map serves for `firebase/app`. Lets the canonical
3
+ * idiom — `import { initializeApp } from 'firebase/app'` — run unmodified:
4
+ * the Firebase config is accepted and ignored (there is no real backend to
5
+ * configure; the page runs on the pyric sandbox), and the returned handle is
6
+ * a `PyricApp` branded onto the page's ONE shared sandbox, so
7
+ * `getAuth(app)` / `getFirestore(app)` dispatch to the same backend the bare
8
+ * calls default to. Browser-bundled by `../bundler.ts`; never imported by
9
+ * node-side code.
10
+ */
11
+ import { type PyricApp } from 'pyric/app';
12
+ /** What app code passes — the real FirebaseOptions shape. Unused under
13
+ * serve; kept on the handle (`app.options`) for code that reads it. */
14
+ export type FirebaseOptions = Record<string, unknown>;
15
+ export type ServeFirebaseApp = PyricApp & {
16
+ readonly name: string;
17
+ readonly options: FirebaseOptions;
18
+ automaticDataCollectionEnabled: boolean;
19
+ };
20
+ export declare function initializeApp(options?: FirebaseOptions, rawName?: string | {
21
+ name?: string;
22
+ }): ServeFirebaseApp;
23
+ export declare function getApp(name?: string): ServeFirebaseApp;
24
+ export declare function getApps(): ServeFirebaseApp[];
25
+ export declare function deleteApp(app: ServeFirebaseApp): Promise<void>;
26
+ //# sourceMappingURL=app.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../../src/serve/entries/app.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAuC,KAAK,QAAQ,EAAE,MAAM,WAAW,CAAC;AAG/E;wEACwE;AACxE,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEtD,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG;IACxC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;IAClC,8BAA8B,EAAE,OAAO,CAAC;CACzC,CAAC;AAMF,wBAAgB,aAAa,CAC3B,OAAO,GAAE,eAAoB,EAC7B,OAAO,CAAC,EAAE,MAAM,GAAG;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GACnC,gBAAgB,CAoBlB;AAED,wBAAgB,MAAM,CAAC,IAAI,GAAE,MAAqB,GAAG,gBAAgB,CAapE;AAED,wBAAgB,OAAO,IAAI,gBAAgB,EAAE,CAE5C;AAED,wBAAsB,SAAS,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAEpE"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * The bundle the import map serves for `firebase/app`. Lets the canonical
3
+ * idiom — `import { initializeApp } from 'firebase/app'` — run unmodified:
4
+ * the Firebase config is accepted and ignored (there is no real backend to
5
+ * configure; the page runs on the pyric sandbox), and the returned handle is
6
+ * a `PyricApp` branded onto the page's ONE shared sandbox, so
7
+ * `getAuth(app)` / `getFirestore(app)` dispatch to the same backend the bare
8
+ * calls default to. Browser-bundled by `../bundler.ts`; never imported by
9
+ * node-side code.
10
+ */
11
+ import { initializeApp as pyricInitializeApp } from 'pyric/app';
12
+ import { sandbox } from './runtime.js';
13
+ const DEFAULT_NAME = '[DEFAULT]';
14
+ const apps = new Map();
15
+ let configNoticeShown = false;
16
+ export function initializeApp(options = {}, rawName) {
17
+ const name = (typeof rawName === 'string' ? rawName : rawName?.name) ?? DEFAULT_NAME;
18
+ // One page, one sandbox: re-init (even with different options) returns the
19
+ // existing handle instead of firebase's app/duplicate-app — every "app" on
20
+ // a served page is the same backend anyway.
21
+ const existing = apps.get(name);
22
+ if (existing)
23
+ return existing;
24
+ if (!configNoticeShown && Object.keys(options).length > 0) {
25
+ configNoticeShown = true;
26
+ console.info('[pyric dev] initializeApp(): your Firebase config is unused on this page — firebase/* is served by the pyric sandbox.');
27
+ }
28
+ const app = Object.assign(pyricInitializeApp({ sandbox }), {
29
+ name,
30
+ options,
31
+ automaticDataCollectionEnabled: false,
32
+ });
33
+ apps.set(name, app);
34
+ return app;
35
+ }
36
+ export function getApp(name = DEFAULT_NAME) {
37
+ const app = apps.get(name);
38
+ if (!app) {
39
+ // firebase/app parity: reading an app before initializeApp is an app
40
+ // bug — surface it the way the real SDK would, not leniently.
41
+ throw Object.assign(new Error(`No Firebase App '${name}' has been created - call initializeApp() first (app/no-app).`), { code: 'app/no-app', name: 'FirebaseError' });
42
+ }
43
+ return app;
44
+ }
45
+ export function getApps() {
46
+ return [...apps.values()];
47
+ }
48
+ export async function deleteApp(app) {
49
+ apps.delete(app.name);
50
+ }
51
+ //# sourceMappingURL=app.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app.js","sourceRoot":"","sources":["../../../src/serve/entries/app.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,aAAa,IAAI,kBAAkB,EAAiB,MAAM,WAAW,CAAC;AAC/E,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAYvC,MAAM,YAAY,GAAG,WAAW,CAAC;AACjC,MAAM,IAAI,GAAG,IAAI,GAAG,EAA4B,CAAC;AACjD,IAAI,iBAAiB,GAAG,KAAK,CAAC;AAE9B,MAAM,UAAU,aAAa,CAC3B,UAA2B,EAAE,EAC7B,OAAoC;IAEpC,MAAM,IAAI,GAAG,CAAC,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,YAAY,CAAC;IACrF,2EAA2E;IAC3E,2EAA2E;IAC3E,4CAA4C;IAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAChC,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAC9B,IAAI,CAAC,iBAAiB,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1D,iBAAiB,GAAG,IAAI,CAAC;QACzB,OAAO,CAAC,IAAI,CACV,uHAAuH,CACxH,CAAC;IACJ,CAAC;IACD,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE;QACzD,IAAI;QACJ,OAAO;QACP,8BAA8B,EAAE,KAAK;KACtC,CAAqB,CAAC;IACvB,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACpB,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,OAAe,YAAY;IAChD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC3B,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,qEAAqE;QACrE,8DAA8D;QAC9D,MAAM,MAAM,CAAC,MAAM,CACjB,IAAI,KAAK,CACP,oBAAoB,IAAI,+DAA+D,CACxF,EACD,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,eAAe,EAAE,CAC9C,CAAC;IACJ,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,OAAO;IACrB,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;AAC5B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,GAAqB;IACnD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACxB,CAAC"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Sign-in helper core for `pyric dev` — the framework-free controller
3
+ * behind the account-picker dialog (the emulator's sign-in widget analog,
4
+ * and the second consumer of `pyric/auth`'s `AuthFlowResolver` seam after
5
+ * the playground; same settle/seed semantics, zero DOM).
6
+ *
7
+ * `resolver()` parks the SDK's popup/redirect promise; `pick`/`add`/`cancel`
8
+ * settle it. `add()` seeds the identity into the sandbox user DB first so
9
+ * `request.auth.token.*` claims resolve in rules AND the identity shows in
10
+ * the picker next time (the uid-join-key lesson from the auth audit).
11
+ *
12
+ * Bun-testable without a browser — the `<dialog>` shell in
13
+ * `./auth-helper-dom.ts` is a thin view over `subscribe`/`snapshot` and the
14
+ * three actions.
15
+ */
16
+ import { sandbox as authSandbox, type AuthFlowRequest, type AuthFlowResolver } from 'pyric/auth';
17
+ import type { Sandbox } from 'pyric/sandbox';
18
+ export interface NewIdentitySpec {
19
+ email: string;
20
+ displayName?: string;
21
+ /** Parsed custom claims (the emulator's `customAttributes`). */
22
+ customClaims?: Record<string, unknown>;
23
+ }
24
+ export interface HelperSnapshot {
25
+ /** The in-flight request, or null when no popup/redirect is pending. */
26
+ request: AuthFlowRequest | null;
27
+ identities: ReturnType<typeof authSandbox.listIdentities>;
28
+ }
29
+ export declare class ServeAuthHelper {
30
+ private pending;
31
+ private readonly listeners;
32
+ private cached;
33
+ private readonly auth;
34
+ constructor(sandbox: Sandbox);
35
+ /** Wire this helper into the page's auth. Call once at init. */
36
+ install(): void;
37
+ resolver(): AuthFlowResolver;
38
+ subscribe(fn: () => void): () => void;
39
+ snapshot(): HelperSnapshot;
40
+ private emit;
41
+ pick(uid: string): void;
42
+ add(spec: NewIdentitySpec): void;
43
+ cancel(): void;
44
+ private take;
45
+ private credential;
46
+ }
47
+ //# sourceMappingURL=auth-helper-core.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-helper-core.d.ts","sourceRoot":"","sources":["../../../src/serve/entries/auth-helper-core.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,EAEL,OAAO,IAAI,WAAW,EAEtB,KAAK,eAAe,EACpB,KAAK,gBAAgB,EAGtB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAE7C,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gEAAgE;IAChE,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACxC;AAED,MAAM,WAAW,cAAc;IAC7B,wEAAwE;IACxE,OAAO,EAAE,eAAe,GAAG,IAAI,CAAC;IAChC,UAAU,EAAE,UAAU,CAAC,OAAO,WAAW,CAAC,cAAc,CAAC,CAAC;CAC3D;AAWD,qBAAa,eAAe;IAC1B,OAAO,CAAC,OAAO,CAAwB;IACvC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAyB;IACnD,OAAO,CAAC,MAAM,CAA+B;IAC7C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAO;gBAEhB,OAAO,EAAE,OAAO;IAI5B,gEAAgE;IAChE,OAAO,IAAI,IAAI;IAIf,QAAQ,IAAI,gBAAgB;IAW5B,SAAS,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI;IAKrC,QAAQ,IAAI,cAAc;IAQ1B,OAAO,CAAC,IAAI;IAMZ,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAWvB,GAAG,CAAC,IAAI,EAAE,eAAe,GAAG,IAAI;IAkBhC,MAAM,IAAI,IAAI;IAWd,OAAO,CAAC,IAAI;IAOZ,OAAO,CAAC,UAAU;CAuBnB"}
@@ -0,0 +1,121 @@
1
+ /**
2
+ * Sign-in helper core for `pyric dev` — the framework-free controller
3
+ * behind the account-picker dialog (the emulator's sign-in widget analog,
4
+ * and the second consumer of `pyric/auth`'s `AuthFlowResolver` seam after
5
+ * the playground; same settle/seed semantics, zero DOM).
6
+ *
7
+ * `resolver()` parks the SDK's popup/redirect promise; `pick`/`add`/`cancel`
8
+ * settle it. `add()` seeds the identity into the sandbox user DB first so
9
+ * `request.auth.token.*` claims resolve in rules AND the identity shows in
10
+ * the picker next time (the uid-join-key lesson from the auth audit).
11
+ *
12
+ * Bun-testable without a browser — the `<dialog>` shell in
13
+ * `./auth-helper-dom.ts` is a thin view over `subscribe`/`snapshot` and the
14
+ * three actions.
15
+ */
16
+ import { getAuth, sandbox as authSandbox, } from 'pyric/auth';
17
+ /** Seeds need a password field; popup identities never sign in with one. */
18
+ const SYNTHETIC_PASSWORD = '__pyric_popup_no_password__';
19
+ export class ServeAuthHelper {
20
+ pending = null;
21
+ listeners = new Set();
22
+ cached = null;
23
+ auth;
24
+ constructor(sandbox) {
25
+ this.auth = getAuth(sandbox);
26
+ }
27
+ /** Wire this helper into the page's auth. Call once at init. */
28
+ install() {
29
+ authSandbox.setAuthFlowResolver(this.auth, this.resolver());
30
+ }
31
+ resolver() {
32
+ const open = (req) => new Promise((resolve, reject) => {
33
+ if (this.pending)
34
+ this.cancel(); // one dialog at a time
35
+ this.pending = { req, resolve, reject };
36
+ this.emit();
37
+ });
38
+ return { openPopup: open, openRedirect: open };
39
+ }
40
+ // ─── view glue ──────────────────────────────────────────────────────
41
+ subscribe(fn) {
42
+ this.listeners.add(fn);
43
+ return () => this.listeners.delete(fn);
44
+ }
45
+ snapshot() {
46
+ this.cached ??= {
47
+ request: this.pending?.req ?? null,
48
+ identities: authSandbox.listIdentities(this.auth),
49
+ };
50
+ return this.cached;
51
+ }
52
+ emit() {
53
+ this.cached = null;
54
+ for (const l of this.listeners)
55
+ l();
56
+ }
57
+ // ─── actions ────────────────────────────────────────────────────────
58
+ pick(uid) {
59
+ const p = this.take();
60
+ if (!p)
61
+ return;
62
+ const id = authSandbox.listIdentities(this.auth).find((i) => i.uid === uid);
63
+ if (!id) {
64
+ p.reject(authError('auth/internal-error', `unknown identity ${uid}`));
65
+ return;
66
+ }
67
+ p.resolve(this.credential(id.uid, id.email, id.displayName, id.customClaims, p.req.providerId));
68
+ }
69
+ add(spec) {
70
+ const p = this.take();
71
+ if (!p)
72
+ return;
73
+ const uid = `${p.req.providerId}:${spec.email}`;
74
+ authSandbox.seedUsers(this.auth, [
75
+ {
76
+ uid,
77
+ email: spec.email,
78
+ password: SYNTHETIC_PASSWORD,
79
+ displayName: spec.displayName,
80
+ customClaims: spec.customClaims ?? {},
81
+ },
82
+ ]);
83
+ p.resolve(this.credential(uid, spec.email, spec.displayName ?? null, spec.customClaims ?? {}, p.req.providerId));
84
+ }
85
+ cancel() {
86
+ const p = this.take();
87
+ if (!p)
88
+ return;
89
+ p.reject(authError('auth/popup-closed-by-user', 'The popup has been closed by the user before finalizing the operation.'));
90
+ }
91
+ take() {
92
+ const p = this.pending;
93
+ this.pending = null;
94
+ this.emit();
95
+ return p;
96
+ }
97
+ credential(uid, email, displayName, claims, providerId) {
98
+ const user = {
99
+ uid,
100
+ email,
101
+ displayName,
102
+ isAnonymous: false,
103
+ getIdToken: async () => `pyric-serve-${uid}`,
104
+ getIdTokenResult: async () => ({
105
+ token: `pyric-serve-${uid}`,
106
+ claims: { sub: uid, ...claims },
107
+ expirationTime: new Date(Date.now() + 3600_000).toISOString(),
108
+ issuedAtTime: new Date().toISOString(),
109
+ authTime: new Date().toISOString(),
110
+ }),
111
+ };
112
+ return { user, providerId, operationType: 'signIn' };
113
+ }
114
+ }
115
+ function authError(code, message) {
116
+ const e = new Error(message);
117
+ e.name = 'FirebaseError';
118
+ e.code = code;
119
+ return e;
120
+ }
121
+ //# sourceMappingURL=auth-helper-core.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-helper-core.js","sourceRoot":"","sources":["../../../src/serve/entries/auth-helper-core.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,EACL,OAAO,EACP,OAAO,IAAI,WAAW,GAMvB,MAAM,YAAY,CAAC;AAgBpB,4EAA4E;AAC5E,MAAM,kBAAkB,GAAG,6BAA6B,CAAC;AAQzD,MAAM,OAAO,eAAe;IAClB,OAAO,GAAmB,IAAI,CAAC;IACtB,SAAS,GAAG,IAAI,GAAG,EAAc,CAAC;IAC3C,MAAM,GAA0B,IAAI,CAAC;IAC5B,IAAI,CAAO;IAE5B,YAAY,OAAgB;QAC1B,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;IAED,gEAAgE;IAChE,OAAO;QACL,WAAW,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC9D,CAAC;IAED,QAAQ;QACN,MAAM,IAAI,GAAG,CAAC,GAAoB,EAA2B,EAAE,CAC7D,IAAI,OAAO,CAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC9C,IAAI,IAAI,CAAC,OAAO;gBAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,uBAAuB;YACxD,IAAI,CAAC,OAAO,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;YACxC,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,CAAC,CAAC,CAAC;QACL,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;IACjD,CAAC;IAED,uEAAuE;IACvE,SAAS,CAAC,EAAc;QACtB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACvB,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACzC,CAAC;IAED,QAAQ;QACN,IAAI,CAAC,MAAM,KAAK;YACd,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,IAAI;YAClC,UAAU,EAAE,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;SAClD,CAAC;QACF,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAEO,IAAI;QACV,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,SAAS;YAAE,CAAC,EAAE,CAAC;IACtC,CAAC;IAED,uEAAuE;IACvE,IAAI,CAAC,GAAW;QACd,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACtB,IAAI,CAAC,CAAC;YAAE,OAAO;QACf,MAAM,EAAE,GAAG,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;QAC5E,IAAI,CAAC,EAAE,EAAE,CAAC;YACR,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,qBAAqB,EAAE,oBAAoB,GAAG,EAAE,CAAC,CAAC,CAAC;YACtE,OAAO;QACT,CAAC;QACD,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,YAAY,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;IAClG,CAAC;IAED,GAAG,CAAC,IAAqB;QACvB,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACtB,IAAI,CAAC,CAAC;YAAE,OAAO;QACf,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,UAAU,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QAChD,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE;YAC/B;gBACE,GAAG;gBACH,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,QAAQ,EAAE,kBAAkB;gBAC5B,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,YAAY,EAAE,IAAI,CAAC,YAAY,IAAI,EAAE;aACtC;SACF,CAAC,CAAC;QACH,CAAC,CAAC,OAAO,CACP,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,IAAI,IAAI,EAAE,IAAI,CAAC,YAAY,IAAI,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CACtG,CAAC;IACJ,CAAC;IAED,MAAM;QACJ,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACtB,IAAI,CAAC,CAAC;YAAE,OAAO;QACf,CAAC,CAAC,MAAM,CACN,SAAS,CACP,2BAA2B,EAC3B,wEAAwE,CACzE,CACF,CAAC;IACJ,CAAC;IAEO,IAAI;QACV,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC;QACvB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,OAAO,CAAC,CAAC;IACX,CAAC;IAEO,UAAU,CAChB,GAAW,EACX,KAAoB,EACpB,WAA0B,EAC1B,MAA+B,EAC/B,UAAkB;QAElB,MAAM,IAAI,GAAS;YACjB,GAAG;YACH,KAAK;YACL,WAAW;YACX,WAAW,EAAE,KAAK;YAClB,UAAU,EAAE,KAAK,IAAI,EAAE,CAAC,eAAe,GAAG,EAAE;YAC5C,gBAAgB,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;gBAC7B,KAAK,EAAE,eAAe,GAAG,EAAE;gBAC3B,MAAM,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,MAAM,EAAE;gBAC/B,cAAc,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC,CAAC,WAAW,EAAE;gBAC7D,YAAY,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBACtC,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACnC,CAAC;SACH,CAAC;QACF,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC;IACvD,CAAC;CACF;AAED,SAAS,SAAS,CAAC,IAAY,EAAE,OAAe;IAC9C,MAAM,CAAC,GAAG,IAAI,KAAK,CAAC,OAAO,CAA6B,CAAC;IACzD,CAAC,CAAC,IAAI,GAAG,eAAe,CAAC;IACzB,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC;IACd,OAAO,CAAC,CAAC;AACX,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * The `<dialog>` shell over {@link ServeAuthHelper} — pyric dev's analog
3
+ * of the Auth emulator's sign-in widget. Pure-DOM (no framework): renders an
4
+ * account picker + an add-account form (email, display name, custom-claims
5
+ * JSON — emulator parity, `customAttributes`), opens when a popup/redirect
6
+ * request parks in the helper, closes on settle. Backdrop/Escape cancel →
7
+ * `auth/popup-closed-by-user` via the core.
8
+ *
9
+ * Verified through the scripted browser gate (the bun suite covers the core;
10
+ * this file is intentionally view-only).
11
+ */
12
+ import type { ServeAuthHelper } from './auth-helper-core.js';
13
+ export declare function mountAuthHelperDialog(helper: ServeAuthHelper): void;
14
+ //# sourceMappingURL=auth-helper-dom.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-helper-dom.d.ts","sourceRoot":"","sources":["../../../src/serve/entries/auth-helper-dom.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AA8B7D,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI,CA4FnE"}