@pyric/cli 0.1.0-alpha.19 → 0.1.0-alpha.21

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 (642) hide show
  1. package/README.md +64 -89
  2. package/dist/assurance/.generated/conformance-verdicts.d.ts +68 -1
  3. package/dist/assurance/.generated/conformance-verdicts.d.ts.map +1 -1
  4. package/dist/assurance/.generated/conformance-verdicts.js +68 -1
  5. package/dist/assurance/.generated/conformance-verdicts.js.map +1 -1
  6. package/dist/bridge/client/dispatch.d.ts +25 -19
  7. package/dist/bridge/client/dispatch.d.ts.map +1 -1
  8. package/dist/bridge/client/dispatch.js +41 -48
  9. package/dist/bridge/client/dispatch.js.map +1 -1
  10. package/dist/bridge/client/tool-family-factories.d.ts +26 -0
  11. package/dist/bridge/client/tool-family-factories.d.ts.map +1 -0
  12. package/dist/bridge/client/tool-family-factories.js +10 -0
  13. package/dist/bridge/client/tool-family-factories.js.map +1 -0
  14. package/dist/bridge/server/mcp-contract.d.ts +7 -6
  15. package/dist/bridge/server/mcp-contract.d.ts.map +1 -1
  16. package/dist/bridge/server/mcp-contract.js +9 -48
  17. package/dist/bridge/server/mcp-contract.js.map +1 -1
  18. package/dist/bridge/server/peer.d.ts +11 -1
  19. package/dist/bridge/server/peer.d.ts.map +1 -1
  20. package/dist/bridge/server/peer.js +22 -1
  21. package/dist/bridge/server/peer.js.map +1 -1
  22. package/dist/bridge/server/tool-family-factories.d.ts +30 -0
  23. package/dist/bridge/server/tool-family-factories.d.ts.map +1 -0
  24. package/dist/bridge/server/tool-family-factories.js +22 -0
  25. package/dist/bridge/server/tool-family-factories.js.map +1 -0
  26. package/dist/bridge/server/tool-metadata.d.ts +17 -18
  27. package/dist/bridge/server/tool-metadata.d.ts.map +1 -1
  28. package/dist/bridge/server/tool-metadata.js +24 -59
  29. package/dist/bridge/server/tool-metadata.js.map +1 -1
  30. package/dist/bridge/tool-families.d.ts +48 -0
  31. package/dist/bridge/tool-families.d.ts.map +1 -0
  32. package/dist/bridge/tool-families.generated.d.ts +32 -0
  33. package/dist/bridge/tool-families.generated.d.ts.map +1 -0
  34. package/dist/bridge/tool-families.generated.js +15 -0
  35. package/dist/bridge/tool-families.generated.js.map +1 -0
  36. package/dist/bridge/tool-families.js +51 -0
  37. package/dist/bridge/tool-families.js.map +1 -0
  38. package/dist/bridge/tool-family-records/conformance.d.ts +7 -0
  39. package/dist/bridge/tool-family-records/conformance.d.ts.map +1 -0
  40. package/dist/bridge/tool-family-records/conformance.js +6 -0
  41. package/dist/bridge/tool-family-records/conformance.js.map +1 -0
  42. package/dist/bridge/tool-family-records/firestore-data.d.ts +7 -0
  43. package/dist/bridge/tool-family-records/firestore-data.d.ts.map +1 -0
  44. package/dist/bridge/tool-family-records/firestore-data.js +15 -0
  45. package/dist/bridge/tool-family-records/firestore-data.js.map +1 -0
  46. package/dist/bridge/tool-family-records/firestore-inspect.d.ts +7 -0
  47. package/dist/bridge/tool-family-records/firestore-inspect.d.ts.map +1 -0
  48. package/dist/bridge/tool-family-records/firestore-inspect.js +6 -0
  49. package/dist/bridge/tool-family-records/firestore-inspect.js.map +1 -0
  50. package/dist/bridge/tool-family-records/firestore-rules.d.ts +7 -0
  51. package/dist/bridge/tool-family-records/firestore-rules.d.ts.map +1 -0
  52. package/dist/bridge/tool-family-records/firestore-rules.js +15 -0
  53. package/dist/bridge/tool-family-records/firestore-rules.js.map +1 -0
  54. package/dist/bridge/tool-family-records/firestore-simulator.d.ts +7 -0
  55. package/dist/bridge/tool-family-records/firestore-simulator.d.ts.map +1 -0
  56. package/dist/bridge/tool-family-records/firestore-simulator.js +16 -0
  57. package/dist/bridge/tool-family-records/firestore-simulator.js.map +1 -0
  58. package/dist/bridge/tool-family-records/rtdb-inspection.d.ts +7 -0
  59. package/dist/bridge/tool-family-records/rtdb-inspection.d.ts.map +1 -0
  60. package/dist/bridge/tool-family-records/rtdb-inspection.js +6 -0
  61. package/dist/bridge/tool-family-records/rtdb-inspection.js.map +1 -0
  62. package/dist/bundler/externals.d.ts +37 -0
  63. package/dist/bundler/externals.d.ts.map +1 -0
  64. package/dist/bundler/externals.js +52 -0
  65. package/dist/bundler/externals.js.map +1 -0
  66. package/dist/bundler/index.d.ts +17 -0
  67. package/dist/bundler/index.d.ts.map +1 -0
  68. package/dist/bundler/index.js +17 -0
  69. package/dist/bundler/index.js.map +1 -0
  70. package/dist/cli/index.d.ts +2 -2
  71. package/dist/cli/index.d.ts.map +1 -1
  72. package/dist/cli/index.js +48 -42
  73. package/dist/cli/index.js.map +1 -1
  74. package/dist/cli/inlined-sdk-scanner.d.ts +6 -0
  75. package/dist/cli/inlined-sdk-scanner.d.ts.map +1 -0
  76. package/dist/cli/inlined-sdk-scanner.js +82 -0
  77. package/dist/cli/inlined-sdk-scanner.js.map +1 -0
  78. package/dist/cli/mcp-proxy.js +3 -3
  79. package/dist/cli/mcp-proxy.js.map +1 -1
  80. package/dist/cli/parse-args.d.ts +1 -1
  81. package/dist/cli/parse-args.d.ts.map +1 -1
  82. package/dist/cli/parse-args.js +51 -15
  83. package/dist/cli/parse-args.js.map +1 -1
  84. package/dist/cli/pyric-config.d.ts +24 -0
  85. package/dist/cli/pyric-config.d.ts.map +1 -0
  86. package/dist/cli/pyric-config.js +28 -0
  87. package/dist/cli/pyric-config.js.map +1 -0
  88. package/dist/cli/sandbox-interlock.d.ts +97 -0
  89. package/dist/cli/sandbox-interlock.d.ts.map +1 -0
  90. package/dist/cli/sandbox-interlock.js +112 -0
  91. package/dist/cli/sandbox-interlock.js.map +1 -0
  92. package/dist/cli/{dev-runner.d.ts → sandbox-runner.d.ts} +53 -48
  93. package/dist/cli/sandbox-runner.d.ts.map +1 -0
  94. package/dist/cli/{dev-runner.js → sandbox-runner.js} +105 -67
  95. package/dist/cli/sandbox-runner.js.map +1 -0
  96. package/dist/cli/serve.d.ts +12 -14
  97. package/dist/cli/serve.d.ts.map +1 -1
  98. package/dist/cli/serve.js +155 -116
  99. package/dist/cli/serve.js.map +1 -1
  100. package/dist/cli/snapshot.js +5 -5
  101. package/dist/cli/snapshot.js.map +1 -1
  102. package/dist/cli/unsupported-runtime.d.ts +27 -0
  103. package/dist/cli/unsupported-runtime.d.ts.map +1 -0
  104. package/dist/cli/unsupported-runtime.js +63 -0
  105. package/dist/cli/unsupported-runtime.js.map +1 -0
  106. package/dist/cli/verify.js +1 -1
  107. package/dist/cli/verify.js.map +1 -1
  108. package/dist/conformance/.generated/can-i-use-browser.d.ts +1 -1
  109. package/dist/conformance/.generated/can-i-use-browser.d.ts.map +1 -1
  110. package/dist/conformance/.generated/can-i-use-browser.js +1 -1
  111. package/dist/conformance/.generated/can-i-use-browser.js.map +1 -1
  112. package/dist/conformance/.generated/can-i-use.d.ts +1 -1
  113. package/dist/conformance/.generated/can-i-use.d.ts.map +1 -1
  114. package/dist/conformance/.generated/can-i-use.js +1 -1
  115. package/dist/conformance/.generated/can-i-use.js.map +1 -1
  116. package/dist/conformance/.generated/conformance-docs.d.ts.map +1 -1
  117. package/dist/conformance/.generated/conformance-docs.js +1 -1
  118. package/dist/conformance/.generated/conformance-docs.js.map +1 -1
  119. package/dist/functions-rtdb/child.d.ts +37 -0
  120. package/dist/functions-rtdb/child.d.ts.map +1 -1
  121. package/dist/functions-rtdb/child.js +90 -21
  122. package/dist/functions-rtdb/child.js.map +1 -1
  123. package/dist/functions-rtdb/development-runtime.d.ts +3 -0
  124. package/dist/functions-rtdb/development-runtime.d.ts.map +1 -1
  125. package/dist/functions-rtdb/development-runtime.js +2 -1
  126. package/dist/functions-rtdb/development-runtime.js.map +1 -1
  127. package/dist/functions-rtdb/project.js +8 -8
  128. package/dist/functions-rtdb/project.js.map +1 -1
  129. package/dist/google-endpoints.d.ts +67 -0
  130. package/dist/google-endpoints.d.ts.map +1 -0
  131. package/dist/google-endpoints.js +119 -0
  132. package/dist/google-endpoints.js.map +1 -0
  133. package/dist/next/guard.js +1 -1
  134. package/dist/next/guard.js.map +1 -1
  135. package/dist/next/runtime-env.d.ts.map +1 -1
  136. package/dist/next/runtime-env.js +5 -0
  137. package/dist/next/runtime-env.js.map +1 -1
  138. package/dist/next/with-pyric.d.ts +1 -1
  139. package/dist/next/with-pyric.js +1 -1
  140. package/dist/register/beacon.d.ts +69 -0
  141. package/dist/register/beacon.d.ts.map +1 -0
  142. package/dist/register/beacon.js +199 -0
  143. package/dist/register/beacon.js.map +1 -0
  144. package/dist/register/index.d.ts.map +1 -1
  145. package/dist/register/index.js +65 -6
  146. package/dist/register/index.js.map +1 -1
  147. package/dist/register/net-guard.d.ts +110 -0
  148. package/dist/register/net-guard.d.ts.map +1 -0
  149. package/dist/register/net-guard.js +462 -0
  150. package/dist/register/net-guard.js.map +1 -0
  151. package/dist/remote/index.d.ts +1 -1
  152. package/dist/remote/index.js +9 -9
  153. package/dist/remote/index.js.map +1 -1
  154. package/dist/serve/ai-diagnostics-relay.d.ts +63 -0
  155. package/dist/serve/ai-diagnostics-relay.d.ts.map +1 -0
  156. package/dist/serve/ai-diagnostics-relay.js +125 -0
  157. package/dist/serve/ai-diagnostics-relay.js.map +1 -0
  158. package/dist/serve/ai-proxy.d.ts +92 -0
  159. package/dist/serve/ai-proxy.d.ts.map +1 -0
  160. package/dist/serve/ai-proxy.js +269 -0
  161. package/dist/serve/ai-proxy.js.map +1 -0
  162. package/dist/serve/ai-status.d.ts +44 -0
  163. package/dist/serve/ai-status.d.ts.map +1 -0
  164. package/dist/serve/ai-status.js +77 -0
  165. package/dist/serve/ai-status.js.map +1 -0
  166. package/dist/serve/ai-terminal-blocks.d.ts +97 -0
  167. package/dist/serve/ai-terminal-blocks.d.ts.map +1 -0
  168. package/dist/serve/ai-terminal-blocks.js +128 -0
  169. package/dist/serve/ai-terminal-blocks.js.map +1 -0
  170. package/dist/serve/ai-terminal-text.d.ts +36 -0
  171. package/dist/serve/ai-terminal-text.d.ts.map +1 -0
  172. package/dist/serve/ai-terminal-text.js +48 -0
  173. package/dist/serve/ai-terminal-text.js.map +1 -0
  174. package/dist/serve/beacon-route.d.ts +53 -0
  175. package/dist/serve/beacon-route.d.ts.map +1 -0
  176. package/dist/serve/beacon-route.js +101 -0
  177. package/dist/serve/beacon-route.js.map +1 -0
  178. package/dist/serve/bundler.js +10 -10
  179. package/dist/serve/bundler.js.map +1 -1
  180. package/dist/serve/entries/active-auth-registry.d.ts +16 -0
  181. package/dist/serve/entries/active-auth-registry.d.ts.map +1 -0
  182. package/dist/serve/entries/active-auth-registry.js +48 -0
  183. package/dist/serve/entries/active-auth-registry.js.map +1 -0
  184. package/dist/serve/entries/active-auth.d.ts +18 -0
  185. package/dist/serve/entries/active-auth.d.ts.map +1 -0
  186. package/dist/serve/entries/active-auth.js +84 -0
  187. package/dist/serve/entries/active-auth.js.map +1 -0
  188. package/dist/serve/entries/ai.d.ts.map +1 -1
  189. package/dist/serve/entries/ai.js +27 -1
  190. package/dist/serve/entries/ai.js.map +1 -1
  191. package/dist/serve/entries/auth-helper-core.d.ts +1 -0
  192. package/dist/serve/entries/auth-helper-core.d.ts.map +1 -1
  193. package/dist/serve/entries/auth-helper-core.js +4 -0
  194. package/dist/serve/entries/auth-helper-core.js.map +1 -1
  195. package/dist/serve/entries/auth-helper-dom.d.ts.map +1 -1
  196. package/dist/serve/entries/auth-helper-dom.js +29 -3
  197. package/dist/serve/entries/auth-helper-dom.js.map +1 -1
  198. package/dist/serve/entries/auth-helper-runtime.js +1 -1
  199. package/dist/serve/entries/auth-helper-runtime.js.map +1 -1
  200. package/dist/serve/entries/auth.d.ts.map +1 -1
  201. package/dist/serve/entries/auth.js +8 -0
  202. package/dist/serve/entries/auth.js.map +1 -1
  203. package/dist/serve/entries/bridge-url.d.ts +1 -1
  204. package/dist/serve/entries/bridge-url.js +1 -1
  205. package/dist/serve/entries/firestore.js +3 -3
  206. package/dist/serve/entries/firestore.js.map +1 -1
  207. package/dist/serve/entries/init.d.ts.map +1 -1
  208. package/dist/serve/entries/init.js +70 -4
  209. package/dist/serve/entries/init.js.map +1 -1
  210. package/dist/serve/entries/keepalive.js +1 -1
  211. package/dist/serve/entries/keepalive.js.map +1 -1
  212. package/dist/serve/entries/runtime.d.ts.map +1 -1
  213. package/dist/serve/entries/runtime.js +30 -14
  214. package/dist/serve/entries/runtime.js.map +1 -1
  215. package/dist/serve/entries/storage.js +1 -1
  216. package/dist/serve/entries/storage.js.map +1 -1
  217. package/dist/serve/entries/worker-runtime.js +1 -1
  218. package/dist/serve/entries/worker-runtime.js.map +1 -1
  219. package/dist/serve/init-payload.d.ts +4 -0
  220. package/dist/serve/init-payload.d.ts.map +1 -1
  221. package/dist/serve/namespace.d.ts +20 -5
  222. package/dist/serve/namespace.d.ts.map +1 -1
  223. package/dist/serve/namespace.js +93 -129
  224. package/dist/serve/namespace.js.map +1 -1
  225. package/dist/serve/rules.d.ts.map +1 -1
  226. package/dist/serve/rules.js +44 -21
  227. package/dist/serve/rules.js.map +1 -1
  228. package/dist/serve/runtime/chip-config.d.ts.map +1 -1
  229. package/dist/serve/runtime/chip-config.js +16 -2
  230. package/dist/serve/runtime/chip-config.js.map +1 -1
  231. package/dist/serve/runtime/chip-dialog.d.ts +18 -0
  232. package/dist/serve/runtime/chip-dialog.d.ts.map +1 -0
  233. package/dist/serve/runtime/chip-dialog.js +315 -0
  234. package/dist/serve/runtime/chip-dialog.js.map +1 -0
  235. package/dist/serve/runtime/chip-install.d.ts +2 -0
  236. package/dist/serve/runtime/chip-install.d.ts.map +1 -1
  237. package/dist/serve/runtime/chip-install.js +9 -4
  238. package/dist/serve/runtime/chip-install.js.map +1 -1
  239. package/dist/serve/runtime/chip-user-search.d.ts +16 -0
  240. package/dist/serve/runtime/chip-user-search.d.ts.map +1 -0
  241. package/dist/serve/runtime/chip-user-search.js +354 -0
  242. package/dist/serve/runtime/chip-user-search.js.map +1 -0
  243. package/dist/serve/runtime/chip.d.ts +10 -0
  244. package/dist/serve/runtime/chip.d.ts.map +1 -1
  245. package/dist/serve/runtime/chip.js +149 -15
  246. package/dist/serve/runtime/chip.js.map +1 -1
  247. package/dist/serve/runtime/identity.d.ts +17 -0
  248. package/dist/serve/runtime/identity.d.ts.map +1 -0
  249. package/dist/serve/runtime/identity.js +10 -0
  250. package/dist/serve/runtime/identity.js.map +1 -0
  251. package/dist/serve/runtime/manifest.d.ts +1 -1
  252. package/dist/serve/runtime/manifest.d.ts.map +1 -1
  253. package/dist/serve/runtime/manifest.js +1 -1
  254. package/dist/serve/runtime/manifest.js.map +1 -1
  255. package/dist/serve/runtime/status.d.ts.map +1 -1
  256. package/dist/serve/runtime/status.js +23 -0
  257. package/dist/serve/runtime/status.js.map +1 -1
  258. package/dist/serve/sandbox-session.d.ts +8 -0
  259. package/dist/serve/sandbox-session.d.ts.map +1 -1
  260. package/dist/serve/sandbox-session.js +12 -4
  261. package/dist/serve/sandbox-session.js.map +1 -1
  262. package/dist/serve/server.d.ts +7 -0
  263. package/dist/serve/server.d.ts.map +1 -1
  264. package/dist/serve/server.js +15 -1
  265. package/dist/serve/server.js.map +1 -1
  266. package/dist/serve/site-ui/404.html +1 -1
  267. package/dist/serve/site-ui/_astro/{RulesCodeEditor.Bl-XMkhD.js → RulesCodeEditor.DsTAsKIa.js} +1 -1
  268. package/dist/serve/site-ui/_astro/_slug_.Da5VLhW1.css +1 -0
  269. package/dist/serve/site-ui/_astro/_studio_.BnfYCKoI.css +1 -0
  270. package/dist/serve/site-ui/_astro/app.BOr2kwae.js +115 -0
  271. package/dist/serve/site-ui/_astro/app.DhAcImFD.js +1 -0
  272. package/dist/serve/site-ui/_astro/app.pMSnN6Qw.css +1 -0
  273. package/dist/serve/site-ui/_astro/{chess-showcase.Dh5D8kqe.js → chess-showcase.Bn_pP6UJ.js} +2 -2
  274. package/dist/serve/site-ui/_astro/{example-runtime.CuyAjjiG.js → example-runtime.CXopTGv7.js} +1 -1
  275. package/dist/serve/site-ui/_astro/index.Tb-31efc.css +1 -0
  276. package/dist/serve/site-ui/_astro/index.UkCBr-_0.css +1 -0
  277. package/dist/serve/site-ui/_astro/sandbox-controls.rOuZTOUG.js +510 -0
  278. package/dist/serve/site-ui/_astro/{seed.CSUkloMi.js → seed.03a08f9t.js} +2 -2
  279. package/dist/serve/site-ui/_astro/writes.BsPBG3dp.js +653 -0
  280. package/dist/serve/site-ui/auth/index.html +5 -3
  281. package/dist/serve/site-ui/david-east.jpg +0 -0
  282. package/dist/serve/site-ui/docs/_rhythm/index.html +6 -3
  283. package/dist/serve/site-ui/docs/_rhythm.md +1 -1
  284. package/dist/serve/site-ui/docs/agent/set-up-your-agent/index.html +18 -15
  285. package/dist/serve/site-ui/docs/agent/set-up-your-agent.md +16 -16
  286. package/dist/serve/site-ui/docs/agent/watch-and-review/index.html +6 -5
  287. package/dist/serve/site-ui/docs/agent/watch-and-review.md +1 -5
  288. package/dist/serve/site-ui/docs/agent/work-with-an-agent/index.html +8 -5
  289. package/dist/serve/site-ui/docs/agent/work-with-an-agent.md +4 -4
  290. package/dist/serve/site-ui/docs/ai-compat/index.html +5 -2
  291. package/dist/serve/site-ui/docs/api-reference/index.html +13 -2
  292. package/dist/serve/site-ui/docs/api-reference.md +8 -0
  293. package/dist/serve/site-ui/docs/app-compat/index.html +5 -2
  294. package/dist/serve/site-ui/docs/auth-compat/index.html +7 -4
  295. package/dist/serve/site-ui/docs/auth-compat.md +2 -2
  296. package/dist/serve/site-ui/docs/build/ai-logic/index.html +10 -2
  297. package/dist/serve/site-ui/docs/build/ai-logic.md +6 -0
  298. package/dist/serve/site-ui/docs/build/authentication/index.html +7 -4
  299. package/dist/serve/site-ui/docs/build/authentication.md +2 -2
  300. package/dist/serve/site-ui/docs/build/cloud-firestore/index.html +5 -2
  301. package/dist/serve/site-ui/docs/build/cloud-messaging/index.html +5 -2
  302. package/dist/serve/site-ui/docs/build/cloud-storage/index.html +6 -3
  303. package/dist/serve/site-ui/docs/build/cloud-storage.md +1 -1
  304. package/dist/serve/site-ui/docs/build/realtime-database/index.html +9 -6
  305. package/dist/serve/site-ui/docs/build/realtime-database.md +4 -4
  306. package/dist/serve/site-ui/docs/conformance-scores/index.html +10 -3
  307. package/dist/serve/site-ui/docs/conformance-scores.md +5 -1
  308. package/dist/serve/site-ui/docs/create-pyric-reference-api/index.html +6 -3
  309. package/dist/serve/site-ui/docs/create-pyric-reference-api.md +1 -1
  310. package/dist/serve/site-ui/docs/database-compat/index.html +48 -45
  311. package/dist/serve/site-ui/docs/database-compat.md +43 -43
  312. package/dist/serve/site-ui/docs/examples/chess/index.html +5 -2
  313. package/dist/serve/site-ui/docs/examples/index.html +5 -2
  314. package/dist/serve/site-ui/docs/firestore-compat/index.html +8 -5
  315. package/dist/serve/site-ui/docs/firestore-compat.md +3 -3
  316. package/dist/serve/site-ui/docs/firestore-flutter-compat/index.html +319 -0
  317. package/dist/serve/site-ui/docs/firestore-flutter-compat.md +344 -0
  318. package/dist/serve/site-ui/docs/functions-rtdb-compat/index.html +5 -2
  319. package/dist/serve/site-ui/docs/get-started/backend-bundlers/index.html +105 -0
  320. package/dist/serve/site-ui/docs/get-started/backend-bundlers.md +165 -0
  321. package/dist/serve/site-ui/docs/get-started/how-the-swap-works/index.html +9 -6
  322. package/dist/serve/site-ui/docs/get-started/how-the-swap-works.md +5 -5
  323. package/dist/serve/site-ui/docs/get-started/nextjs/index.html +9 -6
  324. package/dist/serve/site-ui/docs/get-started/nextjs.md +4 -4
  325. package/dist/serve/site-ui/docs/get-started/start-building/index.html +14 -9
  326. package/dist/serve/site-ui/docs/get-started/start-building.md +16 -10
  327. package/dist/serve/site-ui/docs/get-started/vite/index.html +6 -3
  328. package/dist/serve/site-ui/docs/get-started/vite.md +1 -1
  329. package/dist/serve/site-ui/docs/index.json +3128 -1613
  330. package/dist/serve/site-ui/docs/messaging-compat/index.html +5 -2
  331. package/dist/serve/site-ui/docs/observe/resolve-runtime-status/index.html +5 -2
  332. package/dist/serve/site-ui/docs/observe/see-whats-happening/index.html +6 -4
  333. package/dist/serve/site-ui/docs/observe/see-whats-happening.md +2 -4
  334. package/dist/serve/site-ui/docs/observe/shape-your-data/index.html +9 -6
  335. package/dist/serve/site-ui/docs/observe/shape-your-data.md +4 -4
  336. package/dist/serve/site-ui/docs/overview/index.html +16 -10
  337. package/dist/serve/site-ui/docs/overview.md +19 -11
  338. package/dist/serve/site-ui/docs/pyric-admin-app-reference-api/index.html +5 -2
  339. package/dist/serve/site-ui/docs/pyric-admin-auth-reference-api/index.html +5 -2
  340. package/dist/serve/site-ui/docs/pyric-admin-database-reference-api/index.html +5 -2
  341. package/dist/serve/site-ui/docs/pyric-admin-firestore-reference-api/index.html +8 -5
  342. package/dist/serve/site-ui/docs/pyric-admin-firestore-reference-api.md +3 -3
  343. package/dist/serve/site-ui/docs/pyric-admin-messaging-reference-api/index.html +5 -2
  344. package/dist/serve/site-ui/docs/pyric-admin-reference-api/index.html +501 -0
  345. package/dist/serve/site-ui/docs/pyric-admin-reference-api.md +587 -0
  346. package/dist/serve/site-ui/docs/pyric-admin-storage-reference-api/index.html +5 -2
  347. package/dist/serve/site-ui/docs/pyric-ai-reference-api/index.html +5 -2
  348. package/dist/serve/site-ui/docs/pyric-ai-scripting-reference-api/index.html +5 -2
  349. package/dist/serve/site-ui/docs/pyric-analytics-reference-api/index.html +124 -0
  350. package/dist/serve/site-ui/docs/pyric-analytics-reference-api.md +287 -0
  351. package/dist/serve/site-ui/docs/pyric-app-check-reference-api/index.html +87 -0
  352. package/dist/serve/site-ui/docs/pyric-app-check-reference-api.md +199 -0
  353. package/dist/serve/site-ui/docs/pyric-app-reference-api/index.html +5 -2
  354. package/dist/serve/site-ui/docs/pyric-auth-reference-api/index.html +10 -3
  355. package/dist/serve/site-ui/docs/pyric-auth-reference-api.md +2 -1
  356. package/dist/serve/site-ui/docs/pyric-cli-assurance-browser-reference-api/index.html +5 -2
  357. package/dist/serve/site-ui/docs/pyric-cli-assurance-reference-api/index.html +5 -2
  358. package/dist/serve/site-ui/docs/pyric-cli-bridge-client-reference-api/index.html +6 -3
  359. package/dist/serve/site-ui/docs/pyric-cli-bridge-client-reference-api.md +1 -1
  360. package/dist/serve/site-ui/docs/pyric-cli-bridge-reference-api/index.html +5 -2
  361. package/dist/serve/site-ui/docs/pyric-cli-bundler-reference-api/index.html +56 -0
  362. package/dist/serve/site-ui/docs/pyric-cli-bundler-reference-api.md +72 -0
  363. package/dist/serve/site-ui/docs/pyric-cli-conformance-browser-reference-api/index.html +6 -2
  364. package/dist/serve/site-ui/docs/pyric-cli-conformance-browser-reference-api.md +1 -0
  365. package/dist/serve/site-ui/docs/pyric-cli-conformance-docs-reference-api/index.html +5 -2
  366. package/dist/serve/site-ui/docs/pyric-cli-conformance-reference-api/index.html +6 -2
  367. package/dist/serve/site-ui/docs/pyric-cli-conformance-reference-api.md +1 -0
  368. package/dist/serve/site-ui/docs/pyric-cli-credentials-node-reference-api/index.html +5 -2
  369. package/dist/serve/site-ui/docs/pyric-cli-discover-reference-api/index.html +5 -2
  370. package/dist/serve/site-ui/docs/pyric-cli-next-reference-api/index.html +6 -3
  371. package/dist/serve/site-ui/docs/pyric-cli-next-reference-api.md +1 -1
  372. package/dist/serve/site-ui/docs/pyric-cli-register-app-bridge-reference-api/index.html +5 -2
  373. package/dist/serve/site-ui/docs/pyric-cli-register-reference-api/index.html +5 -2
  374. package/dist/serve/site-ui/docs/pyric-cli-remote-reference-api/index.html +39 -11
  375. package/dist/serve/site-ui/docs/pyric-cli-remote-reference-api.md +17 -9
  376. package/dist/serve/site-ui/docs/pyric-cli-serve-worker-reference-api/index.html +137 -94
  377. package/dist/serve/site-ui/docs/pyric-cli-serve-worker-reference-api.md +61 -1
  378. package/dist/serve/site-ui/docs/pyric-cli-verify-reference-api/index.html +6 -3
  379. package/dist/serve/site-ui/docs/pyric-cli-verify-reference-api.md +1 -1
  380. package/dist/serve/site-ui/docs/pyric-cli-vite-reference-api/index.html +6 -3
  381. package/dist/serve/site-ui/docs/pyric-cli-vite-reference-api.md +2 -2
  382. package/dist/serve/site-ui/docs/pyric-database-reference-api/index.html +167 -96
  383. package/dist/serve/site-ui/docs/pyric-database-reference-api.md +108 -2
  384. package/dist/serve/site-ui/docs/pyric-firestore-lite-reference-api/index.html +559 -0
  385. package/dist/serve/site-ui/docs/pyric-firestore-lite-reference-api.md +1240 -0
  386. package/dist/serve/site-ui/docs/pyric-firestore-reference-api/index.html +44 -12
  387. package/dist/serve/site-ui/docs/pyric-firestore-reference-api.md +18 -8
  388. package/dist/serve/site-ui/docs/pyric-functions-reference-api/index.html +67 -0
  389. package/dist/serve/site-ui/docs/pyric-functions-reference-api.md +149 -0
  390. package/dist/serve/site-ui/docs/pyric-messaging-reference-api/index.html +10 -4
  391. package/dist/serve/site-ui/docs/pyric-messaging-reference-api.md +5 -2
  392. package/dist/serve/site-ui/docs/pyric-messaging-sw-reference-api/index.html +10 -4
  393. package/dist/serve/site-ui/docs/pyric-messaging-sw-reference-api.md +5 -2
  394. package/dist/serve/site-ui/docs/pyric-performance-reference-api/index.html +35 -0
  395. package/dist/serve/site-ui/docs/pyric-performance-reference-api.md +69 -0
  396. package/dist/serve/site-ui/docs/pyric-remote-config-reference-api/index.html +132 -0
  397. package/dist/serve/site-ui/docs/pyric-remote-config-reference-api.md +307 -0
  398. package/dist/serve/site-ui/docs/pyric-rules-reference-api/index.html +5 -2
  399. package/dist/serve/site-ui/docs/pyric-sandbox-database-reference-api/index.html +56 -18
  400. package/dist/serve/site-ui/docs/pyric-sandbox-database-reference-api.md +48 -9
  401. package/dist/serve/site-ui/docs/pyric-sandbox-firestore-reference-api/index.html +6 -3
  402. package/dist/serve/site-ui/docs/pyric-sandbox-firestore-reference-api.md +2 -2
  403. package/dist/serve/site-ui/docs/pyric-sandbox-reference-api/index.html +243 -50
  404. package/dist/serve/site-ui/docs/pyric-sandbox-reference-api.md +148 -31
  405. package/dist/serve/site-ui/docs/pyric-storage-reference-api/index.html +26 -5
  406. package/dist/serve/site-ui/docs/pyric-storage-reference-api.md +24 -2
  407. package/dist/serve/site-ui/docs/pyric-ui-agents-reference-api/index.html +30 -97
  408. package/dist/serve/site-ui/docs/pyric-ui-agents-reference-api.md +20 -51
  409. package/dist/serve/site-ui/docs/pyric-ui-auth-hooks-reference-api/index.html +5 -2
  410. package/dist/serve/site-ui/docs/pyric-ui-auth-reference-api/index.html +6 -3
  411. package/dist/serve/site-ui/docs/pyric-ui-auth-reference-api.md +1 -1
  412. package/dist/serve/site-ui/docs/pyric-ui-events-hooks-reference-api/index.html +5 -2
  413. package/dist/serve/site-ui/docs/pyric-ui-events-reference-api/index.html +5 -2
  414. package/dist/serve/site-ui/docs/pyric-ui-firestore-hooks-reference-api/index.html +5 -2
  415. package/dist/serve/site-ui/docs/pyric-ui-firestore-reference-api/index.html +6 -3
  416. package/dist/serve/site-ui/docs/pyric-ui-firestore-reference-api.md +1 -1
  417. package/dist/serve/site-ui/docs/pyric-ui-primitives-reference-api/index.html +128 -27
  418. package/dist/serve/site-ui/docs/pyric-ui-primitives-reference-api.md +58 -5
  419. package/dist/serve/site-ui/docs/pyric-ui-rtdb-reference-api/index.html +5 -2
  420. package/dist/serve/site-ui/docs/pyric-ui-rules-hooks-reference-api/index.html +5 -2
  421. package/dist/serve/site-ui/docs/pyric-ui-rules-reference-api/index.html +5 -2
  422. package/dist/serve/site-ui/docs/pyric-ui-storage-hooks-reference-api/index.html +5 -2
  423. package/dist/serve/site-ui/docs/pyric-ui-storage-reference-api/index.html +8 -6
  424. package/dist/serve/site-ui/docs/pyric-ui-storage-reference-api.md +3 -4
  425. package/dist/serve/site-ui/docs/pyric-ui-traffic-hooks-reference-api/index.html +5 -2
  426. package/dist/serve/site-ui/docs/pyric-ui-traffic-reference-api/index.html +5 -2
  427. package/dist/serve/site-ui/docs/reference/cli/index.html +156 -0
  428. package/dist/serve/site-ui/docs/reference/cli.md +120 -0
  429. package/dist/serve/site-ui/docs/rules-compat/index.html +14 -3
  430. package/dist/serve/site-ui/docs/rules-compat.md +9 -1
  431. package/dist/serve/site-ui/docs/secure/audit-your-rules/index.html +5 -2
  432. package/dist/serve/site-ui/docs/secure/firestore-rules-limits/index.html +5 -2
  433. package/dist/serve/site-ui/docs/secure/read-a-denial/index.html +6 -3
  434. package/dist/serve/site-ui/docs/secure/read-a-denial.md +1 -1
  435. package/dist/serve/site-ui/docs/secure/rtdb-rules-in-typescript/index.html +5 -2
  436. package/dist/serve/site-ui/docs/secure/rules-standard-library/index.html +5 -2
  437. package/dist/serve/site-ui/docs/secure/secure-it-with-rules/index.html +5 -2
  438. package/dist/serve/site-ui/docs/secure/simulate-and-lint/index.html +5 -2
  439. package/dist/serve/site-ui/docs/secure/write-a-rules-test-suite/index.html +5 -2
  440. package/dist/serve/site-ui/docs/ship/ship-to-production/index.html +7 -4
  441. package/dist/serve/site-ui/docs/ship/ship-to-production.md +2 -2
  442. package/dist/serve/site-ui/docs/ship/test-in-node/index.html +9 -6
  443. package/dist/serve/site-ui/docs/ship/test-in-node.md +4 -4
  444. package/dist/serve/site-ui/docs/storage-compat/index.html +17 -14
  445. package/dist/serve/site-ui/docs/storage-compat.md +12 -12
  446. package/dist/serve/site-ui/docs/trust/how-we-know-it-matches-firebase/index.html +5 -2
  447. package/dist/serve/site-ui/docs/trust/rules-standard-library/index.html +5 -2
  448. package/dist/serve/site-ui/docs/trust/versioning-and-compatibility/index.html +5 -2
  449. package/dist/serve/site-ui/docs/tutorial/index.html +10 -7
  450. package/dist/serve/site-ui/docs/tutorial.md +4 -4
  451. package/dist/serve/site-ui/examples/chess/index.html +4 -2
  452. package/dist/serve/site-ui/firestore/index.html +5 -3
  453. package/dist/serve/site-ui/hero-charcoal.jpg +0 -0
  454. package/dist/serve/site-ui/index.html +9 -7
  455. package/dist/serve/site-ui/llms.txt +13 -3
  456. package/dist/serve/site-ui/pyric-campfire-full.png +0 -0
  457. package/dist/serve/site-ui/pyric-campfire.png +0 -0
  458. package/dist/serve/site-ui/rtdb/index.html +5 -3
  459. package/dist/serve/site-ui/settings/index.html +5 -3
  460. package/dist/serve/site-ui/storage/index.html +5 -3
  461. package/dist/serve/site-ui/studio/index.html +13 -0
  462. package/dist/serve/site-ui/studio-routes.json +1 -1
  463. package/dist/serve/site-ui/traffic/index.html +5 -3
  464. package/dist/serve/studio/disk-workspace.d.ts.map +1 -1
  465. package/dist/serve/studio/disk-workspace.js +64 -2
  466. package/dist/serve/studio/disk-workspace.js.map +1 -1
  467. package/dist/serve/studio/routes.d.ts +9 -0
  468. package/dist/serve/studio/routes.d.ts.map +1 -1
  469. package/dist/serve/studio/routes.js +47 -7
  470. package/dist/serve/studio/routes.js.map +1 -1
  471. package/dist/serve/vite-ai-config.d.ts.map +1 -1
  472. package/dist/serve/vite-ai-config.js +38 -8
  473. package/dist/serve/vite-ai-config.js.map +1 -1
  474. package/dist/serve/vite-module-swap.d.ts.map +1 -1
  475. package/dist/serve/vite-module-swap.js +0 -28
  476. package/dist/serve/vite-module-swap.js.map +1 -1
  477. package/dist/serve/vite-plugin.d.ts +7 -7
  478. package/dist/serve/vite-plugin.js +1 -1
  479. package/dist/serve/vite-plugin.js.map +1 -1
  480. package/dist/serve/vite-sandbox-generation.d.ts +1 -1
  481. package/dist/serve/vite-sandbox-generation.d.ts.map +1 -1
  482. package/dist/serve/vite-sandbox-generation.js +13 -1
  483. package/dist/serve/vite-sandbox-generation.js.map +1 -1
  484. package/dist/serve/worker/client/auth.js +1 -2
  485. package/dist/serve/worker/client/auth.js.map +1 -1
  486. package/dist/serve/worker/client/core.d.ts +21 -1
  487. package/dist/serve/worker/client/core.d.ts.map +1 -1
  488. package/dist/serve/worker/client/core.js +79 -3
  489. package/dist/serve/worker/client/core.js.map +1 -1
  490. package/dist/serve/worker/client/disconnect.js +1 -1
  491. package/dist/serve/worker/client/disconnect.js.map +1 -1
  492. package/dist/serve/worker/client/presence.d.ts.map +1 -1
  493. package/dist/serve/worker/client/presence.js +18 -5
  494. package/dist/serve/worker/client/presence.js.map +1 -1
  495. package/dist/serve/worker/client.d.ts +1 -1
  496. package/dist/serve/worker/client.d.ts.map +1 -1
  497. package/dist/serve/worker/client.js +1 -1
  498. package/dist/serve/worker/client.js.map +1 -1
  499. package/dist/serve/worker/context-resolver.d.ts +30 -0
  500. package/dist/serve/worker/context-resolver.d.ts.map +1 -0
  501. package/dist/serve/worker/context-resolver.js +44 -0
  502. package/dist/serve/worker/context-resolver.js.map +1 -0
  503. package/dist/serve/worker/entry.js +23 -19
  504. package/dist/serve/worker/entry.js.map +1 -1
  505. package/dist/serve/worker/host/core.d.ts +1 -0
  506. package/dist/serve/worker/host/core.d.ts.map +1 -1
  507. package/dist/serve/worker/host/core.js +12 -6
  508. package/dist/serve/worker/host/core.js.map +1 -1
  509. package/dist/serve/worker/host/storage.js +2 -2
  510. package/dist/serve/worker/host-ai.d.ts.map +1 -1
  511. package/dist/serve/worker/host-ai.js +15 -0
  512. package/dist/serve/worker/host-ai.js.map +1 -1
  513. package/dist/serve/worker/host-auth.js +1 -2
  514. package/dist/serve/worker/host-auth.js.map +1 -1
  515. package/dist/serve/worker/index.d.ts +1 -1
  516. package/dist/serve/worker/index.d.ts.map +1 -1
  517. package/dist/serve/worker/index.js +2 -2
  518. package/dist/serve/worker/index.js.map +1 -1
  519. package/dist/serve/worker/port-lifecycle.d.ts +18 -0
  520. package/dist/serve/worker/port-lifecycle.d.ts.map +1 -0
  521. package/dist/serve/worker/port-lifecycle.js +28 -0
  522. package/dist/serve/worker/port-lifecycle.js.map +1 -0
  523. package/dist/serve/worker/protocol.d.ts +4 -0
  524. package/dist/serve/worker/protocol.d.ts.map +1 -1
  525. package/dist/serve/worker/protocol.js.map +1 -1
  526. package/dist/serve/worker/serve-init.d.ts.map +1 -1
  527. package/dist/serve/worker/serve-init.js +15 -3
  528. package/dist/serve/worker/serve-init.js.map +1 -1
  529. package/dist/verify/fixture.d.ts +1 -1
  530. package/package.json +17 -6
  531. package/src/assurance/.generated/conformance-verdicts.ts +68 -1
  532. package/src/bridge/client/dispatch.ts +52 -56
  533. package/src/bridge/client/tool-family-factories.ts +34 -0
  534. package/src/bridge/server/mcp-contract.ts +15 -59
  535. package/src/bridge/server/peer.ts +24 -1
  536. package/src/bridge/server/tool-family-factories.ts +40 -0
  537. package/src/bridge/server/tool-metadata.ts +29 -61
  538. package/src/bridge/tool-families.generated.ts +17 -0
  539. package/src/bridge/tool-families.ts +87 -0
  540. package/src/bridge/tool-family-records/conformance.ts +6 -0
  541. package/src/bridge/tool-family-records/firestore-data.ts +15 -0
  542. package/src/bridge/tool-family-records/firestore-inspect.ts +6 -0
  543. package/src/bridge/tool-family-records/firestore-rules.ts +15 -0
  544. package/src/bridge/tool-family-records/firestore-simulator.ts +16 -0
  545. package/src/bridge/tool-family-records/rtdb-inspection.ts +6 -0
  546. package/src/bundler/externals.ts +55 -0
  547. package/src/bundler/index.ts +21 -0
  548. package/src/cli/cli.test.ts +2 -46
  549. package/src/cli/index.ts +48 -42
  550. package/src/cli/inlined-sdk-scanner.ts +77 -0
  551. package/src/cli/mcp-proxy.ts +4 -4
  552. package/src/cli/parse-args.ts +61 -15
  553. package/src/cli/pyric-config.ts +45 -0
  554. package/src/cli/sandbox-interlock.ts +167 -0
  555. package/src/cli/{dev-runner.ts → sandbox-runner.ts} +142 -86
  556. package/src/cli/serve.ts +182 -115
  557. package/src/cli/snapshot.ts +5 -5
  558. package/src/cli/unsupported-runtime.ts +68 -0
  559. package/src/cli/verify.ts +1 -1
  560. package/src/conformance/.generated/can-i-use-browser.ts +2 -2
  561. package/src/conformance/.generated/can-i-use.ts +2 -2
  562. package/src/conformance/.generated/conformance-docs.ts +1 -1
  563. package/src/functions-rtdb/child.ts +115 -21
  564. package/src/functions-rtdb/development-runtime.ts +5 -1
  565. package/src/functions-rtdb/project.ts +8 -8
  566. package/src/google-endpoints.ts +155 -0
  567. package/src/next/guard.ts +1 -1
  568. package/src/next/runtime-env.ts +5 -0
  569. package/src/next/with-pyric.ts +1 -1
  570. package/src/register/beacon.ts +232 -0
  571. package/src/register/index.ts +68 -6
  572. package/src/register/net-guard.ts +567 -0
  573. package/src/remote/index.ts +9 -9
  574. package/src/serve/ai-diagnostics-relay.ts +243 -0
  575. package/src/serve/ai-proxy.ts +327 -0
  576. package/src/serve/ai-status.ts +109 -0
  577. package/src/serve/ai-terminal-blocks.ts +210 -0
  578. package/src/serve/ai-terminal-text.ts +52 -0
  579. package/src/serve/beacon-route.ts +141 -0
  580. package/src/serve/bundler.ts +10 -10
  581. package/src/serve/entries/active-auth-registry.ts +56 -0
  582. package/src/serve/entries/active-auth.ts +100 -0
  583. package/src/serve/entries/ai.ts +27 -1
  584. package/src/serve/entries/auth-helper-core.ts +5 -0
  585. package/src/serve/entries/auth-helper-dom.ts +27 -3
  586. package/src/serve/entries/auth-helper-runtime.ts +1 -1
  587. package/src/serve/entries/auth.ts +8 -0
  588. package/src/serve/entries/bridge-url.ts +1 -1
  589. package/src/serve/entries/firestore.ts +3 -3
  590. package/src/serve/entries/init.ts +78 -3
  591. package/src/serve/entries/keepalive.ts +1 -1
  592. package/src/serve/entries/runtime.ts +29 -14
  593. package/src/serve/entries/storage.ts +1 -1
  594. package/src/serve/entries/worker-runtime.ts +1 -1
  595. package/src/serve/init-payload.ts +4 -0
  596. package/src/serve/namespace.ts +117 -145
  597. package/src/serve/rules.ts +47 -22
  598. package/src/serve/runtime/chip-config.ts +16 -2
  599. package/src/serve/runtime/chip-dialog.ts +366 -0
  600. package/src/serve/runtime/chip-install.ts +10 -4
  601. package/src/serve/runtime/chip-user-search.ts +391 -0
  602. package/src/serve/runtime/chip.ts +177 -15
  603. package/src/serve/runtime/identity.ts +26 -0
  604. package/src/serve/runtime/manifest.ts +1 -1
  605. package/src/serve/runtime/status.ts +24 -0
  606. package/src/serve/sandbox-session.ts +19 -4
  607. package/src/serve/server.ts +18 -1
  608. package/src/serve/studio/disk-workspace.ts +76 -2
  609. package/src/serve/studio/routes.ts +63 -7
  610. package/src/serve/vite-ai-config.ts +37 -7
  611. package/src/serve/vite-module-swap.ts +0 -28
  612. package/src/serve/vite-plugin.ts +8 -8
  613. package/src/serve/vite-sandbox-generation.ts +16 -1
  614. package/src/serve/worker/client/auth.ts +1 -1
  615. package/src/serve/worker/client/core.ts +80 -3
  616. package/src/serve/worker/client/disconnect.ts +1 -1
  617. package/src/serve/worker/client/presence.ts +25 -5
  618. package/src/serve/worker/client.ts +1 -1
  619. package/src/serve/worker/context-resolver.ts +60 -0
  620. package/src/serve/worker/entry.ts +22 -18
  621. package/src/serve/worker/host/core.ts +9 -7
  622. package/src/serve/worker/host/storage.ts +2 -2
  623. package/src/serve/worker/host-ai.ts +15 -0
  624. package/src/serve/worker/host-auth.ts +1 -1
  625. package/src/serve/worker/index.ts +4 -1
  626. package/src/serve/worker/port-lifecycle.ts +45 -0
  627. package/src/serve/worker/protocol.ts +2 -1
  628. package/src/serve/worker/serve-init.ts +14 -3
  629. package/src/verify/fixture.ts +1 -1
  630. package/README.md.orig +0 -145
  631. package/dist/cli/dev-runner.d.ts.map +0 -1
  632. package/dist/cli/dev-runner.js.map +0 -1
  633. package/dist/serve/site-ui/_astro/_slug_.CXh9yTP1.css +0 -1
  634. package/dist/serve/site-ui/_astro/_slug_.CupVK4TM.css +0 -1
  635. package/dist/serve/site-ui/_astro/_studio_.CfxiQWkk.css +0 -1
  636. package/dist/serve/site-ui/_astro/app.BsFsMjn0.css +0 -1
  637. package/dist/serve/site-ui/_astro/app.Ce3MTLQm.js +0 -1
  638. package/dist/serve/site-ui/_astro/app.taqzyjD0.js +0 -11
  639. package/dist/serve/site-ui/_astro/sandbox-controls.BP4M5f1M.js +0 -1169
  640. package/dist/serve/site-ui/_astro/writes.C57paAj2.js +0 -99
  641. package/dist/serve/site-ui/docs/trust/storage-rules-stdlib-research/index.html +0 -582
  642. package/dist/serve/site-ui/docs/trust/storage-rules-stdlib-research.md +0 -448
