@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
|
@@ -0,0 +1,354 @@
|
|
|
1
|
+
export function userDisplayLabel(user) {
|
|
2
|
+
if (user.displayName && user.displayName.trim().length > 0) {
|
|
3
|
+
return user.displayName.trim();
|
|
4
|
+
}
|
|
5
|
+
if (user.email && user.email.trim().length > 0) {
|
|
6
|
+
return user.email.trim();
|
|
7
|
+
}
|
|
8
|
+
return user.uid;
|
|
9
|
+
}
|
|
10
|
+
export function extractTenantFromUser(user) {
|
|
11
|
+
const claims = user.customClaims ?? {};
|
|
12
|
+
if (typeof claims.tenant === 'string')
|
|
13
|
+
return claims.tenant;
|
|
14
|
+
if (claims.firebase && typeof claims.firebase.tenant === 'string') {
|
|
15
|
+
return claims.firebase.tenant;
|
|
16
|
+
}
|
|
17
|
+
return '';
|
|
18
|
+
}
|
|
19
|
+
export function getUserProviders(user) {
|
|
20
|
+
const providers = (user.providerUserInfo ?? [])
|
|
21
|
+
.map((p) => p.providerId)
|
|
22
|
+
.filter((id) => typeof id === 'string' && id.length > 0);
|
|
23
|
+
if (user.isAnonymous && !providers.includes('anonymous')) {
|
|
24
|
+
providers.push('anonymous');
|
|
25
|
+
}
|
|
26
|
+
return providers;
|
|
27
|
+
}
|
|
28
|
+
function isAdminUser(user) {
|
|
29
|
+
const claims = user.customClaims ?? {};
|
|
30
|
+
return claims.admin === true || claims.role === 'admin';
|
|
31
|
+
}
|
|
32
|
+
export function filterUsers(users, query, filter) {
|
|
33
|
+
let list = users.filter((user) => user.disabled !== true);
|
|
34
|
+
if (filter) {
|
|
35
|
+
const f = filter.toLowerCase();
|
|
36
|
+
if (f === 'admin') {
|
|
37
|
+
list = list.filter(isAdminUser);
|
|
38
|
+
}
|
|
39
|
+
else if (f === 'tenants') {
|
|
40
|
+
list = list.filter((u) => Boolean(extractTenantFromUser(u)));
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
list = list.filter((u) => getUserProviders(u).includes(f));
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
const q = query.trim().toLowerCase();
|
|
47
|
+
if (!q)
|
|
48
|
+
return list;
|
|
49
|
+
return list.filter((u) => {
|
|
50
|
+
if (q.startsWith('provider:')) {
|
|
51
|
+
const target = q.slice(9).trim();
|
|
52
|
+
return getUserProviders(u).some((p) => p.toLowerCase().includes(target));
|
|
53
|
+
}
|
|
54
|
+
if (q.startsWith('role:')) {
|
|
55
|
+
const target = q.slice(5).trim();
|
|
56
|
+
const c = u.customClaims ?? {};
|
|
57
|
+
const role = String(c.role ?? '').toLowerCase();
|
|
58
|
+
return role.includes(target);
|
|
59
|
+
}
|
|
60
|
+
if (q.startsWith('tenant:')) {
|
|
61
|
+
const target = q.slice(7).trim();
|
|
62
|
+
const tenant = extractTenantFromUser(u).toLowerCase();
|
|
63
|
+
return tenant.includes(target);
|
|
64
|
+
}
|
|
65
|
+
if (q.startsWith('claim:')) {
|
|
66
|
+
const spec = q.slice(6).trim();
|
|
67
|
+
const delimiter = spec.includes('=') ? '=' : ':';
|
|
68
|
+
const [key, val] = spec.split(delimiter).map((s) => s.trim());
|
|
69
|
+
const c = u.customClaims ?? {};
|
|
70
|
+
if (key && val !== undefined) {
|
|
71
|
+
return String(c[key] ?? '').toLowerCase().includes(val);
|
|
72
|
+
}
|
|
73
|
+
return Object.keys(c).some((k) => k.toLowerCase().includes(spec));
|
|
74
|
+
}
|
|
75
|
+
if (q.includes(':') || q.includes('=')) {
|
|
76
|
+
const delimiter = q.includes('=') ? '=' : ':';
|
|
77
|
+
const [key, val] = q.split(delimiter).map((s) => s.trim());
|
|
78
|
+
const c = u.customClaims ?? {};
|
|
79
|
+
if (key && c[key] !== undefined && val !== undefined) {
|
|
80
|
+
return String(c[key]).toLowerCase().includes(val);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
const name = (u.displayName ?? '').toLowerCase();
|
|
84
|
+
const email = (u.email ?? '').toLowerCase();
|
|
85
|
+
const uid = u.uid.toLowerCase();
|
|
86
|
+
const tenant = extractTenantFromUser(u).toLowerCase();
|
|
87
|
+
const providers = getUserProviders(u).join(' ').toLowerCase();
|
|
88
|
+
const claims = JSON.stringify(u.customClaims ?? {}).toLowerCase();
|
|
89
|
+
return (name.includes(q)
|
|
90
|
+
|| email.includes(q)
|
|
91
|
+
|| uid.includes(q)
|
|
92
|
+
|| tenant.includes(q)
|
|
93
|
+
|| providers.includes(q)
|
|
94
|
+
|| claims.includes(q));
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
export function createUserSearchController(options) {
|
|
98
|
+
const { container, onSelect } = options;
|
|
99
|
+
const documentLike = container.ownerDocument;
|
|
100
|
+
container.innerHTML = `
|
|
101
|
+
<div class="user-search-box">
|
|
102
|
+
<span class="user-search-icon" aria-hidden="true">⌕</span>
|
|
103
|
+
<input
|
|
104
|
+
type="text"
|
|
105
|
+
class="user-search-input"
|
|
106
|
+
data-user-search-input
|
|
107
|
+
placeholder="Search name, uid, provider:google, role:admin..."
|
|
108
|
+
autocomplete="off"
|
|
109
|
+
role="combobox"
|
|
110
|
+
aria-label="Search sandbox users"
|
|
111
|
+
aria-autocomplete="list"
|
|
112
|
+
aria-expanded="false"
|
|
113
|
+
aria-controls="user-search-listbox"
|
|
114
|
+
/>
|
|
115
|
+
<button type="button" class="user-search-clear-btn" data-search-clear-btn aria-label="Clear search" style="display: none;">✕</button>
|
|
116
|
+
</div>
|
|
117
|
+
<div class="filter-chips" data-filter-chips></div>
|
|
118
|
+
<ul
|
|
119
|
+
id="user-search-listbox"
|
|
120
|
+
class="user-search-listbox"
|
|
121
|
+
data-user-search-listbox
|
|
122
|
+
role="listbox"
|
|
123
|
+
aria-label="Matching users"
|
|
124
|
+
></ul>
|
|
125
|
+
`;
|
|
126
|
+
const input = container.querySelector('[data-user-search-input]');
|
|
127
|
+
const clearBtn = container.querySelector('[data-search-clear-btn]');
|
|
128
|
+
const filterChipsEl = container.querySelector('[data-filter-chips]');
|
|
129
|
+
const listbox = container.querySelector('[data-user-search-listbox]');
|
|
130
|
+
let cachedUsers = [];
|
|
131
|
+
let currentMatches = [];
|
|
132
|
+
let activeFilter = null;
|
|
133
|
+
let highlightedIndex = -1;
|
|
134
|
+
const updateHighlight = (index) => {
|
|
135
|
+
highlightedIndex = index;
|
|
136
|
+
const items = Array.from(listbox.querySelectorAll('.user-search-item'));
|
|
137
|
+
items.forEach((item, idx) => {
|
|
138
|
+
if (idx === highlightedIndex) {
|
|
139
|
+
item.classList.add('highlighted');
|
|
140
|
+
item.setAttribute('aria-selected', 'true');
|
|
141
|
+
input.setAttribute('aria-activedescendant', item.id);
|
|
142
|
+
item.scrollIntoView?.({ block: 'nearest' });
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
145
|
+
item.classList.remove('highlighted');
|
|
146
|
+
item.setAttribute('aria-selected', 'false');
|
|
147
|
+
}
|
|
148
|
+
});
|
|
149
|
+
if (highlightedIndex < 0) {
|
|
150
|
+
input.removeAttribute('aria-activedescendant');
|
|
151
|
+
}
|
|
152
|
+
};
|
|
153
|
+
const renderFilterChips = () => {
|
|
154
|
+
if (cachedUsers.length === 0) {
|
|
155
|
+
filterChipsEl.innerHTML = '';
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
const categories = [
|
|
159
|
+
{ id: null, label: 'All' },
|
|
160
|
+
];
|
|
161
|
+
const hasAdmins = cachedUsers.some(isAdminUser);
|
|
162
|
+
if (hasAdmins)
|
|
163
|
+
categories.push({ id: 'admin', label: 'Admins' });
|
|
164
|
+
const hasTenants = cachedUsers.some((u) => Boolean(extractTenantFromUser(u)));
|
|
165
|
+
if (hasTenants)
|
|
166
|
+
categories.push({ id: 'tenants', label: 'Tenants' });
|
|
167
|
+
const providerSet = new Set();
|
|
168
|
+
cachedUsers.forEach((u) => getUserProviders(u).forEach((p) => providerSet.add(p)));
|
|
169
|
+
providerSet.forEach((p) => categories.push({ id: p, label: p }));
|
|
170
|
+
filterChipsEl.replaceChildren();
|
|
171
|
+
for (const category of categories) {
|
|
172
|
+
const button = documentLike.createElement('button');
|
|
173
|
+
button.type = 'button';
|
|
174
|
+
button.className = 'filter-chip';
|
|
175
|
+
const isSelected = activeFilter === category.id;
|
|
176
|
+
if (isSelected)
|
|
177
|
+
button.classList.add('selected');
|
|
178
|
+
button.setAttribute('aria-pressed', String(isSelected));
|
|
179
|
+
button.dataset.filter = category.id ?? '';
|
|
180
|
+
button.textContent = category.label;
|
|
181
|
+
filterChipsEl.append(button);
|
|
182
|
+
}
|
|
183
|
+
};
|
|
184
|
+
const renderMatches = () => {
|
|
185
|
+
currentMatches = filterUsers(cachedUsers, input.value, activeFilter);
|
|
186
|
+
highlightedIndex = -1;
|
|
187
|
+
input.removeAttribute('aria-activedescendant');
|
|
188
|
+
if (currentMatches.length === 0) {
|
|
189
|
+
const empty = documentLike.createElement('li');
|
|
190
|
+
empty.className = 'user-search-empty';
|
|
191
|
+
empty.setAttribute('role', 'presentation');
|
|
192
|
+
empty.textContent = 'No matching users found in sandbox';
|
|
193
|
+
listbox.replaceChildren(empty);
|
|
194
|
+
input.setAttribute('aria-expanded', 'true');
|
|
195
|
+
return;
|
|
196
|
+
}
|
|
197
|
+
const items = currentMatches.map((user, index) => {
|
|
198
|
+
const label = userDisplayLabel(user);
|
|
199
|
+
const tenant = extractTenantFromUser(user);
|
|
200
|
+
const providers = getUserProviders(user);
|
|
201
|
+
const claims = user.customClaims ?? {};
|
|
202
|
+
let claimsSummary = '';
|
|
203
|
+
if (Object.keys(claims).length > 0) {
|
|
204
|
+
claimsSummary = JSON.stringify(claims).slice(0, 40);
|
|
205
|
+
}
|
|
206
|
+
const item = documentLike.createElement('li');
|
|
207
|
+
item.id = `user-search-item-${index}`;
|
|
208
|
+
item.className = 'user-search-item';
|
|
209
|
+
item.setAttribute('role', 'option');
|
|
210
|
+
item.setAttribute('aria-selected', 'false');
|
|
211
|
+
item.dataset.userIndex = String(index);
|
|
212
|
+
const main = documentLike.createElement('div');
|
|
213
|
+
main.className = 'user-item-main';
|
|
214
|
+
const name = documentLike.createElement('span');
|
|
215
|
+
name.className = 'user-item-name';
|
|
216
|
+
name.textContent = label;
|
|
217
|
+
main.append(name);
|
|
218
|
+
if (user.email && user.email !== label) {
|
|
219
|
+
const email = documentLike.createElement('span');
|
|
220
|
+
email.className = 'user-item-email';
|
|
221
|
+
email.textContent = user.email;
|
|
222
|
+
main.append(email);
|
|
223
|
+
}
|
|
224
|
+
const uid = documentLike.createElement('span');
|
|
225
|
+
uid.className = 'user-item-uid';
|
|
226
|
+
uid.textContent = user.uid;
|
|
227
|
+
main.append(uid);
|
|
228
|
+
const badges = documentLike.createElement('div');
|
|
229
|
+
badges.className = 'user-item-badges';
|
|
230
|
+
for (const provider of providers) {
|
|
231
|
+
const badge = documentLike.createElement('span');
|
|
232
|
+
badge.className = 'badge badge-provider';
|
|
233
|
+
badge.textContent = provider;
|
|
234
|
+
badges.append(badge);
|
|
235
|
+
}
|
|
236
|
+
if (tenant) {
|
|
237
|
+
const badge = documentLike.createElement('span');
|
|
238
|
+
badge.className = 'badge badge-tenant';
|
|
239
|
+
badge.textContent = tenant;
|
|
240
|
+
badges.append(badge);
|
|
241
|
+
}
|
|
242
|
+
if (claimsSummary) {
|
|
243
|
+
const badge = documentLike.createElement('span');
|
|
244
|
+
badge.className = 'badge badge-claims';
|
|
245
|
+
badge.title = claimsSummary;
|
|
246
|
+
badge.textContent = claimsSummary;
|
|
247
|
+
badges.append(badge);
|
|
248
|
+
}
|
|
249
|
+
item.append(main, badges);
|
|
250
|
+
return item;
|
|
251
|
+
});
|
|
252
|
+
listbox.replaceChildren(...items);
|
|
253
|
+
listbox.style.display = 'block';
|
|
254
|
+
input.setAttribute('aria-expanded', 'true');
|
|
255
|
+
};
|
|
256
|
+
input.addEventListener('input', () => {
|
|
257
|
+
clearBtn.style.display = input.value.length > 0 ? 'inline-block' : 'none';
|
|
258
|
+
renderMatches();
|
|
259
|
+
});
|
|
260
|
+
input.addEventListener('focus', () => {
|
|
261
|
+
renderMatches();
|
|
262
|
+
});
|
|
263
|
+
clearBtn.addEventListener('click', (e) => {
|
|
264
|
+
e.stopPropagation();
|
|
265
|
+
input.value = '';
|
|
266
|
+
clearBtn.style.display = 'none';
|
|
267
|
+
renderMatches();
|
|
268
|
+
input.focus();
|
|
269
|
+
});
|
|
270
|
+
input.addEventListener('keydown', (e) => {
|
|
271
|
+
if (listbox.style.display === 'none') {
|
|
272
|
+
if (e.key === 'ArrowDown' || e.key === 'ArrowUp') {
|
|
273
|
+
renderMatches();
|
|
274
|
+
e.preventDefault();
|
|
275
|
+
return;
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
const items = Array.from(listbox.querySelectorAll('.user-search-item'));
|
|
279
|
+
if (items.length === 0)
|
|
280
|
+
return;
|
|
281
|
+
if (e.key === 'ArrowDown') {
|
|
282
|
+
e.preventDefault();
|
|
283
|
+
const next = (highlightedIndex + 1) % items.length;
|
|
284
|
+
updateHighlight(next);
|
|
285
|
+
}
|
|
286
|
+
else if (e.key === 'ArrowUp') {
|
|
287
|
+
e.preventDefault();
|
|
288
|
+
const prev = (highlightedIndex - 1 + items.length) % items.length;
|
|
289
|
+
updateHighlight(prev);
|
|
290
|
+
}
|
|
291
|
+
else if (e.key === 'Enter') {
|
|
292
|
+
if (highlightedIndex >= 0 && highlightedIndex < currentMatches.length) {
|
|
293
|
+
e.preventDefault();
|
|
294
|
+
const selected = currentMatches[highlightedIndex];
|
|
295
|
+
onSelect(selected);
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
else if (e.key === 'Escape') {
|
|
299
|
+
if (input.value) {
|
|
300
|
+
e.stopPropagation();
|
|
301
|
+
input.value = '';
|
|
302
|
+
clearBtn.style.display = 'none';
|
|
303
|
+
renderMatches();
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
});
|
|
307
|
+
filterChipsEl.addEventListener('click', (e) => {
|
|
308
|
+
e.stopPropagation();
|
|
309
|
+
const target = e.target.closest('.filter-chip');
|
|
310
|
+
if (!target)
|
|
311
|
+
return;
|
|
312
|
+
const filterVal = target.getAttribute('data-filter') || null;
|
|
313
|
+
if (filterVal === null) {
|
|
314
|
+
activeFilter = null;
|
|
315
|
+
}
|
|
316
|
+
else {
|
|
317
|
+
activeFilter = activeFilter === filterVal ? null : filterVal;
|
|
318
|
+
}
|
|
319
|
+
renderFilterChips();
|
|
320
|
+
renderMatches();
|
|
321
|
+
});
|
|
322
|
+
listbox.addEventListener('click', (e) => {
|
|
323
|
+
e.stopPropagation();
|
|
324
|
+
const target = e.target.closest('.user-search-item');
|
|
325
|
+
if (!target)
|
|
326
|
+
return;
|
|
327
|
+
const idx = Number(target.getAttribute('data-user-index'));
|
|
328
|
+
if (!Number.isNaN(idx) && currentMatches[idx]) {
|
|
329
|
+
const selected = currentMatches[idx];
|
|
330
|
+
onSelect(selected);
|
|
331
|
+
}
|
|
332
|
+
});
|
|
333
|
+
return {
|
|
334
|
+
setUsers(users) {
|
|
335
|
+
cachedUsers = users;
|
|
336
|
+
renderFilterChips();
|
|
337
|
+
renderMatches();
|
|
338
|
+
},
|
|
339
|
+
reset() {
|
|
340
|
+
input.value = '';
|
|
341
|
+
clearBtn.style.display = 'none';
|
|
342
|
+
activeFilter = null;
|
|
343
|
+
highlightedIndex = -1;
|
|
344
|
+
input.setAttribute('aria-expanded', 'false');
|
|
345
|
+
input.removeAttribute('aria-activedescendant');
|
|
346
|
+
renderFilterChips();
|
|
347
|
+
renderMatches();
|
|
348
|
+
},
|
|
349
|
+
focus() {
|
|
350
|
+
input.focus();
|
|
351
|
+
},
|
|
352
|
+
};
|
|
353
|
+
}
|
|
354
|
+
//# sourceMappingURL=chip-user-search.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chip-user-search.js","sourceRoot":"","sources":["../../../src/serve/runtime/chip-user-search.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
import type { AuthLens } from 'pyric/sandbox';
|
|
1
2
|
import type { PyricRuntimeError, PyricRuntimeStatus } from './status.js';
|
|
3
|
+
import type { RuntimeIdentityBindings } from './identity.js';
|
|
2
4
|
export interface PyricRuntimeChipOptions {
|
|
3
5
|
runtime: PyricRuntimeStatus;
|
|
4
6
|
document?: Document;
|
|
@@ -6,6 +8,14 @@ export interface PyricRuntimeChipOptions {
|
|
|
6
8
|
initiallyOpen?: boolean;
|
|
7
9
|
/** Override Studio availability. Omitted uses the runtime manifest URL. */
|
|
8
10
|
studioUrl?: string | null;
|
|
11
|
+
/** Optional identity integration. Missing operations use lens/no-op fallbacks. */
|
|
12
|
+
identity?: Partial<RuntimeIdentityBindings>;
|
|
13
|
+
/** Injectable lens getter (defaults to worker client getLens). */
|
|
14
|
+
getLens?: () => AuthLens | undefined;
|
|
15
|
+
/** Injectable lens setter (defaults to worker client setLens). */
|
|
16
|
+
setLens?: (lens: AuthLens | undefined) => void;
|
|
17
|
+
/** Injectable lens subscription (defaults to worker client subscribeLens). */
|
|
18
|
+
subscribeLens?: (listener: (lens: AuthLens | undefined) => void) => () => void;
|
|
9
19
|
}
|
|
10
20
|
export interface PyricRuntimeChip {
|
|
11
21
|
element: HTMLElement;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chip.d.ts","sourceRoot":"","sources":["../../../src/serve/runtime/chip.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EAEjB,kBAAkB,EACnB,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"chip.d.ts","sourceRoot":"","sources":["../../../src/serve/runtime/chip.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,KAAK,EACV,iBAAiB,EAEjB,kBAAkB,EACnB,MAAM,aAAa,CAAC;AAMrB,OAAO,KAAK,EAAmB,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAO9E,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,kBAAkB,CAAC;IAC5B,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,SAAS,CAAC,EAAE,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IACzC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,2EAA2E;IAC3E,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,kFAAkF;IAClF,QAAQ,CAAC,EAAE,OAAO,CAAC,uBAAuB,CAAC,CAAC;IAC5C,kEAAkE;IAClE,OAAO,CAAC,EAAE,MAAM,QAAQ,GAAG,SAAS,CAAC;IACrC,kEAAkE;IAClE,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,GAAG,SAAS,KAAK,IAAI,CAAC;IAC/C,8EAA8E;IAC9E,aAAa,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,QAAQ,GAAG,SAAS,KAAK,IAAI,KAAK,MAAM,IAAI,CAAC;CAChF;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,WAAW,CAAC;IACrB,OAAO,IAAI,IAAI,CAAC;CACjB;AA2JD,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,iBAAiB,GAAG,MAAM,CAQxE;AAcD,+EAA+E;AAC/E,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,uBAAuB,GAAG,gBAAgB,CAwPxF"}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { createChipDialogController, DIALOG_STYLES, } from './chip-dialog.js';
|
|
2
|
+
import { getLens as defaultGetLens, setLens as defaultSetLens, subscribeLens as defaultSubscribeLens, } from '../worker/client/core.js';
|
|
1
3
|
function aiEngineState() {
|
|
2
4
|
const engine = globalThis.__PYRIC_AI_ENGINE__;
|
|
3
5
|
if (engine?.kind === 'gemini') {
|
|
@@ -63,9 +65,14 @@ const styles = `
|
|
|
63
65
|
.brand-label { font-size: 11px; }
|
|
64
66
|
.signals { color: var(--pyric-muted); font-size: 10px; gap: 8px; }
|
|
65
67
|
.signal { gap: 4px; white-space: nowrap; }
|
|
68
|
+
.signal[data-identity-badge] {
|
|
69
|
+
max-width: 140px;
|
|
70
|
+
overflow: hidden;
|
|
71
|
+
text-overflow: ellipsis;
|
|
72
|
+
}
|
|
66
73
|
.dot { background: var(--pyric-accent); border-radius: 50%; height: 8px; width: 8px; }
|
|
67
|
-
.dot.error { background: var(--pyric-error); box-shadow: 0 0 0 3px rgba(240,160,160,.12); }
|
|
68
74
|
.signal.update { color: var(--pyric-warning); }
|
|
75
|
+
.signal.bypass { color: #8f7fe8; font-weight: 500; }
|
|
69
76
|
.chevron { color: var(--pyric-muted); height: 14px; width: 14px; }
|
|
70
77
|
.panel {
|
|
71
78
|
background: var(--pyric-bg);
|
|
@@ -107,7 +114,7 @@ const styles = `
|
|
|
107
114
|
.error-body code { color: #d7d7df; display: block; font-size: 11px; line-height: 1.55; overflow-wrap: anywhere; white-space: pre-wrap; }
|
|
108
115
|
.error-meta { color: var(--pyric-muted); font: 9px/1.4 ui-monospace, monospace; margin-top: 4px; overflow-wrap: anywhere; }
|
|
109
116
|
.empty { align-items: center; color: var(--pyric-muted); display: flex; font: 11px/1.5 ui-monospace, monospace; min-height: 57px; padding: 12px; }
|
|
110
|
-
.actions { display: grid; gap: 8px; grid-template-columns:
|
|
117
|
+
.actions { display: grid; gap: 8px; grid-template-columns: repeat(3, 1fr); min-height: 56px; padding: 10px 12px; }
|
|
111
118
|
.button { align-items: center; background: transparent; border: 1px solid var(--pyric-border-soft); border-radius: 4px; color: var(--pyric-muted); display: inline-flex; font-size: 10px; justify-content: center; letter-spacing: .06em; min-height: 34px; padding: 6px 8px; text-decoration: none; text-transform: uppercase; }
|
|
112
119
|
button.button { cursor: pointer; }
|
|
113
120
|
.button:hover:not(:disabled):not([aria-disabled="true"]), a.button:hover { border-color: #3a3a48; color: var(--pyric-text); }
|
|
@@ -124,6 +131,8 @@ const styles = `
|
|
|
124
131
|
.chip, .panel { animation: pyric-enter 120ms ease-out; transform-origin: bottom right; }
|
|
125
132
|
@keyframes pyric-enter { from { opacity: 0; transform: translateY(4px) scale(.98); } }
|
|
126
133
|
}
|
|
134
|
+
|
|
135
|
+
${DIALOG_STYLES}
|
|
127
136
|
`;
|
|
128
137
|
const icons = {
|
|
129
138
|
close: '<svg class="icon" aria-hidden="true" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8"><path d="m6 6 12 12M18 6 6 18"/></svg>',
|
|
@@ -133,7 +142,7 @@ const icons = {
|
|
|
133
142
|
external: '<svg aria-hidden="true" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8"><path d="M14 5h5v5M19 5l-8 8"/><path d="M19 13v6H5V5h6"/></svg>',
|
|
134
143
|
};
|
|
135
144
|
function escapeAttribute(value) {
|
|
136
|
-
return value.replaceAll('&', '&').replaceAll('"', '"').replaceAll('<', '<');
|
|
145
|
+
return value.replaceAll('&', '&').replaceAll('"', '"').replaceAll('<', '<').replaceAll('>', '>');
|
|
137
146
|
}
|
|
138
147
|
export function formatPyricRuntimeError(error) {
|
|
139
148
|
const context = [
|
|
@@ -159,7 +168,17 @@ function renderErrors(snapshot, canCopy) {
|
|
|
159
168
|
/** Mount the framework-independent runtime chip in an isolated shadow root. */
|
|
160
169
|
export function mountPyricRuntimeChip(options) {
|
|
161
170
|
const documentLike = options.document ?? document;
|
|
162
|
-
const
|
|
171
|
+
const existingHost = documentLike.querySelector('[data-pyric-runtime-chip-host], pyric-runtime-chip');
|
|
172
|
+
if (existingHost) {
|
|
173
|
+
existingHost.remove();
|
|
174
|
+
}
|
|
175
|
+
let host;
|
|
176
|
+
try {
|
|
177
|
+
host = documentLike.createElement('pyric-runtime-chip');
|
|
178
|
+
}
|
|
179
|
+
catch {
|
|
180
|
+
host = documentLike.createElement('div');
|
|
181
|
+
}
|
|
163
182
|
host.setAttribute('data-pyric-runtime-chip-host', '');
|
|
164
183
|
const root = host.attachShadow({ mode: 'open' });
|
|
165
184
|
root.innerHTML = `<style>${styles}</style><div class="announcer" role="status" aria-live="polite" aria-atomic="true"></div><div data-view></div>`;
|
|
@@ -172,6 +191,53 @@ export function mountPyricRuntimeChip(options) {
|
|
|
172
191
|
: options.runtime.getSnapshot().manifest.studioUrl;
|
|
173
192
|
let open = options.initiallyOpen ?? false;
|
|
174
193
|
let snapshot = options.runtime.getSnapshot();
|
|
194
|
+
const getLensFn = options.getLens ?? defaultGetLens;
|
|
195
|
+
const setLensFn = options.setLens ?? defaultSetLens;
|
|
196
|
+
const subscribeLensFn = options.subscribeLens ?? defaultSubscribeLens;
|
|
197
|
+
const providedIdentity = options.identity;
|
|
198
|
+
let clientUser = null;
|
|
199
|
+
const readCurrentUser = () => {
|
|
200
|
+
if (providedIdentity?.getCurrentUser)
|
|
201
|
+
return providedIdentity.getCurrentUser();
|
|
202
|
+
return clientUser;
|
|
203
|
+
};
|
|
204
|
+
clientUser = readCurrentUser();
|
|
205
|
+
const identity = {
|
|
206
|
+
listUsers: providedIdentity?.listUsers ?? (() => []),
|
|
207
|
+
switchUser: async (uid) => {
|
|
208
|
+
if (providedIdentity?.switchUser)
|
|
209
|
+
await providedIdentity.switchUser(uid);
|
|
210
|
+
else
|
|
211
|
+
setLensFn({ mode: 'as', uid });
|
|
212
|
+
clientUser = readCurrentUser();
|
|
213
|
+
render();
|
|
214
|
+
},
|
|
215
|
+
signOut: async () => {
|
|
216
|
+
if (providedIdentity?.signOut)
|
|
217
|
+
await providedIdentity.signOut();
|
|
218
|
+
else
|
|
219
|
+
setLensFn(undefined);
|
|
220
|
+
clientUser = null;
|
|
221
|
+
render();
|
|
222
|
+
},
|
|
223
|
+
openCreateUser: providedIdentity?.openCreateUser ?? (() => { }),
|
|
224
|
+
getCurrentUser: readCurrentUser,
|
|
225
|
+
subscribeAuth: providedIdentity?.subscribeAuth ?? (() => () => { }),
|
|
226
|
+
};
|
|
227
|
+
const dialogController = createChipDialogController({
|
|
228
|
+
shadowRoot: root,
|
|
229
|
+
identity,
|
|
230
|
+
onToggleAdminBypass: (enable) => {
|
|
231
|
+
if (enable) {
|
|
232
|
+
setLensFn({ mode: 'admin' });
|
|
233
|
+
}
|
|
234
|
+
else {
|
|
235
|
+
setLensFn(undefined);
|
|
236
|
+
}
|
|
237
|
+
render();
|
|
238
|
+
},
|
|
239
|
+
getLens: () => getLensFn(),
|
|
240
|
+
});
|
|
175
241
|
const render = (next = snapshot) => {
|
|
176
242
|
const active = root.activeElement;
|
|
177
243
|
const oldViewport = view.querySelector('[data-error-viewport]');
|
|
@@ -182,7 +248,7 @@ export function mountPyricRuntimeChip(options) {
|
|
|
182
248
|
}
|
|
183
249
|
: null;
|
|
184
250
|
const activeCopyId = active?.getAttribute('data-copy-error');
|
|
185
|
-
const activeControl = ['data-expand', 'data-collapse', 'data-update-worker', 'data-open-studio']
|
|
251
|
+
const activeControl = ['data-expand', 'data-collapse', 'data-update-worker', 'data-open-studio', 'data-open-impersonate']
|
|
186
252
|
.find((attribute) => active?.hasAttribute(attribute));
|
|
187
253
|
const focusToken = activeCopyId !== null && activeCopyId !== undefined
|
|
188
254
|
? { attribute: 'data-copy-error', value: activeCopyId }
|
|
@@ -197,40 +263,57 @@ export function mountPyricRuntimeChip(options) {
|
|
|
197
263
|
? 'Sandbox starting'
|
|
198
264
|
: snapshot.mode === 'in-page'
|
|
199
265
|
? 'In-page sandbox'
|
|
200
|
-
: 'Worker
|
|
266
|
+
: 'Worker version';
|
|
201
267
|
const epochs = snapshot.updateAvailable
|
|
202
268
|
? `${snapshot.runningEpoch?.slice(0, 8) ?? 'unknown'} → ${snapshot.servedEpoch?.slice(0, 8) ?? 'unknown'}`
|
|
203
269
|
: snapshot.runningEpoch?.slice(0, 8) ?? '';
|
|
204
270
|
const aiState = aiEngineState();
|
|
271
|
+
const lens = getLensFn();
|
|
272
|
+
const user = readCurrentUser();
|
|
273
|
+
const isAdmin = lens?.mode === 'admin';
|
|
274
|
+
const activeUid = lens?.mode === 'as' ? lens.uid : user?.uid;
|
|
275
|
+
const identitySignals = [];
|
|
276
|
+
let identityStateHtml = '<span class="epochs" data-identity-state>App session</span>';
|
|
277
|
+
if (activeUid) {
|
|
278
|
+
identitySignals.push(`<span class="signal" data-identity-badge title="as: ${escapeAttribute(activeUid)}">as: ${escapeAttribute(activeUid)}</span>`);
|
|
279
|
+
identityStateHtml = `<span class="epochs" data-identity-state data-identity-badge title="as: ${escapeAttribute(activeUid)}">as: ${escapeAttribute(activeUid)}</span>`;
|
|
280
|
+
}
|
|
281
|
+
if (isAdmin) {
|
|
282
|
+
identitySignals.push('<span class="signal bypass" data-identity-badge>bypass rules</span>');
|
|
283
|
+
}
|
|
284
|
+
const identitySignalHtml = identitySignals.join('');
|
|
205
285
|
view.innerHTML = `${open ? `
|
|
206
|
-
<section class="panel" role="dialog" aria-label="
|
|
286
|
+
<section class="panel" role="dialog" aria-label="pyric">
|
|
207
287
|
<header class="panel-header">
|
|
208
|
-
<div class="panel-title"><span class="brand-mark">>_</span><strong>
|
|
288
|
+
<div class="panel-title"><span class="brand-mark">>_</span><strong>pyric</strong>${errorCount > 0 ? `<span class="count">${errorCount} ${errorCount === 1 ? 'error' : 'errors'}</span><button class="clear-button" type="button" data-clear-errors aria-label="Clear all errors">Clear</button>` : ''}</div>
|
|
209
289
|
<div class="panel-controls">
|
|
210
|
-
<button class="icon-button" type="button" data-collapse aria-label="Minimize
|
|
211
|
-
<button class="icon-button" type="button" data-dismiss-chip aria-label="Dismiss
|
|
290
|
+
<button class="icon-button" type="button" data-collapse aria-label="Minimize pyric">${icons.minimize}</button>
|
|
291
|
+
<button class="icon-button" type="button" data-dismiss-chip aria-label="Dismiss pyric from page">${icons.close}</button>
|
|
212
292
|
</div>
|
|
213
293
|
</header>
|
|
214
|
-
<div class="worker-state"><span class="state-label${snapshot.updateAvailable ? ' available' : ''}"
|
|
294
|
+
<div class="worker-state"><span class="state-label${snapshot.updateAvailable ? ' available' : ''}">${workerLabel}</span><span class="epochs">${epochs}</span></div>
|
|
215
295
|
<div class="worker-state-col" data-ai-status>
|
|
216
296
|
<div class="worker-state-row">
|
|
217
|
-
<span class="state-label"
|
|
297
|
+
<span class="state-label">AI engine</span>
|
|
218
298
|
<span class="epochs">${aiState.primary}</span>
|
|
219
299
|
</div>
|
|
220
300
|
${aiState.subline ? `<div class="worker-state-subline">${aiState.subline}</div>` : ''}
|
|
221
301
|
</div>
|
|
302
|
+
<div class="worker-state"><span class="state-label">Rules</span><span class="epochs" style="${isAdmin ? 'color: #8f7fe8; font-weight: 500;' : ''}">${isAdmin ? 'bypassed' : 'enforced'}</span></div>
|
|
303
|
+
<div class="worker-state"><span class="state-label">Identity</span>${identityStateHtml}</div>
|
|
222
304
|
<div class="errors" data-error-viewport>${renderErrors(snapshot, Boolean(clipboard))}</div>
|
|
223
305
|
<div class="actions">
|
|
224
306
|
<button class="button update" type="button" data-update-worker ${snapshot.updateAvailable ? '' : 'disabled'} aria-disabled="${snapshot.updateAvailable && !snapshot.updatingWorker ? 'false' : 'true'}">${snapshot.updatingWorker ? 'Updating…' : 'Update worker'}</button>
|
|
307
|
+
<button class="button" type="button" data-open-impersonate>Identity</button>
|
|
225
308
|
${studioUrl
|
|
226
309
|
? `<a class="button" data-open-studio href="${escapeAttribute(studioUrl)}" target="_blank" rel="noopener noreferrer">Studio${icons.external}</a>`
|
|
227
310
|
: `<span class="button" data-open-studio aria-disabled="true" title="Pyric Studio is disabled">Studio${icons.external}</span>`}
|
|
228
311
|
</div>
|
|
229
312
|
</section>
|
|
230
313
|
` : `
|
|
231
|
-
<button class="chip" type="button" data-expand aria-label="Open
|
|
232
|
-
<span class="brand"><span class="dot${errorCount > 0 ? ' error' : ''}"></span><span class="brand-label">
|
|
233
|
-
<span class="signals">${snapshot.updateAvailable ? '<span class="signal update">update</span>' : ''}${errorCount > 0 ? `<span class="signal">${errorCount} ${errorCount === 1 ? 'error' : 'errors'}</span>` : '
|
|
314
|
+
<button class="chip" type="button" data-expand aria-label="Open pyric" aria-expanded="false">
|
|
315
|
+
<span class="brand"><span class="dot${errorCount > 0 ? ' error' : ''}"></span><span class="brand-label">pyric</span></span>
|
|
316
|
+
<span class="signals">${identitySignalHtml}${snapshot.updateAvailable ? '<span class="signal update">update</span>' : ''}${errorCount > 0 ? `<span class="signal">${errorCount} ${errorCount === 1 ? 'error' : 'errors'}</span>` : ''}${icons.chevron}</span>
|
|
234
317
|
</button>
|
|
235
318
|
`}`;
|
|
236
319
|
const announcement = `${workerLabel}. ${errorCount === 0 ? 'No runtime errors' : `${errorCount} runtime ${errorCount === 1 ? 'error' : 'errors'}`}.`;
|
|
@@ -271,6 +354,9 @@ export function mountPyricRuntimeChip(options) {
|
|
|
271
354
|
return;
|
|
272
355
|
void options.runtime.updateWorker().catch(() => { });
|
|
273
356
|
});
|
|
357
|
+
root.querySelector('[data-open-impersonate]')?.addEventListener('click', (e) => {
|
|
358
|
+
void dialogController.open(e.currentTarget);
|
|
359
|
+
});
|
|
274
360
|
for (const button of root.querySelectorAll('[data-copy-error]')) {
|
|
275
361
|
button.addEventListener('click', () => {
|
|
276
362
|
const error = snapshot.errors.find((item) => item.id === button.dataset.copyError);
|
|
@@ -297,11 +383,28 @@ export function mountPyricRuntimeChip(options) {
|
|
|
297
383
|
}
|
|
298
384
|
};
|
|
299
385
|
documentLike.body.append(host);
|
|
386
|
+
const reattachAfterAstroSwap = () => {
|
|
387
|
+
if (!host.isConnected)
|
|
388
|
+
documentLike.body.append(host);
|
|
389
|
+
};
|
|
390
|
+
documentLike.addEventListener('astro:after-swap', reattachAfterAstroSwap);
|
|
300
391
|
const unsubscribe = options.runtime.subscribe(render);
|
|
392
|
+
const unsubLens = subscribeLensFn(() => {
|
|
393
|
+
render();
|
|
394
|
+
});
|
|
395
|
+
const unsubAuth = identity.subscribeAuth((user) => {
|
|
396
|
+
clientUser = user;
|
|
397
|
+
render();
|
|
398
|
+
});
|
|
399
|
+
render();
|
|
301
400
|
return {
|
|
302
401
|
element: host,
|
|
303
402
|
dispose() {
|
|
304
403
|
unsubscribe();
|
|
404
|
+
unsubLens();
|
|
405
|
+
unsubAuth();
|
|
406
|
+
documentLike.removeEventListener('astro:after-swap', reattachAfterAstroSwap);
|
|
407
|
+
dialogController.dispose();
|
|
305
408
|
host.remove();
|
|
306
409
|
},
|
|
307
410
|
};
|