@pyric/cli 0.1.0-alpha.11 → 0.1.0-alpha.13
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.
- package/dist/cli/serve.js +4 -4
- package/dist/cli/serve.js.map +1 -1
- package/dist/conformance/.generated/can-i-use-browser.d.ts.map +1 -1
- package/dist/conformance/.generated/can-i-use-browser.js +1 -1
- package/dist/conformance/.generated/can-i-use-browser.js.map +1 -1
- package/dist/conformance/.generated/can-i-use.d.ts.map +1 -1
- package/dist/conformance/.generated/can-i-use.js +2 -2
- package/dist/conformance/.generated/can-i-use.js.map +1 -1
- package/dist/serve/bundler.d.ts +13 -8
- package/dist/serve/bundler.d.ts.map +1 -1
- package/dist/serve/bundler.js +31 -36
- package/dist/serve/bundler.js.map +1 -1
- package/dist/serve/docs-ui/docs/_rhythm/index.html +1 -1
- package/dist/serve/docs-ui/docs/agent/set-up-your-agent/index.html +1 -1
- package/dist/serve/docs-ui/docs/agent/watch-and-review/index.html +1 -1
- package/dist/serve/docs-ui/docs/agent/work-with-an-agent/index.html +1 -1
- package/dist/serve/docs-ui/docs/ai-compat/index.html +1 -1
- package/dist/serve/docs-ui/docs/api-reference/index.html +2 -2
- package/dist/serve/docs-ui/docs/api-reference.md +1 -1
- package/dist/serve/docs-ui/docs/app-compat/index.html +1 -1
- package/dist/serve/docs-ui/docs/auth-compat/index.html +1 -1
- package/dist/serve/docs-ui/docs/build/ai-logic/index.html +44 -22
- package/dist/serve/docs-ui/docs/build/ai-logic.md +69 -21
- package/dist/serve/docs-ui/docs/build/authentication/index.html +1 -1
- package/dist/serve/docs-ui/docs/build/cloud-firestore/index.html +1 -1
- package/dist/serve/docs-ui/docs/build/cloud-messaging/index.html +1 -1
- package/dist/serve/docs-ui/docs/build/cloud-storage/index.html +1 -1
- package/dist/serve/docs-ui/docs/build/realtime-database/index.html +1 -1
- package/dist/serve/docs-ui/docs/conformance-scores/index.html +1 -1
- package/dist/serve/docs-ui/docs/create-pyric-reference-api/index.html +1 -1
- package/dist/serve/docs-ui/docs/database-compat/index.html +1 -1
- package/dist/serve/docs-ui/docs/firestore-compat/index.html +1 -1
- package/dist/serve/docs-ui/docs/functions-rtdb-compat/index.html +1 -1
- package/dist/serve/docs-ui/docs/get-started/how-the-swap-works/index.html +2 -1
- package/dist/serve/docs-ui/docs/get-started/how-the-swap-works.md +2 -0
- package/dist/serve/docs-ui/docs/get-started/start-building/index.html +3 -2
- package/dist/serve/docs-ui/docs/get-started/start-building.md +3 -1
- package/dist/serve/docs-ui/docs/index.json +349 -29
- package/dist/serve/docs-ui/docs/messaging-compat/index.html +1 -1
- package/dist/serve/docs-ui/docs/observe/resolve-runtime-status/index.html +28 -0
- package/dist/serve/docs-ui/docs/observe/resolve-runtime-status.md +47 -0
- package/dist/serve/docs-ui/docs/observe/see-whats-happening/index.html +1 -1
- package/dist/serve/docs-ui/docs/observe/shape-your-data/index.html +1 -1
- package/dist/serve/docs-ui/docs/overview/index.html +1 -1
- package/dist/serve/docs-ui/docs/pyric-admin-app-reference-api/index.html +1 -1
- package/dist/serve/docs-ui/docs/pyric-admin-auth-reference-api/index.html +1 -1
- package/dist/serve/docs-ui/docs/pyric-admin-database-reference-api/index.html +1 -1
- package/dist/serve/docs-ui/docs/pyric-admin-firestore-reference-api/index.html +1 -1
- package/dist/serve/docs-ui/docs/pyric-admin-messaging-reference-api/index.html +916 -0
- package/dist/serve/docs-ui/docs/pyric-admin-messaging-reference-api.md +706 -0
- package/dist/serve/docs-ui/docs/pyric-admin-storage-reference-api/index.html +1 -1
- package/dist/serve/docs-ui/docs/pyric-ai-reference-api/index.html +1 -1
- package/dist/serve/docs-ui/docs/pyric-ai-scripting-reference-api/index.html +1 -1
- package/dist/serve/docs-ui/docs/pyric-app-reference-api/index.html +1 -1
- package/dist/serve/docs-ui/docs/pyric-auth-reference-api/index.html +1 -1
- package/dist/serve/docs-ui/docs/pyric-cli-assurance-browser-reference-api/index.html +1 -1
- package/dist/serve/docs-ui/docs/pyric-cli-assurance-reference-api/index.html +1 -1
- package/dist/serve/docs-ui/docs/pyric-cli-bridge-client-reference-api/index.html +1 -1
- package/dist/serve/docs-ui/docs/pyric-cli-bridge-reference-api/index.html +1 -1
- package/dist/serve/docs-ui/docs/pyric-cli-conformance-browser-reference-api/index.html +1 -1
- package/dist/serve/docs-ui/docs/pyric-cli-conformance-docs-reference-api/index.html +1 -1
- package/dist/serve/docs-ui/docs/pyric-cli-conformance-reference-api/index.html +1 -1
- package/dist/serve/docs-ui/docs/pyric-cli-credentials-node-reference-api/index.html +1 -1
- package/dist/serve/docs-ui/docs/pyric-cli-discover-reference-api/index.html +1 -1
- package/dist/serve/docs-ui/docs/pyric-cli-register-reference-api/index.html +1 -1
- package/dist/serve/docs-ui/docs/pyric-cli-remote-reference-api/index.html +1 -1
- package/dist/serve/docs-ui/docs/pyric-cli-serve-worker-reference-api/index.html +168 -76
- package/dist/serve/docs-ui/docs/pyric-cli-serve-worker-reference-api.md +156 -73
- package/dist/serve/docs-ui/docs/pyric-cli-verify-reference-api/index.html +1 -1
- package/dist/serve/docs-ui/docs/pyric-cli-vite-reference-api/index.html +11 -8
- package/dist/serve/docs-ui/docs/pyric-cli-vite-reference-api.md +17 -4
- package/dist/serve/docs-ui/docs/pyric-database-reference-api/index.html +1 -1
- package/dist/serve/docs-ui/docs/pyric-firestore-reference-api/index.html +1 -1
- package/dist/serve/docs-ui/docs/pyric-messaging-reference-api/index.html +1 -1
- package/dist/serve/docs-ui/docs/pyric-messaging-sw-reference-api/index.html +1 -1
- package/dist/serve/docs-ui/docs/pyric-rules-reference-api/index.html +1 -1
- package/dist/serve/docs-ui/docs/pyric-sandbox-database-reference-api/index.html +1 -1
- package/dist/serve/docs-ui/docs/pyric-sandbox-firestore-reference-api/index.html +1 -1
- package/dist/serve/docs-ui/docs/pyric-sandbox-reference-api/index.html +37 -14
- package/dist/serve/docs-ui/docs/pyric-sandbox-reference-api.md +28 -8
- package/dist/serve/docs-ui/docs/pyric-storage-reference-api/index.html +1 -1
- package/dist/serve/docs-ui/docs/pyric-ui-agents-reference-api/index.html +1 -1
- package/dist/serve/docs-ui/docs/pyric-ui-auth-hooks-reference-api/index.html +1 -1
- package/dist/serve/docs-ui/docs/pyric-ui-auth-reference-api/index.html +1 -1
- package/dist/serve/docs-ui/docs/pyric-ui-events-hooks-reference-api/index.html +1 -1
- package/dist/serve/docs-ui/docs/pyric-ui-events-reference-api/index.html +1 -1
- package/dist/serve/docs-ui/docs/pyric-ui-firestore-hooks-reference-api/index.html +1 -1
- package/dist/serve/docs-ui/docs/pyric-ui-firestore-reference-api/index.html +1 -1
- package/dist/serve/docs-ui/docs/pyric-ui-primitives-reference-api/index.html +1 -1
- package/dist/serve/docs-ui/docs/pyric-ui-rtdb-reference-api/index.html +1 -1
- package/dist/serve/docs-ui/docs/pyric-ui-rules-hooks-reference-api/index.html +1 -1
- package/dist/serve/docs-ui/docs/pyric-ui-rules-reference-api/index.html +1 -1
- package/dist/serve/docs-ui/docs/pyric-ui-storage-hooks-reference-api/index.html +1 -1
- package/dist/serve/docs-ui/docs/pyric-ui-storage-reference-api/index.html +1 -1
- package/dist/serve/docs-ui/docs/pyric-ui-traffic-hooks-reference-api/index.html +1 -1
- package/dist/serve/docs-ui/docs/pyric-ui-traffic-reference-api/index.html +1 -1
- package/dist/serve/docs-ui/docs/rules-compat/index.html +1 -1
- package/dist/serve/docs-ui/docs/secure/audit-your-rules/index.html +1 -1
- package/dist/serve/docs-ui/docs/secure/firestore-rules-limits/index.html +1 -1
- package/dist/serve/docs-ui/docs/secure/read-a-denial/index.html +1 -1
- package/dist/serve/docs-ui/docs/secure/rtdb-rules-in-typescript/index.html +1 -1
- package/dist/serve/docs-ui/docs/secure/rules-standard-library/index.html +1 -1
- package/dist/serve/docs-ui/docs/secure/secure-it-with-rules/index.html +1 -1
- package/dist/serve/docs-ui/docs/secure/simulate-and-lint/index.html +1 -1
- package/dist/serve/docs-ui/docs/secure/write-a-rules-test-suite/index.html +1 -1
- package/dist/serve/docs-ui/docs/ship/ship-to-production/index.html +1 -1
- package/dist/serve/docs-ui/docs/ship/test-in-node/index.html +1 -1
- package/dist/serve/docs-ui/docs/storage-compat/index.html +1 -1
- package/dist/serve/docs-ui/docs/trust/how-we-know-it-matches-firebase/index.html +1 -1
- package/dist/serve/docs-ui/docs/trust/versioning-and-compatibility/index.html +1 -1
- package/dist/serve/docs-ui/docs/tutorial/index.html +429 -0
- package/dist/serve/docs-ui/docs/tutorial.md +701 -0
- package/dist/serve/docs-ui/llms.txt +3 -1
- package/dist/serve/entries/init.d.ts.map +1 -1
- package/dist/serve/entries/init.js +3 -0
- package/dist/serve/entries/init.js.map +1 -1
- package/dist/serve/entries/runtime.d.ts.map +1 -1
- package/dist/serve/entries/runtime.js +20 -5
- package/dist/serve/entries/runtime.js.map +1 -1
- package/dist/serve/entries/worker-runtime.d.ts +2 -2
- package/dist/serve/entries/worker-runtime.d.ts.map +1 -1
- package/dist/serve/entries/worker-runtime.js +45 -10
- package/dist/serve/entries/worker-runtime.js.map +1 -1
- package/dist/serve/runtime/chip-config.d.ts +19 -0
- package/dist/serve/runtime/chip-config.d.ts.map +1 -0
- package/dist/serve/runtime/chip-config.js +19 -0
- package/dist/serve/runtime/chip-config.js.map +1 -0
- package/dist/serve/runtime/chip-install.d.ts +10 -0
- package/dist/serve/runtime/chip-install.d.ts.map +1 -0
- package/dist/serve/runtime/chip-install.js +15 -0
- package/dist/serve/runtime/chip-install.js.map +1 -0
- package/dist/serve/runtime/chip.d.ts +17 -0
- package/dist/serve/runtime/chip.d.ts.map +1 -0
- package/dist/serve/runtime/chip.js +257 -0
- package/dist/serve/runtime/chip.js.map +1 -0
- package/dist/serve/runtime/manifest.d.ts +22 -0
- package/dist/serve/runtime/manifest.d.ts.map +1 -0
- package/dist/serve/runtime/manifest.js +20 -0
- package/dist/serve/runtime/manifest.js.map +1 -0
- package/dist/serve/runtime/status.d.ts +49 -0
- package/dist/serve/runtime/status.d.ts.map +1 -0
- package/dist/serve/runtime/status.js +164 -0
- package/dist/serve/runtime/status.js.map +1 -0
- package/dist/serve/runtime/worker-connection.d.ts +4 -0
- package/dist/serve/runtime/worker-connection.d.ts.map +1 -0
- package/dist/serve/runtime/worker-connection.js +11 -0
- package/dist/serve/runtime/worker-connection.js.map +1 -0
- package/dist/serve/runtime/worker-generation.d.ts +14 -0
- package/dist/serve/runtime/worker-generation.d.ts.map +1 -0
- package/dist/serve/runtime/worker-generation.js +56 -0
- package/dist/serve/runtime/worker-generation.js.map +1 -0
- package/dist/serve/runtime/worker-replacement.d.ts +18 -0
- package/dist/serve/runtime/worker-replacement.d.ts.map +1 -0
- package/dist/serve/runtime/worker-replacement.js +29 -0
- package/dist/serve/runtime/worker-replacement.js.map +1 -0
- package/dist/serve/standalone-assets.d.ts +2 -2
- package/dist/serve/standalone-assets.d.ts.map +1 -1
- package/dist/serve/standalone-assets.js +1 -1
- package/dist/serve/standalone-assets.js.map +1 -1
- package/dist/serve/studio-ui/assets/{RulesCodeEditor-CxVYcZXw.js → RulesCodeEditor-BDlH-5lp.js} +1 -1
- package/dist/serve/studio-ui/assets/{index-cpSfgQ7H.js → index-Bf9SSE8L.js} +5 -5
- package/dist/serve/studio-ui/assets/{seed-DeuFKi4J.js → seed-D_UjxfOU.js} +1 -1
- package/dist/serve/studio-ui/index.html +1 -1
- package/dist/serve/vite-ai-config.d.ts +25 -0
- package/dist/serve/vite-ai-config.d.ts.map +1 -0
- package/dist/serve/vite-ai-config.js +45 -0
- package/dist/serve/vite-ai-config.js.map +1 -0
- package/dist/serve/vite-plugin.d.ts +17 -36
- package/dist/serve/vite-plugin.d.ts.map +1 -1
- package/dist/serve/vite-plugin.js +38 -57
- package/dist/serve/vite-plugin.js.map +1 -1
- package/dist/serve/vite-rules-source.d.ts +8 -0
- package/dist/serve/vite-rules-source.d.ts.map +1 -0
- package/dist/serve/vite-rules-source.js +23 -0
- package/dist/serve/vite-rules-source.js.map +1 -0
- package/dist/serve/vite-worker-runtime.d.ts +20 -0
- package/dist/serve/vite-worker-runtime.d.ts.map +1 -0
- package/dist/serve/vite-worker-runtime.js +25 -0
- package/dist/serve/vite-worker-runtime.js.map +1 -0
- package/dist/serve/worker/client/connection.d.ts +7 -2
- package/dist/serve/worker/client/connection.d.ts.map +1 -1
- package/dist/serve/worker/client/connection.js +13 -16
- package/dist/serve/worker/client/connection.js.map +1 -1
- package/dist/serve/worker/client/core.d.ts +7 -0
- package/dist/serve/worker/client/core.d.ts.map +1 -1
- package/dist/serve/worker/client/core.js +28 -0
- package/dist/serve/worker/client/core.js.map +1 -1
- package/dist/serve/worker/client/runtime-control.d.ts +8 -0
- package/dist/serve/worker/client/runtime-control.d.ts.map +1 -0
- package/dist/serve/worker/client/runtime-control.js +11 -0
- package/dist/serve/worker/client/runtime-control.js.map +1 -0
- package/dist/serve/worker/entry.js +44 -2
- package/dist/serve/worker/entry.js.map +1 -1
- package/dist/serve/worker/host/core.js +1 -1
- package/dist/serve/worker/host/core.js.map +1 -1
- package/dist/serve/worker/host/firestore-writes.d.ts.map +1 -1
- package/dist/serve/worker/host/firestore-writes.js +3 -2
- package/dist/serve/worker/host/firestore-writes.js.map +1 -1
- package/dist/serve/worker/host/studio.js +1 -1
- package/dist/serve/worker/host/studio.js.map +1 -1
- package/dist/serve/worker/host-context.d.ts +1 -1
- package/dist/serve/worker/host-context.d.ts.map +1 -1
- package/dist/serve/worker/index.d.ts +2 -1
- package/dist/serve/worker/index.d.ts.map +1 -1
- package/dist/serve/worker/index.js +2 -1
- package/dist/serve/worker/index.js.map +1 -1
- package/dist/serve/worker/protocol.d.ts +15 -1
- package/dist/serve/worker/protocol.d.ts.map +1 -1
- package/dist/serve/worker/protocol.js +2 -2
- package/dist/serve/worker/protocol.js.map +1 -1
- package/dist/serve/worker/retirement.d.ts +21 -0
- package/dist/serve/worker/retirement.d.ts.map +1 -0
- package/dist/serve/worker/retirement.js +97 -0
- package/dist/serve/worker/retirement.js.map +1 -0
- package/dist/serve/worker/serve-init.d.ts.map +1 -1
- package/dist/serve/worker/serve-init.js +5 -6
- package/dist/serve/worker/serve-init.js.map +1 -1
- package/dist/vite.d.ts +1 -0
- package/dist/vite.d.ts.map +1 -1
- package/dist/vite.js.map +1 -1
- package/package.json +6 -4
- package/src/assurance/.generated/conformance-verdicts.ts +1090 -0
- package/src/assurance/attachment.ts +211 -0
- package/src/assurance/browser.ts +80 -0
- package/src/assurance/campaign.ts +496 -0
- package/src/assurance/capabilities.ts +446 -0
- package/src/assurance/cases.ts +43 -0
- package/src/assurance/index.ts +75 -0
- package/src/assurance/runner.ts +885 -0
- package/src/assurance/tool-names.ts +15 -0
- package/src/assurance/tools.ts +830 -0
- package/src/assurance/types.ts +352 -0
- package/src/assurance/validation.ts +434 -0
- package/src/bridge/client/bridge.ts +550 -0
- package/src/bridge/client/dispatch.ts +137 -0
- package/src/bridge/client.ts +45 -0
- package/src/bridge/protocol.ts +351 -0
- package/src/bridge/server/audit.ts +53 -0
- package/src/bridge/server/bridge.ts +597 -0
- package/src/bridge/server/headless.ts +160 -0
- package/src/bridge/server/json-schema-to-zod.ts +108 -0
- package/src/bridge/server/local-bridge.ts +66 -0
- package/src/bridge/server/logger.ts +50 -0
- package/src/bridge/server/mcp-contract.ts +93 -0
- package/src/bridge/server/mcp.ts +129 -0
- package/src/bridge/server/peer.ts +232 -0
- package/src/bridge/server/standalone.ts +347 -0
- package/src/bridge/server/tool-metadata.ts +99 -0
- package/src/bridge/server.ts +28 -0
- package/src/cli/can-i-use.ts +50 -0
- package/src/cli/cli.test.ts +493 -0
- package/src/cli/database-rules.ts +329 -0
- package/src/cli/dev-runner.ts +282 -0
- package/src/cli/firebase-json.ts +100 -0
- package/src/cli/firestore-indexes.ts +70 -0
- package/src/cli/index.ts +425 -0
- package/src/cli/init.ts +260 -0
- package/src/cli/mcp-proxy.ts +196 -0
- package/src/cli/parse-args.ts +80 -0
- package/src/cli/rules.ts +259 -0
- package/src/cli/scope.ts +67 -0
- package/src/cli/serve.ts +996 -0
- package/src/cli/service-commands.ts +73 -0
- package/src/cli/snapshot.ts +164 -0
- package/src/cli/storage-rules.ts +172 -0
- package/src/cli/verify.ts +416 -0
- package/src/conformance/.generated/can-i-use-browser.ts +113 -0
- package/src/conformance/.generated/can-i-use.ts +117 -0
- package/src/conformance/.generated/conformance-docs.ts +14 -0
- package/src/conformance/browser.ts +24 -0
- package/src/conformance/can-i-use-tool.ts +51 -0
- package/src/conformance/can-i-use.ts +18 -0
- package/src/conformance/docs.ts +8 -0
- package/src/conformance/index.ts +20 -0
- package/src/conformance/tools.ts +16 -0
- package/src/credentials/core/memoize-ttl.ts +142 -0
- package/src/credentials/core/types.ts +10 -0
- package/src/credentials/node/from-adc.ts +96 -0
- package/src/credentials/node/from-service-account.ts +133 -0
- package/src/credentials/node/index.ts +6 -0
- package/src/discover/concurrency.ts +127 -0
- package/src/discover/crawler-adapter.ts +142 -0
- package/src/discover/crawler.ts +1127 -0
- package/src/discover/credential-free.ts +27 -0
- package/src/discover/findCollectionGroup.ts +131 -0
- package/src/discover/firestore-source.ts +59 -0
- package/src/discover/index.ts +5 -0
- package/src/discover/merge.ts +523 -0
- package/src/discover/session.ts +402 -0
- package/src/discover/tools.ts +201 -0
- package/src/discover/types.ts +187 -0
- package/src/discover/wire.ts +324 -0
- package/src/functions-rtdb/child.ts +382 -0
- package/src/functions-rtdb/delivery.ts +7 -0
- package/src/functions-rtdb/discovery.ts +136 -0
- package/src/functions-rtdb/event.ts +64 -0
- package/src/functions-rtdb/execution.ts +111 -0
- package/src/functions-rtdb/in-memory-delivery.ts +40 -0
- package/src/functions-rtdb/project.ts +74 -0
- package/src/functions-rtdb/projection.ts +104 -0
- package/src/functions-rtdb/reference-pattern.ts +20 -0
- package/src/functions-rtdb/remote-delivery.ts +23 -0
- package/src/pkg-version.ts +49 -0
- package/src/register/esm-exports.ts +63 -0
- package/src/register/hooks.ts +30 -0
- package/src/register/index.ts +150 -0
- package/src/register/mapping.ts +33 -0
- package/src/remote/index.ts +1050 -0
- package/src/rtdb/crawl-snapshot.ts +118 -0
- package/src/rtdb/inspection.ts +137 -0
- package/src/rtdb/load-rules-document.ts +56 -0
- package/src/rtdb/rules-generation-tool.ts +38 -0
- package/src/rtdb/rules-json.ts +29 -0
- package/src/serve/activity-guard.ts +29 -0
- package/src/serve/activity-route.ts +164 -0
- package/src/serve/activity-warning.ts +26 -0
- package/src/serve/bridge-mount.ts +200 -0
- package/src/serve/bundler.ts +519 -0
- package/src/serve/capture-store.ts +65 -0
- package/src/serve/discovery.ts +199 -0
- package/src/serve/entries/ai.ts +292 -0
- package/src/serve/entries/app-backend.ts +4 -0
- package/src/serve/entries/app-client.ts +26 -0
- package/src/serve/entries/app-session-store.ts +47 -0
- package/src/serve/entries/app.ts +11 -0
- package/src/serve/entries/auth-helper-core.ts +181 -0
- package/src/serve/entries/auth-helper-dom.ts +134 -0
- package/src/serve/entries/auth-helper-runtime.ts +20 -0
- package/src/serve/entries/auth.ts +255 -0
- package/src/serve/entries/bridge-url.ts +31 -0
- package/src/serve/entries/database.ts +129 -0
- package/src/serve/entries/firestore.ts +232 -0
- package/src/serve/entries/init.ts +49 -0
- package/src/serve/entries/keepalive.ts +46 -0
- package/src/serve/entries/messaging-sw.ts +75 -0
- package/src/serve/entries/messaging.ts +96 -0
- package/src/serve/entries/runtime.ts +556 -0
- package/src/serve/entries/session-store.ts +97 -0
- package/src/serve/entries/storage.ts +92 -0
- package/src/serve/entries/tab-sync-wiring.ts +274 -0
- package/src/serve/entries/worker-runtime.ts +135 -0
- package/src/serve/init-payload.ts +42 -0
- package/src/serve/namespace.ts +675 -0
- package/src/serve/open-browser.ts +68 -0
- package/src/serve/rules.ts +272 -0
- package/src/serve/runtime/chip-config.ts +30 -0
- package/src/serve/runtime/chip-install.ts +27 -0
- package/src/serve/runtime/chip.ts +282 -0
- package/src/serve/runtime/manifest.ts +37 -0
- package/src/serve/runtime/status.ts +216 -0
- package/src/serve/runtime/worker-connection.ts +14 -0
- package/src/serve/runtime/worker-generation.ts +75 -0
- package/src/serve/runtime/worker-replacement.ts +42 -0
- package/src/serve/sandbox-marker.ts +31 -0
- package/src/serve/server.ts +428 -0
- package/src/serve/standalone-assets.ts +180 -0
- package/src/serve/state-store.ts +166 -0
- package/src/serve/studio/disk-project-store.ts +185 -0
- package/src/serve/studio/disk-workspace.ts +162 -0
- package/src/serve/studio/index.ts +20 -0
- package/src/serve/studio/routes.ts +237 -0
- package/src/serve/studio/store-types.ts +48 -0
- package/src/serve/studio/studio-storage.test.ts +289 -0
- package/src/serve/vite-ai-config.ts +77 -0
- package/src/serve/vite-plugin.ts +1075 -0
- package/src/serve/vite-rules-source.ts +28 -0
- package/src/serve/vite-worker-runtime.ts +51 -0
- package/src/serve/worker/activity-bootstrap.ts +24 -0
- package/src/serve/worker/client/admin-firestore.ts +38 -0
- package/src/serve/worker/client/ai.ts +124 -0
- package/src/serve/worker/client/auth.ts +489 -0
- package/src/serve/worker/client/connection.ts +227 -0
- package/src/serve/worker/client/core.ts +384 -0
- package/src/serve/worker/client/disconnect.ts +45 -0
- package/src/serve/worker/client/firestore-reads.ts +181 -0
- package/src/serve/worker/client/firestore-refs.ts +226 -0
- package/src/serve/worker/client/firestore-writes.ts +232 -0
- package/src/serve/worker/client/handles.ts +91 -0
- package/src/serve/worker/client/messaging.ts +119 -0
- package/src/serve/worker/client/presence.ts +174 -0
- package/src/serve/worker/client/rtdb.ts +311 -0
- package/src/serve/worker/client/rules.ts +63 -0
- package/src/serve/worker/client/runtime-control.ts +22 -0
- package/src/serve/worker/client/service-worker-connection.ts +59 -0
- package/src/serve/worker/client/snapshots.ts +86 -0
- package/src/serve/worker/client/storage.ts +195 -0
- package/src/serve/worker/client/studio.ts +88 -0
- package/src/serve/worker/client.ts +57 -0
- package/src/serve/worker/durable-persistence.ts +137 -0
- package/src/serve/worker/entry.ts +223 -0
- package/src/serve/worker/host/admin-firestore.ts +88 -0
- package/src/serve/worker/host/connection.ts +179 -0
- package/src/serve/worker/host/core.ts +387 -0
- package/src/serve/worker/host/dispatch.ts +316 -0
- package/src/serve/worker/host/firestore-reads.ts +117 -0
- package/src/serve/worker/host/firestore-writes.ts +456 -0
- package/src/serve/worker/host/presence.ts +312 -0
- package/src/serve/worker/host/rtdb.ts +136 -0
- package/src/serve/worker/host/rules.ts +128 -0
- package/src/serve/worker/host/storage.ts +312 -0
- package/src/serve/worker/host/studio.ts +75 -0
- package/src/serve/worker/host/subscriptions.ts +238 -0
- package/src/serve/worker/host-ai.ts +165 -0
- package/src/serve/worker/host-auth.ts +469 -0
- package/src/serve/worker/host-context.ts +273 -0
- package/src/serve/worker/host-events.ts +94 -0
- package/src/serve/worker/host-messaging.ts +240 -0
- package/src/serve/worker/host.ts +47 -0
- package/src/serve/worker/index.ts +196 -0
- package/src/serve/worker/presence-timing.ts +15 -0
- package/src/serve/worker/protocol.ts +1124 -0
- package/src/serve/worker/retirement.ts +125 -0
- package/src/serve/worker/serve-init.ts +605 -0
- package/src/serve/worker/service-worker-channel.ts +33 -0
- package/src/serve/worker/service-worker-relay.ts +86 -0
- package/src/serve/writer-lock.ts +53 -0
- package/src/verify/cases.ts +233 -0
- package/src/verify/fixture.ts +258 -0
- package/src/verify/index.ts +519 -0
- package/src/verify/tools.ts +108 -0
- package/src/version/compat-target.ts +17 -0
- package/src/vite.ts +18 -0
- package/dist/serve/docs-ui/docs/pyric-firestore-values-reference-api/index.html +0 -31
- package/dist/serve/docs-ui/docs/pyric-firestore-values-reference-api.md +0 -29
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { existsSync } from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import type { FirebaseJson } from '../cli/firebase-json.js';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Apply the Vite authoring convention without replacing unrelated Firebase
|
|
7
|
+
* configuration. The normal rules loader retains responsibility for its
|
|
8
|
+
* `firebase.json` and root `firestore.rules` fallbacks.
|
|
9
|
+
*/
|
|
10
|
+
export function resolveViteRulesConfig(
|
|
11
|
+
root: string,
|
|
12
|
+
explicitRules: string | undefined,
|
|
13
|
+
firebaseConfig: FirebaseJson | null,
|
|
14
|
+
): FirebaseJson | null {
|
|
15
|
+
const rulesSource = explicitRules
|
|
16
|
+
?? (existsSync(path.join(root, 'firestore.modules.rules'))
|
|
17
|
+
? 'firestore.modules.rules'
|
|
18
|
+
: undefined);
|
|
19
|
+
|
|
20
|
+
if (!rulesSource) return firebaseConfig;
|
|
21
|
+
return {
|
|
22
|
+
...(firebaseConfig ?? {}),
|
|
23
|
+
firestore: {
|
|
24
|
+
...(firebaseConfig?.firestore ?? {}),
|
|
25
|
+
rules: rulesSource,
|
|
26
|
+
},
|
|
27
|
+
};
|
|
28
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { homedir } from 'node:os';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import {
|
|
4
|
+
bundleWorker,
|
|
5
|
+
workerSourceHash,
|
|
6
|
+
type WorkerBundleOptions,
|
|
7
|
+
type WorkerBundleResult,
|
|
8
|
+
} from './bundler.js';
|
|
9
|
+
|
|
10
|
+
export interface ViteWorkerRuntimeStatus {
|
|
11
|
+
sdkDir: string;
|
|
12
|
+
ready: boolean;
|
|
13
|
+
epoch: string | null;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export interface ViteWorkerRuntime {
|
|
17
|
+
prepare(): Promise<void>;
|
|
18
|
+
status(): ViteWorkerRuntimeStatus;
|
|
19
|
+
headTag(marker: string): string;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
interface ViteWorkerRuntimeOptions {
|
|
23
|
+
cacheRoot?: string;
|
|
24
|
+
cacheKey?: string;
|
|
25
|
+
bundle?: (options: WorkerBundleOptions) => Promise<WorkerBundleResult>;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/** Own the Vite plugin's worker build state and its one HTML projection. */
|
|
29
|
+
export function createViteWorkerRuntime(
|
|
30
|
+
options: ViteWorkerRuntimeOptions = {},
|
|
31
|
+
): ViteWorkerRuntime {
|
|
32
|
+
const cacheRoot = options.cacheRoot ?? join(homedir(), '.pyric', 'vite-worker');
|
|
33
|
+
const cacheKey = options.cacheKey ?? workerSourceHash();
|
|
34
|
+
const sdkDir = join(cacheRoot, cacheKey);
|
|
35
|
+
const bundle = options.bundle ?? bundleWorker;
|
|
36
|
+
let current: ViteWorkerRuntimeStatus = { sdkDir, ready: false, epoch: null };
|
|
37
|
+
|
|
38
|
+
return {
|
|
39
|
+
async prepare() {
|
|
40
|
+
current = { sdkDir, ready: false, epoch: null };
|
|
41
|
+
const result = await bundle({ outDir: sdkDir });
|
|
42
|
+
current = { sdkDir, ready: true, epoch: result.epoch };
|
|
43
|
+
},
|
|
44
|
+
status: () => current,
|
|
45
|
+
headTag(marker) {
|
|
46
|
+
return current.ready && current.epoch
|
|
47
|
+
? `<meta name="pyric-worker-v" content="${current.epoch}" ${marker}>`
|
|
48
|
+
: `<script ${marker}>globalThis.__PYRIC_FORCE_INPAGE__=true;</script>`;
|
|
49
|
+
},
|
|
50
|
+
};
|
|
51
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { ActivityMonitor } from 'pyric/firestore/internal';
|
|
2
|
+
import { setupFirebaseActivityGuard as setupActivityGuardForFeed } from '../activity-guard.js';
|
|
3
|
+
import type { HostCtx } from './host.js';
|
|
4
|
+
|
|
5
|
+
export interface WorkerActivityEnv {
|
|
6
|
+
fetch: typeof fetch;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
/** Own the worker-lifetime warning guard after capture history has hydrated. */
|
|
10
|
+
export function setupFirebaseActivityGuard(
|
|
11
|
+
ctx: HostCtx,
|
|
12
|
+
env: WorkerActivityEnv,
|
|
13
|
+
activityToken: string | undefined,
|
|
14
|
+
): ActivityMonitor | null {
|
|
15
|
+
if (!activityToken) return null;
|
|
16
|
+
return setupActivityGuardForFeed(
|
|
17
|
+
{
|
|
18
|
+
history: () => ctx.sandbox.history(),
|
|
19
|
+
subscribe: (listener) => ctx.sandbox.onEvent(listener),
|
|
20
|
+
},
|
|
21
|
+
env.fetch,
|
|
22
|
+
activityToken,
|
|
23
|
+
);
|
|
24
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Admin-lens Firestore document ops over the worker port (Pyric Studio data
|
|
3
|
+
* browse) — rule-bypassing reads/writes the host resolves under the admin lens.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { nextId, rpc } from './core.js';
|
|
7
|
+
import type { ClientDb } from './handles.js';
|
|
8
|
+
|
|
9
|
+
export async function adminGetDocument(db: ClientDb, path: string): Promise<Record<string, unknown> | null> {
|
|
10
|
+
return (await rpc(db.port, { t: 'op', id: nextId(), method: 'admin.getDocument', path })) as Record<string, unknown> | null;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export async function adminListDocuments(
|
|
14
|
+
db: ClientDb,
|
|
15
|
+
path: string,
|
|
16
|
+
): Promise<Array<{ path: string; data: unknown; phantom?: boolean }>> {
|
|
17
|
+
return (await rpc(db.port, { t: 'op', id: nextId(), method: 'admin.listDocuments', path })) as Array<{ path: string; data: unknown; phantom?: boolean }>;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export async function adminSetDocument(db: ClientDb, path: string, data: unknown): Promise<void> {
|
|
21
|
+
await rpc(db.port, { t: 'op', id: nextId(), method: 'admin.setDocument', path, data });
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export async function adminDeleteDocument(db: ClientDb, path: string): Promise<boolean> {
|
|
25
|
+
return (await rpc(db.port, { t: 'op', id: nextId(), method: 'admin.deleteDocument', path })) as boolean;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export async function adminReadState(
|
|
29
|
+
db: ClientDb,
|
|
30
|
+
opts: { path?: string; maxDepth?: number } = {},
|
|
31
|
+
): Promise<Record<string, unknown>> {
|
|
32
|
+
return (await rpc(db.port, {
|
|
33
|
+
t: 'op',
|
|
34
|
+
id: nextId(),
|
|
35
|
+
method: 'admin.readState',
|
|
36
|
+
...opts,
|
|
37
|
+
})) as Record<string, unknown>;
|
|
38
|
+
}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AI ops over the worker port — the served firebase/ai entry plugs these in
|
|
3
|
+
* as the mirror AnswerEngine on the worker path (see entries/ai.ts).
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import type { AiEngineConfigWire, InboundMessage } from '../protocol.js';
|
|
7
|
+
import { closeSubscription, nextId, nextSubId, openSnapshotSubscription, rpc } from './core.js';
|
|
8
|
+
import type { ClientDb } from './handles.js';
|
|
9
|
+
|
|
10
|
+
// ─── AI ops (pyric/ai over the worker — cdd-deltas #98.3) ──────────────────
|
|
11
|
+
//
|
|
12
|
+
// The served `firebase/ai` entry (entries/ai.ts) plugs these three functions
|
|
13
|
+
// in as the mirror's AnswerEngine on the worker path, so the page keeps the
|
|
14
|
+
// full `pyric/ai` surface (GenerativeModel / ChatSession / Schema) while
|
|
15
|
+
// ANSWERING happens in the worker host's broker — in-process with the ONE
|
|
16
|
+
// shared sandbox (#98.1), whose unified event stream Studio consumes.
|
|
17
|
+
// Requests/responses are the plain Gemini-wire JSON the broker speaks; no
|
|
18
|
+
// codec round-trip. `engine` rides each message but is honored only on the
|
|
19
|
+
// worker's FIRST ai op (broker creation — see AiEngineConfigWire).
|
|
20
|
+
|
|
21
|
+
/** Parameters shared by the three AI ops. */
|
|
22
|
+
export interface AiOpParams {
|
|
23
|
+
/** Model resource the mirror resolved (e.g. `models/gemini-flash-lite-latest`). */
|
|
24
|
+
model: string;
|
|
25
|
+
/** Plain Gemini-wire request JSON. */
|
|
26
|
+
request: Record<string, unknown>;
|
|
27
|
+
/** First-op engine config — see {@link AiEngineConfigWire}. */
|
|
28
|
+
engine?: AiEngineConfigWire;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/** Unary `generateContent` against the worker's broker. Resolves with the
|
|
32
|
+
* complete WireResponse envelope; rejects with an Error carrying `.code`
|
|
33
|
+
* (and `.aiEnvelope` when the broker answered a wire error envelope). */
|
|
34
|
+
export async function aiGenerateContent(
|
|
35
|
+
db: ClientDb,
|
|
36
|
+
params: AiOpParams,
|
|
37
|
+
): Promise<Record<string, unknown>> {
|
|
38
|
+
return (await rpc(db.port, {
|
|
39
|
+
t: 'op',
|
|
40
|
+
id: nextId(),
|
|
41
|
+
method: 'ai.generateContent',
|
|
42
|
+
model: params.model,
|
|
43
|
+
request: params.request,
|
|
44
|
+
...(params.engine !== undefined ? { engine: params.engine } : {}),
|
|
45
|
+
})) as Record<string, unknown>;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/** Unary `countTokens` against the worker's broker (deterministic). */
|
|
49
|
+
export async function aiCountTokens(
|
|
50
|
+
db: ClientDb,
|
|
51
|
+
params: AiOpParams,
|
|
52
|
+
): Promise<Record<string, unknown>> {
|
|
53
|
+
return (await rpc(db.port, {
|
|
54
|
+
t: 'op',
|
|
55
|
+
id: nextId(),
|
|
56
|
+
method: 'ai.countTokens',
|
|
57
|
+
model: params.model,
|
|
58
|
+
request: params.request,
|
|
59
|
+
...(params.engine !== undefined ? { engine: params.engine } : {}),
|
|
60
|
+
})) as Record<string, unknown>;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Streamed `generateContent` over an AI stream SUBSCRIPTION: chunks arrive
|
|
65
|
+
* as `{ chunk }` snaps in order, the terminal `{ done: true }` snap ends the
|
|
66
|
+
* iteration, and a snap `__error` throws (with `.code` / `.aiEnvelope`).
|
|
67
|
+
* The host auto-unsubs on done; the generator additionally sends `unsub` on
|
|
68
|
+
* teardown so early consumer abandonment cancels the worker-side pump (the
|
|
69
|
+
* done/unsub race is a benign no-op on the host).
|
|
70
|
+
*/
|
|
71
|
+
export async function* aiStreamGenerateContent(
|
|
72
|
+
db: ClientDb,
|
|
73
|
+
params: AiOpParams,
|
|
74
|
+
): AsyncGenerator<Record<string, unknown>> {
|
|
75
|
+
const subId = nextSubId();
|
|
76
|
+
type QueueItem =
|
|
77
|
+
| { kind: 'chunk'; chunk: Record<string, unknown> }
|
|
78
|
+
| { kind: 'done' }
|
|
79
|
+
| { kind: 'error'; error: unknown };
|
|
80
|
+
const queue: QueueItem[] = [];
|
|
81
|
+
let notify: (() => void) | null = null;
|
|
82
|
+
const push = (item: QueueItem): void => {
|
|
83
|
+
queue.push(item);
|
|
84
|
+
notify?.();
|
|
85
|
+
notify = null;
|
|
86
|
+
};
|
|
87
|
+
|
|
88
|
+
const opened = openSnapshotSubscription(db.port, subId, {
|
|
89
|
+
port: db.port,
|
|
90
|
+
next: (raw) => {
|
|
91
|
+
const v = (raw ?? {}) as { chunk?: Record<string, unknown>; done?: boolean };
|
|
92
|
+
if (v.done) push({ kind: 'done' });
|
|
93
|
+
else push({ kind: 'chunk', chunk: v.chunk ?? {} });
|
|
94
|
+
},
|
|
95
|
+
error: (err) => push({ kind: 'error', error: err }),
|
|
96
|
+
}, {
|
|
97
|
+
t: 'sub',
|
|
98
|
+
subId,
|
|
99
|
+
target: { service: 'ai', op: 'streamGenerateContent' },
|
|
100
|
+
model: params.model,
|
|
101
|
+
request: params.request,
|
|
102
|
+
...(params.engine !== undefined ? { engine: params.engine } : {}),
|
|
103
|
+
} satisfies InboundMessage);
|
|
104
|
+
if (!opened) push({
|
|
105
|
+
kind: 'error',
|
|
106
|
+
error: Object.assign(new Error('Firebase App was deleted'), { code: 'app/app-deleted' }),
|
|
107
|
+
});
|
|
108
|
+
|
|
109
|
+
try {
|
|
110
|
+
for (;;) {
|
|
111
|
+
while (queue.length === 0) {
|
|
112
|
+
await new Promise<void>((resolve) => {
|
|
113
|
+
notify = resolve;
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
const item = queue.shift()!;
|
|
117
|
+
if (item.kind === 'error') throw item.error;
|
|
118
|
+
if (item.kind === 'done') return;
|
|
119
|
+
yield item.chunk;
|
|
120
|
+
}
|
|
121
|
+
} finally {
|
|
122
|
+
closeSubscription(db.port, subId);
|
|
123
|
+
}
|
|
124
|
+
}
|