@@ -0,0 +1,100 @@
1
+ import * as ipAuth from 'pyric/auth';
2
+ import * as wcRaw from '../worker/client.js';
3
+ import { acceptProviderCredential, restorePortSession } from '../worker/client.js';
4
+ import {
5
+ projectRuntimeIdentity,
6
+ type RuntimeIdentity,
7
+ } from '../runtime/identity.js';
8
+ import { createActiveAuthRegistry } from './active-auth-registry.js';
9
+ import { useWorker } from './worker-runtime.js';
10
+
11
+ const wc = wcRaw as unknown as typeof ipAuth;
12
+ const selectedAuth = useWorker ? wc : ipAuth;
13
+ type ActiveAuth = { currentUser: RuntimeIdentity | null };
14
+ const observeActiveAuth = selectedAuth.onAuthStateChanged as unknown as (
15
+ auth: ActiveAuth,
16
+ listener: (user: RuntimeIdentity | null) => void,
17
+ ) => () => void;
18
+ const activeAuthRegistry = createActiveAuthRegistry<ActiveAuth>(observeActiveAuth);
19
+
20
+ export function registerActiveAuth(auth: ActiveAuth): () => void {
21
+ return activeAuthRegistry.register(auth);
22
+ }
23
+
24
+ export function subscribeToActiveAuth(
25
+ listener: (user: RuntimeIdentity | null) => void,
26
+ ): () => void {
27
+ return activeAuthRegistry.subscribe(listener);
28
+ }
29
+
30
+ export function getActiveAuthUser(): RuntimeIdentity | null {
31
+ for (const auth of activeAuthRegistry.auths()) {
32
+ if (auth.currentUser) {
33
+ return projectRuntimeIdentity(auth.currentUser);
34
+ }
35
+ }
36
+ return null;
37
+ }
38
+
39
+ export async function switchAllAuthUsers(uid: string): Promise<void> {
40
+ const promises: Promise<unknown>[] = [];
41
+ for (const auth of activeAuthRegistry.auths()) {
42
+ if (useWorker) {
43
+ promises.push(restorePortSession(auth as never, uid));
44
+ } else {
45
+ try {
46
+ ipAuth.sandbox.restoreSession(auth as never, uid);
47
+ } catch {
48
+ // A stale handle or unavailable identity must not block other handles.
49
+ }
50
+ }
51
+ }
52
+ await Promise.all(promises);
53
+ }
54
+
55
+ export async function signOutAllAuths(): Promise<void> {
56
+ const promises: Promise<unknown>[] = [];
57
+ for (const auth of activeAuthRegistry.auths()) {
58
+ if (useWorker) {
59
+ promises.push(wc.signOut(auth as never));
60
+ } else {
61
+ promises.push(ipAuth.signOut(auth as never));
62
+ }
63
+ }
64
+ await Promise.all(promises);
65
+ }
66
+
67
+ export async function commitCredentialToAllAuths(identity: {
68
+ uid: string;
69
+ email?: string | null;
70
+ displayName?: string | null;
71
+ customClaims?: Record<string, unknown>;
72
+ providerId?: string;
73
+ }): Promise<void> {
74
+ const promises: Promise<unknown>[] = [];
75
+ for (const auth of activeAuthRegistry.auths()) {
76
+ if (useWorker) {
77
+ promises.push(acceptProviderCredential(auth as never, {
78
+ uid: identity.uid,
79
+ email: identity.email ?? null,
80
+ displayName: identity.displayName ?? null,
81
+ customClaims: identity.customClaims ?? {},
82
+ providerId: identity.providerId ?? 'password',
83
+ }));
84
+ } else {
85
+ try {
86
+ ipAuth.sandbox.seedUsers(auth as never, [{
87
+ uid: identity.uid,
88
+ email: identity.email ?? '',
89
+ password: 'synthetic-password',
90
+ displayName: identity.displayName ?? undefined,
91
+ customClaims: identity.customClaims ?? {},
92
+ providerId: identity.providerId ?? 'password',
93
+ }]);
94
+ } catch {
95
+ // A stale handle or duplicate seed must not block other handles.
96
+ }
97
+ }
98
+ }
99
+ await Promise.all(promises);
100
+ }
@@ -105,6 +105,16 @@ function toEngineWire(engine: EngineOption | undefined): AiEngineConfigWire | un
105
105
  ...(openai.modelMap !== undefined ? { modelMap: openai.modelMap } : {}),
