@pyric/cli 0.1.0-alpha.18 → 0.1.0-alpha.20

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 (356) hide show
  1. package/README.md +14 -9
  2. package/dist/bridge/server/mcp-contract.d.ts +2 -2
  3. package/dist/bridge/server/mcp-contract.d.ts.map +1 -1
  4. package/dist/bridge/server/mcp-contract.js +3 -0
  5. package/dist/bridge/server/mcp-contract.js.map +1 -1
  6. package/dist/cli/index.d.ts +3 -2
  7. package/dist/cli/index.d.ts.map +1 -1
  8. package/dist/cli/index.js +51 -42
  9. package/dist/cli/index.js.map +1 -1
  10. package/dist/cli/mcp-proxy.d.ts.map +1 -1
  11. package/dist/cli/mcp-proxy.js +3 -3
  12. package/dist/cli/mcp-proxy.js.map +1 -1
  13. package/dist/cli/parse-args.d.ts +1 -1
  14. package/dist/cli/parse-args.d.ts.map +1 -1
  15. package/dist/cli/parse-args.js +51 -15
  16. package/dist/cli/parse-args.js.map +1 -1
  17. package/dist/cli/pyric-config.d.ts +24 -0
  18. package/dist/cli/pyric-config.d.ts.map +1 -0
  19. package/dist/cli/pyric-config.js +28 -0
  20. package/dist/cli/pyric-config.js.map +1 -0
  21. package/dist/cli/rules.d.ts +1 -0
  22. package/dist/cli/rules.d.ts.map +1 -1
  23. package/dist/cli/rules.js +18 -4
  24. package/dist/cli/rules.js.map +1 -1
  25. package/dist/cli/{dev-runner.d.ts → sandbox-runner.d.ts} +33 -36
  26. package/dist/cli/sandbox-runner.d.ts.map +1 -0
  27. package/dist/cli/{dev-runner.js → sandbox-runner.js} +90 -55
  28. package/dist/cli/sandbox-runner.js.map +1 -0
  29. package/dist/cli/serve.d.ts +6 -4
  30. package/dist/cli/serve.d.ts.map +1 -1
  31. package/dist/cli/serve.js +99 -40
  32. package/dist/cli/serve.js.map +1 -1
  33. package/dist/cli/service-command-records/storage-rules-resolve.d.ts +4 -0
  34. package/dist/cli/service-command-records/storage-rules-resolve.d.ts.map +1 -0
  35. package/dist/cli/service-command-records/storage-rules-resolve.js +3 -0
  36. package/dist/cli/service-command-records/storage-rules-resolve.js.map +1 -0
  37. package/dist/cli/service-commands.generated.d.ts +3 -0
  38. package/dist/cli/service-commands.generated.d.ts.map +1 -1
  39. package/dist/cli/service-commands.generated.js +2 -0
  40. package/dist/cli/service-commands.generated.js.map +1 -1
  41. package/dist/cli/snapshot.js +5 -5
  42. package/dist/cli/snapshot.js.map +1 -1
  43. package/dist/cli/verify.js +1 -1
  44. package/dist/cli/verify.js.map +1 -1
  45. package/dist/functions-rtdb/development-runtime.js +1 -1
  46. package/dist/functions-rtdb/development-runtime.js.map +1 -1
  47. package/dist/functions-rtdb/project.js +8 -8
  48. package/dist/functions-rtdb/project.js.map +1 -1
  49. package/dist/next/guard.js +1 -1
  50. package/dist/next/guard.js.map +1 -1
  51. package/dist/remote/index.d.ts +1 -1
  52. package/dist/remote/index.js +9 -9
  53. package/dist/remote/index.js.map +1 -1
  54. package/dist/serve/bundler.js +10 -10
  55. package/dist/serve/bundler.js.map +1 -1
  56. package/dist/serve/entries/ai.d.ts.map +1 -1
  57. package/dist/serve/entries/ai.js +27 -1
  58. package/dist/serve/entries/ai.js.map +1 -1
  59. package/dist/serve/entries/auth-helper-dom.js +1 -1
  60. package/dist/serve/entries/auth-helper-dom.js.map +1 -1
  61. package/dist/serve/entries/auth-helper-runtime.js +1 -1
  62. package/dist/serve/entries/auth-helper-runtime.js.map +1 -1
  63. package/dist/serve/entries/firestore.js +3 -3
  64. package/dist/serve/entries/firestore.js.map +1 -1
  65. package/dist/serve/entries/keepalive.js +1 -1
  66. package/dist/serve/entries/keepalive.js.map +1 -1
  67. package/dist/serve/entries/runtime.js +21 -14
  68. package/dist/serve/entries/runtime.js.map +1 -1
  69. package/dist/serve/entries/storage.js +1 -1
  70. package/dist/serve/entries/storage.js.map +1 -1
  71. package/dist/serve/entries/worker-runtime.js +1 -1
  72. package/dist/serve/entries/worker-runtime.js.map +1 -1
  73. package/dist/serve/init-payload.d.ts +4 -0
  74. package/dist/serve/init-payload.d.ts.map +1 -1
  75. package/dist/serve/namespace.d.ts +6 -0
  76. package/dist/serve/namespace.d.ts.map +1 -1
  77. package/dist/serve/namespace.js +36 -5
  78. package/dist/serve/namespace.js.map +1 -1
  79. package/dist/serve/rules.d.ts +3 -3
  80. package/dist/serve/rules.d.ts.map +1 -1
  81. package/dist/serve/rules.js +56 -25
  82. package/dist/serve/rules.js.map +1 -1
  83. package/dist/serve/runtime/chip.d.ts.map +1 -1
  84. package/dist/serve/runtime/chip.js +32 -1
  85. package/dist/serve/runtime/chip.js.map +1 -1
  86. package/dist/serve/runtime/manifest.d.ts +1 -1
  87. package/dist/serve/runtime/manifest.d.ts.map +1 -1
  88. package/dist/serve/runtime/manifest.js +1 -1
  89. package/dist/serve/runtime/manifest.js.map +1 -1
  90. package/dist/serve/runtime/status.d.ts.map +1 -1
  91. package/dist/serve/runtime/status.js +23 -0
  92. package/dist/serve/runtime/status.js.map +1 -1
  93. package/dist/serve/sandbox-session.d.ts +1 -0
  94. package/dist/serve/sandbox-session.d.ts.map +1 -1
  95. package/dist/serve/sandbox-session.js +10 -4
  96. package/dist/serve/sandbox-session.js.map +1 -1
  97. package/dist/serve/server.d.ts +7 -0
  98. package/dist/serve/server.d.ts.map +1 -1
  99. package/dist/serve/server.js +15 -1
  100. package/dist/serve/server.js.map +1 -1
  101. package/dist/serve/site-ui/404.html +1 -1
  102. package/dist/serve/site-ui/_astro/{RulesCodeEditor.CzwHdCi9.js → RulesCodeEditor.XtDmHOlN.js} +1 -1
  103. package/dist/serve/site-ui/_astro/_example_.B9DG9HLJ.css +1 -0
  104. package/dist/serve/site-ui/_astro/_slug_.Da5VLhW1.css +1 -0
  105. package/dist/serve/site-ui/_astro/_studio_.BnfYCKoI.css +1 -0
  106. package/dist/serve/site-ui/_astro/app.B52xr-DK.js +1 -0
  107. package/dist/serve/site-ui/_astro/app.DWBraPUw.js +12 -0
  108. package/dist/serve/site-ui/_astro/app.pMSnN6Qw.css +1 -0
  109. package/dist/serve/site-ui/_astro/chess-showcase.B72XYeoh.js +354 -0
  110. package/dist/serve/site-ui/_astro/{example-runtime.B0byNQOl.js → example-runtime.C25_lx6Z.js} +2 -26
  111. package/dist/serve/site-ui/_astro/index.Tb-31efc.css +1 -0
  112. package/dist/serve/site-ui/_astro/index.UkCBr-_0.css +1 -0
  113. package/dist/serve/site-ui/_astro/sandbox-controls.DEpnKg-O.js +1169 -0
  114. package/dist/serve/site-ui/_astro/seed.Co0yUJY5.js +20 -0
  115. package/dist/serve/site-ui/_astro/writes.rpjrFzmu.js +102 -0
  116. package/dist/serve/site-ui/auth/index.html +5 -3
  117. package/dist/serve/site-ui/david-east.jpg +0 -0
  118. package/dist/serve/site-ui/docs/_rhythm/index.html +6 -3
  119. package/dist/serve/site-ui/docs/_rhythm.md +1 -1
  120. package/dist/serve/site-ui/docs/agent/set-up-your-agent/index.html +45 -17
  121. package/dist/serve/site-ui/docs/agent/set-up-your-agent.md +20 -17
  122. package/dist/serve/site-ui/docs/agent/watch-and-review/index.html +6 -5
  123. package/dist/serve/site-ui/docs/agent/watch-and-review.md +1 -5
  124. package/dist/serve/site-ui/docs/agent/work-with-an-agent/index.html +8 -5
  125. package/dist/serve/site-ui/docs/agent/work-with-an-agent.md +4 -4
  126. package/dist/serve/site-ui/docs/ai-compat/index.html +5 -2
  127. package/dist/serve/site-ui/docs/api-reference/index.html +6 -2
  128. package/dist/serve/site-ui/docs/api-reference.md +1 -0
  129. package/dist/serve/site-ui/docs/app-compat/index.html +5 -2
  130. package/dist/serve/site-ui/docs/auth-compat/index.html +5 -2
  131. package/dist/serve/site-ui/docs/build/ai-logic/index.html +5 -2
  132. package/dist/serve/site-ui/docs/build/authentication/index.html +7 -4
  133. package/dist/serve/site-ui/docs/build/authentication.md +2 -2
  134. package/dist/serve/site-ui/docs/build/cloud-firestore/index.html +34 -53
  135. package/dist/serve/site-ui/docs/build/cloud-firestore.md +40 -36
  136. package/dist/serve/site-ui/docs/build/cloud-messaging/index.html +5 -2
  137. package/dist/serve/site-ui/docs/build/cloud-storage/index.html +6 -3
  138. package/dist/serve/site-ui/docs/build/cloud-storage.md +1 -1
  139. package/dist/serve/site-ui/docs/build/realtime-database/index.html +9 -6
  140. package/dist/serve/site-ui/docs/build/realtime-database.md +4 -4
  141. package/dist/serve/site-ui/docs/conformance-scores/index.html +5 -2
  142. package/dist/serve/site-ui/docs/create-pyric-reference-api/index.html +6 -3
  143. package/dist/serve/site-ui/docs/create-pyric-reference-api.md +1 -1
  144. package/dist/serve/site-ui/docs/database-compat/index.html +5 -2
  145. package/dist/serve/site-ui/docs/examples/chess/index.html +649 -250
  146. package/dist/serve/site-ui/docs/examples/chess.md +45 -16
  147. package/dist/serve/site-ui/docs/examples/index.html +6 -3
  148. package/dist/serve/site-ui/docs/firestore-compat/index.html +5 -2
  149. package/dist/serve/site-ui/docs/functions-rtdb-compat/index.html +5 -2
  150. package/dist/serve/site-ui/docs/get-started/how-the-swap-works/index.html +9 -6
  151. package/dist/serve/site-ui/docs/get-started/how-the-swap-works.md +5 -5
  152. package/dist/serve/site-ui/docs/get-started/nextjs/index.html +9 -6
  153. package/dist/serve/site-ui/docs/get-started/nextjs.md +4 -4
  154. package/dist/serve/site-ui/docs/get-started/start-building/index.html +41 -10
  155. package/dist/serve/site-ui/docs/get-started/start-building.md +21 -10
  156. package/dist/serve/site-ui/docs/get-started/vite/index.html +6 -3
  157. package/dist/serve/site-ui/docs/get-started/vite.md +1 -1
  158. package/dist/serve/site-ui/docs/index.json +203 -168
  159. package/dist/serve/site-ui/docs/messaging-compat/index.html +5 -2
  160. package/dist/serve/site-ui/docs/observe/resolve-runtime-status/index.html +5 -2
  161. package/dist/serve/site-ui/docs/observe/see-whats-happening/index.html +6 -4
  162. package/dist/serve/site-ui/docs/observe/see-whats-happening.md +2 -4
  163. package/dist/serve/site-ui/docs/observe/shape-your-data/index.html +9 -6
  164. package/dist/serve/site-ui/docs/observe/shape-your-data.md +4 -4
  165. package/dist/serve/site-ui/docs/overview/index.html +16 -10
  166. package/dist/serve/site-ui/docs/overview.md +19 -11
  167. package/dist/serve/site-ui/docs/pyric-admin-app-reference-api/index.html +5 -2
  168. package/dist/serve/site-ui/docs/pyric-admin-auth-reference-api/index.html +5 -2
  169. package/dist/serve/site-ui/docs/pyric-admin-database-reference-api/index.html +5 -2
  170. package/dist/serve/site-ui/docs/pyric-admin-firestore-reference-api/index.html +8 -5
  171. package/dist/serve/site-ui/docs/pyric-admin-firestore-reference-api.md +3 -3
  172. package/dist/serve/site-ui/docs/pyric-admin-messaging-reference-api/index.html +5 -2
  173. package/dist/serve/site-ui/docs/pyric-admin-reference-api/index.html +501 -0
  174. package/dist/serve/site-ui/docs/pyric-admin-reference-api.md +587 -0
  175. package/dist/serve/site-ui/docs/pyric-admin-storage-reference-api/index.html +5 -2
  176. package/dist/serve/site-ui/docs/pyric-ai-reference-api/index.html +5 -2
  177. package/dist/serve/site-ui/docs/pyric-ai-scripting-reference-api/index.html +5 -2
  178. package/dist/serve/site-ui/docs/pyric-app-reference-api/index.html +5 -2
  179. package/dist/serve/site-ui/docs/pyric-auth-reference-api/index.html +5 -2
  180. package/dist/serve/site-ui/docs/pyric-cli-assurance-browser-reference-api/index.html +5 -2
  181. package/dist/serve/site-ui/docs/pyric-cli-assurance-reference-api/index.html +5 -2
  182. package/dist/serve/site-ui/docs/pyric-cli-bridge-client-reference-api/index.html +5 -2
  183. package/dist/serve/site-ui/docs/pyric-cli-bridge-reference-api/index.html +5 -2
  184. package/dist/serve/site-ui/docs/pyric-cli-conformance-browser-reference-api/index.html +5 -2
  185. package/dist/serve/site-ui/docs/pyric-cli-conformance-docs-reference-api/index.html +5 -2
  186. package/dist/serve/site-ui/docs/pyric-cli-conformance-reference-api/index.html +5 -2
  187. package/dist/serve/site-ui/docs/pyric-cli-credentials-node-reference-api/index.html +5 -2
  188. package/dist/serve/site-ui/docs/pyric-cli-discover-reference-api/index.html +5 -2
  189. package/dist/serve/site-ui/docs/pyric-cli-next-reference-api/index.html +5 -2
  190. package/dist/serve/site-ui/docs/pyric-cli-register-app-bridge-reference-api/index.html +5 -2
  191. package/dist/serve/site-ui/docs/pyric-cli-register-reference-api/index.html +5 -2
  192. package/dist/serve/site-ui/docs/pyric-cli-remote-reference-api/index.html +6 -3
  193. package/dist/serve/site-ui/docs/pyric-cli-remote-reference-api.md +1 -1
  194. package/dist/serve/site-ui/docs/pyric-cli-serve-worker-reference-api/index.html +5 -2
  195. package/dist/serve/site-ui/docs/pyric-cli-verify-reference-api/index.html +5 -2
  196. package/dist/serve/site-ui/docs/pyric-cli-vite-reference-api/index.html +5 -2
  197. package/dist/serve/site-ui/docs/pyric-database-reference-api/index.html +166 -95
  198. package/dist/serve/site-ui/docs/pyric-database-reference-api.md +107 -1
  199. package/dist/serve/site-ui/docs/pyric-firestore-reference-api/index.html +5 -2
  200. package/dist/serve/site-ui/docs/pyric-messaging-reference-api/index.html +10 -4
  201. package/dist/serve/site-ui/docs/pyric-messaging-reference-api.md +5 -2
  202. package/dist/serve/site-ui/docs/pyric-messaging-sw-reference-api/index.html +10 -4
  203. package/dist/serve/site-ui/docs/pyric-messaging-sw-reference-api.md +5 -2
  204. package/dist/serve/site-ui/docs/pyric-rules-reference-api/index.html +5 -2
  205. package/dist/serve/site-ui/docs/pyric-sandbox-database-reference-api/index.html +5 -2
  206. package/dist/serve/site-ui/docs/pyric-sandbox-firestore-reference-api/index.html +6 -3
  207. package/dist/serve/site-ui/docs/pyric-sandbox-firestore-reference-api.md +2 -2
  208. package/dist/serve/site-ui/docs/pyric-sandbox-reference-api/index.html +5 -2
  209. package/dist/serve/site-ui/docs/pyric-storage-reference-api/index.html +5 -2
  210. package/dist/serve/site-ui/docs/pyric-ui-agents-reference-api/index.html +5 -2
  211. package/dist/serve/site-ui/docs/pyric-ui-auth-hooks-reference-api/index.html +5 -2
  212. package/dist/serve/site-ui/docs/pyric-ui-auth-reference-api/index.html +5 -2
  213. package/dist/serve/site-ui/docs/pyric-ui-events-hooks-reference-api/index.html +5 -2
  214. package/dist/serve/site-ui/docs/pyric-ui-events-reference-api/index.html +5 -2
  215. package/dist/serve/site-ui/docs/pyric-ui-firestore-hooks-reference-api/index.html +5 -2
  216. package/dist/serve/site-ui/docs/pyric-ui-firestore-reference-api/index.html +5 -2
  217. package/dist/serve/site-ui/docs/pyric-ui-primitives-reference-api/index.html +5 -2
  218. package/dist/serve/site-ui/docs/pyric-ui-rtdb-reference-api/index.html +5 -2
  219. package/dist/serve/site-ui/docs/pyric-ui-rules-hooks-reference-api/index.html +5 -2
  220. package/dist/serve/site-ui/docs/pyric-ui-rules-reference-api/index.html +5 -2
  221. package/dist/serve/site-ui/docs/pyric-ui-storage-hooks-reference-api/index.html +5 -2
  222. package/dist/serve/site-ui/docs/pyric-ui-storage-reference-api/index.html +5 -2
  223. package/dist/serve/site-ui/docs/pyric-ui-traffic-hooks-reference-api/index.html +5 -2
  224. package/dist/serve/site-ui/docs/pyric-ui-traffic-reference-api/index.html +5 -2
  225. package/dist/serve/site-ui/docs/reference/cli/index.html +153 -0
  226. package/dist/serve/site-ui/docs/reference/cli.md +114 -0
  227. package/dist/serve/site-ui/docs/rules-compat/index.html +5 -2
  228. package/dist/serve/site-ui/docs/secure/audit-your-rules/index.html +5 -2
  229. package/dist/serve/site-ui/docs/secure/firestore-rules-limits/index.html +5 -2
  230. package/dist/serve/site-ui/docs/secure/read-a-denial/index.html +6 -3
  231. package/dist/serve/site-ui/docs/secure/read-a-denial.md +1 -1
  232. package/dist/serve/site-ui/docs/secure/rtdb-rules-in-typescript/index.html +5 -2
  233. package/dist/serve/site-ui/docs/secure/rules-standard-library/index.html +5 -2
  234. package/dist/serve/site-ui/docs/secure/secure-it-with-rules/index.html +5 -2
  235. package/dist/serve/site-ui/docs/secure/simulate-and-lint/index.html +5 -2
  236. package/dist/serve/site-ui/docs/secure/write-a-rules-test-suite/index.html +5 -2
  237. package/dist/serve/site-ui/docs/ship/ship-to-production/index.html +7 -4
  238. package/dist/serve/site-ui/docs/ship/ship-to-production.md +2 -2
  239. package/dist/serve/site-ui/docs/ship/test-in-node/index.html +9 -6
  240. package/dist/serve/site-ui/docs/ship/test-in-node.md +4 -4
  241. package/dist/serve/site-ui/docs/storage-compat/index.html +5 -2
  242. package/dist/serve/site-ui/docs/trust/how-we-know-it-matches-firebase/index.html +5 -2
  243. package/dist/serve/site-ui/docs/trust/rules-standard-library/index.html +5 -2
  244. package/dist/serve/site-ui/docs/trust/versioning-and-compatibility/index.html +5 -2
  245. package/dist/serve/site-ui/docs/tutorial/index.html +10 -7
  246. package/dist/serve/site-ui/docs/tutorial.md +4 -4
  247. package/dist/serve/site-ui/examples/chess/index.html +4 -2
  248. package/dist/serve/site-ui/firestore/index.html +5 -3
  249. package/dist/serve/site-ui/hero-charcoal.jpg +0 -0
  250. package/dist/serve/site-ui/index.html +9 -7
  251. package/dist/serve/site-ui/llms.txt +4 -3
  252. package/dist/serve/site-ui/pyric-campfire-full.png +0 -0
  253. package/dist/serve/site-ui/pyric-campfire.png +0 -0
  254. package/dist/serve/site-ui/rtdb/index.html +5 -3
  255. package/dist/serve/site-ui/settings/index.html +5 -3
  256. package/dist/serve/site-ui/storage/index.html +5 -3
  257. package/dist/serve/site-ui/studio/index.html +13 -0
  258. package/dist/serve/site-ui/studio-routes.json +1 -1
  259. package/dist/serve/site-ui/traffic/index.html +5 -3
  260. package/dist/serve/studio/routes.d.ts +9 -0
  261. package/dist/serve/studio/routes.d.ts.map +1 -1
  262. package/dist/serve/studio/routes.js +47 -7
  263. package/dist/serve/studio/routes.js.map +1 -1
  264. package/dist/serve/vite-ai-config.d.ts.map +1 -1
  265. package/dist/serve/vite-ai-config.js +38 -8
  266. package/dist/serve/vite-ai-config.js.map +1 -1
  267. package/dist/serve/vite-module-swap.d.ts.map +1 -1
  268. package/dist/serve/vite-module-swap.js +0 -28
  269. package/dist/serve/vite-module-swap.js.map +1 -1
  270. package/dist/serve/vite-rules-source.d.ts.map +1 -1
  271. package/dist/serve/vite-rules-source.js +28 -7
  272. package/dist/serve/vite-rules-source.js.map +1 -1
  273. package/dist/serve/vite-sandbox-generation.d.ts +1 -1
  274. package/dist/serve/vite-sandbox-generation.d.ts.map +1 -1
  275. package/dist/serve/vite-sandbox-generation.js +1 -1
  276. package/dist/serve/vite-sandbox-generation.js.map +1 -1
  277. package/dist/serve/worker/client/disconnect.js +1 -1
  278. package/dist/serve/worker/client/disconnect.js.map +1 -1
  279. package/dist/serve/worker/client/presence.d.ts.map +1 -1
  280. package/dist/serve/worker/client/presence.js +18 -5
  281. package/dist/serve/worker/client/presence.js.map +1 -1
  282. package/dist/serve/worker/host-ai.d.ts.map +1 -1
  283. package/dist/serve/worker/host-ai.js +15 -0
  284. package/dist/serve/worker/host-ai.js.map +1 -1
  285. package/dist/serve/worker/protocol.d.ts +4 -0
  286. package/dist/serve/worker/protocol.d.ts.map +1 -1
  287. package/dist/serve/worker/protocol.js.map +1 -1
  288. package/dist/serve/worker/serve-init.d.ts.map +1 -1
  289. package/dist/serve/worker/serve-init.js +7 -1
  290. package/dist/serve/worker/serve-init.js.map +1 -1
  291. package/package.json +5 -5
  292. package/src/bridge/server/mcp-contract.ts +3 -0
  293. package/src/cli/cli.test.ts +2 -2
  294. package/src/cli/index.ts +51 -42
  295. package/src/cli/mcp-proxy.ts +10 -11
  296. package/src/cli/parse-args.ts +61 -15
  297. package/src/cli/pyric-config.ts +45 -0
  298. package/src/cli/rules.ts +31 -4
  299. package/src/cli/{dev-runner.ts → sandbox-runner.ts} +117 -72
  300. package/src/cli/serve.ts +115 -47
  301. package/src/cli/service-command-records/storage-rules-resolve.ts +4 -0
  302. package/src/cli/service-commands.generated.ts +2 -0
  303. package/src/cli/snapshot.ts +5 -5
  304. package/src/cli/verify.ts +1 -1
  305. package/src/functions-rtdb/development-runtime.ts +1 -1
  306. package/src/functions-rtdb/project.ts +8 -8
  307. package/src/next/guard.ts +1 -1
  308. package/src/remote/index.ts +9 -9
  309. package/src/serve/bundler.ts +10 -10
  310. package/src/serve/entries/ai.ts +27 -1
  311. package/src/serve/entries/auth-helper-dom.ts +1 -1
  312. package/src/serve/entries/auth-helper-runtime.ts +1 -1
  313. package/src/serve/entries/firestore.ts +3 -3
  314. package/src/serve/entries/keepalive.ts +1 -1
  315. package/src/serve/entries/runtime.ts +19 -14
  316. package/src/serve/entries/storage.ts +1 -1
  317. package/src/serve/entries/worker-runtime.ts +1 -1
  318. package/src/serve/init-payload.ts +4 -0
  319. package/src/serve/namespace.ts +44 -5
  320. package/src/serve/rules.ts +61 -26
  321. package/src/serve/runtime/chip.ts +38 -1
  322. package/src/serve/runtime/manifest.ts +1 -1
  323. package/src/serve/runtime/status.ts +24 -0
  324. package/src/serve/sandbox-session.ts +10 -4
  325. package/src/serve/server.ts +18 -1
  326. package/src/serve/studio/routes.ts +63 -7
  327. package/src/serve/vite-ai-config.ts +37 -7
  328. package/src/serve/vite-module-swap.ts +0 -28
  329. package/src/serve/vite-rules-source.ts +29 -7
  330. package/src/serve/vite-sandbox-generation.ts +1 -1
  331. package/src/serve/worker/client/disconnect.ts +1 -1
  332. package/src/serve/worker/client/presence.ts +25 -5
  333. package/src/serve/worker/host-ai.ts +15 -0
  334. package/src/serve/worker/protocol.ts +2 -1
  335. package/src/serve/worker/serve-init.ts +5 -1
  336. package/README.md.orig +0 -141
  337. package/dist/cli/dev-runner.d.ts.map +0 -1
  338. package/dist/cli/dev-runner.js.map +0 -1
  339. package/dist/serve/site-ui/_astro/_example_.jevZ7OdV.css +0 -1
  340. package/dist/serve/site-ui/_astro/_slug_.C6QfVOxJ.css +0 -1
  341. package/dist/serve/site-ui/_astro/_slug_.CXh9yTP1.css +0 -1
  342. package/dist/serve/site-ui/_astro/_studio_.B6b_G1ev.css +0 -1
  343. package/dist/serve/site-ui/_astro/app.B7pBzz5N.js +0 -11
  344. package/dist/serve/site-ui/_astro/app.BsFsMjn0.css +0 -1
  345. package/dist/serve/site-ui/_astro/app.boex5SnQ.js +0 -1
  346. package/dist/serve/site-ui/_astro/chess-showcase.DDqE-QGe.js +0 -1
  347. package/dist/serve/site-ui/_astro/chess-source-explorer.C5k9c5yK.js +0 -1
  348. package/dist/serve/site-ui/_astro/chess-v2.CFHmd3UL.js +0 -354
  349. package/dist/serve/site-ui/_astro/index.uwPvjH_1.js +0 -1
  350. package/dist/serve/site-ui/_astro/jsx-runtime.D_zvdyIk.js +0 -9
  351. package/dist/serve/site-ui/_astro/reads.Dh3z0fJy.js +0 -1
  352. package/dist/serve/site-ui/_astro/sandbox-controls.C2IqtoSw.js +0 -1252
  353. package/dist/serve/site-ui/_astro/seed.CCmj00su.js +0 -20
  354. package/dist/serve/site-ui/docs/trust/storage-rules-stdlib-research/index.html +0 -582
  355. package/dist/serve/site-ui/docs/trust/storage-rules-stdlib-research.md +0 -448
  356. package/dist/serve/site-ui/examples/firestore-first-write/index.html +0 -2
