okengine 0.2.6 → 0.3.2
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 +33 -30
- package/README.md +74 -340
- package/{spec/manifest.v1.schema.json → manifest.v1.schema.json} +40 -9
- package/package.json +47 -44
- package/site/content/docs/ai/llms-txt.mdx +54 -0
- package/site/content/docs/ai/mcp.mdx +123 -0
- package/site/content/docs/ai/meta.json +5 -0
- package/site/content/docs/ai/skills.mdx +53 -0
- package/site/content/docs/console/access.mdx +29 -0
- package/site/content/docs/console/ai.mdx +35 -0
- package/site/content/docs/console/architecture.mdx +35 -0
- package/site/content/docs/console/channels.mdx +37 -0
- package/site/content/docs/console/clock.mdx +31 -0
- package/site/content/docs/console/flows.mdx +31 -0
- package/site/content/docs/console/gates.mdx +35 -0
- package/site/content/docs/console/manifest-diff.mdx +34 -0
- package/site/content/docs/console/meta.json +23 -0
- package/site/content/docs/console/overview.mdx +40 -0
- package/site/content/docs/console/plugins.mdx +41 -0
- package/site/content/docs/console/privacy.mdx +32 -0
- package/site/content/docs/console/runs.mdx +40 -0
- package/site/content/docs/console/signals.mdx +31 -0
- package/site/content/docs/console/store.mdx +32 -0
- package/site/content/docs/console/tenancy.mdx +32 -0
- package/site/content/docs/console/traces.mdx +34 -0
- package/site/content/docs/console/vault.mdx +37 -0
- package/site/content/docs/elements/ai.mdx +180 -0
- package/site/content/docs/elements/channel.mdx +167 -0
- package/site/content/docs/elements/clock.mdx +182 -0
- package/site/content/docs/elements/flow.mdx +288 -0
- package/site/content/docs/elements/gate.mdx +171 -0
- package/site/content/docs/elements/meta.json +5 -0
- package/site/content/docs/elements/signal.mdx +171 -0
- package/site/content/docs/elements/store.mdx +320 -0
- package/site/content/docs/elements/vault.mdx +263 -0
- package/site/content/docs/get-started/basic-usage.mdx +124 -0
- package/site/content/docs/get-started/comparison.mdx +65 -0
- package/site/content/docs/get-started/installation.mdx +113 -0
- package/site/content/docs/get-started/introduction.mdx +123 -0
- package/site/content/docs/get-started/meta.json +5 -0
- package/site/content/docs/index.mdx +63 -0
- package/site/content/docs/meta.json +5 -0
- package/site/content/docs/plugins/compression.mdx +60 -0
- package/site/content/docs/plugins/cors.mdx +92 -0
- package/site/content/docs/plugins/csrf.mdx +96 -0
- package/site/content/docs/plugins/ip-allowlist.mdx +92 -0
- package/site/content/docs/plugins/maintenance-mode.mdx +101 -0
- package/site/content/docs/plugins/meta.json +15 -0
- package/site/content/docs/plugins/security-headers.mdx +136 -0
- package/site/content/docs/reference/cli.md +101 -0
- package/site/content/docs/reference/configuration.mdx +159 -0
- package/site/content/docs/reference/environment-variables.mdx +87 -0
- package/site/content/docs/reference/errors.mdx +80 -0
- package/site/content/docs/reference/fx.mdx +117 -0
- package/site/content/docs/reference/meta.json +5 -0
- package/site/content/docs/reference/plugins.mdx +249 -0
- package/site/content/docs/reference/security.md +63 -0
- package/src/auth/api-keys.ts +2 -5
- package/src/auth/attenuation.ts +2 -6
- package/src/auth/auth.test.ts +56 -31
- package/src/auth/invoke-as.ts +1 -3
- package/src/auth/operator.ts +8 -26
- package/src/auth/planes.ts +2 -7
- package/src/auth/plugin.ts +4 -7
- package/src/auth/roles.ts +1 -5
- package/src/auth/sessions.ts +10 -39
- package/src/cli/args.ts +1 -5
- package/src/cli/ask-dev-mode.ts +40 -0
- package/src/cli/build.ts +1 -2
- package/src/cli/client-add.test.ts +8 -15
- package/src/cli/client-add.ts +5 -14
- package/src/cli/completion.test.ts +1 -5
- package/src/cli/completion.ts +4 -17
- package/src/cli/db-auto-push.test.ts +64 -0
- package/src/cli/db-auto-push.ts +72 -0
- package/src/cli/db.test.ts +189 -0
- package/src/cli/db.ts +456 -0
- package/src/cli/dev-app-runner.ts +2 -8
- package/src/cli/dev-db-push.test.ts +193 -0
- package/src/cli/dev-mode.test.ts +45 -0
- package/src/cli/dev-mode.ts +78 -0
- package/src/cli/dev-schema-sync.test.ts +66 -0
- package/src/cli/dev-schema-sync.ts +139 -0
- package/src/cli/dev.test.ts +264 -15
- package/src/cli/dev.ts +355 -139
- package/src/cli/doc-staleness.test.ts +69 -0
- package/src/cli/docker-cli.test.ts +27 -8
- package/src/cli/docker.ts +11 -3
- package/src/cli/doctor-diff.test.ts +1 -5
- package/src/cli/doctor-diff.ts +17 -46
- package/src/cli/doctor-pii.ts +2 -7
- package/src/cli/doctor.test.ts +26 -4
- package/src/cli/doctor.ts +35 -11
- package/src/cli/drizzle-env.test.ts +67 -0
- package/src/cli/drizzle-env.ts +78 -0
- package/src/cli/ensure-drizzle-config.ts +50 -0
- package/src/cli/eval.ts +4 -14
- package/src/cli/gates-list.ts +1 -4
- package/src/cli/hero-meta.test.ts +17 -19
- package/src/cli/hero-meta.ts +20 -30
- package/src/cli/images.ts +3 -8
- package/src/cli/index.ts +11 -2
- package/src/cli/load-config.images.test.ts +14 -14
- package/src/cli/load-config.ts +47 -47
- package/src/cli/mcp-from-console.ts +1 -4
- package/src/cli/mode.ts +65 -0
- package/src/cli/openbao-bootstrap.test.ts +147 -0
- package/src/cli/openbao-bootstrap.ts +280 -0
- package/src/cli/openbao-restart.integration.test.ts +136 -0
- package/src/cli/ports.test.ts +7 -14
- package/src/cli/ports.ts +7 -5
- package/src/cli/privacy-erase.ts +1 -3
- package/src/cli/registry.ts +75 -25
- package/src/cli/resolve-dev-sql-env.test.ts +48 -0
- package/src/cli/resolve-dev-sql-env.ts +42 -0
- package/src/cli/schema.ts +3 -10
- package/src/cli/stack.ts +8 -10
- package/src/cli/start.ts +4 -15
- package/src/cli/upgrade.ts +1 -4
- package/src/cli/vault-cmd.ts +63 -0
- package/src/client/budget-entry.ts +1 -6
- package/src/client/create.test.ts +6 -12
- package/src/client/create.ts +2 -8
- package/src/client/errors.ts +1 -4
- package/src/client/index.ts +1 -6
- package/src/client/notes-contract.test.ts +4 -13
- package/src/client/transport.ts +9 -30
- package/src/client/types.ts +15 -30
- package/src/compiler/aot.test.ts +2 -9
- package/src/compiler/aot.ts +1 -4
- package/src/compiler/differential.test.ts +3 -11
- package/src/compiler/dynamic.ts +1 -4
- package/src/compiler/effects-infer.ts +8 -34
- package/src/compiler/emit.ts +1 -3
- package/src/compiler/extract.test.ts +136 -30
- package/src/compiler/extract.ts +485 -157
- package/src/compiler/fixtures/skyport/oke.config.ts +3 -3
- package/src/compiler/fixtures/skyport/src/flows/bookings/index.ts +7 -3
- package/src/compiler/fixtures/skyport/src/flows/payments/index.ts +1 -3
- package/src/compiler/fixtures/skyport/src/flows/support/index.ts +4 -1
- package/src/compiler/fixtures/skyport.expected.json +24 -83
- package/src/compiler/fixtures/triggers/five-triggers.ts +1 -2
- package/src/compiler/http-parse.ts +2 -9
- package/src/compiler/index.ts +1 -5
- package/src/compiler/response.ts +16 -7
- package/src/compiler/sucrose.ts +11 -31
- package/src/config/define-config.test.ts +55 -34
- package/src/config/index.ts +177 -46
- package/src/config/resolve-driver.test.ts +28 -17
- package/src/console/budget.test.ts +1 -4
- package/src/console/index.ts +1 -4
- package/src/console/server/access.test.ts +15 -43
- package/src/console/server/access.ts +19 -49
- package/src/console/server/ai.test.ts +3 -11
- package/src/console/server/ai.ts +23 -46
- package/src/console/server/app.ts +16 -45
- package/src/console/server/auth-rate.test.ts +4 -12
- package/src/console/server/bind.ts +1 -5
- package/src/console/server/channels.test.ts +2 -6
- package/src/console/server/channels.ts +10 -35
- package/src/console/server/claim.ts +2 -8
- package/src/console/server/clock.test.ts +2 -6
- package/src/console/server/clock.ts +8 -26
- package/src/console/server/console.test.ts +1 -3
- package/src/console/server/diff.test.ts +5 -17
- package/src/console/server/diff.ts +10 -31
- package/src/console/server/dry-run.audit.test.ts +2 -8
- package/src/console/server/flows.ts +64 -233
- package/src/console/server/gates.test.ts +14 -50
- package/src/console/server/gates.ts +13 -48
- package/src/console/server/index.ts +2 -9
- package/src/console/server/live.ts +3 -12
- package/src/console/server/operator-db.test.ts +4 -15
- package/src/console/server/operator-db.ts +13 -32
- package/src/console/server/plugin.ts +50 -53
- package/src/console/server/plugins.test.ts +2 -6
- package/src/console/server/plugins.ts +17 -56
- package/src/console/server/runs-pii.ts +2 -7
- package/src/console/server/security.gate.test.ts +18 -40
- package/src/console/server/serve.ts +10 -25
- package/src/console/server/signals.test.ts +1 -3
- package/src/console/server/signals.ts +17 -40
- package/src/console/server/state.ts +21 -59
- package/src/console/server/store.test.ts +20 -22
- package/src/console/server/store.ts +31 -76
- package/src/console/server/vault.test.ts +12 -29
- package/src/console/server/vault.ts +44 -66
- package/src/console/ui/access/AccessA11yView.tsx +6 -21
- package/src/console/ui/access/a11y.test.tsx +3 -12
- package/src/console/ui/access/acknowledgement.test.ts +1 -4
- package/src/console/ui/access/acknowledgement.ts +1 -3
- package/src/console/ui/access/blast-radius.ts +1 -3
- package/src/console/ui/access/confirmation.test.ts +1 -5
- package/src/console/ui/access/confirmation.ts +1 -4
- package/src/console/ui/access/fixture.ts +1 -5
- package/src/console/ui/access/grantable.test.ts +1 -3
- package/src/console/ui/access/grantable.ts +2 -7
- package/src/console/ui/access/index.ts +2 -9
- package/src/console/ui/access/provenance.test.ts +1 -3
- package/src/console/ui/access/provenance.ts +2 -6
- package/src/console/ui/access/search.test.ts +1 -5
- package/src/console/ui/access/search.ts +2 -6
- package/src/console/ui/ai/AiA11yView.tsx +6 -17
- package/src/console/ui/ai/a11y.test.tsx +2 -5
- package/src/console/ui/ai/fixture.ts +2 -7
- package/src/console/ui/ai/format.ts +1 -3
- package/src/console/ui/ai/group.test.ts +1 -3
- package/src/console/ui/ai/group.ts +4 -12
- package/src/console/ui/ai/index.ts +2 -9
- package/src/console/ui/ai/promotion.test.ts +2 -7
- package/src/console/ui/ai/promotion.ts +4 -13
- package/src/console/ui/ai/search.test.ts +2 -11
- package/src/console/ui/ai/search.ts +3 -13
- package/src/console/ui/ai/types.ts +1 -8
- package/src/console/ui/architecture/ArchitectureA11yView.tsx +8 -29
- package/src/console/ui/architecture/a11y.test.tsx +1 -2
- package/src/console/ui/architecture/declared.ts +1 -5
- package/src/console/ui/architecture/index.ts +7 -35
- package/src/console/ui/architecture/layout.ts +1 -3
- package/src/console/ui/architecture/pathologies.ts +10 -19
- package/src/console/ui/architecture/search.ts +6 -15
- package/src/console/ui/architecture/traffic.ts +4 -14
- package/src/console/ui/architecture/types.ts +2 -10
- package/src/console/ui/architecture/view.test.ts +7 -19
- package/src/console/ui/architecture/view.ts +9 -36
- package/src/console/ui/channels/ChannelsA11yView.tsx +4 -13
- package/src/console/ui/channels/a11y.test.tsx +1 -2
- package/src/console/ui/channels/confirmation.test.ts +1 -4
- package/src/console/ui/channels/confirmation.ts +1 -4
- package/src/console/ui/channels/findings.ts +1 -5
- package/src/console/ui/channels/index.ts +2 -8
- package/src/console/ui/channels/locale.test.ts +1 -3
- package/src/console/ui/channels/locale.ts +2 -8
- package/src/console/ui/channels/search.ts +4 -13
- package/src/console/ui/channels/taxonomy.ts +1 -3
- package/src/console/ui/clock/ClockA11yView.tsx +9 -26
- package/src/console/ui/clock/a11y.test.tsx +2 -5
- package/src/console/ui/clock/confirmation.test.ts +1 -3
- package/src/console/ui/clock/confirmation.ts +1 -4
- package/src/console/ui/clock/findings.ts +1 -4
- package/src/console/ui/clock/health.ts +2 -7
- package/src/console/ui/clock/index.ts +2 -10
- package/src/console/ui/clock/search.test.ts +1 -3
- package/src/console/ui/clock/search.ts +2 -6
- package/src/console/ui/clock/timeline.test.ts +1 -3
- package/src/console/ui/clock/waiting-on.test.ts +1 -5
- package/src/console/ui/clock/waiting-on.ts +2 -7
- package/src/console/ui/diff/DiffA11yView.tsx +8 -17
- package/src/console/ui/diff/a11y.test.tsx +2 -5
- package/src/console/ui/diff/group.test.ts +3 -13
- package/src/console/ui/diff/group.ts +2 -8
- package/src/console/ui/diff/index.ts +2 -8
- package/src/console/ui/diff/search.test.ts +1 -5
- package/src/console/ui/diff/search.ts +4 -16
- package/src/console/ui/diff/summary.ts +1 -2
- package/src/console/ui/dist/assets/{index-Dy4jht9P.js → index-BWo8R7NR.js} +2 -2
- package/src/console/ui/dist/assets/{panel-access-Dd37LU2c.js → panel-access-C0J2D-a2.js} +1 -1
- package/src/console/ui/dist/assets/{panel-ai-CC7LR6-J.js → panel-ai-D_m6WQI8.js} +1 -1
- package/src/console/ui/dist/assets/{panel-architecture-B5b3iKCz.js → panel-architecture-CKnXFyUx.js} +1 -1
- package/src/console/ui/dist/assets/{panel-channels-CeNjTKXp.js → panel-channels-BOmQ-onL.js} +1 -1
- package/src/console/ui/dist/assets/{panel-clock-DgFTLoHV.js → panel-clock-giAq0Ccv.js} +1 -1
- package/src/console/ui/dist/assets/{panel-diff-DxehccqB.js → panel-diff-cdonmH8c.js} +1 -1
- package/src/console/ui/dist/assets/{panel-flows-BtrVn-Eg.js → panel-flows-DlCU5zjA.js} +2 -2
- package/src/console/ui/dist/assets/{panel-gates-Z9MKRGdH.js → panel-gates-XclZxWD5.js} +1 -1
- package/src/console/ui/dist/assets/{panel-overview-Dt_AeXgd.js → panel-overview-BznEOTnb.js} +1 -1
- package/src/console/ui/dist/assets/{panel-plugins-DWd0TowH.js → panel-plugins-CcGM1g64.js} +1 -1
- package/src/console/ui/dist/assets/{panel-runs-DGstFHeq.js → panel-runs-CGWNHLR4.js} +1 -1
- package/src/console/ui/dist/assets/{panel-signals-DzEa2Fnt.js → panel-signals-CNywkdak.js} +1 -1
- package/src/console/ui/dist/assets/{panel-store-BJkbNgxx.js → panel-store-KmTbFHMH.js} +1 -1
- package/src/console/ui/dist/assets/{panel-traces-BaRVO3gM.js → panel-traces-DBLx2ilD.js} +1 -1
- package/src/console/ui/dist/assets/panel-vault-CEnFc0dk.js +1 -0
- package/src/console/ui/dist/index.html +1 -1
- package/src/console/ui/flows/FlowsA11yView.tsx +7 -22
- package/src/console/ui/flows/a11y.test.tsx +2 -8
- package/src/console/ui/flows/buffer.test.ts +3 -11
- package/src/console/ui/flows/buffer.ts +4 -11
- package/src/console/ui/flows/confirmation.ts +1 -3
- package/src/console/ui/flows/contract.test.ts +3 -7
- package/src/console/ui/flows/contract.ts +12 -36
- package/src/console/ui/flows/graph.test.ts +3 -11
- package/src/console/ui/flows/graph.ts +5 -15
- package/src/console/ui/flows/index.ts +1 -6
- package/src/console/ui/flows/save-as-test.ts +1 -3
- package/src/console/ui/flows/search.ts +8 -25
- package/src/console/ui/flows/tiers.ts +2 -9
- package/src/console/ui/gates/GatesA11yView.tsx +4 -13
- package/src/console/ui/gates/a11y.test.tsx +2 -5
- package/src/console/ui/gates/audit.ts +1 -3
- package/src/console/ui/gates/denial.test.ts +1 -3
- package/src/console/ui/gates/denial.ts +4 -12
- package/src/console/ui/gates/findings.ts +1 -3
- package/src/console/ui/gates/group.test.ts +3 -3
- package/src/console/ui/gates/group.ts +3 -11
- package/src/console/ui/gates/index.ts +2 -10
- package/src/console/ui/gates/search.ts +3 -10
- package/src/console/ui/overview/OverviewA11yView.tsx +9 -27
- package/src/console/ui/overview/a11y.test.tsx +1 -2
- package/src/console/ui/overview/busiest.ts +1 -3
- package/src/console/ui/overview/compose.ts +1 -13
- package/src/console/ui/overview/cost.ts +34 -38
- package/src/console/ui/overview/fixture.ts +21 -26
- package/src/console/ui/overview/golden.ts +4 -14
- package/src/console/ui/overview/index.ts +2 -9
- package/src/console/ui/overview/rank.test.ts +3 -10
- package/src/console/ui/overview/rank.ts +2 -7
- package/src/console/ui/overview/slo.test.ts +5 -9
- package/src/console/ui/overview/slo.ts +6 -23
- package/src/console/ui/overview/verdict.ts +3 -10
- package/src/console/ui/plugins/PluginsA11yView.tsx +8 -18
- package/src/console/ui/plugins/a11y.test.tsx +1 -2
- package/src/console/ui/plugins/fixture.ts +2 -4
- package/src/console/ui/plugins/group.test.ts +1 -3
- package/src/console/ui/plugins/group.ts +1 -6
- package/src/console/ui/plugins/index.ts +3 -13
- package/src/console/ui/plugins/search.ts +7 -19
- package/src/console/ui/runs/RunsA11yView.tsx +5 -20
- package/src/console/ui/runs/a11y.test.tsx +2 -5
- package/src/console/ui/runs/explain.ts +2 -6
- package/src/console/ui/runs/group.ts +3 -12
- package/src/console/ui/runs/histogram.test.ts +2 -11
- package/src/console/ui/runs/histogram.ts +1 -4
- package/src/console/ui/runs/index.ts +4 -18
- package/src/console/ui/runs/project.ts +2 -6
- package/src/console/ui/runs/query.test.ts +1 -3
- package/src/console/ui/runs/query.ts +12 -35
- package/src/console/ui/runs/search.ts +5 -19
- package/src/console/ui/runs/trace-link.test.ts +2 -6
- package/src/console/ui/runs/trace-link.ts +4 -16
- package/src/console/ui/runs/types.ts +1 -3
- package/src/console/ui/shell/App.tsx +2 -10
- package/src/console/ui/shell/client.ts +22 -115
- package/src/console/ui/shell/components/ui.tsx +1 -4
- package/src/console/ui/shell/layout/Shell.tsx +2 -4
- package/src/console/ui/shell/main.tsx +31 -96
- package/src/console/ui/shell/panels/access/AccessPanel.tsx +34 -98
- package/src/console/ui/shell/panels/ai/AiPanel.tsx +35 -106
- package/src/console/ui/shell/panels/architecture/ArchitecturePanel.tsx +18 -66
- package/src/console/ui/shell/panels/channels/ChannelsPanel.tsx +20 -57
- package/src/console/ui/shell/panels/clock/ClockPanel.tsx +22 -54
- package/src/console/ui/shell/panels/diff/DiffPanel.tsx +20 -61
- package/src/console/ui/shell/panels/flows/ContractEditor.tsx +6 -23
- package/src/console/ui/shell/panels/flows/FlowDrawer.tsx +13 -28
- package/src/console/ui/shell/panels/flows/FlowsPanel.tsx +9 -29
- package/src/console/ui/shell/panels/gates/GatesPanel.tsx +24 -80
- package/src/console/ui/shell/panels/overview/OverviewPanel.tsx +20 -58
- package/src/console/ui/shell/panels/plugins/PluginsPanel.tsx +16 -41
- package/src/console/ui/shell/panels/runs/RunsPanel.tsx +31 -99
- package/src/console/ui/shell/panels/signals/SignalsPanel.tsx +38 -101
- package/src/console/ui/shell/panels/store/StorePanel.tsx +27 -66
- package/src/console/ui/shell/panels/traces/TracesPanel.tsx +28 -89
- package/src/console/ui/shell/panels/vault/VaultPanel.tsx +22 -53
- package/src/console/ui/shell/setup/Wizard.tsx +3 -5
- package/src/console/ui/shell/styles.css +1 -2
- package/src/console/ui/signals/SignalsA11yView.tsx +9 -33
- package/src/console/ui/signals/a11y.test.tsx +2 -5
- package/src/console/ui/signals/confirmation.test.ts +1 -5
- package/src/console/ui/signals/confirmation.ts +2 -6
- package/src/console/ui/signals/dry-run.ts +1 -3
- package/src/console/ui/signals/durable.ts +1 -3
- package/src/console/ui/signals/findings.ts +1 -3
- package/src/console/ui/signals/group.test.ts +2 -8
- package/src/console/ui/signals/group.ts +2 -10
- package/src/console/ui/signals/index.ts +1 -4
- package/src/console/ui/signals/monitor.ts +2 -7
- package/src/console/ui/signals/schema-form.test.ts +3 -14
- package/src/console/ui/signals/schema-form.ts +1 -4
- package/src/console/ui/signals/search.ts +4 -13
- package/src/console/ui/store/StoreA11yView.tsx +3 -9
- package/src/console/ui/store/a11y.test.tsx +2 -5
- package/src/console/ui/store/confirmation.test.ts +1 -3
- package/src/console/ui/store/confirmation.ts +1 -4
- package/src/console/ui/store/dry-run.ts +2 -5
- package/src/console/ui/store/fixture.ts +1 -2
- package/src/console/ui/store/group.test.ts +1 -6
- package/src/console/ui/store/group.ts +1 -4
- package/src/console/ui/store/index.ts +1 -5
- package/src/console/ui/store/search.ts +2 -6
- package/src/console/ui/store/will-not-fire.ts +1 -2
- package/src/console/ui/traces/TracesA11yView.tsx +10 -29
- package/src/console/ui/traces/a11y.test.tsx +1 -2
- package/src/console/ui/traces/chain.test.ts +5 -19
- package/src/console/ui/traces/chain.ts +1 -3
- package/src/console/ui/traces/critical-path.test.ts +1 -3
- package/src/console/ui/traces/critical-path.ts +2 -6
- package/src/console/ui/traces/filter.test.ts +2 -6
- package/src/console/ui/traces/filter.ts +5 -13
- package/src/console/ui/traces/fold.test.ts +4 -12
- package/src/console/ui/traces/fold.ts +1 -3
- package/src/console/ui/traces/mini.ts +1 -3
- package/src/console/ui/traces/replay.test.ts +1 -3
- package/src/console/ui/traces/replay.ts +1 -3
- package/src/console/ui/traces/sampling.ts +1 -4
- package/src/console/ui/traces/search.ts +4 -17
- package/src/console/ui/traces/tier.ts +1 -3
- package/src/console/ui/vault/VaultA11yView.tsx +5 -17
- package/src/console/ui/vault/a11y.test.tsx +1 -2
- package/src/console/ui/vault/blast-radius.ts +1 -3
- package/src/console/ui/vault/confirmation.test.ts +1 -5
- package/src/console/ui/vault/confirmation.ts +1 -4
- package/src/console/ui/vault/dormant.test.ts +1 -4
- package/src/console/ui/vault/export-safe.test.ts +1 -5
- package/src/console/ui/vault/export-safe.ts +1 -4
- package/src/console/ui/vault/fixture.ts +3 -3
- package/src/console/ui/vault/group.ts +1 -2
- package/src/console/ui/vault/index.ts +2 -10
- package/src/console/ui/vault/search.ts +2 -6
- package/src/console/ui/vault/types.ts +1 -1
- package/src/console/xss.gate.test.ts +1 -3
- package/src/docker/compose.ts +215 -27
- package/src/docker/derive.ts +6 -14
- package/src/docker/docker.test.ts +118 -15
- package/src/docker/dockerfile.integration.test.ts +12 -21
- package/src/docker/helpers.ts +5 -4
- package/src/docker/index.ts +9 -6
- package/src/docker/pin.ts +1 -9
- package/src/docker/recipes/index.ts +6 -6
- package/src/docker/recipes/mailpit.ts +22 -0
- package/src/docker/recipes/openbao.ts +47 -0
- package/src/docker/recipes/postgres.ts +17 -6
- package/src/docker/recipes/redis.ts +11 -2
- package/src/docker/recipes/rustfs.ts +32 -0
- package/src/docker/stack-id.test.ts +73 -5
- package/src/docker/stack-id.ts +124 -33
- package/src/docker/stack.integration.test.ts +6 -21
- package/src/docker/stack.ts +36 -4
- package/src/docker/types.ts +16 -4
- package/src/docs-origin.ts +4 -4
- package/src/drivers/ai-anthropic.ts +5 -14
- package/src/drivers/ai-mock.ts +2 -5
- package/src/drivers/ai-openai-compatible.ts +4 -10
- package/src/drivers/ai-providers.test.ts +6 -13
- package/src/drivers/bun-native-completeness.test.ts +6 -15
- package/src/drivers/channel-console.ts +6 -7
- package/src/drivers/channel-fcm.ts +20 -30
- package/src/drivers/channel-resend.ts +1 -3
- package/src/drivers/channel-smtp.ts +2 -6
- package/src/drivers/channel-types.ts +2 -12
- package/src/drivers/channel-unifonic.ts +2 -6
- package/src/drivers/channel-wa-cloud.ts +2 -6
- package/src/drivers/channel-webpush.ts +21 -60
- package/src/drivers/conformance.test.ts +2 -10
- package/src/drivers/conformance.ts +8 -21
- package/src/drivers/drizzle-dialect.test.ts +20 -0
- package/src/drivers/drizzle-dialect.ts +37 -0
- package/src/drivers/fs.ts +2 -8
- package/src/drivers/index.ts +12 -57
- package/src/drivers/memory.ts +287 -75
- package/src/drivers/pgvector.ts +7 -11
- package/src/drivers/postgres.ts +7 -13
- package/src/drivers/redis.ts +13 -37
- package/src/drivers/s3.ts +15 -18
- package/src/drivers/signal-engine.ts +12 -49
- package/src/drivers/signal-memory.ts +2 -8
- package/src/drivers/signal-nats.ts +4 -9
- package/src/drivers/signal-postgres.ts +62 -129
- package/src/drivers/signal-redis.ts +7 -21
- package/src/drivers/signal-types.ts +1 -4
- package/src/drivers/sqlite.ts +3 -12
- package/src/drivers/types.ts +4 -23
- package/src/drivers/vault-driver-removal.test.ts +55 -0
- package/src/drivers/vault-env.ts +2 -6
- package/src/drivers/vault-infisical.ts +1 -5
- package/src/drivers/vault-managed.ts +1 -5
- package/src/drivers/vault-memory.ts +1 -5
- package/src/drivers/vault-openbao.test.ts +97 -0
- package/src/drivers/vault-openbao.ts +103 -40
- package/src/drivers/vault-types.ts +3 -16
- package/src/elements/ai/declare.ts +4 -14
- package/src/elements/ai/eval.ts +2 -6
- package/src/elements/ai/pii.ts +1 -3
- package/src/elements/ai/runtime.ts +12 -50
- package/src/elements/ai/schema.ts +4 -15
- package/src/elements/ai.test.ts +13 -24
- package/src/elements/ai.ts +1 -5
- package/src/elements/channel/consent.ts +3 -12
- package/src/elements/channel/costs.ts +4 -15
- package/src/elements/channel/declare.ts +1 -4
- package/src/elements/channel/email-auth.ts +1 -4
- package/src/elements/channel/locale.ts +2 -10
- package/src/elements/channel/mask.ts +1 -3
- package/src/elements/channel/mime.ts +2 -12
- package/src/elements/channel/outcomes.test.ts +1 -5
- package/src/elements/channel/outcomes.ts +5 -15
- package/src/elements/channel/receipts.ts +2 -7
- package/src/elements/channel/runtime.ts +28 -74
- package/src/elements/channel/suppression.ts +8 -14
- package/src/elements/channel.test.ts +8 -31
- package/src/elements/channel.ts +3 -14
- package/src/elements/clock/actions.ts +6 -18
- package/src/elements/clock/declare.ts +1 -3
- package/src/elements/clock/dst.ts +1 -5
- package/src/elements/clock/durable.ts +4 -16
- package/src/elements/clock/health.ts +2 -7
- package/src/elements/clock/leader.ts +2 -9
- package/src/elements/clock/reconcile.ts +4 -15
- package/src/elements/clock/runtime.ts +2 -5
- package/src/elements/clock/schedule.ts +4 -20
- package/src/elements/clock.test.ts +2 -7
- package/src/elements/clock.ts +5 -23
- package/src/elements/gate/permissions.ts +1 -4
- package/src/elements/gate/runtime.ts +7 -28
- package/src/elements/gate.ts +1 -5
- package/src/elements/index.ts +9 -7
- package/src/elements/signal/declare.ts +2 -7
- package/src/elements/signal/reconcile.test.ts +1 -4
- package/src/elements/signal/runtime.ts +1 -3
- package/src/elements/signal.test.ts +3 -15
- package/src/elements/signal.ts +2 -8
- package/src/elements/store/cache.test.ts +46 -0
- package/src/elements/store/cache.ts +3 -11
- package/src/elements/store/classify.ts +5 -22
- package/src/elements/store/declare.ts +11 -17
- package/src/elements/store/domain-ddl.test.ts +86 -0
- package/src/elements/store/emit-drizzle.ts +363 -0
- package/src/elements/store/files-policy.test.ts +1 -5
- package/src/elements/store/files-policy.ts +4 -12
- package/src/elements/store/load-plugin-tables.ts +103 -0
- package/src/elements/store/missing-relation.test.ts +83 -0
- package/src/elements/store/missing-relation.ts +38 -0
- package/src/elements/store/replica.ts +1 -4
- package/src/elements/store/resource-list-docs.fixture.ts +56 -0
- package/src/elements/store/resource-list-docs.test.ts +79 -0
- package/src/elements/store/resource.test.ts +253 -0
- package/src/elements/store/resource.ts +786 -0
- package/src/elements/store/runtime.ts +25 -28
- package/src/elements/store/schema-decl.test.ts +227 -0
- package/src/elements/store/schema-decl.ts +516 -0
- package/src/elements/store/sql-condition.test.ts +132 -0
- package/src/elements/store/sql-condition.ts +293 -65
- package/src/elements/store/sql-session.test.ts +135 -0
- package/src/elements/store/sql-session.ts +241 -84
- package/src/elements/store/table.ts +69 -23
- package/src/elements/store.test.ts +17 -39
- package/src/elements/store.ts +53 -31
- package/src/elements/vault/chain.ts +34 -0
- package/src/elements/vault/declare.ts +22 -32
- package/src/elements/vault/fingerprint.ts +2 -7
- package/src/elements/vault/redact.ts +2 -6
- package/src/elements/vault/runtime.ts +19 -33
- package/src/elements/vault.test.ts +12 -55
- package/src/elements/vault.ts +9 -13
- package/src/index.ts +5 -2
- package/src/kernel/adopt-routes.ts +15 -29
- package/src/kernel/app.ts +92 -118
- package/src/kernel/auth-resolve.ts +2 -9
- package/src/kernel/boot-bind/ai.ts +1 -4
- package/src/kernel/boot-bind/channel.test.ts +60 -0
- package/src/kernel/boot-bind/channel.ts +61 -5
- package/src/kernel/boot-bind/clock.ts +2 -6
- package/src/kernel/boot-bind/gate.ts +2 -8
- package/src/kernel/boot-bind/runs.ts +1 -3
- package/src/kernel/boot-bind/signal.ts +3 -10
- package/src/kernel/boot-bind/store.test.ts +27 -18
- package/src/kernel/boot-bind/store.ts +93 -52
- package/src/kernel/boot-bind/vault.ts +2 -8
- package/src/kernel/boot.test.ts +4 -10
- package/src/kernel/boot.ts +30 -77
- package/src/kernel/budget.test.ts +1 -3
- package/src/kernel/capability.ts +3 -10
- package/src/kernel/dry-run.test.ts +1 -4
- package/src/kernel/dry-run.ts +3 -11
- package/src/kernel/edge.test.ts +68 -0
- package/src/kernel/effects.test.ts +1 -5
- package/src/kernel/effects.ts +4 -11
- package/src/kernel/errors.registry.test.ts +2 -8
- package/src/kernel/errors.ts +23 -32
- package/src/kernel/flow.test.ts +12 -25
- package/src/kernel/flow.ts +13 -25
- package/src/kernel/fx.test.ts +31 -40
- package/src/kernel/fx.ts +135 -90
- package/src/kernel/hook-timing.test.ts +3 -6
- package/src/kernel/hook-timing.ts +5 -14
- package/src/kernel/hooks.test.ts +43 -10
- package/src/kernel/hooks.ts +25 -12
- package/src/kernel/index.ts +11 -17
- package/src/kernel/journal.ts +7 -31
- package/src/kernel/on.ts +45 -9
- package/src/kernel/pipeline.test.ts +10 -19
- package/src/kernel/pipeline.ts +5 -17
- package/src/kernel/plug.ts +4 -11
- package/src/kernel/plugin/conflicts.test.ts +13 -25
- package/src/kernel/plugin/decorate.test.ts +8 -13
- package/src/kernel/plugin/scoping.test.ts +4 -11
- package/src/kernel/plugin.ts +81 -27
- package/src/kernel/registry-isolation.test.ts +74 -0
- package/src/kernel/registry.ts +102 -30
- package/src/kernel/router.test.ts +15 -13
- package/src/kernel/router.ts +9 -29
- package/src/kernel/routing-budget.test.ts +1 -3
- package/src/kernel/run-telemetry.ts +1 -3
- package/src/kernel/triggers.ts +63 -21
- package/src/manifest/diff.test.ts +26 -91
- package/src/manifest/diff.ts +95 -225
- package/src/manifest/fixtures/skyport.excerpt.json +1 -1
- package/src/manifest/fixtures/skyport.manifest.json +1 -1
- package/src/manifest/index.ts +3 -10
- package/src/manifest/types.ts +30 -6
- package/src/manifest/undeclared.test.ts +4 -12
- package/src/manifest/undeclared.ts +1 -2
- package/src/manifest/validate.test.ts +2 -6
- package/src/manifest/validate.ts +5 -15
- package/src/mcp/authorization.ts +8 -27
- package/src/mcp/confirmation.ts +3 -10
- package/src/mcp/data.ts +2 -6
- package/src/mcp/docs-index.ts +4 -7
- package/src/mcp/docs-mcp.test.ts +3 -12
- package/src/mcp/docs-server.ts +7 -27
- package/src/mcp/docs-tools.ts +2 -6
- package/src/mcp/index.ts +1 -6
- package/src/mcp/injection.gate.test.ts +4 -18
- package/src/mcp/mcp.test.ts +18 -49
- package/src/mcp/protocol.ts +3 -10
- package/src/mcp/server.ts +11 -52
- package/src/mcp/session.ts +4 -14
- package/src/mcp/tools.ts +14 -50
- package/src/plugins/catalogue.test.ts +3 -7
- package/src/plugins/catalogue.ts +1 -3
- package/src/plugins/compression.test.ts +127 -0
- package/src/plugins/compression.ts +94 -0
- package/src/plugins/config-source.test.ts +204 -0
- package/src/plugins/config-source.ts +209 -0
- package/src/plugins/cors.test.ts +138 -0
- package/src/plugins/cors.ts +129 -0
- package/src/plugins/csrf.test.ts +102 -0
- package/src/plugins/csrf.ts +86 -0
- package/src/plugins/headers.ts +54 -0
- package/src/plugins/index.ts +26 -0
- package/src/plugins/ip-allowlist.test.ts +105 -0
- package/src/plugins/ip-allowlist.ts +76 -0
- package/src/plugins/maintenance-mode.test.ts +91 -0
- package/src/plugins/maintenance-mode.ts +85 -0
- package/src/plugins/node-import-scan.ts +2 -5
- package/src/plugins/security-headers.test.ts +243 -0
- package/src/plugins/security-headers.ts +255 -0
- package/src/plugins/supply-chain.ts +5 -17
- package/src/release/exports.ts +3 -8
- package/src/release/measure.exports.test.ts +1 -3
- package/src/release/measure.ts +16 -45
- package/src/runs/bench.test.ts +1 -3
- package/src/runs/collect.ts +8 -25
- package/src/runs/drivers/clickhouse.ts +2 -9
- package/src/runs/drivers/files.ts +9 -31
- package/src/runs/drivers/memory.ts +5 -22
- package/src/runs/drivers/postgres.ts +8 -20
- package/src/runs/duckdb.ts +2 -8
- package/src/runs/index.ts +3 -14
- package/src/runs/outlier.ts +3 -10
- package/src/runs/parquet.ts +8 -26
- package/src/runs/privacy.ts +2 -8
- package/src/runs/runs.test.ts +3 -9
- package/src/runs/runtime.ts +7 -32
- package/src/runs/shred.ts +10 -29
- package/src/runs/types.ts +1 -4
- package/src/runtime/bun.ts +4 -15
- package/src/runtime/cold-start.bench.ts +1 -3
- package/src/runtime/dev-request-log.test.ts +1 -4
- package/src/runtime/dev-request-log.ts +1 -4
- package/src/runtime/index.ts +1 -6
- package/src/runtime/primitives.ts +5 -4
- package/src/runtime/security.ts +3 -13
- package/src/runtime/serve.test.ts +4 -7
- package/src/runtime/types.ts +1 -4
- package/src/runtime/web-standard.ts +3 -15
- package/src/term.test.ts +4 -6
- package/src/term.ts +49 -98
- package/src/test/create-test-app.test.ts +4 -14
- package/src/test/create-test-app.ts +27 -33
- package/src/test/provisions.integration.test.ts +3 -11
- package/src/upgrade/codemods.test.ts +25 -6
- package/src/upgrade/codemods.ts +116 -3
- package/src/validation/standard-schema.test.ts +2 -5
- package/src/validation/standard-schema.ts +13 -33
- package/docs/spec/console.md +0 -739
- package/docs/spec/example.md +0 -1196
- package/docs/spec/four-applications.md +0 -1195
- package/docs/spec/unified-theory.md +0 -489
- package/src/cli/doc-drift.test.ts +0 -146
- package/src/cli/doc-drift.ts +0 -430
- package/src/cli/doctor-diff-examples.ts +0 -92
- package/src/console/ui/dist/assets/panel-vault-BbfWdox0.js +0 -1
- package/src/drivers/vault-sops.ts +0 -271
package/src/console/ui/dist/assets/{panel-overview-Dt_AeXgd.js → panel-overview-BznEOTnb.js}
RENAMED
|
@@ -1 +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:[!h&&!e.data?(0,Z.jsxs)(`p`,{className:`text-sm text-[var(--oke-muted)]`,children:[`No Manifest yet — save a Flow under`,` `,(0,Z.jsx)(`code`,{className:`font-mono text-[var(--oke-fg)]`,children:`src/`}),` and the Console will refresh.`]}):null,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};
|
|
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-C0J2D-a2.js";import{n as c}from"./panel-diff-cdonmH8c.js";import{n as l}from"./panel-ai-D_m6WQI8.js";import{c as u,n as d,u as f}from"./panel-architecture-CKnXFyUx.js";import{n as p}from"./panel-channels-BOmQ-onL.js";import{n as m}from"./panel-clock-giAq0Ccv.js";import{n as h}from"./panel-gates-XclZxWD5.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:[!h&&!e.data?(0,Z.jsxs)(`p`,{className:`text-sm text-[var(--oke-muted)]`,children:[`No Manifest yet — save a Flow under`,` `,(0,Z.jsx)(`code`,{className:`font-mono text-[var(--oke-fg)]`,children:`src/`}),` and the Console will refresh.`]}):null,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};
|
|
@@ -1 +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};
|
|
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-C0J2D-a2.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};
|
|
@@ -1 +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-Dt_AeXgd.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};
|
|
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-C0J2D-a2.js";import{i as te}from"./panel-ai-D_m6WQI8.js";import{c as ne,l as x}from"./panel-architecture-CKnXFyUx.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-BznEOTnb.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};
|
|
@@ -1 +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-DGstFHeq.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};
|
|
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-C0J2D-a2.js";import{r as g}from"./panel-runs-CGWNHLR4.js";import{i as _}from"./panel-ai-D_m6WQI8.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};
|
|
@@ -1 +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-DGstFHeq.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};
|
|
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-C0J2D-a2.js";import{r as _}from"./panel-runs-CGWNHLR4.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};
|