106
106
  };
107
107
  }
108
+ if (config.kind === 'gemini') {
109
+ const gemini = config as Extract<EngineOption, { kind: 'gemini' }>;
110
+ const hasBaseUrl = gemini.baseUrl !== undefined;
111
+ const hasApiKey = gemini.apiKey !== undefined;
112
+ return {
113
+ kind: 'gemini',
114
+ ...(hasBaseUrl ? { baseUrl: gemini.baseUrl } : {}),
115
+ ...(hasApiKey ? { apiKey: gemini.apiKey } : {}),
116
+ };
117
+ }
108
118
  const scripted = config as Extract<EngineOption, { kind: 'scripted' }>;
109
119
  return {
110
120
  kind: 'scripted',
@@ -139,6 +149,21 @@ function wireToEngineOption(wire: AiEngineConfigWire): EngineOption {
139
149
  ...(wire.modelMap !== undefined ? { modelMap: wire.modelMap } : {}),
140
150
  } as EngineOption;
141
151
  }
152
+ const isGeminiWire = wire.kind === 'gemini';
153
+ if (isGeminiWire) {
154
+ const result: Record<string, unknown> = {
155
+ kind: 'gemini',
156
+ };
157
+ const hasBaseUrl = wire.baseUrl !== undefined;
158
+ if (hasBaseUrl) {
159
+ result.baseUrl = wire.baseUrl;
160
+ }
161
+ const hasApiKey = wire.apiKey !== undefined;
162
+ if (hasApiKey) {
163
+ result.apiKey = wire.apiKey;
164
+ }
165
+ return result as unknown as EngineOption;
166
+ }
142
167
  return {
143
168
  kind: 'scripted',
144
169
  ...(wire.script !== undefined
@@ -274,10 +299,11 @@ export const getAI = (
274
299
  "Use a structured { kind: 'scripted' } or { kind: 'openai' } engine config.",
275
300
  );
276
301
  }
302
+ const wire = toEngineWire(engine) ?? pluginEngineWire();
277
303
  return createTransportAI(
278
304
  resolved,
279
305
  options,
280
- portEngine(workerClientForApp(resolved), toEngineWire(engine)),
306
+ portEngine(workerClientForApp(resolved), wire),
281
307
  assertAlive,
282
308
  );
283
309
  }