@@ -1,13 +1,4 @@
1
- import{j as o}from"./jsx-runtime.D_zvdyIk.js";import{g as p,d as f,b as l,e as g,s as h,a as _}from"./sandbox-controls.C2IqtoSw.js";import{g as k}from"./reads.Dh3z0fJy.js";import{r as c}from"./index.DBy5LfQW.js";function S(n){if(n.presentation==="showcase")throw new Error(`Pyric showcase '${n.header}' cannot use the generic example runtime`)}const b={header:"Play chess against Security Rules",subLabel:"Firestore Security Rules · Isolated browser sandbox",summary:"Move a piece; Pyric commits the new board or denies the write.",docsPath:"/docs/examples/chess/",service:"firestore",presentation:"showcase",renderer:"chess"};async function w({sandbox:n}){const t=p(n.withAuth({uid:"ada"})),e=f(t,"notes","first");return await l(e,{title:"The sandbox is local",ownerId:"ada"}),(await k(e)).data()}const x={header:"Write to an isolated Firestore sandbox",subLabel:"Cloud Firestore · Browser sandbox",summary:"Run a Firestore write and read without starting a SharedWorker or touching another example.",docsPath:"/docs/build/cloud-firestore/",service:"firestore",firestore:{rules:`
2
- rules_version = '2';
3
- service cloud.firestore {
4
- match /databases/{database}/documents {
5
- match /notes/{noteId} {
6
- allow read, write: if request.auth.uid == resource.data.ownerId
7
- || request.auth.uid == request.resource.data.ownerId;
8
- }
9
- }
10
- }`},run:w},v=`import type { PyricExampleContext } from '../definition';
1
+ import{c as p,s as l,a as f,j as r}from"./sandbox-controls.DEpnKg-O.js";import{r as u}from"./index.DBy5LfQW.js";function g(n){if(n.presentation==="showcase")throw new Error(`Pyric showcase '${n.header}' cannot use the generic example runtime`)}const h={header:"Play chess against Security Rules",subLabel:"Firestore Security Rules · Isolated browser sandbox",summary:"Move a piece; Pyric commits the new board or denies the write.",docsPath:"/docs/examples/chess/",service:"firestore",presentation:"showcase",renderer:"chess"},k=`import type { PyricExampleContext } from '../definition';
11
2
 
