okengine 0.1.4
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/AGENTS.md +91 -0
- package/README.md +327 -0
- package/docs/spec/complete-example.md +1188 -0
- package/docs/spec/console.md +739 -0
- package/docs/spec/four-applications.md +1188 -0
- package/docs/spec/unified-theory.md +489 -0
- package/package.json +152 -0
- package/spec/manifest.v1.schema.json +624 -0
- package/src/auth/api-keys.ts +168 -0
- package/src/auth/attenuation.ts +116 -0
- package/src/auth/auth.test.ts +273 -0
- package/src/auth/cross-plane.ts +98 -0
- package/src/auth/index.ts +112 -0
- package/src/auth/invites.ts +66 -0
- package/src/auth/invoke-as.ts +49 -0
- package/src/auth/operator.ts +178 -0
- package/src/auth/planes.ts +102 -0
- package/src/auth/plugin.ts +44 -0
- package/src/auth/roles.ts +84 -0
- package/src/auth/sessions.ts +418 -0
- package/src/auth/tables.ts +131 -0
- package/src/cli/args.ts +50 -0
- package/src/cli/branch.ts +75 -0
- package/src/cli/build.ts +86 -0
- package/src/cli/client-add.test.ts +140 -0
- package/src/cli/client-add.ts +164 -0
- package/src/cli/completion.test.ts +58 -0
- package/src/cli/completion.ts +296 -0
- package/src/cli/dev-app-runner.ts +77 -0
- package/src/cli/dev.test.ts +435 -0
- package/src/cli/dev.ts +594 -0
- package/src/cli/doc-drift.test.ts +146 -0
- package/src/cli/doc-drift.ts +397 -0
- package/src/cli/docker-cli.test.ts +221 -0
- package/src/cli/docker.ts +127 -0
- package/src/cli/doctor-diff-examples.ts +92 -0
- package/src/cli/doctor-diff.test.ts +91 -0
- package/src/cli/doctor-diff.ts +274 -0
- package/src/cli/doctor-pii.test.ts +98 -0
- package/src/cli/doctor-pii.ts +151 -0
- package/src/cli/doctor.test.ts +150 -0
- package/src/cli/doctor.ts +223 -0
- package/src/cli/eval.ts +122 -0
- package/src/cli/exit.ts +19 -0
- package/src/cli/gates-list.test.ts +47 -0
- package/src/cli/gates-list.ts +84 -0
- package/src/cli/images.ts +277 -0
- package/src/cli/index.ts +99 -0
- package/src/cli/json-out.test.ts +129 -0
- package/src/cli/load-config.ts +71 -0
- package/src/cli/mcp-from-console.ts +50 -0
- package/src/cli/privacy-erase.ts +73 -0
- package/src/cli/registry.ts +455 -0
- package/src/cli/safe-defaults.test.ts +92 -0
- package/src/cli/schema.ts +196 -0
- package/src/cli/stack.ts +82 -0
- package/src/cli/start.ts +106 -0
- package/src/cli/upgrade.ts +105 -0
- package/src/cli/vault-cmd.ts +140 -0
- package/src/client/budget-entry.ts +34 -0
- package/src/client/budget.test.ts +17 -0
- package/src/client/create.test.ts +159 -0
- package/src/client/create.ts +152 -0
- package/src/client/errors.ts +60 -0
- package/src/client/index.ts +35 -0
- package/src/client/notes-contract.test.ts +289 -0
- package/src/client/transport.test.ts +123 -0
- package/src/client/transport.ts +254 -0
- package/src/client/types.ts +282 -0
- package/src/compiler/aot.test.ts +248 -0
- package/src/compiler/aot.ts +182 -0
- package/src/compiler/differential.test.ts +241 -0
- package/src/compiler/dynamic.ts +54 -0
- package/src/compiler/effects-infer.ts +541 -0
- package/src/compiler/emit.ts +40 -0
- package/src/compiler/extract.test.ts +177 -0
- package/src/compiler/extract.ts +1368 -0
- package/src/compiler/fixtures/raw/raw-unannotated.ts +28 -0
- package/src/compiler/fixtures/skyport/oke.config.ts +24 -0
- package/src/compiler/fixtures/skyport/src/ai.ts +15 -0
- package/src/compiler/fixtures/skyport/src/app.ts +10 -0
- package/src/compiler/fixtures/skyport/src/channels.ts +6 -0
- package/src/compiler/fixtures/skyport/src/core.ts +3 -0
- package/src/compiler/fixtures/skyport/src/flows/bookings/index.ts +57 -0
- package/src/compiler/fixtures/skyport/src/flows/bookings/signals.ts +11 -0
- package/src/compiler/fixtures/skyport/src/flows/payments/index.ts +14 -0
- package/src/compiler/fixtures/skyport/src/flows/support/index.ts +20 -0
- package/src/compiler/fixtures/skyport/src/gates.ts +14 -0
- package/src/compiler/fixtures/skyport/src/journeys.ts +9 -0
- package/src/compiler/fixtures/skyport/src/schema.ts +3 -0
- package/src/compiler/fixtures/skyport/src/vault.ts +6 -0
- package/src/compiler/fixtures/skyport.expected.json +241 -0
- package/src/compiler/fixtures/triggers/five-triggers.ts +69 -0
- package/src/compiler/http-parse.ts +214 -0
- package/src/compiler/index.ts +67 -0
- package/src/compiler/response.ts +89 -0
- package/src/compiler/sucrose.ts +238 -0
- package/src/config/index.ts +167 -0
- package/src/console/budget.test.ts +73 -0
- package/src/console/index.ts +30 -0
- package/src/console/server/access.test.ts +370 -0
- package/src/console/server/access.ts +777 -0
- package/src/console/server/ai.test.ts +172 -0
- package/src/console/server/ai.ts +632 -0
- package/src/console/server/app.ts +294 -0
- package/src/console/server/auth-rate.test.ts +81 -0
- package/src/console/server/auth-rate.ts +72 -0
- package/src/console/server/bind.ts +25 -0
- package/src/console/server/channels.test.ts +179 -0
- package/src/console/server/channels.ts +469 -0
- package/src/console/server/claim.test.ts +66 -0
- package/src/console/server/claim.ts +134 -0
- package/src/console/server/clock.test.ts +239 -0
- package/src/console/server/clock.ts +390 -0
- package/src/console/server/console.test.ts +338 -0
- package/src/console/server/diff.test.ts +299 -0
- package/src/console/server/diff.ts +352 -0
- package/src/console/server/dry-run.audit.test.ts +118 -0
- package/src/console/server/flows-invoke.test.ts +148 -0
- package/src/console/server/flows.ts +3633 -0
- package/src/console/server/gates.test.ts +360 -0
- package/src/console/server/gates.ts +869 -0
- package/src/console/server/index.ts +141 -0
- package/src/console/server/live.test.ts +30 -0
- package/src/console/server/live.ts +109 -0
- package/src/console/server/plugin.ts +50 -0
- package/src/console/server/plugins.test.ts +131 -0
- package/src/console/server/plugins.ts +429 -0
- package/src/console/server/runs-pii.ts +98 -0
- package/src/console/server/security-headers.ts +97 -0
- package/src/console/server/security.gate.test.ts +286 -0
- package/src/console/server/serve.ts +319 -0
- package/src/console/server/signals.test.ts +88 -0
- package/src/console/server/signals.ts +282 -0
- package/src/console/server/state.ts +982 -0
- package/src/console/server/store.test.ts +233 -0
- package/src/console/server/store.ts +861 -0
- package/src/console/server/structural.ts +95 -0
- package/src/console/server/vault.test.ts +251 -0
- package/src/console/server/vault.ts +430 -0
- package/src/console/ui/access/AccessA11yView.tsx +237 -0
- package/src/console/ui/access/a11y.test.tsx +122 -0
- package/src/console/ui/access/acknowledgement.test.ts +13 -0
- package/src/console/ui/access/acknowledgement.ts +35 -0
- package/src/console/ui/access/blast-radius.test.ts +26 -0
- package/src/console/ui/access/blast-radius.ts +40 -0
- package/src/console/ui/access/confirmation.test.ts +38 -0
- package/src/console/ui/access/confirmation.ts +36 -0
- package/src/console/ui/access/fixture.ts +203 -0
- package/src/console/ui/access/grantable.test.ts +17 -0
- package/src/console/ui/access/grantable.ts +36 -0
- package/src/console/ui/access/hygiene.test.ts +12 -0
- package/src/console/ui/access/hygiene.ts +39 -0
- package/src/console/ui/access/index.ts +54 -0
- package/src/console/ui/access/provenance.test.ts +12 -0
- package/src/console/ui/access/provenance.ts +29 -0
- package/src/console/ui/access/search.test.ts +17 -0
- package/src/console/ui/access/search.ts +72 -0
- package/src/console/ui/access/types.ts +111 -0
- package/src/console/ui/ai/AiA11yView.tsx +265 -0
- package/src/console/ui/ai/a11y.test.tsx +99 -0
- package/src/console/ui/ai/findings.ts +41 -0
- package/src/console/ui/ai/fixture.ts +182 -0
- package/src/console/ui/ai/format.ts +90 -0
- package/src/console/ui/ai/group.test.ts +37 -0
- package/src/console/ui/ai/group.ts +88 -0
- package/src/console/ui/ai/index.ts +66 -0
- package/src/console/ui/ai/promotion.test.ts +77 -0
- package/src/console/ui/ai/promotion.ts +150 -0
- package/src/console/ui/ai/search.test.ts +40 -0
- package/src/console/ui/ai/search.ts +89 -0
- package/src/console/ui/ai/types.ts +139 -0
- package/src/console/ui/architecture/ArchitectureA11yView.tsx +163 -0
- package/src/console/ui/architecture/a11y.test.tsx +97 -0
- package/src/console/ui/architecture/boundary.ts +42 -0
- package/src/console/ui/architecture/declared.ts +165 -0
- package/src/console/ui/architecture/fixture.ts +74 -0
- package/src/console/ui/architecture/index.ts +84 -0
- package/src/console/ui/architecture/layers.ts +64 -0
- package/src/console/ui/architecture/layout.ts +68 -0
- package/src/console/ui/architecture/pathologies.ts +260 -0
- package/src/console/ui/architecture/search.ts +145 -0
- package/src/console/ui/architecture/traffic.ts +102 -0
- package/src/console/ui/architecture/types.ts +144 -0
- package/src/console/ui/architecture/view.test.ts +165 -0
- package/src/console/ui/architecture/view.ts +516 -0
- package/src/console/ui/channels/ChannelsA11yView.tsx +180 -0
- package/src/console/ui/channels/a11y.test.tsx +96 -0
- package/src/console/ui/channels/confirmation.test.ts +37 -0
- package/src/console/ui/channels/confirmation.ts +27 -0
- package/src/console/ui/channels/fallback.test.ts +15 -0
- package/src/console/ui/channels/fallback.ts +20 -0
- package/src/console/ui/channels/findings.ts +38 -0
- package/src/console/ui/channels/fixture.ts +134 -0
- package/src/console/ui/channels/group.ts +25 -0
- package/src/console/ui/channels/index.ts +57 -0
- package/src/console/ui/channels/locale.test.ts +17 -0
- package/src/console/ui/channels/locale.ts +31 -0
- package/src/console/ui/channels/mask.test.ts +14 -0
- package/src/console/ui/channels/mask.ts +12 -0
- package/src/console/ui/channels/search.ts +58 -0
- package/src/console/ui/channels/taxonomy.test.ts +17 -0
- package/src/console/ui/channels/taxonomy.ts +49 -0
- package/src/console/ui/channels/types.ts +117 -0
- package/src/console/ui/clock/ClockA11yView.tsx +182 -0
- package/src/console/ui/clock/a11y.test.tsx +99 -0
- package/src/console/ui/clock/confirmation.test.ts +32 -0
- package/src/console/ui/clock/confirmation.ts +34 -0
- package/src/console/ui/clock/findings.ts +40 -0
- package/src/console/ui/clock/fixture.ts +111 -0
- package/src/console/ui/clock/health.test.ts +25 -0
- package/src/console/ui/clock/health.ts +61 -0
- package/src/console/ui/clock/index.ts +49 -0
- package/src/console/ui/clock/search.test.ts +39 -0
- package/src/console/ui/clock/search.ts +76 -0
- package/src/console/ui/clock/timeline.test.ts +44 -0
- package/src/console/ui/clock/timeline.ts +41 -0
- package/src/console/ui/clock/types.ts +78 -0
- package/src/console/ui/clock/waiting-on.test.ts +34 -0
- package/src/console/ui/clock/waiting-on.ts +83 -0
- package/src/console/ui/confirmation.unify.test.ts +92 -0
- package/src/console/ui/diff/DiffA11yView.tsx +85 -0
- package/src/console/ui/diff/a11y.test.tsx +99 -0
- package/src/console/ui/diff/fixture.ts +85 -0
- package/src/console/ui/diff/group.test.ts +58 -0
- package/src/console/ui/diff/group.ts +97 -0
- package/src/console/ui/diff/index.ts +38 -0
- package/src/console/ui/diff/search.test.ts +32 -0
- package/src/console/ui/diff/search.ts +75 -0
- package/src/console/ui/diff/summary.ts +74 -0
- package/src/console/ui/diff/types.ts +48 -0
- package/src/console/ui/dist/assets/index-B71Yl_SS.js +10 -0
- package/src/console/ui/dist/assets/panel-access-Dd37LU2c.js +64 -0
- package/src/console/ui/dist/assets/panel-ai-CC7LR6-J.js +1 -0
- package/src/console/ui/dist/assets/panel-architecture-B5b3iKCz.js +1 -0
- package/src/console/ui/dist/assets/panel-channels-CeNjTKXp.js +1 -0
- package/src/console/ui/dist/assets/panel-clock-DgFTLoHV.js +1 -0
- package/src/console/ui/dist/assets/panel-diff-DxehccqB.js +1 -0
- package/src/console/ui/dist/assets/panel-flows-BtrVn-Eg.js +45 -0
- package/src/console/ui/dist/assets/panel-gates-Z9MKRGdH.js +1 -0
- package/src/console/ui/dist/assets/panel-overview-Bd48d9km.js +1 -0
- package/src/console/ui/dist/assets/panel-plugins-DWd0TowH.js +1 -0
- package/src/console/ui/dist/assets/panel-runs-BwsWqKeB.js +1 -0
- package/src/console/ui/dist/assets/panel-signals-9najbZY2.js +1 -0
- package/src/console/ui/dist/assets/panel-store-OHkP2pDp.js +1 -0
- package/src/console/ui/dist/assets/panel-traces-tn2JoY8U.js +1 -0
- package/src/console/ui/dist/assets/panel-vault-BbfWdox0.js +1 -0
- package/src/console/ui/dist/assets/rolldown-runtime-CNC7AqOf.js +1 -0
- package/src/console/ui/dist/assets/style-Cnl7WLya.css +3 -0
- package/src/console/ui/dist/index.html +14 -0
- package/src/console/ui/flows/FlowsA11yView.tsx +155 -0
- package/src/console/ui/flows/a11y.test.tsx +105 -0
- package/src/console/ui/flows/buffer.test.ts +91 -0
- package/src/console/ui/flows/buffer.ts +118 -0
- package/src/console/ui/flows/confirmation.ts +131 -0
- package/src/console/ui/flows/contract.test.ts +89 -0
- package/src/console/ui/flows/contract.ts +353 -0
- package/src/console/ui/flows/fixture.ts +81 -0
- package/src/console/ui/flows/graph.test.ts +101 -0
- package/src/console/ui/flows/graph.ts +549 -0
- package/src/console/ui/flows/index.ts +87 -0
- package/src/console/ui/flows/save-as-test.test.ts +47 -0
- package/src/console/ui/flows/save-as-test.ts +99 -0
- package/src/console/ui/flows/search.ts +255 -0
- package/src/console/ui/flows/tiers.ts +140 -0
- package/src/console/ui/gates/GatesA11yView.tsx +192 -0
- package/src/console/ui/gates/a11y.test.tsx +116 -0
- package/src/console/ui/gates/audit.test.ts +40 -0
- package/src/console/ui/gates/audit.ts +63 -0
- package/src/console/ui/gates/denial.test.ts +36 -0
- package/src/console/ui/gates/denial.ts +51 -0
- package/src/console/ui/gates/findings.ts +19 -0
- package/src/console/ui/gates/fixture.ts +189 -0
- package/src/console/ui/gates/group.test.ts +30 -0
- package/src/console/ui/gates/group.ts +102 -0
- package/src/console/ui/gates/index.ts +47 -0
- package/src/console/ui/gates/search.test.ts +49 -0
- package/src/console/ui/gates/search.ts +115 -0
- package/src/console/ui/gates/types.ts +121 -0
- package/src/console/ui/overview/OverviewA11yView.tsx +152 -0
- package/src/console/ui/overview/a11y.test.tsx +113 -0
- package/src/console/ui/overview/busiest.ts +26 -0
- package/src/console/ui/overview/compose.ts +133 -0
- package/src/console/ui/overview/cost.test.ts +39 -0
- package/src/console/ui/overview/cost.ts +138 -0
- package/src/console/ui/overview/fixture.ts +161 -0
- package/src/console/ui/overview/golden.ts +57 -0
- package/src/console/ui/overview/index.ts +59 -0
- package/src/console/ui/overview/rank.test.ts +136 -0
- package/src/console/ui/overview/rank.ts +210 -0
- package/src/console/ui/overview/slo.test.ts +73 -0
- package/src/console/ui/overview/slo.ts +229 -0
- package/src/console/ui/overview/types.ts +121 -0
- package/src/console/ui/overview/verdict.ts +131 -0
- package/src/console/ui/plugins/PluginsA11yView.tsx +227 -0
- package/src/console/ui/plugins/a11y.test.tsx +97 -0
- package/src/console/ui/plugins/command.test.ts +22 -0
- package/src/console/ui/plugins/command.ts +27 -0
- package/src/console/ui/plugins/findings.ts +39 -0
- package/src/console/ui/plugins/fixture.ts +233 -0
- package/src/console/ui/plugins/group.test.ts +38 -0
- package/src/console/ui/plugins/group.ts +67 -0
- package/src/console/ui/plugins/index.ts +40 -0
- package/src/console/ui/plugins/search.ts +67 -0
- package/src/console/ui/plugins/types.ts +115 -0
- package/src/console/ui/runs/RunsA11yView.tsx +267 -0
- package/src/console/ui/runs/a11y.test.tsx +99 -0
- package/src/console/ui/runs/explain.test.ts +23 -0
- package/src/console/ui/runs/explain.ts +32 -0
- package/src/console/ui/runs/fixture.ts +189 -0
- package/src/console/ui/runs/group.test.ts +24 -0
- package/src/console/ui/runs/group.ts +85 -0
- package/src/console/ui/runs/histogram.test.ts +31 -0
- package/src/console/ui/runs/histogram.ts +85 -0
- package/src/console/ui/runs/index.ts +75 -0
- package/src/console/ui/runs/project.ts +122 -0
- package/src/console/ui/runs/query.test.ts +50 -0
- package/src/console/ui/runs/query.ts +283 -0
- package/src/console/ui/runs/search.test.ts +45 -0
- package/src/console/ui/runs/search.ts +141 -0
- package/src/console/ui/runs/trace-link.test.ts +30 -0
- package/src/console/ui/runs/trace-link.ts +99 -0
- package/src/console/ui/runs/types.ts +137 -0
- package/src/console/ui/shell/App.tsx +56 -0
- package/src/console/ui/shell/client.ts +1715 -0
- package/src/console/ui/shell/components/ui.tsx +110 -0
- package/src/console/ui/shell/index.html +12 -0
- package/src/console/ui/shell/layout/Shell.tsx +95 -0
- package/src/console/ui/shell/main.tsx +281 -0
- package/src/console/ui/shell/panels/Access.tsx +5 -0
- package/src/console/ui/shell/panels/Ai.tsx +5 -0
- package/src/console/ui/shell/panels/Architecture.tsx +5 -0
- package/src/console/ui/shell/panels/Channels.tsx +5 -0
- package/src/console/ui/shell/panels/Clock.tsx +5 -0
- package/src/console/ui/shell/panels/Diff.tsx +5 -0
- package/src/console/ui/shell/panels/Flows.tsx +5 -0
- package/src/console/ui/shell/panels/Gates.tsx +5 -0
- package/src/console/ui/shell/panels/Overview.tsx +6 -0
- package/src/console/ui/shell/panels/Plugins.tsx +5 -0
- package/src/console/ui/shell/panels/Runs.tsx +5 -0
- package/src/console/ui/shell/panels/Signals.tsx +5 -0
- package/src/console/ui/shell/panels/Store.tsx +5 -0
- package/src/console/ui/shell/panels/Traces.tsx +5 -0
- package/src/console/ui/shell/panels/Vault.tsx +5 -0
- package/src/console/ui/shell/panels/access/AccessPanel.tsx +813 -0
- package/src/console/ui/shell/panels/ai/AiPanel.tsx +563 -0
- package/src/console/ui/shell/panels/architecture/ArchitecturePanel.tsx +377 -0
- package/src/console/ui/shell/panels/channels/ChannelsPanel.tsx +454 -0
- package/src/console/ui/shell/panels/clock/ClockPanel.tsx +479 -0
- package/src/console/ui/shell/panels/diff/DiffPanel.tsx +275 -0
- package/src/console/ui/shell/panels/flows/ContractEditor.tsx +301 -0
- package/src/console/ui/shell/panels/flows/FlowDrawer.tsx +350 -0
- package/src/console/ui/shell/panels/flows/FlowsPanel.tsx +502 -0
- package/src/console/ui/shell/panels/gates/GatesPanel.tsx +482 -0
- package/src/console/ui/shell/panels/overview/OverviewPanel.tsx +428 -0
- package/src/console/ui/shell/panels/plugins/PluginsPanel.tsx +413 -0
- package/src/console/ui/shell/panels/runs/RunsPanel.tsx +649 -0
- package/src/console/ui/shell/panels/signals/SignalsPanel.tsx +840 -0
- package/src/console/ui/shell/panels/store/StorePanel.tsx +787 -0
- package/src/console/ui/shell/panels/traces/TracesPanel.tsx +539 -0
- package/src/console/ui/shell/panels/vault/VaultPanel.tsx +449 -0
- package/src/console/ui/shell/plugin/Sandbox.tsx +29 -0
- package/src/console/ui/shell/setup/Wizard.tsx +189 -0
- package/src/console/ui/shell/styles.css +75 -0
- package/src/console/ui/signals/SignalsA11yView.tsx +276 -0
- package/src/console/ui/signals/a11y.test.tsx +99 -0
- package/src/console/ui/signals/confirmation.test.ts +39 -0
- package/src/console/ui/signals/confirmation.ts +63 -0
- package/src/console/ui/signals/dry-run.test.ts +18 -0
- package/src/console/ui/signals/dry-run.ts +36 -0
- package/src/console/ui/signals/durable.test.ts +22 -0
- package/src/console/ui/signals/durable.ts +41 -0
- package/src/console/ui/signals/findings.ts +33 -0
- package/src/console/ui/signals/fixture.ts +242 -0
- package/src/console/ui/signals/group.test.ts +32 -0
- package/src/console/ui/signals/group.ts +49 -0
- package/src/console/ui/signals/index.ts +52 -0
- package/src/console/ui/signals/monitor.test.ts +30 -0
- package/src/console/ui/signals/monitor.ts +79 -0
- package/src/console/ui/signals/schema-form.test.ts +34 -0
- package/src/console/ui/signals/schema-form.ts +112 -0
- package/src/console/ui/signals/search.ts +102 -0
- package/src/console/ui/signals/types.ts +71 -0
- package/src/console/ui/store/StoreA11yView.tsx +199 -0
- package/src/console/ui/store/a11y.test.tsx +99 -0
- package/src/console/ui/store/cache-view.test.ts +13 -0
- package/src/console/ui/store/cache-view.ts +36 -0
- package/src/console/ui/store/confirmation.test.ts +38 -0
- package/src/console/ui/store/confirmation.ts +55 -0
- package/src/console/ui/store/dry-run.test.ts +15 -0
- package/src/console/ui/store/dry-run.ts +29 -0
- package/src/console/ui/store/fixture.ts +163 -0
- package/src/console/ui/store/group.test.ts +21 -0
- package/src/console/ui/store/group.ts +41 -0
- package/src/console/ui/store/index.ts +40 -0
- package/src/console/ui/store/search.ts +78 -0
- package/src/console/ui/store/types.ts +65 -0
- package/src/console/ui/store/will-not-fire.test.ts +19 -0
- package/src/console/ui/store/will-not-fire.ts +40 -0
- package/src/console/ui/traces/TracesA11yView.tsx +200 -0
- package/src/console/ui/traces/a11y.test.tsx +97 -0
- package/src/console/ui/traces/chain.test.ts +61 -0
- package/src/console/ui/traces/chain.ts +144 -0
- package/src/console/ui/traces/critical-path.test.ts +24 -0
- package/src/console/ui/traces/critical-path.ts +59 -0
- package/src/console/ui/traces/filter.test.ts +78 -0
- package/src/console/ui/traces/filter.ts +112 -0
- package/src/console/ui/traces/fixture.ts +126 -0
- package/src/console/ui/traces/fold.test.ts +67 -0
- package/src/console/ui/traces/fold.ts +170 -0
- package/src/console/ui/traces/index.ts +64 -0
- package/src/console/ui/traces/mini.ts +65 -0
- package/src/console/ui/traces/replay.test.ts +24 -0
- package/src/console/ui/traces/replay.ts +35 -0
- package/src/console/ui/traces/sampling.test.ts +26 -0
- package/src/console/ui/traces/sampling.ts +66 -0
- package/src/console/ui/traces/search.ts +148 -0
- package/src/console/ui/traces/tier.ts +72 -0
- package/src/console/ui/traces/types.ts +125 -0
- package/src/console/ui/tsconfig.json +20 -0
- package/src/console/ui/vault/VaultA11yView.tsx +177 -0
- package/src/console/ui/vault/a11y.test.tsx +97 -0
- package/src/console/ui/vault/blast-radius.test.ts +35 -0
- package/src/console/ui/vault/blast-radius.ts +55 -0
- package/src/console/ui/vault/confirmation.test.ts +41 -0
- package/src/console/ui/vault/confirmation.ts +39 -0
- package/src/console/ui/vault/dormant.test.ts +37 -0
- package/src/console/ui/vault/dormant.ts +28 -0
- package/src/console/ui/vault/export-safe.test.ts +30 -0
- package/src/console/ui/vault/export-safe.ts +65 -0
- package/src/console/ui/vault/fixture.ts +75 -0
- package/src/console/ui/vault/group.test.ts +25 -0
- package/src/console/ui/vault/group.ts +50 -0
- package/src/console/ui/vault/index.ts +45 -0
- package/src/console/ui/vault/search.ts +62 -0
- package/src/console/ui/vault/types.ts +57 -0
- package/src/console/ui/vite.config.ts +84 -0
- package/src/console/xss.gate.test.ts +118 -0
- package/src/docker/compose.ts +226 -0
- package/src/docker/credentials.ts +25 -0
- package/src/docker/derive.ts +83 -0
- package/src/docker/docker.test.ts +185 -0
- package/src/docker/dockerfile.integration.test.ts +170 -0
- package/src/docker/dockerfile.ts +39 -0
- package/src/docker/helpers.ts +103 -0
- package/src/docker/index.ts +52 -0
- package/src/docker/pin.ts +90 -0
- package/src/docker/recipes/index.ts +33 -0
- package/src/docker/recipes/postgres.ts +18 -0
- package/src/docker/recipes/redis.ts +18 -0
- package/src/docker/stack.integration.test.ts +140 -0
- package/src/docker/stack.ts +62 -0
- package/src/docker/types.ts +134 -0
- package/src/drivers/ai-anthropic.ts +128 -0
- package/src/drivers/ai-mock.ts +82 -0
- package/src/drivers/ai-openai-compatible.ts +139 -0
- package/src/drivers/ai-providers.test.ts +163 -0
- package/src/drivers/ai-types.ts +83 -0
- package/src/drivers/bun-native-completeness.test.ts +155 -0
- package/src/drivers/channel-console.ts +118 -0
- package/src/drivers/channel-fcm.ts +96 -0
- package/src/drivers/channel-resend.ts +27 -0
- package/src/drivers/channel-smtp.ts +33 -0
- package/src/drivers/channel-types.ts +160 -0
- package/src/drivers/channel-unifonic.ts +79 -0
- package/src/drivers/channel-wa-cloud.ts +84 -0
- package/src/drivers/channel-webpush.ts +317 -0
- package/src/drivers/conformance.test.ts +89 -0
- package/src/drivers/conformance.ts +162 -0
- package/src/drivers/fs.ts +73 -0
- package/src/drivers/index.ts +194 -0
- package/src/drivers/kv-lua.ts +222 -0
- package/src/drivers/memory.ts +472 -0
- package/src/drivers/pgvector.ts +130 -0
- package/src/drivers/postgres.ts +221 -0
- package/src/drivers/redis.ts +254 -0
- package/src/drivers/s3.ts +129 -0
- package/src/drivers/signal-engine.ts +690 -0
- package/src/drivers/signal-memory.ts +27 -0
- package/src/drivers/signal-nats.ts +131 -0
- package/src/drivers/signal-postgres.ts +1089 -0
- package/src/drivers/signal-redis.ts +275 -0
- package/src/drivers/signal-types.ts +328 -0
- package/src/drivers/sqlite.ts +53 -0
- package/src/drivers/types.ts +334 -0
- package/src/drivers/vault-dotenv-parse.ts +56 -0
- package/src/drivers/vault-env.ts +101 -0
- package/src/drivers/vault-infisical.ts +61 -0
- package/src/drivers/vault-managed.ts +42 -0
- package/src/drivers/vault-memory.ts +38 -0
- package/src/drivers/vault-openbao.ts +80 -0
- package/src/drivers/vault-sops.ts +252 -0
- package/src/drivers/vault-types.ts +84 -0
- package/src/elements/ai/declare.ts +206 -0
- package/src/elements/ai/eval.ts +113 -0
- package/src/elements/ai/pii.ts +108 -0
- package/src/elements/ai/runtime.ts +540 -0
- package/src/elements/ai/schema.ts +194 -0
- package/src/elements/ai.test.ts +393 -0
- package/src/elements/ai.ts +56 -0
- package/src/elements/channel/consent.ts +81 -0
- package/src/elements/channel/costs.test.ts +62 -0
- package/src/elements/channel/costs.ts +130 -0
- package/src/elements/channel/declare.ts +141 -0
- package/src/elements/channel/email-auth.test.ts +47 -0
- package/src/elements/channel/email-auth.ts +109 -0
- package/src/elements/channel/locale.ts +97 -0
- package/src/elements/channel/mask.test.ts +19 -0
- package/src/elements/channel/mask.ts +60 -0
- package/src/elements/channel/mime.ts +23 -0
- package/src/elements/channel/outcomes.test.ts +40 -0
- package/src/elements/channel/outcomes.ts +126 -0
- package/src/elements/channel/receipts.ts +121 -0
- package/src/elements/channel/runtime.ts +500 -0
- package/src/elements/channel/suppression.ts +136 -0
- package/src/elements/channel.test.ts +232 -0
- package/src/elements/channel.ts +109 -0
- package/src/elements/clock/actions.ts +170 -0
- package/src/elements/clock/declare.ts +58 -0
- package/src/elements/clock/dst.ts +197 -0
- package/src/elements/clock/durable.ts +140 -0
- package/src/elements/clock/duration.ts +29 -0
- package/src/elements/clock/health.test.ts +103 -0
- package/src/elements/clock/health.ts +112 -0
- package/src/elements/clock/leader.ts +127 -0
- package/src/elements/clock/reconcile.ts +241 -0
- package/src/elements/clock/runtime.ts +243 -0
- package/src/elements/clock/schedule.ts +262 -0
- package/src/elements/clock/time-travel.ts +53 -0
- package/src/elements/clock.test.ts +365 -0
- package/src/elements/clock.ts +80 -0
- package/src/elements/gate/declare.ts +134 -0
- package/src/elements/gate/permissions.ts +104 -0
- package/src/elements/gate/runtime.ts +177 -0
- package/src/elements/gate/strategies.ts +388 -0
- package/src/elements/gate.test.ts +145 -0
- package/src/elements/gate.ts +41 -0
- package/src/elements/index.ts +169 -0
- package/src/elements/signal/chaos-child.ts +47 -0
- package/src/elements/signal/declare.ts +77 -0
- package/src/elements/signal/dry-run-replay.test.ts +95 -0
- package/src/elements/signal/dry-run-write-isolation.test.ts +94 -0
- package/src/elements/signal/reconcile.test.ts +23 -0
- package/src/elements/signal/reconcile.ts +122 -0
- package/src/elements/signal/runtime.ts +94 -0
- package/src/elements/signal.test.ts +457 -0
- package/src/elements/signal.ts +26 -0
- package/src/elements/store/cache.ts +197 -0
- package/src/elements/store/classify.ts +125 -0
- package/src/elements/store/declare.ts +200 -0
- package/src/elements/store/files-policy.test.ts +31 -0
- package/src/elements/store/files-policy.ts +70 -0
- package/src/elements/store/replica.ts +68 -0
- package/src/elements/store/runtime.ts +393 -0
- package/src/elements/store/sql-condition.ts +205 -0
- package/src/elements/store/sql-session.ts +579 -0
- package/src/elements/store/table.ts +282 -0
- package/src/elements/store.test.ts +370 -0
- package/src/elements/store.ts +99 -0
- package/src/elements/vault/declare.ts +143 -0
- package/src/elements/vault/fingerprint.ts +30 -0
- package/src/elements/vault/redact.ts +52 -0
- package/src/elements/vault/runtime.ts +461 -0
- package/src/elements/vault.test.ts +296 -0
- package/src/elements/vault.ts +44 -0
- package/src/index.ts +183 -0
- package/src/kernel/adopt-routes.ts +194 -0
- package/src/kernel/app.ts +1068 -0
- package/src/kernel/auth-resolve.ts +93 -0
- package/src/kernel/boot.test.ts +173 -0
- package/src/kernel/boot.ts +439 -0
- package/src/kernel/budget-entry.ts +55 -0
- package/src/kernel/budget.test.ts +19 -0
- package/src/kernel/call.test.ts +83 -0
- package/src/kernel/capability.ts +113 -0
- package/src/kernel/dry-run.test.ts +64 -0
- package/src/kernel/dry-run.ts +171 -0
- package/src/kernel/effects.test.ts +89 -0
- package/src/kernel/effects.ts +140 -0
- package/src/kernel/errors.registry.test.ts +39 -0
- package/src/kernel/errors.ts +225 -0
- package/src/kernel/flow.test.ts +154 -0
- package/src/kernel/flow.ts +290 -0
- package/src/kernel/fx.test.ts +245 -0
- package/src/kernel/fx.ts +996 -0
- package/src/kernel/hook-timing.test.ts +72 -0
- package/src/kernel/hook-timing.ts +190 -0
- package/src/kernel/hooks.test.ts +181 -0
- package/src/kernel/hooks.ts +275 -0
- package/src/kernel/index.ts +278 -0
- package/src/kernel/journal.ts +405 -0
- package/src/kernel/journey.ts +75 -0
- package/src/kernel/on.ts +74 -0
- package/src/kernel/pipeline.test.ts +349 -0
- package/src/kernel/pipeline.ts +245 -0
- package/src/kernel/plug.ts +82 -0
- package/src/kernel/plugin/capabilities.test.ts +84 -0
- package/src/kernel/plugin/conflicts.test.ts +106 -0
- package/src/kernel/plugin/decorate.test.ts +111 -0
- package/src/kernel/plugin/scoping.test.ts +138 -0
- package/src/kernel/plugin.ts +485 -0
- package/src/kernel/rate-limit.ts +25 -0
- package/src/kernel/registry.ts +398 -0
- package/src/kernel/router.test.ts +114 -0
- package/src/kernel/router.ts +556 -0
- package/src/kernel/routing-budget.test.ts +19 -0
- package/src/kernel/run-telemetry.ts +70 -0
- package/src/kernel/triggers.ts +324 -0
- package/src/kernel/unit.ts +88 -0
- package/src/manifest/diff.test.ts +866 -0
- package/src/manifest/diff.ts +1670 -0
- package/src/manifest/fixtures/base.manifest.json +112 -0
- package/src/manifest/fixtures/skyport.excerpt.json +51 -0
- package/src/manifest/fixtures/skyport.manifest.json +153 -0
- package/src/manifest/index.ts +27 -0
- package/src/manifest/types.ts +358 -0
- package/src/manifest/undeclared.test.ts +82 -0
- package/src/manifest/undeclared.ts +65 -0
- package/src/manifest/validate.test.ts +105 -0
- package/src/manifest/validate.ts +174 -0
- package/src/mcp/authorization.ts +340 -0
- package/src/mcp/confirmation.ts +174 -0
- package/src/mcp/data.ts +90 -0
- package/src/mcp/index.ts +80 -0
- package/src/mcp/injection.gate.test.ts +176 -0
- package/src/mcp/mcp.test.ts +348 -0
- package/src/mcp/protocol.ts +172 -0
- package/src/mcp/server.ts +283 -0
- package/src/mcp/session.ts +139 -0
- package/src/mcp/tools.ts +391 -0
- package/src/plugins/catalogue.test.ts +48 -0
- package/src/plugins/catalogue.ts +113 -0
- package/src/plugins/node-import-scan.test.ts +28 -0
- package/src/plugins/node-import-scan.ts +98 -0
- package/src/plugins/supply-chain.test.ts +48 -0
- package/src/plugins/supply-chain.ts +460 -0
- package/src/release/index.ts +30 -0
- package/src/release/limits.ts +20 -0
- package/src/release/measure.ts +443 -0
- package/src/release/publish.ts +56 -0
- package/src/runs/bench.test.ts +93 -0
- package/src/runs/collect.ts +144 -0
- package/src/runs/drivers/clickhouse.ts +108 -0
- package/src/runs/drivers/files.ts +201 -0
- package/src/runs/drivers/memory.ts +94 -0
- package/src/runs/drivers/postgres.ts +110 -0
- package/src/runs/duckdb.ts +99 -0
- package/src/runs/index.ts +82 -0
- package/src/runs/outlier.ts +180 -0
- package/src/runs/parquet.ts +210 -0
- package/src/runs/privacy.ts +49 -0
- package/src/runs/runs.test.ts +324 -0
- package/src/runs/runtime.ts +229 -0
- package/src/runs/shred.ts +243 -0
- package/src/runs/telemetry.ts +10 -0
- package/src/runs/types.ts +179 -0
- package/src/runtime/bun.ts +140 -0
- package/src/runtime/cold-start.bench.ts +20 -0
- package/src/runtime/index.ts +46 -0
- package/src/runtime/primitives.ts +242 -0
- package/src/runtime/security.test.ts +170 -0
- package/src/runtime/security.ts +168 -0
- package/src/runtime/serve.test.ts +223 -0
- package/src/runtime/types.ts +217 -0
- package/src/runtime/web-standard.ts +77 -0
- package/src/test/create-test-app.test.ts +161 -0
- package/src/test/create-test-app.ts +533 -0
- package/src/test/index.ts +21 -0
- package/src/test/provisions.integration.test.ts +174 -0
- package/src/upgrade/codemods.test.ts +58 -0
- package/src/upgrade/codemods.ts +83 -0
- package/src/validation/index.ts +23 -0
- package/src/validation/standard-schema.test.ts +96 -0
- package/src/validation/standard-schema.ts +316 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as e,r as t}from"./rolldown-runtime-CNC7AqOf.js";import{C as n,Q as r,Z as i,b as a,c as o,d as s,g as c,nt as l,o as u,tt as d,u as f,w as p,y as m}from"./panel-access-Dd37LU2c.js";var h=m({q:a().optional(),from:c([`principal`,`flow`]).optional(),principal:a().optional(),flow:a().optional(),as:a().optional()});function g(e){let t=h.safeParse(e);return t.success?t.data:{}}function _(e){let t={};return e.q&&(t.q=e.q),e.from&&(t.from=e.from),e.principal&&(t.principal=e.principal),e.flow&&(t.flow=e.flow),e.as&&(t.as=e.as),t}function v(e,t){return`${e}:${t}`}function y(e){if(!e)return null;let t=e.indexOf(`:`);if(t===-1)return null;let n=e.slice(0,t),r=e.slice(t+1);return n!==`role`&&n!==`key`&&n!==`user`||!r?null:{kind:n,id:r}}function b(e,t,n){return{...e,from:`principal`,principal:v(t,n),flow:void 0}}function x(e,t){return{...e,from:`flow`,flow:t,principal:void 0}}function S(e,t=``){let n=t.trim().toLowerCase(),r=n?e.filter(e=>e.name.toLowerCase().includes(n)||e.id.toLowerCase().includes(n)||(e.email?.toLowerCase().includes(n)??!1)||e.scopes.some(e=>e.toLowerCase().includes(n))):e,i=[`role`,`key`,`user`],a={role:`Roles`,key:`API keys`,user:`Users`};return i.map(e=>({id:e,label:a[e],items:r.filter(t=>t.kind===e).map(t=>({id:`${t.kind}:${t.id}`,label:t.name,meta:e===`role`?`${t.scopes.length} scopes · ${t.memberCount??0} members`:`${t.scopes.length} scopes`,flag:t.plane===`operator`?`operator`:void 0}))})).filter(e=>e.items.length>0)}function C(e,t=``){let n=t.trim().toLowerCase(),r=n?e.filter(e=>e.flowId.toLowerCase().includes(n)||e.gates.some(e=>e.toLowerCase().includes(n))):e,i=[`user`,`operator`],a={user:`User plane`,operator:`Operator plane`};return i.map(e=>({id:e,label:a[e],items:r.filter(t=>t.plane===e).map(e=>({id:e.flowId,label:e.flowId,meta:e.gates.length===0?`ungated`:e.gates.join(` → `),flag:e.unguarded?`unguarded`:void 0}))})).filter(e=>e.items.length>0)}function w(e){let t=[];return e.unguardedFlows.length>0&&t.push({code:`unguarded`,count:e.unguardedFlows.length,message:`${e.unguardedFlows.length} user-plane flow${e.unguardedFlows.length===1?``:`s`} unguarded (public)`}),e.orphanPermissions.length>0&&t.push({code:`orphan-permissions`,count:e.orphanPermissions.length,message:`${e.orphanPermissions.length} permission${e.orphanPermissions.length===1?``:`s`} granted to no role`}),e.emptyRoles.length>0&&t.push({code:`empty-roles`,count:e.emptyRoles.length,message:`${e.emptyRoles.length} role${e.emptyRoles.length===1?``:`s`} with no members`}),e.unattachedGates.length>0&&t.push({code:`unattached`,count:e.unattachedGates.length,message:`${e.unattachedGates.length} gate${e.unattachedGates.length===1?``:`s`} never attached`}),t}function T(e){let t=e.applicationScopes.join(`, `);return`${e.email?`${e.name} <${e.email}>`:e.name} holds application scope(s): ${t}`}function E(e){return w(e).filter(e=>e.code===`unguarded`)}function D(e){switch(e.code){case`RateLimited`:return`RateLimited { retryAfterMs: ${typeof e.data.retryAfterMs==`number`?e.data.retryAfterMs:0} } · HTTP ${e.status}`;case`Forbidden`:{let t=typeof e.data.gate==`string`?e.data.gate:`?`,n=typeof e.data.reason==`string`?e.data.reason:``;return`Forbidden { gate: ${t}${n?`, reason: ${n}`:``} } · HTTP ${e.status}`}case`Unauthorized`:return`Unauthorized {} · HTTP ${e.status}`}}function O(e,t){let n=e.allowed?`pass`:`deny`,r=e.kind===`rate`&&e.retryAfterMs!==void 0?` · retryAfterMs ${e.retryAfterMs}`:e.reason?` · ${e.reason}`:``;return`${t+1}. ${e.name} — ${n}${r}`}var k=e(l(),1),A=d();function j(){let e=p({from:`/gates`}),t=n({from:`/gates`}),a=e.from??`flow`,[c,l]=(0,k.useState)(e.as??``),[d,m]=(0,k.useState)(null),[h,g]=(0,k.useState)(null),v=e=>{t({search:_(e),replace:!0})},E=r({queryKey:[`console.gates.list`],queryFn:async()=>{let e=await s.gatesList();if(e.error)throw Error(e.error.code);return e.data},refetchInterval:1e4}),j=E.data,M=j?.principals??[],N=j?.flows??[],P=j?.violations??[],F=j?.widenings??[],I=j?.audit??{unguardedFlows:[],orphanPermissions:[],emptyRoles:[],unattachedGates:[]},L=(0,k.useMemo)(()=>w(I),[I]),R=(0,k.useMemo)(()=>a===`principal`?S(M,e.q??``):C(N,e.q??``),[a,M,N,e.q]),z=y(e.principal),B=z?M.find(e=>e.kind===z.kind&&e.id===z.id):void 0,V=N.find(t=>t.flowId===e.flow),H=i({mutationFn:async()=>{if(a===`flow`){if(!V)throw Error(`Select a flow`);let t=y(c||e.as);if(!t)throw Error(`Pick a principal to simulate as`);let n=await s.gatesSimulate({flowId:V.flowId,principal:t});if(n.error)throw Error(n.error.code);return n.data}if(!z)throw Error(`Select a principal`);let t=c||e.as;if(!t)throw Error(`Pick a flow to simulate`);let n=await s.gatesSimulate({flowId:t,principal:z});if(n.error)throw Error(n.error.code);return n.data},onSuccess:e=>{m(e)}}),U=i({mutationFn:async()=>{if(!z)throw Error(`Select a principal`);let e=await s.gatesPowers(z);if(e.error)throw Error(e.error.code);return e.data},onSuccess:e=>{g(e)}});return(0,A.jsxs)(`div`,{className:`flex h-full min-h-0 flex-col`,children:[(0,A.jsxs)(`header`,{className:`flex shrink-0 flex-wrap items-end gap-3 border-b border-[var(--oke-line)] px-4 py-3`,children:[(0,A.jsxs)(`div`,{children:[(0,A.jsx)(`h1`,{className:`text-lg font-medium text-[var(--oke-fg)]`,children:`Gates`}),(0,A.jsx)(`p`,{className:`text-sm text-[var(--oke-muted)]`,children:`What can this principal do · what guards this flow`})]}),(0,A.jsxs)(`div`,{role:`group`,"aria-label":`Inquiry direction`,className:`flex gap-1`,children:[(0,A.jsx)(u,{type:`button`,variant:a===`principal`?`primary`:`ghost`,"aria-pressed":a===`principal`,onClick:()=>v({...e,from:`principal`,flow:void 0}),children:`From principal`}),(0,A.jsx)(u,{type:`button`,variant:a===`flow`?`primary`:`ghost`,"aria-pressed":a===`flow`,onClick:()=>v({...e,from:`flow`,principal:void 0}),children:`From flow`})]}),(0,A.jsxs)(`label`,{className:`ml-auto flex min-w-[12rem] flex-col gap-1 text-sm`,children:[(0,A.jsx)(`span`,{className:`text-[var(--oke-muted)]`,children:`Filter gates`}),(0,A.jsx)(o,{"aria-label":`Filter gates`,value:e.q??``,onChange:t=>v({...e,q:t.currentTarget.value||void 0})})]})]}),L.length>0?(0,A.jsxs)(`section`,{"aria-label":`Continuous security audit`,className:`border-b border-[var(--oke-line)] px-4 py-2`,role:`status`,children:[(0,A.jsx)(`h2`,{className:`sr-only`,children:`Standing audit`}),(0,A.jsx)(`ul`,{className:`flex flex-wrap gap-x-4 gap-y-1 text-sm text-[var(--oke-danger)]`,children:L.map(e=>(0,A.jsx)(`li`,{children:e.message},e.code))})]}):null,P.length>0?(0,A.jsxs)(`section`,{"aria-label":`Plane violations`,className:`border-b border-[var(--oke-line)] bg-[var(--oke-danger)]/10 px-4 py-2`,role:`alert`,children:[(0,A.jsx)(`h2`,{className:`text-sm font-medium text-[var(--oke-danger)]`,children:`Two-plane violations`}),(0,A.jsx)(`ul`,{className:`mt-1 text-sm text-[var(--oke-fg)]`,children:P.map(e=>(0,A.jsx)(`li`,{children:T(e)},e.operatorId))})]}):null,(0,A.jsxs)(`div`,{className:`flex min-h-0 flex-1`,children:[(0,A.jsxs)(`section`,{"aria-label":a===`principal`?`Principal list`:`Flow list`,className:`w-80 shrink-0 overflow-y-auto border-r border-[var(--oke-line)]`,children:[(0,A.jsx)(`h2`,{className:`sr-only`,children:a===`principal`?`Principals`:`Flows`}),E.isLoading?(0,A.jsx)(`p`,{className:`p-4 text-sm text-[var(--oke-muted)]`,children:`Loading…`}):null,R.map(t=>(0,A.jsxs)(`section`,{"aria-label":t.label,className:`py-2`,children:[(0,A.jsx)(`h3`,{className:`px-4 py-1 text-xs uppercase tracking-wide text-[var(--oke-muted)]`,children:t.label}),(0,A.jsx)(`ul`,{children:t.items.map(t=>{let n=a===`flow`?t.id===e.flow:t.id===e.principal;return(0,A.jsx)(`li`,{children:(0,A.jsxs)(`button`,{type:`button`,"aria-pressed":n,className:f(`flex min-h-10 w-full flex-col items-start px-4 py-2 text-left text-sm`,n?`bg-[var(--oke-line)] text-[var(--oke-fg)]`:`text-[var(--oke-muted)] hover:text-[var(--oke-fg)]`),onClick:()=>{if(m(null),g(null),a===`flow`)v(x(e,t.id));else{let n=y(t.id);if(!n)return;v(b(e,n.kind,n.id))}},children:[(0,A.jsx)(`span`,{className:`font-mono`,children:t.label}),t.meta?(0,A.jsx)(`span`,{className:`truncate text-xs`,children:t.meta}):null,t.flag?(0,A.jsx)(`span`,{role:`status`,className:`text-xs text-[var(--oke-danger)]`,children:t.flag}):null]})},t.id)})})]},t.id))]}),(0,A.jsx)(`section`,{"aria-label":`Gates detail`,"aria-live":`polite`,className:`min-w-0 flex-1 overflow-y-auto p-4`,children:!V&&!B?(0,A.jsx)(`p`,{className:`text-sm text-[var(--oke-muted)]`,children:`Choose a principal or a flow. The matrix is not the entry point.`}):(0,A.jsxs)(`div`,{className:`flex max-w-2xl flex-col gap-6`,children:[a===`flow`&&V?(0,A.jsxs)(`div`,{children:[(0,A.jsx)(`h2`,{className:`font-mono text-lg text-[var(--oke-fg)]`,children:V.flowId}),(0,A.jsx)(`p`,{className:`text-sm text-[var(--oke-muted)]`,children:`What guards this — registration order`}),V.gates.length===0?(0,A.jsx)(`p`,{className:`mt-2 text-sm`,role:`status`,children:V.unguarded?`Unguarded — public on the user plane`:`No gates`}):(0,A.jsx)(`ol`,{"aria-label":`Gate chain`,className:`mt-3 list-decimal space-y-1 pl-5 text-sm`,children:V.gates.map(e=>(0,A.jsx)(`li`,{children:(0,A.jsx)(`code`,{className:`font-mono`,children:e})},e))})]}):null,a===`principal`&&B?(0,A.jsxs)(`div`,{children:[(0,A.jsx)(`h2`,{className:`font-mono text-lg text-[var(--oke-fg)]`,children:B.name}),(0,A.jsxs)(`p`,{className:`text-sm text-[var(--oke-muted)]`,children:[B.kind,` · `,B.plane,` plane`,B.email?` · ${B.email}`:``]}),(0,A.jsx)(`h3`,{className:`mt-4 text-sm font-medium`,children:`Scopes`}),(0,A.jsx)(`ul`,{"aria-label":`Scopes`,className:`mt-1 flex flex-wrap gap-2 text-sm`,children:B.scopes.map(e=>(0,A.jsx)(`li`,{children:(0,A.jsx)(`code`,{className:`font-mono`,children:e})},e))}),(0,A.jsx)(u,{type:`button`,variant:`ghost`,className:`mt-3`,onClick:()=>U.mutate(),children:`What can this do`}),h?(0,A.jsxs)(`div`,{className:`mt-3 text-sm`,children:[(0,A.jsxs)(`p`,{role:`status`,children:[h.allowedFlowIds.length,` flows allowed ·`,` `,h.deniedFlowIds.length,` denied`]}),(0,A.jsx)(`ul`,{"aria-label":`Allowed flows`,className:`mt-2 list-disc pl-5`,children:h.allowedFlowIds.map(e=>(0,A.jsx)(`li`,{children:(0,A.jsx)(`code`,{className:`font-mono`,children:e})},e))})]}):null]}):null,(0,A.jsxs)(`section`,{"aria-label":`Simulator`,className:`border-t border-[var(--oke-line)] pt-4`,children:[(0,A.jsx)(`h3`,{className:`text-sm font-medium text-[var(--oke-fg)]`,children:`Simulator`}),(0,A.jsx)(`p`,{className:`text-sm text-[var(--oke-muted)]`,children:`Evaluates the real gate chain only — never runs the handler`}),(0,A.jsxs)(`label`,{className:`mt-3 flex max-w-md flex-col gap-1 text-sm`,children:[(0,A.jsx)(`span`,{className:`text-[var(--oke-muted)]`,children:a===`flow`?`Simulate as principal`:`Simulate against flow`}),(0,A.jsxs)(`select`,{"aria-label":`Companion selection`,className:`min-h-8 border border-[var(--oke-line)] bg-transparent px-2 text-sm text-[var(--oke-fg)]`,value:c,onChange:t=>{let n=t.currentTarget.value;l(n),v({...e,as:n||void 0})},children:[(0,A.jsx)(`option`,{value:``,children:`Select…`}),a===`flow`?M.map(e=>(0,A.jsxs)(`option`,{value:`${e.kind}:${e.id}`,children:[e.kind,`: `,e.name]},`${e.kind}:${e.id}`)):N.filter(e=>e.plane===`user`).map(e=>(0,A.jsx)(`option`,{value:e.flowId,children:e.flowId},e.flowId))]})]}),(0,A.jsx)(u,{type:`button`,className:`mt-3`,onClick:()=>H.mutate(),disabled:H.isPending,children:`Simulate`}),H.isError?(0,A.jsx)(`p`,{role:`alert`,className:`mt-2 text-sm text-[var(--oke-danger)]`,children:H.error instanceof Error?H.error.message:`Simulate failed`}):null,d?(0,A.jsxs)(`div`,{className:`mt-4`,children:[(0,A.jsx)(`ol`,{"aria-label":`Evaluation order`,className:`list-decimal space-y-1 pl-5 text-sm`,children:d.evaluations.map((e,t)=>(0,A.jsx)(`li`,{children:O(e,t)},`${e.name}-${t}`))}),(0,A.jsx)(`p`,{role:`status`,className:`mt-3 text-sm`,"data-denial":d.denial?.code??`allowed`,children:d.denial?D(d.denial):`Allowed — chain passed`})]}):null]}),F.length>0?(0,A.jsxs)(`section`,{"aria-label":`Permission widenings`,children:[(0,A.jsx)(`h3`,{className:`text-sm font-medium text-[var(--oke-danger)]`,children:`Deploy widenings`}),(0,A.jsx)(`ul`,{className:`mt-2 list-disc pl-5 text-sm`,children:F.map(e=>(0,A.jsx)(`li`,{children:e.summary},`${e.path}:${e.summary}`))})]}):null]})})]})]})}var M=t({default:()=>j});export{E as n,g as r,M as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as e,r as t}from"./rolldown-runtime-CNC7AqOf.js";import{Q as n,d as r,n as i,nt as a,tt as o,u as s}from"./panel-access-Dd37LU2c.js";import{n as c}from"./panel-diff-DxehccqB.js";import{n as l}from"./panel-ai-CC7LR6-J.js";import{c as u,n as d,u as f}from"./panel-architecture-B5b3iKCz.js";import{n as p}from"./panel-channels-CeNjTKXp.js";import{n as m}from"./panel-clock-DgFTLoHV.js";import{n as h}from"./panel-gates-Z9MKRGdH.js";var g=[`!=`,`>=`,`<=`,`=`,`>`,`<`];function _(e){if(!e||!e.trim())return{clauses:[]};let t=e.split(/\s+AND\s+/i).map(e=>e.trim()).filter(Boolean),n=[];for(let e of t){let t=re(e);t&&n.push(t)}return{clauses:n}}function v(e){return e.clauses.map(te).join(` AND `)}function y(e,t){return{clauses:[...e.clauses.filter(e=>e.dimension!==t.dimension),t]}}function b(e,t){return{clauses:e.clauses.filter(e=>e.dimension!==t)}}function x(e,t){for(let n of t.clauses)if(!S(e,n))return!1;return!0}function ee(e,t){return t.clauses.length===0?[...e]:e.filter(e=>x(e,t))}function te(e){let t=oe(e.dimension,e.value);return`${e.dimension} ${e.op} ${t}`}var ne=[`flow`,`unit`,`trigger`,`plane`,`tenant`,`principal`,`cache`,`replica`,`error`,`buildVersion`,`promptVersion`,`duration`];function re(e){let t=null,n=-1;for(let r of g){let i=e.indexOf(` ${r} `);if(i!==-1){t=r,n=i;break}}if(t===null||n<0)return null;let r=e.slice(0,n).trim(),i=e.slice(n+t.length+2).trim();if(!r||!i)return null;let a=ie(r,i);return a===void 0?null:{dimension:r,op:t,value:a}}function ie(e,t){return e===`duration`||e===`duration_ms`?ae(t):t===`true`?!0:t===`false`?!1:t.startsWith(`"`)&&t.endsWith(`"`)||t.startsWith(`'`)&&t.endsWith(`'`)?t.slice(1,-1):/^-?\d+(\.\d+)?$/.test(t)?Number(t):t}function ae(e){let t=/^(-?\d+(?:\.\d+)?)\s*(ms|s|m)?$/i.exec(e.trim());if(!t)return;let n=Number(t[1]),r=(t[2]??`ms`).toLowerCase();if(r===`ms`)return n;if(r===`s`)return n*1e3;if(r===`m`)return n*6e4}function oe(e,t){if(e===`duration`||e===`duration_ms`){let e=typeof t==`number`?t:Number(t);return Number.isFinite(e)?e>=6e4&&e%6e4==0?`${e/6e4}m`:e>=1e3&&e%1e3==0?`${e/1e3}s`:`${e}ms`:String(t)}return typeof t==`string`&&/\s/.test(t)?`"${t}"`:String(t)}function S(e,t){let n=C(e,t.dimension);if(n==null)return t.op===`!=`;let r=t.value;if(t.op===`=`)return w(n,r);if(t.op===`!=`)return!w(n,r);let i=T(n),a=T(r);return i===void 0||a===void 0?!1:t.op===`>`?i>a:t.op===`<`?i<a:t.op===`>=`?i>=a:t.op===`<=`&&i<=a}function C(e,t){switch(t){case`flow`:return e.flow;case`unit`:return e.unit??null;case`trigger`:return e.trigger;case`plane`:return e.plane;case`tenant`:return e.tenant??null;case`principal`:return e.principal??null;case`cache`:return e.cache;case`replica`:return e.replica??null;case`replicaLagMs`:case`replica_lag_ms`:return e.replicaLagMs??null;case`error`:case`error_code`:return e.error??null;case`buildVersion`:case`build_version`:return e.buildVersion??null;case`promptVersion`:case`prompt_version`:return e.promptVersion??null;case`cost`:return e.cost??null;case`duration`:case`duration_ms`:return e.durationMs;case`gates`:return e.gates.join(`,`);default:return e.dimensions[t]}}function w(e,t){if(typeof e==`number`||typeof t==`number`){let n=T(e),r=T(t);if(n!==void 0&&r!==void 0)return n===r}return String(e)===String(t)}function T(e){if(typeof e==`number`&&Number.isFinite(e))return e;if(typeof e==`boolean`)return;let t=Number(e);return Number.isFinite(t)?t:void 0}function E(e,t){let n=new Map;for(let r of e){let e=C(r,t),i=e==null||e===``?`(empty)`:String(e),a=n.get(i)??[];a.push(r),n.set(i,a)}let r=[];for(let[e,t]of n){let n=t.map(e=>e.durationMs).sort((e,t)=>e-t),i=n.reduce((e,t)=>e+t,0),a=t.reduce((e,t)=>e+(t.cost??0),0);r.push({key:e,count:t.length,avgDurationMs:t.length===0?0:i/t.length,p50DurationMs:D(n,.5),p99DurationMs:D(n,.99),sumCost:a})}return r.sort((e,t)=>t.count-e.count||e.key.localeCompare(t.key)),r}function se(e){let t=new Set([`flow`,`unit`,`trigger`,`plane`,`tenant`,`principal`,`cache`,`replica`,`error`,`buildVersion`,`promptVersion`]);for(let n of e)for(let e of Object.keys(n.dimensions))e!==`duration_ms`&&t.add(e);return[...t].sort((e,t)=>e.localeCompare(t))}function D(e,t){return e.length===0?0:e.length===1?e[0]:e[Math.min(e.length-1,Math.max(0,Math.ceil(t*e.length)-1))]}function ce(e){if(e.length===0)return null;let t=E(e,`flow`)[0];return!t||t.key===`(empty)`?null:{busiestFlow:t.key,runCount:t.count,href:`/flows?flow=${encodeURIComponent(t.key)}`}}var O=7*864e5;function le(e){let{manifest:t,ai:n,runs:r,now:i}=e,a=i-O,o=[];for(let[e,n]of Object.entries(t?.flows??{})){let t=n.cost?.budget;if(t==null||t<=0)continue;let s=ue(r.filter(t=>t.flow===e&&t.startedAt>=a&&t.startedAt<=i));o.push(k({id:`flow:${e}`,name:e,kind:`flow`,declaredBudget:t,spent:s,windowMs:O}))}if(n){for(let e of n.prompts){let t=e.budgetMaxCostPerCall;if(t==null||t<=0)continue;let r=n.versions.find(t=>t.prompt===e.name&&t.version===e.version)??n.versions.filter(t=>t.prompt===e.name).sort((e,t)=>t.version-e.version)[0];if(!r||r.sampleCount===0)continue;let i=t*r.sampleCount,a=r.cost.mean*r.sampleCount;o.push(k({id:`ai-prompt:${e.name}@${r.version}`,name:`${e.name}@${r.version}`,kind:`ai-prompt`,declaredBudget:i,spent:a,windowMs:O}))}for(let e of n.agents){let t=e.budgetMaxCostPerRun;if(t==null||t<=0)continue;let r=n.agentRuns.filter(t=>t.agent===e.name);if(r.length===0)continue;let i=t*r.length,a=r.reduce((e,t)=>e+t.cost,0);o.push(k({id:`ai-agent:${e.name}`,name:e.name,kind:`ai-agent`,declaredBudget:i,spent:a,windowMs:O}))}}return o.sort((e,t)=>t.burnRate-e.burnRate||e.name.localeCompare(t.name))}function k(e){let{declaredBudget:t,spent:n,windowMs:r}=e,i=t<=0?0:n/t,a=Math.max(0,1-(t<=0?0:n/t)),o=null;if(n>0&&i>0&&a>0){let e=n/r;e>0&&(o=(t-n)/e)}else i>=1&&a<=0&&(o=0);return{id:e.id,name:e.name,kind:e.kind,declaredBudget:t,spent:n,burnRate:i,remainingFraction:a,timeToExhaustionMs:o,windowMs:r}}function ue(e){return e.reduce((e,t)=>e+(t.cost??0),0)}var A=3600*1e3;function j(e,t){let n=t-A,r=e.filter(e=>e.startedAt>=n&&e.startedAt<=t),i=r.length,a=r.filter(e=>!!e.error).length,o=r.map(e=>e.durationMs).sort((e,t)=>e-t),s=r.filter(e=>e.replicaLagMs!=null&&e.replicaLagMs>200||e.cache===`miss`).length;return{latencyP99Ms:M(o,.99),trafficPerMin:i===0?0:i/(A/6e4),errorRate:i===0?0:a/i,saturation:i===0?0:s/i,sampleCount:i,windowMs:A}}function M(e,t){return e.length===0?0:e.length===1?e[0]:e[Math.min(e.length-1,Math.max(0,Math.ceil(t*e.length)-1))]}function N(e){return e.filter(e=>e.dead>0).map(e=>({signal:e.name,dead:e.dead,delivery:e.delivery})).sort((e,t)=>t.dead-e.dead||e.signal.localeCompare(t.signal))}var P=90*864e5;function F(e,t){return e.filter(e=>e.kind===`secret`?e.lastReadAt==null||t-e.lastReadAt>=P:!1)}function I(e){return e.filter(e=>e.category===`permission-widening`&&(e.path.startsWith(`/plugins/`)||e.path.startsWith(`/plugins`)||e.summary.toLowerCase().includes(`plugin`))).map(e=>({path:e.path,summary:e.summary,kind:e.kind})).sort((e,t)=>e.path.localeCompare(t.path))}function L(e){return[...z(e.gatesAudit),...B(e.signals),...V(e.crons),...H(e.vaultSecrets,e.now),...U(e.channelOutcomes),...de(e.architectureGraph),...fe(e.diffChanges),...pe(e.aiVersions),...me(e.accessHygiene)].sort(R)}function R(e,t){return t.userHarm===e.userHarm?t.irreversibility===e.irreversibility?t.trend===e.trend?e.id.localeCompare(t.id):t.trend-e.trend:t.irreversibility-e.irreversibility:t.userHarm-e.userHarm}function z(e){return h(e).map(e=>({id:`gates:unguarded`,source:`gates`,title:`Unguarded flows`,detail:e.message,href:`/gates`,userHarm:90,irreversibility:80,trend:e.count}))}function B(e){return N(e).map(e=>({id:`signals:dlq:${e.signal}`,source:`signals`,title:`Dead letters`,detail:`${e.signal}: ${e.dead} dead letter${e.dead===1?``:`s`} (${e.delivery})`,href:`/signals?signal=${encodeURIComponent(e.signal)}`,userHarm:70,irreversibility:40,trend:e.dead}))}function V(e){return m(e).map(e=>({id:`clock:overdue:${e.name}`,source:`clock`,title:`Overdue cron`,detail:`${e.name} is overdue${e.missedRuns>0?` · ${e.missedRuns} missed`:``}`,href:`/clock?cron=${encodeURIComponent(e.name)}`,userHarm:60,irreversibility:30,trend:e.missedRuns}))}function H(e,t){let n=F(e,t);return n.length===0?[]:[{id:`vault:dormant`,source:`vault`,title:`Dormant secrets`,detail:`${n.length} secret${n.length===1?``:`s`} unread for 90+ days (or never): ${n.map(e=>e.name).join(`, `)}`,href:`/vault`,userHarm:50,irreversibility:70,trend:n.length}]}function U(e){return p(e).map(e=>({id:`channels:spam`,source:`channels`,title:`Spam complaints`,detail:`${e.count} delivered-then-complained — burns sender reputation`,href:`/channels`,userHarm:100,irreversibility:95,trend:e.count}))}function de(e){return e?f(e).map(e=>({id:`architecture:cycle:${e.nodeIds.join(`>`)}`,source:`architecture`,title:e.title,detail:e.detail,href:`/architecture`,userHarm:65,irreversibility:55,trend:e.severity===`critical`?2:1})):[]}function fe(e){return I(e).map(e=>({id:`plugins:widen:${e.path}`,source:`plugins`,title:`Plugin capability widening`,detail:e.summary,href:`/diff?path=${encodeURIComponent(e.path)}`,userHarm:55,irreversibility:90,trend:1}))}function pe(e){return l(e).map(e=>({id:`ai:budget:${e.prompt}@${e.version}`,source:`ai`,title:`Model budget overrun`,detail:`${e.prompt}@${e.version}: ${(e.overBudgetRate*100).toFixed(1)}% over budget (p95 $${e.p95Cost.toFixed(3)})`,href:`/ai?prompt=${encodeURIComponent(e.prompt)}&version=${e.version}`,userHarm:45,irreversibility:50,trend:Math.round(e.overBudgetRate*100)}))}function me(e){return i(e).map(t=>({id:`access:hygiene:${t.code}`,source:`access`,title:`Access hygiene`,detail:t.message,href:`/access`,userHarm:40,irreversibility:35,trend:t.code===`unused-keys`?e.unusedKeys.length:t.code===`never-signed-in`?e.neverSignedInOperators.length:e.expiredInvitations.length}))}var W=3600*1e3,he=30*864e5,ge=90*864e5,G=3600*1e3;function K(e){let t=e.trim(),n=/^(\d+(?:\.\d+)?)\s*%?$/.exec(t);if(!n)return null;let r=Number(n[1]);return!Number.isFinite(r)||r<0||r>100?null:Math.max(0,1-r/100)}function q(e){if(!e)return[];let t=[];for(let[n,r]of Object.entries(e.flows??{})){let e=r.slo?.availability;if(!e)continue;let i=K(e);i!=null&&t.push({id:`flow:${n}`,kind:`flow`,name:n,availability:e,tolerableErrorRate:i,flowIds:[n]})}for(let[n,r]of Object.entries(e.journeys??{})){let e=r.slo?.availability;if(!e)continue;let i=K(e);i!=null&&t.push({id:`journey:${n}`,kind:`journey`,name:n,availability:e,tolerableErrorRate:i,flowIds:xe(r)})}return t.sort((e,t)=>e.id.localeCompare(t.id))}function _e(e){return q(e.manifest).map(t=>ye(t,e.runs,e.now))}function ve(e){return q(e).length>0}function ye(e,t,n){let r=J(t,e.flowIds,n-W,n),i=J(t,e.flowIds,n-he,n),a=r.errorRate,o=e.tolerableErrorRate<=0?a>0?1/0:0:a/e.tolerableErrorRate,s=i.total*e.tolerableErrorRate,c=Math.max(0,s-i.errors),l=s<=0?i.errors>0?0:1:c/s,u=a-e.tolerableErrorRate,d=null;if(u>0&&r.total>0){let e=u*(r.total/W);e>0&&(d=c/e)}let f=be(t,e.flowIds,e.tolerableErrorRate,n),p=f==null||n-f>=7776e6;return{id:e.id,kind:e.kind,name:e.name,availability:e.availability,tolerableErrorRate:e.tolerableErrorRate,currentErrorRate:a,burnRate:o,remainingBudgetFraction:l,timeToExhaustionMs:d,ceremonial:p,lastBurnAt:f,sampleCount:r.total,errorCount:r.errors}}function J(e,t,n,r){let i=new Set(t),a=0,o=0;for(let t of e)t.startedAt<n||t.startedAt>r||i.size>0&&!i.has(t.flow)||(a+=1,t.error&&(o+=1));return{total:a,errors:o,errorRate:a===0?0:o/a}}function be(e,t,n,r){if(n<=0)return null;let i=r-ge,a=null;for(let o=i;o<r;o+=G){let i=Math.min(r,o+G),s=J(e,t,o,i);s.total!==0&&s.errorRate/n>=1&&(a=i)}return a}function xe(e){return(e.flows??[]).map(e=>typeof e==`string`?e:String(e))}function Se(e){let{hasDeclaredSlos:t,slos:n,costBudgets:r,findings:i}=e,a=n.filter(e=>e.burnRate>=1&&!e.ceremonial).sort((e,t)=>t.burnRate-e.burnRate||(e.timeToExhaustionMs??1/0)-(t.timeToExhaustionMs??1/0));if(a.length>0){let e=a[0],t=Y(e.timeToExhaustionMs),n=a.length===1?`one objective is burning fast`:`${a.length} objectives are burning`;return{tone:e.burnRate>=6?`critical`:`warn`,line:`${n} — ${e.name} will exhaust its budget ${t}`}}let o=r.filter(e=>e.burnRate>=1).sort((e,t)=>t.burnRate-e.burnRate||(e.timeToExhaustionMs??1/0)-(t.timeToExhaustionMs??1/0));if(o.length>0){let e=o[0];return{tone:`warn`,line:`cost budget burning — ${e.name} will exhaust ${Y(e.timeToExhaustionMs)}`}}if(i.length>0){let e=i[0];return{tone:e.userHarm>=90?`critical`:`warn`,line:`${e.title.toLowerCase()}: ${e.detail}`}}if(!t)return{tone:`empty`,line:`no objectives declared yet — findings and golden signals below; declare a first SLO on your busiest flow`};let s=n.filter(e=>e.ceremonial);return s.length===n.length&&n.length>0?{tone:`ok`,line:`all ${n.length} objective${n.length===1?``:`s`} within budget — ${s.length} marked ceremonial (no burn in 90 days)`}:{tone:`ok`,line:`all objectives within budget — no burning SLOs`}}function Y(e){if(e==null)return`if the current burn continues`;if(e<=0)return`now`;let t=e/864e5;if(t>=2)return`in ${Math.round(t)} days`;if(t>=1)return`in 1 day`;let n=e/36e5;if(n>=2)return`in ${Math.round(n)} hours`;if(n>=1)return`in 1 hour`;let r=Math.max(1,Math.round(e/6e4));return`in ${r} minute${r===1?``:`s`}`}function Ce(e){return Number.isFinite(e)?e>=10?`${e.toFixed(0)}×`:e>=1?`${e.toFixed(1)}×`:`${e.toFixed(2)}×`:`∞×`}function X(e){return e==null?`—`:e<=0?`exhausted`:Y(e).replace(/^in /,``)}function we(e){let{manifest:t,runs:n,gates:r,signals:i,clock:a,vault:o,channels:s,ai:l,diff:u,access:f,now:p}=e,m=e.architectureGraph===void 0?t?d(t):null:e.architectureGraph,h=ve(t),g=_e({manifest:t,runs:n,now:p}),_=le({manifest:t,ai:l,runs:n,now:p}),v=L({gatesAudit:r?.audit??{unguardedFlows:[],orphanPermissions:[],emptyRoles:[],unattachedGates:[]},signals:i,crons:a?.crons??[],vaultSecrets:o?.secrets??[],channelOutcomes:s?.outcomes??[],architectureGraph:m,diffChanges:u?.changes??[],aiVersions:l?.versions??[],accessHygiene:f?.hygiene??{unusedKeys:[],neverSignedInOperators:[],expiredInvitations:[]},now:p}),y=u?(()=>{let e=c(u);return{hasBaseline:e.hasBaseline,severity:e.severity,changeCount:e.changeCount,line:e.line,href:e.href}})():{hasBaseline:!1,severity:null,changeCount:0,line:`Manifest Diff unavailable`,href:`/diff`},b=j(n,p),x=h?null:ce(n);return{verdict:Se({hasDeclaredSlos:h,slos:g,costBudgets:_,findings:v}),slos:g,costBudgets:_,whatChanged:y,findings:v,golden:b,firstSloInvite:x,hasDeclaredSlos:h}}var Te=e(a(),1),Z=o();function Q(){let e=n({queryKey:[`console.manifest.get`],queryFn:async()=>{let e=await r.manifestGet();if(e.error)throw Error(e.error.code);return e.data.manifest}}),t=n({queryKey:[`console.runs.list`],queryFn:async()=>{let e=await r.runsList();if(e.error)throw Error(e.error.code);return e.data.runs.map(u)},refetchInterval:1e4}),i=n({queryKey:[`console.gates.list`],queryFn:async()=>{let e=await r.gatesList();if(e.error)throw Error(e.error.code);return e.data},refetchInterval:15e3}),a=n({queryKey:[`console.signals.list`],queryFn:async()=>{let e=await r.signalsList();if(e.error)throw Error(e.error.code);return e.data.signals},refetchInterval:1e4}),o=n({queryKey:[`console.clock.list`],queryFn:async()=>{let e=await r.clockList();if(e.error)throw Error(e.error.code);return e.data},refetchInterval:1e4}),c=n({queryKey:[`console.vault.list`],queryFn:async()=>{let e=await r.vaultList();if(e.error)throw Error(e.error.code);return e.data},refetchInterval:3e4}),l=n({queryKey:[`console.channel.list`],queryFn:async()=>{let e=await r.channelsList();if(e.error)throw Error(e.error.code);return e.data},refetchInterval:15e3}),d=n({queryKey:[`console.ai.list`],queryFn:async()=>{let e=await r.aiList();if(e.error)throw Error(e.error.code);return e.data},refetchInterval:15e3}),f=n({queryKey:[`console.diff.list`],queryFn:async()=>{let e=await r.diffList();if(e.error)throw Error(e.error.code);return e.data},refetchInterval:15e3}),p=n({queryKey:[`console.access.list`],queryFn:async()=>{let e=await r.accessList();if(e.error)throw Error(e.error.code);return e.data},refetchInterval:3e4}),m=(0,Te.useMemo)(()=>{let n=o.data?.now??Date.now();return we({manifest:e.data??null,runs:t.data??[],gates:i.data??null,signals:a.data??[],clock:o.data??null,vault:c.data??null,channels:l.data??null,ai:d.data??null,diff:f.data??null,access:p.data??null,now:n})},[e.data,t.data,i.data,a.data,o.data,c.data,l.data,d.data,f.data,p.data]),h=e.isLoading||t.isLoading||i.isLoading;return(0,Z.jsxs)(`div`,{className:`flex h-full min-h-0 flex-col overflow-y-auto`,children:[(0,Z.jsxs)(`header`,{className:`shrink-0 border-b border-[var(--oke-line)] px-6 py-5`,children:[(0,Z.jsx)(`p`,{className:`text-xs uppercase tracking-[0.2em] text-[var(--oke-muted)]`,children:`Overview`}),(0,Z.jsx)(`h1`,{className:`mt-1 text-xl font-semibold tracking-tight text-[var(--oke-fg)]`,children:`Is the system healthy right now?`}),(0,Z.jsx)(`p`,{role:`status`,"aria-live":`polite`,className:s(`mt-3 text-base leading-snug`,m.verdict.tone===`critical`&&`text-red-700`,m.verdict.tone===`warn`&&`text-amber-800`,m.verdict.tone===`ok`&&`text-[var(--oke-fg)]`,m.verdict.tone===`empty`&&`text-[var(--oke-muted)]`),children:h?`Loading panel projections…`:m.verdict.line})]}),(0,Z.jsxs)(`main`,{id:`overview-main`,className:`flex flex-col gap-8 px-6 py-6`,children:[m.hasDeclaredSlos?(0,Z.jsx)($,{label:`Error budgets`,ariaLabel:`Error budgets`,items:m.slos.map(e=>({id:e.id,title:`${e.kind}:${e.name}`,meta:e.availability,burn:e.burnRate,exhaust:e.timeToExhaustionMs,badge:e.ceremonial?`CEREMONIAL`:null,remaining:e.remainingBudgetFraction}))}):null,(0,Z.jsx)($,{label:`Cost budgets`,ariaLabel:`Cost budgets`,empty:`No cost budgets declared.`,items:m.costBudgets.map(e=>({id:e.id,title:e.name,meta:`$${e.spent.toFixed(2)} / $${e.declaredBudget.toFixed(2)}`,burn:e.burnRate,exhaust:e.timeToExhaustionMs,badge:null,remaining:e.remainingFraction}))}),(0,Z.jsxs)(`section`,{"aria-label":`What changed`,className:`flex flex-col gap-2`,children:[(0,Z.jsx)(`h2`,{className:`text-sm font-medium text-[var(--oke-fg)]`,children:`What changed`}),(0,Z.jsx)(`p`,{className:`text-sm text-[var(--oke-muted)]`,children:(0,Z.jsx)(`a`,{href:m.whatChanged.href,className:`underline decoration-[var(--oke-line)] underline-offset-2 hover:text-[var(--oke-fg)]`,children:m.whatChanged.line})})]}),(0,Z.jsx)(Ee,{view:m}),(0,Z.jsx)(De,{view:m}),m.firstSloInvite?(0,Z.jsxs)(`section`,{"aria-label":`Declare first SLO`,className:`flex flex-col gap-2 border border-[var(--oke-line)] px-4 py-3`,children:[(0,Z.jsx)(`h2`,{className:`text-sm font-medium text-[var(--oke-fg)]`,children:`Declare a first objective`}),(0,Z.jsxs)(`p`,{className:`text-sm text-[var(--oke-muted)]`,children:[`Your busiest flow is`,` `,(0,Z.jsx)(`a`,{href:m.firstSloInvite.href,className:`font-mono text-[var(--oke-fg)] underline decoration-[var(--oke-line)] underline-offset-2`,children:m.firstSloInvite.busiestFlow}),` `,`(`,m.firstSloInvite.runCount.toLocaleString(`en-US`),` runs). Add`,` `,(0,Z.jsx)(`code`,{className:`font-mono text-[13px] text-[var(--oke-fg)]`,children:`slo: { availability: "99.9%" }`}),` `,`on that flow.`]})]}):null]})]})}function $(e){return(0,Z.jsxs)(`section`,{"aria-label":e.ariaLabel,className:`flex flex-col gap-3`,children:[(0,Z.jsx)(`h2`,{className:`text-sm font-medium text-[var(--oke-fg)]`,children:e.label}),e.items.length===0?(0,Z.jsx)(`p`,{className:`text-sm text-[var(--oke-muted)]`,children:e.empty??`None.`}):(0,Z.jsx)(`ul`,{className:`divide-y divide-[var(--oke-line)] border-y border-[var(--oke-line)]`,children:e.items.map(e=>(0,Z.jsxs)(`li`,{className:`flex min-h-10 flex-wrap items-center justify-between gap-3 py-2 text-sm`,children:[(0,Z.jsxs)(`div`,{className:`flex min-w-0 flex-col gap-0.5`,children:[(0,Z.jsx)(`span`,{className:`font-mono text-[13px] text-[var(--oke-fg)]`,children:e.title}),(0,Z.jsx)(`span`,{className:`text-[var(--oke-muted)]`,children:e.meta})]}),(0,Z.jsxs)(`div`,{className:`flex flex-wrap items-center gap-3 text-[var(--oke-muted)]`,children:[(0,Z.jsxs)(`span`,{children:[`burn`,` `,(0,Z.jsx)(`span`,{className:`text-[var(--oke-fg)]`,children:Ce(e.burn)})]}),(0,Z.jsxs)(`span`,{children:[`exhausts`,` `,(0,Z.jsx)(`span`,{className:`text-[var(--oke-fg)]`,children:X(e.exhaust)})]}),(0,Z.jsx)(`span`,{"aria-hidden":!0,className:`inline-block h-1.5 w-16 overflow-hidden bg-[var(--oke-line)]`,title:`${Math.round(e.remaining*100)}% remaining`,children:(0,Z.jsx)(`span`,{className:`block h-full bg-[var(--oke-fg)]`,style:{width:`${Math.max(0,Math.min(100,e.remaining*100))}%`}})}),e.badge?(0,Z.jsx)(`span`,{role:`status`,className:`text-xs uppercase tracking-wider text-[var(--oke-muted)]`,children:e.badge}):null]})]},e.id))})]})}function Ee({view:e}){return(0,Z.jsxs)(`section`,{"aria-label":`Findings`,"aria-live":`polite`,className:`flex flex-col gap-3`,children:[(0,Z.jsx)(`h2`,{className:`text-sm font-medium text-[var(--oke-fg)]`,children:`Findings`}),e.findings.length===0?(0,Z.jsx)(`p`,{className:`text-sm text-[var(--oke-muted)]`,children:`No findings from other panels.`}):(0,Z.jsx)(`ol`,{className:`divide-y divide-[var(--oke-line)] border-y border-[var(--oke-line)]`,children:e.findings.map((e,t)=>(0,Z.jsx)(`li`,{className:`py-2 text-sm`,children:(0,Z.jsxs)(`a`,{href:e.href,className:`flex min-h-8 items-start gap-3 hover:text-[var(--oke-fg)]`,children:[(0,Z.jsxs)(`span`,{className:`w-5 shrink-0 text-[var(--oke-muted)]`,children:[t+1,`.`]}),(0,Z.jsxs)(`span`,{children:[(0,Z.jsx)(`span`,{className:`text-[var(--oke-fg)]`,children:e.title}),(0,Z.jsxs)(`span`,{className:`text-[var(--oke-muted)]`,children:[` `,`· `,e.detail]}),(0,Z.jsx)(`span`,{className:`ml-2 text-xs uppercase tracking-wider text-[var(--oke-muted)]`,children:e.source})]})]})},e.id))})]})}function De({view:e}){return(0,Z.jsxs)(`section`,{"aria-label":`Golden signals`,className:`flex flex-col gap-3`,children:[(0,Z.jsx)(`h2`,{className:`text-sm font-medium text-[var(--oke-fg)]`,children:`Golden signals`}),(0,Z.jsxs)(`dl`,{className:`grid grid-cols-2 gap-4 sm:grid-cols-4`,children:[(0,Z.jsxs)(`div`,{children:[(0,Z.jsx)(`dt`,{className:`text-xs uppercase tracking-wider text-[var(--oke-muted)]`,children:`Latency p99`}),(0,Z.jsxs)(`dd`,{className:`mt-1 text-sm text-[var(--oke-fg)]`,children:[Math.round(e.golden.latencyP99Ms),` ms`]})]}),(0,Z.jsxs)(`div`,{children:[(0,Z.jsx)(`dt`,{className:`text-xs uppercase tracking-wider text-[var(--oke-muted)]`,children:`Traffic`}),(0,Z.jsxs)(`dd`,{className:`mt-1 text-sm text-[var(--oke-fg)]`,children:[e.golden.trafficPerMin.toFixed(1),` / min`]})]}),(0,Z.jsxs)(`div`,{children:[(0,Z.jsx)(`dt`,{className:`text-xs uppercase tracking-wider text-[var(--oke-muted)]`,children:`Errors`}),(0,Z.jsxs)(`dd`,{className:`mt-1 text-sm text-[var(--oke-fg)]`,children:[(e.golden.errorRate*100).toFixed(2),`%`]})]}),(0,Z.jsxs)(`div`,{children:[(0,Z.jsx)(`dt`,{className:`text-xs uppercase tracking-wider text-[var(--oke-muted)]`,children:`Saturation`}),(0,Z.jsxs)(`dd`,{className:`mt-1 text-sm text-[var(--oke-fg)]`,children:[(e.golden.saturation*100).toFixed(1),`%`]})]})]})]})}var Oe=t({OverviewPanel:()=>Q,default:()=>Q});export{ee as a,v as c,ne as i,y as l,se as n,_ as o,E as r,b as s,Oe as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as e,r as t}from"./rolldown-runtime-CNC7AqOf.js";import{C as n,Q as r,c as i,d as a,nt as o,o as s,tt as c,u as l,w as u}from"./panel-access-Dd37LU2c.js";function d(e){return{q:typeof e.q==`string`&&e.q.length>0?e.q:void 0,origin:m(e.origin)?e.origin:void 0,state:e.state===`on`||e.state===`off`?e.state:void 0,plugin:typeof e.plugin==`string`&&e.plugin.length>0?e.plugin:void 0}}function f(e){let t={};return e.q&&(t.q=e.q),e.origin&&(t.origin=e.origin),e.state&&(t.state=e.state),e.plugin&&(t.plugin=e.plugin),t}function p(e,t){return{...e,plugin:t}}function m(e){return e===`core`||e===`local`||e===`community`}function h(e){return e.installCommand?e.installCommand:e.enableHint?e.enableHint:null}function g(e){return e.installCommand?`Copy bun add command`:e.enableHint?`Copy enable hint`:`No command`}var _={core:`Core`,local:`Local`,community:`Community`};function v(e,t){let n=(t.q??``).trim().toLowerCase(),r=e.filter(e=>t.origin&&e.origin!==t.origin||t.state&&e.state!==t.state?!1:!n||e.id.toLowerCase().includes(n)||(e.summary?.toLowerCase().includes(n)??!1)||(e.packageName?.toLowerCase().includes(n)??!1)||e.declares.some(e=>e.toLowerCase().includes(n))||e.intercepts.some(e=>e.stage.toLowerCase().includes(n))),i=[`core`,`local`,`community`],a=[];for(let e of i){let t=r.filter(t=>t.origin===e).sort((e,t)=>y(e.state,t.state,e.id,t.id));t.length!==0&&a.push({id:e,label:_[e],items:t})}return a}function y(e,t,n,r){return e===t?n.localeCompare(r):e===`on`?-1:1}var b=e(o(),1),x=c();function S(){let e=u({from:`/plugins`}),t=n({from:`/plugins`}),[o,s]=(0,b.useState)(null),c=e=>{t({search:f(e),replace:!0})},d=r({queryKey:[`console.plugin.list`],queryFn:async()=>{let e=await a.pluginsList();if(e.error)throw Error(e.error.code);return e.data},refetchInterval:15e3}),m=d.data,g=(0,b.useMemo)(()=>v(m?.plugins??[],e),[m?.plugins,e]),_=m?.plugins.find(t=>t.id===e.plugin)??m?.plugins[0]??null,y=_?h(_):null,S=async()=>{y&&(await navigator.clipboard.writeText(y),s(y),window.setTimeout(()=>s(null),2e3))};return(0,x.jsxs)(`div`,{className:`flex h-full min-h-0 flex-col`,children:[(0,x.jsxs)(`header`,{className:`shrink-0 border-b border-[var(--oke-line)] px-4 py-3`,children:[(0,x.jsx)(`h1`,{className:`text-lg text-[var(--oke-fg)]`,children:`Plugins`}),(0,x.jsx)(`p`,{className:`mt-1 text-sm text-[var(--oke-muted)]`,children:`Origin × state — CORE stays listed when off; local/community only when plugged. Read-only; git review is the approval.`}),(0,x.jsxs)(`div`,{className:`mt-3 flex flex-wrap items-end gap-3`,children:[(0,x.jsxs)(`label`,{className:`flex flex-col gap-1 text-xs text-[var(--oke-muted)]`,children:[`Filter`,(0,x.jsx)(i,{"aria-label":`Filter plugins`,value:e.q??``,onChange:t=>c({...e,q:t.target.value||void 0}),className:`min-h-8 w-56`})]}),(0,x.jsx)(T,{value:e.origin,onChange:t=>c({...e,origin:t})}),(0,x.jsx)(E,{value:e.state,onChange:t=>c({...e,state:t})})]})]}),(0,x.jsxs)(`div`,{className:`flex min-h-0 flex-1`,children:[(0,x.jsx)(`section`,{"aria-label":`Plugins by origin`,className:`w-80 shrink-0 overflow-y-auto border-r border-[var(--oke-line)]`,children:d.isLoading?(0,x.jsx)(`p`,{className:`p-4 text-sm text-[var(--oke-muted)]`,children:`Loading…`}):g.length===0?(0,x.jsx)(`p`,{className:`p-4 text-sm text-[var(--oke-muted)]`,children:`No plugins`}):g.map(t=>(0,x.jsxs)(`div`,{className:`border-b border-[var(--oke-line)]`,children:[(0,x.jsx)(`h2`,{className:`px-3 py-2 text-xs tracking-wide text-[var(--oke-muted)] uppercase`,children:t.label}),(0,x.jsx)(`ul`,{children:t.items.map(t=>(0,x.jsx)(`li`,{children:(0,x.jsxs)(`button`,{type:`button`,"aria-pressed":_?.id===t.id,className:l(`flex min-h-8 w-full items-center gap-2 px-3 py-2 text-left text-sm`,_?.id===t.id?`bg-[var(--oke-line)] text-[var(--oke-fg)]`:`text-[var(--oke-muted)] hover:text-[var(--oke-fg)]`),onClick:()=>c(p(e,t.id)),children:[(0,x.jsx)(`span`,{className:`font-mono`,children:t.id}),(0,x.jsx)(`span`,{className:`ml-auto text-xs`,children:t.state})]})},t.id))})]},t.id))}),(0,x.jsx)(`section`,{"aria-label":`Plugin detail`,"aria-live":`polite`,className:`min-h-0 flex-1 overflow-y-auto px-4 py-3`,children:_?(0,x.jsx)(C,{plugin:_,command:y,copied:o,onCopy:()=>void S()}):(0,x.jsx)(`p`,{className:`text-sm text-[var(--oke-muted)]`,children:`Select a plugin`})})]})]})}function C(e){let{plugin:t,command:n,copied:r,onCopy:i}=e;return(0,x.jsxs)(`div`,{className:`flex flex-col gap-6`,children:[(0,x.jsxs)(`div`,{children:[(0,x.jsxs)(`h2`,{className:`text-base text-[var(--oke-fg)]`,children:[(0,x.jsx)(`span`,{className:`font-mono`,children:t.id}),` `,(0,x.jsxs)(`span`,{className:`text-sm text-[var(--oke-muted)]`,children:[`(`,t.origin,` · `,t.state,`)`]})]}),t.summary?(0,x.jsx)(`p`,{className:`mt-1 text-sm text-[var(--oke-muted)]`,children:t.summary}):null,t.version?(0,x.jsxs)(`p`,{className:`mt-1 text-xs text-[var(--oke-muted)]`,children:[`Version `,t.version]}):null]}),(0,x.jsxs)(`section`,{"aria-label":`Declares`,children:[(0,x.jsx)(`h3`,{className:`text-sm text-[var(--oke-fg)]`,children:`Declares`}),(0,x.jsx)(`p`,{className:`text-xs text-[var(--oke-muted)]`,children:`Boot-time — schema, elements, drivers, panels, CLI`}),t.declares.length===0?(0,x.jsx)(`p`,{className:`mt-2 text-sm text-[var(--oke-muted)]`,children:`None`}):(0,x.jsx)(`ul`,{className:`mt-2 list-inside list-disc font-mono text-sm`,children:t.declares.map(e=>(0,x.jsx)(`li`,{children:e},e))})]}),(0,x.jsxs)(`section`,{"aria-label":`Intercepts`,children:[(0,x.jsx)(`h3`,{className:`text-sm text-[var(--oke-fg)]`,children:`Intercepts`}),(0,x.jsx)(`p`,{className:`text-xs text-[var(--oke-muted)]`,children:`Per-request hooks — measured in the kernel pipeline`}),t.intercepts.length===0?(0,x.jsx)(`p`,{className:`mt-2 text-sm text-[var(--oke-muted)]`,children:`None`}):(0,x.jsxs)(`table`,{className:`mt-2 w-full text-left text-sm`,children:[(0,x.jsx)(`caption`,{className:`sr-only`,children:`Hook stages and measured mean cost`}),(0,x.jsx)(`thead`,{children:(0,x.jsxs)(`tr`,{className:`text-xs text-[var(--oke-muted)]`,children:[(0,x.jsx)(`th`,{scope:`col`,className:`py-1 pr-3 font-normal`,children:`Stage`}),(0,x.jsx)(`th`,{scope:`col`,className:`py-1 pr-3 font-normal`,children:`Mean ms`}),(0,x.jsx)(`th`,{scope:`col`,className:`py-1 font-normal`,children:`Samples`})]})}),(0,x.jsx)(`tbody`,{children:t.intercepts.map(e=>(0,x.jsxs)(`tr`,{className:`border-t border-[var(--oke-line)]`,children:[(0,x.jsx)(`th`,{scope:`row`,className:`py-1 pr-3 font-mono font-normal`,children:e.stage}),(0,x.jsx)(`td`,{className:`py-1 pr-3`,children:e.meanMs===null?`—`:e.meanMs.toFixed(2)}),(0,x.jsx)(`td`,{className:`py-1`,children:e.count})]},e.stage))})]}),t.hookCost?(0,x.jsxs)(`p`,{className:`mt-2 text-xs text-[var(--oke-muted)]`,role:`status`,children:[`p50 `,t.hookCost.p50Ms.toFixed(2),` ms · p95`,` `,t.hookCost.p95Ms.toFixed(2),` ms · n=`,t.hookCost.count]}):null]}),(0,x.jsxs)(`section`,{"aria-label":`Supply chain`,children:[(0,x.jsx)(`h3`,{className:`text-sm text-[var(--oke-fg)]`,children:`Supply chain`}),(0,x.jsxs)(`ul`,{className:`mt-2 space-y-1 text-sm`,children:[(0,x.jsx)(w,{label:`Lifecycle scripts`,state:t.supplyChain.lifecycleScripts.state,detail:t.supplyChain.lifecycleScripts.detail}),(0,x.jsx)(w,{label:`Release cooldown`,state:t.supplyChain.releaseCooldown.state,detail:t.supplyChain.releaseCooldown.detail}),(0,x.jsx)(w,{label:`node: scan`,state:t.supplyChain.nodeImportScan.state,detail:t.supplyChain.nodeImportScan.detail}),(0,x.jsx)(w,{label:`npm provenance`,state:t.supplyChain.npmProvenance.state,detail:t.supplyChain.npmProvenance.detail}),(0,x.jsx)(w,{label:`Boot conflicts`,state:t.supplyChain.bootConflicts.state,detail:t.supplyChain.bootConflicts.detail})]})]}),(0,x.jsxs)(`section`,{"aria-label":`Capability diff`,children:[(0,x.jsx)(`h3`,{className:`text-sm text-[var(--oke-fg)]`,children:`Capability diff`}),(0,x.jsx)(`p`,{className:`text-xs text-[var(--oke-muted)]`,children:`Git merge-base via diffManifest (oke doctor --diff) — not recomputed`}),t.capabilityDiff.length===0?(0,x.jsx)(`p`,{className:`mt-2 text-sm text-[var(--oke-muted)]`,children:`No pending capability changes for this plugin`}):(0,x.jsx)(`ul`,{className:`mt-2 space-y-1 text-sm`,children:t.capabilityDiff.map(e=>(0,x.jsxs)(`li`,{children:[(0,x.jsx)(`a`,{className:`text-[var(--oke-fg)] underline`,href:`/manifest-diff?path=${encodeURIComponent(e.path)}`,children:e.summary}),(0,x.jsx)(`span`,{className:`ml-2 text-xs text-[var(--oke-muted)]`,children:e.category})]},e.path))})]}),(0,x.jsxs)(`section`,{"aria-label":`Install command`,children:[(0,x.jsx)(`h3`,{className:`text-sm text-[var(--oke-fg)]`,children:`Command`}),n?(0,x.jsxs)(`div`,{className:`mt-2 flex flex-col gap-2`,children:[(0,x.jsx)(`pre`,{className:`overflow-x-auto rounded border border-[var(--oke-line)] bg-[var(--oke-bg)] p-3 font-mono text-sm`,children:(0,x.jsx)(`code`,{children:n})}),(0,x.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,x.jsx)(s,{type:`button`,onClick:i,className:`min-h-8`,children:g(t)}),r?(0,x.jsx)(`span`,{className:`text-xs text-[var(--oke-muted)]`,role:`status`,children:`Copied`}):null]}),(0,x.jsx)(`p`,{className:`text-xs text-[var(--oke-muted)]`,children:`The Console never installs. Git review is the approval — run this yourself.`})]}):(0,x.jsx)(`p`,{className:`mt-2 text-sm text-[var(--oke-muted)]`,children:`No install command — turn off by removing the code line, not from this UI.`})]})]})}function w(e){return(0,x.jsxs)(`li`,{children:[(0,x.jsxs)(`span`,{className:`text-[var(--oke-muted)]`,children:[e.label,`:`]}),` `,(0,x.jsx)(`span`,{className:`font-mono text-xs`,children:e.state}),(0,x.jsxs)(`span`,{className:`text-[var(--oke-muted)]`,children:[` — `,e.detail]})]})}function T(e){return(0,x.jsxs)(`fieldset`,{className:`flex flex-wrap items-center gap-2 text-xs`,children:[(0,x.jsx)(`legend`,{className:`sr-only`,children:`Origin`}),[[void 0,`All origins`],[`core`,`Core`],[`local`,`Local`],[`community`,`Community`]].map(([t,n])=>(0,x.jsxs)(`label`,{className:`inline-flex min-h-8 items-center gap-1`,children:[(0,x.jsx)(`input`,{type:`radio`,name:`plugins-origin`,checked:e.value===t,onChange:()=>e.onChange(t)}),n]},n))]})}function E(e){return(0,x.jsxs)(`fieldset`,{className:`flex flex-wrap items-center gap-2 text-xs`,children:[(0,x.jsx)(`legend`,{className:`sr-only`,children:`State`}),[[void 0,`All states`],[`on`,`On`],[`off`,`Off`]].map(([t,n])=>(0,x.jsxs)(`label`,{className:`inline-flex min-h-8 items-center gap-1`,children:[(0,x.jsx)(`input`,{type:`radio`,name:`plugins-state`,checked:e.value===t,onChange:()=>e.onChange(t)}),n]},n))]})}var D=t({default:()=>S});export{d as n,D as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as e,r as t,t as n}from"./rolldown-runtime-CNC7AqOf.js";import{B as r,C as i,D as a,I as o,J as s,Q as c,R as l,U as u,b as d,d as f,j as p,k as m,nt as h,o as g,q as _,tt as v,u as y,w as b,y as ee}from"./panel-access-Dd37LU2c.js";import{i as te}from"./panel-ai-CC7LR6-J.js";import{c as ne,l as x}from"./panel-architecture-B5b3iKCz.js";import{a as S,c as C,i as re,l as ie,n as ae,o as w,r as T,s as E}from"./panel-overview-Bd48d9km.js";function D(e){let t=new Map,n,r,i=e=>{e.next&&(e.prev?(e.prev.next=e.next,e.next.prev=e.prev,e.next=void 0,r&&(r.next=e,e.prev=r)):(e.next.prev=void 0,n=e.next,e.next=void 0,r&&(e.prev=r,r.next=e)),r=e)};return{get(e){let n=t.get(e);if(n)return i(n),n.value},set(a,o){if(t.size>=e&&n){let e=n;t.delete(e.key),e.next&&(n=e.next,e.next.prev=void 0),e===r&&(r=void 0)}let s=t.get(a);if(s)s.value=o,i(s);else{let e={key:a,value:o,prev:r};r&&(r.next=e),r=e,n||=e,t.set(a,e)}},clear(){t.clear(),n=void 0,r=void 0}}}var O=4,oe=5;function se(e){let t=e.indexOf(`{`);if(t===-1)return null;let n=e.indexOf(`}`,t);return n===-1||t+1>=e.length?null:[t,n]}function ce(e,t,n=new Uint16Array(6)){let r=e.indexOf(`/`,t),i=r===-1?e.length:r,a=e.substring(t,i);if(!a||!a.includes(`$`))return n[0]=0,n[1]=t,n[2]=t,n[3]=i,n[4]=i,n[5]=i,n;if(a===`$`){let r=e.length;return n[0]=2,n[1]=t,n[2]=t,n[3]=r,n[4]=r,n[5]=r,n}if(a.charCodeAt(0)===36)return n[0]=1,n[1]=t,n[2]=t+1,n[3]=i,n[4]=i,n[5]=i,n;let o=se(a);if(o){let[r,s]=o,c=a.charCodeAt(r+1);if(c===45){if(r+2<a.length&&a.charCodeAt(r+2)===36){let e=r+3,a=s;if(e<a)return n[0]=3,n[1]=t+r,n[2]=t+e,n[3]=t+a,n[4]=t+s+1,n[5]=i,n}}else if(c===36){let a=r+1,o=r+2;return o===s?(n[0]=2,n[1]=t+r,n[2]=t+a,n[3]=t+o,n[4]=t+s+1,n[5]=e.length,n):(n[0]=1,n[1]=t+r,n[2]=t+o,n[3]=t+s,n[4]=t+s+1,n[5]=i,n)}}return n[0]=0,n[1]=t,n[2]=t,n[3]=i,n[4]=i,n[5]=i,n}function k(e,t,n,r,i,a,o){o?.(n);let s=r;{let r=n.fullPath??n.from,o=r.length,c=n.options?.caseSensitive??e,l=n.options?.params?.parse??n.options?.parseParams;for(;s<o;){let e=ce(r,s,t),o,u=s,d=e[5];switch(s=d+1,a++,e[0]){case 0:{let t=r.substring(e[2],e[3]);if(c){let e=i.static?.get(t);if(e)o=e;else{i.static??=new Map;let e=j(n.fullPath??n.from);e.parent=i,e.depth=a,o=e,i.static.set(t,e)}}else{let e=t.toLowerCase(),r=i.staticInsensitive?.get(e);if(r)o=r;else{i.staticInsensitive??=new Map;let t=j(n.fullPath??n.from);t.parent=i,t.depth=a,o=t,i.staticInsensitive.set(e,t)}}break}case 1:{let t=r.substring(u,e[1]),s=r.substring(e[4],d),f=c&&!!(t||s),p=t?f?t:t.toLowerCase():void 0,m=s?f?s:s.toLowerCase():void 0,h=!l&&i.dynamic?.find(e=>!e.parse&&e.caseSensitive===f&&e.prefix===p&&e.suffix===m);if(h)o=h;else{let e=ue(1,n.fullPath??n.from,f,p,m);o=e,e.depth=a,e.parent=i,i.dynamic??=[],i.dynamic.push(e)}break}case 3:{let t=r.substring(u,e[1]),s=r.substring(e[4],d),f=c&&!!(t||s),p=t?f?t:t.toLowerCase():void 0,m=s?f?s:s.toLowerCase():void 0,h=!l&&i.optional?.find(e=>!e.parse&&e.caseSensitive===f&&e.prefix===p&&e.suffix===m);if(h)o=h;else{let e=ue(3,n.fullPath??n.from,f,p,m);o=e,e.parent=i,e.depth=a,i.optional??=[],i.optional.push(e)}break}case 2:{let t=r.substring(u,e[1]),s=r.substring(e[4],d),l=c&&!!(t||s),f=t?l?t:t.toLowerCase():void 0,p=s?l?s:s.toLowerCase():void 0,m=ue(2,n.fullPath??n.from,l,f,p);o=m,m.parent=i,m.depth=a,i.wildcard??=[],i.wildcard.push(m)}}i=o}if(l&&n.children&&!n.isRoot&&n.id&&n.id.charCodeAt(n.id.lastIndexOf(`/`)+1)===95){let e=j(n.fullPath??n.from);e.kind=oe,e.parent=i,a++,e.depth=a,i.pathless??=[],i.pathless.push(e),i=e}let u=(n.path||!n.children)&&!n.isRoot;if(u&&r.endsWith(`/`)){let e=j(n.fullPath??n.from);e.kind=O,e.parent=i,a++,e.depth=a,i.index=e,i=e}i.parse=l??null,i.priority=n.options?.params?.priority??0,u&&!i.route&&(i.route=n,i.fullPath=n.fullPath??n.from)}if(n.children)for(let r of n.children)k(e,t,r,s,i,a,o)}function le(e,t){if(e.parse&&!t.parse)return-1;if(!e.parse&&t.parse)return 1;if(e.parse&&t.parse&&(e.priority||t.priority))return t.priority-e.priority;if(e.prefix&&t.prefix&&e.prefix!==t.prefix){if(e.prefix.startsWith(t.prefix))return-1;if(t.prefix.startsWith(e.prefix))return 1}if(e.suffix&&t.suffix&&e.suffix!==t.suffix){if(e.suffix.endsWith(t.suffix))return-1;if(t.suffix.endsWith(e.suffix))return 1}return e.prefix&&!t.prefix?-1:!e.prefix&&t.prefix?1:e.suffix&&!t.suffix?-1:!e.suffix&&t.suffix?1:e.caseSensitive&&!t.caseSensitive?-1:!e.caseSensitive&&t.caseSensitive?1:0}function A(e){if(e.pathless)for(let t of e.pathless)A(t);if(e.static)for(let t of e.static.values())A(t);if(e.staticInsensitive)for(let t of e.staticInsensitive.values())A(t);if(e.dynamic?.length){e.dynamic.sort(le);for(let t of e.dynamic)A(t)}if(e.optional?.length){e.optional.sort(le);for(let t of e.optional)A(t)}if(e.wildcard?.length){e.wildcard.sort(le);for(let t of e.wildcard)A(t)}}function j(e){return{kind:0,depth:0,pathless:null,index:null,static:null,staticInsensitive:null,dynamic:null,optional:null,wildcard:null,route:null,fullPath:e,parent:null,parse:null,priority:0}}function ue(e,t,n,r,i){return{kind:e,depth:0,pathless:null,index:null,static:null,staticInsensitive:null,dynamic:null,optional:null,wildcard:null,route:null,fullPath:t,parent:null,parse:null,priority:0,caseSensitive:n,prefix:r,suffix:i}}function de(e,t){let n=j(`/`),r=new Uint16Array(6);for(let t of e)k(!1,r,t,1,n,0);A(n),t.masksTree=n,t.flatCache=D(1e3)}function fe(e,t){e||=`/`;let n=t.flatCache.get(e);if(n)return n;let r=F(e,t.masksTree);return t.flatCache.set(e,r),r}function pe(e,t,n,r,i){e||=`/`,r||=`/`;let a=t?`case\0${e}`:e,o=i.singleCache.get(a);return o||(o=j(`/`),k(t,new Uint16Array(6),{from:e},1,o,0),i.singleCache.set(a,o)),F(r,o,n)}function M(e,t,n=!1){let r=n?e:`nofuzz\0${e}`,i=t.matchCache.get(r);if(i!==void 0)return i;e||=`/`;let a;try{a=F(e,t.segmentTree,n)}catch(e){if(e instanceof URIError)a=null;else throw e}return a&&(a.branch=L(a.route)),t.matchCache.set(r,a),a}function N(e){return e===`/`?e:e.replace(/\/{1,}$/,``)}function P(e,t=!1,n){let r=j(e.fullPath),i=new Uint16Array(6),a={},o={},s=0;return k(t,i,e,1,r,0,e=>{if(n?.(e,s),e.id in a&&p(),a[e.id]=e,s!==0&&e.path){let t=N(e.fullPath);(!o[t]||e.fullPath.endsWith(`/`))&&(o[t]=e)}s++}),A(r),{processedTree:{segmentTree:r,singleCache:D(1e3),matchCache:D(1e3),flatCache:null,masksTree:null},routesById:a,routesByPath:o}}function F(e,t,n=!1){let r=e.split(`/`),i=z(e,r,t,n);if(!i)return null;let[a]=I(e,r,i);return{route:i.node.route,rawParams:a}}function I(e,t,n){let r=R(n.node),i=null,a=Object.create(null),o=n.extract?.part??0,s=n.extract?.node??0,c=n.extract?.path??0,l=n.extract?.segment??0;for(;s<r.length;o++,s++,c++,l++){let u=r[s];if(u.kind===O)break;if(u.kind===oe){l--,o--,c--;continue}let d=t[o],f=c;if(d&&(c+=d.length),u.kind===1){i??=n.node.fullPath.split(`/`);let e=i[l],t=u.prefix?.length??0;if(e.charCodeAt(t)===123){let n=u.suffix?.length??0,r=e.substring(t+2,e.length-n-1),i=d.substring(t,d.length-n);a[r]=decodeURIComponent(i)}else{let t=e.substring(1);a[t]=decodeURIComponent(d)}}else if(u.kind===3){if(n.skipped&1<<s){o--,c=f-1;continue}i??=n.node.fullPath.split(`/`);let e=i[l],t=u.prefix?.length??0,r=u.suffix?.length??0,p=e.substring(t+3,e.length-r-1),m=u.suffix||u.prefix?d.substring(t,d.length-r):d;m&&(a[p]=decodeURIComponent(m))}else if(u.kind===2){let t=u,n=e.substring(f+(t.prefix?.length??0),e.length-(t.suffix?.length??0)),r=decodeURIComponent(n);a[`*`]=r,a._splat=r;break}}return n.rawParams&&Object.assign(a,n.rawParams),[a,{part:o,node:s,path:c,segment:l}]}function L(e){let t=[e];for(;e.parentRoute;)e=e.parentRoute,t.push(e);return t.reverse(),t}function R(e){let t=Array(e.depth+1);do t[e.depth]=e,e=e.parent;while(e);return t}function z(e,t,n,r){if(e===`/`&&n.index)return{node:n.index,skipped:0};let i=!u(t),a=i&&e!==`/`,o=t.length-+!!i,s=[{node:n,index:1,skipped:0,depth:1,statics:0,dynamics:0,optionals:0}],c=null,l=null;for(;s.length;){let n=s.pop(),{node:i,index:u,skipped:d,depth:f,statics:p,dynamics:m,optionals:h}=n,{extract:g,rawParams:_}=n;if(i.kind===2&&i.route&&!U(l,n))continue;if(i.parse){if(!H(e,t,n))continue;_=n.rawParams,g=n.extract}r&&i.route&&i.kind!==O&&U(c,n)&&(c=n);let v=u===o;if(v&&(i.route&&(!a||i.kind===O||i.kind===2)&&U(l,n)&&(l=n),!i.optional&&!i.wildcard&&!i.index&&!i.pathless))continue;let y=v?void 0:t[u],b;if(v&&i.index){let n={node:i.index,index:u,skipped:d,depth:f+1,statics:p,dynamics:m,optionals:h,extract:g,rawParams:_},r=!0;if(i.index.parse&&(H(e,t,n)||(r=!1)),r){if(!m&&!h&&!d&&V(p,o))return n;U(l,n)&&(l=n)}}if(i.wildcard)for(let e=i.wildcard.length-1;e>=0;e--){let n=i.wildcard[e],{prefix:r,suffix:a}=n;if(!(r&&(v||!(n.caseSensitive?y:b??=y.toLowerCase()).startsWith(r)))){if(a){if(v)continue;let e=t.slice(u).join(`/`).slice(-a.length);if((n.caseSensitive?e:e.toLowerCase())!==a)continue}s.push({node:n,index:o,skipped:d,depth:f+1,statics:p,dynamics:m,optionals:h,extract:g,rawParams:_})}}if(i.optional){let e=d|1<<f,t=f+1;for(let n=i.optional.length-1;n>=0;n--){let r=i.optional[n];s.push({node:r,index:u,skipped:e,depth:t,statics:p,dynamics:m,optionals:h,extract:g,rawParams:_})}if(!v)for(let e=i.optional.length-1;e>=0;e--){let n=i.optional[e],{prefix:r,suffix:a}=n;if(r||a){let e=n.caseSensitive?y:b??=y.toLowerCase();if(r&&!e.startsWith(r)||a&&!e.endsWith(a))continue}s.push({node:n,index:u+1,skipped:d,depth:t,statics:p,dynamics:m,optionals:h+B(o,u),extract:g,rawParams:_})}}if(!v&&i.dynamic&&y)for(let e=i.dynamic.length-1;e>=0;e--){let t=i.dynamic[e],{prefix:n,suffix:r}=t;if(n||r){let e=t.caseSensitive?y:b??=y.toLowerCase();if(n&&!e.startsWith(n)||r&&!e.endsWith(r))continue}s.push({node:t,index:u+1,skipped:d,depth:f+1,statics:p,dynamics:m+B(o,u),optionals:h,extract:g,rawParams:_})}if(!v&&i.staticInsensitive){let e=i.staticInsensitive.get(b??=y.toLowerCase());e&&s.push({node:e,index:u+1,skipped:d,depth:f+1,statics:p+B(o,u),dynamics:m,optionals:h,extract:g,rawParams:_})}if(!v&&i.static){let e=i.static.get(y);e&&s.push({node:e,index:u+1,skipped:d,depth:f+1,statics:p+B(o,u),dynamics:m,optionals:h,extract:g,rawParams:_})}if(i.pathless){let e=f+1;for(let t=i.pathless.length-1;t>=0;t--){let n=i.pathless[t];s.push({node:n,index:u,skipped:d,depth:e,statics:p,dynamics:m,optionals:h,extract:g,rawParams:_})}}}if(l)return l;if(r&&c){let n=c.index;for(let e=0;e<c.index;e++)n+=t[e].length;let r=n===e.length?`/`:e.slice(n);return c.rawParams??=Object.create(null),c.rawParams[`**`]=decodeURIComponent(r),c}return null}function B(e,t){return 2**(e-t-1)}function V(e,t){return e===2**(t-1)-1}function H(e,t,n){let r,i;try{[r,i]=I(e,t,n)}catch{return null}if(n.rawParams=r,n.extract=i,!n.node.parse)return!0;try{if(n.node.parse(r)===!1)return null}catch{}return!0}function U(e,t){return!e||t.statics>e.statics||t.statics===e.statics&&(t.dynamics>e.dynamics||t.dynamics===e.dynamics&&(t.optionals>e.optionals||t.optionals===e.optionals&&((t.node.kind===O)>(e.node.kind===O)||t.node.kind===O==(e.node.kind===O)&&t.depth>e.depth)))}function me(e){return W(e.filter(e=>e!==void 0).join(`/`))}function W(e){return e.replace(/\/{2,}/g,`/`)}function G(e){return e===`/`?e:e.replace(/^\/{1,}/,``)}function K(e){let t=e.length;return t>1&&e[t-1]===`/`?e.replace(/\/{1,}$/,``):e}function he(e){return K(G(e))}function ge(e,t){return e?.endsWith(`/`)&&e!==`/`&&e!==`${t}/`?e.slice(0,-1):e}function _e(e,t,n){return ge(e,n)===ge(t,n)}function q({base:e,to:t,trailingSlash:n=`never`,cache:r}){let i=t.startsWith(`/`),a=!i&&t===`.`,o;if(r){o=i?t:a?e:e+`\0`+t;let n=r.get(o);if(n)return n}let s;if(a)s=e.split(`/`);else if(i)s=t.split(`/`);else{for(s=e.split(`/`);s.length>1&&u(s)===``;)s.pop();let n=t.split(`/`);for(let e=0,t=n.length;e<t;e++){let r=n[e];r===``?e?e===t-1&&s.push(r):s=[r]:r===`..`?s.pop():r===`.`||s.push(r)}}s.length>1&&(u(s)===``?n===`never`&&s.pop():n===`always`&&s.push(``));let c=W(s.join(`/`))||`/`;return o&&r&&r.set(o,c),c}function ve(e){let t=new Map(e.map(e=>[encodeURIComponent(e),e])),n=Array.from(t.keys()).map(e=>e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)).join(`|`),r=new RegExp(n,`g`);return e=>e.replace(r,e=>t.get(e)??e)}function J(e,t,n){let r=t[e];return typeof r==`string`?e===`_splat`?/^[a-zA-Z0-9\-._~!/]*$/.test(r)?r:r.split(`/`).map(e=>be(e,n)).join(`/`):be(r,n):r}function ye({path:e,params:t,decoder:n,...r}){let i=!1,a=Object.create(null);if(!e||e===`/`)return{interpolatedPath:`/`,usedParams:a,isMissingParams:i};if(!e.includes(`$`))return{interpolatedPath:e,usedParams:a,isMissingParams:i};let o=e.length,s=0,c,l=``;for(;s<o;){let r=s;c=ce(e,r,c);let o=c[5];if(s=o+1,r===o)continue;let u=c[0];if(u===0){l+=`/`+e.substring(r,o);continue}if(u===2){let s=t._splat;a._splat=s,a[`*`]=s;let u=e.substring(r,c[1]),d=e.substring(c[4],o);if(!s){i=!0,(u||d)&&(l+=`/`+u+d);continue}let f=J(`_splat`,t,n);l+=`/`+u+f+d;continue}if(u===1){let s=e.substring(c[2],c[3]);!i&&!(s in t)&&(i=!0),a[s]=t[s];let u=e.substring(r,c[1]),d=e.substring(c[4],o),f=J(s,t,n)??`undefined`;l+=`/`+u+f+d;continue}if(u===3){let i=e.substring(c[2],c[3]),s=t[i];if(s==null)continue;a[i]=s;let u=e.substring(r,c[1]),d=e.substring(c[4],o),f=J(i,t,n)??``;l+=`/`+u+f+d;continue}}return e.endsWith(`/`)&&(l+=`/`),{usedParams:a,interpolatedPath:l||`/`,isMissingParams:i}}function be(e,t){let n=encodeURIComponent(e);return t?.(n)??n}var xe=`Error preloading route! ☝️`,Y=e(h(),1),X=v();function Se({children:e,fallback:t=null}){return Ce()?(0,X.jsx)(Y.Fragment,{children:e}):(0,X.jsx)(Y.Fragment,{children:t})}function Ce(){return Y.useSyncExternalStore(we,()=>!0,()=>!1)}function we(){return()=>{}}var Te=n((e=>{var t=h();function n(e){var t=`https://react.dev/errors/`+e;if(1<arguments.length){t+=`?args[]=`+encodeURIComponent(arguments[1]);for(var n=2;n<arguments.length;n++)t+=`&args[]=`+encodeURIComponent(arguments[n])}return`Minified React error #`+e+`; visit `+t+` for the full message or use the non-minified dev environment for full errors and additional helpful warnings.`}function r(){}var i={d:{f:r,r:function(){throw Error(n(522))},D:r,C:r,L:r,m:r,X:r,S:r,M:r},p:0,findDOMNode:null},a=Symbol.for(`react.portal`);function o(e,t,n){var r=3<arguments.length&&arguments[3]!==void 0?arguments[3]:null;return{$$typeof:a,key:r==null?null:``+r,children:e,containerInfo:t,implementation:n}}var s=t.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;function c(e,t){if(e===`font`)return``;if(typeof t==`string`)return t===`use-credentials`?t:``}e.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=i,e.createPortal=function(e,t){var r=2<arguments.length&&arguments[2]!==void 0?arguments[2]:null;if(!t||t.nodeType!==1&&t.nodeType!==9&&t.nodeType!==11)throw Error(n(299));return o(e,t,null,r)},e.flushSync=function(e){var t=s.T,n=i.p;try{if(s.T=null,i.p=2,e)return e()}finally{s.T=t,i.p=n,i.d.f()}},e.preconnect=function(e,t){typeof e==`string`&&(t?(t=t.crossOrigin,t=typeof t==`string`?t===`use-credentials`?t:``:void 0):t=null,i.d.C(e,t))},e.prefetchDNS=function(e){typeof e==`string`&&i.d.D(e)},e.preinit=function(e,t){if(typeof e==`string`&&t&&typeof t.as==`string`){var n=t.as,r=c(n,t.crossOrigin),a=typeof t.integrity==`string`?t.integrity:void 0,o=typeof t.fetchPriority==`string`?t.fetchPriority:void 0;n===`style`?i.d.S(e,typeof t.precedence==`string`?t.precedence:void 0,{crossOrigin:r,integrity:a,fetchPriority:o}):n===`script`&&i.d.X(e,{crossOrigin:r,integrity:a,fetchPriority:o,nonce:typeof t.nonce==`string`?t.nonce:void 0})}},e.preinitModule=function(e,t){if(typeof e==`string`)if(typeof t==`object`&&t){if(t.as==null||t.as===`script`){var n=c(t.as,t.crossOrigin);i.d.M(e,{crossOrigin:n,integrity:typeof t.integrity==`string`?t.integrity:void 0,nonce:typeof t.nonce==`string`?t.nonce:void 0})}}else t??i.d.M(e)},e.preload=function(e,t){if(typeof e==`string`&&typeof t==`object`&&t&&typeof t.as==`string`){var n=t.as,r=c(n,t.crossOrigin);i.d.L(e,n,{crossOrigin:r,integrity:typeof t.integrity==`string`?t.integrity:void 0,nonce:typeof t.nonce==`string`?t.nonce:void 0,type:typeof t.type==`string`?t.type:void 0,fetchPriority:typeof t.fetchPriority==`string`?t.fetchPriority:void 0,referrerPolicy:typeof t.referrerPolicy==`string`?t.referrerPolicy:void 0,imageSrcSet:typeof t.imageSrcSet==`string`?t.imageSrcSet:void 0,imageSizes:typeof t.imageSizes==`string`?t.imageSizes:void 0,media:typeof t.media==`string`?t.media:void 0})}},e.preloadModule=function(e,t){if(typeof e==`string`)if(t){var n=c(t.as,t.crossOrigin);i.d.m(e,{as:typeof t.as==`string`&&t.as!==`script`?t.as:void 0,crossOrigin:n,integrity:typeof t.integrity==`string`?t.integrity:void 0})}else i.d.m(e)},e.requestFormReset=function(e){i.d.r(e)},e.unstable_batchedUpdates=function(e,t){return e(t)},e.useFormState=function(e,t,n){return s.H.useFormState(e,t,n)},e.useFormStatus=function(){return s.H.useHostTransitionStatus()},e.version=`19.2.8`})),Ee=n(((e,t)=>{function n(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>`u`||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!=`function`))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(n)}catch(e){console.error(e)}}n(),t.exports=Te()})),De=e(Ee(),1);function Oe(e,t){let n=m(),i=_(t),{activeProps:c,inactiveProps:u,activeOptions:d,to:f,preload:p,preloadDelay:h,preloadIntentProximity:g,hashScrollIntoView:v,replace:y,startTransition:b,resetScroll:ee,viewTransition:te,children:ne,target:x,disabled:S,style:C,className:re,onClick:ie,onBlur:ae,onFocus:w,onMouseEnter:T,onMouseLeave:E,onTouchStart:D,ignoreBlocker:O,params:oe,search:se,hash:ce,state:k,mask:le,reloadDocument:A,unsafeRelative:j,from:ue,_fromLocation:de,...fe}=e,pe=Ce(),M=Y.useMemo(()=>e,[n,e.from,e._fromLocation,e.hash,e.to,e.search,e.params,e.state,e.mask,e.unsafeRelative]),N=a(n.stores.location,e=>e,(e,t)=>e.href===t.href),P=Y.useMemo(()=>{let e={_fromLocation:N,...M};return n.buildLocation(e)},[n,N,M]),F=P.maskedLocation?P.maskedLocation.publicHref:P.publicHref,I=P.maskedLocation?P.maskedLocation.external:P.external,L=Y.useMemo(()=>Fe(F,I,n.history,S),[S,I,F,n.history]),R=Y.useMemo(()=>{if(L?.external)return r(L.href,n.protocolAllowlist)?void 0:L.href;if(!Ie(f)&&!(typeof f!=`string`||f.indexOf(`:`)===-1))try{return new URL(f),r(f,n.protocolAllowlist)?void 0:f}catch{}},[f,L,n.protocolAllowlist]),z=Y.useMemo(()=>{if(R)return!1;if(d?.exact){if(!_e(N.pathname,P.pathname,n.basepath))return!1}else{let e=ge(N.pathname,n.basepath),t=ge(P.pathname,n.basepath);if(!(e.startsWith(t)&&(e.length===t.length||e[t.length]===`/`)))return!1}return(d?.includeSearch??!0)&&!o(N.search,P.search,{partial:!d?.exact,ignoreUndefined:!d?.explicitUndefined})?!1:!d?.includeHash||pe&&N.hash===P.hash},[d?.exact,d?.explicitUndefined,d?.includeHash,d?.includeSearch,N,R,pe,P.hash,P.pathname,P.search,n.basepath]),B=z?l(c,{})??Ae:ke,V=z?ke:l(u,{})??ke,H=[re,B.className,V.className].filter(Boolean).join(` `),U=(C||B.style||V.style)&&{...C,...B.style,...V.style},[me,W]=Y.useState(!1),G=Y.useRef(!1),K=e.reloadDocument||R?!1:p??n.options.defaultPreload,he=h??n.options.defaultPreloadDelay??0,q=Y.useCallback(()=>{n.preloadRoute({...M,_builtLocation:P}).catch(e=>{console.warn(e),console.warn(xe)})},[n,M,P]);s(i,Y.useCallback(e=>{e?.isIntersecting&&q()},[q]),Pe,{disabled:!!S||K!==`viewport`}),Y.useEffect(()=>{G.current||!S&&K===`render`&&(q(),G.current=!0)},[S,q,K]);let ve=e=>{let t=e.currentTarget.getAttribute(`target`),r=x===void 0?t:x;if(!S&&!Re(e)&&!e.defaultPrevented&&(!r||r===`_self`)&&e.button===0){e.preventDefault(),(0,De.flushSync)(()=>{W(!0)});let t=n.subscribe(`onResolved`,()=>{t(),W(!1)});n.navigate({...M,replace:y,resetScroll:ee,hashScrollIntoView:v,startTransition:b,viewTransition:te,ignoreBlocker:O})}};if(R)return{...fe,ref:i,href:R,...ne&&{children:ne},...x&&{target:x},...S&&{disabled:S},...C&&{style:C},...re&&{className:re},...ie&&{onClick:ie},...ae&&{onBlur:ae},...w&&{onFocus:w},...T&&{onMouseEnter:T},...E&&{onMouseLeave:E},...D&&{onTouchStart:D}};let J=e=>{if(S||K!==`intent`)return;if(!he){q();return}let t=e.currentTarget;if(Z.has(t))return;let n=setTimeout(()=>{Z.delete(t),q()},he);Z.set(t,n)},ye=e=>{S||K!==`intent`||q()},be=e=>{if(S||!K||!he)return;let t=e.currentTarget,n=Z.get(t);n&&(clearTimeout(n),Z.delete(t))};return{...fe,...B,...V,href:L?.href,ref:i,onClick:Q([ie,ve]),onBlur:Q([ae,be]),onFocus:Q([w,J]),onMouseEnter:Q([T,J]),onMouseLeave:Q([E,be]),onTouchStart:Q([D,ye]),disabled:!!S,target:x,...U&&{style:U},...H&&{className:H},...S&&je,...z&&Me,...pe&&me&&Ne}}var ke={},Ae={className:`active`},je={role:`link`,"aria-disabled":!0},Me={"data-status":`active`,"aria-current":`page`},Ne={"data-transitioning":`transitioning`},Z=new WeakMap,Pe={rootMargin:`100px`},Q=e=>t=>{for(let n of e)if(n){if(t.defaultPrevented)return;n(t)}};function Fe(e,t,n,r){if(!r)return t?{href:e,external:!0}:{href:n.createHref(e)||`/`,external:!1}}function Ie(e){if(typeof e!=`string`)return!1;let t=e.charCodeAt(0);return t===47?e.charCodeAt(1)!==47:t===46}var Le=Y.forwardRef((e,t)=>{let{_asChild:n,...r}=e,{type:i,...a}=Oe(r,t),o=typeof r.children==`function`?r.children({isActive:a[`data-status`]===`active`}):r.children;if(!n){let{disabled:e,...t}=a;return Y.createElement(`a`,t,o)}return Y.createElement(n,a,o)});function Re(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}var ze=ee({where:d().optional(),group:d().optional(),run:d().optional(),durMin:te().optional(),durMax:te().optional()});function Be(e){let t=ze.safeParse(e??{});return t.success?t.data:ze.parse({})}function Ve(e){let t={};return e.where&&(t.where=e.where),e.group&&(t.group=e.group),e.run&&(t.run=e.run),e.durMin!==void 0&&(t.durMin=e.durMin),e.durMax!==void 0&&(t.durMax=e.durMax),t}function He(e){return w(e.where)}function Ue(e){return e.durMin===void 0||e.durMax===void 0?null:{minMs:Math.min(e.durMin,e.durMax),maxMs:Math.max(e.durMin,e.durMax)}}function We(e,t){let n=C(t);return{...e,where:n||void 0}}function Ge(e,t){return{...e,group:t??void 0}}function Ke(e,t){return{...e,run:t}}function qe(e){return{...e,run:void 0}}function Je(e,t){return t?{...e,durMin:t.minMs,durMax:t.maxMs}:{...e,durMin:void 0,durMax:void 0}}function Ye(e,t){let n=e.filter(t.select),r=e.filter(e=>!t.select(e));if(n.length===0||r.length===0)return[];let i=new Set(t.ignore??[`duration_ms`,`flow`]),a=t.minLift??.15,o=t.limit??10,s=new Set;for(let t of e)for(let e of Object.keys(t.dimensions))i.has(e)||s.add(e);let c=[];for(let e of s){let t=Xe(n,e),i=Xe(r,e),o=new Set([...t.keys(),...i.keys()]);for(let s of o){let o=(t.get(s)??0)/n.length,l=(i.get(s)??0)/r.length,u=o-l;u<a||c.push({dimension:e,value:s,outlierShare:o,baselineShare:l,lift:u,explanation:Ze(e,s,o,l)})}}return c.sort((e,t)=>t.lift-e.lift),c.slice(0,o)}function Xe(e,t){let n=new Map;for(let r of e){let e=r.dimensions[t];if(e==null)continue;let i=String(e);n.set(i,(n.get(i)??0)+1)}return n}function Ze(e,t,n,r){return`${Math.round(n*100)}% ${e}=${t} vs ${Math.round(r*100)}%`}function Qe(e,t){return Ye(e.map(x),{select:e=>e.durationMs>=t.minMs&&e.durationMs<=t.maxMs,minLift:.15,ignore:[`duration_ms`,`duration`,`flow`]})}function $e(e,t=20){if(e.length===0||t<1)return[];let n=1/0,r=-1/0;for(let t of e)n=Math.min(n,t.durationMs),r=Math.max(r,t.durationMs);if(!Number.isFinite(n)||!Number.isFinite(r))return[];if(n===r)return[{minMs:n,maxMs:r+1,count:e.length}];let i=(r-n)/t,a=[];for(let e=0;e<t;e++){let o=n+e*i,s=e===t-1?r+2**-52:n+(e+1)*i;a.push({minMs:o,maxMs:s,count:0})}for(let r of e){let e=Math.floor((r.durationMs-n)/i);e<0&&(e=0),e>=t&&(e=t-1);let o=a[e];a[e]={...o,count:o.count+1}}return a}function et(e,t){return e<=t?{minMs:e,maxMs:t}:{minMs:t,maxMs:e}}function $(e){return Number.isFinite(e)?e>=6e4?`${(e/6e4).toFixed(e%6e4==0?0:1)}m`:e>=1e3?`${(e/1e3).toFixed(e%1e3==0?0:2)}s`:`${Math.round(e)}ms`:`—`}function tt(e,t){let n=new Map(e.map(e=>[e.id,e])),r=n.get(t);if(!r)return t;let i=new Set;for(;r.parentId&&n.has(r.parentId)&&!i.has(r.id);)i.add(r.id),r=n.get(r.parentId);return r.id}function nt(e,t){let n=new Map(e.map(e=>[e.id,e]));if(!n.has(t))return 0;let r=new Map;for(let t of e){if(!t.parentId||!n.has(t.parentId))continue;let e=r.get(t.parentId)??[];e.push(t.id),r.set(t.parentId,e)}let i=0,a=[t],o=new Set;for(;a.length>0;){let e=a.pop();if(!o.has(e)){o.add(e),i+=1;for(let t of r.get(e)??[])a.push(t)}}return i}function rt(e,t){return nt(e,tt(e,t))>1}function it(){let e=b({from:`/runs`}),t=i({from:`/runs`}),n=e=>{t({search:Ve(e),replace:!0})},r=c({queryKey:[`console.runs.list`],queryFn:async()=>{let e=await f.runsList();if(e.error)throw Error(e.error.code);return e.data.runs.map(ne)},refetchInterval:5e3}),a=r.data??[],o=He(e),s=(0,Y.useMemo)(()=>S(a,o),[a,o]),l=Ue(e),u=(0,Y.useMemo)(()=>$e(s),[s]),d=Math.max(1,...u.map(e=>e.count)),p=(0,Y.useMemo)(()=>e.group?T(s,e.group):[],[s,e.group]),m=(0,Y.useMemo)(()=>l?Qe(s,l):[],[s,l]),h=(0,Y.useMemo)(()=>ae(a),[a]),_=a.find(t=>t.id===e.run);return(0,X.jsxs)(`div`,{className:`flex h-full min-h-0 flex-col`,children:[(0,X.jsxs)(`header`,{className:`flex shrink-0 flex-wrap items-end gap-4 border-b border-[var(--oke-line)] px-6 py-4`,children:[(0,X.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[(0,X.jsx)(`p`,{className:`text-xs uppercase tracking-[0.2em] text-[var(--oke-muted)]`,children:`Runs`}),(0,X.jsx)(`h1`,{className:`text-xl font-semibold tracking-tight`,children:`Population analysis`}),(0,X.jsxs)(`p`,{className:`text-xs text-[var(--oke-muted)]`,children:[s.length,` of `,a.length,` runs · wide events, not log lines`]})]}),(0,X.jsx)(at,{search:e,dimensions:h,onChange:n}),(0,X.jsxs)(`label`,{className:`flex flex-col gap-1 text-sm`,children:[(0,X.jsx)(`span`,{className:`text-[var(--oke-muted)]`,children:`Group by`}),(0,X.jsxs)(`select`,{"aria-label":`Group by dimension`,className:`min-h-8 border border-[var(--oke-line)] bg-transparent px-2 text-sm`,value:e.group??``,onChange:t=>{let r=t.target.value;n(Ge(e,r||null))},children:[(0,X.jsx)(`option`,{value:``,children:`None`}),h.map(e=>(0,X.jsx)(`option`,{value:e,children:e},e))]})]})]}),(0,X.jsxs)(`div`,{className:`grid min-h-0 flex-1 grid-cols-1 lg:grid-cols-[minmax(0,1.2fr)_minmax(0,1fr)]`,children:[(0,X.jsxs)(`div`,{className:`min-h-0 overflow-auto border-r border-[var(--oke-line)] px-6 py-6`,children:[(0,X.jsxs)(`section`,{"aria-label":`Duration distribution`,className:`mb-8`,children:[(0,X.jsx)(`h2`,{className:`mb-2 text-sm font-medium`,children:`Duration distribution`}),(0,X.jsx)(`p`,{className:`mb-3 text-xs text-[var(--oke-muted)]`,children:`Range-select a region to explain outliers against the rest.`}),r.isLoading?(0,X.jsx)(`p`,{className:`text-sm text-[var(--oke-muted)]`,children:`Loading runs…`}):u.length===0?(0,X.jsx)(`p`,{className:`text-sm text-[var(--oke-muted)]`,children:`No runs match the current query.`}):(0,X.jsx)(ot,{buckets:u,maxBucket:d,range:l,onSelect:t=>n(Je(e,t))}),l?(0,X.jsxs)(`div`,{className:`mt-3 flex flex-wrap items-center gap-2`,children:[(0,X.jsxs)(`p`,{className:`text-xs text-[var(--oke-muted)]`,children:[`Selected `,$(l.minMs),` –`,` `,$(l.maxMs)]}),(0,X.jsx)(g,{type:`button`,variant:`ghost`,onClick:()=>n(Je(e,null)),children:`Clear selection`})]}):null]}),l?(0,X.jsxs)(`section`,{"aria-label":`Outlier explanation`,className:`mb-8`,children:[(0,X.jsx)(`h2`,{className:`mb-2 text-sm font-medium`,children:`Outlier explanation`}),m.length===0?(0,X.jsx)(`p`,{className:`text-sm text-[var(--oke-muted)]`,children:`No dimension separates this region strongly enough.`}):(0,X.jsx)(`ol`,{className:`flex list-decimal flex-col gap-1 pl-5 text-sm`,children:m.map(e=>(0,X.jsx)(`li`,{children:e.explanation},`${e.dimension}:${e.value}`))})]}):null,e.group?(0,X.jsxs)(`section`,{"aria-label":`Group aggregates`,className:`mb-8`,children:[(0,X.jsxs)(`h2`,{className:`mb-2 text-sm font-medium`,children:[`Group by `,e.group]}),(0,X.jsxs)(`table`,{className:`w-full border-collapse text-left text-sm`,children:[(0,X.jsx)(`thead`,{children:(0,X.jsxs)(`tr`,{className:`border-b border-[var(--oke-line)] text-[var(--oke-muted)]`,children:[(0,X.jsx)(`th`,{scope:`col`,className:`py-2 pr-3 font-medium`,children:e.group}),(0,X.jsx)(`th`,{scope:`col`,className:`py-2 pr-3 font-medium`,children:`Count`}),(0,X.jsx)(`th`,{scope:`col`,className:`py-2 pr-3 font-medium`,children:`Avg`}),(0,X.jsx)(`th`,{scope:`col`,className:`py-2 pr-3 font-medium`,children:`p50`}),(0,X.jsx)(`th`,{scope:`col`,className:`py-2 pr-3 font-medium`,children:`p99`}),(0,X.jsx)(`th`,{scope:`col`,className:`py-2 font-medium`,children:`Cost`})]})}),(0,X.jsx)(`tbody`,{className:`divide-y divide-[var(--oke-line)]`,children:p.map(e=>(0,X.jsxs)(`tr`,{children:[(0,X.jsx)(`td`,{className:`py-2 pr-3 font-mono text-xs`,children:e.key}),(0,X.jsx)(`td`,{className:`py-2 pr-3`,children:e.count}),(0,X.jsx)(`td`,{className:`py-2 pr-3`,children:$(e.avgDurationMs)}),(0,X.jsx)(`td`,{className:`py-2 pr-3`,children:$(e.p50DurationMs)}),(0,X.jsx)(`td`,{className:`py-2 pr-3`,children:$(e.p99DurationMs)}),(0,X.jsx)(`td`,{className:`py-2`,children:e.sumCost>0?`$${e.sumCost.toFixed(3)}`:`—`})]},e.key))})]})]}):null,(0,X.jsxs)(`section`,{"aria-label":`Run list`,children:[(0,X.jsx)(`h2`,{className:`mb-2 text-sm font-medium`,children:`Runs`}),s.length===0?(0,X.jsx)(`p`,{className:`text-sm text-[var(--oke-muted)]`,children:`No runs yet. Invoke a flow or widen the query.`}):(0,X.jsx)(`ul`,{className:`divide-y divide-[var(--oke-line)]`,children:s.slice(0,200).map(t=>{let r=t.id===e.run;return(0,X.jsx)(`li`,{children:(0,X.jsxs)(`button`,{type:`button`,"aria-pressed":r,className:y(`flex w-full min-h-10 items-center justify-between gap-3 px-2 py-2 text-left text-sm`,r?`bg-[color-mix(in_oklab,var(--oke-fg)_6%,transparent)]`:`hover:bg-[color-mix(in_oklab,var(--oke-fg)_3%,transparent)]`),onClick:()=>n(Ke(e,t.id)),children:[(0,X.jsx)(`span`,{className:`font-medium`,children:t.flow}),(0,X.jsxs)(`span`,{className:`flex items-center gap-3 font-mono text-xs text-[var(--oke-muted)]`,children:[(0,X.jsx)(`span`,{children:t.cache}),t.error?(0,X.jsx)(`span`,{role:`status`,className:`text-[var(--oke-danger)]`,children:t.error}):(0,X.jsx)(`span`,{children:$(t.durationMs)})]})]})},t.id)})})]})]}),(0,X.jsx)(`section`,{"aria-label":`Run detail`,className:`min-h-0 overflow-auto px-6 py-6`,"aria-live":`polite`,children:_?(0,X.jsx)(st,{run:_,allRuns:a,onClose:()=>n(qe(e))}):(0,X.jsx)(`p`,{className:`text-sm text-[var(--oke-muted)]`,children:`Select a run to see its flat dimension record.`})})]})]})}function at({search:e,dimensions:t,onChange:n}){let r=He(e),i=[...new Set([...re,...t])].sort(),[a,o]=(0,Y.useState)(`cache`),[s,c]=(0,Y.useState)(`=`),[l,u]=(0,Y.useState)(`miss`),[d,f]=(0,Y.useState)(e.where??``);return(0,Y.useEffect)(()=>{f(e.where??``)},[e.where]),(0,X.jsxs)(`div`,{className:`flex min-w-[16rem] flex-1 flex-col gap-2`,children:[(0,X.jsxs)(`div`,{className:`flex flex-wrap items-end gap-2`,children:[(0,X.jsxs)(`label`,{className:`flex flex-col gap-1 text-sm`,children:[(0,X.jsx)(`span`,{className:`text-[var(--oke-muted)]`,children:`Dimension`}),(0,X.jsx)(`select`,{"aria-label":`Query dimension`,className:`min-h-8 border border-[var(--oke-line)] bg-transparent px-2 text-sm`,value:a,onChange:e=>o(e.target.value),children:i.map(e=>(0,X.jsx)(`option`,{value:e,children:e},e))})]}),(0,X.jsxs)(`label`,{className:`flex flex-col gap-1 text-sm`,children:[(0,X.jsx)(`span`,{className:`text-[var(--oke-muted)]`,children:`Op`}),(0,X.jsx)(`select`,{"aria-label":`Query operator`,className:`min-h-8 border border-[var(--oke-line)] bg-transparent px-2 text-sm`,value:s,onChange:e=>c(e.target.value),children:[`=`,`!=`,`>`,`<`,`>=`,`<=`].map(e=>(0,X.jsx)(`option`,{value:e,children:e},e))})]}),(0,X.jsxs)(`label`,{className:`flex min-w-[8rem] flex-1 flex-col gap-1 text-sm`,children:[(0,X.jsx)(`span`,{className:`text-[var(--oke-muted)]`,children:`Value`}),(0,X.jsx)(`input`,{"aria-label":`Query value`,className:`min-h-8 border border-[var(--oke-line)] bg-transparent px-2 text-sm`,value:l,onChange:e=>u(e.target.value)})]}),(0,X.jsx)(g,{type:`button`,variant:`ghost`,onClick:()=>{let t=w(`${a} ${s} ${l}`).clauses[0];if(!t)return;let i=We(e,ie(r,t));f(i.where??``),n(i)},children:`Add`})]}),r.clauses.length>0?(0,X.jsx)(`ul`,{"aria-label":`Active query clauses`,className:`flex flex-wrap gap-2`,children:r.clauses.map(t=>(0,X.jsx)(`li`,{children:(0,X.jsxs)(`button`,{type:`button`,className:`min-h-8 border border-[var(--oke-line)] px-2 font-mono text-xs`,onClick:()=>{let i=We(e,E(r,t.dimension));f(i.where??``),n(i)},children:[t.dimension,` `,t.op,` `,String(t.value),` ×`]})},t.dimension))}):null,(0,X.jsxs)(`label`,{className:`flex flex-col gap-1 text-sm`,children:[(0,X.jsx)(`span`,{className:`text-[var(--oke-muted)]`,children:`Dimension query expression`}),(0,X.jsx)(`input`,{"aria-label":`Dimension query expression`,className:`min-h-8 border border-[var(--oke-line)] bg-transparent px-2 font-mono text-sm`,placeholder:`flow = X AND cache = miss AND duration > 1s`,value:d,onChange:e=>f(e.target.value),onBlur:()=>{n(We(e,w(d)))},onKeyDown:t=>{t.key===`Enter`&&n(We(e,w(d)))}})]})]})}function ot({buckets:e,maxBucket:t,range:n,onSelect:r}){let[i,a]=(0,Y.useState)(null);return(0,X.jsx)(`div`,{role:`group`,"aria-label":`Duration histogram`,className:`flex h-40 items-end gap-px border border-[var(--oke-line)] bg-[color-mix(in_oklab,var(--oke-fg)_3%,transparent)] p-2`,onMouseLeave:()=>a(null),children:e.map((e,o)=>{let s=n!==null&&e.minMs<=n.maxMs&&e.maxMs>=n.minMs,c=Math.max(4,e.count/t*100);return(0,X.jsx)(`button`,{type:`button`,title:`${$(e.minMs)}–${$(e.maxMs)}: ${e.count}`,"aria-label":`Duration ${$(e.minMs)} to ${$(e.maxMs)}, ${e.count} runs`,"aria-pressed":s,className:y(`min-h-2 min-w-2 flex-1`,s?`bg-[var(--oke-accent)]`:`bg-[color-mix(in_oklab,var(--oke-fg)_35%,transparent)]`),style:{height:`${c}%`},onMouseDown:()=>a(e.minMs),onMouseEnter:()=>{i!==null&&r(et(i,e.maxMs))},onMouseUp:()=>{r(et(i===null?e.minMs:i,e.maxMs)),a(null)},onClick:()=>{i===null&&r(et(e.minMs,e.maxMs))}},o)})})}function st({run:e,allRuns:t,onClose:n}){let r=rt(t,e.id),i=[{label:`flow`,value:e.flow},{label:`unit`,value:e.unit??`—`},{label:`trigger`,value:e.trigger},{label:`plane`,value:e.plane},{label:`tenant`,value:e.tenant??`—`},{label:`principal`,value:e.principal??`—`},{label:`gates`,value:e.gates.length?e.gates.join(`, `):`—`},{label:`cache`,value:e.cache},{label:`replica`,value:e.replica==null?`—`:`${e.replica}${e.replicaLagMs==null?``:` · lag ${e.replicaLagMs}ms`}`},{label:`cost`,value:e.cost==null?`—`:`$${e.cost.toFixed(4)}`},{label:`promptVersion`,value:e.promptVersion==null?`—`:String(e.promptVersion)},{label:`buildVersion`,value:e.buildVersion??`—`},{label:`duration`,value:$(e.durationMs)},{label:`error`,value:e.error??`—`}];return(0,X.jsxs)(`div`,{className:`flex flex-col gap-6`,children:[(0,X.jsxs)(`div`,{className:`flex flex-wrap items-start justify-between gap-3`,children:[(0,X.jsxs)(`div`,{children:[(0,X.jsx)(`h2`,{className:`text-lg font-semibold`,children:e.flow}),(0,X.jsx)(`p`,{className:`font-mono text-xs text-[var(--oke-muted)]`,children:e.id})]}),(0,X.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[r?(0,X.jsx)(Le,{to:`/traces`,search:{trace:tt(t,e.id),span:e.id},className:`inline-flex min-h-8 items-center border border-[var(--oke-line)] px-3 text-sm`,children:`Open in Traces`}):null,(0,X.jsx)(g,{type:`button`,variant:`ghost`,onClick:n,children:`Close`})]})]}),(0,X.jsx)(`dl`,{className:`grid grid-cols-[minmax(0,8rem)_1fr] gap-x-4 gap-y-2 text-sm`,children:i.map(t=>(0,X.jsxs)(`div`,{className:`contents`,children:[(0,X.jsx)(`dt`,{className:`text-[var(--oke-muted)]`,children:t.label}),(0,X.jsx)(`dd`,{className:y(`font-mono text-xs`,t.label===`error`&&e.error?`text-[var(--oke-danger)]`:``),children:t.value})]},t.label))}),(0,X.jsxs)(`div`,{children:[(0,X.jsx)(`h3`,{className:`mb-2 text-sm font-medium`,children:`Effects`}),e.effects.length===0?(0,X.jsx)(`p`,{className:`text-sm text-[var(--oke-muted)]`,children:`None`}):(0,X.jsx)(`ul`,{className:`divide-y divide-[var(--oke-line)] text-sm`,children:e.effects.map((e,t)=>(0,X.jsxs)(`li`,{className:`flex min-h-8 items-center justify-between gap-3 py-1`,children:[(0,X.jsxs)(`span`,{children:[e.kind,` `,(0,X.jsx)(`span`,{className:`font-mono text-xs`,children:e.resource})]}),(0,X.jsxs)(`span`,{className:`font-mono text-xs text-[var(--oke-muted)]`,children:[e.duration,`ms · `,e.reversibility]})]},`${e.kind}:${e.resource}:${t}`))})]}),(0,X.jsxs)(`details`,{className:`group`,children:[(0,X.jsxs)(`summary`,{className:`cursor-pointer text-sm font-medium`,children:[`fx.log (`,e.logs.length,`)`]}),e.logs.length===0?(0,X.jsx)(`p`,{className:`mt-2 text-sm text-[var(--oke-muted)]`,children:`No log lines`}):(0,X.jsx)(`ul`,{className:`mt-2 divide-y divide-[var(--oke-line)] font-mono text-xs`,children:e.logs.map((e,t)=>(0,X.jsxs)(`li`,{className:`py-2`,children:[(0,X.jsxs)(`span`,{className:`text-[var(--oke-muted)]`,children:[`[`,e.level,`]`]}),` `,e.message,e.data?(0,X.jsx)(`pre`,{className:`mt-1 whitespace-pre-wrap text-[var(--oke-muted)]`,children:JSON.stringify(e.data,null,2)}):null]},t))})]})]})}var ct=t({default:()=>it});export{pe as _,Se as a,D as b,ye as c,he as d,G as f,M as g,fe as h,Ee as i,me as l,L as m,Be as n,W as o,K as p,Le as r,ve as s,ct as t,q as u,de as v,P as y};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as e,r as t}from"./rolldown-runtime-CNC7AqOf.js";import{C as n,Q as r,Z as i,_ as a,a as o,b as s,d as c,et as ee,nt as l,o as u,r as d,tt as f,u as te,v as p,w as ne,x as m,y as h}from"./panel-access-Dd37LU2c.js";import{r as g}from"./panel-runs-BwsWqKeB.js";import{i as _}from"./panel-ai-CC7LR6-J.js";var v=h({q:s().optional(),signal:s().optional(),dlq:s().optional(),paused:m([a(),p(`true`),p(`false`)]).optional().transform(e=>e===void 0?void 0:e===!0||e===`true`),rate:_().min(1).max(1e3).optional(),sub:s().optional()});function y(e){let t=v.safeParse(e);return t.success?t.data:{}}function b(e){let t={};return e.q&&(t.q=e.q),e.signal&&(t.signal=e.signal),e.dlq&&(t.dlq=e.dlq),e.paused===!0&&(t.paused=!0),e.rate!==void 0&&e.rate!==10&&(t.rate=e.rate),e.sub&&(t.sub=e.sub),t}function x(e,t){return{...e,signal:t,dlq:void 0}}function re(e){let{signal:t,dlq:n,...r}=e;return r}function ie(e,t){return{...e,dlq:t}}function S(e){let{dlq:t,...n}=e;return n}var C=[`once`,`broadcast`,`live`],w={once:`Once — competing consumers`,broadcast:`Broadcast — every subscriber`,live:`Live — client stream`};function T(e,t=``){let n=t.trim().toLowerCase(),r=n?e.filter(e=>e.name.toLowerCase().includes(n)||e.delivery.includes(n)||e.producers.some(e=>e.flowId.toLowerCase().includes(n))||e.consumers.some(e=>e.flowId.toLowerCase().includes(n))):e;return C.map(e=>({delivery:e,label:w[e],signals:r.filter(t=>t.delivery===e)})).filter(e=>e.signals.length>0)}function E(e){return e===!0?{durable:!0,statement:`Consumer is durable — replay resumes at the failed journal step and side effects will not repeat.`}:e===!1?{durable:!1,statement:`Consumer is not durable — everything re-runs from the start, including side effects. Declare durable: true on the consumer so replay resumes at the failed journal step.`}:{durable:null,statement:`No consumer declared — replay has no target flow.`}}function D(e,t={production:!0}){return t.production&&e.consumers.some(e=>e.external)&&e.consumersDurable!==!0?{kind:`typed`,phrase:`REPLAY`,requireReason:!0}:{kind:`undo`,windowMs:d}}function O(e,t={production:!0}){return t.production&&(e.consumers.some(e=>e.external||!e.durable)||e.dead>0)?{kind:`typed`,phrase:`DISCARD`,requireReason:!0}:{kind:`undo`,windowMs:d}}function k(e){if(!e||typeof e!=`object`||Array.isArray(e))return[];let t=e;if(t.type!==`object`||!t.properties)return[];let n=new Set(Array.isArray(t.required)?t.required.filter(e=>typeof e==`string`):[]);return Object.entries(t.properties).map(([e,t])=>{let r=t??{},i=Array.isArray(r.enum)?r.enum.filter(e=>typeof e==`string`):void 0;return{key:e,type:r.type===`string`||r.type===`number`||r.type===`boolean`||r.type===`integer`?r.type:`unknown`,required:n.has(e),...i&&i.length>0?{enumValues:i}:{}}})}function A(e,t){let n=e&&typeof e==`object`&&!Array.isArray(e)?e:{},r={};for(let e of t){let t=n[e.key];t==null?r[e.key]=``:typeof t==`boolean`?r[e.key]=t?`true`:`false`:r[e.key]=String(t)}return t.length===0&&(r._raw=JSON.stringify(e??null,null,2)),r}function j(e,t){if(t.length===0)try{return JSON.parse(e._raw??`null`)}catch{return e._raw??null}let n={};for(let r of t){let t=e[r.key]??``;if(!(t===``&&!r.required))if(r.type===`boolean`)n[r.key]=t===`true`;else if(r.type===`number`||r.type===`integer`){let e=Number(t);n[r.key]=Number.isFinite(e)?e:t}else n[r.key]=t}return n}function M(e,t){return{...e,paused:t,autoPausedByScroll:t?e.autoPausedByScroll:!1}}function N(e){return e.paused?e:{...e,paused:!0,autoPausedByScroll:!0}}function P(e){return JSON.stringify(e,null,2)}function F(e=[]){return{paused:!1,autoPausedByScroll:!1,payloads:[...e]}}function I(e){return e.orphaned?{ok:!1,reason:`Orphaned signal — consumer shape unknown; dry-run refused rather than risk a side effect.`}:e.consumers.length===0?{ok:!1,reason:`No Manifest consumer — dry-run refused rather than invoke an unknown handler unsafely.`}:{ok:!0}}var L=e(l(),1),R=f();function z(){let e=ne({from:`/signals`}),t=n({from:`/signals`}),a=ee(),[s,l]=(0,L.useState)({}),[d,f]=(0,L.useState)(``),[p,m]=(0,L.useState)(``),[h,_]=(0,L.useState)(null),[v,y]=(0,L.useState)(()=>F()),[C,w]=(0,L.useState)(new Set),z=e=>{t({search:b(e),replace:!0})},B=e.rate??10,V=r({queryKey:[`console.signals.list`],queryFn:async()=>{let e=await c.signalsList();if(e.error)throw Error(e.error.code);return e.data.signals},refetchInterval:!e.paused&&5e3}),H=V.data??[],U=(0,L.useMemo)(()=>T(H,e.q??``),[H,e.q]),W=H.find(t=>t.name===e.signal),G=W?E(W.consumersDurable):null,K=W?.deadLetters.find(t=>t.id===e.dlq),q=W?k(W.schema):[],J=W?D(W,{production:!0}):null,Y=W?O(W,{production:!0}):null,X=W?I(W):null;(0,L.useEffect)(()=>{K&&(l(A(K.payload,q)),f(``),m(``))},[K?.id,W?.name]),(0,L.useEffect)(()=>{if(!(!W||W.delivery!==`live`)){if(e.paused){y(e=>M(e,!0));return}y(e=>({...M(e,!1),payloads:e.payloads.length===0?[...W.recentLive]:e.payloads}))}},[W?.name,W?.recentLive,W?.delivery,e.paused]);let Z=i({mutationFn:async()=>{if(!W)return;if(X&&!X.ok)throw Error(X.reason);let t=C.size>0?[...C]:W.deadLetters.map(e=>e.id),n=await c.signalsDryRunReplay({signal:W.name,messageIds:t,subscriberId:e.sub,ratePerSec:B});if(n.error)throw Error(n.error.code);return n.data},onSuccess:e=>{if(!e)return;let t=e.wouldHaveFired?.length>0?` · ${e.wouldHaveFired.length} external effect(s) stubbed`:``;_(`${e.succeeded} would succeed, ${e.failed} would still fail${t}`)},onError:e=>{_(e instanceof Error?e.message:`Dry-run refused`)}}),Q=i({mutationFn:async()=>{if(!W||!J)return;if(J.kind===`typed`){let e=o({typed:d,reason:p,phrase:J.phrase});if(e)throw Error(e.typed??e.reason??`confirm`)}let t=C.size>0?[...C]:K?[K.id]:W.deadLetters.map(e=>e.id),n=K&&q?{[K.id]:j(s,q)}:void 0,r=await c.signalsReplay({signal:W.name,messageIds:t,subscriberId:e.sub,ratePerSec:B,dryRun:!1,payloads:n,confirmation:J.kind===`typed`?d:void 0,reason:J.kind===`typed`?p:void 0});if(r.error)throw Error(r.error.code);return r.data},onSuccess:()=>{a.invalidateQueries({queryKey:[`console.signals.list`]}),_(null),w(new Set)}}),$=i({mutationFn:async()=>{if(!W||!Y)return;if(Y.kind===`typed`){let e=o({typed:d,reason:p,phrase:Y.phrase});if(e)throw Error(e.typed??e.reason??`confirm`)}let e=C.size>0?[...C]:K?[K.id]:W.deadLetters.map(e=>e.id),t=await c.signalsDiscard({signal:W.name,messageIds:e,confirmation:Y.kind===`typed`?d:void 0,reason:Y.kind===`typed`?p:void 0});if(t.error)throw Error(t.error.code);return t.data},onSuccess:()=>{a.invalidateQueries({queryKey:[`console.signals.list`]}),K&&z(S(e)),w(new Set)}});return(0,R.jsxs)(`div`,{className:`flex h-full min-h-0 flex-col`,children:[(0,R.jsxs)(`header`,{className:`flex shrink-0 flex-wrap items-end gap-4 border-b border-[var(--oke-line)] px-6 py-4`,children:[(0,R.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[(0,R.jsx)(`p`,{className:`text-xs uppercase tracking-[0.2em] text-[var(--oke-muted)]`,children:`Signals`}),(0,R.jsx)(`h1`,{className:`text-xl font-semibold tracking-tight`,children:`Delivery physics`}),(0,R.jsx)(`p`,{className:`text-xs text-[var(--oke-muted)]`,children:`One list — once · broadcast · live`})]}),(0,R.jsxs)(`label`,{className:`flex flex-col gap-1 text-sm`,children:[(0,R.jsx)(`span`,{className:`text-[var(--oke-muted)]`,children:`Filter`}),(0,R.jsx)(`input`,{"aria-label":`Filter signals`,className:`min-h-8 border border-[var(--oke-line)] bg-transparent px-2 text-sm`,value:e.q??``,onChange:t=>z({...e,q:t.target.value||void 0})})]})]}),(0,R.jsxs)(`div`,{className:`grid min-h-0 flex-1 grid-cols-1 md:grid-cols-[minmax(0,1fr)_minmax(0,1.5fr)]`,children:[(0,R.jsx)(`section`,{"aria-label":`Signal list`,className:`min-h-0 overflow-auto border-r border-[var(--oke-line)]`,children:V.isLoading?(0,R.jsx)(`p`,{className:`px-6 py-8 text-sm text-[var(--oke-muted)]`,children:`Loading signals…`}):U.length===0?(0,R.jsx)(`p`,{className:`px-6 py-8 text-sm text-[var(--oke-muted)]`,children:`No signals declared.`}):U.map(t=>(0,R.jsxs)(`section`,{"aria-label":t.label,className:`border-b border-[var(--oke-line)]`,children:[(0,R.jsx)(`h2`,{className:`sticky top-0 bg-[var(--oke-bg)] px-6 py-2 text-xs font-medium uppercase tracking-[0.15em] text-[var(--oke-muted)]`,children:t.label}),(0,R.jsx)(`ul`,{children:t.signals.map(t=>(0,R.jsx)(`li`,{children:(0,R.jsxs)(`button`,{type:`button`,"aria-pressed":t.name===e.signal,className:te(`flex w-full min-h-10 flex-col items-start gap-0.5 px-6 py-2 text-left text-sm`,t.name===e.signal?`bg-[var(--oke-line)]/40`:`hover:bg-[var(--oke-line)]/20`),onClick:()=>z(x(e,t.name)),children:[(0,R.jsxs)(`span`,{className:`font-medium`,children:[t.name,t.orphaned?(0,R.jsx)(`span`,{role:`status`,className:`ml-2 text-xs text-[var(--oke-muted)]`,children:`orphaned`}):null]}),(0,R.jsxs)(`span`,{className:`text-xs text-[var(--oke-muted)]`,children:[t.delivery===`once`&&(0,R.jsxs)(R.Fragment,{children:[`pending `,t.pending,` · in-flight `,t.inflight,` · DLQ `,t.dead,t.outboxLagMs!=null&&t.outboxLagMs>0?` · outbox ${t.outboxLagMs}ms`:``]}),t.delivery===`broadcast`&&(0,R.jsxs)(R.Fragment,{children:[t.subscribers.length,` subscribers · lag`,` `,t.subscribers.reduce((e,t)=>e+t.lag,0)]}),t.delivery===`live`&&(0,R.jsxs)(R.Fragment,{children:[t.connections,` connections · `,t.throughputPerSec,`/s`]})]})]})},t.name))})]},t.delivery))}),(0,R.jsx)(`section`,{"aria-label":`Signal detail`,"aria-live":`polite`,className:`min-h-0 overflow-auto px-6 py-4`,children:!W||!G?(0,R.jsx)(`p`,{className:`text-sm text-[var(--oke-muted)]`,children:`Select a signal to inspect delivery, DLQ, and consumers.`}):(0,R.jsxs)(`div`,{className:`flex flex-col gap-6`,children:[(0,R.jsxs)(`div`,{className:`flex items-start justify-between gap-4`,children:[(0,R.jsxs)(`div`,{children:[(0,R.jsx)(`h2`,{className:`text-lg font-semibold`,children:W.name}),(0,R.jsx)(`p`,{role:`status`,className:`mt-2 max-w-prose text-sm leading-relaxed`,"data-durable":String(G.durable),children:G.statement})]}),(0,R.jsx)(u,{type:`button`,variant:`ghost`,onClick:()=>z(re(e)),children:`Close`})]}),W.delivery===`once`?(0,R.jsxs)(`dl`,{className:`grid grid-cols-2 gap-3 text-sm sm:grid-cols-4`,children:[(0,R.jsxs)(`div`,{children:[(0,R.jsx)(`dt`,{className:`text-[var(--oke-muted)]`,children:`Pending`}),(0,R.jsx)(`dd`,{className:`text-lg font-medium`,children:W.pending})]}),(0,R.jsxs)(`div`,{children:[(0,R.jsx)(`dt`,{className:`text-[var(--oke-muted)]`,children:`In-flight`}),(0,R.jsx)(`dd`,{className:`text-lg font-medium`,children:W.inflight})]}),(0,R.jsxs)(`div`,{children:[(0,R.jsx)(`dt`,{className:`text-[var(--oke-muted)]`,children:`DLQ`}),(0,R.jsx)(`dd`,{className:`text-lg font-medium`,children:W.dead})]}),(0,R.jsxs)(`div`,{children:[(0,R.jsx)(`dt`,{className:`text-[var(--oke-muted)]`,children:`Retry policy`}),(0,R.jsxs)(`dd`,{className:`text-lg font-medium`,children:[W.retries,` retries`,W.deadLetterEnabled?` → DLQ`:``]})]}),W.outboxLagMs==null?null:(0,R.jsxs)(`div`,{className:`col-span-2`,children:[(0,R.jsx)(`dt`,{className:`text-[var(--oke-muted)]`,children:`Outbox lag`}),(0,R.jsxs)(`dd`,{className:`font-medium`,children:[W.outboxLagMs,` ms`]})]})]}):null,W.delivery===`broadcast`?(0,R.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,R.jsx)(`h3`,{className:`text-sm font-medium`,children:`Subscribers`}),(0,R.jsxs)(`table`,{className:`w-full text-left text-sm`,children:[(0,R.jsx)(`caption`,{className:`sr-only`,children:`Per-subscriber lag and errors`}),(0,R.jsx)(`thead`,{children:(0,R.jsxs)(`tr`,{className:`text-[var(--oke-muted)]`,children:[(0,R.jsx)(`th`,{scope:`col`,className:`py-1 font-normal`,children:`Subscriber`}),(0,R.jsx)(`th`,{scope:`col`,className:`py-1 font-normal`,children:`Lag`}),(0,R.jsx)(`th`,{scope:`col`,className:`py-1 font-normal`,children:`Errors`}),(0,R.jsx)(`th`,{scope:`col`,className:`py-1 font-normal`,children:`Replay`})]})}),(0,R.jsx)(`tbody`,{children:W.subscribers.map(t=>(0,R.jsxs)(`tr`,{className:`border-t border-[var(--oke-line)]`,children:[(0,R.jsx)(`td`,{className:`py-2 font-mono text-xs`,children:t.id}),(0,R.jsx)(`td`,{className:`py-2`,children:t.lag}),(0,R.jsx)(`td`,{className:`py-2`,children:t.errorCount}),(0,R.jsx)(`td`,{className:`py-2`,children:(0,R.jsx)(u,{type:`button`,variant:`ghost`,"aria-pressed":e.sub===t.id,onClick:()=>z({...e,sub:e.sub===t.id?void 0:t.id}),children:e.sub===t.id?`Targeted`:`Target`})})]},t.id))})]})]}):null,W.delivery===`live`?(0,R.jsxs)(`section`,{"aria-label":`Payload monitor`,className:`flex flex-col gap-2`,children:[(0,R.jsxs)(`div`,{className:`flex flex-wrap items-center gap-3`,children:[(0,R.jsx)(`h3`,{className:`text-sm font-medium`,children:`Payload monitor`}),(0,R.jsxs)(`span`,{className:`text-xs text-[var(--oke-muted)]`,children:[W.connections,` connections · `,W.throughputPerSec,`/s`]}),(0,R.jsx)(u,{type:`button`,variant:`ghost`,onClick:()=>{let t=!v.paused;y(e=>M(e,t)),z({...e,paused:t||void 0})},children:v.paused?`Resume`:`Pause`}),(0,R.jsx)(u,{type:`button`,variant:`ghost`,onClick:()=>{let e=new Blob([P(v.payloads)],{type:`application/json`}),t=URL.createObjectURL(e),n=document.createElement(`a`);n.href=t,n.download=`${W.name}-live.json`,n.click(),URL.revokeObjectURL(t)},children:`Export`}),v.autoPausedByScroll?(0,R.jsx)(`span`,{role:`status`,className:`text-xs text-[var(--oke-muted)]`,children:`Auto-paused on scroll`}):null]}),(0,R.jsx)(`ul`,{className:`max-h-48 overflow-auto border border-[var(--oke-line)] p-2 font-mono text-xs`,onScroll:()=>{y(t=>{let n=N(t);return n.paused&&!t.paused&&z({...e,paused:!0}),n})},children:(v.payloads.length?v.payloads:W.recentLive).map((e,t)=>(0,R.jsx)(`li`,{className:`border-b border-[var(--oke-line)]/50 py-1`,children:JSON.stringify(e)},t))})]}):null,(0,R.jsxs)(`section`,{"aria-label":`Producers and consumers`,children:[(0,R.jsx)(`h3`,{className:`mb-2 text-sm font-medium`,children:`Causality`}),(0,R.jsxs)(`div`,{className:`grid gap-4 text-sm sm:grid-cols-2`,children:[(0,R.jsxs)(`div`,{children:[(0,R.jsx)(`p`,{className:`mb-1 text-xs uppercase tracking-[0.15em] text-[var(--oke-muted)]`,children:`Producers`}),(0,R.jsx)(`ul`,{className:`flex flex-col gap-1`,children:W.producers.length===0?(0,R.jsx)(`li`,{className:`text-[var(--oke-muted)]`,children:`None`}):W.producers.map(e=>(0,R.jsx)(`li`,{children:(0,R.jsx)(g,{to:`/flows`,search:{sel:`flow`,flow:e.flowId},className:`underline-offset-2 hover:underline`,children:e.flowId})},e.flowId))})]}),(0,R.jsxs)(`div`,{children:[(0,R.jsx)(`p`,{className:`mb-1 text-xs uppercase tracking-[0.15em] text-[var(--oke-muted)]`,children:`Consumers`}),(0,R.jsx)(`ul`,{className:`flex flex-col gap-1`,children:W.consumers.length===0?(0,R.jsx)(`li`,{className:`text-[var(--oke-muted)]`,children:`None`}):W.consumers.map(e=>(0,R.jsx)(`li`,{children:(0,R.jsxs)(g,{to:`/flows`,search:{sel:`flow`,flow:e.flowId},className:`underline-offset-2 hover:underline`,children:[e.flowId,e.durable?` · durable`:``]})},e.flowId))})]})]})]}),W.dead>0?(0,R.jsxs)(`section`,{"aria-label":`Dead letters`,className:`flex flex-col gap-3`,children:[(0,R.jsxs)(`h3`,{className:`text-sm font-medium`,children:[`Dead letters (`,W.dead,`)`]}),(0,R.jsx)(`p`,{className:`text-xs text-[var(--oke-muted)]`,children:`Bulk repair: dry run first, then replay at a controlled rate — never an unthrottled flood.`}),(0,R.jsxs)(`div`,{className:`flex flex-wrap items-end gap-3`,children:[(0,R.jsxs)(`label`,{className:`flex flex-col gap-1 text-sm`,children:[(0,R.jsx)(`span`,{className:`text-[var(--oke-muted)]`,children:`Rate (per second)`}),(0,R.jsx)(`input`,{"aria-label":`Replay rate (per second)`,type:`number`,min:1,max:1e3,className:`min-h-8 w-24 border border-[var(--oke-line)] bg-transparent px-2`,value:B,onChange:t=>z({...e,rate:Number(t.target.value)||10})})]}),(0,R.jsx)(u,{type:`button`,onClick:()=>Z.mutate(),disabled:Z.isPending||X!==null&&!X.ok,title:X&&!X.ok?X.reason:void 0,children:`Dry run`}),X&&!X.ok?(0,R.jsx)(`p`,{role:`status`,className:`basis-full text-xs text-[var(--oke-muted)]`,children:X.reason}):null,(0,R.jsx)(u,{type:`button`,onClick:()=>Q.mutate(),disabled:Q.isPending||!h,children:`Replay`}),(0,R.jsx)(u,{type:`button`,variant:`ghost`,onClick:()=>$.mutate(),disabled:$.isPending,children:`Discard`})]}),h?(0,R.jsx)(`p`,{role:`status`,className:`text-sm`,children:h}):null,(J?.kind===`typed`||Y?.kind===`typed`)&&(0,R.jsxs)(`div`,{className:`flex flex-col gap-2 border border-[var(--oke-line)] p-3`,children:[(0,R.jsx)(`p`,{className:`text-xs text-[var(--oke-muted)]`,children:`This action re-triggers external effects or permanently discards messages. Type the phrase and a reason.`}),(0,R.jsxs)(`label`,{className:`flex flex-col gap-1 text-sm`,children:[`Confirmation`,(0,R.jsx)(`input`,{"aria-label":`Confirmation phrase`,className:`min-h-8 border border-[var(--oke-line)] bg-transparent px-2`,value:d,onChange:e=>f(e.target.value),placeholder:J?.kind===`typed`?J.phrase:Y?.kind===`typed`?Y.phrase:``})]}),(0,R.jsxs)(`label`,{className:`flex flex-col gap-1 text-sm`,children:[`Reason`,(0,R.jsx)(`input`,{"aria-label":`Confirmation reason`,className:`min-h-8 border border-[var(--oke-line)] bg-transparent px-2`,value:p,onChange:e=>m(e.target.value)})]})]}),(0,R.jsx)(`ul`,{className:`flex flex-col gap-1`,children:W.deadLetters.map(t=>{let n=t.failures[t.failures.length-1];return(0,R.jsxs)(`li`,{className:`flex items-center gap-2`,children:[(0,R.jsx)(`input`,{type:`checkbox`,"aria-label":`Select ${t.id}`,checked:C.has(t.id),onChange:e=>{w(n=>{let r=new Set(n);return e.target.checked?r.add(t.id):r.delete(t.id),r})}}),(0,R.jsxs)(`button`,{type:`button`,"aria-pressed":t.id===e.dlq,className:`min-h-8 flex-1 text-left text-sm`,onClick:()=>z(ie(e,t.id)),children:[(0,R.jsx)(`span`,{className:`font-mono text-xs`,children:t.id}),n?(0,R.jsx)(`span`,{role:`status`,className:`ml-2`,children:n.code}):null]})]},t.id)})})]}):null,K?(0,R.jsxs)(`section`,{"aria-label":`Dead-letter detail`,className:`flex flex-col gap-3 border-t border-[var(--oke-line)] pt-4`,children:[(0,R.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,R.jsxs)(`h3`,{className:`text-sm font-medium`,children:[`Dead letter `,K.id]}),(0,R.jsx)(u,{type:`button`,variant:`ghost`,onClick:()=>z(S(e)),children:`Close letter`})]}),(0,R.jsx)(`p`,{role:`status`,className:`text-sm`,children:G.statement}),(0,R.jsx)(`form`,{"aria-label":`Editable payload`,className:`flex flex-col gap-2`,onSubmit:e=>e.preventDefault(),children:q.length>0?q.map(e=>(0,R.jsxs)(`label`,{className:`flex flex-col gap-1 text-sm`,children:[e.key,e.enumValues?(0,R.jsx)(`select`,{"aria-label":e.key,className:`min-h-8 border border-[var(--oke-line)] bg-transparent px-2`,value:s[e.key]??``,onChange:t=>l(n=>({...n,[e.key]:t.target.value})),children:e.enumValues.map(e=>(0,R.jsx)(`option`,{value:e,children:e},e))}):(0,R.jsx)(`input`,{"aria-label":e.key,className:`min-h-8 border border-[var(--oke-line)] bg-transparent px-2`,value:s[e.key]??``,onChange:t=>l(n=>({...n,[e.key]:t.target.value}))})]},e.key)):(0,R.jsxs)(`label`,{className:`flex flex-col gap-1 text-sm`,children:[`Payload JSON`,(0,R.jsx)(`textarea`,{"aria-label":`Payload JSON`,className:`min-h-24 border border-[var(--oke-line)] bg-transparent px-2 font-mono text-xs`,value:s._raw??``,onChange:e=>l({_raw:e.target.value}),rows:4})]})}),(0,R.jsxs)(`div`,{children:[(0,R.jsx)(`h4`,{className:`mb-1 text-xs uppercase tracking-[0.15em] text-[var(--oke-muted)]`,children:`Attempt history`}),(0,R.jsx)(`ol`,{className:`list-decimal space-y-1 pl-5 text-sm`,children:K.failures.map(e=>(0,R.jsxs)(`li`,{children:[`Attempt `,e.attempt,`: `,(0,R.jsx)(`strong`,{children:e.code}),` —`,` `,e.message]},`${e.attempt}-${e.code}-${e.at}`))})]}),K.causeRunId?(0,R.jsxs)(`p`,{className:`text-sm`,children:[`Causal chain:`,` `,(0,R.jsx)(g,{to:`/traces`,search:{trace:K.causeRunId},className:`underline-offset-2 hover:underline`,children:K.causeFlow??K.causeRunId})]}):null,(0,R.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[(0,R.jsx)(u,{type:`button`,onClick:()=>{w(new Set([K.id])),Q.mutate()},children:`Replay this message`}),(0,R.jsx)(u,{type:`button`,variant:`ghost`,onClick:()=>{w(new Set([K.id])),$.mutate()},children:`Discard`})]})]}):null]})})]})]})}var B=t({default:()=>z});export{y as n,B as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as e,r as t}from"./rolldown-runtime-CNC7AqOf.js";import{C as n,Q as r,Z as i,a,b as o,d as s,et as c,g as l,nt as u,o as d,r as f,tt as p,u as m,w as h,y as g}from"./panel-access-Dd37LU2c.js";import{r as _}from"./panel-runs-BwsWqKeB.js";var v=g({q:o().optional(),ref:o().optional(),child:o().optional(),tenant:o().optional(),view:l([`browse`,`cache`,`sql`,`probe`]).optional(),prefix:o().optional()});function y(e){let t=v.safeParse(e);return t.success?t.data:{}}function b(e){let t={};return e.q&&(t.q=e.q),e.ref&&(t.ref=e.ref),e.child&&(t.child=e.child),e.tenant&&(t.tenant=e.tenant),e.view&&e.view!==`browse`&&(t.view=e.view),e.prefix&&(t.prefix=e.prefix),t}function x(e,t){return{...e,ref:t,child:void 0,view:`browse`}}function S(e,t){return{...e,child:t,view:`browse`}}var C=[`sql`,`kv`,`files`,`index`],w={sql:`SQL`,kv:`KV`,files:`Files`,index:`Index`};function T(e,t=``){let n=t.trim().toLowerCase(),r=n?e.filter(e=>e.name.toLowerCase().includes(n)||e.ref.toLowerCase().includes(n)||e.children.some(e=>e.name.toLowerCase().includes(n))):e;return C.map(e=>({facet:e,label:w[e],stores:r.filter(t=>t.facet===e)})).filter(e=>e.stores.length>0)}function E(e={production:!0}){return e.production?{kind:`typed`,phrase:`EDIT`,requireReason:!0}:{kind:`undo`,windowMs:f}}function D(e={production:!0}){return e.production?{kind:`typed`,phrase:`DELETE`,requireReason:!0}:{kind:`undo`,windowMs:f}}function O(e={production:!0}){return e.production?{kind:`typed`,phrase:`PURGE`,requireReason:!0}:{kind:`undo`,windowMs:f}}function k(e){let t=[];for(let n of e.signals)t.push(`Signal \`${n}\` will not be emitted`);for(let n of e.channels)t.push(`Channel \`${n}\` will not fire`);return e.writerFlowIds.length>0&&t.push(`Owning flow(s): ${e.writerFlowIds.map(e=>`\`${e}\``).join(`, `)} — not executed`),{headline:`Direct edit is not a flow execution — the following will NOT happen:`,lines:t,empty:t.length===0}}function A(e){return e.facet===`index`?{ok:!1,reason:`Index facet has no bulk-update preview — similarity probe is read-only.`}:{ok:!0}}function j(e){let t=e.cache,n=t.invalidatedByWrites,r=t.invalidatingFlowIds,i=n.length===0?`Read key \`${t.producedByRead}\` — no write invalidators declared.`:`Read key \`${t.producedByRead}\` — invalidated by writes to ${n.map(e=>`\`${e}\``).join(`, `)}.`;return{producedByRead:t.producedByRead,invalidatedBy:n,invalidatingFlows:r,summary:i}}var M=e(u(),1),N=p();function P(){let e=h({from:`/store`}),t=n({from:`/store`}),o=c(),[l,u]=(0,M.useState)(``),[d,f]=(0,M.useState)(``),[p,g]=(0,M.useState)(`{}`),[_,v]=(0,M.useState)(`SELECT * FROM "bookings" LIMIT 50`),[y,S]=(0,M.useState)(`0.1,0.2,0.3`),[C,w]=(0,M.useState)(null),P=e=>{t({search:b(e),replace:!0})},I=r({queryKey:[`console.store.list`],queryFn:async()=>{let e=await s.storeList();if(e.error)throw Error(e.error.code);return e.data},refetchInterval:1e4}),L=I.data?.tenancyDeclared??!1,ee=I.data?.tenants??[],R=I.data?.stores??[],te=(0,M.useMemo)(()=>T(R,e.q??``),[R,e.q]),z=R.find(t=>t.ref===e.ref),B=z?.children.find(t=>t.name===e.child)??z?.children[0],V=e.view??`browse`,H=E({production:!0}),U=D({production:!0}),W=O({production:!0}),G=z?A(z):null,ne=B?k(B.willNotFire):null,re=B?j(B):null,K=r({queryKey:[`console.store.query`,e.ref,B?.name,e.tenant,e.prefix,V,y],enabled:!!z&&!!B&&V===`browse`&&(!L||!!e.tenant),queryFn:async()=>{if(!z||!B)return null;let t=z.facet===`index`?y.split(`,`).map(e=>Number(e.trim())).filter(e=>!Number.isNaN(e)):void 0,n=await s.storeQuery({ref:z.ref,child:B.name,tenant:e.tenant,prefix:e.prefix,vector:t,topK:5});if(n.error)throw Error(n.error.code);return n.data}});(0,M.useEffect)(()=>{u(``),f(``),w(null)},[z?.ref,B?.name]);let q=()=>{o.invalidateQueries({queryKey:[`console.store.list`]}),o.invalidateQueries({queryKey:[`console.store.query`]})},J=i({mutationFn:async()=>{if(!z||!B)return;if(G&&!G.ok)throw Error(G.reason);let t={};try{t=JSON.parse(p)}catch{throw Error(`Patch must be valid JSON`)}let n=await s.storePreview({ref:z.ref,child:B.name,tenant:e.tenant,id:String(t.id??`preview`),key:typeof t.key==`string`?t.key:void 0,patch:t});if(n.error)throw Error(n.error.code);let r=n.data;return w(k(r.willNotFire).lines),r}}),Y=i({mutationFn:async()=>{if(!z||!B)return;if(H.kind===`typed`){let e=a({typed:l,reason:d,phrase:H.phrase});if(e)throw Error(e.typed??e.reason)}let t={};try{t=JSON.parse(p)}catch{throw Error(`Patch must be valid JSON`)}let n=await s.storeEdit({ref:z.ref,child:B.name,tenant:e.tenant,id:String(t.id??``),key:typeof t.key==`string`?t.key:void 0,patch:t,confirmation:l,reason:d,commit:!0});if(n.error)throw Error(n.error.code);return n.data},onSuccess:q}),X=i({mutationFn:async t=>{if(!z||!B)return;if(U.kind===`typed`){let e=a({typed:l,reason:d,phrase:U.phrase});if(e)throw Error(e.typed??e.reason)}let n=await s.storeDelete({ref:z.ref,child:B.name,tenant:e.tenant,ids:z.facet===`sql`||z.facet===`index`?t:void 0,keys:z.facet===`kv`||z.facet===`files`?t:void 0,confirmation:l,reason:d});if(n.error)throw Error(n.error.code);return n.data},onSuccess:q}),Z=i({mutationFn:async()=>{if(!B)return;if(W.kind===`typed`){let e=a({typed:l,reason:d,phrase:W.phrase});if(e)throw Error(e.typed??e.reason)}let e=await s.storePurgeCache({resource:B.effectRef,confirmation:l,reason:d});if(e.error)throw Error(e.error.code);return e.data},onSuccess:q}),Q=i({mutationFn:async()=>{if(!z||z.facet!==`sql`)return;let t=await s.storeSql({ref:z.ref,sql:_,tenant:e.tenant,allowWrite:!1});if(t.error)throw Error(t.error.code);return t.data}}),$=i({mutationFn:async t=>{if(!z||!B)return;let n=await s.storeReveal({ref:z.ref,child:B.name,tenant:e.tenant,id:t.id,column:t.column});if(n.error)throw Error(n.error.code);return n.data}});return(0,N.jsxs)(`div`,{className:`flex h-full min-h-0 flex-col`,children:[(0,N.jsxs)(`header`,{className:`flex shrink-0 flex-wrap items-end gap-3 border-b border-[var(--oke-line)] px-4 py-3`,children:[(0,N.jsxs)(`div`,{className:`mr-auto`,children:[(0,N.jsx)(`h1`,{className:`text-lg font-medium`,children:`Store`}),(0,N.jsx)(`p`,{className:`text-sm text-[var(--oke-muted)]`,children:`One list, grouped by facet — direct edits are not flow executions`})]}),L?(0,N.jsxs)(`label`,{className:`flex flex-col gap-1 text-sm`,children:[(0,N.jsx)(`span`,{className:`text-[var(--oke-muted)]`,children:`Tenant`}),(0,N.jsxs)(`select`,{"aria-label":`Tenant`,className:`min-h-8 border border-[var(--oke-line)] bg-transparent px-2`,value:e.tenant??``,onChange:t=>P({...e,tenant:t.target.value||void 0}),children:[(0,N.jsx)(`option`,{value:``,children:`Select tenant…`}),ee.map(e=>(0,N.jsx)(`option`,{value:e,children:e},e))]})]}):null,(0,N.jsxs)(`label`,{className:`flex flex-col gap-1 text-sm`,children:[(0,N.jsx)(`span`,{className:`text-[var(--oke-muted)]`,children:`Filter`}),(0,N.jsx)(`input`,{"aria-label":`Filter stores`,className:`min-h-8 border border-[var(--oke-line)] bg-transparent px-2`,value:e.q??``,onChange:t=>P({...e,q:t.target.value||void 0})})]})]}),(0,N.jsxs)(`div`,{className:`flex min-h-0 flex-1`,children:[(0,N.jsxs)(`section`,{"aria-label":`Store list`,className:`w-72 shrink-0 overflow-y-auto border-r border-[var(--oke-line)]`,children:[I.isLoading?(0,N.jsx)(`p`,{className:`p-3 text-sm text-[var(--oke-muted)]`,children:`Loading…`}):null,te.map(t=>(0,N.jsxs)(`div`,{className:`border-b border-[var(--oke-line)]`,children:[(0,N.jsx)(`h2`,{className:`px-3 py-2 text-xs tracking-wide text-[var(--oke-muted)]`,children:t.label}),(0,N.jsx)(`ul`,{children:t.stores.map(t=>(0,N.jsx)(`li`,{children:(0,N.jsxs)(`button`,{type:`button`,"aria-pressed":t.ref===e.ref,className:m(`flex min-h-8 w-full flex-col items-start px-3 py-2 text-left text-sm`,t.ref===e.ref?`bg-[var(--oke-line)]/40`:`hover:bg-[var(--oke-line)]/20`),onClick:()=>P(x(e,t.ref)),children:[(0,N.jsx)(`span`,{children:t.name}),(0,N.jsxs)(`span`,{className:`text-xs text-[var(--oke-muted)]`,children:[t.children.length,` resource(s)`,t.replicaLagMs==null?``:` · lag ${t.replicaLagMs}ms`,t.migrationDrift?.drifted?` · drift`:``,t.warnings.length>0?` · ${t.warnings.length} warn`:``]})]})},t.ref))})]},t.facet))]}),(0,N.jsx)(`section`,{"aria-label":`Store detail`,className:`min-w-0 flex-1 overflow-y-auto p-4`,"aria-live":`polite`,children:z?L&&!e.tenant?(0,N.jsx)(`p`,{role:`status`,className:`text-sm`,children:`Select a tenant in the header before browsing — compliance boundary, not a display filter.`}):(0,N.jsx)(F,{open:z,childName:B?.name,view:V,search:e,setSearch:P,browse:K.data,browseLoading:K.isLoading,cache:re,willNot:ne,willNotPreview:C,patchJson:p,setPatchJson:g,typed:l,setTyped:u,reason:d,setReason:f,sqlText:_,setSqlText:v,probeVector:y,setProbeVector:S,onPreview:()=>J.mutate(),onCommit:()=>Y.mutate(),onDelete:e=>X.mutate(e),onPurge:()=>Z.mutate(),onSql:()=>Q.mutate(),sqlResult:Q.data,onReveal:(e,t)=>$.mutate({id:e,column:t}),revealValue:$.data?.value,error:J.error?.message??Y.error?.message??X.error?.message??Z.error?.message??Q.error?.message??$.error?.message}):(0,N.jsx)(`p`,{className:`text-sm text-[var(--oke-muted)]`,children:`Select a store. Tenant selector appears only when tenancy is declared on the Manifest.`})})]})]})}function F(e){let{open:t,childName:n,view:r,search:i,setSearch:a,browse:o,browseLoading:s,cache:c,willNot:l,willNotPreview:u,patchJson:f,setPatchJson:p,typed:h,setTyped:g,reason:v,setReason:y,sqlText:b,setSqlText:x,probeVector:C,setProbeVector:w,onPreview:T,onCommit:E,onDelete:D,onPurge:O,onSql:k,sqlResult:A,onReveal:j,revealValue:M,error:P}=e,F=t.children.find(e=>e.name===n);return(0,N.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,N.jsxs)(`div`,{className:`flex flex-wrap items-baseline gap-2`,children:[(0,N.jsx)(`h2`,{className:`text-base font-medium`,children:t.name}),(0,N.jsx)(`span`,{className:`text-sm text-[var(--oke-muted)]`,children:t.ref}),t.contentAddressed?(0,N.jsx)(`span`,{role:`status`,className:`text-xs text-[var(--oke-muted)]`,children:`content-addressed keys`}):null]}),(0,N.jsx)(`div`,{className:`flex flex-wrap gap-2`,role:`tablist`,"aria-label":`Views`,children:[[`browse`,`Browse`],[`cache`,`Cache`],...t.facet===`sql`?[[`sql`,`SQL`]]:[],...t.facet===`index`?[[`probe`,`Probe`]]:[]].map(([e,t])=>(0,N.jsx)(`button`,{type:`button`,role:`tab`,"aria-selected":r===e,className:m(`min-h-8 px-2 text-sm`,r===e?`text-[var(--oke-fg)] underline`:`text-[var(--oke-muted)]`),onClick:()=>a({...i,view:e}),children:t},e))}),(0,N.jsxs)(`label`,{className:`flex flex-col gap-1 text-sm`,children:[(0,N.jsx)(`span`,{className:`text-[var(--oke-muted)]`,children:`Resource`}),(0,N.jsx)(`select`,{"aria-label":`Store resource`,className:`min-h-8 max-w-xs border border-[var(--oke-line)] bg-transparent px-2`,value:n??``,onChange:e=>a(S(i,e.target.value)),children:t.children.map(e=>(0,N.jsx)(`option`,{value:e.name,children:e.name},e.name))})]}),F?(0,N.jsxs)(`p`,{className:`text-sm`,role:`status`,children:[`Writers:`,` `,F.writers.map(e=>(0,N.jsx)(_,{to:`/flows`,search:{flow:e},className:`mr-2 underline`,children:e},e)),F.writers.length===0?`none`:null,` · `,`Readers: `,F.readers.join(`, `)||`none`,F.piiColumns.length>0?` · PII columns: ${F.piiColumns.join(`, `)}`:``]}):null,t.migrationDrift?(0,N.jsxs)(`p`,{className:`text-sm`,role:`status`,children:[`Migration: declared `,t.migrationDrift.declared.slice(0,12),`…`,t.migrationDrift.applied?` / applied ${t.migrationDrift.applied.slice(0,12)}…`:` / applied (none)`,t.migrationDrift.drifted?` — drifted`:` — in sync`]}):null,t.warnings.length>0?(0,N.jsx)(`ul`,{"aria-label":`Operational warnings`,className:`text-sm`,children:t.warnings.map(e=>(0,N.jsxs)(`li`,{role:`status`,children:[e.key,`: `,e.message]},`${e.key}:${e.code}`))}):null,r===`cache`&&c?(0,N.jsxs)(`section`,{"aria-label":`Cache`,children:[(0,N.jsx)(`h3`,{className:`text-sm font-medium`,children:`Cache`}),(0,N.jsx)(`p`,{className:`text-sm`,role:`status`,children:c.summary}),(0,N.jsxs)(`p`,{className:`text-xs text-[var(--oke-muted)]`,children:[`Invalidating flows:`,` `,c.invalidatingFlows.join(`, `)||`none`]}),(0,N.jsx)(d,{type:`button`,onClick:O,children:`Purge cache namespace`})]}):null,r===`sql`&&t.facet===`sql`?(0,N.jsxs)(`section`,{"aria-label":`SQL console`,className:`flex flex-col gap-2`,children:[(0,N.jsx)(`h3`,{className:`text-sm font-medium`,children:`SQL console (read-only)`}),(0,N.jsx)(`textarea`,{"aria-label":`SQL console`,className:`min-h-24 border border-[var(--oke-line)] bg-transparent p-2 font-mono text-sm`,value:b,onChange:e=>x(e.target.value)}),(0,N.jsx)(d,{type:`button`,onClick:k,children:`Run`}),A?(0,N.jsxs)(`p`,{className:`text-xs text-[var(--oke-muted)]`,children:[A.rows.length,` row(s) · routed `,A.routedRole,A.masked?` · PII masked`:``]}):null]}):null,(r===`browse`||r===`probe`)&&(0,N.jsxs)(`section`,{"aria-label":`Browse`,children:[t.facet===`index`?(0,N.jsxs)(`label`,{className:`mb-2 flex flex-col gap-1 text-sm`,children:[(0,N.jsx)(`span`,{children:`Probe vector`}),(0,N.jsx)(`input`,{"aria-label":`Probe vector`,className:`min-h-8 border border-[var(--oke-line)] bg-transparent px-2 font-mono`,value:C,onChange:e=>w(e.target.value)})]}):null,s?(0,N.jsx)(`p`,{className:`text-sm text-[var(--oke-muted)]`,children:`Loading…`}):null,o?.rows?(0,N.jsxs)(`table`,{className:`w-full text-left text-sm`,children:[(0,N.jsx)(`thead`,{children:(0,N.jsxs)(`tr`,{children:[Object.keys(o.rows[0]??{id:1}).map(e=>(0,N.jsx)(`th`,{scope:`col`,className:`border-b px-2 py-1`,children:e},e)),(0,N.jsx)(`th`,{scope:`col`,className:`border-b px-2 py-1`,children:`Actions`})]})}),(0,N.jsx)(`tbody`,{children:o.rows.map((e,t)=>(0,N.jsxs)(`tr`,{children:[Object.entries(e).map(([t,n])=>(0,N.jsxs)(`td`,{className:`border-b px-2 py-1 font-mono`,children:[String(n),F?.piiColumns.includes(t)?(0,N.jsx)(`button`,{type:`button`,className:`ml-2 underline`,style:{minHeight:32},onClick:()=>j(String(e.id??``),t),children:`Reveal`}):null]},t)),(0,N.jsx)(`td`,{className:`border-b px-2 py-1`,children:(0,N.jsx)(d,{type:`button`,onClick:()=>D([String(e.id??``)]),children:`Delete`})})]},t))})]}):null,o?.keys?(0,N.jsx)(`ul`,{"aria-label":`Keys`,className:`text-sm`,children:o.keys.map(e=>(0,N.jsxs)(`li`,{className:`flex min-h-8 items-center gap-2`,children:[(0,N.jsx)(`span`,{className:`font-mono`,children:e.key}),e.value===void 0?null:(0,N.jsx)(`span`,{className:`text-[var(--oke-muted)]`,children:JSON.stringify(e.value)}),e.warnings?.map(e=>(0,N.jsx)(`span`,{role:`status`,className:`text-xs`,children:e.message},e.code)),(0,N.jsx)(d,{type:`button`,onClick:()=>D([e.key]),children:`Delete`})]},e.key))}):null,o?.hits?(0,N.jsx)(`ul`,{"aria-label":`Similarity hits`,className:`text-sm`,children:o.hits.map(e=>(0,N.jsxs)(`li`,{children:[e.id,` · score `,e.score.toFixed(3)]},e.id))}):null,M===void 0?null:(0,N.jsxs)(`p`,{role:`status`,className:`text-sm`,children:[`Revealed: `,String(M)]})]}),(0,N.jsxs)(`section`,{"aria-label":`Direct edit`,className:`flex flex-col gap-2 border-t border-[var(--oke-line)] pt-4`,children:[(0,N.jsx)(`h3`,{className:`text-sm font-medium`,children:`Direct edit`}),(0,N.jsx)(`p`,{className:`text-sm text-[var(--oke-muted)]`,children:`Not a flow execution. Before saving, preview names what will not fire.`}),l&&!l.empty?(0,N.jsx)(`ul`,{className:`text-sm`,children:(u??l.lines).map(e=>(0,N.jsx)(`li`,{children:e},e))}):(0,N.jsx)(`p`,{className:`text-sm text-[var(--oke-muted)]`,children:`No owning-flow emissions declared for this resource.`}),(0,N.jsxs)(`label`,{className:`flex flex-col gap-1 text-sm`,children:[`Patch (JSON)`,(0,N.jsx)(`textarea`,{"aria-label":`Edit patch JSON`,className:`min-h-20 border border-[var(--oke-line)] bg-transparent p-2 font-mono text-sm`,value:f,onChange:e=>p(e.target.value)})]}),(0,N.jsxs)(`label`,{className:`flex flex-col gap-1 text-sm`,children:[`Type EDIT / DELETE / PURGE`,(0,N.jsx)(`input`,{"aria-label":`Confirmation phrase`,className:`min-h-8 border border-[var(--oke-line)] bg-transparent px-2`,value:h,onChange:e=>g(e.target.value)})]}),(0,N.jsxs)(`label`,{className:`flex flex-col gap-1 text-sm`,children:[`Reason`,(0,N.jsx)(`input`,{"aria-label":`Confirmation reason`,className:`min-h-8 border border-[var(--oke-line)] bg-transparent px-2`,value:v,onChange:e=>y(e.target.value)})]}),(0,N.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[(0,N.jsx)(d,{type:`button`,onClick:T,children:`Preview`}),(0,N.jsx)(d,{type:`button`,onClick:E,children:`Save edit`})]}),P?(0,N.jsx)(`p`,{role:`alert`,className:`text-sm text-red-600`,children:P}):null]})]})}var I=t({default:()=>P});export{y as n,I as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as e,r as t}from"./rolldown-runtime-CNC7AqOf.js";import{C as n,Q as r,Z as i,b as a,d as o,et as s,l as c,nt as l,o as u,tt as d,u as f,w as p,y as m}from"./panel-access-Dd37LU2c.js";import{r as h}from"./panel-runs-BwsWqKeB.js";import{n as g,t as _}from"./panel-flows-BtrVn-Eg.js";var v=e(l(),1);function y(e,t){if(!t)return!0;switch(t.kind){case`wrote`:return e.effects.some(e=>e.kind===`write`&&e.resource===t.resource);case`asked`:return e.effects.some(e=>e.kind===`ask`);case`sent`:return e.effects.some(e=>e.kind===`send`&&(t.resource===void 0||e.resource===t.resource));case`secret`:return e.effects.some(e=>e.kind===`secret`&&(t.resource===void 0||e.resource===t.resource));case`cost`:return(e.cost??0)>t.min}}function b(e,t){return!t||e.some(e=>y(e,t))}function x(e){if(!e?.trim())return null;let t=e.trim();if(t===`asked`)return{kind:`asked`};if(t===`sent`)return{kind:`sent`};if(t.startsWith(`wrote:`))return{kind:`wrote`,resource:t.slice(6)};if(t.startsWith(`sent:`))return{kind:`sent`,resource:t.slice(5)};if(t.startsWith(`secret:`))return{kind:`secret`,resource:t.slice(7)};if(t===`secret`)return{kind:`secret`};if(t.startsWith(`cost:`)){let e=Number(t.slice(5));return Number.isFinite(e)?{kind:`cost`,min:e}:null}return null}function S(e){if(e)switch(e.kind){case`wrote`:return`wrote:${e.resource}`;case`asked`:return`asked`;case`sent`:return e.resource?`sent:${e.resource}`:`sent`;case`secret`:return e.resource?`secret:${e.resource}`:`secret`;case`cost`:return`cost:${e.min}`}}var C=m({trace:a().optional(),span:a().optional(),effect:a().optional(),q:a().optional(),folds:a().optional(),boost:a().optional()});function w(e){let t=C.safeParse(e??{});return t.success?t.data:C.parse({})}function T(e){let t={};return e.trace&&(t.trace=e.trace),e.span&&(t.span=e.span),e.effect&&(t.effect=e.effect),e.q&&(t.q=e.q),e.folds&&(t.folds=e.folds),e.boost&&(t.boost=e.boost),t}function E(e){return e.folds?new Set(e.folds.split(`,`).map(e=>e.trim()).filter(Boolean)):new Set}function D(e,t,n){return{...e,trace:t,span:n}}function ee(e){return{...e,trace:void 0,span:void 0,folds:void 0}}function te(e,t){let n=E(e);n.has(t)?n.delete(t):n.add(t);let r=[...n].join(`,`);return{...e,folds:r||void 0}}function O(e,t){return{...e,effect:S(t)}}function k(e){let t=new Map,n=new Map;for(let n of e)t.set(n.id,n);for(let t of e){if(!t.parentId)continue;let e=n.get(t.parentId)??[];e.push(t),n.set(t.parentId,e)}for(let[,e]of n)e.sort((e,t)=>e.startedAt-t.startedAt);return{byId:t,childrenOf:n}}function A(e,t){let{byId:n,childrenOf:r}=k(e),i=n.get(t);if(!i)return null;let a=[],o=i,s=new Set;for(;o?.parentId&&!s.has(o.parentId);){s.add(o.parentId);let e=n.get(o.parentId);if(!e)break;a.unshift(e),o=e}return{parents:a,current:i,children:r.get(i.id)??[],connected:N((a[0]??i).id,n,r)}}function j(e){let{byId:t,childrenOf:n}=k(e),r=e.filter(e=>!e.parentId||!t.has(e.parentId));return r.sort((e,t)=>t.startedAt-e.startedAt),r.map(e=>({rootId:e.id,root:e,spans:N(e.id,t,n)}))}function M(e,t){if(t&&e.some(e=>e.id===t))return t;let n=e.find(e=>e.errorCode!=null&&e.errorCode!==``);return n?n.id:e.find(t=>!t.parentId||!e.some(e=>e.id===t.parentId))?.id??e[0]?.id}function N(e,t,n){let r=[],i=e=>{let a=t.get(e);if(a){r.push(a);for(let t of n.get(e)??[])i(t.id)}};return i(e),r.sort((e,t)=>e.startedAt-t.startedAt),r}function P(e){if(e.length===0)return new Set;let{byId:t,childrenOf:n}=k(e),r=e.filter(e=>!e.parentId||!t.has(e.parentId)),i=[],a=-1,o=(e,r,s)=>{let c=n.get(e)??[],l=t.get(e);if(!l)return;let u=s+F(l),d=[...r,e];if(c.length===0){u>a&&(a=u,i=d);return}for(let e of c)o(e.id,d,u)};for(let e of r)o(e.id,[],0);return new Set(i)}function F(e){return e.effects.length===0?Math.max(0,e.durationMs):e.effects.reduce((e,t)=>e+Math.max(0,t.duration),0)}function I(e){switch(e){case`read`:return`reads`;case`write`:return`writes`;case`emit`:return`emits`;case`send`:case`ask`:return`external`;case`secret`:return`capabilities`;case`call`:return`reads`}}function L(e){let t=`none`;for(let n of e){let e=I(n.kind);z(e)>z(t)&&(t=e)}return t}function R(e){return e.some(e=>L(e.effects)===`external`)}function z(e){switch(e){case`external`:return 5;case`capabilities`:return 4;case`emits`:return 3;case`writes`:return 2;case`reads`:return 1;case`none`:return 0}}function B(e){let t=Math.max(0,Math.round(e));if(t<1e3)return`${t}ms idle`;let n=t/1e3;if(n<60)return`${U(n)}s idle`;let r=n/60;if(r<60)return`${U(r)}m idle`;let i=r/60;return i<48?`${U(i)}h idle`:`${U(i/24)}d idle`}function V(e,t={},n=new Set){let r=t.foldThresholdMs??50,i=t.expandedFolds??new Set,a=[...e].sort((e,t)=>e.startMs-t.startMs);if(a.length===0)return{segments:[],displayDurationMs:0,wallDurationMs:0};let o=a[0],s=a[a.length-1];if(!o||!s)return{segments:[],displayDurationMs:0,wallDurationMs:0};let c=o.startMs,l=Math.max(...a.map(e=>e.endMs)),u=[],d=c;for(let e of a){let t=e.startMs-d;if(t>=r){let n=`fold:${d}:${e.startMs}`,r=i.has(n),a=t;u.push({kind:`fold`,id:n,startMs:d,endMs:e.startMs,durationMs:a,label:B(a),expanded:r,displayMs:r?a:40})}let a=Math.max(0,e.endMs-e.startMs);u.push({kind:`work`,id:e.id,label:e.label,startMs:e.startMs,endMs:e.endMs,durationMs:a,tier:e.tier,spanId:e.spanId,critical:n.has(e.spanId),failed:e.failed===!0,displayMs:Math.max(1,a)}),d=Math.max(d,e.endMs)}let f=u.reduce((e,t)=>e+t.displayMs,0);return{segments:u,displayDurationMs:Math.max(1,f),wallDurationMs:l-c}}function H(e){let t=[];for(let n of e)if(n.effects.length>0)for(let e of n.effects)t.push({id:`${n.id}:${e.kind}:${e.resource}:${e.timestamp}`,label:`${e.kind} ${e.resource}`,startMs:e.timestamp,endMs:e.timestamp+Math.max(1,e.duration),tier:I(e.kind),spanId:n.id,failed:n.errorCode!=null&&e===n.effects[n.effects.length-1]});else t.push({id:n.id,label:n.flow,startMs:n.startedAt,endMs:n.endedAt,tier:`none`,spanId:n.id,failed:n.errorCode!=null});return t}function U(e){let t=Math.round(e*10)/10;return Number.isInteger(t)?String(t):t.toFixed(1)}function W(e){if(e.length===0)return[];let t=Math.min(...e.map(e=>e.startedAt)),n=Math.max(...e.map(e=>e.endedAt)),r=Math.max(1,n-t);if(e.every(e=>e.effects.length===0))return e.map(e=>({start:(e.startedAt-t)/r,width:Math.max(.02,e.durationMs/r),tier:L(e.effects),failed:e.errorCode!=null}));let i=[];for(let n of e){if(n.effects.length===0){i.push({start:(n.startedAt-t)/r,width:Math.max(.02,n.durationMs/r),tier:`none`,failed:n.errorCode!=null});continue}for(let e=0;e<n.effects.length;e++){let a=n.effects[e];a&&i.push({start:(a.timestamp-t)/r,width:Math.max(.02,a.duration/r),tier:I(a.kind),failed:n.errorCode!=null&&e===n.effects.length-1})}}return i}function G(e){for(let t of e)if(t.errorCode)return t.errorCode;return null}function K(e){return R(e)?{mode:`dry-run`,reason:`This trace contains an external effect. Replay runs as a dry run with external effects stubbed.`}:{mode:`replay`}}var q=`10% + all errors`,J=600*1e3;function Y(e,t=Date.now()){let n=e.filter(e=>e.until>t);return n.length===0?q:`${q} · full: ${n.map(e=>e.flow).join(`, `)}`}function X(e,t,n=Date.now()){let r=n+J;return[...e.filter(e=>e.flow!==t&&e.until>n),{flow:t,until:r}]}function ne(e,t=Date.now()){return e.filter(e=>e.until>t)}var Z=d();function Q(){let e=p({from:`/traces`}),t=n({from:`/traces`}),a=s(),[l,d]=(0,v.useState)([]),[m]=(0,v.useState)(()=>_()),[y,S]=(0,v.useState)(0),[,C]=(0,v.useState)(0),w=e=>{t({search:T(e),replace:!0})},k=r({queryKey:[`console.runs.list`],queryFn:async()=>{let e=await o.runsList();if(e.error)throw Error(e.error.code);return e.data.runs},refetchInterval:5e3}),N=(0,v.useMemo)(()=>(k.data??[]).map(re),[k.data]);(0,v.useEffect)(()=>{if(N.length===0)return;if(m.visible.length===0){for(let e of N)m.offer({id:e.id,value:e,arrivedAt:e.startedAt});m.flush(),S(0),C(e=>e+1);return}let e=new Set(m.visible.map(e=>e.id));for(let t of m.pending)e.add(t.id);for(let t of N)e.has(t.id)?m.updateInPlace(t.id,t):m.offer({id:t.id,value:t,arrivedAt:Date.now()});S(m.pendingCount),C(e=>e+1)},[N,m]);let F=m.visible.map(e=>e.value),I=x(e.effect),R=(0,v.useMemo)(()=>j(F).filter(t=>{let n=g([t.root.flow,t.root.id,G(t.spans)??``],e.q),r=b(t.spans,I);return n&&r}),[F,e.q,I]),z=R.find(t=>t.rootId===e.trace)??(e.trace?j(F).find(t=>t.rootId===e.trace):void 0),B=z?M(z.spans,e.span):void 0,U=B?A(F,B):null,q=U?P(U.connected):new Set,J=U?V(H(U.connected),{expandedFolds:E(e)},q):null,Q=U?K(U.connected):null,$=i({mutationFn:async()=>{if(!U||!Q)return;let e=await o.tracesReplay({rootId:U.connected[0]?.id??U.current.id,dryRun:Q.mode===`dry-run`});if(e.error)throw Error(e.error.code);return e.data},onSuccess:()=>{a.invalidateQueries({queryKey:[`console.runs.list`]})}}),ae=ne(l);return(0,Z.jsxs)(`div`,{className:`flex h-full min-h-0 flex-col`,children:[(0,Z.jsxs)(`header`,{className:`flex shrink-0 flex-wrap items-end gap-4 border-b border-[var(--oke-line)] px-6 py-4`,children:[(0,Z.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[(0,Z.jsx)(`p`,{className:`text-xs uppercase tracking-[0.2em] text-[var(--oke-muted)]`,children:`Traces`}),(0,Z.jsx)(`h1`,{className:`text-xl font-semibold tracking-tight`,children:`Causal chain`}),(0,Z.jsxs)(`p`,{className:`text-xs text-[var(--oke-muted)]`,children:[`Sampling: `,Y(ae)]})]}),(0,Z.jsxs)(`label`,{className:`flex flex-col gap-1 text-sm`,children:[(0,Z.jsx)(`span`,{className:`text-[var(--oke-muted)]`,children:`Filter by effect`}),(0,Z.jsxs)(`select`,{"aria-label":`Filter by effect`,className:`min-h-8 border border-[var(--oke-line)] bg-transparent px-2 text-sm`,value:e.effect??``,onChange:t=>{let n=t.target.value;w(O(e,n?x(n):null))},children:[(0,Z.jsx)(`option`,{value:``,children:`All effects`}),(0,Z.jsx)(`option`,{value:`wrote:sql:bookings`,children:`Wrote sql:bookings`}),(0,Z.jsx)(`option`,{value:`sent`,children:`Sent (channel)`}),(0,Z.jsx)(`option`,{value:`asked`,children:`Asked a model`}),(0,Z.jsx)(`option`,{value:`secret`,children:`Read a secret`}),(0,Z.jsx)(`option`,{value:`cost:0.05`,children:`Cost > $0.05`})]})]}),(0,Z.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,Z.jsx)(u,{type:`button`,variant:`ghost`,onClick:()=>{let e=z?.root.flow??R[0]?.root.flow??`bookings.create`;d(t=>X(t,e))},children:`Trace flow fully for 10 minutes`}),(0,Z.jsx)(c,{count:y,onFlush:()=>{m.flush(),S(0),C(e=>e+1)}})]})]}),(0,Z.jsxs)(`div`,{className:`grid min-h-0 flex-1 grid-cols-1 md:grid-cols-[minmax(0,1fr)_minmax(0,1.4fr)]`,children:[(0,Z.jsx)(`section`,{"aria-label":`Trace list`,className:`min-h-0 overflow-auto border-r border-[var(--oke-line)]`,children:k.isLoading?(0,Z.jsx)(`p`,{className:`px-6 py-8 text-sm text-[var(--oke-muted)]`,children:`Loading traces…`}):R.length===0?(0,Z.jsx)(`p`,{className:`px-6 py-8 text-sm text-[var(--oke-muted)]`,children:`No traces yet. Invoke a flow or wait for traffic.`}):(0,Z.jsx)(`ul`,{className:`divide-y divide-[var(--oke-line)]`,children:R.map(t=>{let n=G(t.spans),r=W(t.spans),i=t.rootId===e.trace;return(0,Z.jsx)(`li`,{children:(0,Z.jsxs)(`button`,{type:`button`,"aria-pressed":i,className:f(`flex w-full min-h-10 flex-col gap-1 px-4 py-3 text-left text-sm`,i?`bg-[color-mix(in_oklab,var(--oke-fg)_6%,transparent)]`:`hover:bg-[color-mix(in_oklab,var(--oke-fg)_3%,transparent)]`),onClick:()=>{let n=M(t.spans);w(D(e,t.rootId,n))},children:[(0,Z.jsxs)(`div`,{className:`flex items-center justify-between gap-3`,children:[(0,Z.jsx)(`span`,{className:`font-medium`,children:t.root.flow}),n?(0,Z.jsx)(`span`,{role:`status`,className:`font-mono text-xs text-[var(--oke-danger)]`,children:n}):(0,Z.jsxs)(`span`,{className:`font-mono text-xs text-[var(--oke-muted)]`,children:[t.root.durationMs,`ms`]})]}),(0,Z.jsx)(ie,{bars:r})]})},t.rootId)})})}),(0,Z.jsx)(`section`,{"aria-label":`Trace detail`,className:`min-h-0 overflow-auto px-6 py-6`,"aria-live":`polite`,children:!U||!J?(0,Z.jsx)(`p`,{className:`text-sm text-[var(--oke-muted)]`,children:`Select a trace to see the causal chain and folded-time waterfall.`}):(0,Z.jsxs)(`div`,{className:`flex flex-col gap-6`,children:[(0,Z.jsxs)(`div`,{className:`flex flex-wrap items-start justify-between gap-3`,children:[(0,Z.jsxs)(`div`,{children:[(0,Z.jsx)(`h2`,{className:`text-lg font-semibold`,children:U.current.flow}),(0,Z.jsxs)(`p`,{className:`text-xs text-[var(--oke-muted)]`,children:[U.connected.length,` span`,U.connected.length===1?``:`s`,` · wall`,` `,J.wallDurationMs,`ms · display scale`,` `,Math.round(J.displayDurationMs),`ms`]})]}),(0,Z.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[(0,Z.jsx)(h,{to:`/runs`,search:{run:U.current.id},className:`inline-flex min-h-8 items-center border border-[var(--oke-line)] px-3 text-sm`,children:`Open in Runs`}),(0,Z.jsx)(u,{type:`button`,variant:Q?.mode===`dry-run`?`external`:`primary`,disabled:$.isPending,title:Q?.mode===`dry-run`?Q.reason:`Replay from the journal`,onClick:()=>$.mutate(),children:Q?.mode===`dry-run`?`Dry-run replay`:`Replay`}),(0,Z.jsx)(u,{type:`button`,variant:`ghost`,onClick:()=>w(ee(e)),children:`Close`})]})]}),Q?.mode===`dry-run`?(0,Z.jsx)(`p`,{role:`note`,className:`text-sm text-[var(--oke-external)]`,children:Q.reason}):null,(0,Z.jsxs)(`div`,{children:[(0,Z.jsx)(`h3`,{className:`mb-2 text-sm font-medium`,children:`Causal chain`}),(0,Z.jsxs)(`ol`,{className:`flex flex-col gap-1 border-l border-[var(--oke-line)] pl-4`,children:[U.parents.map(t=>(0,Z.jsx)(`li`,{children:(0,Z.jsx)(`button`,{type:`button`,className:`min-h-8 text-sm text-[var(--oke-muted)]`,onClick:()=>w({...e,span:t.id}),children:t.flow})},t.id)),(0,Z.jsxs)(`li`,{"aria-current":`true`,children:[(0,Z.jsx)(`span`,{className:`text-sm font-medium`,children:U.current.flow}),U.current.errorCode?(0,Z.jsx)(`span`,{role:`status`,className:`ml-2 font-mono text-xs text-[var(--oke-danger)]`,children:U.current.errorCode}):null,L(U.current.effects)===`external`?(0,Z.jsx)(`span`,{"aria-label":`external effect`,children:` ↗`}):null]}),U.children.map(t=>(0,Z.jsx)(`li`,{children:(0,Z.jsxs)(`button`,{type:`button`,className:`min-h-8 text-sm text-[var(--oke-muted)]`,onClick:()=>w({...e,span:t.id}),children:[t.flow,L(t.effects)===`external`?(0,Z.jsx)(`span`,{"aria-label":`external effect`,children:` ↗`}):null]})},t.id))]})]}),(0,Z.jsxs)(`div`,{children:[(0,Z.jsx)(`h3`,{id:`waterfall-heading`,className:`mb-2 text-sm font-medium`,children:`Waterfall`}),(0,Z.jsx)(`ul`,{"aria-labelledby":`waterfall-heading`,className:`flex min-h-10 list-none items-stretch gap-0.5 p-0`,children:J.segments.map(t=>t.kind===`fold`?(0,Z.jsx)(`li`,{style:{flex:`${t.displayMs} 1 0`,minWidth:24},children:(0,Z.jsx)(`button`,{type:`button`,"aria-expanded":t.expanded,className:`h-full min-h-10 w-full border border-dashed border-[var(--oke-line)] px-1 font-mono text-[10px] text-[var(--oke-muted)]`,onClick:()=>w(te(e,t.id)),children:t.label})},t.id):(0,Z.jsx)(`li`,{title:t.label,className:f(`min-h-10 px-1 text-[10px] leading-10`,t.tier===`external`?`bg-[var(--oke-external)] text-black`:`bg-[color-mix(in_oklab,var(--oke-accent)_55%,transparent)]`,t.failed&&`outline outline-2 outline-[var(--oke-danger)]`),style:{flex:`${t.displayMs} 1 0`,opacity:t.critical?1:.38,minWidth:4},children:(0,Z.jsxs)(`span`,{className:`sr-only`,children:[t.label,t.critical?` (critical path)`:``,t.failed?` (failed)`:``]})},t.id))}),(0,Z.jsx)(`p`,{className:`mt-2 text-xs text-[var(--oke-muted)]`,children:`Critical path at full opacity · dead time folded into expandable bars`})]})]})})]})]})}function re(e){return{id:e.id,...e.parentId?{parentId:e.parentId}:{},flow:e.flow,...e.unit?{unit:e.unit}:{},trigger:e.trigger,startedAt:e.startedAt,endedAt:e.endedAt,durationMs:e.durationMs,errorCode:e.error,cost:e.cost??void 0,sampled:e.sampled??(e.error?`error`:`sample`),effects:e.effects??[]}}function ie({bars:e}){return(0,Z.jsx)(`div`,{"aria-hidden":`true`,className:`relative h-2 w-full overflow-hidden bg-[color-mix(in_oklab,var(--oke-fg)_6%,transparent)]`,children:e.map((e,t)=>(0,Z.jsx)(`span`,{className:f(`absolute inset-y-0`,e.tier===`external`?`bg-[var(--oke-external)]`:e.failed?`bg-[var(--oke-danger)]`:`bg-[var(--oke-accent)]`),style:{left:`${e.start*100}%`,width:`${Math.max(2,e.width*100)}%`}},t))})}var $=t({default:()=>Q});export{w as n,$ as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as e,r as t}from"./rolldown-runtime-CNC7AqOf.js";import{C as n,Q as r,Z as i,a,b as o,c as s,d as c,et as l,g as u,nt as d,o as f,tt as p,u as m,w as h,y as g}from"./panel-access-Dd37LU2c.js";var _=g({q:o().optional(),name:o().optional(),action:u([`set`,`rotate`]).optional()});function v(e){let t=_.safeParse(e);return t.success?t.data:{}}function y(e){let t={};return e.q&&(t.q=e.q),e.name&&(t.name=e.name),e.action&&(t.action=e.action),t}function b(e,t){return{...e,name:t,action:void 0}}function x(e,t=``){let n=t.trim().toLowerCase(),r=n?e.filter(e=>e.name.toLowerCase().includes(n)||(e.description?.toLowerCase().includes(n)??!1)):e,i=[`secret`,`config`],a={secret:`Secrets`,config:`Config`};return i.map(e=>({kind:e,label:a[e],secrets:r.filter(t=>t.kind===e)})).filter(e=>e.secrets.length>0)}function S(e={production:!0}){return e.production?{kind:`typed`,phrase:`SET`,requireReason:!0}:{kind:`undo`,windowMs:15e3}}function C(e={production:!0}){return{kind:`typed`,phrase:`ROTATE`,requireReason:!0}}function w(e){if(e.count===0)return{summary:`No in-flight durable runs hold this secret`,detail:null,warn:!1};let t=e.longestOutstandingMs==null?null:T(e.longestOutstandingMs);return{summary:`${e.count} in-flight durable run(s) will wake holding a new key`,detail:t?`Longest outstanding wake in ${t}`:e.longestWakeAt==null?null:`Longest wake at ${new Date(e.longestWakeAt).toISOString()}`,warn:!0}}function T(e){if(e<1e3)return`${e}ms`;let t=Math.floor(e/1e3);if(t<60)return`${t}s`;let n=Math.floor(t/60);if(n<60)return`${n}m`;let r=Math.floor(n/60);return r<48?`${r}h`:`${Math.floor(r/24)}d`}function E(e){return{name:e.name,kind:e.kind,sensitive:e.sensitive,description:e.description??null,rotate:e.rotate??null,fingerprints:{...e.fingerprints},fingerprint:e.fingerprint,cleartext:e.sensitive?null:e.cleartext,winner:e.winner,resolution:e.resolution.map(e=>({...e})),readers:[...e.readers],blastRadius:{count:e.blastRadius.count,longestWakeAt:e.blastRadius.longestWakeAt,longestOutstandingMs:e.blastRadius.longestOutstandingMs,runIds:[...e.blastRadius.runIds]},lastReadAt:e.lastReadAt,sharedFingerprintEnvs:[...e.sharedFingerprintEnvs]}}function D(e){return JSON.stringify(e.map(e=>E(e)),null,2)}var O=e(d(),1),k=p();function A(){let e=h({from:`/vault`}),t=n({from:`/vault`}),o=l(),[u,d]=(0,O.useState)(``),[p,g]=(0,O.useState)(``),[_,v]=(0,O.useState)(``),[T,E]=(0,O.useState)(null),A=e=>{t({search:y(e),replace:!0})},j=r({queryKey:[`console.vault.list`],queryFn:async()=>{let e=await c.vaultList();if(e.error)throw Error(e.error.code);return e.data},refetchInterval:1e4}),M=j.data?.secrets??[],N=j.data?.env??`dev`,P=(0,O.useMemo)(()=>x(M,e.q??``),[M,e.q]),F=M.find(t=>t.name===e.name),I=F?w(F.blastRadius):null,L=S({production:!0}),R=C({production:!0}),z=e.action;(0,O.useEffect)(()=>{d(``),g(``),v(``),E(null)},[F?.name,z]);let B=i({mutationFn:async()=>{if(!F)throw Error(`no secret`);if(L.kind===`typed`){let e=a({typed:u,reason:p,phrase:L.phrase});if(e)throw Error(e.typed??e.reason??`confirm`)}let e=await c.vaultSet({name:F.name,value:_,confirmation:L.kind===`typed`?u:void 0,reason:p||void 0});if(e.error)throw Error(e.error.code);return e.data},onSuccess:async()=>{v(``),d(``),g(``),A({...e,action:void 0}),await o.invalidateQueries({queryKey:[`console.vault.list`]})}}),V=i({mutationFn:async()=>{if(!F)throw Error(`no secret`);let e=a({typed:u,reason:p,phrase:R.kind===`typed`?R.phrase:`ROTATE`});if(e)throw Error(e.typed??e.reason??`confirm`);let t=await c.vaultRotate({name:F.name,value:_,confirmation:u,reason:p});if(t.error)throw Error(t.error.code);return t.data},onSuccess:async()=>{v(``),d(``),g(``),A({...e,action:void 0}),await o.invalidateQueries({queryKey:[`console.vault.list`]})}});return(0,k.jsxs)(`div`,{className:`flex h-full min-h-0 flex-col`,children:[(0,k.jsxs)(`header`,{className:`flex shrink-0 flex-wrap items-end gap-3 border-b border-[var(--oke-line)] px-4 py-3`,children:[(0,k.jsxs)(`div`,{children:[(0,k.jsx)(`h1`,{className:`text-lg font-medium text-[var(--oke-fg)]`,children:`Vault`}),(0,k.jsx)(`p`,{className:`text-sm text-[var(--oke-muted)]`,children:`Fingerprints only — secrets are write-only`})]}),(0,k.jsxs)(`p`,{className:`text-sm text-[var(--oke-muted)]`,role:`status`,children:[`Environment `,N]}),(0,k.jsxs)(`label`,{className:`ml-auto flex min-w-[12rem] flex-col gap-1 text-sm`,children:[(0,k.jsx)(`span`,{className:`text-[var(--oke-muted)]`,children:`Filter vault`}),(0,k.jsx)(s,{"aria-label":`Filter vault`,value:e.q??``,onChange:t=>A({...e,q:t.currentTarget.value||void 0})})]}),(0,k.jsx)(f,{type:`button`,variant:`ghost`,onClick:()=>{let e=D(M);navigator.clipboard?.writeText(e),E(`Exported fingerprints only (no secret values)`)},children:`Export`})]}),T?(0,k.jsx)(`p`,{className:`px-4 py-2 text-sm text-[var(--oke-muted)]`,role:`status`,children:T}):null,(0,k.jsxs)(`div`,{className:`flex min-h-0 flex-1`,children:[(0,k.jsxs)(`section`,{"aria-label":`Vault list`,className:`w-80 shrink-0 overflow-y-auto border-r border-[var(--oke-line)]`,children:[(0,k.jsx)(`h2`,{className:`sr-only`,children:`Contracts`}),j.isLoading?(0,k.jsx)(`p`,{className:`p-4 text-sm text-[var(--oke-muted)]`,children:`Loading…`}):null,P.map(t=>(0,k.jsxs)(`section`,{"aria-label":t.label,className:`py-2`,children:[(0,k.jsx)(`h3`,{className:`px-4 py-1 text-xs uppercase tracking-wide text-[var(--oke-muted)]`,children:t.label}),(0,k.jsx)(`ul`,{children:t.secrets.map(t=>(0,k.jsx)(`li`,{children:(0,k.jsxs)(`button`,{type:`button`,"aria-pressed":t.name===F?.name,className:m(`flex min-h-10 w-full flex-col items-start px-4 py-2 text-left text-sm`,t.name===F?.name?`bg-[var(--oke-line)] text-[var(--oke-fg)]`:`text-[var(--oke-muted)] hover:text-[var(--oke-fg)]`),onClick:()=>A(b(e,t.name)),children:[(0,k.jsx)(`span`,{className:`font-mono`,children:t.name}),(0,k.jsx)(`span`,{className:`truncate text-xs`,children:t.sensitive?t.fingerprint??`unset`:t.cleartext??`unset`}),t.blastRadius.count>0?(0,k.jsxs)(`span`,{role:`status`,className:`text-xs text-[var(--oke-danger)]`,children:[`blast `,t.blastRadius.count]}):null,t.sharedFingerprintEnvs.length>0?(0,k.jsx)(`span`,{role:`status`,className:`text-xs`,children:`shared fingerprint`}):null]})},t.name))})]},t.kind))]}),(0,k.jsx)(`section`,{"aria-label":`Vault detail`,"aria-live":`polite`,className:`min-w-0 flex-1 overflow-y-auto p-4`,children:F?(0,k.jsxs)(`div`,{className:`flex max-w-2xl flex-col gap-6`,children:[(0,k.jsxs)(`div`,{children:[(0,k.jsx)(`h2`,{className:`font-mono text-lg text-[var(--oke-fg)]`,children:F.name}),F.description?(0,k.jsx)(`p`,{className:`text-sm text-[var(--oke-muted)]`,children:F.description}):null,F.rotate?(0,k.jsxs)(`p`,{className:`text-sm text-[var(--oke-muted)]`,children:[`Rotate hint: `,F.rotate]}):null]}),(0,k.jsxs)(`section`,{"aria-label":`Fingerprints by environment`,children:[(0,k.jsx)(`h3`,{className:`mb-2 text-sm font-medium`,children:`Fingerprints`}),F.sensitive?(0,k.jsxs)(`ul`,{className:`space-y-1 font-mono text-sm`,children:[Object.entries(F.fingerprints).map(([e,t])=>(0,k.jsxs)(`li`,{children:[(0,k.jsxs)(`span`,{className:`text-[var(--oke-muted)]`,children:[e,`:`]}),` `,t,F.sharedFingerprintEnvs.includes(e)?(0,k.jsxs)(`span`,{role:`status`,className:`ml-2 text-[var(--oke-warn,var(--oke-muted))]`,children:[`(matches `,N,` — warning, may be deliberate)`]}):null]},e)),Object.keys(F.fingerprints).length===0?(0,k.jsx)(`li`,{className:`text-[var(--oke-muted)]`,children:`Unset`}):null]}):(0,k.jsx)(`p`,{className:`font-mono text-sm`,role:`status`,children:F.cleartext??`unset`})]}),(0,k.jsxs)(`section`,{"aria-label":`Resolution chain`,children:[(0,k.jsx)(`h3`,{className:`mb-2 text-sm font-medium`,children:`Resolution chain`}),(0,k.jsx)(`ol`,{className:`list-decimal space-y-1 pl-5 text-sm`,children:F.resolution.map(e=>(0,k.jsxs)(`li`,{className:e.won?`text-[var(--oke-fg)]`:`text-[var(--oke-muted)]`,children:[(0,k.jsx)(`span`,{className:`font-mono`,children:e.source}),e.won?` — won`:e.present?` — present (lost)`:` — absent`]},e.source))}),(0,k.jsxs)(`p`,{className:`mt-2 text-sm`,role:`status`,children:[`Winner:`,` `,(0,k.jsx)(`span`,{className:`font-mono`,children:F.winner??`none`})]})]}),(0,k.jsxs)(`section`,{"aria-label":`Readers`,children:[(0,k.jsx)(`h3`,{className:`mb-2 text-sm font-medium`,children:`Readers`}),(0,k.jsxs)(`p`,{className:`text-sm text-[var(--oke-muted)]`,children:[`Flows that declare`,` `,(0,k.jsxs)(`code`,{className:`font-mono`,children:[`fx.vault(`,F.name,`)`]})]}),(0,k.jsx)(`ul`,{className:`mt-1 list-disc pl-5 font-mono text-sm`,children:F.readers.length===0?(0,k.jsx)(`li`,{className:`text-[var(--oke-muted)]`,children:`none`}):F.readers.map(e=>(0,k.jsx)(`li`,{children:e},e))})]}),(0,k.jsxs)(`section`,{"aria-label":`Rotation blast radius`,children:[(0,k.jsx)(`h3`,{className:`mb-2 text-sm font-medium`,children:`Rotation blast radius`}),I?(0,k.jsxs)(k.Fragment,{children:[(0,k.jsx)(`p`,{className:`text-sm`,role:I.warn?`alert`:`status`,children:I.summary}),I.detail?(0,k.jsx)(`p`,{className:`text-sm text-[var(--oke-muted)]`,children:I.detail}):null,F.blastRadius.runIds.length>0?(0,k.jsx)(`p`,{className:`mt-1 font-mono text-xs text-[var(--oke-muted)]`,children:F.blastRadius.runIds.join(`, `)}):null]}):null]}),(0,k.jsxs)(`section`,{"aria-label":`Last read`,children:[(0,k.jsx)(`h3`,{className:`mb-2 text-sm font-medium`,children:`Last read`}),(0,k.jsx)(`p`,{className:`text-sm`,role:`status`,children:F.lastReadAt==null?`Never read — possible dead secret`:new Date(F.lastReadAt).toISOString()})]}),(0,k.jsxs)(`section`,{"aria-label":`Set or rotate`,className:`space-y-3`,children:[(0,k.jsx)(`h3`,{className:`text-sm font-medium`,children:`Set / rotate`}),(0,k.jsx)(`p`,{className:`text-sm text-[var(--oke-muted)]`,children:`Write-only. Values are never revealed after submit. No preview.`}),(0,k.jsxs)(`div`,{className:`flex gap-2`,children:[(0,k.jsx)(f,{type:`button`,variant:z===`set`?`primary`:`ghost`,"aria-pressed":z===`set`,onClick:()=>A({...e,action:`set`}),children:`Set`}),(0,k.jsx)(f,{type:`button`,variant:z===`rotate`?`danger`:`ghost`,"aria-pressed":z===`rotate`,onClick:()=>A({...e,action:`rotate`}),children:`Rotate`})]}),z?(0,k.jsxs)(`div`,{className:`space-y-3 border border-[var(--oke-line)] p-3`,children:[(0,k.jsxs)(`label`,{className:`flex flex-col gap-1 text-sm`,children:[(0,k.jsx)(`span`,{children:`New value`}),(0,k.jsx)(s,{"aria-label":`New vault value`,type:`password`,autoComplete:`off`,value:_,onChange:e=>v(e.currentTarget.value)})]}),(z===`rotate`||L.kind===`typed`)&&(0,k.jsxs)(k.Fragment,{children:[(0,k.jsxs)(`label`,{className:`flex flex-col gap-1 text-sm`,children:[(0,k.jsxs)(`span`,{children:[`Type`,` `,z===`rotate`?R.kind===`typed`?R.phrase:`ROTATE`:L.kind===`typed`?L.phrase:`SET`,` `,`to confirm`]}),(0,k.jsx)(s,{"aria-label":`Confirmation phrase`,value:u,onChange:e=>d(e.currentTarget.value)})]}),(0,k.jsxs)(`label`,{className:`flex flex-col gap-1 text-sm`,children:[(0,k.jsx)(`span`,{children:`Reason`}),(0,k.jsx)(s,{"aria-label":`Reason for vault write`,value:p,onChange:e=>g(e.currentTarget.value)})]})]}),(0,k.jsx)(f,{type:`button`,variant:z===`rotate`?`danger`:`primary`,disabled:!_||(z===`set`?B.isPending:V.isPending),onClick:()=>{z===`set`?B.mutate():V.mutate()},children:z===`set`?`Commit set`:`Commit rotate`}),(B.isError||V.isError)&&(0,k.jsx)(`p`,{role:`alert`,className:`text-sm text-[var(--oke-danger)]`,children:(B.error??V.error)?.message??`Failed`})]}):null]})]}):(0,k.jsx)(`p`,{className:`text-sm text-[var(--oke-muted)]`,children:`Select a contract to inspect fingerprints, resolution, and readers.`})})]})]})}var j=t({default:()=>A});export{v as n,j as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,t,n)=>()=>{if(n)throw n[0];try{return e&&(t=e(e=0)),t}catch(e){throw n=[e],e}},s=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t),e=null),t.exports),c=(e,n)=>{let r={};for(var i in e)t(r,i,{get:e[i],enumerable:!0});return n||t(r,Symbol.toStringTag,{value:`Module`}),r},l=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},u=(n,r,a)=>(a=n==null?{}:e(i(n)),l(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n)),d=e=>a.call(e,`module.exports`)?e[`module.exports`]:l(t({},`__esModule`,{value:!0}),e);export{u as a,d as i,o as n,c as r,s as t};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */
|
|
2
|
+
@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-space-y-reverse:0;--tw-divide-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-outline-style:solid;--tw-duration:initial}}}@layer theme{:root,:host{--font-sans:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-red-600:oklch(57.7% .245 27.325);--color-red-700:oklch(50.5% .213 27.518);--color-amber-800:oklch(47.3% .137 46.201);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-xs:20rem;--container-sm:24rem;--container-md:28rem;--container-lg:32rem;--container-2xl:42rem;--container-5xl:64rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height:calc(1.5 / 1);--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--text-3xl:1.875rem;--text-3xl--line-height:calc(2.25 / 1.875);--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--tracking-tight:-.025em;--tracking-wide:.025em;--tracking-wider:.05em;--leading-snug:1.375;--leading-relaxed:1.625;--radius-sm:.25rem;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring:where(:not(iframe)){outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.sticky{position:sticky}.inset-0{inset:0}.inset-y-0{inset-block:0}.top-0{top:0}.right-\[min\(28\%\,20rem\)\]{right:min(28%,20rem)}.left-\[min\(28\%\,20rem\)\]{left:min(28%,20rem)}.z-10{z-index:10}.z-20{z-index:20}.z-50{z-index:50}.col-span-2{grid-column:span 2/span 2}.mx-auto{margin-inline:auto}.mt-1{margin-top:var(--spacing)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-6{margin-top:calc(var(--spacing) * 6)}.mt-8{margin-top:calc(var(--spacing) * 8)}.mt-auto{margin-top:auto}.mr-2{margin-right:calc(var(--spacing) * 2)}.mr-3{margin-right:calc(var(--spacing) * 3)}.mr-auto{margin-right:auto}.mb-1{margin-bottom:var(--spacing)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.mb-8{margin-bottom:calc(var(--spacing) * 8)}.ml-1{margin-left:var(--spacing)}.ml-2{margin-left:calc(var(--spacing) * 2)}.ml-auto{margin-left:auto}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.size-1\.5{width:calc(var(--spacing) * 1.5);height:calc(var(--spacing) * 1.5)}.h-1\.5{height:calc(var(--spacing) * 1.5)}.h-2{height:calc(var(--spacing) * 2)}.h-6{height:calc(var(--spacing) * 6)}.h-12{height:calc(var(--spacing) * 12)}.h-16{height:calc(var(--spacing) * 16)}.h-40{height:calc(var(--spacing) * 40)}.h-64{height:calc(var(--spacing) * 64)}.h-\[calc\(100vh-3rem\)\]{height:calc(100vh - 3rem)}.h-auto{height:auto}.h-full{height:100%}.max-h-48{max-height:calc(var(--spacing) * 48)}.min-h-0{min-height:0}.min-h-2{min-height:calc(var(--spacing) * 2)}.min-h-8{min-height:calc(var(--spacing) * 8)}.min-h-10{min-height:calc(var(--spacing) * 10)}.min-h-20{min-height:calc(var(--spacing) * 20)}.min-h-24{min-height:calc(var(--spacing) * 24)}.w-2{width:calc(var(--spacing) * 2)}.w-5{width:calc(var(--spacing) * 5)}.w-6{width:calc(var(--spacing) * 6)}.w-16{width:calc(var(--spacing) * 16)}.w-24{width:calc(var(--spacing) * 24)}.w-56{width:calc(var(--spacing) * 56)}.w-64{width:calc(var(--spacing) * 64)}.w-72{width:calc(var(--spacing) * 72)}.w-80{width:calc(var(--spacing) * 80)}.w-full{width:100%}.max-w-2xl{max-width:var(--container-2xl)}.max-w-5xl{max-width:var(--container-5xl)}.max-w-lg{max-width:var(--container-lg)}.max-w-md{max-width:var(--container-md)}.max-w-prose{max-width:65ch}.max-w-sm{max-width:var(--container-sm)}.max-w-xs{max-width:var(--container-xs)}.min-w-0{min-width:0}.min-w-2{min-width:calc(var(--spacing) * 2)}.min-w-8{min-width:calc(var(--spacing) * 8)}.min-w-\[4px\]{min-width:4px}.min-w-\[8rem\]{min-width:8rem}.min-w-\[12rem\]{min-width:12rem}.min-w-\[16rem\]{min-width:16rem}.flex-1{flex:1}.shrink-0{flex-shrink:0}.basis-full{flex-basis:100%}.border-collapse{border-collapse:collapse}.cursor-pointer{cursor:pointer}.list-inside{list-style-position:inside}.list-decimal{list-style-type:decimal}.list-disc{list-style-type:disc}.list-none{list-style-type:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-\[minmax\(0\,8rem\)_1fr\]{grid-template-columns:minmax(0,8rem) 1fr}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.place-items-center{place-items:center}.items-baseline{align-items:baseline}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.items-stretch{align-items:stretch}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-0{gap:0}.gap-0\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:var(--spacing)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-6{gap:calc(var(--spacing) * 6)}.gap-8{gap:calc(var(--spacing) * 8)}.gap-px{gap:1px}:where(.space-y-0\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * .5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * .5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(var(--spacing) * var(--tw-space-y-reverse));margin-block-end:calc(var(--spacing) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 6) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-y-reverse)))}.gap-x-4{column-gap:calc(var(--spacing) * 4)}.gap-y-1{row-gap:var(--spacing)}.gap-y-2{row-gap:calc(var(--spacing) * 2)}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px * var(--tw-divide-y-reverse));border-bottom-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)))}:where(.divide-\[var\(--oke-line\)\]>:not(:last-child)){border-color:var(--oke-line)}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-full{border-radius:2147483647px}.rounded-sm{border-radius:var(--radius-sm)}.border{border-style:var(--tw-border-style);border-width:1px}.border-x{border-inline-style:var(--tw-border-style);border-inline-width:1px}.border-y{border-block-style:var(--tw-border-style);border-block-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-\[var\(--oke-accent\)\]{border-color:var(--oke-accent)}.border-\[var\(--oke-external\)\]{border-color:var(--oke-external)}.border-\[var\(--oke-line\)\],.border-\[var\(--oke-line\)\]\/50{border-color:var(--oke-line)}@supports (color:color-mix(in lab, red, red)){.border-\[var\(--oke-line\)\]\/50{border-color:color-mix(in oklab, var(--oke-line) 50%, transparent)}}.border-\[var\(--oke-muted\)\]{border-color:var(--oke-muted)}.bg-\[color-mix\(in_oklab\,var\(--oke-accent\)_55\%\,transparent\)\]{background-color:var(--oke-accent)}@supports (color:color-mix(in lab, red, red)){.bg-\[color-mix\(in_oklab\,var\(--oke-accent\)_55\%\,transparent\)\]{background-color:color-mix(in oklab,var(--oke-accent) 55%,transparent)}}.bg-\[color-mix\(in_oklab\,var\(--oke-fg\)_3\%\,transparent\)\]{background-color:var(--oke-fg)}@supports (color:color-mix(in lab, red, red)){.bg-\[color-mix\(in_oklab\,var\(--oke-fg\)_3\%\,transparent\)\]{background-color:color-mix(in oklab,var(--oke-fg) 3%,transparent)}}.bg-\[color-mix\(in_oklab\,var\(--oke-fg\)_6\%\,transparent\)\]{background-color:var(--oke-fg)}@supports (color:color-mix(in lab, red, red)){.bg-\[color-mix\(in_oklab\,var\(--oke-fg\)_6\%\,transparent\)\]{background-color:color-mix(in oklab,var(--oke-fg) 6%,transparent)}}.bg-\[color-mix\(in_oklab\,var\(--oke-fg\)_35\%\,transparent\)\]{background-color:var(--oke-fg)}@supports (color:color-mix(in lab, red, red)){.bg-\[color-mix\(in_oklab\,var\(--oke-fg\)_35\%\,transparent\)\]{background-color:color-mix(in oklab,var(--oke-fg) 35%,transparent)}}.bg-\[var\(--oke-accent\)\],.bg-\[var\(--oke-accent\)\]\/15{background-color:var(--oke-accent)}@supports (color:color-mix(in lab, red, red)){.bg-\[var\(--oke-accent\)\]\/15{background-color:color-mix(in oklab, var(--oke-accent) 15%, transparent)}}.bg-\[var\(--oke-bg\)\]{background-color:var(--oke-bg)}.bg-\[var\(--oke-danger\)\],.bg-\[var\(--oke-danger\)\]\/10{background-color:var(--oke-danger)}@supports (color:color-mix(in lab, red, red)){.bg-\[var\(--oke-danger\)\]\/10{background-color:color-mix(in oklab, var(--oke-danger) 10%, transparent)}}.bg-\[var\(--oke-external\)\]{background-color:var(--oke-external)}.bg-\[var\(--oke-fg\)\]{background-color:var(--oke-fg)}.bg-\[var\(--oke-line\)\],.bg-\[var\(--oke-line\)\]\/40{background-color:var(--oke-line)}@supports (color:color-mix(in lab, red, red)){.bg-\[var\(--oke-line\)\]\/40{background-color:color-mix(in oklab, var(--oke-line) 40%, transparent)}}.bg-black\/20{background-color:#0003}@supports (color:color-mix(in lab, red, red)){.bg-black\/20{background-color:color-mix(in oklab, var(--color-black) 20%, transparent)}}.bg-black\/50{background-color:#00000080}@supports (color:color-mix(in lab, red, red)){.bg-black\/50{background-color:color-mix(in oklab, var(--color-black) 50%, transparent)}}.bg-transparent{background-color:#0000}.fill-\[var\(--oke-fg\)\]{fill:var(--oke-fg)}.fill-\[var\(--oke-muted\)\]{fill:var(--oke-muted)}.p-0{padding:0}.p-2{padding:calc(var(--spacing) * 2)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-6{padding:calc(var(--spacing) * 6)}.px-1{padding-inline:var(--spacing)}.px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-5{padding-inline:calc(var(--spacing) * 5)}.px-6{padding-inline:calc(var(--spacing) * 6)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:var(--spacing)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-5{padding-block:calc(var(--spacing) * 5)}.py-6{padding-block:calc(var(--spacing) * 6)}.py-8{padding-block:calc(var(--spacing) * 8)}.py-16{padding-block:calc(var(--spacing) * 16)}.pt-3{padding-top:calc(var(--spacing) * 3)}.pt-4{padding-top:calc(var(--spacing) * 4)}.pr-2{padding-right:calc(var(--spacing) * 2)}.pr-3{padding-right:calc(var(--spacing) * 3)}.pr-4{padding-right:calc(var(--spacing) * 4)}.pb-1{padding-bottom:var(--spacing)}.pb-2{padding-bottom:calc(var(--spacing) * 2)}.pb-4{padding-bottom:calc(var(--spacing) * 4)}.pl-4{padding-left:calc(var(--spacing) * 4)}.pl-5{padding-left:calc(var(--spacing) * 5)}.text-left{text-align:left}.align-top{vertical-align:top}.font-mono{font-family:var(--font-mono)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[13px\]{font-size:13px}.leading-10{--tw-leading:calc(var(--spacing) * 10);line-height:calc(var(--spacing) * 10)}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-\[0\.2em\]{--tw-tracking:.2em;letter-spacing:.2em}.tracking-\[0\.14em\]{--tw-tracking:.14em;letter-spacing:.14em}.tracking-\[0\.15em\]{--tw-tracking:.15em;letter-spacing:.15em}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.break-all{word-break:break-all}.whitespace-pre-wrap{white-space:pre-wrap}.text-\[var\(--oke-accent\)\]{color:var(--oke-accent)}.text-\[var\(--oke-danger\)\]{color:var(--oke-danger)}.text-\[var\(--oke-external\)\]{color:var(--oke-external)}.text-\[var\(--oke-fg\)\]{color:var(--oke-fg)}.text-\[var\(--oke-muted\)\]{color:var(--oke-muted)}.text-\[var\(--oke-warn\,var\(--oke-muted\)\)\]{color:var(--oke-warn,var(--oke-muted))}.text-amber-800{color:var(--color-amber-800)}.text-black{color:var(--color-black)}.text-red-600{color:var(--color-red-600)}.text-red-700{color:var(--color-red-700)}.text-white{color:var(--color-white)}.normal-case{text-transform:none}.uppercase{text-transform:uppercase}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.line-through{text-decoration-line:line-through}.underline{text-decoration-line:underline}.decoration-\[var\(--oke-line\)\]{-webkit-text-decoration-color:var(--oke-line);-webkit-text-decoration-color:var(--oke-line);text-decoration-color:var(--oke-line)}.underline-offset-2{text-underline-offset:2px}.opacity-40{opacity:.4}.opacity-70{opacity:.7}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.outline-2{outline-style:var(--tw-outline-style);outline-width:2px}.outline-\[var\(--oke-danger\)\]{outline-color:var(--oke-danger)}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-150{--tw-duration:.15s;transition-duration:.15s}.placeholder\:text-\[var\(--oke-muted\)\]::placeholder{color:var(--oke-muted)}@media (hover:hover){.hover\:bg-\[color-mix\(in_oklab\,var\(--oke-fg\)_3\%\,transparent\)\]:hover{background-color:var(--oke-fg)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-\[color-mix\(in_oklab\,var\(--oke-fg\)_3\%\,transparent\)\]:hover{background-color:color-mix(in oklab,var(--oke-fg) 3%,transparent)}}.hover\:bg-\[var\(--oke-line\)\]\/20:hover{background-color:var(--oke-line)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-\[var\(--oke-line\)\]\/20:hover{background-color:color-mix(in oklab, var(--oke-line) 20%, transparent)}}.hover\:bg-\[var\(--oke-line\)\]\/40:hover{background-color:var(--oke-line)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-\[var\(--oke-line\)\]\/40:hover{background-color:color-mix(in oklab, var(--oke-line) 40%, transparent)}}.hover\:text-\[var\(--oke-fg\)\]:hover{color:var(--oke-fg)}.hover\:underline:hover{text-decoration-line:underline}}.focus\:not-sr-only:focus{clip-path:none;white-space:normal;width:auto;height:auto;margin:0;padding:0;position:static;overflow:visible}.focus\:absolute:focus{position:absolute}.focus\:top-2:focus{top:calc(var(--spacing) * 2)}.focus\:left-2:focus{left:calc(var(--spacing) * 2)}.focus\:z-50:focus{z-index:50}.focus\:bg-\[var\(--oke-bg\)\]:focus{background-color:var(--oke-bg)}.focus\:px-3:focus{padding-inline:calc(var(--spacing) * 3)}.focus\:py-2:focus{padding-block:calc(var(--spacing) * 2)}.disabled\:opacity-40:disabled{opacity:.4}@media (width>=40rem){.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}@media (width>=48rem){.md\:max-w-xs{max-width:var(--container-xs)}.md\:grid-cols-\[minmax\(0\,1fr\)_minmax\(0\,1\.4fr\)\]{grid-template-columns:minmax(0,1fr) minmax(0,1.4fr)}.md\:grid-cols-\[minmax\(0\,1fr\)_minmax\(0\,1\.5fr\)\]{grid-template-columns:minmax(0,1fr) minmax(0,1.5fr)}}@media (width>=64rem){.lg\:w-80{width:calc(var(--spacing) * 80)}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-\[1fr_1fr_1\.2fr\]{grid-template-columns:1fr 1fr 1.2fr}.lg\:grid-cols-\[14rem_1fr_18rem\]{grid-template-columns:14rem 1fr 18rem}.lg\:grid-cols-\[minmax\(0\,1\.2fr\)_minmax\(0\,1fr\)\]{grid-template-columns:minmax(0,1.2fr) minmax(0,1fr)}.lg\:flex-row{flex-direction:row}.lg\:border-t-0{border-top-style:var(--tw-border-style);border-top-width:0}.lg\:border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.lg\:border-b-0{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.lg\:border-l{border-left-style:var(--tw-border-style);border-left-width:1px}}}:root{--oke-bg:#0e1116;--oke-fg:#e8eaed;--oke-muted:#9aa3b2;--oke-line:var(--oke-fg)}@supports (color:color-mix(in lab, red, red)){:root{--oke-line:color-mix(in oklab, var(--oke-fg) 12%, transparent)}}:root{--oke-accent:#3d9a6a;--oke-external:#d97706;--oke-danger:#c44b4b;--oke-font:"IBM Plex Sans", "Segoe UI", sans-serif;--oke-mono:"IBM Plex Mono", ui-monospace, monospace;--oke-dim:.38}@font-face{font-family:IBM Plex Sans;font-style:normal;font-weight:400 600;font-display:swap;src:local(IBM Plex Sans)}html,body,#root{height:100%}body{font-family:var(--oke-font);background:radial-gradient(1200px 600px at 10% -10%, #1a2433 0%, transparent 55%), radial-gradient(900px 500px at 100% 0%, #13201a 0%, transparent 50%), var(--oke-bg);color:var(--oke-fg);font-variant-numeric:tabular-nums;margin:0}*{box-sizing:border-box}a{color:inherit;text-decoration:none}:focus-visible{outline:2px solid var(--oke-accent);outline-offset:2px}@media (prefers-reduced-motion:reduce){*,:before,:after{transition:none!important;animation:none!important}}.sr-only{clip:rect(0, 0, 0, 0);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-duration{syntax:"*";inherits:false}
|
|
3
|
+
/*$vite$:1*/
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8" />
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
|
+
<title>oke Console</title>
|
|
7
|
+
<script type="module" crossorigin src="/assets/index-B71Yl_SS.js"></script>
|
|
8
|
+
<link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-CNC7AqOf.js">
|
|
9
|
+
<link rel="stylesheet" crossorigin href="/assets/style-Cnl7WLya.css">
|
|
10
|
+
</head>
|
|
11
|
+
<body>
|
|
12
|
+
<div id="root"></div>
|
|
13
|
+
</body>
|
|
14
|
+
</html>
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Static causality markup for the axe gate — same landmarks / roles as the
|
|
3
|
+
* live panel, fed by a Manifest fixture (no router / network).
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import {
|
|
7
|
+
buildCausalityGraph,
|
|
8
|
+
centreFlows,
|
|
9
|
+
leftCauses,
|
|
10
|
+
rightEffects,
|
|
11
|
+
} from "./graph.ts";
|
|
12
|
+
import type { Manifest } from "../../../manifest/types.ts";
|
|
13
|
+
import { TIER_LABEL, TIER_ORDER } from "./tiers.ts";
|
|
14
|
+
|
|
15
|
+
/** Props for {@link FlowsA11yView}. */
|
|
16
|
+
export interface FlowsA11yViewProps {
|
|
17
|
+
readonly manifest: Manifest;
|
|
18
|
+
readonly effect?: string;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Accessible three-column causality view for CI.
|
|
23
|
+
*
|
|
24
|
+
* @param props - Manifest + optional effect selection
|
|
25
|
+
*/
|
|
26
|
+
export function FlowsA11yView(props: FlowsA11yViewProps) {
|
|
27
|
+
const graph = buildCausalityGraph(props.manifest);
|
|
28
|
+
const selection = props.effect
|
|
29
|
+
? ({ sel: "effect" as const, effect: props.effect })
|
|
30
|
+
: ({ sel: "none" as const });
|
|
31
|
+
const causes = leftCauses(graph, selection);
|
|
32
|
+
const flows = centreFlows(graph, selection);
|
|
33
|
+
const effects = rightEffects(graph, selection);
|
|
34
|
+
|
|
35
|
+
return (
|
|
36
|
+
<div className="flows-a11y">
|
|
37
|
+
<a href="#flows-main">Skip to main content</a>
|
|
38
|
+
<header>
|
|
39
|
+
<h1>Flows</h1>
|
|
40
|
+
<p>Causes ← Flows → Effects</p>
|
|
41
|
+
<label>
|
|
42
|
+
Filter
|
|
43
|
+
<input type="search" aria-label="Filter flows" />
|
|
44
|
+
</label>
|
|
45
|
+
</header>
|
|
46
|
+
<main id="flows-main">
|
|
47
|
+
<div
|
|
48
|
+
style={{
|
|
49
|
+
display: "grid",
|
|
50
|
+
gridTemplateColumns: "1fr 1.4fr 1fr",
|
|
51
|
+
gap: "0.5rem",
|
|
52
|
+
}}
|
|
53
|
+
>
|
|
54
|
+
<section aria-label="Causes">
|
|
55
|
+
<h2>Causes</h2>
|
|
56
|
+
<ul>
|
|
57
|
+
{causes.map((c) => (
|
|
58
|
+
<li key={c.id}>
|
|
59
|
+
<button
|
|
60
|
+
type="button"
|
|
61
|
+
aria-pressed={false}
|
|
62
|
+
style={{
|
|
63
|
+
minHeight: 32,
|
|
64
|
+
minWidth: 24,
|
|
65
|
+
opacity: c.match ? 1 : 0.38,
|
|
66
|
+
}}
|
|
67
|
+
>
|
|
68
|
+
{c.label}
|
|
69
|
+
</button>
|
|
70
|
+
</li>
|
|
71
|
+
))}
|
|
72
|
+
</ul>
|
|
73
|
+
</section>
|
|
74
|
+
<section aria-label="Flows">
|
|
75
|
+
<h2>Flows</h2>
|
|
76
|
+
<ul>
|
|
77
|
+
{flows.map((f) => (
|
|
78
|
+
<li key={f.id}>
|
|
79
|
+
<button
|
|
80
|
+
type="button"
|
|
81
|
+
aria-pressed={false}
|
|
82
|
+
style={{
|
|
83
|
+
minHeight: 32,
|
|
84
|
+
width: "100%",
|
|
85
|
+
opacity: f.match ? 1 : 0.38,
|
|
86
|
+
}}
|
|
87
|
+
>
|
|
88
|
+
{f.id}
|
|
89
|
+
{f.external ? (
|
|
90
|
+
<span aria-label="external effect"> ↗</span>
|
|
91
|
+
) : null}
|
|
92
|
+
</button>
|
|
93
|
+
</li>
|
|
94
|
+
))}
|
|
95
|
+
</ul>
|
|
96
|
+
</section>
|
|
97
|
+
<section aria-label="Effects">
|
|
98
|
+
<h2>Effects</h2>
|
|
99
|
+
{TIER_ORDER.map((tier) => {
|
|
100
|
+
const rows = effects.filter((e) => e.tier === tier);
|
|
101
|
+
if (rows.length === 0) return null;
|
|
102
|
+
return (
|
|
103
|
+
<div key={tier}>
|
|
104
|
+
<h3>{TIER_LABEL[tier]}</h3>
|
|
105
|
+
<ul>
|
|
106
|
+
{rows.map((e) => (
|
|
107
|
+
<li key={e.ref}>
|
|
108
|
+
<button
|
|
109
|
+
type="button"
|
|
110
|
+
aria-pressed={props.effect === e.ref}
|
|
111
|
+
style={{
|
|
112
|
+
minHeight: 32,
|
|
113
|
+
minWidth: 24,
|
|
114
|
+
opacity: e.match ? 1 : 0.38,
|
|
115
|
+
color:
|
|
116
|
+
tier === "external" ? "#d97706" : undefined,
|
|
117
|
+
}}
|
|
118
|
+
>
|
|
119
|
+
{e.ref}
|
|
120
|
+
{tier === "external" ? (
|
|
121
|
+
<span aria-hidden="true"> ↗</span>
|
|
122
|
+
) : null}
|
|
123
|
+
</button>
|
|
124
|
+
</li>
|
|
125
|
+
))}
|
|
126
|
+
</ul>
|
|
127
|
+
</div>
|
|
128
|
+
);
|
|
129
|
+
})}
|
|
130
|
+
</section>
|
|
131
|
+
</div>
|
|
132
|
+
</main>
|
|
133
|
+
<aside
|
|
134
|
+
role="dialog"
|
|
135
|
+
aria-modal="true"
|
|
136
|
+
aria-labelledby="drawer-title"
|
|
137
|
+
hidden={!props.effect}
|
|
138
|
+
>
|
|
139
|
+
<h2 id="drawer-title">Flow workshop</h2>
|
|
140
|
+
<label>
|
|
141
|
+
As whom
|
|
142
|
+
<select aria-label="Identity">
|
|
143
|
+
<option>Demo User</option>
|
|
144
|
+
</select>
|
|
145
|
+
</label>
|
|
146
|
+
<button type="button" style={{ minHeight: 32, minWidth: 24 }}>
|
|
147
|
+
Invoke
|
|
148
|
+
</button>
|
|
149
|
+
<button type="button" style={{ minHeight: 32, minWidth: 24 }}>
|
|
150
|
+
Close
|
|
151
|
+
</button>
|
|
152
|
+
</aside>
|
|
153
|
+
</div>
|
|
154
|
+
);
|
|
155
|
+
}
|