@@ -86,6 +86,11 @@ export class ServeAuthHelper {
86
86
  return { openPopup: open, openRedirect: open };
87
87
  }
88
88
 
89
+ promptCreateUser(providerId = 'password'): Promise<UserCredential> {
90
+ const open = this.resolver().openPopup;
91
+ return open({ providerId, authType: 'signIn' });
92
+ }
93
+
89
94
  subscribe(fn: () => void): () => void {
90
95
  this.listeners.add(fn);
91
96
  return () => this.listeners.delete(fn);
@@ -19,8 +19,24 @@ const PROVIDER_LABEL: Record<string, string> = {
19
19
  };
20
20
 
21
21
  const STYLE = `
22
- dialog[data-pyric-auth] { border: 1px solid #2a2a35; border-radius: 12px; background: #16161d;
23
- color: #e8e8ee; font: 14px/1.45 system-ui, sans-serif; padding: 20px; width: min(420px, 92vw); }
22
+ dialog[data-pyric-auth] {
23
+ position: fixed;
24
+ top: 50%;
25
+ left: 50%;
26
+ transform: translate(-50%, -50%);
27
+ margin: 0;
28
+ width: min(420px, 92vw);
29
+ max-height: 90vh;
30
+ overflow-y: auto;
31
+ border: 1px solid #2a2a35;
32
+ border-radius: 12px;
33
+ background: #16161d;
34
+ color: #e8e8ee;
35
+ font: 14px/1.45 system-ui, sans-serif;
36
+ padding: 20px;
37
+ box-shadow: 0 20px 60px rgba(0, 0, 0, 0.6);
38
+ z-index: 2147483647;
39
+ }
24
40
  dialog[data-pyric-auth]::backdrop { background: rgb(0 0 0 / 0.6); }
25
41
  dialog[data-pyric-auth] h2 { margin: 0 0 4px; font-size: 16px; }
26
42
  dialog[data-pyric-auth] p { margin: 0 0 14px; font-size: 12px; color: #9a9aa8; }
@@ -61,13 +77,18 @@ export function mountAuthHelperDialog(helper: ServeAuthHelper): void {
61
77
  return;
62
78
  }
63
79
  const provider = PROVIDER_LABEL[snap.request.providerId] ?? snap.request.providerId;
80
+ const existingForm = dialog.querySelector('form');
81
+ const savedEmail = existingForm?.querySelector<HTMLInputElement>('input[type="email"]')?.value;
82
+ const savedName = existingForm?.querySelector<HTMLInputElement>('input[type="text"]')?.value;
83
+ const savedClaims = existingForm?.querySelector<HTMLTextAreaElement>('textarea')?.value;
84
+
64
85
  dialog.replaceChildren();
65
86
 
66
87
  const h2 = document.createElement('h2');
67
88
  h2.textContent = `Sign in with ${provider}`;
68
89
  const p = document.createElement('p');
69
90
  p.textContent =
70
- 'pyric dev sign-in helper pick a test account or add one. Custom claims let rules using request.auth.token.* run against this identity.';
91
+ 'pyric sandbox sign-in helper. Pick a test account or add one. Custom claims let rules using request.auth.token.* run against this identity.';
71
92
  dialog.append(h2, p);
72
93
 
73
94
  if (snap.identities.length > 0) {
@@ -90,12 +111,15 @@ export function mountAuthHelperDialog(helper: ServeAuthHelper): void {
90
111
  email.type = 'email';
91
112
  email.placeholder = 'email@example.com';
92
113
  email.required = true;
114
+ if (savedEmail) email.value = savedEmail;
93
115
  const name = document.createElement('input');
94
116
  name.type = 'text';
95
117
  name.placeholder = 'Display name (optional)';
118
+ if (savedName) name.value = savedName;
96
119
  const claims = document.createElement('textarea');
97
120
  claims.rows = 3;
98
121
  claims.placeholder = 'Custom claims JSON (optional)\ne.g. { "admin": true }';
122
+ if (savedClaims) claims.value = savedClaims;
99
123
  const err = document.createElement('div');
100
124
  err.className = 'err';
101
125
  const row = document.createElement('div');
@@ -13,7 +13,7 @@ export function resolveServeAuthFlow(
13
13
  ): Promise<UserCredential> {
14
14
  if (!resolver) {
15
15
  return Promise.reject(
16
- new Error('pyric dev provider helper is not initialized; load /__pyric/sdk/init.js first'),
16
+ new Error('pyric sandbox provider helper is not initialized; load /__pyric/sdk/init.js first'),
17
17
  );
18
18
  }
19
19
  return kind === 'popup' ? resolver.openPopup(request) : resolver.openRedirect(request);
@@ -24,7 +24,9 @@ import { customClaimsFromTokenClaims } from './auth-helper-core.js';
24
24
  import { resolveServeAuthFlow } from './auth-helper-runtime.js';
25
25
  import type { SessionMode } from './session-store.js';
26
26
  import { getApp, type FirebaseApp } from 'pyric/app';
27
+ import { registerAppCleanup } from 'pyric/app/internal';
27
28
  import { workerClientForApp } from './app-client.js';
29
+ import { registerActiveAuth } from './active-auth.js';
28
30
 
29
31
  // Worker-client auth, cast to the canonical pyric/auth surface for the picked
30
32
  // bindings (same names + shapes). Provider-bridge specifics are explicit below.
@@ -101,6 +103,8 @@ export const getAuth = ((app?: FirebaseApp) => {
101
103
  if (!useWorker) {
102
104
  const handle = pyricGetAuth(resolved);
103
105
  wireAppPersistence(resolved, handle);
106
+ const releaseActiveAuth = registerActiveAuth(handle);
107
+ registerAppCleanup(resolved, releaseActiveAuth);
104
108
  return handle;
105
109
  }
106
110
  const existing = workerAuthByApp.get(resolved);
@@ -111,6 +115,10 @@ export const getAuth = ((app?: FirebaseApp) => {
111
115
  }) as unknown as ReturnType<typeof pyricGetAuth>;
112
116
  workerAuthByApp.set(resolved, handle);
113
117
  wireAppPersistence(resolved, handle);
118
+ const releaseActiveAuth = registerActiveAuth(handle);
119
+ // Match Firebase's cached-service lifecycle: getAuth(deletedApp) still
120
+ // returns its existing handle, but that handle no longer joins chip fan-out.
121
+ registerAppCleanup(resolved, releaseActiveAuth);
114
122
  return handle;
115
123
  }) as typeof pyricGetAuth;
116
124
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Re-anchor a bridge WebSocket URL to the page's own origin.
3
3
  *
4
- * `pyric dev` / the vite plugin bake their OWN host into the bridge URL it
4
+ * `pyric sandbox` / the vite plugin bake their OWN host into the bridge URL it
5
5
  * sends the page (e.g. `ws://localhost:5173/__pyric/sandbox`). But the page may
6
6
  * have been loaded over a different host (Tailscale, a LAN IP) or scheme
7
7
  * (`https` via `tailscale serve`, which then requires `wss`). Connecting to the
@@ -103,8 +103,8 @@ function acceptedNoOp(name: string): void {
103
103
  if (cacheNoticeShown) return;
104
104
  cacheNoticeShown = true;
105
105
  console.info(
106
- `[pyric dev] ${name}(): client cache/persistence settings are accepted but unused ` +
107
- 'the pyric sandbox is the source of truth. Durable state is the worker store / `pyric dev --persist`.',
106
+ `[pyric sandbox] ${name}(): client cache and persistence settings are accepted but unused. ` +
107
+ 'The Pyric sandbox is the source of truth. Durable state is the worker store or `pyric sandbox --persist`.',
108
108
  );
109
109
  }
110
110
 
@@ -184,7 +184,7 @@ export async function enableNetwork(_db?: unknown): Promise<void> {
184
184
  export async function terminate(db?: unknown): Promise<void> {
185
185
  if (useWorker) {
186
186
  console.info(
187
- '[pyric dev] terminate(): the SharedWorker-hosted sandbox is shared across every tab; ' +
187
+ '[pyric sandbox] terminate(): the SharedWorker-hosted sandbox is shared across every tab; ' +
188
188
  'it is not torn down by a single tab calling terminate().',
189
189
  );
190
190
  return;
@@ -5,21 +5,36 @@
5
5
  * only; in fallback mode it mints credentials via `createSignInCredential`
6
6
  * so OAuth users carry real provider metadata.
7
7
  */
8
- import { getAuth, sandbox as authSandbox } from 'pyric/auth';
8
+ import {
9
+ getAuth,
10
+ sandbox as authSandbox,
11
+ } from 'pyric/auth';
9
12
  import {
10
13
  getAuth as getWorkerAuth,
11
14
  listUsers,
15
+ setLens,
12
16
  } from '../worker/client.js';
17
+ import {
18
+ switchAllAuthUsers,
19
+ signOutAllAuths,
20
+ commitCredentialToAllAuths,
21
+ getActiveAuthUser,
22
+ subscribeToActiveAuth,
23
+ registerActiveAuth,
24
+ } from './active-auth.js';
13
25
  import { sandbox } from './runtime.js';
14
26
  import { useWorker, workerDb } from './worker-runtime.js';
15
- import { ServeAuthHelper } from './auth-helper-core.js';
27
+ import { ServeAuthHelper, customClaimsFromTokenClaims } from './auth-helper-core.js';
16
28
  import { installServeAuthResolver } from './auth-helper-runtime.js';
17
29
  import { mountAuthHelperDialog } from './auth-helper-dom.js';
18
30
  import { installPyricRuntimeChip } from '../runtime/chip-install.js';
19
31
  import { getPyricRuntimeStatus } from '../runtime/status.js';
32
+ import { projectRuntimeIdentity } from '../runtime/identity.js';
20
33
 
21
34
  const localAuth = useWorker ? null : getAuth(sandbox);
22
35
  const workerAuth = useWorker && workerDb ? getWorkerAuth(workerDb) : null;
36
+ if (workerAuth) registerActiveAuth(workerAuth);
37
+ if (localAuth) registerActiveAuth(localAuth);
23
38
  const helper = workerAuth
24
39
  ? new ServeAuthHelper({
25
40
  list: async () => (await listUsers(workerAuth)).map((user) => ({
@@ -56,7 +71,67 @@ if (localAuth) authSandbox.setAuthFlowResolver(localAuth, resolver);
56
71
 
57
72
  if (typeof document !== 'undefined' && typeof window !== 'undefined') {
58
73
  mountAuthHelperDialog(helper);
59
- installPyricRuntimeChip({ runtime: getPyricRuntimeStatus(), document });
74
+ installPyricRuntimeChip({
75
+ runtime: getPyricRuntimeStatus(),
76
+ document,
77
+ identity: {
78
+ listUsers: async () => {
79
+ if (workerAuth) {
80
+ return listUsers(workerAuth);
81
+ }
82
+ if (localAuth) {
83
+ return authSandbox.listUsers(localAuth);
84
+ }
85
+ return [];
86
+ },
87
+ switchUser: async (uid: string) => {
88
+ await switchAllAuthUsers(uid);
89
+ setLens(undefined);
90
+ },
91
+ signOut: async () => {
92
+ await signOutAllAuths();
93
+ setLens(undefined);
94
+ },
95
+ openCreateUser: async () => {
96
+ try {
97
+ const cred = await helper.promptCreateUser('password');
98
+ const tokenResult = await cred.user.getIdTokenResult();
99
+ const customClaims = customClaimsFromTokenClaims(
100
+ (tokenResult.claims ?? {}) as Record<string, unknown>,
101
+ );
102
+ const identity = {
103
+ uid: cred.user.uid,
104
+ email: cred.user.email,
105
+ displayName: cred.user.displayName,
106
+ customClaims,
107
+ providerId: 'password',
108
+ };
109
+ await commitCredentialToAllAuths(identity);
110
+ await switchAllAuthUsers(identity.uid);
111
+ setLens(undefined);
112
+ } catch (err) {
113
+ console.error('[pyric] openCreateUser error:', err);
114
+ }
115
+ },
116
+ getCurrentUser: () => {
117
+ const active = getActiveAuthUser();
118
+ if (active) return active;
119
+ if (workerAuth?.currentUser) {
120
+ return projectRuntimeIdentity(workerAuth.currentUser);
121
+ }
122
+ if (localAuth?.currentUser) {
123
+ return projectRuntimeIdentity(localAuth.currentUser);
124
+ }
125
+ return null;
126
+ },
127
+ subscribeAuth: (listener) => {
128
+ const unsubActive = subscribeToActiveAuth((user) => {
129
+ listener(projectRuntimeIdentity(user));
130
+ });
131
+ return unsubActive;
132
+ },
133
+ },
134
+ });
60
135
  }
61
136
 
62
137
  export {};
@@ -27,7 +27,7 @@ export function keepaliveSafe(
27
27
  if (!warnedLargeState) {
28
28
  warnedLargeState = true;
29
29
  warn(
30
- `[pyric dev] persisted state is ${Math.round(bytes / 1024)}KB too large for an ` +
30
+ `[pyric sandbox] persisted state is ${Math.round(bytes / 1024)}KB. It is too large for an ` +
31
31
  'unload-time flush; the final unsaved change may be lost if you CLOSE the tab before ' +
32
32
  'the next auto-flush. Reloads and normal saves are unaffected.',
33
33
  );
@@ -34,6 +34,7 @@ import { toPageOriginWsUrl } from './bridge-url.js';
34
34
  import { buildVerifyFixture } from '../../verify/fixture.js';
35
35
  import type { InitPayload } from '../init-payload.js';
36
36
  import { setupFirebaseActivityGuard } from '../activity-guard.js';
37
+ import { setupAiDiagnosticsRelay } from '../ai-diagnostics-relay.js';
37
38
  import { getPyricRuntimeStatus } from '../runtime/status.js';
38
39
  export { sandbox } from './app-backend.js';
39
40
  import { sandbox } from './app-backend.js';
@@ -140,10 +141,15 @@ if (!useWorker) try {
140
141
  diagnostics.rulesDeployed = true;
141
142
  diagnostics.rulesHash = payload.rulesHash;
142
143
  }
144
+ const db = getDatabase(sandbox);
143
145
  if (payload.databaseRules) {
144
- rtdbSandbox.setRules(getDatabase(sandbox), payload.databaseRules);
146
+ rtdbSandbox.setRules(db, payload.databaseRules);
145
147
  diagnostics.databaseRulesDeployed = true;
146
148
  diagnostics.databaseRulesHash = payload.databaseRulesHash ?? null;
149
+ } else if (payload.permissive) {
150
+ rtdbSandbox.setDefaultPolicy(db, 'allow');
151
+ } else {
152
+ rtdbSandbox.setDefaultPolicy(db, 'deny');
147
153
  }
148
154
  // Open the ONE per-sandbox storage service eagerly: the FIRST open wins the
149
155
  // rules AND the project-scoped IDB name (`pyric-storage:<projectKey>`,
@@ -212,7 +218,7 @@ if (!useWorker) try {
212
218
  readOnly = true;
213
219
  diagnostics.persistReadOnly = true;
214
220
  console.warn(
215
- '[pyric dev] another tab is the persist writer THIS tab is read-only ' +
221
+ '[pyric sandbox] another tab is the persist writer. This tab is read-only ' +
216
222
  '(your changes here will NOT be saved). Close the other tab and reload to take over.',
217
223
  );
218
224
  };
@@ -288,7 +294,7 @@ if (!useWorker) try {
288
294
  if (res.status === 423) lostWriterLock();
289
295
  else if (res.ok) diagnostics.lastFlushAt = Date.now();
290
296
  },
291
- (e) => console.warn('[pyric dev] auth state flush failed:', e),
297
+ (e) => console.warn('[pyric sandbox] auth state flush failed:', e),
292
298
  );
293
299
  }, 500);
294
300
  });
@@ -353,7 +359,7 @@ if (!useWorker) try {
353
359
  if (existing) {
354
360
  diagnostics.seedSkipped = true;
355
361
  console.info(
356
- '[pyric dev] --seed skipped: the sandbox already has restored data the fixture would ' +
362
+ '[pyric sandbox] --seed skipped because the sandbox already has restored data. The fixture would ' +
357
363
  'have overwritten it. Use `--persist --fresh` to discard existing state and re-seed.',
358
364
  );
359
365
  } else {
@@ -367,7 +373,7 @@ if (!useWorker) try {
367
373
  diagnostics.initError = e instanceof Error ? e.message : String(e);
368
374
  runtimeStatus.reportError(e, 'runtime');
369
375
  console.error(
370
- '[pyric dev] init failed the sandbox is running WITHOUT your project rules:',
376
+ '[pyric sandbox] init failed. The sandbox is running without your project rules:',
371
377
  diagnostics.initError,
372
378
  );
373
379
  }
@@ -386,11 +392,20 @@ if (!useWorker && activityTokenFromPayload) {
386
392
  );
387
393
  }
388
394
 
395
+ // Same plane split for the AI broker's diagnostics: an in-page sandbox runs
396
+ // its own broker, so its `request_rejected`, `response_blocked`, and
397
+ // `model_substituted` events need the same relay to reach the dev terminal.
398
+ // Unlike the activity guard this needs no capability token (the denial relay
399
+ // it rides carries none).
400
+ if (!useWorker) {
401
+ setupAiDiagnosticsRelay({ subscribe: (listener) => sandbox.onEvent(listener) }, fetch);
402
+ }
403
+
389
404
  // ── provenance (flow doc section 3a): make the shim's presence unmistakable.
390
405
  // Source says `firebase/*`; what runs is the pyric sandbox — say so loudly
391
406
  // once, and explain any stack frame that points into /__pyric/sdk/. ────────
392
407
  console.info(
393
- `[pyric dev] firebase/* on this page is served by the pyric sandbox` +
408
+ `[pyric sandbox] firebase/* on this page is served by the Pyric sandbox` +
394
409
  (useWorker
395
410
  ? ' in a SharedWorker (one backend for all tabs; rules/seed/persist owned by the worker)'
396
411
  : diagnostics.rulesHash || diagnostics.databaseRulesHash || diagnostics.storageRulesHash
@@ -405,7 +420,7 @@ function explainSandboxFrame(stackOrUrl: string | undefined): boolean {
405
420
  if (!provenanceHintShown) {
406
421
  provenanceHintShown = true;
407
422
  console.info(
408
- '[pyric dev] the error above originates in the pyric sandbox shim serving firebase/*, ' +
423
+ '[pyric sandbox] the error above originates in the Pyric sandbox shim serving firebase/*, ' +
409
424
  'not the real Firebase SDK — behavior can differ where COMPAT coverage is incomplete.',
410
425
  );
411
426
  }
@@ -452,7 +467,7 @@ async function connectBridgePeer(rawUrl: string): Promise<void> {
452
467
  connectBridge(sandbox, { url });
453
468
  }
454
469
  diagnostics.bridgeConnected = true;
455
- console.info('[pyric dev] sandbox registered with the MCP bridge at', url);
470
+ console.info('[pyric sandbox] sandbox registered with the MCP bridge at', url);
456
471
  }
457
472
  if (bridgeUrlFromPayload) {
458
473
  // In-page path: bridgeUrlFromPayload came from the (already-blocking) init
@@ -461,7 +476,7 @@ if (bridgeUrlFromPayload) {
461
476
  await connectBridgePeer(bridgeUrlFromPayload);
462
477
  } catch (e) {
463
478
  runtimeStatus.reportError(e, 'runtime');
464
- console.error('[pyric dev] bridge connect failed:', e instanceof Error ? e.message : String(e));
479
+ console.error('[pyric sandbox] bridge connect failed:', e instanceof Error ? e.message : String(e));
465
480
  }
466
481
  } else if (useWorker) {
467
482
  // Worker path: the worker owns serve-init, so the page skipped the init.json
@@ -476,7 +491,7 @@ if (bridgeUrlFromPayload) {
476
491
  if (url) await connectBridgePeer(url);
477
492
  } catch (e) {
478
493
  runtimeStatus.reportError(e, 'runtime');
479
- console.error('[pyric dev] bridge connect failed:', e instanceof Error ? e.message : String(e));
494
+ console.error('[pyric sandbox] bridge connect failed:', e instanceof Error ? e.message : String(e));
480
495
  }
481
496
  })();
482
497
  }
@@ -547,10 +562,10 @@ if (!useWorker && typeof EventSource !== 'undefined') {
547
562
  if (lint.parseError) throw new Error(JSON.stringify(lint.parseError));
548
563
  diagnostics.rulesDeployed = true;
549
564
  diagnostics.rulesHash = rulesHash;
550
- console.info(`[pyric dev] firestore.rules hot-reloaded (hash ${rulesHash})`);
565
+ console.info(`[pyric sandbox] firestore.rules hot-reloaded (hash ${rulesHash})`);
551
566
  } catch (err) {
552
567
  runtimeStatus.reportError(err, 'runtime');
553
- console.error('[pyric dev] rules hot-reload failed:', err instanceof Error ? err.message : String(err));
568
+ console.error('[pyric sandbox] rules hot-reload failed:', err instanceof Error ? err.message : String(err));
554
569
  }
555
570
  });
556
571
  events.addEventListener('rtdb-rules-update', (e) => {
@@ -567,7 +582,7 @@ if (!useWorker && typeof EventSource !== 'undefined') {
567
582
  newHash = rulesHash;
568
583
  }
569
584
  diagnostics.databaseRulesHash = newHash;
570
- console.info(`[pyric dev] database.rules.json hot-reloaded (hash ${rulesHash})`);
585
+ console.info(`[pyric sandbox] database.rules.json hot-reloaded (hash ${rulesHash})`);
571
586
  } catch (err) {
572
587
  runtimeStatus.reportError(err, 'runtime');
573
588
  const isErrorInstance = err instanceof Error;
@@ -575,7 +590,7 @@ if (!useWorker && typeof EventSource !== 'undefined') {
575
590
  if (isErrorInstance) {
576
591
  errorMessage = (err as Error).message;
577
592
  }
578
- console.error('[pyric dev] database rules hot-reload failed:', errorMessage);
593
+ console.error('[pyric sandbox] database rules hot-reload failed:', errorMessage);
579
594
  }
580
595
  });
581
596
  }
@@ -66,7 +66,7 @@ export function connectStorageEmulator(
66
66
  _options?: unknown,
67
67
  ): void {
68
68
  console.info(
69
- '[pyric dev] pyric replaces the Firebase emulator; connectStorageEmulator is a no-op.',
69
+ '[pyric sandbox] Pyric replaces the Firebase emulator; connectStorageEmulator is a no-op.',
70
70
  );
71
71
  if (!useWorker) ip.connectStorageEmulator(storage as FirebaseStorage, _host, _port, _options as never);
72
72
  }
@@ -125,7 +125,7 @@ if (useWorker && typeof document !== 'undefined') {
125
125
  ? ' This is the only connected page — reload it to pick up the new worker.'
126
126
  : '';
127
127
  console.warn(
128
- `[pyric dev] the SharedWorker is running OLDER code (build ${runningVersion}) than what is now `
128
+ `[pyric sandbox] the SharedWorker is running older code (build ${runningVersion}) than what is now `
129
129
  + `served (build ${servedVersion}). A SharedWorker can't hot-update — CLOSE ALL TABS of this origin `
130
130
  + 'and reopen to load the new worker. (All tabs share one worker, so a partial reload leaves '
131
131
  + `the old code running for everyone.)${othersHint}`,
@@ -4,11 +4,15 @@ import type { AiEngineConfigWire } from './worker/protocol.js';
4
4
  export interface InitPayload {
5
5
  /** Per-server capability for the warning-only activity report endpoint. */
6
6
  activityToken?: string;
7
+ /** Per-boot session capability token required on workspace and project endpoints. */
8
+ sessionToken?: string;
7
9
  rules: string | null;
8
10
  rulesHash: string | null;
9
11
  databaseRules?: { rules: Record<string, unknown> } | null;
10
12
  databaseRulesHash?: string | null;
11
13
  databaseUrl?: string | null;
14
+ /** Explicit opt-in to permissive default access when rules are unconfigured. */
15
+ permissive?: boolean;
12
16
  /** Storage rules are installed once, before the first Storage operation. */
13
17
  storageRules: string | null;
14
18
  storageRulesHash: string | null;