12
3
  export const FILES = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'] as const;
13
4
  export const RANKS = ['1', '2', '3', '4', '5', '6', '7', '8'] as const;
@@ -273,19 +264,4 @@ export async function run({ sandbox }: PyricExampleContext) {
273
264
  ruleEngine: 'Firestore Security Rules',
274
265
  };
275
266
  }
276
- `,P=`import { doc, getDoc, getFirestore, setDoc } from 'pyric/firestore';
277
- import type { PyricExampleContext } from '../definition';
278
-
279
- export async function run({ sandbox }: PyricExampleContext) {
280
- const db = getFirestore(sandbox.withAuth({ uid: 'ada' }));
281
- const note = doc(db, 'notes', 'first');
282
-
283
- await setDoc(note, {
284
- title: 'The sandbox is local',
285
- ownerId: 'ada',
286
- });
287
-
288
- const saved = await getDoc(note);
289
- return saved.data();
290
- }
291
- `,E=Object.assign({"./chess/definition.ts":b,"./firestore-first-write/definition.ts":x}),R=Object.assign({"./chess/run.ts":v,"./firestore-first-write/run.ts":P}),y=Object.entries(E).map(([n,t])=>{const e=n.match(/^\.\/([^/]+)\/definition\.ts$/);if(!e)throw new Error(`Invalid Pyric example definition path: ${n}`);const r=e[1],s=R[`./${r}/run.ts`];if(s===void 0)throw new Error(`Pyric example '${r}' has no run.ts source`);return[r,{definition:t,source:s}]}),C=Object.freeze(Object.fromEntries(y));function I(n){const t=C[n];if(!t)throw new Error(`Unknown Pyric example: ${n}`);return t}function d(n){const t=g(),{rules:e,seed:r}=n.firestore;return h(t,e),r&&_(t,r),{run:()=>n.run({sandbox:t}),reset:()=>d(n)}}function T(n,t=d){const e=c.useRef(null);e.current===null&&(e.current=t(n));const[r,s]=c.useState(0),[m,u]=c.useState({status:"running",output:null,error:null});return c.useEffect(()=>{let i=!0;return u({status:"running",output:null,error:null}),e.current.run().then(a=>i&&u({status:"ready",output:a,error:null}),a=>i&&u({status:"error",output:null,error:a instanceof Error?a.stack??a.message:String(a)})),()=>{i=!1}},[r]),{state:m,reset(){e.current=e.current.reset(),s(i=>i+1)}}}function D({id:n}){const t=I(n).definition;S(t);const{state:e,reset:r}=T(t),s=async()=>{e.error&&await navigator.clipboard.writeText(e.error)};return o.jsxs("main",{className:"example-runtime",children:[o.jsxs("header",{children:[o.jsx("span",{className:`status status-${e.status}`,"aria-hidden":"true"}),o.jsx("strong",{children:t.header}),o.jsx("button",{type:"button",onClick:r,children:"Reset sandbox"})]}),o.jsx("p",{children:t.summary}),o.jsx("pre",{"aria-live":"polite",children:e.status==="running"?"Running…":e.status==="ready"?JSON.stringify(e.output,null,2):e.error}),e.status==="error"?o.jsx("button",{type:"button",className:"copy-error",onClick:s,children:"Copy error"}):null]})}export{D as ExampleRuntime};
267
+ `,_=Object.assign({"./chess/definition.ts":h}),S=Object.assign({"./chess/run.ts":k}),x=Object.entries(_).map(([n,t])=>{const e=n.match(/^\.\/([^/]+)\/definition\.ts$/);if(!e)throw new Error(`Invalid Pyric example definition path: ${n}`);const s=e[1],o=S[`./${s}/run.ts`];if(o===void 0)throw new Error(`Pyric example '${s}' has no run.ts source`);return[s,{definition:t,source:o}]}),v=Object.freeze(Object.fromEntries(x));function b(n){const t=v[n];if(!t)throw new Error(`Unknown Pyric example: ${n}`);return t}function d(n){const t=p(),{rules:e,seed:s}=n.firestore;return l(t,e),s&&f(t,s),{run:()=>n.run({sandbox:t}),reset:()=>d(n)}}function P(n,t=d){const e=u.useRef(null);e.current===null&&(e.current=t(n));const[s,o]=u.useState(0),[m,i]=u.useState({status:"running",output:null,error:null});return u.useEffect(()=>{let c=!0;return i({status:"running",output:null,error:null}),e.current.run().then(a=>c&&i({status:"ready",output:a,error:null}),a=>c&&i({status:"error",output:null,error:a instanceof Error?a.stack??a.message:String(a)})),()=>{c=!1}},[s]),{state:m,reset(){e.current=e.current.reset(),o(c=>c+1)}}}function R({id:n}){const t=b(n).definition;g(t);const{state:e,reset:s}=P(t),o=e.status==="running"?"Running":e.status==="ready"?"Ready":"Error",m=e.status==="running"?"Writing notes/first…":e.status==="ready"?JSON.stringify(e.output,null,2)??"The operation returned no value.":e.error,i=async()=>{e.error&&await navigator.clipboard.writeText(e.error)};return r.jsxs("main",{className:"example-runtime",children:[r.jsxs("header",{children:[r.jsxs("div",{className:"runtime-status",role:"status","aria-live":"polite",children:[r.jsx("span",{className:`status status-${e.status}`,"aria-hidden":"true"}),r.jsx("span",{children:o})]}),r.jsx("button",{type:"button",onClick:s,children:"Reset sandbox"})]}),r.jsxs("section",{className:`runtime-result runtime-result-${e.status}`,"aria-labelledby":"example-result-heading","aria-busy":e.status==="running",children:[r.jsxs("div",{className:"result-heading",children:[r.jsxs("div",{children:[r.jsx("span",{children:"Saved document"}),r.jsx("strong",{id:"example-result-heading",children:"notes/first"})]}),e.status==="error"?r.jsx("button",{type:"button",className:"copy-error",onClick:i,children:"Copy error"}):null]}),r.jsx("pre",{"aria-live":"polite",children:m})]})]})}export{R as ExampleRuntime};
@@ -0,0 +1 @@
1
+ main[data-astro-cid-taqv5yvx].sheet{--sheet-ink: var(--ink, #fbfbfe);--sheet-muted: var(--muted, #72728a);--sheet-faint: #4a4a58;--sheet-line: var(--line, #2a2a35);--sheet-reading: #c8c8d8;--font-label: var(--font-mono, monospace);color:var(--sheet-reading);display:grid;grid-template-columns:[full-start] minmax(var(--gutter),1fr) [content-start] minmax(0,calc(var(--wide) - 2 * var(--gutter))) [content-end] minmax(var(--gutter),1fr) [full-end]}main[data-astro-cid-taqv5yvx].sheet>section[data-astro-cid-taqv5yvx]{grid-column:full;display:grid;grid-template-columns:subgrid}.tlabel[data-astro-cid-taqv5yvx]{font-family:var(--font-label);font-size:.65625rem;letter-spacing:.16em;text-transform:uppercase;color:var(--sheet-muted);display:inline-flex;gap:.5625rem}.tlabel[data-astro-cid-taqv5yvx]:before{content:"";width:1.375rem;height:.0625rem;background:currentColor}.btn[data-astro-cid-taqv5yvx]{position:relative;display:inline-flex;font-family:var(--font-ui, sans-serif);font-size:.875rem;font-weight:700;padding:.625rem 1.125rem;text-decoration:none;text-transform:uppercase}.btn--primary[data-astro-cid-taqv5yvx]{background:var(--sheet-ink);color:#14102a}.btn--primary[data-astro-cid-taqv5yvx]:hover{background:#e2e2ec}.btn--primary[data-astro-cid-taqv5yvx]:focus-visible{outline:.125rem solid var(--accent, #8f7fe8);outline-offset:.375rem}.btn--primary[data-astro-cid-taqv5yvx]:before{content:"";position:absolute;inset:-.3125rem;border:.0625rem solid var(--sheet-line);pointer-events:none;transition:border-color .15s}.btn--primary[data-astro-cid-taqv5yvx]:after{content:"";position:absolute;inset:-.5625rem;pointer-events:none;color:var(--sheet-muted);background-image:linear-gradient(currentColor 0 0),linear-gradient(currentColor 0 0),linear-gradient(currentColor 0 0),linear-gradient(currentColor 0 0),linear-gradient(currentColor 0 0),linear-gradient(currentColor 0 0),linear-gradient(currentColor 0 0),linear-gradient(currentColor 0 0);background-size:.4375rem .0625rem,.0625rem .4375rem,.4375rem .0625rem,.0625rem .4375rem,.4375rem .0625rem,.0625rem .4375rem,.4375rem .0625rem,.0625rem .4375rem;background-position:left 0 top .25rem,left .25rem top 0,right 0 top .25rem,right .25rem top 0,left 0 bottom .25rem,left .25rem bottom 0,right 0 bottom .25rem,right .25rem bottom 0;background-repeat:no-repeat;transition:color .15s}.btn--primary[data-astro-cid-taqv5yvx]:hover:before{border-color:var(--line-2, #3a3a48)}.btn--primary[data-astro-cid-taqv5yvx]:hover:after{color:var(--sheet-reading)}.z1[data-astro-cid-taqv5yvx]{position:relative;min-height:100dvh;align-items:safe center;padding-block:clamp(2.5rem,8vh,5rem) clamp(3rem,8vh,5rem)}.z1[data-astro-cid-taqv5yvx]:before{content:"";position:absolute;inset:0;background:url(/__pyric/ui/hero-charcoal.jpg) center 0% / cover no-repeat;-webkit-mask-image:linear-gradient(to bottom,transparent 0%,#000 58%);mask-image:linear-gradient(to bottom,transparent 0%,#000 58%);opacity:.35}.z1[data-astro-cid-taqv5yvx]:after{content:"";position:absolute;inset:0;background:radial-gradient(45rem 30rem ellipse at 18% 55%,rgb(0 0 0 / .5),transparent 68%),linear-gradient(to bottom,transparent 55%,color-mix(in oklab,var(--bg, #16161a) 30%,transparent))}.z1[data-astro-cid-taqv5yvx]>[data-astro-cid-taqv5yvx]{position:relative;z-index:1}.z1__inner[data-astro-cid-taqv5yvx]{grid-column:content;display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,30rem),1fr));gap:clamp(2.5rem,6vw,3rem);place-items:start}.z1__headings[data-astro-cid-taqv5yvx]{display:grid;gap:var(--space-5)}.lockup[data-astro-cid-taqv5yvx]{display:grid;gap:var(--space-6)}.z1[data-astro-cid-taqv5yvx] h1[data-astro-cid-taqv5yvx]{font-family:var(--font-display, sans-serif);font-size:clamp(2.75rem,5.6vw + .25rem,4.5rem);font-weight:500;line-height:1.02;letter-spacing:-.03em;color:var(--sheet-ink);margin:0;max-width:14ch}.standfirst[data-astro-cid-taqv5yvx]{font-family:var(--font-ui, sans-serif);font-size:1.35rem;font-weight:500;line-height:1.46;max-width:32ch;margin:0;color:var(--sheet-reading);text-wrap:balance;text-shadow:0 .0625rem .125rem rgb(0 0 0 / .6),0 0 1.5rem rgb(0 0 0 / .4)}.actions[data-astro-cid-taqv5yvx]{display:flex;gap:.875rem}.composer[data-astro-cid-taqv5yvx]{justify-self:end;display:grid;grid-template-columns:[inset-start] 1rem [icon] .8125rem [gap] .625rem [body] minmax(0,max-content) [inset-end] 1rem;inline-size:fit-content;max-inline-size:100%;border:.0625rem solid var(--line-2, #3a3a48);border-radius:var(--rounded-lg, .375rem);background:color-mix(in oklab,var(--bg, #16161a) 55%,var(--panel, #1e1e24));overflow:clip;text-align:left}.composer__input[data-astro-cid-taqv5yvx]{grid-column:1 / -1;display:grid;grid-template-columns:subgrid;align-items:center;padding-block:.8125rem;border-bottom:.0625rem solid var(--line, #2a2a35);background:var(--panel, #1e1e24)}.composer__input[data-astro-cid-taqv5yvx] .composer__glyph[data-astro-cid-taqv5yvx]{grid-column:icon;grid-row:1}.composer__input[data-astro-cid-taqv5yvx] .composer__line[data-astro-cid-taqv5yvx]{grid-column:body;grid-row:1;contain:inline-size}.composer__input[data-astro-cid-taqv5yvx] .composer__copy[data-astro-cid-taqv5yvx]{grid-column:body;grid-row:1;justify-self:end}.composer__session[data-astro-cid-taqv5yvx]{grid-column:1 / -1;display:grid;grid-template-columns:subgrid;row-gap:1.375rem;padding-block:1rem 1.125rem}.turn[data-astro-cid-taqv5yvx]{grid-column:icon / inset-end;display:grid;grid-template-columns:subgrid;row-gap:.75rem}.turn[data-astro-cid-taqv5yvx]>.say[data-astro-cid-taqv5yvx]{display:contents}.say__glyph[data-astro-cid-taqv5yvx]{grid-column:1}.say__text[data-astro-cid-taqv5yvx]{grid-column:3}.turn[data-astro-cid-taqv5yvx]>.calls[data-astro-cid-taqv5yvx]{grid-column:3}.say[data-astro-cid-taqv5yvx]{font-family:var(--font-ui, sans-serif);font-size:1rem;line-height:1.55;color:var(--sheet-reading);margin:0}.say__glyph[data-astro-cid-taqv5yvx]{display:grid;color:color-mix(in oklab,var(--accent, #8f7fe8) 35%,var(--sheet-muted));block-size:1lh;align-items:center}@keyframes composer-blink{0%{opacity:.9}to{opacity:0}}.calls[data-astro-cid-taqv5yvx]{display:grid;gap:.5625rem;padding:.75rem .875rem;background:var(--bg, #16161a);border:.0625rem solid var(--line, #2a2a35);border-radius:var(--rounded-md, .25rem)}.call[data-astro-cid-taqv5yvx]{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:.625rem;font-size:.75rem;line-height:1.5}.call[data-astro-cid-taqv5yvx]>svg[data-astro-cid-taqv5yvx]{color:#6e6e80;inline-size:.8125rem;align-self:center}.call__body[data-astro-cid-taqv5yvx]{display:grid;row-gap:.25rem;min-width:0}.call__status[data-astro-cid-taqv5yvx]{color:#6e6e80;align-self:center}.call__status--deny[data-astro-cid-taqv5yvx]{color:color-mix(in oklab,var(--diff-remove, #e2607a) 50%,var(--sheet-muted))}.call__cmd[data-astro-cid-taqv5yvx]{font-family:var(--font-label);color:var(--sheet-ink);overflow-wrap:break-word}.call__cmd[data-astro-cid-taqv5yvx] i[data-astro-cid-taqv5yvx]{font-style:normal;color:#a0a0b4}.call__out[data-astro-cid-taqv5yvx]{font-family:var(--font-label);color:#a0a0b4;overflow-wrap:break-word}.composer__glyph[data-astro-cid-taqv5yvx]{display:grid;color:var(--sheet-muted)}.composer__line[data-astro-cid-taqv5yvx]{font-family:var(--font-label);font-size:clamp(.875rem,1.5vw,1.0625rem);color:#e9e9f2;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.composer__line[data-astro-cid-taqv5yvx] .sk[data-astro-cid-taqv5yvx]{color:var(--accent, #8f7fe8);font-weight:500}.composer__copy[data-astro-cid-taqv5yvx]{display:grid;place-items:center;inline-size:2rem;block-size:2rem;border:.0625rem solid var(--line-2, #3a3a48);border-radius:var(--rounded-md, .25rem);background:transparent;color:var(--sheet-muted);cursor:pointer;transition:color .15s,border-color .15s}.composer__copy[data-astro-cid-taqv5yvx]:hover{color:var(--sheet-ink);border-color:#4a4a5a}.composer__copy[data-astro-cid-taqv5yvx]:focus-visible{outline:.125rem solid var(--accent, #8f7fe8);outline-offset:.125rem}.composer__copy[data-astro-cid-taqv5yvx] .ic-check[data-astro-cid-taqv5yvx]{display:none;color:var(--diff-add, #57b985)}.composer__copy[data-astro-cid-taqv5yvx].copied .ic-copy[data-astro-cid-taqv5yvx]{display:none}.composer__copy[data-astro-cid-taqv5yvx].copied .ic-check[data-astro-cid-taqv5yvx]{display:block}.z3[data-astro-cid-taqv5yvx]{border-top:.0625rem solid var(--sheet-line);padding-block:clamp(4rem,10vh,8rem)}.z3__inner[data-astro-cid-taqv5yvx]{grid-column:content;display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,32rem),1fr));gap:clamp(3.5rem,8vw,8rem);align-items:center}@media(max-width:59.9rem){.z1__inner[data-astro-cid-taqv5yvx]{gap:4.5rem}.z3__inner[data-astro-cid-taqv5yvx]{gap:5.5rem}}.z3__art[data-astro-cid-taqv5yvx]{inline-size:min(100%,30rem);block-size:auto;justify-self:center;filter:brightness(1.6)}.z3__body[data-astro-cid-taqv5yvx]{max-inline-size:60ch;display:grid;row-gap:var(--space-6)}.z3__headings[data-astro-cid-taqv5yvx]{display:grid;gap:var(--space-4)}.z3__body[data-astro-cid-taqv5yvx] h2[data-astro-cid-taqv5yvx]{font-family:var(--font-display, sans-serif);font-size:2.125rem;font-weight:500;line-height:1.15;color:var(--sheet-ink);letter-spacing:-.02em;margin:0}.z3__body[data-astro-cid-taqv5yvx] h3[data-astro-cid-taqv5yvx]{font-family:var(--font-ui, sans-serif);font-size:1.25rem;font-weight:500;line-height:1.4;color:var(--sheet-reading);margin:0}.z3__body[data-astro-cid-taqv5yvx] p[data-astro-cid-taqv5yvx]{font-size:1.125rem;line-height:1.85;margin:0;color:var(--sheet-reading)}.z3__body[data-astro-cid-taqv5yvx] .perr[data-astro-cid-taqv5yvx]{font-family:var(--font-label);font-size:.875em;color:var(--sheet-ink)}.z3__body[data-astro-cid-taqv5yvx] .closer[data-astro-cid-taqv5yvx]{font-family:var(--font-display, sans-serif);font-size:1.375rem;font-weight:500;color:var(--sheet-ink);margin:0}.z3__cta[data-astro-cid-taqv5yvx]{grid-column:1/-1;align-items:center;justify-content:center;display:flex}.z3__cta-actions[data-astro-cid-taqv5yvx]{display:grid;justify-content:center;align-items:center}.z3__cta-actions[data-astro-cid-taqv5yvx] .btn[data-astro-cid-taqv5yvx]{display:flex;align-items:center;justify-content:center;padding:14px 32px;font-size:1rem}.byline[data-astro-cid-taqv5yvx]{display:grid;grid-template-columns:auto minmax(0,1fr);align-items:center;column-gap:.75rem}.byline[data-astro-cid-taqv5yvx] img[data-astro-cid-taqv5yvx]{inline-size:2.5rem;block-size:2.5rem;border-radius:50%}.byline__who[data-astro-cid-taqv5yvx]{display:grid}.byline__name[data-astro-cid-taqv5yvx]{font-size:.875rem;font-weight:500;color:var(--sheet-ink)}.byline__handle[data-astro-cid-taqv5yvx]{font-size:.8125rem;color:var(--sheet-muted);text-decoration:none;justify-self:start}.byline__handle[data-astro-cid-taqv5yvx]:hover{color:var(--sheet-ink)}.z4[data-astro-cid-taqv5yvx]{padding-block:clamp(2rem,4vh,3rem)}.foot[data-astro-cid-taqv5yvx]{grid-column:content;display:grid;grid-template-columns:auto minmax(0,1fr);align-items:center;border-top:.0625rem solid var(--sheet-line);padding-block-start:1.5rem}.foot__brand[data-astro-cid-taqv5yvx]{display:grid;grid-auto-flow:column;align-items:center;column-gap:.5rem;font-size:.875rem;font-weight:500;color:var(--sheet-ink)}.foot__brand[data-astro-cid-taqv5yvx] img[data-astro-cid-taqv5yvx]{block-size:1.25rem;inline-size:auto;filter:brightness(2.1) contrast(1.5)}.foot__links[data-astro-cid-taqv5yvx]{display:grid;grid-auto-flow:column;justify-content:end;column-gap:1.5rem;font-size:.8125rem}.foot__links[data-astro-cid-taqv5yvx] a[data-astro-cid-taqv5yvx]{color:var(--sheet-muted);text-decoration:none}.foot__links[data-astro-cid-taqv5yvx] a[data-astro-cid-taqv5yvx]:hover{color:var(--sheet-ink)}
@@ -0,0 +1 @@
1
+ :root{--font-ui: "neue-haas-grotesk-text", "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;--font-mono: "input-mono-narrow", "input-mono", "JetBrains Mono", ui-monospace, SFMono-Regular, monospace;--font-display: "neue-haas-grotesk-display", "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;--font-darkmode: "darkmode-off", sans-serif}.font-darkmode{font-family:var(--font-darkmode, "darkmode-off", sans-serif)}.font-darkmode-light{font-family:darkmode-off,sans-serif;font-weight:300;font-style:normal}.font-darkmode-regular{font-family:darkmode-off,sans-serif;font-weight:400;font-style:normal}.font-darkmode-medium{font-family:darkmode-off,sans-serif;font-weight:500;font-style:normal}.font-darkmode-bold{font-family:darkmode-off,sans-serif;font-weight:700;font-style:normal}.font-darkmode-black{font-family:darkmode-off,sans-serif;font-weight:900;font-style:normal}:root{--fs-title: 17px;--fs-body: 13px;--fs-label: 12px;--fs-data: 12.5px;--fs-caption: 11.5px;--fs-micro: 10.5px;--tracking-micro: .06em;--space-1: 4px;--space-2: 8px;--space-3: 12px;--space-4: 16px;--space-5: 24px;--space-6: 32px}:root{--bg: #16161a;--panel: #1e1e24;--elevated: #24242c;--ink: #fbfbfe;--muted: #72728a;--faint: #72728a;--line: #2a2a35;--line-2: #3a3a48;--accent: #8f7fe8;--accent-tint: #1e1b2e;--accent-ink: #14102a;--deny: #ededee;--deny-ink: #0c0c0d;--deny-tint: #161618;--diff-add: #57b985;--diff-add-bg: #111d16;--diff-remove: #e2607a;--diff-remove-bg: #221318}@media(prefers-color-scheme:light){:root:not([data-theme]){--bg: #ffffff;--panel: #fafafa;--elevated: #ffffff;--ink: #16181d;--muted: #646b78;--faint: #9aa1ad;--line: #e7e8ec;--line-2: #d9dbe0;--accent: #6b57d6;--accent-tint: #f4f2fd;--accent-ink: #ffffff;--deny: #16181d;--deny-ink: #ffffff;--deny-tint: #f4f4f6;--diff-add: #1f8f4e;--diff-add-bg: #eef8f1;--diff-remove: #c2374b;--diff-remove-bg: #fceef0}}[data-theme=light]{--bg: #ffffff;--panel: #fafafa;--elevated: #ffffff;--ink: #16181d;--muted: #646b78;--faint: #9aa1ad;--line: #e7e8ec;--line-2: #d9dbe0;--accent: #6b57d6;--accent-tint: #f4f2fd;--accent-ink: #ffffff;--deny: #16181d;--deny-ink: #ffffff;--deny-tint: #f4f4f6;--diff-add: #1f8f4e;--diff-add-bg: #eef8f1;--diff-remove: #c2374b;--diff-remove-bg: #fceef0}:root{--code-bg: #0f0f17;--wide: 1440px;--gutter: clamp(16px, 3vw, 32px);--tab-gap: var(--space-4);color-scheme:dark}@media(prefers-color-scheme:light){:root:not([data-theme]){color-scheme:light}}[data-theme=light]{color-scheme:light}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--ink);font-family:var(--font-ui);font-feature-settings:"cv11","ss01";font-size:16px;line-height:1.7;-webkit-font-smoothing:antialiased}.studio__chrome{display:flex;flex-direction:column;min-width:0;border-bottom:1px solid var(--line);background:var(--panel);position:sticky;top:0;z-index:10;padding-top:env(safe-area-inset-top,0px)}.studio__bar{min-width:0}.studio__chrome-inner{box-sizing:border-box;width:min(var(--wide),calc(100% - 2 * var(--gutter)));margin-inline:auto;display:flex;align-items:center;column-gap:var(--tab-gap);min-width:0}.studio__bar .studio__chrome-inner{height:54px}.studio__brand{font-family:var(--font-display, sans-serif);font-size:1.0625rem;font-weight:500;letter-spacing:-.01em;line-height:1;color:var(--ink);text-decoration:none;flex:0 0 auto}.studio__nav{display:flex;align-items:baseline;justify-content:flex-start;column-gap:var(--tab-gap);font-size:13px;font-weight:500;line-height:1;min-width:0;overflow-x:auto;flex:1 1 auto;scrollbar-width:none}.studio__nav::-webkit-scrollbar{display:none}.studio__nav-tab{flex:0 0 auto;border-bottom:2px solid transparent;font:inherit;line-height:inherit;color:var(--muted);text-decoration:none;padding:0;white-space:nowrap;transition:color .12s,border-color .12s}.studio__nav-tab:hover{color:color-mix(in srgb,var(--ink) 80%,transparent)}.studio__nav-tab[aria-current=page]{color:var(--ink);border-bottom-color:var(--ink)}@media(max-width:760px){.studio__nav{scroll-snap-type:x proximity;mask-image:linear-gradient(to right,#000 calc(100% - 1.75em),transparent);-webkit-mask-image:linear-gradient(to right,#000 calc(100% - 1.75em),transparent)}.studio__nav:after{content:"";flex:0 0 1.75em}.studio__nav-tab{scroll-snap-align:start}}.docs-shell{max-width:var(--wide);margin-inline:auto;padding:2.5rem var(--gutter) 5rem;display:grid;grid-template-columns:minmax(200px,240px) minmax(0,1fr) minmax(180px,220px);column-gap:clamp(var(--space-6),4vw,calc(var(--space-6) * 2.5));row-gap:3rem;align-items:start}.docs-nav{position:sticky;top:calc(54px + 1.5rem);max-height:calc(100vh - 54px - 4rem);max-height:calc(100dvh - 54px - 4rem);overflow-y:auto;padding-bottom:var(--space-6);display:grid;align-content:start;gap:var(--space-3);font-size:.8125rem;line-height:1.5}.docs-nav-toplink{display:flex;align-items:center;min-height:2.125rem;padding:var(--space-1) var(--space-3);border-radius:.375rem;font-weight:450;color:var(--ink);text-decoration:none;transition:background-color .12s}.docs-nav-toplink:hover{background:color-mix(in srgb,var(--panel) 70%,transparent)}.docs-nav-toplink[aria-current=page]{background:var(--panel)}.docs-nav-group>summary{cursor:pointer;list-style:none;display:flex;align-items:center;justify-content:space-between;gap:var(--space-2);min-height:2.125rem;padding:var(--space-1) var(--space-3);border-radius:.375rem;font-weight:450;color:var(--ink);transition:background-color .12s}.docs-nav-group>summary:hover{background:color-mix(in srgb,var(--panel) 70%,transparent)}.docs-nav-group>summary::-webkit-details-marker{display:none}.docs-nav-group>summary:after{content:"›";display:inline-block;color:var(--faint);font-weight:400;transition:transform .12s}.docs-nav-group[open]>summary:after{transform:rotate(90deg)}.docs-nav-group-body{display:grid;gap:var(--space-5);padding:var(--space-1) 0 var(--space-2)}.docs-nav-heading{margin:0 0 var(--space-1);padding-inline:var(--space-3);font-size:.6875rem;font-weight:500;text-transform:uppercase;letter-spacing:var(--tracking-micro, .06em);color:var(--muted)}.docs-nav ul{margin:0;padding:0;list-style:none;display:grid;gap:var(--space-1)}.docs-nav li{min-width:0}.docs-nav a{display:flex;align-items:center;min-height:2.125rem;padding:var(--space-1) var(--space-3);border-radius:.375rem;color:var(--muted);text-decoration:none;background:transparent;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;transition:background-color .12s,color .12s}.docs-nav a:hover{color:var(--ink);background:color-mix(in srgb,var(--panel) 70%,transparent)}.docs-nav a[aria-current]{color:var(--ink)}.docs-nav a[aria-current=page]{background:var(--panel);font-weight:500}.docs-nav-drawer{display:none}.doc-main{width:100%;max-width:72ch;margin-inline:auto;min-width:0;font-size:1rem}.doc-toc{position:sticky;top:calc(54px + 1.5rem);max-height:calc(100vh - 54px - 4rem);max-height:calc(100dvh - 54px - 4rem);overflow-y:auto;padding-bottom:var(--space-6);display:grid;align-content:start;font-size:.8125rem}.doc-toc-heading{margin:0 0 .625rem;font-family:var(--font-mono);font-size:var(--fs-micro, 10.5px);font-weight:500;text-transform:uppercase;letter-spacing:var(--tracking-micro, .06em);color:var(--muted)}.doc-toc ul{margin:0;padding:0;list-style:none;display:grid;gap:.375rem;border-left:1px solid var(--line)}.doc-toc li{min-width:0}.doc-toc a{display:block;padding-left:.75rem;margin-left:-1px;border-left:1px solid transparent;color:var(--muted);text-decoration:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.doc-toc li[data-depth="3"] a{padding-left:1.5rem}.doc-toc a:hover{color:var(--ink)}.doc-toc a.active{color:var(--accent);border-left-color:var(--accent)}.docs-search{position:relative}.docs-search-field{display:flex;align-items:center;gap:var(--space-2);min-height:2.125rem;padding:0 var(--space-3);border:1px solid var(--line);border-radius:.375rem;background:var(--panel)}.docs-search-icon{flex-shrink:0;color:var(--faint)}.docs-search-input{flex:1;min-width:0;border:none;outline:none;background:transparent;color:var(--ink);font:inherit;font-size:.8125rem}.docs-search-input::placeholder{color:var(--faint)}.docs-search-kbd{flex-shrink:0;font-family:var(--font-mono);font-size:var(--fs-micro, 10.5px);color:var(--faint);border:1px solid var(--line);border-radius:.25rem;padding:.0625rem .3125rem;background:var(--elevated)}.docs-search-results{position:absolute;top:calc(100% + var(--space-1));left:0;right:0;z-index:20;margin:0;padding:var(--space-1);list-style:none;display:grid;gap:2px;background:var(--elevated);border:1px solid var(--line);border-radius:.5rem;box-shadow:0 12px 28px #00000059;max-height:60vh;overflow-y:auto}.docs-search-results li{min-width:0}.docs-search-results a{display:grid;gap:2px;padding:var(--space-2) var(--space-3);border-radius:.375rem;text-decoration:none;color:var(--ink)}.docs-search-results a:hover{background:var(--panel)}.docs-search-result-title{font-size:.8125rem;color:var(--ink)}.docs-search-result-meta{font-size:var(--fs-caption, 11.5px);color:var(--faint)}.docs-search-empty{padding:var(--space-2) var(--space-3);color:var(--faint);font-size:.8125rem}.docs-breadcrumbs{margin:0 0 var(--rhythm-group);font-size:var(--fs-caption, 11.5px)}.docs-breadcrumbs ol{display:flex;flex-wrap:wrap;align-items:center;gap:.375rem;margin:0;padding:0;list-style:none}.docs-breadcrumbs li{display:flex;align-items:center;gap:.375rem;min-width:0}.docs-breadcrumbs a{color:var(--muted);text-decoration:none}.docs-breadcrumbs a:hover{color:var(--ink);text-decoration:underline}.docs-breadcrumbs [aria-current=page],.docs-breadcrumbs-sep{color:var(--faint)}.docs-nav,.doc-toc,.docs-search-results,pre,.prose .table-scroll{scrollbar-width:thin;scrollbar-color:var(--line-2) transparent}.docs-nav::-webkit-scrollbar,.doc-toc::-webkit-scrollbar,.docs-search-results::-webkit-scrollbar,pre::-webkit-scrollbar,.prose .table-scroll::-webkit-scrollbar{width:8px;height:8px}.docs-nav::-webkit-scrollbar-track,.doc-toc::-webkit-scrollbar-track,.docs-search-results::-webkit-scrollbar-track,pre::-webkit-scrollbar-track,.prose .table-scroll::-webkit-scrollbar-track{background:transparent}.docs-nav::-webkit-scrollbar-thumb,.doc-toc::-webkit-scrollbar-thumb,.docs-search-results::-webkit-scrollbar-thumb,pre::-webkit-scrollbar-thumb,.prose .table-scroll::-webkit-scrollbar-thumb{background-color:var(--line-2);border-radius:999px;border:2px solid transparent;background-clip:content-box}.prose h1,.prose h2,.prose h3,.prose h4{font-family:var(--font-display)}.prose h1{font-size:1.75rem;font-weight:650;line-height:1.25;letter-spacing:-.02em}.prose h2{font-size:1.3125rem;font-weight:600;line-height:1.3;letter-spacing:-.01em}.prose h3{font-size:1.0625rem;font-weight:600;line-height:1.35}.prose h4{font-size:.9375rem;font-weight:600}.prose a{color:var(--accent);text-decoration:underline;text-decoration-color:color-mix(in srgb,var(--accent) 40%,transparent);text-underline-offset:2px}.prose a:hover{text-decoration-color:var(--accent)}a.external-link:after{content:"";display:inline-block;vertical-align:baseline;width:.625em;height:.625em;margin-left:.2em;background-color:currentColor;-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M4.5 2.5h9v9h-2V5.91l-6.8 6.8-1.41-1.42 6.79-6.79H4.5v-2z'/%3E%3C/svg%3E") no-repeat center / contain;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M4.5 2.5h9v9h-2V5.91l-6.8 6.8-1.41-1.42 6.79-6.79H4.5v-2z'/%3E%3C/svg%3E") no-repeat center / contain}.prose strong{font-weight:600;color:var(--ink)}.prose code{font-family:var(--font-mono);font-size:.85em;background:var(--panel);border:1px solid var(--line);border-radius:.25rem;padding:.0625rem .3125rem}.prose pre{border:1px solid var(--line);border-radius:.375rem;padding:.875rem 1rem;overflow-x:auto;font-size:.8125rem;line-height:1.6}.prose pre.astro-code{background-color:var(--code-bg)!important}.prose pre code{background:none;border:none;padding:0;font-size:inherit}.prose ul,.prose ol{padding-inline-start:1.5rem}.prose li::marker{color:var(--muted)}.prose blockquote{position:relative;margin-inline:0;padding-inline:0;padding-block:var(--rhythm-para);color:var(--muted)}.prose blockquote:before{content:"";position:absolute;inset-block:0;left:calc(-1 * var(--space-4));width:2px;background:var(--line-2)}.prose hr{border:none;border-top:1px solid var(--line)}.prose .table-scroll{max-width:100%;overflow-x:auto}.prose table{width:auto;border-collapse:collapse;font-size:.875rem}.prose th,.prose td{border:0;border-bottom:1px solid var(--line);padding:.5rem 2rem .5rem 0;text-align:left;vertical-align:top}.prose th:last-child,.prose td:last-child{padding-right:0}.prose th{font-family:var(--font-mono);font-size:.6875rem;text-transform:uppercase;letter-spacing:var(--tracking-micro, .06em);color:var(--muted);white-space:nowrap;border-bottom-color:var(--line-2)}.prose td code{white-space:nowrap}pre,code,kbd,samp{font-variant-ligatures:none}.prose .compat-key{display:flex;flex-wrap:wrap;gap:var(--space-1) var(--space-5);margin:1rem 0;font-size:var(--fs-caption);color:var(--muted)}.prose .compat-key-item{display:inline-flex;align-items:center;gap:var(--space-2);white-space:nowrap}.prose .compat-list{margin:1rem 0}.prose .compat-list--plain .compat-line{grid-template-columns:1fr}.prose .compat-line{display:grid;grid-template-columns:.75rem 1fr auto;column-gap:var(--space-3);align-items:start;padding:var(--space-2) 0}.prose .compat-main{display:flex;flex-direction:column;gap:1px;min-width:0}.prose .compat-api{font-family:var(--font-mono);font-size:.9rem;color:var(--ink);overflow-wrap:anywhere}.prose .compat-sub{font-size:.8125rem;color:var(--ink)}.prose .compat-category{color:var(--muted)}.prose .compat-row{border-bottom:1px solid var(--line)}.prose .compat-row:last-child{border-bottom:0}.prose summary.compat-line{cursor:pointer;list-style:none}.prose summary.compat-line::-webkit-details-marker{display:none}.prose summary.compat-line:after{content:"›";color:var(--faint);transition:transform .12s}.prose details[open]>summary.compat-line:after{transform:rotate(90deg)}.prose .compat-dot{width:8px;height:8px;border-radius:50%;background:var(--muted);flex-shrink:0}.prose .compat-line .compat-dot{margin-top:.4em}.prose .compat-dot[data-status=ok]{background:var(--diff-add)}.prose .compat-dot[data-status=diverged]{background:var(--accent)}.prose .compat-dot[data-status=bug]{background:var(--diff-remove)}.prose .compat-dot[data-status=unsupported]{background:var(--line-2)}.prose .compat-dot[data-status=unverified]{background:transparent;box-shadow:inset 0 0 0 1px var(--faint)}.prose .compat-status{font-family:var(--font-mono);font-size:var(--fs-caption);color:var(--muted)}.prose .compat-behavior{font-size:.875rem}.prose .compat-evidence{margin:0 0 var(--space-2) calc(.75rem + var(--space-3))}.prose .compat-probe,.prose .compat-note{margin-top:2px;font-size:var(--fs-caption);color:var(--muted);overflow-wrap:anywhere}.prose .compat-probe{font-family:var(--font-mono)}.prose .compat-list code,.prose .compat-key code{background:none;border:0;padding:0;color:inherit}.prose h1,.prose h2,.prose h3,.prose h4{scroll-margin-top:calc(54px + 1.5rem)}@media(max-width:1080px){.docs-shell{grid-template-columns:240px minmax(0,1fr)}.doc-toc{display:none}}@media(max-width:800px){.docs-shell{grid-template-columns:minmax(0,1fr);gap:1.5rem;padding-top:1.5rem}.docs-shell>.docs-nav{display:none}.docs-nav-drawer{display:block;border:1px solid var(--line);background:var(--panel)}.docs-nav-drawer>summary{cursor:pointer;padding:.625rem 1rem;font-family:var(--font-mono);font-size:.75rem;text-transform:uppercase;letter-spacing:var(--tracking-micro, .06em);color:var(--muted);list-style:none}.docs-nav-drawer>summary:after{content:" ▾"}.docs-nav-drawer .docs-nav{display:grid;position:static;max-height:none;padding:0 1rem 1rem}}.docs-nav-group-body--reference{gap:var(--space-3)}