@pyric/cli 0.1.0-alpha.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (903) hide show
  1. package/LICENSE +216 -0
  2. package/README.md +180 -0
  3. package/README.md.orig +141 -0
  4. package/dist/assurance/.generated/conformance-verdicts.d.ts +1071 -0
  5. package/dist/assurance/.generated/conformance-verdicts.d.ts.map +1 -0
  6. package/dist/assurance/.generated/conformance-verdicts.js +1070 -0
  7. package/dist/assurance/.generated/conformance-verdicts.js.map +1 -0
  8. package/dist/assurance/attachment.d.ts +24 -0
  9. package/dist/assurance/attachment.d.ts.map +1 -0
  10. package/dist/assurance/attachment.js +138 -0
  11. package/dist/assurance/attachment.js.map +1 -0
  12. package/dist/assurance/browser.d.ts +7 -0
  13. package/dist/assurance/browser.d.ts.map +1 -0
  14. package/dist/assurance/browser.js +68 -0
  15. package/dist/assurance/browser.js.map +1 -0
  16. package/dist/assurance/campaign.d.ts +41 -0
  17. package/dist/assurance/campaign.d.ts.map +1 -0
  18. package/dist/assurance/campaign.js +364 -0
  19. package/dist/assurance/campaign.js.map +1 -0
  20. package/dist/assurance/capabilities.d.ts +11 -0
  21. package/dist/assurance/capabilities.d.ts.map +1 -0
  22. package/dist/assurance/capabilities.js +282 -0
  23. package/dist/assurance/capabilities.js.map +1 -0
  24. package/dist/assurance/cases.d.ts +14 -0
  25. package/dist/assurance/cases.d.ts.map +1 -0
  26. package/dist/assurance/cases.js +27 -0
  27. package/dist/assurance/cases.js.map +1 -0
  28. package/dist/assurance/index.d.ts +10 -0
  29. package/dist/assurance/index.d.ts.map +1 -0
  30. package/dist/assurance/index.js +9 -0
  31. package/dist/assurance/index.js.map +1 -0
  32. package/dist/assurance/runner.d.ts +3 -0
  33. package/dist/assurance/runner.d.ts.map +1 -0
  34. package/dist/assurance/runner.js +633 -0
  35. package/dist/assurance/runner.js.map +1 -0
  36. package/dist/assurance/tool-names.d.ts +4 -0
  37. package/dist/assurance/tool-names.d.ts.map +1 -0
  38. package/dist/assurance/tool-names.js +14 -0
  39. package/dist/assurance/tool-names.js.map +1 -0
  40. package/dist/assurance/tools.d.ts +19 -0
  41. package/dist/assurance/tools.d.ts.map +1 -0
  42. package/dist/assurance/tools.js +737 -0
  43. package/dist/assurance/tools.js.map +1 -0
  44. package/dist/assurance/types.d.ts +347 -0
  45. package/dist/assurance/types.d.ts.map +1 -0
  46. package/dist/assurance/types.js +7 -0
  47. package/dist/assurance/types.js.map +1 -0
  48. package/dist/assurance/validation.d.ts +8 -0
  49. package/dist/assurance/validation.d.ts.map +1 -0
  50. package/dist/assurance/validation.js +269 -0
  51. package/dist/assurance/validation.js.map +1 -0
  52. package/dist/bridge/client/bridge.d.ts +133 -0
  53. package/dist/bridge/client/bridge.d.ts.map +1 -0
  54. package/dist/bridge/client/bridge.js +429 -0
  55. package/dist/bridge/client/bridge.js.map +1 -0
  56. package/dist/bridge/client/dispatch.d.ts +41 -0
  57. package/dist/bridge/client/dispatch.d.ts.map +1 -0
  58. package/dist/bridge/client/dispatch.js +111 -0
  59. package/dist/bridge/client/dispatch.js.map +1 -0
  60. package/dist/bridge/client.d.ts +24 -0
  61. package/dist/bridge/client.d.ts.map +1 -0
  62. package/dist/bridge/client.js +26 -0
  63. package/dist/bridge/client.js.map +1 -0
  64. package/dist/bridge/protocol.d.ts +227 -0
  65. package/dist/bridge/protocol.d.ts.map +1 -0
  66. package/dist/bridge/protocol.js +131 -0
  67. package/dist/bridge/protocol.js.map +1 -0
  68. package/dist/bridge/server/audit.d.ts +19 -0
  69. package/dist/bridge/server/audit.d.ts.map +1 -0
  70. package/dist/bridge/server/audit.js +46 -0
  71. package/dist/bridge/server/audit.js.map +1 -0
  72. package/dist/bridge/server/bridge.d.ts +126 -0
  73. package/dist/bridge/server/bridge.d.ts.map +1 -0
  74. package/dist/bridge/server/bridge.js +383 -0
  75. package/dist/bridge/server/bridge.js.map +1 -0
  76. package/dist/bridge/server/headless.d.ts +36 -0
  77. package/dist/bridge/server/headless.d.ts.map +1 -0
  78. package/dist/bridge/server/headless.js +142 -0
  79. package/dist/bridge/server/headless.js.map +1 -0
  80. package/dist/bridge/server/json-schema-to-zod.d.ts +37 -0
  81. package/dist/bridge/server/json-schema-to-zod.d.ts.map +1 -0
  82. package/dist/bridge/server/json-schema-to-zod.js +93 -0
  83. package/dist/bridge/server/json-schema-to-zod.js.map +1 -0
  84. package/dist/bridge/server/local-bridge.d.ts +33 -0
  85. package/dist/bridge/server/local-bridge.d.ts.map +1 -0
  86. package/dist/bridge/server/local-bridge.js +41 -0
  87. package/dist/bridge/server/local-bridge.js.map +1 -0
  88. package/dist/bridge/server/logger.d.ts +28 -0
  89. package/dist/bridge/server/logger.d.ts.map +1 -0
  90. package/dist/bridge/server/logger.js +42 -0
  91. package/dist/bridge/server/logger.js.map +1 -0
  92. package/dist/bridge/server/mcp-contract.d.ts +21 -0
  93. package/dist/bridge/server/mcp-contract.d.ts.map +1 -0
  94. package/dist/bridge/server/mcp-contract.js +63 -0
  95. package/dist/bridge/server/mcp-contract.js.map +1 -0
  96. package/dist/bridge/server/mcp.d.ts +26 -0
  97. package/dist/bridge/server/mcp.d.ts.map +1 -0
  98. package/dist/bridge/server/mcp.js +102 -0
  99. package/dist/bridge/server/mcp.js.map +1 -0
  100. package/dist/bridge/server/peer.d.ts +39 -0
  101. package/dist/bridge/server/peer.d.ts.map +1 -0
  102. package/dist/bridge/server/peer.js +189 -0
  103. package/dist/bridge/server/peer.js.map +1 -0
  104. package/dist/bridge/server/standalone.d.ts +49 -0
  105. package/dist/bridge/server/standalone.d.ts.map +1 -0
  106. package/dist/bridge/server/standalone.js +267 -0
  107. package/dist/bridge/server/standalone.js.map +1 -0
  108. package/dist/bridge/server/tool-metadata.d.ts +38 -0
  109. package/dist/bridge/server/tool-metadata.d.ts.map +1 -0
  110. package/dist/bridge/server/tool-metadata.js +84 -0
  111. package/dist/bridge/server/tool-metadata.js.map +1 -0
  112. package/dist/bridge/server.d.ts +21 -0
  113. package/dist/bridge/server.d.ts.map +1 -0
  114. package/dist/bridge/server.js +18 -0
  115. package/dist/bridge/server.js.map +1 -0
  116. package/dist/cli/can-i-use.d.ts +5 -0
  117. package/dist/cli/can-i-use.d.ts.map +1 -0
  118. package/dist/cli/can-i-use.js +49 -0
  119. package/dist/cli/can-i-use.js.map +1 -0
  120. package/dist/cli/database-rules.d.ts +43 -0
  121. package/dist/cli/database-rules.d.ts.map +1 -0
  122. package/dist/cli/database-rules.js +261 -0
  123. package/dist/cli/database-rules.js.map +1 -0
  124. package/dist/cli/dev-runner.d.ts +112 -0
  125. package/dist/cli/dev-runner.d.ts.map +1 -0
  126. package/dist/cli/dev-runner.js +239 -0
  127. package/dist/cli/dev-runner.js.map +1 -0
  128. package/dist/cli/firebase-json.d.ts +66 -0
  129. package/dist/cli/firebase-json.d.ts.map +1 -0
  130. package/dist/cli/firebase-json.js +60 -0
  131. package/dist/cli/firebase-json.js.map +1 -0
  132. package/dist/cli/firestore-indexes.d.ts +21 -0
  133. package/dist/cli/firestore-indexes.d.ts.map +1 -0
  134. package/dist/cli/firestore-indexes.js +39 -0
  135. package/dist/cli/firestore-indexes.js.map +1 -0
  136. package/dist/cli/index.d.ts +56 -0
  137. package/dist/cli/index.d.ts.map +1 -0
  138. package/dist/cli/index.js +387 -0
  139. package/dist/cli/index.js.map +1 -0
  140. package/dist/cli/init.d.ts +50 -0
  141. package/dist/cli/init.d.ts.map +1 -0
  142. package/dist/cli/init.js +182 -0
  143. package/dist/cli/init.js.map +1 -0
  144. package/dist/cli/mcp-proxy.d.ts +10 -0
  145. package/dist/cli/mcp-proxy.d.ts.map +1 -0
  146. package/dist/cli/mcp-proxy.js +129 -0
  147. package/dist/cli/mcp-proxy.js.map +1 -0
  148. package/dist/cli/parse-args.d.ts +20 -0
  149. package/dist/cli/parse-args.d.ts.map +1 -0
  150. package/dist/cli/parse-args.js +74 -0
  151. package/dist/cli/parse-args.js.map +1 -0
  152. package/dist/cli/rules.d.ts +55 -0
  153. package/dist/cli/rules.d.ts.map +1 -0
  154. package/dist/cli/rules.js +199 -0
  155. package/dist/cli/rules.js.map +1 -0
  156. package/dist/cli/scope.d.ts +12 -0
  157. package/dist/cli/scope.d.ts.map +1 -0
  158. package/dist/cli/scope.js +44 -0
  159. package/dist/cli/scope.js.map +1 -0
  160. package/dist/cli/serve.d.ts +122 -0
  161. package/dist/cli/serve.d.ts.map +1 -0
  162. package/dist/cli/serve.js +844 -0
  163. package/dist/cli/serve.js.map +1 -0
  164. package/dist/cli/service-commands.d.ts +8 -0
  165. package/dist/cli/service-commands.d.ts.map +1 -0
  166. package/dist/cli/service-commands.js +58 -0
  167. package/dist/cli/service-commands.js.map +1 -0
  168. package/dist/cli/snapshot.d.ts +22 -0
  169. package/dist/cli/snapshot.d.ts.map +1 -0
  170. package/dist/cli/snapshot.js +139 -0
  171. package/dist/cli/snapshot.js.map +1 -0
  172. package/dist/cli/storage-rules.d.ts +21 -0
  173. package/dist/cli/storage-rules.d.ts.map +1 -0
  174. package/dist/cli/storage-rules.js +121 -0
  175. package/dist/cli/storage-rules.js.map +1 -0
  176. package/dist/cli/verify.d.ts +23 -0
  177. package/dist/cli/verify.d.ts.map +1 -0
  178. package/dist/cli/verify.js +349 -0
  179. package/dist/cli/verify.js.map +1 -0
  180. package/dist/conformance/.generated/can-i-use-browser.d.ts +44 -0
  181. package/dist/conformance/.generated/can-i-use-browser.d.ts.map +1 -0
  182. package/dist/conformance/.generated/can-i-use-browser.js +67 -0
  183. package/dist/conformance/.generated/can-i-use-browser.js.map +1 -0
  184. package/dist/conformance/.generated/can-i-use.d.ts +61 -0
  185. package/dist/conformance/.generated/can-i-use.d.ts.map +1 -0
  186. package/dist/conformance/.generated/can-i-use.js +68 -0
  187. package/dist/conformance/.generated/can-i-use.js.map +1 -0
  188. package/dist/conformance/browser.d.ts +7 -0
  189. package/dist/conformance/browser.d.ts.map +1 -0
  190. package/dist/conformance/browser.js +8 -0
  191. package/dist/conformance/browser.js.map +1 -0
  192. package/dist/conformance/can-i-use-tool.d.ts +21 -0
  193. package/dist/conformance/can-i-use-tool.d.ts.map +1 -0
  194. package/dist/conformance/can-i-use-tool.js +40 -0
  195. package/dist/conformance/can-i-use-tool.js.map +1 -0
  196. package/dist/conformance/can-i-use.d.ts +6 -0
  197. package/dist/conformance/can-i-use.d.ts.map +1 -0
  198. package/dist/conformance/can-i-use.js +10 -0
  199. package/dist/conformance/can-i-use.js.map +1 -0
  200. package/dist/conformance/index.d.ts +8 -0
  201. package/dist/conformance/index.d.ts.map +1 -0
  202. package/dist/conformance/index.js +2 -0
  203. package/dist/conformance/index.js.map +1 -0
  204. package/dist/conformance/tools.d.ts +4 -0
  205. package/dist/conformance/tools.d.ts.map +1 -0
  206. package/dist/conformance/tools.js +14 -0
  207. package/dist/conformance/tools.js.map +1 -0
  208. package/dist/credentials/core/memoize-ttl.d.ts +58 -0
  209. package/dist/credentials/core/memoize-ttl.d.ts.map +1 -0
  210. package/dist/credentials/core/memoize-ttl.js +88 -0
  211. package/dist/credentials/core/memoize-ttl.js.map +1 -0
  212. package/dist/credentials/core/types.d.ts +11 -0
  213. package/dist/credentials/core/types.d.ts.map +1 -0
  214. package/dist/credentials/core/types.js +2 -0
  215. package/dist/credentials/core/types.js.map +1 -0
  216. package/dist/credentials/node/from-adc.d.ts +10 -0
  217. package/dist/credentials/node/from-adc.d.ts.map +1 -0
  218. package/dist/credentials/node/from-adc.js +76 -0
  219. package/dist/credentials/node/from-adc.js.map +1 -0
  220. package/dist/credentials/node/from-service-account.d.ts +24 -0
  221. package/dist/credentials/node/from-service-account.d.ts.map +1 -0
  222. package/dist/credentials/node/from-service-account.js +108 -0
  223. package/dist/credentials/node/from-service-account.js.map +1 -0
  224. package/dist/credentials/node/index.d.ts +7 -0
  225. package/dist/credentials/node/index.d.ts.map +1 -0
  226. package/dist/credentials/node/index.js +7 -0
  227. package/dist/credentials/node/index.js.map +1 -0
  228. package/dist/discover/concurrency.d.ts +42 -0
  229. package/dist/discover/concurrency.d.ts.map +1 -0
  230. package/dist/discover/concurrency.js +113 -0
  231. package/dist/discover/concurrency.js.map +1 -0
  232. package/dist/discover/crawler-adapter.d.ts +48 -0
  233. package/dist/discover/crawler-adapter.d.ts.map +1 -0
  234. package/dist/discover/crawler-adapter.js +92 -0
  235. package/dist/discover/crawler-adapter.js.map +1 -0
  236. package/dist/discover/crawler.d.ts +294 -0
  237. package/dist/discover/crawler.d.ts.map +1 -0
  238. package/dist/discover/crawler.js +764 -0
  239. package/dist/discover/crawler.js.map +1 -0
  240. package/dist/discover/credential-free.d.ts +19 -0
  241. package/dist/discover/credential-free.d.ts.map +1 -0
  242. package/dist/discover/credential-free.js +18 -0
  243. package/dist/discover/credential-free.js.map +1 -0
  244. package/dist/discover/findCollectionGroup.d.ts +44 -0
  245. package/dist/discover/findCollectionGroup.d.ts.map +1 -0
  246. package/dist/discover/findCollectionGroup.js +81 -0
  247. package/dist/discover/findCollectionGroup.js.map +1 -0
  248. package/dist/discover/firestore-source.d.ts +60 -0
  249. package/dist/discover/firestore-source.d.ts.map +1 -0
  250. package/dist/discover/firestore-source.js +11 -0
  251. package/dist/discover/firestore-source.js.map +1 -0
  252. package/dist/discover/index.d.ts +3 -0
  253. package/dist/discover/index.d.ts.map +1 -0
  254. package/dist/discover/index.js +5 -0
  255. package/dist/discover/index.js.map +1 -0
  256. package/dist/discover/merge.d.ts +108 -0
  257. package/dist/discover/merge.d.ts.map +1 -0
  258. package/dist/discover/merge.js +394 -0
  259. package/dist/discover/merge.js.map +1 -0
  260. package/dist/discover/session.d.ts +116 -0
  261. package/dist/discover/session.d.ts.map +1 -0
  262. package/dist/discover/session.js +331 -0
  263. package/dist/discover/session.js.map +1 -0
  264. package/dist/discover/tools.d.ts +58 -0
  265. package/dist/discover/tools.d.ts.map +1 -0
  266. package/dist/discover/tools.js +115 -0
  267. package/dist/discover/tools.js.map +1 -0
  268. package/dist/discover/types.d.ts +190 -0
  269. package/dist/discover/types.d.ts.map +1 -0
  270. package/dist/discover/types.js +12 -0
  271. package/dist/discover/types.js.map +1 -0
  272. package/dist/discover/wire.d.ts +70 -0
  273. package/dist/discover/wire.d.ts.map +1 -0
  274. package/dist/discover/wire.js +309 -0
  275. package/dist/discover/wire.js.map +1 -0
  276. package/dist/functions-rtdb/child.d.ts +52 -0
  277. package/dist/functions-rtdb/child.d.ts.map +1 -0
  278. package/dist/functions-rtdb/child.js +283 -0
  279. package/dist/functions-rtdb/child.js.map +1 -0
  280. package/dist/functions-rtdb/delivery.d.ts +4 -0
  281. package/dist/functions-rtdb/delivery.d.ts.map +1 -0
  282. package/dist/functions-rtdb/delivery.js +2 -0
  283. package/dist/functions-rtdb/delivery.js.map +1 -0
  284. package/dist/functions-rtdb/discovery.d.ts +41 -0
  285. package/dist/functions-rtdb/discovery.d.ts.map +1 -0
  286. package/dist/functions-rtdb/discovery.js +86 -0
  287. package/dist/functions-rtdb/discovery.js.map +1 -0
  288. package/dist/functions-rtdb/event.d.ts +20 -0
  289. package/dist/functions-rtdb/event.d.ts.map +1 -0
  290. package/dist/functions-rtdb/event.js +45 -0
  291. package/dist/functions-rtdb/event.js.map +1 -0
  292. package/dist/functions-rtdb/execution.d.ts +20 -0
  293. package/dist/functions-rtdb/execution.d.ts.map +1 -0
  294. package/dist/functions-rtdb/execution.js +70 -0
  295. package/dist/functions-rtdb/execution.js.map +1 -0
  296. package/dist/functions-rtdb/in-memory-delivery.d.ts +9 -0
  297. package/dist/functions-rtdb/in-memory-delivery.d.ts.map +1 -0
  298. package/dist/functions-rtdb/in-memory-delivery.js +36 -0
  299. package/dist/functions-rtdb/in-memory-delivery.js.map +1 -0
  300. package/dist/functions-rtdb/project.d.ts +7 -0
  301. package/dist/functions-rtdb/project.d.ts.map +1 -0
  302. package/dist/functions-rtdb/project.js +54 -0
  303. package/dist/functions-rtdb/project.js.map +1 -0
  304. package/dist/functions-rtdb/projection.d.ts +14 -0
  305. package/dist/functions-rtdb/projection.d.ts.map +1 -0
  306. package/dist/functions-rtdb/projection.js +65 -0
  307. package/dist/functions-rtdb/projection.js.map +1 -0
  308. package/dist/functions-rtdb/reference-pattern.d.ts +5 -0
  309. package/dist/functions-rtdb/reference-pattern.d.ts.map +1 -0
  310. package/dist/functions-rtdb/reference-pattern.js +14 -0
  311. package/dist/functions-rtdb/reference-pattern.js.map +1 -0
  312. package/dist/functions-rtdb/remote-delivery.d.ts +9 -0
  313. package/dist/functions-rtdb/remote-delivery.d.ts.map +1 -0
  314. package/dist/functions-rtdb/remote-delivery.js +11 -0
  315. package/dist/functions-rtdb/remote-delivery.js.map +1 -0
  316. package/dist/pkg-version.d.ts +2 -0
  317. package/dist/pkg-version.d.ts.map +1 -0
  318. package/dist/pkg-version.js +47 -0
  319. package/dist/pkg-version.js.map +1 -0
  320. package/dist/register/esm-exports.d.ts +26 -0
  321. package/dist/register/esm-exports.d.ts.map +1 -0
  322. package/dist/register/esm-exports.js +61 -0
  323. package/dist/register/esm-exports.js.map +1 -0
  324. package/dist/register/hooks.d.ts +13 -0
  325. package/dist/register/hooks.d.ts.map +1 -0
  326. package/dist/register/hooks.js +15 -0
  327. package/dist/register/hooks.js.map +1 -0
  328. package/dist/register/index.d.ts +5 -0
  329. package/dist/register/index.d.ts.map +1 -0
  330. package/dist/register/index.js +124 -0
  331. package/dist/register/index.js.map +1 -0
  332. package/dist/register/mapping.d.ts +19 -0
  333. package/dist/register/mapping.d.ts.map +1 -0
  334. package/dist/register/mapping.js +35 -0
  335. package/dist/register/mapping.js.map +1 -0
  336. package/dist/remote/index.d.ts +232 -0
  337. package/dist/remote/index.d.ts.map +1 -0
  338. package/dist/remote/index.js +720 -0
  339. package/dist/remote/index.js.map +1 -0
  340. package/dist/rtdb/crawl-snapshot.d.ts +17 -0
  341. package/dist/rtdb/crawl-snapshot.d.ts.map +1 -0
  342. package/dist/rtdb/crawl-snapshot.js +72 -0
  343. package/dist/rtdb/crawl-snapshot.js.map +1 -0
  344. package/dist/rtdb/inspection.d.ts +8 -0
  345. package/dist/rtdb/inspection.d.ts.map +1 -0
  346. package/dist/rtdb/inspection.js +111 -0
  347. package/dist/rtdb/inspection.js.map +1 -0
  348. package/dist/rtdb/load-rules-document.d.ts +25 -0
  349. package/dist/rtdb/load-rules-document.d.ts.map +1 -0
  350. package/dist/rtdb/load-rules-document.js +38 -0
  351. package/dist/rtdb/load-rules-document.js.map +1 -0
  352. package/dist/rtdb/rules-generation-tool.d.ts +4 -0
  353. package/dist/rtdb/rules-generation-tool.d.ts.map +1 -0
  354. package/dist/rtdb/rules-generation-tool.js +35 -0
  355. package/dist/rtdb/rules-generation-tool.js.map +1 -0
  356. package/dist/rtdb/rules-json.d.ts +8 -0
  357. package/dist/rtdb/rules-json.d.ts.map +1 -0
  358. package/dist/rtdb/rules-json.js +17 -0
  359. package/dist/rtdb/rules-json.js.map +1 -0
  360. package/dist/serve/bridge-mount.d.ts +36 -0
  361. package/dist/serve/bridge-mount.d.ts.map +1 -0
  362. package/dist/serve/bridge-mount.js +162 -0
  363. package/dist/serve/bridge-mount.js.map +1 -0
  364. package/dist/serve/bundler.d.ts +110 -0
  365. package/dist/serve/bundler.d.ts.map +1 -0
  366. package/dist/serve/bundler.js +432 -0
  367. package/dist/serve/bundler.js.map +1 -0
  368. package/dist/serve/capture-store.d.ts +27 -0
  369. package/dist/serve/capture-store.d.ts.map +1 -0
  370. package/dist/serve/capture-store.js +47 -0
  371. package/dist/serve/capture-store.js.map +1 -0
  372. package/dist/serve/discovery.d.ts +71 -0
  373. package/dist/serve/discovery.d.ts.map +1 -0
  374. package/dist/serve/discovery.js +158 -0
  375. package/dist/serve/discovery.js.map +1 -0
  376. package/dist/serve/docs-ui/_astro/_slug_.DPUwShm2.css +1 -0
  377. package/dist/serve/docs-ui/docs/_rhythm/index.html +99 -0
  378. package/dist/serve/docs-ui/docs/_rhythm.md +97 -0
  379. package/dist/serve/docs-ui/docs/agent/set-up-your-agent/index.html +42 -0
  380. package/dist/serve/docs-ui/docs/agent/set-up-your-agent.md +72 -0
  381. package/dist/serve/docs-ui/docs/agent/watch-and-review/index.html +25 -0
  382. package/dist/serve/docs-ui/docs/agent/watch-and-review.md +38 -0
  383. package/dist/serve/docs-ui/docs/agent/work-with-an-agent/index.html +69 -0
  384. package/dist/serve/docs-ui/docs/agent/work-with-an-agent.md +74 -0
  385. package/dist/serve/docs-ui/docs/ai-compat/index.html +423 -0
  386. package/dist/serve/docs-ui/docs/ai-compat.md +456 -0
  387. package/dist/serve/docs-ui/docs/api-reference/index.html +66 -0
  388. package/dist/serve/docs-ui/docs/api-reference.md +69 -0
  389. package/dist/serve/docs-ui/docs/app-compat/index.html +159 -0
  390. package/dist/serve/docs-ui/docs/app-compat.md +178 -0
  391. package/dist/serve/docs-ui/docs/auth-compat/index.html +644 -0
  392. package/dist/serve/docs-ui/docs/auth-compat.md +701 -0
  393. package/dist/serve/docs-ui/docs/build/ai-logic/index.html +27 -0
  394. package/dist/serve/docs-ui/docs/build/ai-logic.md +39 -0
  395. package/dist/serve/docs-ui/docs/build/authentication/index.html +65 -0
  396. package/dist/serve/docs-ui/docs/build/authentication.md +95 -0
  397. package/dist/serve/docs-ui/docs/build/cloud-firestore/index.html +69 -0
  398. package/dist/serve/docs-ui/docs/build/cloud-firestore.md +93 -0
  399. package/dist/serve/docs-ui/docs/build/cloud-messaging/index.html +27 -0
  400. package/dist/serve/docs-ui/docs/build/cloud-messaging.md +37 -0
  401. package/dist/serve/docs-ui/docs/build/cloud-storage/index.html +65 -0
  402. package/dist/serve/docs-ui/docs/build/cloud-storage.md +86 -0
  403. package/dist/serve/docs-ui/docs/build/realtime-database/index.html +49 -0
  404. package/dist/serve/docs-ui/docs/build/realtime-database.md +67 -0
  405. package/dist/serve/docs-ui/docs/conformance-scores/index.html +49 -0
  406. package/dist/serve/docs-ui/docs/conformance-scores.md +53 -0
  407. package/dist/serve/docs-ui/docs/create-pyric-reference-api/index.html +498 -0
  408. package/dist/serve/docs-ui/docs/create-pyric-reference-api.md +345 -0
  409. package/dist/serve/docs-ui/docs/database-compat/index.html +1037 -0
  410. package/dist/serve/docs-ui/docs/database-compat.md +1099 -0
  411. package/dist/serve/docs-ui/docs/firestore-compat/index.html +823 -0
  412. package/dist/serve/docs-ui/docs/firestore-compat.md +881 -0
  413. package/dist/serve/docs-ui/docs/functions-rtdb-compat/index.html +72 -0
  414. package/dist/serve/docs-ui/docs/functions-rtdb-compat.md +83 -0
  415. package/dist/serve/docs-ui/docs/get-started/how-the-swap-works/index.html +27 -0
  416. package/dist/serve/docs-ui/docs/get-started/how-the-swap-works.md +50 -0
  417. package/dist/serve/docs-ui/docs/get-started/start-building/index.html +31 -0
  418. package/dist/serve/docs-ui/docs/get-started/start-building.md +53 -0
  419. package/dist/serve/docs-ui/docs/index.html +2 -0
  420. package/dist/serve/docs-ui/docs/index.json +11719 -0
  421. package/dist/serve/docs-ui/docs/messaging-compat/index.html +264 -0
  422. package/dist/serve/docs-ui/docs/messaging-compat.md +285 -0
  423. package/dist/serve/docs-ui/docs/observe/see-whats-happening/index.html +73 -0
  424. package/dist/serve/docs-ui/docs/observe/see-whats-happening.md +69 -0
  425. package/dist/serve/docs-ui/docs/observe/shape-your-data/index.html +44 -0
  426. package/dist/serve/docs-ui/docs/observe/shape-your-data.md +74 -0
  427. package/dist/serve/docs-ui/docs/overview/index.html +16 -0
  428. package/dist/serve/docs-ui/docs/overview.md +31 -0
  429. package/dist/serve/docs-ui/docs/pyric-admin-app-reference-api/index.html +185 -0
  430. package/dist/serve/docs-ui/docs/pyric-admin-app-reference-api.md +206 -0
  431. package/dist/serve/docs-ui/docs/pyric-admin-auth-reference-api/index.html +617 -0
  432. package/dist/serve/docs-ui/docs/pyric-admin-auth-reference-api.md +441 -0
  433. package/dist/serve/docs-ui/docs/pyric-admin-database-reference-api/index.html +583 -0
  434. package/dist/serve/docs-ui/docs/pyric-admin-database-reference-api.md +597 -0
  435. package/dist/serve/docs-ui/docs/pyric-admin-firestore-reference-api/index.html +32 -0
  436. package/dist/serve/docs-ui/docs/pyric-admin-firestore-reference-api.md +30 -0
  437. package/dist/serve/docs-ui/docs/pyric-admin-storage-reference-api/index.html +317 -0
  438. package/dist/serve/docs-ui/docs/pyric-admin-storage-reference-api.md +285 -0
  439. package/dist/serve/docs-ui/docs/pyric-ai-reference-api/index.html +5830 -0
  440. package/dist/serve/docs-ui/docs/pyric-ai-reference-api.md +5439 -0
  441. package/dist/serve/docs-ui/docs/pyric-ai-scripting-reference-api/index.html +159 -0
  442. package/dist/serve/docs-ui/docs/pyric-ai-scripting-reference-api.md +122 -0
  443. package/dist/serve/docs-ui/docs/pyric-app-reference-api/index.html +420 -0
  444. package/dist/serve/docs-ui/docs/pyric-app-reference-api.md +326 -0
  445. package/dist/serve/docs-ui/docs/pyric-auth-reference-api/index.html +5452 -0
  446. package/dist/serve/docs-ui/docs/pyric-auth-reference-api.md +5271 -0
  447. package/dist/serve/docs-ui/docs/pyric-cli-assurance-browser-reference-api/index.html +98 -0
  448. package/dist/serve/docs-ui/docs/pyric-cli-assurance-browser-reference-api.md +88 -0
  449. package/dist/serve/docs-ui/docs/pyric-cli-assurance-reference-api/index.html +2263 -0
  450. package/dist/serve/docs-ui/docs/pyric-cli-assurance-reference-api.md +1477 -0
  451. package/dist/serve/docs-ui/docs/pyric-cli-bridge-client-reference-api/index.html +546 -0
  452. package/dist/serve/docs-ui/docs/pyric-cli-bridge-client-reference-api.md +485 -0
  453. package/dist/serve/docs-ui/docs/pyric-cli-bridge-reference-api/index.html +506 -0
  454. package/dist/serve/docs-ui/docs/pyric-cli-bridge-reference-api.md +419 -0
  455. package/dist/serve/docs-ui/docs/pyric-cli-conformance-browser-reference-api/index.html +257 -0
  456. package/dist/serve/docs-ui/docs/pyric-cli-conformance-browser-reference-api.md +197 -0
  457. package/dist/serve/docs-ui/docs/pyric-cli-conformance-reference-api/index.html +307 -0
  458. package/dist/serve/docs-ui/docs/pyric-cli-conformance-reference-api.md +254 -0
  459. package/dist/serve/docs-ui/docs/pyric-cli-credentials-node-reference-api/index.html +67 -0
  460. package/dist/serve/docs-ui/docs/pyric-cli-credentials-node-reference-api.md +59 -0
  461. package/dist/serve/docs-ui/docs/pyric-cli-discover-reference-api/index.html +2355 -0
  462. package/dist/serve/docs-ui/docs/pyric-cli-discover-reference-api.md +2036 -0
  463. package/dist/serve/docs-ui/docs/pyric-cli-register-reference-api/index.html +10 -0
  464. package/dist/serve/docs-ui/docs/pyric-cli-register-reference-api.md +16 -0
  465. package/dist/serve/docs-ui/docs/pyric-cli-remote-reference-api/index.html +1044 -0
  466. package/dist/serve/docs-ui/docs/pyric-cli-remote-reference-api.md +952 -0
  467. package/dist/serve/docs-ui/docs/pyric-cli-serve-worker-reference-api/index.html +5041 -0
  468. package/dist/serve/docs-ui/docs/pyric-cli-serve-worker-reference-api.md +4739 -0
  469. package/dist/serve/docs-ui/docs/pyric-cli-verify-reference-api/index.html +926 -0
  470. package/dist/serve/docs-ui/docs/pyric-cli-verify-reference-api.md +586 -0
  471. package/dist/serve/docs-ui/docs/pyric-cli-vite-reference-api/index.html +102 -0
  472. package/dist/serve/docs-ui/docs/pyric-cli-vite-reference-api.md +76 -0
  473. package/dist/serve/docs-ui/docs/pyric-database-reference-api/index.html +1851 -0
  474. package/dist/serve/docs-ui/docs/pyric-database-reference-api.md +1842 -0
  475. package/dist/serve/docs-ui/docs/pyric-firestore-reference-api/index.html +3623 -0
  476. package/dist/serve/docs-ui/docs/pyric-firestore-reference-api.md +3399 -0
  477. package/dist/serve/docs-ui/docs/pyric-firestore-values-reference-api/index.html +30 -0
  478. package/dist/serve/docs-ui/docs/pyric-firestore-values-reference-api.md +30 -0
  479. package/dist/serve/docs-ui/docs/pyric-messaging-reference-api/index.html +508 -0
  480. package/dist/serve/docs-ui/docs/pyric-messaging-reference-api.md +374 -0
  481. package/dist/serve/docs-ui/docs/pyric-messaging-sw-reference-api/index.html +482 -0
  482. package/dist/serve/docs-ui/docs/pyric-messaging-sw-reference-api.md +348 -0
  483. package/dist/serve/docs-ui/docs/pyric-rules-reference-api/index.html +2629 -0
  484. package/dist/serve/docs-ui/docs/pyric-rules-reference-api.md +2213 -0
  485. package/dist/serve/docs-ui/docs/pyric-sandbox-database-reference-api/index.html +120 -0
  486. package/dist/serve/docs-ui/docs/pyric-sandbox-database-reference-api.md +110 -0
  487. package/dist/serve/docs-ui/docs/pyric-sandbox-firestore-reference-api/index.html +202 -0
  488. package/dist/serve/docs-ui/docs/pyric-sandbox-firestore-reference-api.md +134 -0
  489. package/dist/serve/docs-ui/docs/pyric-sandbox-reference-api/index.html +5019 -0
  490. package/dist/serve/docs-ui/docs/pyric-sandbox-reference-api.md +4060 -0
  491. package/dist/serve/docs-ui/docs/pyric-storage-reference-api/index.html +2120 -0
  492. package/dist/serve/docs-ui/docs/pyric-storage-reference-api.md +1687 -0
  493. package/dist/serve/docs-ui/docs/pyric-ui-agents-reference-api/index.html +638 -0
  494. package/dist/serve/docs-ui/docs/pyric-ui-agents-reference-api.md +430 -0
  495. package/dist/serve/docs-ui/docs/pyric-ui-auth-hooks-reference-api/index.html +813 -0
  496. package/dist/serve/docs-ui/docs/pyric-ui-auth-hooks-reference-api.md +634 -0
  497. package/dist/serve/docs-ui/docs/pyric-ui-auth-reference-api/index.html +1708 -0
  498. package/dist/serve/docs-ui/docs/pyric-ui-auth-reference-api.md +1300 -0
  499. package/dist/serve/docs-ui/docs/pyric-ui-events-hooks-reference-api/index.html +177 -0
  500. package/dist/serve/docs-ui/docs/pyric-ui-events-hooks-reference-api.md +111 -0
  501. package/dist/serve/docs-ui/docs/pyric-ui-events-reference-api/index.html +1542 -0
  502. package/dist/serve/docs-ui/docs/pyric-ui-events-reference-api.md +903 -0
  503. package/dist/serve/docs-ui/docs/pyric-ui-firestore-hooks-reference-api/index.html +1024 -0
  504. package/dist/serve/docs-ui/docs/pyric-ui-firestore-hooks-reference-api.md +640 -0
  505. package/dist/serve/docs-ui/docs/pyric-ui-firestore-reference-api/index.html +2753 -0
  506. package/dist/serve/docs-ui/docs/pyric-ui-firestore-reference-api.md +2171 -0
  507. package/dist/serve/docs-ui/docs/pyric-ui-primitives-reference-api/index.html +1005 -0
  508. package/dist/serve/docs-ui/docs/pyric-ui-primitives-reference-api.md +693 -0
  509. package/dist/serve/docs-ui/docs/pyric-ui-rtdb-reference-api/index.html +1388 -0
  510. package/dist/serve/docs-ui/docs/pyric-ui-rtdb-reference-api.md +1340 -0
  511. package/dist/serve/docs-ui/docs/pyric-ui-rules-hooks-reference-api/index.html +131 -0
  512. package/dist/serve/docs-ui/docs/pyric-ui-rules-hooks-reference-api.md +76 -0
  513. package/dist/serve/docs-ui/docs/pyric-ui-rules-reference-api/index.html +648 -0
  514. package/dist/serve/docs-ui/docs/pyric-ui-rules-reference-api.md +508 -0
  515. package/dist/serve/docs-ui/docs/pyric-ui-storage-hooks-reference-api/index.html +1457 -0
  516. package/dist/serve/docs-ui/docs/pyric-ui-storage-hooks-reference-api.md +1029 -0
  517. package/dist/serve/docs-ui/docs/pyric-ui-storage-reference-api/index.html +2476 -0
  518. package/dist/serve/docs-ui/docs/pyric-ui-storage-reference-api.md +1919 -0
  519. package/dist/serve/docs-ui/docs/pyric-ui-traffic-hooks-reference-api/index.html +1241 -0
  520. package/dist/serve/docs-ui/docs/pyric-ui-traffic-hooks-reference-api.md +817 -0
  521. package/dist/serve/docs-ui/docs/pyric-ui-traffic-reference-api/index.html +2289 -0
  522. package/dist/serve/docs-ui/docs/pyric-ui-traffic-reference-api.md +1489 -0
  523. package/dist/serve/docs-ui/docs/rules-compat/index.html +272 -0
  524. package/dist/serve/docs-ui/docs/rules-compat.md +287 -0
  525. package/dist/serve/docs-ui/docs/secure/audit-your-rules/index.html +34 -0
  526. package/dist/serve/docs-ui/docs/secure/audit-your-rules.md +67 -0
  527. package/dist/serve/docs-ui/docs/secure/firestore-rules-limits/index.html +105 -0
  528. package/dist/serve/docs-ui/docs/secure/firestore-rules-limits.md +152 -0
  529. package/dist/serve/docs-ui/docs/secure/read-a-denial/index.html +40 -0
  530. package/dist/serve/docs-ui/docs/secure/read-a-denial.md +58 -0
  531. package/dist/serve/docs-ui/docs/secure/rtdb-rules-in-typescript/index.html +66 -0
  532. package/dist/serve/docs-ui/docs/secure/rtdb-rules-in-typescript.md +89 -0
  533. package/dist/serve/docs-ui/docs/secure/rules-standard-library/index.html +158 -0
  534. package/dist/serve/docs-ui/docs/secure/rules-standard-library.md +116 -0
  535. package/dist/serve/docs-ui/docs/secure/secure-it-with-rules/index.html +46 -0
  536. package/dist/serve/docs-ui/docs/secure/secure-it-with-rules.md +51 -0
  537. package/dist/serve/docs-ui/docs/secure/simulate-and-lint/index.html +94 -0
  538. package/dist/serve/docs-ui/docs/secure/simulate-and-lint.md +86 -0
  539. package/dist/serve/docs-ui/docs/secure/write-a-rules-test-suite/index.html +81 -0
  540. package/dist/serve/docs-ui/docs/secure/write-a-rules-test-suite.md +105 -0
  541. package/dist/serve/docs-ui/docs/ship/ship-to-production/index.html +36 -0
  542. package/dist/serve/docs-ui/docs/ship/ship-to-production.md +64 -0
  543. package/dist/serve/docs-ui/docs/ship/test-in-node/index.html +74 -0
  544. package/dist/serve/docs-ui/docs/ship/test-in-node.md +94 -0
  545. package/dist/serve/docs-ui/docs/storage-compat/index.html +532 -0
  546. package/dist/serve/docs-ui/docs/storage-compat.md +577 -0
  547. package/dist/serve/docs-ui/docs/trust/how-we-know-it-matches-firebase/index.html +131 -0
  548. package/dist/serve/docs-ui/docs/trust/how-we-know-it-matches-firebase.md +155 -0
  549. package/dist/serve/docs-ui/docs/trust/versioning-and-compatibility/index.html +13 -0
  550. package/dist/serve/docs-ui/docs/trust/versioning-and-compatibility.md +21 -0
  551. package/dist/serve/docs-ui/index.html +1 -0
  552. package/dist/serve/docs-ui/llms.txt +123 -0
  553. package/dist/serve/entries/ai.d.ts +4 -0
  554. package/dist/serve/entries/ai.d.ts.map +1 -0
  555. package/dist/serve/entries/ai.js +184 -0
  556. package/dist/serve/entries/ai.js.map +1 -0
  557. package/dist/serve/entries/app-backend.d.ts +2 -0
  558. package/dist/serve/entries/app-backend.d.ts.map +1 -0
  559. package/dist/serve/entries/app-backend.js +4 -0
  560. package/dist/serve/entries/app-backend.js.map +1 -0
  561. package/dist/serve/entries/app-client.d.ts +5 -0
  562. package/dist/serve/entries/app-client.d.ts.map +1 -0
  563. package/dist/serve/entries/app-client.js +23 -0
  564. package/dist/serve/entries/app-client.js.map +1 -0
  565. package/dist/serve/entries/app-session-store.d.ts +14 -0
  566. package/dist/serve/entries/app-session-store.d.ts.map +1 -0
  567. package/dist/serve/entries/app-session-store.js +37 -0
  568. package/dist/serve/entries/app-session-store.js.map +1 -0
  569. package/dist/serve/entries/app.d.ts +2 -0
  570. package/dist/serve/entries/app.d.ts.map +1 -0
  571. package/dist/serve/entries/app.js +10 -0
  572. package/dist/serve/entries/app.js.map +1 -0
  573. package/dist/serve/entries/auth-helper-core.d.ts +52 -0
  574. package/dist/serve/entries/auth-helper-core.d.ts.map +1 -0
  575. package/dist/serve/entries/auth-helper-core.js +118 -0
  576. package/dist/serve/entries/auth-helper-core.js.map +1 -0
  577. package/dist/serve/entries/auth-helper-dom.d.ts +14 -0
  578. package/dist/serve/entries/auth-helper-dom.d.ts.map +1 -0
  579. package/dist/serve/entries/auth-helper-dom.js +116 -0
  580. package/dist/serve/entries/auth-helper-dom.js.map +1 -0
  581. package/dist/serve/entries/auth-helper-runtime.d.ts +5 -0
  582. package/dist/serve/entries/auth-helper-runtime.d.ts.map +1 -0
  583. package/dist/serve/entries/auth-helper-runtime.js +11 -0
  584. package/dist/serve/entries/auth-helper-runtime.js.map +1 -0
  585. package/dist/serve/entries/auth.d.ts +77 -0
  586. package/dist/serve/entries/auth.d.ts.map +1 -0
  587. package/dist/serve/entries/auth.js +201 -0
  588. package/dist/serve/entries/auth.js.map +1 -0
  589. package/dist/serve/entries/bridge-url.d.ts +25 -0
  590. package/dist/serve/entries/bridge-url.d.ts.map +1 -0
  591. package/dist/serve/entries/bridge-url.js +30 -0
  592. package/dist/serve/entries/bridge-url.js.map +1 -0
  593. package/dist/serve/entries/database.d.ts +46 -0
  594. package/dist/serve/entries/database.d.ts.map +1 -0
  595. package/dist/serve/entries/database.js +80 -0
  596. package/dist/serve/entries/database.js.map +1 -0
  597. package/dist/serve/entries/firestore.d.ts +104 -0
  598. package/dist/serve/entries/firestore.d.ts.map +1 -0
  599. package/dist/serve/entries/firestore.js +202 -0
  600. package/dist/serve/entries/firestore.js.map +1 -0
  601. package/dist/serve/entries/init.d.ts +2 -0
  602. package/dist/serve/entries/init.d.ts.map +1 -0
  603. package/dist/serve/entries/init.js +40 -0
  604. package/dist/serve/entries/init.js.map +1 -0
  605. package/dist/serve/entries/keepalive.d.ts +20 -0
  606. package/dist/serve/entries/keepalive.d.ts.map +1 -0
  607. package/dist/serve/entries/keepalive.js +38 -0
  608. package/dist/serve/entries/keepalive.js.map +1 -0
  609. package/dist/serve/entries/messaging-sw.d.ts +10 -0
  610. package/dist/serve/entries/messaging-sw.d.ts.map +1 -0
  611. package/dist/serve/entries/messaging-sw.js +36 -0
  612. package/dist/serve/entries/messaging-sw.js.map +1 -0
  613. package/dist/serve/entries/messaging.d.ts +11 -0
  614. package/dist/serve/entries/messaging.d.ts.map +1 -0
  615. package/dist/serve/entries/messaging.js +53 -0
  616. package/dist/serve/entries/messaging.js.map +1 -0
  617. package/dist/serve/entries/runtime.d.ts +46 -0
  618. package/dist/serve/entries/runtime.d.ts.map +1 -0
  619. package/dist/serve/entries/runtime.js +435 -0
  620. package/dist/serve/entries/runtime.js.map +1 -0
  621. package/dist/serve/entries/session-store.d.ts +48 -0
  622. package/dist/serve/entries/session-store.d.ts.map +1 -0
  623. package/dist/serve/entries/session-store.js +82 -0
  624. package/dist/serve/entries/session-store.js.map +1 -0
  625. package/dist/serve/entries/storage.d.ts +25 -0
  626. package/dist/serve/entries/storage.d.ts.map +1 -0
  627. package/dist/serve/entries/storage.js +61 -0
  628. package/dist/serve/entries/storage.js.map +1 -0
  629. package/dist/serve/entries/tab-sync-wiring.d.ts +88 -0
  630. package/dist/serve/entries/tab-sync-wiring.d.ts.map +1 -0
  631. package/dist/serve/entries/tab-sync-wiring.js +217 -0
  632. package/dist/serve/entries/tab-sync-wiring.js.map +1 -0
  633. package/dist/serve/entries/worker-runtime.d.ts +10 -0
  634. package/dist/serve/entries/worker-runtime.d.ts.map +1 -0
  635. package/dist/serve/entries/worker-runtime.js +59 -0
  636. package/dist/serve/entries/worker-runtime.js.map +1 -0
  637. package/dist/serve/init-payload.d.ts +21 -0
  638. package/dist/serve/init-payload.d.ts.map +1 -0
  639. package/dist/serve/init-payload.js +2 -0
  640. package/dist/serve/init-payload.js.map +1 -0
  641. package/dist/serve/namespace.d.ts +73 -0
  642. package/dist/serve/namespace.d.ts.map +1 -0
  643. package/dist/serve/namespace.js +470 -0
  644. package/dist/serve/namespace.js.map +1 -0
  645. package/dist/serve/open-browser.d.ts +23 -0
  646. package/dist/serve/open-browser.d.ts.map +1 -0
  647. package/dist/serve/open-browser.js +58 -0
  648. package/dist/serve/open-browser.js.map +1 -0
  649. package/dist/serve/rules.d.ts +77 -0
  650. package/dist/serve/rules.d.ts.map +1 -0
  651. package/dist/serve/rules.js +202 -0
  652. package/dist/serve/rules.js.map +1 -0
  653. package/dist/serve/sandbox-marker.d.ts +9 -0
  654. package/dist/serve/sandbox-marker.d.ts.map +1 -0
  655. package/dist/serve/sandbox-marker.js +31 -0
  656. package/dist/serve/sandbox-marker.js.map +1 -0
  657. package/dist/serve/server.d.ts +135 -0
  658. package/dist/serve/server.d.ts.map +1 -0
  659. package/dist/serve/server.js +328 -0
  660. package/dist/serve/server.js.map +1 -0
  661. package/dist/serve/standalone-assets.d.ts +67 -0
  662. package/dist/serve/standalone-assets.d.ts.map +1 -0
  663. package/dist/serve/standalone-assets.js +134 -0
  664. package/dist/serve/standalone-assets.js.map +1 -0
  665. package/dist/serve/state-store.d.ts +45 -0
  666. package/dist/serve/state-store.d.ts.map +1 -0
  667. package/dist/serve/state-store.js +120 -0
  668. package/dist/serve/state-store.js.map +1 -0
  669. package/dist/serve/studio/disk-project-store.d.ts +9 -0
  670. package/dist/serve/studio/disk-project-store.d.ts.map +1 -0
  671. package/dist/serve/studio/disk-project-store.js +173 -0
  672. package/dist/serve/studio/disk-project-store.js.map +1 -0
  673. package/dist/serve/studio/disk-workspace.d.ts +14 -0
  674. package/dist/serve/studio/disk-workspace.d.ts.map +1 -0
  675. package/dist/serve/studio/disk-workspace.js +152 -0
  676. package/dist/serve/studio/disk-workspace.js.map +1 -0
  677. package/dist/serve/studio/index.d.ts +10 -0
  678. package/dist/serve/studio/index.d.ts.map +1 -0
  679. package/dist/serve/studio/index.js +9 -0
  680. package/dist/serve/studio/index.js.map +1 -0
  681. package/dist/serve/studio/routes.d.ts +40 -0
  682. package/dist/serve/studio/routes.d.ts.map +1 -0
  683. package/dist/serve/studio/routes.js +182 -0
  684. package/dist/serve/studio/routes.js.map +1 -0
  685. package/dist/serve/studio/store-types.d.ts +45 -0
  686. package/dist/serve/studio/store-types.d.ts.map +1 -0
  687. package/dist/serve/studio/store-types.js +11 -0
  688. package/dist/serve/studio/store-types.js.map +1 -0
  689. package/dist/serve/studio-ui/assets/RulesCodeEditor-CXdSLKhO.js +23 -0
  690. package/dist/serve/studio-ui/assets/index-BlSGru_r.css +1 -0
  691. package/dist/serve/studio-ui/assets/index-BvtQIpGn.js +1211 -0
  692. package/dist/serve/studio-ui/assets/seed-3DMedLL3.js +2 -0
  693. package/dist/serve/studio-ui/index.html +32 -0
  694. package/dist/serve/studio-ui/pyric-logo.svg +76 -0
  695. package/dist/serve/vite-plugin.d.ts +57 -0
  696. package/dist/serve/vite-plugin.d.ts.map +1 -0
  697. package/dist/serve/vite-plugin.js +664 -0
  698. package/dist/serve/vite-plugin.js.map +1 -0
  699. package/dist/serve/worker/client/admin-firestore.d.ts +18 -0
  700. package/dist/serve/worker/client/admin-firestore.d.ts.map +1 -0
  701. package/dist/serve/worker/client/admin-firestore.js +26 -0
  702. package/dist/serve/worker/client/admin-firestore.js.map +1 -0
  703. package/dist/serve/worker/client/ai.d.ts +31 -0
  704. package/dist/serve/worker/client/ai.d.ts.map +1 -0
  705. package/dist/serve/worker/client/ai.js +89 -0
  706. package/dist/serve/worker/client/ai.js.map +1 -0
  707. package/dist/serve/worker/client/auth.d.ts +168 -0
  708. package/dist/serve/worker/client/auth.d.ts.map +1 -0
  709. package/dist/serve/worker/client/auth.js +322 -0
  710. package/dist/serve/worker/client/auth.js.map +1 -0
  711. package/dist/serve/worker/client/connection.d.ts +80 -0
  712. package/dist/serve/worker/client/connection.d.ts.map +1 -0
  713. package/dist/serve/worker/client/connection.js +148 -0
  714. package/dist/serve/worker/client/connection.js.map +1 -0
  715. package/dist/serve/worker/client/core.d.ts +109 -0
  716. package/dist/serve/worker/client/core.d.ts.map +1 -0
  717. package/dist/serve/worker/client/core.js +248 -0
  718. package/dist/serve/worker/client/core.js.map +1 -0
  719. package/dist/serve/worker/client/disconnect.d.ts +7 -0
  720. package/dist/serve/worker/client/disconnect.d.ts.map +1 -0
  721. package/dist/serve/worker/client/disconnect.js +26 -0
  722. package/dist/serve/worker/client/disconnect.js.map +1 -0
  723. package/dist/serve/worker/client/firestore-reads.d.ts +49 -0
  724. package/dist/serve/worker/client/firestore-reads.d.ts.map +1 -0
  725. package/dist/serve/worker/client/firestore-reads.js +139 -0
  726. package/dist/serve/worker/client/firestore-reads.js.map +1 -0
  727. package/dist/serve/worker/client/firestore-refs.d.ts +54 -0
  728. package/dist/serve/worker/client/firestore-refs.d.ts.map +1 -0
  729. package/dist/serve/worker/client/firestore-refs.js +167 -0
  730. package/dist/serve/worker/client/firestore-refs.js.map +1 -0
  731. package/dist/serve/worker/client/firestore-writes.d.ts +70 -0
  732. package/dist/serve/worker/client/firestore-writes.d.ts.map +1 -0
  733. package/dist/serve/worker/client/firestore-writes.js +169 -0
  734. package/dist/serve/worker/client/firestore-writes.js.map +1 -0
  735. package/dist/serve/worker/client/handles.d.ts +73 -0
  736. package/dist/serve/worker/client/handles.d.ts.map +1 -0
  737. package/dist/serve/worker/client/handles.js +4 -0
  738. package/dist/serve/worker/client/handles.js.map +1 -0
  739. package/dist/serve/worker/client/messaging.d.ts +16 -0
  740. package/dist/serve/worker/client/messaging.d.ts.map +1 -0
  741. package/dist/serve/worker/client/messaging.js +60 -0
  742. package/dist/serve/worker/client/messaging.js.map +1 -0
  743. package/dist/serve/worker/client/presence.d.ts +43 -0
  744. package/dist/serve/worker/client/presence.d.ts.map +1 -0
  745. package/dist/serve/worker/client/presence.js +132 -0
  746. package/dist/serve/worker/client/presence.js.map +1 -0
  747. package/dist/serve/worker/client/rtdb.d.ts +36 -0
  748. package/dist/serve/worker/client/rtdb.d.ts.map +1 -0
  749. package/dist/serve/worker/client/rtdb.js +241 -0
  750. package/dist/serve/worker/client/rtdb.js.map +1 -0
  751. package/dist/serve/worker/client/rules.d.ts +24 -0
  752. package/dist/serve/worker/client/rules.d.ts.map +1 -0
  753. package/dist/serve/worker/client/rules.js +44 -0
  754. package/dist/serve/worker/client/rules.js.map +1 -0
  755. package/dist/serve/worker/client/service-worker-connection.d.ts +3 -0
  756. package/dist/serve/worker/client/service-worker-connection.d.ts.map +1 -0
  757. package/dist/serve/worker/client/service-worker-connection.js +53 -0
  758. package/dist/serve/worker/client/service-worker-connection.js.map +1 -0
  759. package/dist/serve/worker/client/snapshots.d.ts +32 -0
  760. package/dist/serve/worker/client/snapshots.d.ts.map +1 -0
  761. package/dist/serve/worker/client/snapshots.js +46 -0
  762. package/dist/serve/worker/client/snapshots.js.map +1 -0
  763. package/dist/serve/worker/client/storage.d.ts +64 -0
  764. package/dist/serve/worker/client/storage.d.ts.map +1 -0
  765. package/dist/serve/worker/client/storage.js +125 -0
  766. package/dist/serve/worker/client/storage.js.map +1 -0
  767. package/dist/serve/worker/client/studio.d.ts +32 -0
  768. package/dist/serve/worker/client/studio.d.ts.map +1 -0
  769. package/dist/serve/worker/client/studio.js +61 -0
  770. package/dist/serve/worker/client/studio.js.map +1 -0
  771. package/dist/serve/worker/client.d.ts +43 -0
  772. package/dist/serve/worker/client.d.ts.map +1 -0
  773. package/dist/serve/worker/client.js +44 -0
  774. package/dist/serve/worker/client.js.map +1 -0
  775. package/dist/serve/worker/entry.d.ts +40 -0
  776. package/dist/serve/worker/entry.d.ts.map +1 -0
  777. package/dist/serve/worker/entry.js +144 -0
  778. package/dist/serve/worker/entry.js.map +1 -0
  779. package/dist/serve/worker/host/admin-firestore.d.ts +17 -0
  780. package/dist/serve/worker/host/admin-firestore.d.ts.map +1 -0
  781. package/dist/serve/worker/host/admin-firestore.js +92 -0
  782. package/dist/serve/worker/host/admin-firestore.js.map +1 -0
  783. package/dist/serve/worker/host/connection.d.ts +40 -0
  784. package/dist/serve/worker/host/connection.d.ts.map +1 -0
  785. package/dist/serve/worker/host/connection.js +153 -0
  786. package/dist/serve/worker/host/connection.js.map +1 -0
  787. package/dist/serve/worker/host/core.d.ts +159 -0
  788. package/dist/serve/worker/host/core.d.ts.map +1 -0
  789. package/dist/serve/worker/host/core.js +296 -0
  790. package/dist/serve/worker/host/core.js.map +1 -0
  791. package/dist/serve/worker/host/dispatch.d.ts +34 -0
  792. package/dist/serve/worker/host/dispatch.d.ts.map +1 -0
  793. package/dist/serve/worker/host/dispatch.js +267 -0
  794. package/dist/serve/worker/host/dispatch.js.map +1 -0
  795. package/dist/serve/worker/host/firestore-reads.d.ts +17 -0
  796. package/dist/serve/worker/host/firestore-reads.d.ts.map +1 -0
  797. package/dist/serve/worker/host/firestore-reads.js +108 -0
  798. package/dist/serve/worker/host/firestore-reads.js.map +1 -0
  799. package/dist/serve/worker/host/firestore-writes.d.ts +37 -0
  800. package/dist/serve/worker/host/firestore-writes.d.ts.map +1 -0
  801. package/dist/serve/worker/host/firestore-writes.js +409 -0
  802. package/dist/serve/worker/host/firestore-writes.js.map +1 -0
  803. package/dist/serve/worker/host/presence.d.ts +38 -0
  804. package/dist/serve/worker/host/presence.d.ts.map +1 -0
  805. package/dist/serve/worker/host/presence.js +280 -0
  806. package/dist/serve/worker/host/presence.js.map +1 -0
  807. package/dist/serve/worker/host/rtdb.d.ts +18 -0
  808. package/dist/serve/worker/host/rtdb.d.ts.map +1 -0
  809. package/dist/serve/worker/host/rtdb.js +128 -0
  810. package/dist/serve/worker/host/rtdb.js.map +1 -0
  811. package/dist/serve/worker/host/rules.d.ts +17 -0
  812. package/dist/serve/worker/host/rules.d.ts.map +1 -0
  813. package/dist/serve/worker/host/rules.js +118 -0
  814. package/dist/serve/worker/host/rules.js.map +1 -0
  815. package/dist/serve/worker/host/storage.d.ts +19 -0
  816. package/dist/serve/worker/host/storage.d.ts.map +1 -0
  817. package/dist/serve/worker/host/storage.js +260 -0
  818. package/dist/serve/worker/host/storage.js.map +1 -0
  819. package/dist/serve/worker/host/studio.d.ts +13 -0
  820. package/dist/serve/worker/host/studio.d.ts.map +1 -0
  821. package/dist/serve/worker/host/studio.js +30 -0
  822. package/dist/serve/worker/host/studio.js.map +1 -0
  823. package/dist/serve/worker/host/subscriptions.d.ts +21 -0
  824. package/dist/serve/worker/host/subscriptions.d.ts.map +1 -0
  825. package/dist/serve/worker/host/subscriptions.js +162 -0
  826. package/dist/serve/worker/host/subscriptions.js.map +1 -0
  827. package/dist/serve/worker/host-ai.d.ts +59 -0
  828. package/dist/serve/worker/host-ai.d.ts.map +1 -0
  829. package/dist/serve/worker/host-ai.js +158 -0
  830. package/dist/serve/worker/host-ai.js.map +1 -0
  831. package/dist/serve/worker/host-auth.d.ts +47 -0
  832. package/dist/serve/worker/host-auth.d.ts.map +1 -0
  833. package/dist/serve/worker/host-auth.js +464 -0
  834. package/dist/serve/worker/host-auth.js.map +1 -0
  835. package/dist/serve/worker/host-context.d.ts +220 -0
  836. package/dist/serve/worker/host-context.d.ts.map +1 -0
  837. package/dist/serve/worker/host-context.js +45 -0
  838. package/dist/serve/worker/host-context.js.map +1 -0
  839. package/dist/serve/worker/host-events.d.ts +21 -0
  840. package/dist/serve/worker/host-events.d.ts.map +1 -0
  841. package/dist/serve/worker/host-events.js +87 -0
  842. package/dist/serve/worker/host-events.js.map +1 -0
  843. package/dist/serve/worker/host-messaging.d.ts +60 -0
  844. package/dist/serve/worker/host-messaging.d.ts.map +1 -0
  845. package/dist/serve/worker/host-messaging.js +226 -0
  846. package/dist/serve/worker/host-messaging.js.map +1 -0
  847. package/dist/serve/worker/host.d.ts +36 -0
  848. package/dist/serve/worker/host.d.ts.map +1 -0
  849. package/dist/serve/worker/host.js +39 -0
  850. package/dist/serve/worker/host.js.map +1 -0
  851. package/dist/serve/worker/index.d.ts +22 -0
  852. package/dist/serve/worker/index.d.ts.map +1 -0
  853. package/dist/serve/worker/index.js +61 -0
  854. package/dist/serve/worker/index.js.map +1 -0
  855. package/dist/serve/worker/presence-timing.d.ts +14 -0
  856. package/dist/serve/worker/presence-timing.d.ts.map +1 -0
  857. package/dist/serve/worker/presence-timing.js +14 -0
  858. package/dist/serve/worker/presence-timing.js.map +1 -0
  859. package/dist/serve/worker/protocol.d.ts +1150 -0
  860. package/dist/serve/worker/protocol.d.ts.map +1 -0
  861. package/dist/serve/worker/protocol.js +228 -0
  862. package/dist/serve/worker/protocol.js.map +1 -0
  863. package/dist/serve/worker/serve-init.d.ts +201 -0
  864. package/dist/serve/worker/serve-init.d.ts.map +1 -0
  865. package/dist/serve/worker/serve-init.js +579 -0
  866. package/dist/serve/worker/serve-init.js.map +1 -0
  867. package/dist/serve/worker/service-worker-channel.d.ts +23 -0
  868. package/dist/serve/worker/service-worker-channel.d.ts.map +1 -0
  869. package/dist/serve/worker/service-worker-channel.js +9 -0
  870. package/dist/serve/worker/service-worker-channel.js.map +1 -0
  871. package/dist/serve/worker/service-worker-relay.d.ts +22 -0
  872. package/dist/serve/worker/service-worker-relay.d.ts.map +1 -0
  873. package/dist/serve/worker/service-worker-relay.js +63 -0
  874. package/dist/serve/worker/service-worker-relay.js.map +1 -0
  875. package/dist/serve/writer-lock.d.ts +32 -0
  876. package/dist/serve/writer-lock.d.ts.map +1 -0
  877. package/dist/serve/writer-lock.js +43 -0
  878. package/dist/serve/writer-lock.js.map +1 -0
  879. package/dist/verify/cases.d.ts +37 -0
  880. package/dist/verify/cases.d.ts.map +1 -0
  881. package/dist/verify/cases.js +173 -0
  882. package/dist/verify/cases.js.map +1 -0
  883. package/dist/verify/fixture.d.ts +100 -0
  884. package/dist/verify/fixture.d.ts.map +1 -0
  885. package/dist/verify/fixture.js +156 -0
  886. package/dist/verify/fixture.js.map +1 -0
  887. package/dist/verify/index.d.ts +102 -0
  888. package/dist/verify/index.d.ts.map +1 -0
  889. package/dist/verify/index.js +318 -0
  890. package/dist/verify/index.js.map +1 -0
  891. package/dist/verify/tools.d.ts +7 -0
  892. package/dist/verify/tools.d.ts.map +1 -0
  893. package/dist/verify/tools.js +83 -0
  894. package/dist/verify/tools.js.map +1 -0
  895. package/dist/version/compat-target.d.ts +18 -0
  896. package/dist/version/compat-target.d.ts.map +1 -0
  897. package/dist/version/compat-target.js +18 -0
  898. package/dist/version/compat-target.js.map +1 -0
  899. package/dist/vite.d.ts +12 -0
  900. package/dist/vite.d.ts.map +1 -0
  901. package/dist/vite.js +16 -0
  902. package/dist/vite.js.map +1 -0
  903. package/package.json +144 -0
