@pyric/cli 0.1.0-alpha.20 → 0.1.0-alpha.22
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/README.md +64 -89
- package/dist/assurance/.generated/conformance-verdicts.d.ts +238 -1
- package/dist/assurance/.generated/conformance-verdicts.d.ts.map +1 -1
- package/dist/assurance/.generated/conformance-verdicts.js +238 -1
- package/dist/assurance/.generated/conformance-verdicts.js.map +1 -1
- package/dist/bridge/client/dispatch.d.ts +25 -19
- package/dist/bridge/client/dispatch.d.ts.map +1 -1
- package/dist/bridge/client/dispatch.js +41 -48
- package/dist/bridge/client/dispatch.js.map +1 -1
- package/dist/bridge/client/tool-family-factories.d.ts +26 -0
- package/dist/bridge/client/tool-family-factories.d.ts.map +1 -0
- package/dist/bridge/client/tool-family-factories.js +10 -0
- package/dist/bridge/client/tool-family-factories.js.map +1 -0
- package/dist/bridge/server/mcp-contract.d.ts +7 -6
- package/dist/bridge/server/mcp-contract.d.ts.map +1 -1
- package/dist/bridge/server/mcp-contract.js +9 -48
- package/dist/bridge/server/mcp-contract.js.map +1 -1
- package/dist/bridge/server/peer.d.ts +11 -1
- package/dist/bridge/server/peer.d.ts.map +1 -1
- package/dist/bridge/server/peer.js +22 -1
- package/dist/bridge/server/peer.js.map +1 -1
- package/dist/bridge/server/tool-family-factories.d.ts +30 -0
- package/dist/bridge/server/tool-family-factories.d.ts.map +1 -0
- package/dist/bridge/server/tool-family-factories.js +22 -0
- package/dist/bridge/server/tool-family-factories.js.map +1 -0
- package/dist/bridge/server/tool-metadata.d.ts +17 -18
- package/dist/bridge/server/tool-metadata.d.ts.map +1 -1
- package/dist/bridge/server/tool-metadata.js +24 -59
- package/dist/bridge/server/tool-metadata.js.map +1 -1
- package/dist/bridge/tool-families.d.ts +48 -0
- package/dist/bridge/tool-families.d.ts.map +1 -0
- package/dist/bridge/tool-families.generated.d.ts +32 -0
- package/dist/bridge/tool-families.generated.d.ts.map +1 -0
- package/dist/bridge/tool-families.generated.js +15 -0
- package/dist/bridge/tool-families.generated.js.map +1 -0
- package/dist/bridge/tool-families.js +51 -0
- package/dist/bridge/tool-families.js.map +1 -0
- package/dist/bridge/tool-family-records/conformance.d.ts +7 -0
- package/dist/bridge/tool-family-records/conformance.d.ts.map +1 -0
- package/dist/bridge/tool-family-records/conformance.js +6 -0
- package/dist/bridge/tool-family-records/conformance.js.map +1 -0
- package/dist/bridge/tool-family-records/firestore-data.d.ts +7 -0
- package/dist/bridge/tool-family-records/firestore-data.d.ts.map +1 -0
- package/dist/bridge/tool-family-records/firestore-data.js +15 -0
- package/dist/bridge/tool-family-records/firestore-data.js.map +1 -0
- package/dist/bridge/tool-family-records/firestore-inspect.d.ts +7 -0
- package/dist/bridge/tool-family-records/firestore-inspect.d.ts.map +1 -0
- package/dist/bridge/tool-family-records/firestore-inspect.js +6 -0
- package/dist/bridge/tool-family-records/firestore-inspect.js.map +1 -0
- package/dist/bridge/tool-family-records/firestore-rules.d.ts +7 -0
- package/dist/bridge/tool-family-records/firestore-rules.d.ts.map +1 -0
- package/dist/bridge/tool-family-records/firestore-rules.js +15 -0
- package/dist/bridge/tool-family-records/firestore-rules.js.map +1 -0
- package/dist/bridge/tool-family-records/firestore-simulator.d.ts +7 -0
- package/dist/bridge/tool-family-records/firestore-simulator.d.ts.map +1 -0
- package/dist/bridge/tool-family-records/firestore-simulator.js +16 -0
- package/dist/bridge/tool-family-records/firestore-simulator.js.map +1 -0
- package/dist/bridge/tool-family-records/rtdb-inspection.d.ts +7 -0
- package/dist/bridge/tool-family-records/rtdb-inspection.d.ts.map +1 -0
- package/dist/bridge/tool-family-records/rtdb-inspection.js +6 -0
- package/dist/bridge/tool-family-records/rtdb-inspection.js.map +1 -0
- package/dist/bundler/externals.d.ts +37 -0
- package/dist/bundler/externals.d.ts.map +1 -0
- package/dist/bundler/externals.js +52 -0
- package/dist/bundler/externals.js.map +1 -0
- package/dist/bundler/index.d.ts +17 -0
- package/dist/bundler/index.d.ts.map +1 -0
- package/dist/bundler/index.js +17 -0
- package/dist/bundler/index.js.map +1 -0
- package/dist/cli/inlined-sdk-scanner.d.ts +6 -0
- package/dist/cli/inlined-sdk-scanner.d.ts.map +1 -0
- package/dist/cli/inlined-sdk-scanner.js +82 -0
- package/dist/cli/inlined-sdk-scanner.js.map +1 -0
- package/dist/cli/sandbox-interlock.d.ts +97 -0
- package/dist/cli/sandbox-interlock.d.ts.map +1 -0
- package/dist/cli/sandbox-interlock.js +112 -0
- package/dist/cli/sandbox-interlock.js.map +1 -0
- package/dist/cli/sandbox-runner.d.ts +20 -12
- package/dist/cli/sandbox-runner.d.ts.map +1 -1
- package/dist/cli/sandbox-runner.js +24 -21
- package/dist/cli/sandbox-runner.js.map +1 -1
- package/dist/cli/serve.d.ts +6 -10
- package/dist/cli/serve.d.ts.map +1 -1
- package/dist/cli/serve.js +57 -77
- package/dist/cli/serve.js.map +1 -1
- package/dist/cli/unsupported-runtime.d.ts +27 -0
- package/dist/cli/unsupported-runtime.d.ts.map +1 -0
- package/dist/cli/unsupported-runtime.js +63 -0
- package/dist/cli/unsupported-runtime.js.map +1 -0
- package/dist/conformance/.generated/can-i-use-browser.d.ts +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 +1 -1
- package/dist/conformance/.generated/can-i-use.d.ts.map +1 -1
- package/dist/conformance/.generated/can-i-use.js +1 -1
- package/dist/conformance/.generated/can-i-use.js.map +1 -1
- package/dist/conformance/.generated/conformance-docs.d.ts.map +1 -1
- package/dist/conformance/.generated/conformance-docs.js +1 -1
- package/dist/conformance/.generated/conformance-docs.js.map +1 -1
- package/dist/functions-rtdb/child.d.ts +37 -0
- package/dist/functions-rtdb/child.d.ts.map +1 -1
- package/dist/functions-rtdb/child.js +90 -21
- package/dist/functions-rtdb/child.js.map +1 -1
- package/dist/functions-rtdb/development-runtime.d.ts +3 -0
- package/dist/functions-rtdb/development-runtime.d.ts.map +1 -1
- package/dist/functions-rtdb/development-runtime.js +1 -0
- package/dist/functions-rtdb/development-runtime.js.map +1 -1
- package/dist/google-endpoints.d.ts +67 -0
- package/dist/google-endpoints.d.ts.map +1 -0
- package/dist/google-endpoints.js +119 -0
- package/dist/google-endpoints.js.map +1 -0
- package/dist/next/runtime-env.d.ts.map +1 -1
- package/dist/next/runtime-env.js +5 -0
- package/dist/next/runtime-env.js.map +1 -1
- package/dist/next/with-pyric.d.ts +1 -1
- package/dist/next/with-pyric.js +1 -1
- package/dist/register/beacon.d.ts +69 -0
- package/dist/register/beacon.d.ts.map +1 -0
- package/dist/register/beacon.js +199 -0
- package/dist/register/beacon.js.map +1 -0
- package/dist/register/index.d.ts.map +1 -1
- package/dist/register/index.js +65 -6
- package/dist/register/index.js.map +1 -1
- package/dist/register/net-guard.d.ts +110 -0
- package/dist/register/net-guard.d.ts.map +1 -0
- package/dist/register/net-guard.js +462 -0
- package/dist/register/net-guard.js.map +1 -0
- package/dist/serve/ai-diagnostics-relay.d.ts +63 -0
- package/dist/serve/ai-diagnostics-relay.d.ts.map +1 -0
- package/dist/serve/ai-diagnostics-relay.js +125 -0
- package/dist/serve/ai-diagnostics-relay.js.map +1 -0
- package/dist/serve/ai-proxy.d.ts +92 -0
- package/dist/serve/ai-proxy.d.ts.map +1 -0
- package/dist/serve/ai-proxy.js +269 -0
- package/dist/serve/ai-proxy.js.map +1 -0
- package/dist/serve/ai-status.d.ts +44 -0
- package/dist/serve/ai-status.d.ts.map +1 -0
- package/dist/serve/ai-status.js +77 -0
- package/dist/serve/ai-status.js.map +1 -0
- package/dist/serve/ai-terminal-blocks.d.ts +97 -0
- package/dist/serve/ai-terminal-blocks.d.ts.map +1 -0
- package/dist/serve/ai-terminal-blocks.js +128 -0
- package/dist/serve/ai-terminal-blocks.js.map +1 -0
- package/dist/serve/ai-terminal-text.d.ts +36 -0
- package/dist/serve/ai-terminal-text.d.ts.map +1 -0
- package/dist/serve/ai-terminal-text.js +48 -0
- package/dist/serve/ai-terminal-text.js.map +1 -0
- package/dist/serve/beacon-route.d.ts +53 -0
- package/dist/serve/beacon-route.d.ts.map +1 -0
- package/dist/serve/beacon-route.js +101 -0
- package/dist/serve/beacon-route.js.map +1 -0
- package/dist/serve/entries/active-auth-registry.d.ts +16 -0
- package/dist/serve/entries/active-auth-registry.d.ts.map +1 -0
- package/dist/serve/entries/active-auth-registry.js +48 -0
- package/dist/serve/entries/active-auth-registry.js.map +1 -0
- package/dist/serve/entries/active-auth.d.ts +18 -0
- package/dist/serve/entries/active-auth.d.ts.map +1 -0
- package/dist/serve/entries/active-auth.js +84 -0
- package/dist/serve/entries/active-auth.js.map +1 -0
- package/dist/serve/entries/auth-helper-core.d.ts +1 -0
- package/dist/serve/entries/auth-helper-core.d.ts.map +1 -1
- package/dist/serve/entries/auth-helper-core.js +4 -0
- package/dist/serve/entries/auth-helper-core.js.map +1 -1
- package/dist/serve/entries/auth-helper-dom.d.ts.map +1 -1
- package/dist/serve/entries/auth-helper-dom.js +28 -2
- package/dist/serve/entries/auth-helper-dom.js.map +1 -1
- package/dist/serve/entries/auth.d.ts.map +1 -1
- package/dist/serve/entries/auth.js +8 -0
- package/dist/serve/entries/auth.js.map +1 -1
- package/dist/serve/entries/bridge-url.d.ts +1 -1
- package/dist/serve/entries/bridge-url.js +1 -1
- package/dist/serve/entries/init.d.ts.map +1 -1
- package/dist/serve/entries/init.js +70 -4
- 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 +9 -0
- package/dist/serve/entries/runtime.js.map +1 -1
- package/dist/serve/namespace.d.ts +14 -5
- package/dist/serve/namespace.d.ts.map +1 -1
- package/dist/serve/namespace.js +57 -124
- package/dist/serve/namespace.js.map +1 -1
- package/dist/serve/runtime/chip-config.d.ts.map +1 -1
- package/dist/serve/runtime/chip-config.js +16 -2
- package/dist/serve/runtime/chip-config.js.map +1 -1
- package/dist/serve/runtime/chip-dialog.d.ts +18 -0
- package/dist/serve/runtime/chip-dialog.d.ts.map +1 -0
- package/dist/serve/runtime/chip-dialog.js +315 -0
- package/dist/serve/runtime/chip-dialog.js.map +1 -0
- package/dist/serve/runtime/chip-install.d.ts +2 -0
- package/dist/serve/runtime/chip-install.d.ts.map +1 -1
- package/dist/serve/runtime/chip-install.js +9 -4
- package/dist/serve/runtime/chip-install.js.map +1 -1
- package/dist/serve/runtime/chip-user-search.d.ts +16 -0
- package/dist/serve/runtime/chip-user-search.d.ts.map +1 -0
- package/dist/serve/runtime/chip-user-search.js +354 -0
- package/dist/serve/runtime/chip-user-search.js.map +1 -0
- package/dist/serve/runtime/chip.d.ts +10 -0
- package/dist/serve/runtime/chip.d.ts.map +1 -1
- package/dist/serve/runtime/chip.js +118 -15
- package/dist/serve/runtime/chip.js.map +1 -1
- package/dist/serve/runtime/identity.d.ts +17 -0
- package/dist/serve/runtime/identity.d.ts.map +1 -0
- package/dist/serve/runtime/identity.js +10 -0
- package/dist/serve/runtime/identity.js.map +1 -0
- package/dist/serve/sandbox-session.d.ts +7 -0
- package/dist/serve/sandbox-session.d.ts.map +1 -1
- package/dist/serve/sandbox-session.js +2 -0
- package/dist/serve/sandbox-session.js.map +1 -1
- package/dist/serve/site-ui/_astro/{RulesCodeEditor.XtDmHOlN.js → RulesCodeEditor.DsTAsKIa.js} +1 -1
- package/dist/serve/site-ui/_astro/app.CMmTxyhL.js +1 -0
- package/dist/serve/site-ui/_astro/app.DhALsVii.js +115 -0
- package/dist/serve/site-ui/_astro/{chess-showcase.B72XYeoh.js → chess-showcase.Bn_pP6UJ.js} +2 -2
- package/dist/serve/site-ui/_astro/{example-runtime.C25_lx6Z.js → example-runtime.CXopTGv7.js} +1 -1
- package/dist/serve/site-ui/_astro/sandbox-controls.rOuZTOUG.js +510 -0
- package/dist/serve/site-ui/_astro/{seed.Co0yUJY5.js → seed.lywYbXZ0.js} +2 -2
- package/dist/serve/site-ui/_astro/writes.BsPBG3dp.js +653 -0
- package/dist/serve/site-ui/auth/index.html +1 -1
- package/dist/serve/site-ui/docs/_rhythm/index.html +1 -1
- package/dist/serve/site-ui/docs/agent/set-up-your-agent/index.html +1 -1
- package/dist/serve/site-ui/docs/agent/watch-and-review/index.html +1 -1
- package/dist/serve/site-ui/docs/agent/work-with-an-agent/index.html +1 -1
- package/dist/serve/site-ui/docs/ai-compat/index.html +1 -1
- package/dist/serve/site-ui/docs/api-reference/index.html +8 -1
- package/dist/serve/site-ui/docs/api-reference.md +7 -0
- package/dist/serve/site-ui/docs/app-compat/index.html +1 -1
- package/dist/serve/site-ui/docs/auth-compat/index.html +3 -3
- package/dist/serve/site-ui/docs/auth-compat.md +2 -2
- package/dist/serve/site-ui/docs/build/ai-logic/index.html +6 -1
- package/dist/serve/site-ui/docs/build/ai-logic.md +6 -0
- package/dist/serve/site-ui/docs/build/authentication/index.html +2 -2
- package/dist/serve/site-ui/docs/build/authentication.md +1 -1
- package/dist/serve/site-ui/docs/build/cloud-firestore/index.html +4 -2
- package/dist/serve/site-ui/docs/build/cloud-firestore.md +4 -0
- package/dist/serve/site-ui/docs/build/cloud-messaging/index.html +1 -1
- package/dist/serve/site-ui/docs/build/cloud-storage/index.html +1 -1
- package/dist/serve/site-ui/docs/build/realtime-database/index.html +1 -1
- package/dist/serve/site-ui/docs/conformance-scores/index.html +14 -2
- package/dist/serve/site-ui/docs/conformance-scores.md +13 -1
- package/dist/serve/site-ui/docs/create-pyric-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/database-compat/index.html +44 -44
- package/dist/serve/site-ui/docs/database-compat.md +43 -43
- package/dist/serve/site-ui/docs/examples/chess/index.html +1 -1
- package/dist/serve/site-ui/docs/examples/index.html +1 -1
- package/dist/serve/site-ui/docs/firestore-compat/index.html +4 -4
- package/dist/serve/site-ui/docs/firestore-compat.md +3 -3
- package/dist/serve/site-ui/docs/firestore-flutter-compat/index.html +319 -0
- package/dist/serve/site-ui/docs/firestore-flutter-compat.md +344 -0
- package/dist/serve/site-ui/docs/firestore-kotlin-compat/index.html +319 -0
- package/dist/serve/site-ui/docs/firestore-kotlin-compat.md +344 -0
- package/dist/serve/site-ui/docs/firestore-swift-compat/index.html +490 -0
- package/dist/serve/site-ui/docs/firestore-swift-compat.md +517 -0
- package/dist/serve/site-ui/docs/functions-rtdb-compat/index.html +1 -1
- package/dist/serve/site-ui/docs/get-started/backend-bundlers/index.html +105 -0
- package/dist/serve/site-ui/docs/get-started/backend-bundlers.md +165 -0
- package/dist/serve/site-ui/docs/get-started/flutter/index.html +98 -0
- package/dist/serve/site-ui/docs/get-started/flutter.md +105 -0
- package/dist/serve/site-ui/docs/get-started/how-the-swap-works/index.html +1 -1
- package/dist/serve/site-ui/docs/get-started/nextjs/index.html +1 -1
- package/dist/serve/site-ui/docs/get-started/start-building/index.html +1 -1
- package/dist/serve/site-ui/docs/get-started/vite/index.html +1 -1
- package/dist/serve/site-ui/docs/index.json +3211 -1471
- package/dist/serve/site-ui/docs/messaging-compat/index.html +1 -1
- package/dist/serve/site-ui/docs/observe/resolve-runtime-status/index.html +4 -3
- package/dist/serve/site-ui/docs/observe/resolve-runtime-status.md +3 -1
- package/dist/serve/site-ui/docs/observe/see-whats-happening/index.html +1 -1
- package/dist/serve/site-ui/docs/observe/shape-your-data/index.html +1 -1
- package/dist/serve/site-ui/docs/observe/switch-and-impersonate-identities/index.html +110 -0
- package/dist/serve/site-ui/docs/observe/switch-and-impersonate-identities.md +134 -0
- package/dist/serve/site-ui/docs/overview/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-admin-app-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-admin-auth-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-admin-database-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-admin-firestore-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-admin-messaging-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-admin-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-admin-storage-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-ai-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-ai-scripting-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-analytics-reference-api/index.html +124 -0
- package/dist/serve/site-ui/docs/pyric-analytics-reference-api.md +287 -0
- package/dist/serve/site-ui/docs/pyric-app-check-reference-api/index.html +87 -0
- package/dist/serve/site-ui/docs/pyric-app-check-reference-api.md +199 -0
- package/dist/serve/site-ui/docs/pyric-app-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-auth-reference-api/index.html +6 -2
- package/dist/serve/site-ui/docs/pyric-auth-reference-api.md +2 -1
- package/dist/serve/site-ui/docs/pyric-cli-assurance-browser-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-cli-assurance-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-cli-bridge-client-reference-api/index.html +2 -2
- package/dist/serve/site-ui/docs/pyric-cli-bridge-client-reference-api.md +1 -1
- package/dist/serve/site-ui/docs/pyric-cli-bridge-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-cli-bundler-reference-api/index.html +56 -0
- package/dist/serve/site-ui/docs/pyric-cli-bundler-reference-api.md +72 -0
- package/dist/serve/site-ui/docs/pyric-cli-conformance-browser-reference-api/index.html +4 -1
- package/dist/serve/site-ui/docs/pyric-cli-conformance-browser-reference-api.md +3 -0
- package/dist/serve/site-ui/docs/pyric-cli-conformance-docs-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-cli-conformance-reference-api/index.html +4 -1
- package/dist/serve/site-ui/docs/pyric-cli-conformance-reference-api.md +3 -0
- package/dist/serve/site-ui/docs/pyric-cli-credentials-node-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-cli-discover-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-cli-next-reference-api/index.html +2 -2
- package/dist/serve/site-ui/docs/pyric-cli-next-reference-api.md +1 -1
- package/dist/serve/site-ui/docs/pyric-cli-register-app-bridge-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-cli-register-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-cli-remote-reference-api/index.html +34 -9
- package/dist/serve/site-ui/docs/pyric-cli-remote-reference-api.md +16 -8
- package/dist/serve/site-ui/docs/pyric-cli-serve-worker-reference-api/index.html +133 -93
- package/dist/serve/site-ui/docs/pyric-cli-serve-worker-reference-api.md +61 -1
- package/dist/serve/site-ui/docs/pyric-cli-verify-reference-api/index.html +2 -2
- package/dist/serve/site-ui/docs/pyric-cli-verify-reference-api.md +1 -1
- package/dist/serve/site-ui/docs/pyric-cli-vite-reference-api/index.html +2 -2
- package/dist/serve/site-ui/docs/pyric-cli-vite-reference-api.md +2 -2
- package/dist/serve/site-ui/docs/pyric-database-reference-api/index.html +2 -2
- package/dist/serve/site-ui/docs/pyric-database-reference-api.md +1 -1
- package/dist/serve/site-ui/docs/pyric-firestore-lite-reference-api/index.html +559 -0
- package/dist/serve/site-ui/docs/pyric-firestore-lite-reference-api.md +1240 -0
- package/dist/serve/site-ui/docs/pyric-firestore-reference-api/index.html +40 -11
- package/dist/serve/site-ui/docs/pyric-firestore-reference-api.md +18 -8
- package/dist/serve/site-ui/docs/pyric-functions-reference-api/index.html +67 -0
- package/dist/serve/site-ui/docs/pyric-functions-reference-api.md +149 -0
- package/dist/serve/site-ui/docs/pyric-messaging-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-messaging-sw-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-performance-reference-api/index.html +35 -0
- package/dist/serve/site-ui/docs/pyric-performance-reference-api.md +69 -0
- package/dist/serve/site-ui/docs/pyric-remote-config-reference-api/index.html +132 -0
- package/dist/serve/site-ui/docs/pyric-remote-config-reference-api.md +307 -0
- package/dist/serve/site-ui/docs/pyric-rules-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-sandbox-database-reference-api/index.html +52 -17
- package/dist/serve/site-ui/docs/pyric-sandbox-database-reference-api.md +48 -9
- package/dist/serve/site-ui/docs/pyric-sandbox-firestore-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-sandbox-reference-api/index.html +239 -49
- package/dist/serve/site-ui/docs/pyric-sandbox-reference-api.md +148 -31
- package/dist/serve/site-ui/docs/pyric-storage-reference-api/index.html +22 -4
- package/dist/serve/site-ui/docs/pyric-storage-reference-api.md +25 -3
- package/dist/serve/site-ui/docs/pyric-ui-agents-reference-api/index.html +26 -96
- package/dist/serve/site-ui/docs/pyric-ui-agents-reference-api.md +20 -51
- package/dist/serve/site-ui/docs/pyric-ui-auth-hooks-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-ui-auth-reference-api/index.html +2 -2
- package/dist/serve/site-ui/docs/pyric-ui-auth-reference-api.md +1 -1
- package/dist/serve/site-ui/docs/pyric-ui-events-hooks-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-ui-events-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-ui-firestore-hooks-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-ui-firestore-reference-api/index.html +2 -2
- package/dist/serve/site-ui/docs/pyric-ui-firestore-reference-api.md +1 -1
- package/dist/serve/site-ui/docs/pyric-ui-primitives-reference-api/index.html +124 -26
- package/dist/serve/site-ui/docs/pyric-ui-primitives-reference-api.md +58 -5
- package/dist/serve/site-ui/docs/pyric-ui-rtdb-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-ui-rules-hooks-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-ui-rules-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-ui-storage-hooks-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-ui-storage-reference-api/index.html +4 -5
- package/dist/serve/site-ui/docs/pyric-ui-storage-reference-api.md +3 -4
- package/dist/serve/site-ui/docs/pyric-ui-traffic-hooks-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-ui-traffic-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/reference/cli/index.html +6 -3
- package/dist/serve/site-ui/docs/reference/cli.md +8 -2
- package/dist/serve/site-ui/docs/rules-compat/index.html +10 -2
- package/dist/serve/site-ui/docs/rules-compat.md +9 -1
- package/dist/serve/site-ui/docs/secure/audit-your-rules/index.html +1 -1
- package/dist/serve/site-ui/docs/secure/firestore-rules-limits/index.html +1 -1
- package/dist/serve/site-ui/docs/secure/read-a-denial/index.html +1 -1
- package/dist/serve/site-ui/docs/secure/rtdb-rules-in-typescript/index.html +1 -1
- package/dist/serve/site-ui/docs/secure/rules-standard-library/index.html +1 -1
- package/dist/serve/site-ui/docs/secure/secure-it-with-rules/index.html +1 -1
- package/dist/serve/site-ui/docs/secure/simulate-and-lint/index.html +1 -1
- package/dist/serve/site-ui/docs/secure/write-a-rules-test-suite/index.html +1 -1
- package/dist/serve/site-ui/docs/ship/ship-to-production/index.html +1 -1
- package/dist/serve/site-ui/docs/ship/test-in-node/index.html +1 -1
- package/dist/serve/site-ui/docs/storage-compat/index.html +13 -13
- package/dist/serve/site-ui/docs/storage-compat.md +12 -12
- package/dist/serve/site-ui/docs/trust/how-we-know-it-matches-firebase/index.html +1 -1
- package/dist/serve/site-ui/docs/trust/rules-standard-library/index.html +1 -1
- package/dist/serve/site-ui/docs/trust/versioning-and-compatibility/index.html +1 -1
- package/dist/serve/site-ui/docs/tutorial/index.html +1 -1
- package/dist/serve/site-ui/examples/chess/index.html +1 -1
- package/dist/serve/site-ui/firestore/index.html +1 -1
- package/dist/serve/site-ui/llms.txt +13 -0
- package/dist/serve/site-ui/rtdb/index.html +1 -1
- package/dist/serve/site-ui/settings/index.html +1 -1
- package/dist/serve/site-ui/storage/index.html +1 -1
- package/dist/serve/site-ui/studio/index.html +1 -1
- package/dist/serve/site-ui/traffic/index.html +1 -1
- package/dist/serve/studio/disk-workspace.d.ts.map +1 -1
- package/dist/serve/studio/disk-workspace.js +64 -2
- package/dist/serve/studio/disk-workspace.js.map +1 -1
- package/dist/serve/vite-plugin.d.ts +7 -7
- package/dist/serve/vite-plugin.js +1 -1
- package/dist/serve/vite-plugin.js.map +1 -1
- package/dist/serve/vite-sandbox-generation.d.ts.map +1 -1
- package/dist/serve/vite-sandbox-generation.js +12 -0
- package/dist/serve/vite-sandbox-generation.js.map +1 -1
- package/dist/serve/worker/client/auth.js +1 -2
- package/dist/serve/worker/client/auth.js.map +1 -1
- package/dist/serve/worker/client/core.d.ts +21 -1
- package/dist/serve/worker/client/core.d.ts.map +1 -1
- package/dist/serve/worker/client/core.js +79 -3
- package/dist/serve/worker/client/core.js.map +1 -1
- package/dist/serve/worker/client.d.ts +1 -1
- package/dist/serve/worker/client.d.ts.map +1 -1
- package/dist/serve/worker/client.js +1 -1
- package/dist/serve/worker/client.js.map +1 -1
- package/dist/serve/worker/context-resolver.d.ts +30 -0
- package/dist/serve/worker/context-resolver.d.ts.map +1 -0
- package/dist/serve/worker/context-resolver.js +44 -0
- package/dist/serve/worker/context-resolver.js.map +1 -0
- package/dist/serve/worker/entry.js +23 -19
- package/dist/serve/worker/entry.js.map +1 -1
- package/dist/serve/worker/host/core.d.ts +1 -0
- package/dist/serve/worker/host/core.d.ts.map +1 -1
- package/dist/serve/worker/host/core.js +12 -6
- package/dist/serve/worker/host/core.js.map +1 -1
- package/dist/serve/worker/host/storage.js +2 -2
- package/dist/serve/worker/host-auth.js +1 -2
- package/dist/serve/worker/host-auth.js.map +1 -1
- package/dist/serve/worker/index.d.ts +1 -1
- package/dist/serve/worker/index.d.ts.map +1 -1
- package/dist/serve/worker/index.js +2 -2
- package/dist/serve/worker/index.js.map +1 -1
- package/dist/serve/worker/port-lifecycle.d.ts +18 -0
- package/dist/serve/worker/port-lifecycle.d.ts.map +1 -0
- package/dist/serve/worker/port-lifecycle.js +28 -0
- package/dist/serve/worker/port-lifecycle.js.map +1 -0
- package/dist/serve/worker/serve-init.d.ts.map +1 -1
- package/dist/serve/worker/serve-init.js +8 -2
- package/dist/serve/worker/serve-init.js.map +1 -1
- package/dist/verify/fixture.d.ts +1 -1
- package/package.json +16 -5
- package/src/assurance/.generated/conformance-verdicts.ts +238 -1
- package/src/bridge/client/dispatch.ts +52 -56
- package/src/bridge/client/tool-family-factories.ts +34 -0
- package/src/bridge/server/mcp-contract.ts +15 -59
- package/src/bridge/server/peer.ts +24 -1
- package/src/bridge/server/tool-family-factories.ts +40 -0
- package/src/bridge/server/tool-metadata.ts +29 -61
- package/src/bridge/tool-families.generated.ts +17 -0
- package/src/bridge/tool-families.ts +87 -0
- package/src/bridge/tool-family-records/conformance.ts +6 -0
- package/src/bridge/tool-family-records/firestore-data.ts +15 -0
- package/src/bridge/tool-family-records/firestore-inspect.ts +6 -0
- package/src/bridge/tool-family-records/firestore-rules.ts +15 -0
- package/src/bridge/tool-family-records/firestore-simulator.ts +16 -0
- package/src/bridge/tool-family-records/rtdb-inspection.ts +6 -0
- package/src/bundler/externals.ts +55 -0
- package/src/bundler/index.ts +21 -0
- package/src/cli/cli.test.ts +0 -44
- package/src/cli/inlined-sdk-scanner.ts +77 -0
- package/src/cli/sandbox-interlock.ts +167 -0
- package/src/cli/sandbox-runner.ts +37 -26
- package/src/cli/serve.ts +68 -69
- package/src/cli/unsupported-runtime.ts +68 -0
- package/src/conformance/.generated/can-i-use-browser.ts +2 -2
- package/src/conformance/.generated/can-i-use.ts +2 -2
- package/src/conformance/.generated/conformance-docs.ts +1 -1
- package/src/functions-rtdb/child.ts +115 -21
- package/src/functions-rtdb/development-runtime.ts +4 -0
- package/src/google-endpoints.ts +155 -0
- package/src/next/runtime-env.ts +5 -0
- package/src/next/with-pyric.ts +1 -1
- package/src/register/beacon.ts +232 -0
- package/src/register/index.ts +68 -6
- package/src/register/net-guard.ts +567 -0
- package/src/serve/ai-diagnostics-relay.ts +243 -0
- package/src/serve/ai-proxy.ts +327 -0
- package/src/serve/ai-status.ts +109 -0
- package/src/serve/ai-terminal-blocks.ts +210 -0
- package/src/serve/ai-terminal-text.ts +52 -0
- package/src/serve/beacon-route.ts +141 -0
- package/src/serve/entries/active-auth-registry.ts +56 -0
- package/src/serve/entries/active-auth.ts +100 -0
- package/src/serve/entries/auth-helper-core.ts +5 -0
- package/src/serve/entries/auth-helper-dom.ts +26 -2
- package/src/serve/entries/auth.ts +8 -0
- package/src/serve/entries/bridge-url.ts +1 -1
- package/src/serve/entries/init.ts +78 -3
- package/src/serve/entries/runtime.ts +10 -0
- package/src/serve/namespace.ts +73 -140
- package/src/serve/runtime/chip-config.ts +16 -2
- package/src/serve/runtime/chip-dialog.ts +366 -0
- package/src/serve/runtime/chip-install.ts +10 -4
- package/src/serve/runtime/chip-user-search.ts +391 -0
- package/src/serve/runtime/chip.ts +140 -15
- package/src/serve/runtime/identity.ts +26 -0
- package/src/serve/sandbox-session.ts +9 -0
- package/src/serve/studio/disk-workspace.ts +76 -2
- package/src/serve/vite-plugin.ts +8 -8
- package/src/serve/vite-sandbox-generation.ts +15 -0
- package/src/serve/worker/client/auth.ts +1 -1
- package/src/serve/worker/client/core.ts +80 -3
- package/src/serve/worker/client.ts +1 -1
- package/src/serve/worker/context-resolver.ts +60 -0
- package/src/serve/worker/entry.ts +22 -18
- package/src/serve/worker/host/core.ts +9 -7
- package/src/serve/worker/host/storage.ts +2 -2
- package/src/serve/worker/host-auth.ts +1 -1
- package/src/serve/worker/index.ts +4 -1
- package/src/serve/worker/port-lifecycle.ts +45 -0
- package/src/serve/worker/serve-init.ts +9 -2
- package/src/verify/fixture.ts +1 -1
- package/dist/serve/site-ui/_astro/app.B52xr-DK.js +0 -1
- package/dist/serve/site-ui/_astro/app.DWBraPUw.js +0 -12
- package/dist/serve/site-ui/_astro/sandbox-controls.DEpnKg-O.js +0 -1169
- package/dist/serve/site-ui/_astro/writes.rpjrFzmu.js +0 -102
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pyric/cli",
|
|
3
|
-
"version": "0.1.0-alpha.
|
|
3
|
+
"version": "0.1.0-alpha.22",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"homepage": "https://pyric.dev",
|
|
6
6
|
"repository": {
|
|
@@ -13,6 +13,12 @@
|
|
|
13
13
|
},
|
|
14
14
|
"description": "Pyric CLI for local sandbox development, verification, artifact generation, and agent bridges.",
|
|
15
15
|
"type": "module",
|
|
16
|
+
"sideEffects": [
|
|
17
|
+
"./dist/register/index.js",
|
|
18
|
+
"./src/register/index.ts",
|
|
19
|
+
"./dist/serve/entries/*.js",
|
|
20
|
+
"./src/serve/entries/*.ts"
|
|
21
|
+
],
|
|
16
22
|
"exports": {
|
|
17
23
|
"./credentials/node": {
|
|
18
24
|
"types": "./dist/credentials/node/index.d.ts",
|
|
@@ -73,6 +79,10 @@
|
|
|
73
79
|
"types": "./dist/next/index.d.ts",
|
|
74
80
|
"import": "./dist/next/index.js"
|
|
75
81
|
},
|
|
82
|
+
"./bundler": {
|
|
83
|
+
"types": "./dist/bundler/index.d.ts",
|
|
84
|
+
"import": "./dist/bundler/index.js"
|
|
85
|
+
},
|
|
76
86
|
"./serve/worker": {
|
|
77
87
|
"types": "./dist/serve/worker/index.d.ts",
|
|
78
88
|
"import": "./dist/serve/worker/index.js"
|
|
@@ -109,11 +119,12 @@
|
|
|
109
119
|
"LICENSE"
|
|
110
120
|
],
|
|
111
121
|
"scripts": {
|
|
112
|
-
"prebuild": "bun run scripts/generate-service-command-registry.ts && (test \"${PYRIC_CONFORMANCE_READY:-0}\" = \"1\" || bun run ../../packages/conformance/src/generate-projections.ts --write)",
|
|
122
|
+
"prebuild": "bun run scripts/generate-service-command-registry.ts && bun run scripts/generate-tool-family-registry.ts && (test \"${PYRIC_CONFORMANCE_READY:-0}\" = \"1\" || bun run ../../packages/conformance/src/generate-projections.ts --write)",
|
|
113
123
|
"build": "tsc && bun run scripts/postbuild.ts",
|
|
114
124
|
"pretest": "bash ../../scripts/build.sh --packages-only",
|
|
115
125
|
"test": "bun test",
|
|
116
126
|
"test:app-conformance": "playwright test app-deletion.pw.ts app-multi-app.pw.ts ai-worker-boundary.pw.ts messaging-app-boundary.pw.ts --config test/e2e/playwright.config.ts",
|
|
127
|
+
"test:identity-conformance": "playwright test identity-switch.pw.ts auth-popup.pw.ts --config test/e2e/playwright.config.ts",
|
|
117
128
|
"test:site-cli": "playwright test --config test/e2e/site-cli/playwright.config.ts",
|
|
118
129
|
"test:site-static": "playwright test --config test/e2e/site-static/playwright.config.ts",
|
|
119
130
|
"test:soak": "playwright test --config test/e2e/soak/playwright.config.ts",
|
|
@@ -127,11 +138,11 @@
|
|
|
127
138
|
"dependencies": {
|
|
128
139
|
"@inbrowser/agent": "0.4.2",
|
|
129
140
|
"@modelcontextprotocol/sdk": "^1.0.0",
|
|
130
|
-
"create-pyric": "^0.1.0-alpha.
|
|
141
|
+
"create-pyric": "^0.1.0-alpha.22",
|
|
131
142
|
"esbuild": "^0.28.0",
|
|
132
143
|
"fake-indexeddb": "^6.0.0",
|
|
133
|
-
"pyric": "^0.1.0-alpha.
|
|
134
|
-
"pyric-admin": "^0.1.0-alpha.
|
|
144
|
+
"pyric": "^0.1.0-alpha.22",
|
|
145
|
+
"pyric-admin": "^0.1.0-alpha.22",
|
|
135
146
|
"ws": "^8.18.0",
|
|
136
147
|
"zod": "^3.23.0"
|
|
137
148
|
},
|
|
@@ -397,6 +397,136 @@ export const CONFORMANCE_VERDICTS = {
|
|
|
397
397
|
"firestore#97": "supported",
|
|
398
398
|
"firestore#98": "supported",
|
|
399
399
|
"firestore#99": "supported",
|
|
400
|
+
"firestore-flutter#1": "supported",
|
|
401
|
+
"firestore-flutter#10": "qualified",
|
|
402
|
+
"firestore-flutter#11": "supported",
|
|
403
|
+
"firestore-flutter#12": "qualified",
|
|
404
|
+
"firestore-flutter#13": "qualified",
|
|
405
|
+
"firestore-flutter#14": "supported",
|
|
406
|
+
"firestore-flutter#15": "supported",
|
|
407
|
+
"firestore-flutter#16": "supported",
|
|
408
|
+
"firestore-flutter#17": "supported",
|
|
409
|
+
"firestore-flutter#18": "supported",
|
|
410
|
+
"firestore-flutter#19": "supported",
|
|
411
|
+
"firestore-flutter#2": "supported",
|
|
412
|
+
"firestore-flutter#20": "supported",
|
|
413
|
+
"firestore-flutter#21": "supported",
|
|
414
|
+
"firestore-flutter#22": "supported",
|
|
415
|
+
"firestore-flutter#23": "supported",
|
|
416
|
+
"firestore-flutter#24": "supported",
|
|
417
|
+
"firestore-flutter#25": "supported",
|
|
418
|
+
"firestore-flutter#26": "supported",
|
|
419
|
+
"firestore-flutter#27": "supported",
|
|
420
|
+
"firestore-flutter#28": "supported",
|
|
421
|
+
"firestore-flutter#29": "supported",
|
|
422
|
+
"firestore-flutter#3": "supported",
|
|
423
|
+
"firestore-flutter#30": "supported",
|
|
424
|
+
"firestore-flutter#31": "supported",
|
|
425
|
+
"firestore-flutter#32": "supported",
|
|
426
|
+
"firestore-flutter#33": "supported",
|
|
427
|
+
"firestore-flutter#34": "supported",
|
|
428
|
+
"firestore-flutter#35": "supported",
|
|
429
|
+
"firestore-flutter#36": "supported",
|
|
430
|
+
"firestore-flutter#37": "supported",
|
|
431
|
+
"firestore-flutter#38": "supported",
|
|
432
|
+
"firestore-flutter#39": "supported",
|
|
433
|
+
"firestore-flutter#4": "supported",
|
|
434
|
+
"firestore-flutter#40": "supported",
|
|
435
|
+
"firestore-flutter#41": "supported",
|
|
436
|
+
"firestore-flutter#42": "supported",
|
|
437
|
+
"firestore-flutter#43": "supported",
|
|
438
|
+
"firestore-flutter#44": "supported",
|
|
439
|
+
"firestore-flutter#45": "supported",
|
|
440
|
+
"firestore-flutter#46": "supported",
|
|
441
|
+
"firestore-flutter#47": "supported",
|
|
442
|
+
"firestore-flutter#48": "supported",
|
|
443
|
+
"firestore-flutter#49": "supported",
|
|
444
|
+
"firestore-flutter#5": "supported",
|
|
445
|
+
"firestore-flutter#50": "supported",
|
|
446
|
+
"firestore-flutter#51": "supported",
|
|
447
|
+
"firestore-flutter#52": "supported",
|
|
448
|
+
"firestore-flutter#53": "qualified",
|
|
449
|
+
"firestore-flutter#54": "supported",
|
|
450
|
+
"firestore-flutter#55": "supported",
|
|
451
|
+
"firestore-flutter#56": "supported",
|
|
452
|
+
"firestore-flutter#57": "supported",
|
|
453
|
+
"firestore-flutter#58": "supported",
|
|
454
|
+
"firestore-flutter#59": "supported",
|
|
455
|
+
"firestore-flutter#6": "supported",
|
|
456
|
+
"firestore-flutter#60": "supported",
|
|
457
|
+
"firestore-flutter#61": "supported",
|
|
458
|
+
"firestore-flutter#62": "supported",
|
|
459
|
+
"firestore-flutter#63": "supported",
|
|
460
|
+
"firestore-flutter#64": "supported",
|
|
461
|
+
"firestore-flutter#65": "supported",
|
|
462
|
+
"firestore-flutter#7": "supported",
|
|
463
|
+
"firestore-flutter#8": "supported",
|
|
464
|
+
"firestore-flutter#9": "qualified",
|
|
465
|
+
"firestore-kotlin#1": "supported",
|
|
466
|
+
"firestore-kotlin#10": "qualified",
|
|
467
|
+
"firestore-kotlin#11": "supported",
|
|
468
|
+
"firestore-kotlin#12": "qualified",
|
|
469
|
+
"firestore-kotlin#13": "qualified",
|
|
470
|
+
"firestore-kotlin#14": "supported",
|
|
471
|
+
"firestore-kotlin#15": "supported",
|
|
472
|
+
"firestore-kotlin#16": "supported",
|
|
473
|
+
"firestore-kotlin#17": "supported",
|
|
474
|
+
"firestore-kotlin#18": "supported",
|
|
475
|
+
"firestore-kotlin#19": "supported",
|
|
476
|
+
"firestore-kotlin#2": "supported",
|
|
477
|
+
"firestore-kotlin#20": "supported",
|
|
478
|
+
"firestore-kotlin#21": "supported",
|
|
479
|
+
"firestore-kotlin#22": "supported",
|
|
480
|
+
"firestore-kotlin#23": "supported",
|
|
481
|
+
"firestore-kotlin#24": "supported",
|
|
482
|
+
"firestore-kotlin#25": "supported",
|
|
483
|
+
"firestore-kotlin#26": "supported",
|
|
484
|
+
"firestore-kotlin#27": "supported",
|
|
485
|
+
"firestore-kotlin#28": "supported",
|
|
486
|
+
"firestore-kotlin#29": "supported",
|
|
487
|
+
"firestore-kotlin#3": "supported",
|
|
488
|
+
"firestore-kotlin#30": "supported",
|
|
489
|
+
"firestore-kotlin#31": "supported",
|
|
490
|
+
"firestore-kotlin#32": "supported",
|
|
491
|
+
"firestore-kotlin#33": "supported",
|
|
492
|
+
"firestore-kotlin#34": "supported",
|
|
493
|
+
"firestore-kotlin#35": "supported",
|
|
494
|
+
"firestore-kotlin#36": "supported",
|
|
495
|
+
"firestore-kotlin#37": "supported",
|
|
496
|
+
"firestore-kotlin#38": "supported",
|
|
497
|
+
"firestore-kotlin#39": "supported",
|
|
498
|
+
"firestore-kotlin#4": "supported",
|
|
499
|
+
"firestore-kotlin#40": "supported",
|
|
500
|
+
"firestore-kotlin#41": "supported",
|
|
501
|
+
"firestore-kotlin#42": "supported",
|
|
502
|
+
"firestore-kotlin#43": "supported",
|
|
503
|
+
"firestore-kotlin#44": "supported",
|
|
504
|
+
"firestore-kotlin#45": "supported",
|
|
505
|
+
"firestore-kotlin#46": "supported",
|
|
506
|
+
"firestore-kotlin#47": "supported",
|
|
507
|
+
"firestore-kotlin#48": "supported",
|
|
508
|
+
"firestore-kotlin#49": "supported",
|
|
509
|
+
"firestore-kotlin#5": "supported",
|
|
510
|
+
"firestore-kotlin#50": "supported",
|
|
511
|
+
"firestore-kotlin#51": "supported",
|
|
512
|
+
"firestore-kotlin#52": "supported",
|
|
513
|
+
"firestore-kotlin#53": "qualified",
|
|
514
|
+
"firestore-kotlin#54": "supported",
|
|
515
|
+
"firestore-kotlin#55": "supported",
|
|
516
|
+
"firestore-kotlin#56": "supported",
|
|
517
|
+
"firestore-kotlin#57": "supported",
|
|
518
|
+
"firestore-kotlin#58": "supported",
|
|
519
|
+
"firestore-kotlin#59": "supported",
|
|
520
|
+
"firestore-kotlin#6": "supported",
|
|
521
|
+
"firestore-kotlin#60": "supported",
|
|
522
|
+
"firestore-kotlin#61": "supported",
|
|
523
|
+
"firestore-kotlin#62": "supported",
|
|
524
|
+
"firestore-kotlin#63": "supported",
|
|
525
|
+
"firestore-kotlin#64": "supported",
|
|
526
|
+
"firestore-kotlin#65": "supported",
|
|
527
|
+
"firestore-kotlin#7": "supported",
|
|
528
|
+
"firestore-kotlin#8": "supported",
|
|
529
|
+
"firestore-kotlin#9": "qualified",
|
|
400
530
|
"firestore-rules#160": "supported",
|
|
401
531
|
"firestore-rules#161": "supported",
|
|
402
532
|
"firestore-rules#162": "supported",
|
|
@@ -429,6 +559,111 @@ export const CONFORMANCE_VERDICTS = {
|
|
|
429
559
|
"firestore-rules#189": "supported",
|
|
430
560
|
"firestore-rules#190": "supported",
|
|
431
561
|
"firestore-rules#191": "supported",
|
|
562
|
+
"firestore-swift#1": "supported",
|
|
563
|
+
"firestore-swift#10": "supported",
|
|
564
|
+
"firestore-swift#100": "supported",
|
|
565
|
+
"firestore-swift#101": "supported",
|
|
566
|
+
"firestore-swift#102": "supported",
|
|
567
|
+
"firestore-swift#103": "qualified",
|
|
568
|
+
"firestore-swift#104": "qualified",
|
|
569
|
+
"firestore-swift#105": "qualified",
|
|
570
|
+
"firestore-swift#11": "supported",
|
|
571
|
+
"firestore-swift#12": "supported",
|
|
572
|
+
"firestore-swift#13": "supported",
|
|
573
|
+
"firestore-swift#14": "supported",
|
|
574
|
+
"firestore-swift#15": "qualified",
|
|
575
|
+
"firestore-swift#16": "qualified",
|
|
576
|
+
"firestore-swift#17": "supported",
|
|
577
|
+
"firestore-swift#18": "qualified",
|
|
578
|
+
"firestore-swift#19": "qualified",
|
|
579
|
+
"firestore-swift#2": "supported",
|
|
580
|
+
"firestore-swift#20": "qualified",
|
|
581
|
+
"firestore-swift#21": "qualified",
|
|
582
|
+
"firestore-swift#22": "supported",
|
|
583
|
+
"firestore-swift#23": "supported",
|
|
584
|
+
"firestore-swift#24": "supported",
|
|
585
|
+
"firestore-swift#25": "supported",
|
|
586
|
+
"firestore-swift#26": "supported",
|
|
587
|
+
"firestore-swift#27": "supported",
|
|
588
|
+
"firestore-swift#28": "supported",
|
|
589
|
+
"firestore-swift#29": "supported",
|
|
590
|
+
"firestore-swift#3": "supported",
|
|
591
|
+
"firestore-swift#30": "supported",
|
|
592
|
+
"firestore-swift#31": "supported",
|
|
593
|
+
"firestore-swift#32": "supported",
|
|
594
|
+
"firestore-swift#33": "supported",
|
|
595
|
+
"firestore-swift#34": "supported",
|
|
596
|
+
"firestore-swift#35": "supported",
|
|
597
|
+
"firestore-swift#36": "supported",
|
|
598
|
+
"firestore-swift#37": "supported",
|
|
599
|
+
"firestore-swift#38": "supported",
|
|
600
|
+
"firestore-swift#39": "supported",
|
|
601
|
+
"firestore-swift#4": "supported",
|
|
602
|
+
"firestore-swift#40": "supported",
|
|
603
|
+
"firestore-swift#41": "supported",
|
|
604
|
+
"firestore-swift#42": "supported",
|
|
605
|
+
"firestore-swift#43": "supported",
|
|
606
|
+
"firestore-swift#44": "supported",
|
|
607
|
+
"firestore-swift#45": "supported",
|
|
608
|
+
"firestore-swift#46": "supported",
|
|
609
|
+
"firestore-swift#47": "supported",
|
|
610
|
+
"firestore-swift#48": "supported",
|
|
611
|
+
"firestore-swift#49": "supported",
|
|
612
|
+
"firestore-swift#5": "supported",
|
|
613
|
+
"firestore-swift#50": "supported",
|
|
614
|
+
"firestore-swift#51": "supported",
|
|
615
|
+
"firestore-swift#52": "supported",
|
|
616
|
+
"firestore-swift#53": "supported",
|
|
617
|
+
"firestore-swift#54": "supported",
|
|
618
|
+
"firestore-swift#55": "supported",
|
|
619
|
+
"firestore-swift#56": "supported",
|
|
620
|
+
"firestore-swift#57": "supported",
|
|
621
|
+
"firestore-swift#58": "supported",
|
|
622
|
+
"firestore-swift#59": "supported",
|
|
623
|
+
"firestore-swift#6": "supported",
|
|
624
|
+
"firestore-swift#60": "supported",
|
|
625
|
+
"firestore-swift#61": "supported",
|
|
626
|
+
"firestore-swift#62": "supported",
|
|
627
|
+
"firestore-swift#63": "supported",
|
|
628
|
+
"firestore-swift#64": "supported",
|
|
629
|
+
"firestore-swift#65": "supported",
|
|
630
|
+
"firestore-swift#66": "supported",
|
|
631
|
+
"firestore-swift#67": "supported",
|
|
632
|
+
"firestore-swift#68": "supported",
|
|
633
|
+
"firestore-swift#69": "supported",
|
|
634
|
+
"firestore-swift#7": "supported",
|
|
635
|
+
"firestore-swift#70": "supported",
|
|
636
|
+
"firestore-swift#71": "supported",
|
|
637
|
+
"firestore-swift#72": "supported",
|
|
638
|
+
"firestore-swift#73": "supported",
|
|
639
|
+
"firestore-swift#74": "supported",
|
|
640
|
+
"firestore-swift#75": "supported",
|
|
641
|
+
"firestore-swift#76": "supported",
|
|
642
|
+
"firestore-swift#77": "supported",
|
|
643
|
+
"firestore-swift#78": "supported",
|
|
644
|
+
"firestore-swift#79": "supported",
|
|
645
|
+
"firestore-swift#8": "supported",
|
|
646
|
+
"firestore-swift#80": "supported",
|
|
647
|
+
"firestore-swift#81": "supported",
|
|
648
|
+
"firestore-swift#82": "supported",
|
|
649
|
+
"firestore-swift#83": "supported",
|
|
650
|
+
"firestore-swift#84": "supported",
|
|
651
|
+
"firestore-swift#85": "supported",
|
|
652
|
+
"firestore-swift#86": "supported",
|
|
653
|
+
"firestore-swift#87": "supported",
|
|
654
|
+
"firestore-swift#88": "supported",
|
|
655
|
+
"firestore-swift#89": "supported",
|
|
656
|
+
"firestore-swift#9": "supported",
|
|
657
|
+
"firestore-swift#90": "supported",
|
|
658
|
+
"firestore-swift#91": "supported",
|
|
659
|
+
"firestore-swift#92": "supported",
|
|
660
|
+
"firestore-swift#93": "supported",
|
|
661
|
+
"firestore-swift#94": "supported",
|
|
662
|
+
"firestore-swift#95": "supported",
|
|
663
|
+
"firestore-swift#96": "supported",
|
|
664
|
+
"firestore-swift#97": "supported",
|
|
665
|
+
"firestore-swift#98": "supported",
|
|
666
|
+
"firestore-swift#99": "supported",
|
|
432
667
|
"firestore.binding.path-variable": "supported",
|
|
433
668
|
"firestore.binding.request": "supported",
|
|
434
669
|
"firestore.binding.request.auth": "supported",
|
|
@@ -450,7 +685,7 @@ export const CONFORMANCE_VERDICTS = {
|
|
|
450
685
|
"firestore.function.cast.int": "supported",
|
|
451
686
|
"firestore.function.cast.path": "supported",
|
|
452
687
|
"firestore.function.cast.string": "supported",
|
|
453
|
-
"firestore.function.debug": "
|
|
688
|
+
"firestore.function.debug": "supported",
|
|
454
689
|
"firestore.function.duration.abs": "supported",
|
|
455
690
|
"firestore.function.duration.time": "supported",
|
|
456
691
|
"firestore.function.duration.value": "supported",
|
|
@@ -1065,6 +1300,8 @@ export const CONFORMANCE_VERDICTS = {
|
|
|
1065
1300
|
"storage-rules#130": "supported",
|
|
1066
1301
|
"storage-rules#131": "supported",
|
|
1067
1302
|
"storage-rules#132": "supported",
|
|
1303
|
+
"storage-rules#133": "supported",
|
|
1304
|
+
"storage-rules#134": "supported",
|
|
1068
1305
|
"storage-rules#94": "supported",
|
|
1069
1306
|
"storage-rules#95": "supported",
|
|
1070
1307
|
"storage-rules#96": "supported",
|
|
@@ -1,31 +1,28 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Browser-side tool dispatcher.
|
|
3
|
-
* bridge advertises over MCP (`getSandboxToolMetadata`), so
|
|
4
|
-
* bridge LISTS and the set the page EXECUTES are identical
|
|
5
|
-
*
|
|
2
|
+
* Browser-side tool dispatcher. Composes the forwarded tool families from the
|
|
3
|
+
* same records the bridge advertises over MCP (`getSandboxToolMetadata`), so
|
|
4
|
+
* the set the bridge LISTS and the set the page EXECUTES are identical by
|
|
5
|
+
* construction: the records under `../tool-family-records/` pin the names,
|
|
6
|
+
* and `./tool-family-factories.ts` supplies one browser-safe factory per
|
|
7
|
+
* family.
|
|
6
8
|
*
|
|
7
|
-
* History of the trap this guards against: earlier this file delegated
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
9
|
+
* History of the trap this guards against: earlier this file delegated to
|
|
10
|
+
* ONLY the simulator factory, while the bridge advertised the simulator,
|
|
11
|
+
* data-plane and inspect families. The bridge therefore LISTED
|
|
12
|
+
* `firestore_create_document` / `sandbox_inspect` etc., but a `callTool`
|
|
13
|
+
* failed at dispatch with "tool 'X' is not registered with the connected
|
|
14
|
+
* sandbox peer" (succeed-at-list, fail-at-dispatch). Composing every family
|
|
15
|
+
* from the records, and deriving `SANDBOX_TOOL_NAMES` from the same records,
|
|
16
|
+
* closes the gap. The parity is pinned by `test/bridge/tool-parity.test.ts`
|
|
17
|
+
* and `test/bridge/tool-families.test.ts`.
|
|
16
18
|
*/
|
|
17
19
|
|
|
18
|
-
import {
|
|
19
|
-
import {
|
|
20
|
-
createFirestoreDataTools,
|
|
21
|
-
createFirestoreInspectTools,
|
|
22
|
-
getFirestore,
|
|
23
|
-
getAdminFirestore,
|
|
24
|
-
type As,
|
|
25
|
-
} from 'pyric/firestore';
|
|
20
|
+
import type { ToolHandler } from '@inbrowser/agent';
|
|
21
|
+
import { getFirestore, getAdminFirestore, type As } from 'pyric/firestore';
|
|
26
22
|
import { getInternalEnv } from 'pyric/sandbox/internal';
|
|
27
23
|
import type { LocalSandbox } from 'pyric/sandbox';
|
|
28
|
-
import {
|
|
24
|
+
import { assertExactToolNames, toolFamilies } from '../tool-families.js';
|
|
25
|
+
import { SANDBOX_HANDLER_FACTORIES, type SandboxBinding } from './tool-family-factories.js';
|
|
29
26
|
|
|
30
27
|
export interface DispatchResult {
|
|
31
28
|
ok: boolean;
|
|
@@ -34,11 +31,8 @@ export interface DispatchResult {
|
|
|
34
31
|
}
|
|
35
32
|
|
|
36
33
|
/**
|
|
37
|
-
* The full handler set for a sandbox:
|
|
38
|
-
*
|
|
39
|
-
* to a per-call `resolveDb`). This is the single source of truth shared
|
|
40
|
-
* by `buildSandboxDispatcher` and `SANDBOX_TOOL_NAMES`, and it MUST stay
|
|
41
|
-
* aligned with `getSandboxToolMetadata` (asserted by tool-parity.test.ts).
|
|
34
|
+
* The full handler set for a sandbox: every forwarded family bound to one
|
|
35
|
+
* `SandboxBinding` built here.
|
|
42
36
|
*
|
|
43
37
|
* Auth: `resolveDb('admin')` / `resolveDb(undefined)` is an admin-bypass handle
|
|
44
38
|
* (no rules); `resolveDb({ uid, claims })` is a rules-enforcing client acting as
|
|
@@ -46,29 +40,39 @@ export interface DispatchResult {
|
|
|
46
40
|
* `request.auth.token` shape. This is a SANDBOX dispatcher, so the admin default
|
|
47
41
|
* is intended; a dispatcher wired to a real backend must reject `'admin'`.
|
|
48
42
|
*/
|
|
49
|
-
function buildSandboxHandlers(sandbox: LocalSandbox) {
|
|
50
|
-
const
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
43
|
+
function buildSandboxHandlers(sandbox: LocalSandbox): ToolHandler[] {
|
|
44
|
+
const binding: SandboxBinding = {
|
|
45
|
+
sandbox,
|
|
46
|
+
env: getInternalEnv(sandbox),
|
|
47
|
+
resolveDb: (actor?: As) =>
|
|
48
|
+
actor && actor !== 'admin'
|
|
49
|
+
? getFirestore(sandbox.withAuth({ uid: actor.uid, token: actor.claims }))
|
|
50
|
+
: getAdminFirestore(sandbox),
|
|
51
|
+
};
|
|
52
|
+
return toolFamilies('forwarded').flatMap((family) =>
|
|
53
|
+
SANDBOX_HANDLER_FACTORIES[family.key](binding),
|
|
54
|
+
);
|
|
61
55
|
}
|
|
62
56
|
|
|
63
57
|
/**
|
|
64
58
|
* Build a dispatcher for the supplied `Sandbox`. The returned function
|
|
65
|
-
* looks up tools by name across every
|
|
59
|
+
* looks up tools by name across every family and invokes the
|
|
66
60
|
* canonical handler. Throws `UnknownToolError` on unknown names.
|
|
61
|
+
*
|
|
62
|
+
* Fails closed before any dispatch if the bound handlers do not yield exactly
|
|
63
|
+
* the names the family records pin, so a factory that drifts from its record
|
|
64
|
+
* surfaces when the sandbox connects rather than at the first call.
|
|
67
65
|
*/
|
|
68
66
|
export function buildSandboxDispatcher(
|
|
69
67
|
sandbox: LocalSandbox,
|
|
70
68
|
): (name: string, args: Record<string, unknown>) => Promise<DispatchResult> {
|
|
71
|
-
const
|
|
69
|
+
const handlers = buildSandboxHandlers(sandbox);
|
|
70
|
+
assertExactToolNames(
|
|
71
|
+
'sandbox dispatcher tools',
|
|
72
|
+
handlers.map((h) => h.name),
|
|
73
|
+
SANDBOX_TOOL_NAMES,
|
|
74
|
+
);
|
|
75
|
+
const byName = new Map(handlers.map((h) => [h.name, h]));
|
|
72
76
|
return async (name, args) => {
|
|
73
77
|
const handler = byName.get(name);
|
|
74
78
|
if (!handler) throw new UnknownToolError(name);
|
|
@@ -112,22 +116,14 @@ export async function dispatchSandboxTool(
|
|
|
112
116
|
}
|
|
113
117
|
|
|
114
118
|
/**
|
|
115
|
-
* Tool names this dispatcher recognises,
|
|
116
|
-
*
|
|
117
|
-
* bridge advertises. `connectBridge` sends this as the `hello.tools`
|
|
118
|
-
*
|
|
119
|
+
* Tool names this dispatcher recognises, read from the forwarded family
|
|
120
|
+
* records in family order, so it equals what the page executes AND what the
|
|
121
|
+
* bridge advertises. `connectBridge` sends this as the `hello.tools` payload
|
|
122
|
+
* so the bridge advertises exactly the executable set.
|
|
119
123
|
*/
|
|
120
|
-
export const SANDBOX_TOOL_NAMES: string[] = ((
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
};
|
|
124
|
-
return [
|
|
125
|
-
...createFirestoreSimulatorTools({ resolveSandbox: stub as never }),
|
|
126
|
-
...createFirestoreDataTools({ resolveDb: stub as never }),
|
|
127
|
-
...createFirestoreInspectTools({ resolveSandbox: stub as never }),
|
|
128
|
-
...createRtdbInspectionTools({ resolveSandbox: stub as never }),
|
|
129
|
-
].map((h) => h.name);
|
|
130
|
-
})();
|
|
124
|
+
export const SANDBOX_TOOL_NAMES: readonly string[] = toolFamilies('forwarded').flatMap(
|
|
125
|
+
(family) => family.tools,
|
|
126
|
+
);
|
|
131
127
|
|
|
132
128
|
export class UnknownToolError extends Error {
|
|
133
129
|
constructor(public readonly tool: string) {
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Browser-side factory for each forwarded tool family, bound to one
|
|
3
|
+
* sandbox. Imports only browser-safe subpaths (`pyric/rules/internal`, never
|
|
4
|
+
* `/node`); the Node side has its own map in `server/tool-family-factories.ts`.
|
|
5
|
+
*
|
|
6
|
+
* The keys are the family record filenames. `satisfies` against the keys
|
|
7
|
+
* derived from the generated aggregate makes a missing or surplus entry a
|
|
8
|
+
* compile error.
|
|
9
|
+
*/
|
|
10
|
+
import type { ToolHandler } from '@inbrowser/agent';
|
|
11
|
+
import { createFirestoreSimulatorTools } from 'pyric/rules/internal';
|
|
12
|
+
import {
|
|
13
|
+
createFirestoreDataTools,
|
|
14
|
+
createFirestoreInspectTools,
|
|
15
|
+
type FirestoreDataToolDeps,
|
|
16
|
+
} from 'pyric/firestore';
|
|
17
|
+
import type { LocalSandbox } from 'pyric/sandbox';
|
|
18
|
+
import type { getInternalEnv } from 'pyric/sandbox/internal';
|
|
19
|
+
import { createRtdbInspectionTools } from '../../rtdb/inspection.js';
|
|
20
|
+
import type { ForwardedFamilyKey } from '../tool-families.js';
|
|
21
|
+
|
|
22
|
+
/** Everything a forwarded family needs from one sandbox, built once per sandbox. */
|
|
23
|
+
export interface SandboxBinding {
|
|
24
|
+
sandbox: LocalSandbox;
|
|
25
|
+
env: ReturnType<typeof getInternalEnv>;
|
|
26
|
+
resolveDb: FirestoreDataToolDeps['resolveDb'];
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export const SANDBOX_HANDLER_FACTORIES = {
|
|
30
|
+
'firestore-simulator': ({ env }) => createFirestoreSimulatorTools({ resolveSandbox: () => env }),
|
|
31
|
+
'firestore-data': ({ resolveDb }) => createFirestoreDataTools({ resolveDb }),
|
|
32
|
+
'firestore-inspect': ({ sandbox }) => createFirestoreInspectTools({ resolveSandbox: () => sandbox }),
|
|
33
|
+
'rtdb-inspection': ({ sandbox }) => createRtdbInspectionTools({ resolveSandbox: () => sandbox }),
|
|
34
|
+
} satisfies Record<ForwardedFamilyKey, (binding: SandboxBinding) => ToolHandler[]>;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { ToolHandler } from '@inbrowser/agent';
|
|
2
|
+
import { assertExactToolNames, toolFamilies } from '../tool-families.js';
|
|
2
3
|
import {
|
|
3
4
|
getInProcessToolHandlers,
|
|
4
5
|
getSandboxToolMetadata,
|
|
@@ -6,75 +7,30 @@ import {
|
|
|
6
7
|
} from './tool-metadata.js';
|
|
7
8
|
|
|
8
9
|
/**
|
|
9
|
-
* The exact tools a default local Pyric MCP server forwards to its sandbox
|
|
10
|
-
*
|
|
11
|
-
*
|
|
10
|
+
* The exact tools a default local Pyric MCP server forwards to its sandbox,
|
|
11
|
+
* in `tools/list` order. Names are authored in `bridge/tool-family-records/`;
|
|
12
|
+
* a tool addition or removal is a public contract change and must update the
|
|
13
|
+
* family record deliberately.
|
|
12
14
|
*/
|
|
13
|
-
export const DEFAULT_MCP_FORWARDED_TOOL_NAMES =
|
|
14
|
-
'
|
|
15
|
-
|
|
16
|
-
'firestore_simulator_read',
|
|
17
|
-
'firestore_simulator_batch',
|
|
18
|
-
'firestore_create_with_auto_id',
|
|
19
|
-
'firestore_simulator_undo',
|
|
20
|
-
'firestore_simulator_redo',
|
|
21
|
-
'firestore_simulator_events',
|
|
22
|
-
'firestore_simulator_transaction',
|
|
23
|
-
'firestore_get_document',
|
|
24
|
-
'firestore_list_documents',
|
|
25
|
-
'firestore_create_document',
|
|
26
|
-
'firestore_add_document',
|
|
27
|
-
'firestore_update_document',
|
|
28
|
-
'firestore_delete_document',
|
|
29
|
-
'firestore_batch_write',
|
|
30
|
-
'firestore_query_where',
|
|
31
|
-
'sandbox_inspect',
|
|
32
|
-
'rtdb_simulate_access',
|
|
33
|
-
'rtdb_crawl_structure',
|
|
34
|
-
] as const;
|
|
15
|
+
export const DEFAULT_MCP_FORWARDED_TOOL_NAMES: readonly string[] = toolFamilies(
|
|
16
|
+
'forwarded',
|
|
17
|
+
).flatMap((family) => family.tools);
|
|
35
18
|
|
|
36
19
|
/** Local rules tools that run in the MCP process without a browser peer. */
|
|
37
|
-
export const DEFAULT_MCP_IN_PROCESS_TOOL_NAMES =
|
|
38
|
-
'
|
|
39
|
-
|
|
40
|
-
'firestore_rules_stdlib_get',
|
|
41
|
-
'firestore_lint_rules',
|
|
42
|
-
'firestore_resolve_modules',
|
|
43
|
-
'rules_stdlib_list',
|
|
44
|
-
'rules_stdlib_get',
|
|
45
|
-
'rules_resolve_modules',
|
|
46
|
-
'pyric_can_i_use',
|
|
47
|
-
] as const;
|
|
20
|
+
export const DEFAULT_MCP_IN_PROCESS_TOOL_NAMES: readonly string[] = toolFamilies(
|
|
21
|
+
'in-process',
|
|
22
|
+
).flatMap((family) => family.tools);
|
|
48
23
|
|
|
49
|
-
export const DEFAULT_MCP_TOOL_NAMES = [
|
|
24
|
+
export const DEFAULT_MCP_TOOL_NAMES: readonly string[] = [
|
|
50
25
|
...DEFAULT_MCP_FORWARDED_TOOL_NAMES,
|
|
51
26
|
...DEFAULT_MCP_IN_PROCESS_TOOL_NAMES,
|
|
52
|
-
]
|
|
27
|
+
];
|
|
53
28
|
|
|
54
29
|
export interface DefaultMcpToolSurface {
|
|
55
30
|
forwarded: ToolMetadata[];
|
|
56
31
|
inProcess: ToolHandler[];
|
|
57
32
|
}
|
|
58
33
|
|
|
59
|
-
function assertExactNames(
|
|
60
|
-
label: string,
|
|
61
|
-
actual: readonly string[],
|
|
62
|
-
expected: readonly string[],
|
|
63
|
-
): void {
|
|
64
|
-
const actualSorted = [...actual].sort();
|
|
65
|
-
const expectedSorted = [...expected].sort();
|
|
66
|
-
if (
|
|
67
|
-
actualSorted.length !== expectedSorted.length ||
|
|
68
|
-
actualSorted.some((name, index) => name !== expectedSorted[index])
|
|
69
|
-
) {
|
|
70
|
-
throw new Error(
|
|
71
|
-
`${label} drifted from the default MCP contract\n` +
|
|
72
|
-
`expected: ${expected.join(', ')}\n` +
|
|
73
|
-
`actual: ${actual.join(', ')}`,
|
|
74
|
-
);
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
|
|
78
34
|
/**
|
|
79
35
|
* Assemble the default MCP surface and fail closed if a factory changed
|
|
80
36
|
* without a corresponding public-contract decision.
|
|
@@ -82,12 +38,12 @@ function assertExactNames(
|
|
|
82
38
|
export function getDefaultMcpToolSurface(): DefaultMcpToolSurface {
|
|
83
39
|
const forwarded = getSandboxToolMetadata();
|
|
84
40
|
const inProcess = getInProcessToolHandlers();
|
|
85
|
-
|
|
41
|
+
assertExactToolNames(
|
|
86
42
|
'forwarded sandbox tools',
|
|
87
43
|
forwarded.map((tool) => tool.name),
|
|
88
44
|
DEFAULT_MCP_FORWARDED_TOOL_NAMES,
|
|
89
45
|
);
|
|
90
|
-
|
|
46
|
+
assertExactToolNames(
|
|
91
47
|
'in-process tools',
|
|
92
48
|
inProcess.map((tool) => tool.name),
|
|
93
49
|
DEFAULT_MCP_IN_PROCESS_TOOL_NAMES,
|
|
@@ -209,13 +209,36 @@ export function createConsumerSession(
|
|
|
209
209
|
};
|
|
210
210
|
}
|
|
211
211
|
|
|
212
|
-
|
|
212
|
+
/** Thrown by {@link collectBody} when a body exceeds the caller's limit. The
|
|
213
|
+
* code lets a route answer 413 instead of treating it as malformed JSON. */
|
|
214
|
+
export const BODY_TOO_LARGE_CODE = 'PYRIC_BODY_TOO_LARGE';
|
|
215
|
+
|
|
216
|
+
/**
|
|
217
|
+
* Read a request body and parse it as JSON.
|
|
218
|
+
*
|
|
219
|
+
* `limitBytes` caps how much is buffered. A route that is reachable by
|
|
220
|
+
* anything other than a trusted local caller must pass one: without it a
|
|
221
|
+
* single request can grow the string until the process dies.
|
|
222
|
+
*/
|
|
223
|
+
export async function collectBody(
|
|
224
|
+
req: IncomingMessage,
|
|
225
|
+
limitBytes?: number,
|
|
226
|
+
): Promise<unknown> {
|
|
213
227
|
if (req.method === 'GET' || req.method === 'DELETE') return undefined;
|
|
214
228
|
return await new Promise<unknown>((resolve, reject) => {
|
|
215
229
|
let raw = '';
|
|
230
|
+
let overLimit = false;
|
|
216
231
|
req.setEncoding('utf8');
|
|
217
232
|
req.on('data', (chunk) => {
|
|
233
|
+
// Past the limit the rest of the upload is read and discarded rather
|
|
234
|
+
// than the socket being destroyed. Destroying resets the connection, so
|
|
235
|
+
// the caller's 413 would never reach the client.
|
|
236
|
+
if (overLimit) return;
|
|
218
237
|
raw += chunk;
|
|
238
|
+
if (limitBytes === undefined || Buffer.byteLength(raw) <= limitBytes) return;
|
|
239
|
+
overLimit = true;
|
|
240
|
+
raw = '';
|
|
241
|
+
reject(Object.assign(new Error('request body too large'), { code: BODY_TOO_LARGE_CODE }));
|
|
219
242
|
});
|
|
220
243
|
req.on('end', () => {
|
|
221
244
|
if (!raw) {
|