@@ -0,0 +1,383 @@
1
+ /**
2
+ * Bridge core — process-local state for forwarding MCP tool calls
3
+ * from external clients to the (one) connected sandbox peer in the
4
+ * browser. Transport-agnostic: the HTTP MCP server and the WS server
5
+ * both plug into this through `dispatch()` / `handleSandboxMessage()`
6
+ * / `registerSandboxPeer()`.
7
+ *
8
+ * Multi-tab is naive: last-connection-wins. New peer replaces the
9
+ * old, pending calls against the old peer reject with a clear error.
10
+ *
11
+ * Every tool call is forwarded over WS to the browser. The bridge does not
12
+ * execute data-plane tools itself; it acts as a relay with a tool-name
13
+ * allow-list pinned by the peer's `hello`.
14
+ */
15
+ import { randomUUID } from 'node:crypto';
16
+ import { NO_SANDBOX_ERROR_MESSAGE, NO_WORKER_RELAY_ERROR_MESSAGE, WORKER_RELAY_CAPABILITY, } from '../protocol.js';
17
+ /** Build the typed Error worker-op rejections carry. `denialContext` (spike
18
+ * gap 6) is re-attached when the wire error carried one, so the structured
19
+ * denial frame survives the bridge hop. */
20
+ function workerOpError(code, message, denialContext) {
21
+ const err = new Error(message);
22
+ err.code = code;
23
+ if (denialContext !== undefined)
24
+ err.denialContext = denialContext;
25
+ return err;
26
+ }
27
+ export function createBridge(opts) {
28
+ const project = opts.project ?? 'sandbox';
29
+ const version = opts.version;
30
+ const callTimeoutMs = opts.callTimeoutMs ?? 30_000;
31
+ const startedAt = new Date().toISOString();
32
+ // Per-process identity (see HealthReport.instanceId): the discovery pointer
33
+ // records this so a proxy can verify it reached THIS server, not a different
34
+ // sandbox squatting the same port on the other loopback family.
35
+ const instanceId = randomUUID();
36
+ const onToolEvent = opts.onToolEvent;
37
+ let peer = null;
38
+ const pending = new Map();
39
+ // ── worker relay state ──
40
+ // Generation counter: bumped on every peer registration. Inbound frames
41
+ // tagged with an older generation are stale (a replaced tab's socket) and
42
+ // must not resolve ops / deliver snaps registered under the new peer.
43
+ let generation = 0;
44
+ const workerPending = new Map();
45
+ // Subscription ownership lives on the bridge: entries survive peer churn
46
+ // and are re-issued to every newly registered relay-capable peer.
47
+ const workerSubs = new Map();
48
+ function failAllPending(reason) {
49
+ for (const call of pending.values()) {
50
+ clearTimeout(call.timer);
51
+ call.resolve({
52
+ ok: false,
53
+ summary: reason,
54
+ });
55
+ }
56
+ pending.clear();
57
+ for (const op of workerPending.values()) {
58
+ clearTimeout(op.timer);
59
+ op.reject(workerOpError('unavailable', reason));
60
+ }
61
+ workerPending.clear();
62
+ }
63
+ function peerHasRelay() {
64
+ return peer !== null && peer.capabilities.has(WORKER_RELAY_CAPABILITY);
65
+ }
66
+ function registerSandboxPeer(send, tools, sandboxId, capabilities = [], onReplaced) {
67
+ if (peer) {
68
+ // Last-wins: kick the old peer and reject its pending calls.
69
+ failAllPending('sandbox peer replaced by a newer connection');
70
+ // Tear the old peer down (the transport closes its socket). The
71
+ // browser's close handler tears down its relayed worker
72
+ // subscriptions — otherwise the replaced tab's SharedWorker
73
+ // listeners would keep posting snaps this bridge drops as
74
+ // stale-generation until the tab closed.
75
+ try {
76
+ peer.onReplaced?.();
77
+ }
78
+ catch {
79
+ // A failing transport hook must not block the new registration.
80
+ }
81
+ }
82
+ generation += 1;
83
+ const myPeer = {
84
+ send,
85
+ tools: new Set(tools),
86
+ sandboxId,
87
+ capabilities: new Set(capabilities),
88
+ onReplaced,
89
+ };
90
+ peer = myPeer;
91
+ // Re-issue every registered worker subscription to the new peer — the
92
+ // replay is cursor-free because each (re)subscribe delivers a fresh
93
+ // initial snapshot. That snapshot is a DUPLICATE whenever nothing
94
+ // changed while the peer churned, so `awaitingReissueSnap` arms the
95
+ // per-sub dedup (see WorkerSubEntry) — without it, tabs cycling through
96
+ // last-wins registration re-fire every consumer listener with
97
+ // byte-identical data on every registration.
98
+ if (myPeer.capabilities.has(WORKER_RELAY_CAPABILITY)) {
99
+ for (const [subId, entry] of workerSubs) {
100
+ entry.awaitingReissueSnap = true;
101
+ try {
102
+ myPeer.send({ type: 'worker-sub', subId, sub: entry.sub });
103
+ }
104
+ catch {
105
+ // Socket failure surfaces via the transport's close handler.
106
+ }
107
+ }
108
+ }
109
+ return () => {
110
+ if (peer === myPeer) {
111
+ failAllPending(NO_SANDBOX_ERROR_MESSAGE);
112
+ peer = null;
113
+ }
114
+ };
115
+ }
116
+ function isSandboxConnected() {
117
+ return peer !== null;
118
+ }
119
+ function peerGeneration() {
120
+ return generation;
121
+ }
122
+ function toolNames() {
123
+ return peer ? Array.from(peer.tools).sort() : [];
124
+ }
125
+ async function dispatch(name, args) {
126
+ const startedAtMs = Date.now();
127
+ let result;
128
+ try {
129
+ result = await dispatchSandbox(name, args);
130
+ }
131
+ catch (err) {
132
+ result = {
133
+ ok: false,
134
+ summary: err instanceof Error ? err.message : String(err),
135
+ };
136
+ }
137
+ if (onToolEvent) {
138
+ try {
139
+ onToolEvent({
140
+ timestamp: new Date(startedAtMs).toISOString(),
141
+ mode: 'sandbox',
142
+ project,
143
+ tool: name,
144
+ args,
145
+ result,
146
+ durationMs: Date.now() - startedAtMs,
147
+ });
148
+ }
149
+ catch {
150
+ // Audit-log failures must not break tool dispatch.
151
+ }
152
+ }
153
+ return result;
154
+ }
155
+ function dispatchSandbox(name, args) {
156
+ if (!peer) {
157
+ return Promise.resolve({ ok: false, summary: NO_SANDBOX_ERROR_MESSAGE });
158
+ }
159
+ if (!peer.tools.has(name)) {
160
+ return Promise.resolve({
161
+ ok: false,
162
+ summary: `tool '${name}' is not registered with the connected sandbox peer`,
163
+ });
164
+ }
165
+ return new Promise((resolve) => {
166
+ const id = randomUUID();
167
+ const timer = setTimeout(() => {
168
+ if (pending.has(id)) {
169
+ pending.delete(id);
170
+ resolve({
171
+ ok: false,
172
+ summary: `sandbox call timed out after ${callTimeoutMs}ms (tool: ${name})`,
173
+ });
174
+ }
175
+ }, callTimeoutMs);
176
+ pending.set(id, { id, resolve, timer, tool: name });
177
+ try {
178
+ peer.send({
179
+ type: 'tool-call',
180
+ id,
181
+ name,
182
+ args,
183
+ });
184
+ }
185
+ catch (err) {
186
+ clearTimeout(timer);
187
+ pending.delete(id);
188
+ resolve({
189
+ ok: false,
190
+ summary: `failed to send tool call to sandbox: ${err instanceof Error ? err.message : String(err)}`,
191
+ });
192
+ }
193
+ });
194
+ }
195
+ function dispatchWorkerOp(op) {
196
+ if (!peer) {
197
+ return Promise.reject(workerOpError('unavailable', NO_SANDBOX_ERROR_MESSAGE));
198
+ }
199
+ if (!peerHasRelay()) {
200
+ return Promise.reject(workerOpError('unimplemented', NO_WORKER_RELAY_ERROR_MESSAGE));
201
+ }
202
+ return new Promise((resolve, reject) => {
203
+ const id = randomUUID();
204
+ const timer = setTimeout(() => {
205
+ if (workerPending.has(id)) {
206
+ workerPending.delete(id);
207
+ reject(workerOpError('deadline-exceeded', `sandbox worker op timed out after ${callTimeoutMs}ms (op: ${op.method})`));
208
+ }
209
+ }, callTimeoutMs);
210
+ workerPending.set(id, { resolve, reject, timer, method: op.method });
211
+ try {
212
+ peer.send({ type: 'worker-op', id, op });
213
+ }
214
+ catch (err) {
215
+ clearTimeout(timer);
216
+ workerPending.delete(id);
217
+ reject(workerOpError('unavailable', `failed to send worker op to sandbox: ${err instanceof Error ? err.message : String(err)}`));
218
+ }
219
+ });
220
+ }
221
+ function subscribeWorker(sub, onSnap) {
222
+ const subId = randomUUID();
223
+ workerSubs.set(subId, { sub, onSnap });
224
+ if (peerHasRelay()) {
225
+ try {
226
+ peer.send({ type: 'worker-sub', subId, sub });
227
+ }
228
+ catch {
229
+ // Socket failure surfaces via the transport's close handler; the
230
+ // registry entry replays on the next peer registration.
231
+ }
232
+ }
233
+ // No peer (or a relay-less peer) is NOT an error here: the registry is
234
+ // replayed on the next registration, mirroring RTDB's offline semantics.
235
+ return () => {
236
+ if (!workerSubs.delete(subId))
237
+ return;
238
+ if (peerHasRelay()) {
239
+ try {
240
+ peer.send({ type: 'worker-unsub', subId });
241
+ }
242
+ catch { }
243
+ }
244
+ };
245
+ }
246
+ function handleSandboxMessage(msg, msgGeneration) {
247
+ // Frames from a REPLACED peer's socket must not act on the current
248
+ // peer's state (subscriptions make stale delivery likely on tab
249
+ // refresh: the old tab's worker port keeps firing until its WS dies).
250
+ const stale = msgGeneration !== undefined && msgGeneration !== generation;
251
+ switch (msg.type) {
252
+ case 'worker-res': {
253
+ if (stale)
254
+ return;
255
+ const res = msg;
256
+ const op = workerPending.get(res.id);
257
+ if (!op)
258
+ return; // late or unknown — drop silently
259
+ clearTimeout(op.timer);
260
+ workerPending.delete(res.id);
261
+ if (res.ok) {
262
+ op.resolve(res.value);
263
+ }
264
+ else {
265
+ op.reject(workerOpError(res.error?.code ?? 'unknown', res.error?.message ?? 'unknown sandbox error', res.error?.denialContext));
266
+ }
267
+ return;
268
+ }
269
+ case 'worker-snap': {
270
+ if (stale)
271
+ return;
272
+ const snap = msg;
273
+ const entry = workerSubs.get(snap.subId);
274
+ if (!entry)
275
+ return; // unsubscribed or unknown — drop silently
276
+ // Re-issue dedup (see WorkerSubEntry.awaitingReissueSnap): the first
277
+ // snap after a peer (re)registration is the re-established listener's
278
+ // initial snapshot — suppress it when byte-identical to what the
279
+ // consumer already holds. Values are JSON-clean (they crossed the WS
280
+ // legs) and produced by the same serializer each time, so string
281
+ // equality is exact. One-frame window: the flag clears on the first
282
+ // snap either way, keeping steady-state delivery 1:1.
283
+ const json = JSON.stringify(snap.value);
284
+ const duplicate = entry.awaitingReissueSnap === true && json === entry.lastDeliveredJson;
285
+ entry.awaitingReissueSnap = false;
286
+ entry.lastDeliveredJson = json;
287
+ if (duplicate)
288
+ return;
289
+ try {
290
+ entry.onSnap(snap.value);
291
+ }
292
+ catch {
293
+ // Consumer callback failures must not break the relay loop.
294
+ }
295
+ return;
296
+ }
297
+ default:
298
+ break;
299
+ }
300
+ switch (msg.type) {
301
+ case 'tool-result': {
302
+ const response = msg;
303
+ const call = pending.get(response.id);
304
+ if (!call)
305
+ return; // late or unknown — drop silently
306
+ clearTimeout(call.timer);
307
+ pending.delete(response.id);
308
+ if (response.ok && response.result) {
309
+ call.resolve({
310
+ ok: response.result.ok,
311
+ summary: response.result.summary,
312
+ data: response.result.data,
313
+ });
314
+ }
315
+ else {
316
+ const error = response.error;
317
+ call.resolve({
318
+ ok: false,
319
+ summary: error?.message ?? 'unknown sandbox error',
320
+ });
321
+ }
322
+ break;
323
+ }
324
+ case 'pong': {
325
+ // Keepalive ack; no-op.
326
+ break;
327
+ }
328
+ case 'ping': {
329
+ // Browser-initiated ping; echo back.
330
+ if (peer) {
331
+ peer.send({ type: 'pong', id: msg.id });
332
+ }
333
+ break;
334
+ }
335
+ case 'hello': {
336
+ // Re-hello after reconnect would arrive here, but the
337
+ // registration path is owned by the transport layer (it sees
338
+ // the WS first). Ignore.
339
+ break;
340
+ }
341
+ default:
342
+ break;
343
+ }
344
+ }
345
+ function health() {
346
+ return {
347
+ status: 'ok',
348
+ mode: 'sandbox',
349
+ project,
350
+ sandboxConnected: peer !== null,
351
+ version,
352
+ startedAt,
353
+ instanceId,
354
+ };
355
+ }
356
+ function recordToolEvent(event) {
357
+ if (!onToolEvent)
358
+ return;
359
+ try {
360
+ onToolEvent(event);
361
+ }
362
+ catch {
363
+ // Audit-log failures must not break tool dispatch.
364
+ }
365
+ }
366
+ return {
367
+ project,
368
+ version,
369
+ startedAt,
370
+ instanceId,
371
+ recordToolEvent,
372
+ registerSandboxPeer,
373
+ isSandboxConnected,
374
+ peerGeneration,
375
+ toolNames,
376
+ dispatch,
377
+ dispatchWorkerOp,
378
+ subscribeWorker,
379
+ handleSandboxMessage,
380
+ health,
381
+ };
382
+ }
383
+ //# sourceMappingURL=bridge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bridge.js","sourceRoot":"","sources":["../../../src/bridge/server/bridge.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ import { type LocalSandbox } from 'pyric/sandbox';
2
+ import { type LocalBridgeOptions } from './local-bridge.js';
3
+ /** Where the headless sandbox snapshot is persisted (relative to the project
4
+ * dir). Deliberately separate from serve's `state.json` (different format). */
5
+ export declare const HEADLESS_STATE_RELATIVE: string;
6
+ /**
7
+ * Build the headless MCP server around an in-process sandbox. Pure: no I/O and
8
+ * no transport, so callers (and tests) can drive it however they like. Mirrors
9
+ * the served bridge's construction (forwarded data-plane + in-process rules
10
+ * tools), with `dispatch` bound to the local sandbox instead of a ws peer.
11
+ */
12
+ export declare function buildHeadlessMcpServer(sandbox: LocalSandbox, opts?: LocalBridgeOptions): import("@modelcontextprotocol/sdk/server/mcp").McpServer;
13
+ /**
14
+ * Load `<cwd>/firestore.rules` into the sandbox when present. Returns the path
15
+ * it loaded, or null if there was no rules file. Without rules, rules-enforcing
16
+ * (`as:{uid}`) ops fall back to the sandbox's default; admin ops are unaffected.
17
+ */
18
+ export declare function loadProjectRules(sandbox: LocalSandbox, cwd: string): string | null;
19
+ /**
20
+ * Persist the sandbox to `<cwd>/.pyric/state/headless.json` using the v3 bundle
21
+ * codec (the same `serializeToBuckets` + `bundleRecords` the worker uses). Atomic
22
+ * tmp+rename so a crash mid-write never truncates the live file.
23
+ */
24
+ export declare function saveSandboxSnapshot(sandbox: LocalSandbox, cwd: string): void;
25
+ /**
26
+ * Restore the sandbox from the headless snapshot file if present (a clobber via
27
+ * `loadSnapshot`). Returns the restored doc count, or null when there is no file.
28
+ */
29
+ export declare function loadSandboxSnapshot(sandbox: LocalSandbox, cwd: string): number | null;
30
+ /**
31
+ * Run the headless MCP server over stdio. Loads `.pyric/state/headless.json` on
32
+ * start, debounces a save after each dispatch, and flushes on shutdown. Resolves
33
+ * with an exit code when the stdio transport closes (the editor disconnects).
34
+ */
35
+ export declare function runHeadlessMcp(cwd?: string): Promise<number>;
36
+ //# sourceMappingURL=headless.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"headless.d.ts","sourceRoot":"","sources":["../../../src/bridge/server/headless.ts"],"names":[],"mappings":"AAoBA,OAAO,EAML,KAAK,YAAY,EAClB,MAAM,eAAe,CAAC;AAKvB,OAAO,EAAqB,KAAK,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAE/E;gFACgF;AAChF,eAAO,MAAM,uBAAuB,QAA2C,CAAC;AAEhF;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,YAAY,EAAE,IAAI,CAAC,EAAE,kBAAkB,4DAGtF;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAKlF;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAQ5E;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAMrF;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,GAAG,GAAE,MAAsB,GAAG,OAAO,CAAC,MAAM,CAAC,CAkEjF"}
@@ -0,0 +1,142 @@
1
+ /**
2
+ * Headless MCP server: runs the pyric sandbox IN this process (no browser, no
3
+ * serve) and exposes the SAME tool surface the bridge advertises, over stdio.
4
+ *
5
+ * This is the zero-setup half of the hybrid MCP server
6
+ * (design rationale): when no `pyric dev --bridge` is running to
7
+ * attach to, the MCP server hosts its own sandbox. The tool surface is identical
8
+ * to the served bridge by construction (`buildSandboxDispatcher` is the shared
9
+ * source pinned by `tool-parity.test.ts`), including the per-identity `as` arg.
10
+ *
11
+ * Persistence (Phase 1b) uses the v3 bundle codec the worker already uses for
12
+ * transfer/branches (`serializeToBuckets` + `bundleRecords`). It writes its OWN
13
+ * `.pyric/state/headless.json`, NOT serve's `state.json` (which currently uses a
14
+ * different on-disk envelope, and carries a controller-blob version that has
15
+ * drifted from pyric's snapshot SCHEMA_VERSION). Unifying the two formats so a
16
+ * headless session and a `pyric dev` session can share one file is a tracked
17
+ * design item, not done here.
18
+ */
19
+ import { existsSync, readFileSync, writeFileSync, mkdirSync, renameSync } from 'node:fs';
20
+ import { join, dirname } from 'node:path';
21
+ import { initializeSandbox, serializeToBuckets, bundleRecords, parseBundle, deserializeFromBuckets, } from 'pyric/sandbox';
22
+ import { setRules } from 'pyric/sandbox/firestore';
23
+ import { buildMcpServer } from './mcp.js';
24
+ import { getDefaultMcpToolSurface } from './mcp-contract.js';
25
+ import { createLocalBridge } from './local-bridge.js';
26
+ /** Where the headless sandbox snapshot is persisted (relative to the project
27
+ * dir). Deliberately separate from serve's `state.json` (different format). */
28
+ export const HEADLESS_STATE_RELATIVE = join('.pyric', 'state', 'headless.json');
29
+ /**
30
+ * Build the headless MCP server around an in-process sandbox. Pure: no I/O and
31
+ * no transport, so callers (and tests) can drive it however they like. Mirrors
32
+ * the served bridge's construction (forwarded data-plane + in-process rules
33
+ * tools), with `dispatch` bound to the local sandbox instead of a ws peer.
34
+ */
35
+ export function buildHeadlessMcpServer(sandbox, opts) {
36
+ const bridge = createLocalBridge(sandbox, opts);
37
+ return buildMcpServer(bridge, getDefaultMcpToolSurface());
38
+ }
39
+ /**
40
+ * Load `<cwd>/firestore.rules` into the sandbox when present. Returns the path
41
+ * it loaded, or null if there was no rules file. Without rules, rules-enforcing
42
+ * (`as:{uid}`) ops fall back to the sandbox's default; admin ops are unaffected.
43
+ */
44
+ export function loadProjectRules(sandbox, cwd) {
45
+ const rulesPath = join(cwd, 'firestore.rules');
46
+ if (!existsSync(rulesPath))
47
+ return null;
48
+ setRules(sandbox, readFileSync(rulesPath, 'utf8'));
49
+ return rulesPath;
50
+ }
51
+ /**
52
+ * Persist the sandbox to `<cwd>/.pyric/state/headless.json` using the v3 bundle
53
+ * codec (the same `serializeToBuckets` + `bundleRecords` the worker uses). Atomic
54
+ * tmp+rename so a crash mid-write never truncates the live file.
55
+ */
56
+ export function saveSandboxSnapshot(sandbox, cwd) {
57
+ const snap = sandbox.snapshot();
58
+ const bundle = bundleRecords(serializeToBuckets(snap.firestore, snap.services, 0));
59
+ const path = join(cwd, HEADLESS_STATE_RELATIVE);
60
+ mkdirSync(dirname(path), { recursive: true });
61
+ const tmp = `${path}.tmp-${process.pid}`;
62
+ writeFileSync(tmp, bundle, 'utf8');
63
+ renameSync(tmp, path);
64
+ }
65
+ /**
66
+ * Restore the sandbox from the headless snapshot file if present (a clobber via
67
+ * `loadSnapshot`). Returns the restored doc count, or null when there is no file.
68
+ */
69
+ export function loadSandboxSnapshot(sandbox, cwd) {
70
+ const path = join(cwd, HEADLESS_STATE_RELATIVE);
71
+ if (!existsSync(path))
72
+ return null;
73
+ const snap = deserializeFromBuckets(parseBundle(readFileSync(path, 'utf8')));
74
+ sandbox.loadSnapshot(snap);
75
+ return Object.keys(snap.firestore).length;
76
+ }
77
+ /**
78
+ * Run the headless MCP server over stdio. Loads `.pyric/state/headless.json` on
79
+ * start, debounces a save after each dispatch, and flushes on shutdown. Resolves
80
+ * with an exit code when the stdio transport closes (the editor disconnects).
81
+ */
82
+ export async function runHeadlessMcp(cwd = process.cwd()) {
83
+ const log = (m) => {
84
+ process.stderr.write(`[pyric mcp headless] ${m}\n`);
85
+ };
86
+ const sandbox = initializeSandbox();
87
+ const rulesPath = loadProjectRules(sandbox, cwd);
88
+ log(rulesPath ? `rules loaded from ${rulesPath}` : `no firestore.rules found in ${cwd}`);
89
+ const restored = loadSandboxSnapshot(sandbox, cwd);
90
+ if (restored !== null)
91
+ log(`restored ${restored} docs from ${join(cwd, HEADLESS_STATE_RELATIVE)}`);
92
+ // Debounced persistence: a burst of writes collapses to one flush; the final
93
+ // flush runs on shutdown so a clean disconnect never loses the tail.
94
+ let saveTimer = null;
95
+ const flush = () => {
96
+ if (saveTimer) {
97
+ clearTimeout(saveTimer);
98
+ saveTimer = null;
99
+ }
100
+ try {
101
+ saveSandboxSnapshot(sandbox, cwd);
102
+ }
103
+ catch (e) {
104
+ log(`persist failed: ${e instanceof Error ? e.message : String(e)}`);
105
+ }
106
+ };
107
+ const scheduleSave = () => {
108
+ if (saveTimer)
109
+ clearTimeout(saveTimer);
110
+ saveTimer = setTimeout(flush, 750);
111
+ };
112
+ const server = buildHeadlessMcpServer(sandbox, { onAfterDispatch: scheduleSave });
113
+ const { StdioServerTransport } = await import('@modelcontextprotocol/sdk/server/stdio.js');
114
+ const transport = new StdioServerTransport();
115
+ return await new Promise((resolve) => {
116
+ let stopping = false;
117
+ const onStdinEnd = () => stop(0);
118
+ const stop = (code) => {
119
+ if (stopping)
120
+ return;
121
+ stopping = true;
122
+ process.stdin.off('end', onStdinEnd);
123
+ flush();
124
+ void server.close().then(() => resolve(code), (e) => {
125
+ log(`shutdown failed: ${e instanceof Error ? e.message : String(e)}`);
126
+ resolve(code === 0 ? 1 : code);
127
+ });
128
+ };
129
+ transport.onclose = () => stop(0);
130
+ // StdioServerTransport 1.29 no longer reports stdin EOF through onclose.
131
+ // Editors close the pipe to end an MCP session, so own that lifecycle
132
+ // signal explicitly and then close the server/transport above.
133
+ process.stdin.once('end', onStdinEnd);
134
+ process.once('SIGINT', () => stop(0));
135
+ process.once('SIGTERM', () => stop(0));
136
+ void server.connect(transport).then(() => log(`headless sandbox MCP server ready (persisting to ${HEADLESS_STATE_RELATIVE})`), (e) => {
137
+ log(`failed to start: ${e instanceof Error ? e.message : String(e)}`);
138
+ resolve(1);
139
+ });
140
+ });
141
+ }
142
+ //# sourceMappingURL=headless.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"headless.js","sourceRoot":"","sources":["../../../src/bridge/server/headless.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Tiny JSON-Schema → Zod shape converter. Handles only the shapes
3
+ * pyric's tool factories actually produce (string, number, boolean,
4
+ * object, array, enum, plus untyped catch-all). Anything outside this
5
+ * grammar becomes `z.any()` — better to under-validate than refuse to
6
+ * register a tool.
7
+ *
8
+ * The MCP SDK's `server.tool()` / `server.registerTool()` insist on
9
+ * Zod schemas for input validation. Pyric's tool definitions are
10
+ * plain JSON Schema (matching the inline shape in
11
+ * `packages/pyric/src/rules/tools.ts`), so the bridge converts
12
+ * just-in-time when registering each tool with the MCP server.
13
+ */
14
+ import { type ZodRawShape } from 'zod';
15
+ type JsonSchemaObject = {
16
+ type?: string | string[];
17
+ description?: string;
18
+ properties?: Record<string, JsonSchemaObject>;
19
+ items?: JsonSchemaObject;
20
+ required?: string[];
21
+ enum?: unknown[];
22
+ additionalProperties?: boolean | JsonSchemaObject;
23
+ [k: string]: unknown;
24
+ };
25
+ /**
26
+ * Convert a JSON-Schema-of-an-object into a Zod raw shape suitable
27
+ * for passing to `server.tool(name, description, shape, handler)`.
28
+ *
29
+ * Behaviour:
30
+ * - Empty / no `properties` returns `{}` (valid for parameterless tools).
31
+ * - Each property becomes a Zod schema chosen from its `type`.
32
+ * - Properties NOT in `required` are made `.optional()`.
33
+ * - Description metadata is attached via `.describe()` for MCP surfacing.
34
+ */
35
+ export declare function jsonSchemaToZodShape(schema: JsonSchemaObject): ZodRawShape;
36
+ export {};
37
+ //# sourceMappingURL=json-schema-to-zod.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-schema-to-zod.d.ts","sourceRoot":"","sources":["../../../src/bridge/server/json-schema-to-zod.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAK,KAAK,WAAW,EAAmB,MAAM,KAAK,CAAC;AAE3D,KAAK,gBAAgB,GAAG;IACtB,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAC9C,KAAK,CAAC,EAAE,gBAAgB,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC;IACjB,oBAAoB,CAAC,EAAE,OAAO,GAAG,gBAAgB,CAAC;IAClD,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CACtB,CAAC;AAEF;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,gBAAgB,GAAG,WAAW,CAe1E"}