okengine 0.3.6 → 0.4.3
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 +2 -0
- package/package.json +12 -12
- package/site/content/docs/ai/skills.mdx +5 -3
- package/site/content/docs/elements/ai.mdx +2 -0
- package/site/content/docs/elements/channel.mdx +2 -0
- package/site/content/docs/elements/clock.mdx +1 -4
- package/site/content/docs/elements/flow.mdx +4 -10
- package/site/content/docs/elements/gate.mdx +2 -0
- package/site/content/docs/elements/signal.mdx +1 -5
- package/site/content/docs/elements/store.mdx +27 -6
- package/site/content/docs/elements/vault.mdx +10 -11
- package/site/content/docs/get-started/basic-usage.mdx +76 -41
- package/site/content/docs/get-started/installation.mdx +95 -43
- package/site/content/docs/get-started/introduction.mdx +128 -75
- package/site/content/docs/get-started/meta.json +1 -1
- package/site/content/docs/get-started/why.mdx +141 -0
- package/site/content/docs/plugins/ip-allowlist.mdx +1 -2
- package/site/content/docs/plugins/security-headers.mdx +1 -1
- package/site/content/docs/reference/configuration.mdx +1 -1
- package/site/content/docs/reference/environment-variables.mdx +5 -3
- package/site/content/docs/reference/fx.mdx +16 -3
- package/src/cli/competitor-mention-removal.test.ts +117 -0
- package/src/cli/dev.ts +20 -0
- package/src/cli/meilisearch-local.test.ts +69 -0
- package/src/cli/meilisearch-local.ts +188 -0
- package/src/compiler/fixtures/skyport/src/flows/payments/index.ts +5 -1
- package/src/console/server/store.test.ts +1 -1
- package/src/console/server/store.ts +11 -1
- package/src/console/ui/dist/assets/index-CjxwRGVv.js +10 -0
- package/src/console/ui/dist/assets/panel-access-BGv45snf.js +64 -0
- package/src/console/ui/dist/assets/{panel-ai-D_m6WQI8.js → panel-ai-B2S7LEii.js} +1 -1
- package/src/console/ui/dist/assets/{panel-architecture-CKnXFyUx.js → panel-architecture-D7UJh91v.js} +1 -1
- package/src/console/ui/dist/assets/{panel-channels-DCDd4WAC.js → panel-channels-9T3ybqRu.js} +1 -1
- package/src/console/ui/dist/assets/panel-clock-Cb1UXGRQ.js +1 -0
- package/src/console/ui/dist/assets/{panel-diff-cdonmH8c.js → panel-diff-DmYbKWmN.js} +1 -1
- package/src/console/ui/dist/assets/panel-flows-PiHwT55z.js +48 -0
- package/src/console/ui/dist/assets/{panel-gates-B5eTE8XH.js → panel-gates-BQGYXvjT.js} +1 -1
- package/src/console/ui/dist/assets/panel-overview-BBnRO18l.js +1 -0
- package/src/console/ui/dist/assets/{panel-plugins-Cj7DK1er.js → panel-plugins-D0PsmVw2.js} +1 -1
- package/src/console/ui/dist/assets/panel-runs-CWuRDe0r.js +1 -0
- package/src/console/ui/dist/assets/{panel-signals-whmDXIg3.js → panel-signals-Bbg4ewpP.js} +1 -1
- package/src/console/ui/dist/assets/{panel-store-CEMHLvaw.js → panel-store-CPCbsDRa.js} +1 -1
- package/src/console/ui/dist/assets/panel-traces-DVAzuA_S.js +1 -0
- package/src/console/ui/dist/assets/{panel-vault-C9wjbki8.js → panel-vault-D1_MvOmo.js} +1 -1
- package/src/console/ui/dist/assets/{rolldown-runtime-CNC7AqOf.js → rolldown-runtime-B0Z9INg1.js} +1 -1
- package/src/console/ui/dist/index.html +2 -2
- package/src/docker/compose.ts +5 -0
- package/src/docker/docker.test.ts +41 -0
- package/src/docker/recipes/index.ts +10 -2
- package/src/docker/recipes/meilisearch.ts +31 -0
- package/src/drivers/conformance.test.ts +16 -1
- package/src/drivers/conformance.ts +40 -3
- package/src/drivers/index.ts +14 -2
- package/src/drivers/libsql.ts +4 -4
- package/src/drivers/meilisearch.integration.test.ts +77 -0
- package/src/drivers/meilisearch.test.ts +181 -0
- package/src/drivers/meilisearch.ts +208 -0
- package/src/drivers/memory.ts +4 -4
- package/src/drivers/pgvector.ts +6 -6
- package/src/drivers/types.ts +93 -12
- package/src/drivers/vault-driver-removal.test.ts +6 -0
- package/src/drivers/vault-types.ts +4 -4
- package/src/elements/ai/runtime.ts +6 -0
- package/src/elements/ai.test.ts +22 -0
- package/src/elements/store/index-boot.test.ts +49 -7
- package/src/elements/store/runtime.ts +50 -15
- package/src/elements/store.ts +2 -0
- package/src/elements/vault.test.ts +27 -4
- package/src/elements/vault.ts +1 -1
- package/src/index.ts +4 -0
- package/src/kernel/boot-bind/store.test.ts +9 -0
- package/src/kernel/boot-bind/store.ts +30 -2
- package/src/kernel/concurrency.test.ts +58 -0
- package/src/kernel/concurrency.ts +48 -0
- package/src/kernel/fx.test.ts +11 -2
- package/src/kernel/fx.ts +37 -5
- package/src/kernel/index.ts +10 -1
- package/src/kernel/redacted.ts +74 -0
- package/src/kernel/router.ts +3 -3
- package/src/test/provisions.integration.test.ts +1 -1
- package/site/content/docs/get-started/comparison.mdx +0 -65
- package/src/console/ui/dist/assets/index-CrKMmO__.js +0 -10
- package/src/console/ui/dist/assets/panel-access-C0J2D-a2.js +0 -64
- package/src/console/ui/dist/assets/panel-clock-DjGGFPzr.js +0 -1
- package/src/console/ui/dist/assets/panel-flows-DlCU5zjA.js +0 -45
- package/src/console/ui/dist/assets/panel-overview-BsFvDdts.js +0 -1
- package/src/console/ui/dist/assets/panel-runs-C0gmnoYL.js +0 -1
- package/src/console/ui/dist/assets/panel-traces-BDiAuVSK.js +0 -1
- package/src/drivers/vault-infisical.ts +0 -57
|
@@ -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,b as a,c as o,d as s,g as c,nt as l,o as u,tt as d,u as f,w as p,y as m}from"./panel-access-C0J2D-a2.js";import{n as h}from"./panel-channels-DCDd4WAC.js";var g=m({q:a().optional(),from:c([`principal`,`flow`]).optional(),principal:a().optional(),flow:a().optional(),as:a().optional()});function _(e){let t=g.safeParse(e);return t.success?t.data:{}}function v(e){let t={};return e.q&&(t.q=e.q),e.from&&(t.from=e.from),e.principal&&(t.principal=e.principal),e.flow&&(t.flow=e.flow),e.as&&(t.as=e.as),t}function y(e,t){return`${e}:${t}`}function b(e){if(!e)return null;let t=e.indexOf(`:`);if(t===-1)return null;let n=e.slice(0,t),r=e.slice(t+1);return n!==`role`&&n!==`key`&&n!==`user`||!r?null:{kind:n,id:r}}function x(e,t,n){return{...e,from:`principal`,principal:y(t,n),flow:void 0}}function S(e,t){return{...e,from:`flow`,flow:t,principal:void 0}}function C(e,t=``){let n=t.trim().toLowerCase(),r=n?e.filter(e=>e.name.toLowerCase().includes(n)||e.id.toLowerCase().includes(n)||(e.email?.toLowerCase().includes(n)??!1)||e.scopes.some(e=>e.toLowerCase().includes(n))):e,i=[`role`,`key`,`user`],a={role:`Roles`,key:`API keys`,user:`Users`};return i.map(e=>({id:e,label:a[e],items:r.filter(t=>t.kind===e).map(t=>({id:`${t.kind}:${t.id}`,label:t.name,meta:e===`role`?`${t.scopes.length} scopes · ${t.memberCount??0} members`:`${t.scopes.length} scopes`,flag:t.plane===`operator`?`operator`:void 0}))})).filter(e=>e.items.length>0)}function w(e,t=``){let n=t.trim().toLowerCase(),r=n?e.filter(e=>e.flowId.toLowerCase().includes(n)||e.gates.some(e=>e.toLowerCase().includes(n))):e,i=[`user`,`operator`],a={user:`User plane`,operator:`Operator plane`};return i.map(e=>({id:e,label:a[e],items:r.filter(t=>t.plane===e).map(e=>({id:e.flowId,label:e.flowId,meta:e.gates.length===0?`ungated`:e.gates.join(` → `),flag:e.unguarded?`unguarded`:void 0}))})).filter(e=>e.items.length>0)}function T(e){let t=[];return e.unguardedFlows.length>0&&t.push({code:`unguarded`,count:e.unguardedFlows.length,message:`${e.unguardedFlows.length} user-plane flow${e.unguardedFlows.length===1?``:`s`} unguarded (public)`}),e.orphanPermissions.length>0&&t.push({code:`orphan-permissions`,count:e.orphanPermissions.length,message:`${e.orphanPermissions.length} permission${e.orphanPermissions.length===1?``:`s`} granted to no role`}),e.emptyRoles.length>0&&t.push({code:`empty-roles`,count:e.emptyRoles.length,message:`${e.emptyRoles.length} role${e.emptyRoles.length===1?``:`s`} with no members`}),e.unattachedGates.length>0&&t.push({code:`unattached`,count:e.unattachedGates.length,message:`${e.unattachedGates.length} gate${e.unattachedGates.length===1?``:`s`} never attached`}),t}function E(e){let t=e.applicationScopes.join(`, `);return`${e.email?`${e.name} <${e.email}>`:e.name} holds application scope(s): ${t}`}function D(e){return T(e).filter(e=>e.code===`unguarded`)}function O(e){switch(e.code){case`RateLimited`:return`RateLimited { retryAfterMs: ${typeof e.data.retryAfterMs==`number`?e.data.retryAfterMs:0} } · HTTP ${e.status}`;case`Forbidden`:{let t=typeof e.data.gate==`string`?e.data.gate:`?`,n=typeof e.data.reason==`string`?e.data.reason:``;return`Forbidden { gate: ${t}${n?`, reason: ${n}`:``} } · HTTP ${e.status}`}case`Unauthorized`:return`Unauthorized {} · HTTP ${e.status}`}}function k(e,t){let n=e.allowed?`pass`:`deny`,r=e.kind===`rate`&&e.retryAfterMs!==void 0?` · retryAfterMs ${e.retryAfterMs}`:e.reason?` · ${e.reason}`:``;return`${t+1}. ${e.name} — ${n}${r}`}var A=e(l(),1),j=d();function M(){let e=p({from:`/gates`}),t=n({from:`/gates`}),a=e.from??`flow`,[c,l]=(0,A.useState)(e.as??``),[d,m]=(0,A.useState)(null),[g,_]=(0,A.useState)(null),y=e=>{t({search:v(e),replace:!0})},D=r({queryKey:[`console.gates.list`],queryFn:async()=>{let e=await s.gatesList();if(e.error)throw Error(e.error.code);return e.data},refetchInterval:1e4}),M=D.data,N=M?.principals??[],P=M?.flows??[],F=M?.violations??[],I=M?.widenings??[],L=M?.audit??{unguardedFlows:[],orphanPermissions:[],emptyRoles:[],unattachedGates:[]},R=(0,A.useMemo)(()=>T(L),[L]),z=(0,A.useMemo)(()=>a===`principal`?C(N,e.q??``):w(P,e.q??``),[a,N,P,e.q]),B=b(e.principal),V=B?N.find(e=>e.kind===B.kind&&e.id===B.id):void 0,H=P.find(t=>t.flowId===e.flow),U=i({mutationFn:async()=>{if(a===`flow`){if(!H)throw Error(`Select a flow`);let t=b(c||e.as);if(!t)throw Error(`Pick a principal to simulate as`);let n=await s.gatesSimulate({flowId:H.flowId,principal:t});if(n.error)throw Error(n.error.code);return n.data}if(!B)throw Error(`Select a principal`);let t=c||e.as;if(!t)throw Error(`Pick a flow to simulate`);let n=await s.gatesSimulate({flowId:t,principal:B});if(n.error)throw Error(n.error.code);return n.data},onSuccess:e=>{m(e)}}),W=i({mutationFn:async()=>{if(!B)throw Error(`Select a principal`);let e=await s.gatesPowers(B);if(e.error)throw Error(e.error.code);return e.data},onSuccess:e=>{_(e)}});return(0,j.jsxs)(`div`,{className:`flex h-full min-h-0 flex-col`,children:[(0,j.jsxs)(`header`,{className:`flex shrink-0 flex-wrap items-end gap-3 border-b border-[var(--oke-line)] px-4 py-3`,children:[(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`h1`,{className:`text-lg font-medium text-[var(--oke-fg)]`,children:`Gates`}),(0,j.jsx)(`p`,{className:`text-sm text-[var(--oke-muted)]`,children:`What can this principal do · what guards this flow`})]}),(0,j.jsxs)(`div`,{role:`group`,"aria-label":`Inquiry direction`,className:`flex gap-1`,children:[(0,j.jsx)(u,{type:`button`,variant:a===`principal`?`primary`:`ghost`,"aria-pressed":a===`principal`,onClick:()=>y({...e,from:`principal`,flow:void 0}),children:`From principal`}),(0,j.jsx)(u,{type:`button`,variant:a===`flow`?`primary`:`ghost`,"aria-pressed":a===`flow`,onClick:()=>y({...e,from:`flow`,principal:void 0}),children:`From flow`})]}),(0,j.jsxs)(`label`,{className:`ml-auto flex min-w-[12rem] flex-col gap-1 text-sm`,children:[(0,j.jsx)(`span`,{className:`text-[var(--oke-muted)]`,children:`Filter gates`}),(0,j.jsx)(o,{"aria-label":`Filter gates`,value:e.q??``,onChange:t=>y({...e,q:t.currentTarget.value||void 0})})]})]}),R.length>0?(0,j.jsxs)(`section`,{"aria-label":`Continuous security audit`,className:`border-b border-[var(--oke-line)] px-4 py-2`,role:`status`,children:[(0,j.jsx)(`h2`,{className:`sr-only`,children:`Standing audit`}),(0,j.jsx)(`ul`,{className:`flex flex-wrap gap-x-4 gap-y-1 text-sm text-[var(--oke-danger)]`,children:R.map(e=>(0,j.jsx)(`li`,{children:e.message},e.code))})]}):null,F.length>0?(0,j.jsxs)(`section`,{"aria-label":`Plane violations`,className:`border-b border-[var(--oke-line)] bg-[var(--oke-danger)]/10 px-4 py-2`,role:`alert`,children:[(0,j.jsx)(`h2`,{className:`text-sm font-medium text-[var(--oke-danger)]`,children:`Two-plane violations`}),(0,j.jsx)(`ul`,{className:`mt-1 text-sm text-[var(--oke-fg)]`,children:F.map(e=>(0,j.jsx)(`li`,{children:E(e)},e.operatorId))})]}):null,(0,j.jsxs)(`div`,{className:`flex min-h-0 flex-1`,children:[(0,j.jsxs)(`section`,{"aria-label":a===`principal`?`Principal list`:`Flow list`,className:`w-80 shrink-0 overflow-y-auto border-r border-[var(--oke-line)]`,children:[(0,j.jsx)(`h2`,{className:`sr-only`,children:a===`principal`?`Principals`:`Flows`}),D.isLoading?(0,j.jsx)(`p`,{className:`p-4 text-sm text-[var(--oke-muted)]`,children:`Loading…`}):null,z.map(t=>(0,j.jsxs)(`section`,{"aria-label":t.label,className:`py-2`,children:[(0,j.jsx)(`h3`,{className:`px-4 py-1 text-xs uppercase tracking-wide text-[var(--oke-muted)]`,children:t.label}),(0,j.jsx)(`ul`,{children:t.items.map(t=>{let n=a===`flow`?t.id===e.flow:t.id===e.principal;return(0,j.jsx)(`li`,{children:(0,j.jsxs)(`button`,{type:`button`,"aria-pressed":n,className:f(`flex min-h-10 w-full flex-col items-start px-4 py-2 text-left text-sm`,n?`bg-[var(--oke-line)] text-[var(--oke-fg)]`:`text-[var(--oke-muted)] hover:text-[var(--oke-fg)]`),onClick:()=>{if(m(null),_(null),a===`flow`)y(S(e,t.id));else{let n=b(t.id);if(!n)return;y(x(e,n.kind,n.id))}},children:[(0,j.jsx)(`span`,{className:`font-mono`,children:t.label}),t.meta?(0,j.jsx)(`span`,{className:`truncate text-xs`,children:t.meta}):null,t.flag?(0,j.jsx)(`span`,{role:`status`,className:`text-xs text-[var(--oke-danger)]`,children:t.flag}):null]})},t.id)})})]},t.id))]}),(0,j.jsx)(`section`,{"aria-label":`Gates detail`,"aria-live":`polite`,className:`min-w-0 flex-1 overflow-y-auto p-4`,children:!H&&!V?(0,j.jsx)(`p`,{className:`text-sm text-[var(--oke-muted)]`,children:`Choose a principal or a flow. The matrix is not the entry point.`}):(0,j.jsxs)(`div`,{className:`flex max-w-2xl flex-col gap-6`,children:[a===`flow`&&H?(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`h2`,{className:`font-mono text-lg text-[var(--oke-fg)]`,children:H.flowId}),(0,j.jsx)(`p`,{className:`text-sm text-[var(--oke-muted)]`,children:`What guards this — registration order`}),H.gates.length===0?(0,j.jsx)(`p`,{className:`mt-2 text-sm`,role:`status`,children:H.unguarded?`Unguarded — public on the user plane`:`No gates`}):(0,j.jsx)(`ol`,{"aria-label":`Gate chain`,className:`mt-3 list-decimal space-y-1 pl-5 text-sm`,children:H.gates.map(e=>{let t=M?.gates.find(t=>t.name===e);return(0,j.jsxs)(`li`,{children:[(0,j.jsx)(`span`,{children:h(e,t?.description)}),t?.description?(0,j.jsx)(`code`,{className:`ml-2 font-mono text-[var(--oke-muted)]`,children:e}):null]},e)})})]}):null,a===`principal`&&V?(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`h2`,{className:`font-mono text-lg text-[var(--oke-fg)]`,children:V.name}),(0,j.jsxs)(`p`,{className:`text-sm text-[var(--oke-muted)]`,children:[V.kind,` · `,V.plane,` plane`,V.email?` · ${V.email}`:``]}),(0,j.jsx)(`h3`,{className:`mt-4 text-sm font-medium`,children:`Scopes`}),(0,j.jsx)(`ul`,{"aria-label":`Scopes`,className:`mt-1 flex flex-wrap gap-2 text-sm`,children:V.scopes.map(e=>(0,j.jsx)(`li`,{children:(0,j.jsx)(`code`,{className:`font-mono`,children:e})},e))}),(0,j.jsx)(u,{type:`button`,variant:`ghost`,className:`mt-3`,onClick:()=>W.mutate(),children:`What can this do`}),g?(0,j.jsxs)(`div`,{className:`mt-3 text-sm`,children:[(0,j.jsxs)(`p`,{role:`status`,children:[g.allowedFlowIds.length,` flows allowed · `,g.deniedFlowIds.length,` `,`denied`]}),(0,j.jsx)(`ul`,{"aria-label":`Allowed flows`,className:`mt-2 list-disc pl-5`,children:g.allowedFlowIds.map(e=>(0,j.jsx)(`li`,{children:(0,j.jsx)(`code`,{className:`font-mono`,children:e})},e))})]}):null]}):null,(0,j.jsxs)(`section`,{"aria-label":`Simulator`,className:`border-t border-[var(--oke-line)] pt-4`,children:[(0,j.jsx)(`h3`,{className:`text-sm font-medium text-[var(--oke-fg)]`,children:`Simulator`}),(0,j.jsx)(`p`,{className:`text-sm text-[var(--oke-muted)]`,children:`Evaluates the real gate chain only — never runs the handler`}),(0,j.jsxs)(`label`,{className:`mt-3 flex max-w-md flex-col gap-1 text-sm`,children:[(0,j.jsx)(`span`,{className:`text-[var(--oke-muted)]`,children:a===`flow`?`Simulate as principal`:`Simulate against flow`}),(0,j.jsxs)(`select`,{"aria-label":`Companion selection`,className:`min-h-8 border border-[var(--oke-line)] bg-transparent px-2 text-sm text-[var(--oke-fg)]`,value:c,onChange:t=>{let n=t.currentTarget.value;l(n),y({...e,as:n||void 0})},children:[(0,j.jsx)(`option`,{value:``,children:`Select…`}),a===`flow`?N.map(e=>(0,j.jsxs)(`option`,{value:`${e.kind}:${e.id}`,children:[e.kind,`: `,e.name]},`${e.kind}:${e.id}`)):P.filter(e=>e.plane===`user`).map(e=>(0,j.jsx)(`option`,{value:e.flowId,children:e.flowId},e.flowId))]})]}),(0,j.jsx)(u,{type:`button`,className:`mt-3`,onClick:()=>U.mutate(),disabled:U.isPending,children:`Simulate`}),U.isError?(0,j.jsx)(`p`,{role:`alert`,className:`mt-2 text-sm text-[var(--oke-danger)]`,children:U.error instanceof Error?U.error.message:`Simulate failed`}):null,d?(0,j.jsxs)(`div`,{className:`mt-4`,children:[(0,j.jsx)(`ol`,{"aria-label":`Evaluation order`,className:`list-decimal space-y-1 pl-5 text-sm`,children:d.evaluations.map((e,t)=>(0,j.jsx)(`li`,{children:k(e,t)},`${e.name}-${t}`))}),(0,j.jsx)(`p`,{role:`status`,className:`mt-3 text-sm`,"data-denial":d.denial?.code??`allowed`,children:d.denial?O(d.denial):`Allowed — chain passed`})]}):null]}),I.length>0?(0,j.jsxs)(`section`,{"aria-label":`Permission widenings`,children:[(0,j.jsx)(`h3`,{className:`text-sm font-medium text-[var(--oke-danger)]`,children:`Deploy widenings`}),(0,j.jsx)(`ul`,{className:`mt-2 list-disc pl-5 text-sm`,children:I.map(e=>(0,j.jsx)(`li`,{children:e.summary},`${e.path}:${e.summary}`))})]}):null]})})]})]})}var N=t({default:()=>M});export{D as n,_ as r,N as t};
|
|
1
|
+
import{a as e,r as t}from"./rolldown-runtime-B0Z9INg1.js";import{C as n,Q as r,Z as i,b as a,c as o,d as s,g as c,nt as l,o as u,tt as d,u as f,w as p,y as m}from"./panel-access-BGv45snf.js";import{n as h}from"./panel-channels-9T3ybqRu.js";var g=m({q:a().optional(),from:c([`principal`,`flow`]).optional(),principal:a().optional(),flow:a().optional(),as:a().optional()});function _(e){let t=g.safeParse(e);return t.success?t.data:{}}function v(e){let t={};return e.q&&(t.q=e.q),e.from&&(t.from=e.from),e.principal&&(t.principal=e.principal),e.flow&&(t.flow=e.flow),e.as&&(t.as=e.as),t}function y(e,t){return`${e}:${t}`}function b(e){if(!e)return null;let t=e.indexOf(`:`);if(t===-1)return null;let n=e.slice(0,t),r=e.slice(t+1);return n!==`role`&&n!==`key`&&n!==`user`||!r?null:{kind:n,id:r}}function x(e,t,n){return{...e,from:`principal`,principal:y(t,n),flow:void 0}}function S(e,t){return{...e,from:`flow`,flow:t,principal:void 0}}function C(e,t=``){let n=t.trim().toLowerCase(),r=n?e.filter(e=>e.name.toLowerCase().includes(n)||e.id.toLowerCase().includes(n)||(e.email?.toLowerCase().includes(n)??!1)||e.scopes.some(e=>e.toLowerCase().includes(n))):e,i=[`role`,`key`,`user`],a={role:`Roles`,key:`API keys`,user:`Users`};return i.map(e=>({id:e,label:a[e],items:r.filter(t=>t.kind===e).map(t=>({id:`${t.kind}:${t.id}`,label:t.name,meta:e===`role`?`${t.scopes.length} scopes · ${t.memberCount??0} members`:`${t.scopes.length} scopes`,flag:t.plane===`operator`?`operator`:void 0}))})).filter(e=>e.items.length>0)}function w(e,t=``){let n=t.trim().toLowerCase(),r=n?e.filter(e=>e.flowId.toLowerCase().includes(n)||e.gates.some(e=>e.toLowerCase().includes(n))):e,i=[`user`,`operator`],a={user:`User plane`,operator:`Operator plane`};return i.map(e=>({id:e,label:a[e],items:r.filter(t=>t.plane===e).map(e=>({id:e.flowId,label:e.flowId,meta:e.gates.length===0?`ungated`:e.gates.join(` → `),flag:e.unguarded?`unguarded`:void 0}))})).filter(e=>e.items.length>0)}function T(e){let t=[];return e.unguardedFlows.length>0&&t.push({code:`unguarded`,count:e.unguardedFlows.length,message:`${e.unguardedFlows.length} user-plane flow${e.unguardedFlows.length===1?``:`s`} unguarded (public)`}),e.orphanPermissions.length>0&&t.push({code:`orphan-permissions`,count:e.orphanPermissions.length,message:`${e.orphanPermissions.length} permission${e.orphanPermissions.length===1?``:`s`} granted to no role`}),e.emptyRoles.length>0&&t.push({code:`empty-roles`,count:e.emptyRoles.length,message:`${e.emptyRoles.length} role${e.emptyRoles.length===1?``:`s`} with no members`}),e.unattachedGates.length>0&&t.push({code:`unattached`,count:e.unattachedGates.length,message:`${e.unattachedGates.length} gate${e.unattachedGates.length===1?``:`s`} never attached`}),t}function E(e){let t=e.applicationScopes.join(`, `);return`${e.email?`${e.name} <${e.email}>`:e.name} holds application scope(s): ${t}`}function D(e){return T(e).filter(e=>e.code===`unguarded`)}function O(e){switch(e.code){case`RateLimited`:return`RateLimited { retryAfterMs: ${typeof e.data.retryAfterMs==`number`?e.data.retryAfterMs:0} } · HTTP ${e.status}`;case`Forbidden`:{let t=typeof e.data.gate==`string`?e.data.gate:`?`,n=typeof e.data.reason==`string`?e.data.reason:``;return`Forbidden { gate: ${t}${n?`, reason: ${n}`:``} } · HTTP ${e.status}`}case`Unauthorized`:return`Unauthorized {} · HTTP ${e.status}`}}function k(e,t){let n=e.allowed?`pass`:`deny`,r=e.kind===`rate`&&e.retryAfterMs!==void 0?` · retryAfterMs ${e.retryAfterMs}`:e.reason?` · ${e.reason}`:``;return`${t+1}. ${e.name} — ${n}${r}`}var A=e(l(),1),j=d();function M(){let e=p({from:`/gates`}),t=n({from:`/gates`}),a=e.from??`flow`,[c,l]=(0,A.useState)(e.as??``),[d,m]=(0,A.useState)(null),[g,_]=(0,A.useState)(null),y=e=>{t({search:v(e),replace:!0})},D=r({queryKey:[`console.gates.list`],queryFn:async()=>{let e=await s.gatesList();if(e.error)throw Error(e.error.code);return e.data},refetchInterval:1e4}),M=D.data,N=M?.principals??[],P=M?.flows??[],F=M?.violations??[],I=M?.widenings??[],L=M?.audit??{unguardedFlows:[],orphanPermissions:[],emptyRoles:[],unattachedGates:[]},R=(0,A.useMemo)(()=>T(L),[L]),z=(0,A.useMemo)(()=>a===`principal`?C(N,e.q??``):w(P,e.q??``),[a,N,P,e.q]),B=b(e.principal),V=B?N.find(e=>e.kind===B.kind&&e.id===B.id):void 0,H=P.find(t=>t.flowId===e.flow),U=i({mutationFn:async()=>{if(a===`flow`){if(!H)throw Error(`Select a flow`);let t=b(c||e.as);if(!t)throw Error(`Pick a principal to simulate as`);let n=await s.gatesSimulate({flowId:H.flowId,principal:t});if(n.error)throw Error(n.error.code);return n.data}if(!B)throw Error(`Select a principal`);let t=c||e.as;if(!t)throw Error(`Pick a flow to simulate`);let n=await s.gatesSimulate({flowId:t,principal:B});if(n.error)throw Error(n.error.code);return n.data},onSuccess:e=>{m(e)}}),W=i({mutationFn:async()=>{if(!B)throw Error(`Select a principal`);let e=await s.gatesPowers(B);if(e.error)throw Error(e.error.code);return e.data},onSuccess:e=>{_(e)}});return(0,j.jsxs)(`div`,{className:`flex h-full min-h-0 flex-col`,children:[(0,j.jsxs)(`header`,{className:`flex shrink-0 flex-wrap items-end gap-3 border-b border-[var(--oke-line)] px-4 py-3`,children:[(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`h1`,{className:`text-lg font-medium text-[var(--oke-fg)]`,children:`Gates`}),(0,j.jsx)(`p`,{className:`text-sm text-[var(--oke-muted)]`,children:`What can this principal do · what guards this flow`})]}),(0,j.jsxs)(`div`,{role:`group`,"aria-label":`Inquiry direction`,className:`flex gap-1`,children:[(0,j.jsx)(u,{type:`button`,variant:a===`principal`?`primary`:`ghost`,"aria-pressed":a===`principal`,onClick:()=>y({...e,from:`principal`,flow:void 0}),children:`From principal`}),(0,j.jsx)(u,{type:`button`,variant:a===`flow`?`primary`:`ghost`,"aria-pressed":a===`flow`,onClick:()=>y({...e,from:`flow`,principal:void 0}),children:`From flow`})]}),(0,j.jsxs)(`label`,{className:`ml-auto flex min-w-[12rem] flex-col gap-1 text-sm`,children:[(0,j.jsx)(`span`,{className:`text-[var(--oke-muted)]`,children:`Filter gates`}),(0,j.jsx)(o,{"aria-label":`Filter gates`,value:e.q??``,onChange:t=>y({...e,q:t.currentTarget.value||void 0})})]})]}),R.length>0?(0,j.jsxs)(`section`,{"aria-label":`Continuous security audit`,className:`border-b border-[var(--oke-line)] px-4 py-2`,role:`status`,children:[(0,j.jsx)(`h2`,{className:`sr-only`,children:`Standing audit`}),(0,j.jsx)(`ul`,{className:`flex flex-wrap gap-x-4 gap-y-1 text-sm text-[var(--oke-danger)]`,children:R.map(e=>(0,j.jsx)(`li`,{children:e.message},e.code))})]}):null,F.length>0?(0,j.jsxs)(`section`,{"aria-label":`Plane violations`,className:`border-b border-[var(--oke-line)] bg-[var(--oke-danger)]/10 px-4 py-2`,role:`alert`,children:[(0,j.jsx)(`h2`,{className:`text-sm font-medium text-[var(--oke-danger)]`,children:`Two-plane violations`}),(0,j.jsx)(`ul`,{className:`mt-1 text-sm text-[var(--oke-fg)]`,children:F.map(e=>(0,j.jsx)(`li`,{children:E(e)},e.operatorId))})]}):null,(0,j.jsxs)(`div`,{className:`flex min-h-0 flex-1`,children:[(0,j.jsxs)(`section`,{"aria-label":a===`principal`?`Principal list`:`Flow list`,className:`w-80 shrink-0 overflow-y-auto border-r border-[var(--oke-line)]`,children:[(0,j.jsx)(`h2`,{className:`sr-only`,children:a===`principal`?`Principals`:`Flows`}),D.isLoading?(0,j.jsx)(`p`,{className:`p-4 text-sm text-[var(--oke-muted)]`,children:`Loading…`}):null,z.map(t=>(0,j.jsxs)(`section`,{"aria-label":t.label,className:`py-2`,children:[(0,j.jsx)(`h3`,{className:`px-4 py-1 text-xs uppercase tracking-wide text-[var(--oke-muted)]`,children:t.label}),(0,j.jsx)(`ul`,{children:t.items.map(t=>{let n=a===`flow`?t.id===e.flow:t.id===e.principal;return(0,j.jsx)(`li`,{children:(0,j.jsxs)(`button`,{type:`button`,"aria-pressed":n,className:f(`flex min-h-10 w-full flex-col items-start px-4 py-2 text-left text-sm`,n?`bg-[var(--oke-line)] text-[var(--oke-fg)]`:`text-[var(--oke-muted)] hover:text-[var(--oke-fg)]`),onClick:()=>{if(m(null),_(null),a===`flow`)y(S(e,t.id));else{let n=b(t.id);if(!n)return;y(x(e,n.kind,n.id))}},children:[(0,j.jsx)(`span`,{className:`font-mono`,children:t.label}),t.meta?(0,j.jsx)(`span`,{className:`truncate text-xs`,children:t.meta}):null,t.flag?(0,j.jsx)(`span`,{role:`status`,className:`text-xs text-[var(--oke-danger)]`,children:t.flag}):null]})},t.id)})})]},t.id))]}),(0,j.jsx)(`section`,{"aria-label":`Gates detail`,"aria-live":`polite`,className:`min-w-0 flex-1 overflow-y-auto p-4`,children:!H&&!V?(0,j.jsx)(`p`,{className:`text-sm text-[var(--oke-muted)]`,children:`Choose a principal or a flow. The matrix is not the entry point.`}):(0,j.jsxs)(`div`,{className:`flex max-w-2xl flex-col gap-6`,children:[a===`flow`&&H?(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`h2`,{className:`font-mono text-lg text-[var(--oke-fg)]`,children:H.flowId}),(0,j.jsx)(`p`,{className:`text-sm text-[var(--oke-muted)]`,children:`What guards this — registration order`}),H.gates.length===0?(0,j.jsx)(`p`,{className:`mt-2 text-sm`,role:`status`,children:H.unguarded?`Unguarded — public on the user plane`:`No gates`}):(0,j.jsx)(`ol`,{"aria-label":`Gate chain`,className:`mt-3 list-decimal space-y-1 pl-5 text-sm`,children:H.gates.map(e=>{let t=M?.gates.find(t=>t.name===e);return(0,j.jsxs)(`li`,{children:[(0,j.jsx)(`span`,{children:h(e,t?.description)}),t?.description?(0,j.jsx)(`code`,{className:`ml-2 font-mono text-[var(--oke-muted)]`,children:e}):null]},e)})})]}):null,a===`principal`&&V?(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`h2`,{className:`font-mono text-lg text-[var(--oke-fg)]`,children:V.name}),(0,j.jsxs)(`p`,{className:`text-sm text-[var(--oke-muted)]`,children:[V.kind,` · `,V.plane,` plane`,V.email?` · ${V.email}`:``]}),(0,j.jsx)(`h3`,{className:`mt-4 text-sm font-medium`,children:`Scopes`}),(0,j.jsx)(`ul`,{"aria-label":`Scopes`,className:`mt-1 flex flex-wrap gap-2 text-sm`,children:V.scopes.map(e=>(0,j.jsx)(`li`,{children:(0,j.jsx)(`code`,{className:`font-mono`,children:e})},e))}),(0,j.jsx)(u,{type:`button`,variant:`ghost`,className:`mt-3`,onClick:()=>W.mutate(),children:`What can this do`}),g?(0,j.jsxs)(`div`,{className:`mt-3 text-sm`,children:[(0,j.jsxs)(`p`,{role:`status`,children:[g.allowedFlowIds.length,` flows allowed · `,g.deniedFlowIds.length,` `,`denied`]}),(0,j.jsx)(`ul`,{"aria-label":`Allowed flows`,className:`mt-2 list-disc pl-5`,children:g.allowedFlowIds.map(e=>(0,j.jsx)(`li`,{children:(0,j.jsx)(`code`,{className:`font-mono`,children:e})},e))})]}):null]}):null,(0,j.jsxs)(`section`,{"aria-label":`Simulator`,className:`border-t border-[var(--oke-line)] pt-4`,children:[(0,j.jsx)(`h3`,{className:`text-sm font-medium text-[var(--oke-fg)]`,children:`Simulator`}),(0,j.jsx)(`p`,{className:`text-sm text-[var(--oke-muted)]`,children:`Evaluates the real gate chain only — never runs the handler`}),(0,j.jsxs)(`label`,{className:`mt-3 flex max-w-md flex-col gap-1 text-sm`,children:[(0,j.jsx)(`span`,{className:`text-[var(--oke-muted)]`,children:a===`flow`?`Simulate as principal`:`Simulate against flow`}),(0,j.jsxs)(`select`,{"aria-label":`Companion selection`,className:`min-h-8 border border-[var(--oke-line)] bg-transparent px-2 text-sm text-[var(--oke-fg)]`,value:c,onChange:t=>{let n=t.currentTarget.value;l(n),y({...e,as:n||void 0})},children:[(0,j.jsx)(`option`,{value:``,children:`Select…`}),a===`flow`?N.map(e=>(0,j.jsxs)(`option`,{value:`${e.kind}:${e.id}`,children:[e.kind,`: `,e.name]},`${e.kind}:${e.id}`)):P.filter(e=>e.plane===`user`).map(e=>(0,j.jsx)(`option`,{value:e.flowId,children:e.flowId},e.flowId))]})]}),(0,j.jsx)(u,{type:`button`,className:`mt-3`,onClick:()=>U.mutate(),disabled:U.isPending,children:`Simulate`}),U.isError?(0,j.jsx)(`p`,{role:`alert`,className:`mt-2 text-sm text-[var(--oke-danger)]`,children:U.error instanceof Error?U.error.message:`Simulate failed`}):null,d?(0,j.jsxs)(`div`,{className:`mt-4`,children:[(0,j.jsx)(`ol`,{"aria-label":`Evaluation order`,className:`list-decimal space-y-1 pl-5 text-sm`,children:d.evaluations.map((e,t)=>(0,j.jsx)(`li`,{children:k(e,t)},`${e.name}-${t}`))}),(0,j.jsx)(`p`,{role:`status`,className:`mt-3 text-sm`,"data-denial":d.denial?.code??`allowed`,children:d.denial?O(d.denial):`Allowed — chain passed`})]}):null]}),I.length>0?(0,j.jsxs)(`section`,{"aria-label":`Permission widenings`,children:[(0,j.jsx)(`h3`,{className:`text-sm font-medium text-[var(--oke-danger)]`,children:`Deploy widenings`}),(0,j.jsx)(`ul`,{className:`mt-2 list-disc pl-5 text-sm`,children:I.map(e=>(0,j.jsx)(`li`,{children:e.summary},`${e.path}:${e.summary}`))})]}):null]})})]})]})}var N=t({default:()=>M});export{D as n,_ as r,N as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as e,r as t}from"./rolldown-runtime-B0Z9INg1.js";import{Q as n,d as r,n as i,nt as a,tt as o,u as s}from"./panel-access-BGv45snf.js";import{n as c}from"./panel-diff-DmYbKWmN.js";import{n as l}from"./panel-ai-B2S7LEii.js";import{c as u,n as d,u as f}from"./panel-architecture-D7UJh91v.js";import{r as p}from"./panel-channels-9T3ybqRu.js";import{n as m}from"./panel-clock-Cb1UXGRQ.js";import{n as h}from"./panel-gates-BQGYXvjT.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=6048e5;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=36e5;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=7776e6;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=36e5,he=2592e6,ge=7776e6,G=36e5;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-C0J2D-a2.js";import{n as d}from"./panel-channels-DCDd4WAC.js";function f(e){return{q:typeof e.q==`string`&&e.q.length>0?e.q:void 0,origin:h(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 p(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 m(e,t){return{...e,plugin:t}}function h(e){return e===`core`||e===`local`||e===`community`}function g(e){return e.installCommand?e.installCommand:e.enableHint?e.enableHint:null}function _(e){return e.installCommand?`Copy bun add command`:e.enableHint?`Copy enable hint`:`No command`}var v={core:`Core`,local:`Local`,community:`Community`};function y(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)=>b(e.state,t.state,e.id,t.id));t.length!==0&&a.push({id:e,label:v[e],items:t})}return a}function b(e,t,n,r){return e===t?n.localeCompare(r):e===`on`?-1:1}var x=e(o(),1),S=c();function C(){let e=u({from:`/plugins`}),t=n({from:`/plugins`}),[o,s]=(0,x.useState)(null),c=e=>{t({search:p(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}),f=d.data,h=(0,x.useMemo)(()=>y(f?.plugins??[],e),[f?.plugins,e]),_=f?.plugins.find(t=>t.id===e.plugin)??f?.plugins[0]??null,v=_?g(_):null,b=async()=>{v&&(await navigator.clipboard.writeText(v),s(v),window.setTimeout(()=>s(null),2e3))};return(0,S.jsxs)(`div`,{className:`flex h-full min-h-0 flex-col`,children:[(0,S.jsxs)(`header`,{className:`shrink-0 border-b border-[var(--oke-line)] px-4 py-3`,children:[(0,S.jsx)(`h1`,{className:`text-lg text-[var(--oke-fg)]`,children:`Plugins`}),(0,S.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,S.jsxs)(`div`,{className:`mt-3 flex flex-wrap items-end gap-3`,children:[(0,S.jsxs)(`label`,{className:`flex flex-col gap-1 text-xs text-[var(--oke-muted)]`,children:[`Filter`,(0,S.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,S.jsx)(E,{value:e.origin,onChange:t=>c({...e,origin:t})}),(0,S.jsx)(D,{value:e.state,onChange:t=>c({...e,state:t})})]})]}),(0,S.jsxs)(`div`,{className:`flex min-h-0 flex-1`,children:[(0,S.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,S.jsx)(`p`,{className:`p-4 text-sm text-[var(--oke-muted)]`,children:`Loading…`}):h.length===0?(0,S.jsx)(`p`,{className:`p-4 text-sm text-[var(--oke-muted)]`,children:`No plugins`}):h.map(t=>(0,S.jsxs)(`div`,{className:`border-b border-[var(--oke-line)]`,children:[(0,S.jsx)(`h2`,{className:`px-3 py-2 text-xs tracking-wide text-[var(--oke-muted)] uppercase`,children:t.label}),(0,S.jsx)(`ul`,{children:t.items.map(t=>(0,S.jsx)(`li`,{children:(0,S.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(m(e,t.id)),children:[(0,S.jsx)(`span`,{className:`font-mono`,children:t.id}),(0,S.jsx)(`span`,{className:`ml-auto text-xs`,children:t.state})]})},t.id))})]},t.id))}),(0,S.jsx)(`section`,{"aria-label":`Plugin detail`,"aria-live":`polite`,className:`min-h-0 flex-1 overflow-y-auto px-4 py-3`,children:_?(0,S.jsx)(w,{plugin:_,command:v,copied:o,onCopy:()=>void b()}):(0,S.jsx)(`p`,{className:`text-sm text-[var(--oke-muted)]`,children:`Select a plugin`})})]})]})}function w(e){let{plugin:t,command:n,copied:r,onCopy:i}=e;return(0,S.jsxs)(`div`,{className:`flex flex-col gap-6`,children:[(0,S.jsxs)(`div`,{children:[(0,S.jsxs)(`h2`,{className:`text-base text-[var(--oke-fg)]`,children:[(0,S.jsx)(`span`,{className:`font-mono`,children:t.id}),` `,(0,S.jsxs)(`span`,{className:`text-sm text-[var(--oke-muted)]`,children:[`(`,t.origin,` · `,t.state,`)`]})]}),t.summary?(0,S.jsx)(`p`,{className:`mt-1 text-sm text-[var(--oke-muted)]`,children:t.summary}):null,t.version?(0,S.jsxs)(`p`,{className:`mt-1 text-xs text-[var(--oke-muted)]`,children:[`Version `,t.version]}):null]}),(0,S.jsxs)(`section`,{"aria-label":`Declares`,children:[(0,S.jsx)(`h3`,{className:`text-sm text-[var(--oke-fg)]`,children:`Declares`}),(0,S.jsx)(`p`,{className:`text-xs text-[var(--oke-muted)]`,children:`Boot-time — schema, elements, drivers, panels, CLI`}),t.declares.length===0?(0,S.jsx)(`p`,{className:`mt-2 text-sm text-[var(--oke-muted)]`,children:`None`}):(0,S.jsx)(`ul`,{className:`mt-2 list-inside list-disc text-sm`,children:t.declares.map(e=>{let n=e.startsWith(`table:`)?e.slice(6):null,r=n?t.tables[n]?.description:void 0;return(0,S.jsx)(`li`,{children:n&&r?(0,S.jsxs)(S.Fragment,{children:[(0,S.jsx)(`span`,{children:d(n,r)}),(0,S.jsx)(`code`,{className:`ml-2 font-mono text-[var(--oke-muted)]`,children:e})]}):(0,S.jsx)(`code`,{className:`font-mono`,children:e})},e)})})]}),(0,S.jsxs)(`section`,{"aria-label":`Intercepts`,children:[(0,S.jsx)(`h3`,{className:`text-sm text-[var(--oke-fg)]`,children:`Intercepts`}),(0,S.jsx)(`p`,{className:`text-xs text-[var(--oke-muted)]`,children:`Per-request hooks — measured in the kernel pipeline`}),t.intercepts.length===0?(0,S.jsx)(`p`,{className:`mt-2 text-sm text-[var(--oke-muted)]`,children:`None`}):(0,S.jsxs)(`table`,{className:`mt-2 w-full text-left text-sm`,children:[(0,S.jsx)(`caption`,{className:`sr-only`,children:`Hook stages and measured mean cost`}),(0,S.jsx)(`thead`,{children:(0,S.jsxs)(`tr`,{className:`text-xs text-[var(--oke-muted)]`,children:[(0,S.jsx)(`th`,{scope:`col`,className:`py-1 pr-3 font-normal`,children:`Stage`}),(0,S.jsx)(`th`,{scope:`col`,className:`py-1 pr-3 font-normal`,children:`Mean ms`}),(0,S.jsx)(`th`,{scope:`col`,className:`py-1 font-normal`,children:`Samples`})]})}),(0,S.jsx)(`tbody`,{children:t.intercepts.map(e=>(0,S.jsxs)(`tr`,{className:`border-t border-[var(--oke-line)]`,children:[(0,S.jsx)(`th`,{scope:`row`,className:`py-1 pr-3 font-mono font-normal`,children:e.stage}),(0,S.jsx)(`td`,{className:`py-1 pr-3`,children:e.meanMs===null?`—`:e.meanMs.toFixed(2)}),(0,S.jsx)(`td`,{className:`py-1`,children:e.count})]},e.stage))})]}),t.hookCost?(0,S.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,S.jsxs)(`section`,{"aria-label":`Supply chain`,children:[(0,S.jsx)(`h3`,{className:`text-sm text-[var(--oke-fg)]`,children:`Supply chain`}),(0,S.jsxs)(`ul`,{className:`mt-2 space-y-1 text-sm`,children:[(0,S.jsx)(T,{label:`Lifecycle scripts`,state:t.supplyChain.lifecycleScripts.state,detail:t.supplyChain.lifecycleScripts.detail}),(0,S.jsx)(T,{label:`Release cooldown`,state:t.supplyChain.releaseCooldown.state,detail:t.supplyChain.releaseCooldown.detail}),(0,S.jsx)(T,{label:`node: scan`,state:t.supplyChain.nodeImportScan.state,detail:t.supplyChain.nodeImportScan.detail}),(0,S.jsx)(T,{label:`npm provenance`,state:t.supplyChain.npmProvenance.state,detail:t.supplyChain.npmProvenance.detail}),(0,S.jsx)(T,{label:`Boot conflicts`,state:t.supplyChain.bootConflicts.state,detail:t.supplyChain.bootConflicts.detail})]})]}),(0,S.jsxs)(`section`,{"aria-label":`Capability diff`,children:[(0,S.jsx)(`h3`,{className:`text-sm text-[var(--oke-fg)]`,children:`Capability diff`}),(0,S.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,S.jsx)(`p`,{className:`mt-2 text-sm text-[var(--oke-muted)]`,children:`No pending capability changes for this plugin`}):(0,S.jsx)(`ul`,{className:`mt-2 space-y-1 text-sm`,children:t.capabilityDiff.map(e=>(0,S.jsxs)(`li`,{children:[(0,S.jsx)(`a`,{className:`text-[var(--oke-fg)] underline`,href:`/manifest-diff?path=${encodeURIComponent(e.path)}`,children:e.summary}),(0,S.jsx)(`span`,{className:`ml-2 text-xs text-[var(--oke-muted)]`,children:e.category})]},e.path))})]}),(0,S.jsxs)(`section`,{"aria-label":`Install command`,children:[(0,S.jsx)(`h3`,{className:`text-sm text-[var(--oke-fg)]`,children:`Command`}),n?(0,S.jsxs)(`div`,{className:`mt-2 flex flex-col gap-2`,children:[(0,S.jsx)(`pre`,{className:`overflow-x-auto rounded border border-[var(--oke-line)] bg-[var(--oke-bg)] p-3 font-mono text-sm`,children:(0,S.jsx)(`code`,{children:n})}),(0,S.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,S.jsx)(s,{type:`button`,onClick:i,className:`min-h-8`,children:_(t)}),r?(0,S.jsx)(`span`,{className:`text-xs text-[var(--oke-muted)]`,role:`status`,children:`Copied`}):null]}),(0,S.jsx)(`p`,{className:`text-xs text-[var(--oke-muted)]`,children:`The Console never installs. Git review is the approval — run this yourself.`})]}):(0,S.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 T(e){return(0,S.jsxs)(`li`,{children:[(0,S.jsxs)(`span`,{className:`text-[var(--oke-muted)]`,children:[e.label,`:`]}),` `,(0,S.jsx)(`span`,{className:`font-mono text-xs`,children:e.state}),(0,S.jsxs)(`span`,{className:`text-[var(--oke-muted)]`,children:[` — `,e.detail]})]})}function E(e){return(0,S.jsxs)(`fieldset`,{className:`flex flex-wrap items-center gap-2 text-xs`,children:[(0,S.jsx)(`legend`,{className:`sr-only`,children:`Origin`}),[[void 0,`All origins`],[`core`,`Core`],[`local`,`Local`],[`community`,`Community`]].map(([t,n])=>(0,S.jsxs)(`label`,{className:`inline-flex min-h-8 items-center gap-1`,children:[(0,S.jsx)(`input`,{type:`radio`,name:`plugins-origin`,checked:e.value===t,onChange:()=>e.onChange(t)}),n]},n))]})}function D(e){return(0,S.jsxs)(`fieldset`,{className:`flex flex-wrap items-center gap-2 text-xs`,children:[(0,S.jsx)(`legend`,{className:`sr-only`,children:`State`}),[[void 0,`All states`],[`on`,`On`],[`off`,`Off`]].map(([t,n])=>(0,S.jsxs)(`label`,{className:`inline-flex min-h-8 items-center gap-1`,children:[(0,S.jsx)(`input`,{type:`radio`,name:`plugins-state`,checked:e.value===t,onChange:()=>e.onChange(t)}),n]},n))]})}var O=t({default:()=>C});export{f as n,O as t};
|
|
1
|
+
import{a as e,r as t}from"./rolldown-runtime-B0Z9INg1.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-BGv45snf.js";import{n as d}from"./panel-channels-9T3ybqRu.js";function f(e){return{q:typeof e.q==`string`&&e.q.length>0?e.q:void 0,origin:h(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 p(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 m(e,t){return{...e,plugin:t}}function h(e){return e===`core`||e===`local`||e===`community`}function g(e){return e.installCommand?e.installCommand:e.enableHint?e.enableHint:null}function _(e){return e.installCommand?`Copy bun add command`:e.enableHint?`Copy enable hint`:`No command`}var v={core:`Core`,local:`Local`,community:`Community`};function y(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)=>b(e.state,t.state,e.id,t.id));t.length!==0&&a.push({id:e,label:v[e],items:t})}return a}function b(e,t,n,r){return e===t?n.localeCompare(r):e===`on`?-1:1}var x=e(o(),1),S=c();function C(){let e=u({from:`/plugins`}),t=n({from:`/plugins`}),[o,s]=(0,x.useState)(null),c=e=>{t({search:p(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}),f=d.data,h=(0,x.useMemo)(()=>y(f?.plugins??[],e),[f?.plugins,e]),_=f?.plugins.find(t=>t.id===e.plugin)??f?.plugins[0]??null,v=_?g(_):null,b=async()=>{v&&(await navigator.clipboard.writeText(v),s(v),window.setTimeout(()=>s(null),2e3))};return(0,S.jsxs)(`div`,{className:`flex h-full min-h-0 flex-col`,children:[(0,S.jsxs)(`header`,{className:`shrink-0 border-b border-[var(--oke-line)] px-4 py-3`,children:[(0,S.jsx)(`h1`,{className:`text-lg text-[var(--oke-fg)]`,children:`Plugins`}),(0,S.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,S.jsxs)(`div`,{className:`mt-3 flex flex-wrap items-end gap-3`,children:[(0,S.jsxs)(`label`,{className:`flex flex-col gap-1 text-xs text-[var(--oke-muted)]`,children:[`Filter`,(0,S.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,S.jsx)(E,{value:e.origin,onChange:t=>c({...e,origin:t})}),(0,S.jsx)(D,{value:e.state,onChange:t=>c({...e,state:t})})]})]}),(0,S.jsxs)(`div`,{className:`flex min-h-0 flex-1`,children:[(0,S.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,S.jsx)(`p`,{className:`p-4 text-sm text-[var(--oke-muted)]`,children:`Loading…`}):h.length===0?(0,S.jsx)(`p`,{className:`p-4 text-sm text-[var(--oke-muted)]`,children:`No plugins`}):h.map(t=>(0,S.jsxs)(`div`,{className:`border-b border-[var(--oke-line)]`,children:[(0,S.jsx)(`h2`,{className:`px-3 py-2 text-xs tracking-wide text-[var(--oke-muted)] uppercase`,children:t.label}),(0,S.jsx)(`ul`,{children:t.items.map(t=>(0,S.jsx)(`li`,{children:(0,S.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(m(e,t.id)),children:[(0,S.jsx)(`span`,{className:`font-mono`,children:t.id}),(0,S.jsx)(`span`,{className:`ml-auto text-xs`,children:t.state})]})},t.id))})]},t.id))}),(0,S.jsx)(`section`,{"aria-label":`Plugin detail`,"aria-live":`polite`,className:`min-h-0 flex-1 overflow-y-auto px-4 py-3`,children:_?(0,S.jsx)(w,{plugin:_,command:v,copied:o,onCopy:()=>void b()}):(0,S.jsx)(`p`,{className:`text-sm text-[var(--oke-muted)]`,children:`Select a plugin`})})]})]})}function w(e){let{plugin:t,command:n,copied:r,onCopy:i}=e;return(0,S.jsxs)(`div`,{className:`flex flex-col gap-6`,children:[(0,S.jsxs)(`div`,{children:[(0,S.jsxs)(`h2`,{className:`text-base text-[var(--oke-fg)]`,children:[(0,S.jsx)(`span`,{className:`font-mono`,children:t.id}),` `,(0,S.jsxs)(`span`,{className:`text-sm text-[var(--oke-muted)]`,children:[`(`,t.origin,` · `,t.state,`)`]})]}),t.summary?(0,S.jsx)(`p`,{className:`mt-1 text-sm text-[var(--oke-muted)]`,children:t.summary}):null,t.version?(0,S.jsxs)(`p`,{className:`mt-1 text-xs text-[var(--oke-muted)]`,children:[`Version `,t.version]}):null]}),(0,S.jsxs)(`section`,{"aria-label":`Declares`,children:[(0,S.jsx)(`h3`,{className:`text-sm text-[var(--oke-fg)]`,children:`Declares`}),(0,S.jsx)(`p`,{className:`text-xs text-[var(--oke-muted)]`,children:`Boot-time — schema, elements, drivers, panels, CLI`}),t.declares.length===0?(0,S.jsx)(`p`,{className:`mt-2 text-sm text-[var(--oke-muted)]`,children:`None`}):(0,S.jsx)(`ul`,{className:`mt-2 list-inside list-disc text-sm`,children:t.declares.map(e=>{let n=e.startsWith(`table:`)?e.slice(6):null,r=n?t.tables[n]?.description:void 0;return(0,S.jsx)(`li`,{children:n&&r?(0,S.jsxs)(S.Fragment,{children:[(0,S.jsx)(`span`,{children:d(n,r)}),(0,S.jsx)(`code`,{className:`ml-2 font-mono text-[var(--oke-muted)]`,children:e})]}):(0,S.jsx)(`code`,{className:`font-mono`,children:e})},e)})})]}),(0,S.jsxs)(`section`,{"aria-label":`Intercepts`,children:[(0,S.jsx)(`h3`,{className:`text-sm text-[var(--oke-fg)]`,children:`Intercepts`}),(0,S.jsx)(`p`,{className:`text-xs text-[var(--oke-muted)]`,children:`Per-request hooks — measured in the kernel pipeline`}),t.intercepts.length===0?(0,S.jsx)(`p`,{className:`mt-2 text-sm text-[var(--oke-muted)]`,children:`None`}):(0,S.jsxs)(`table`,{className:`mt-2 w-full text-left text-sm`,children:[(0,S.jsx)(`caption`,{className:`sr-only`,children:`Hook stages and measured mean cost`}),(0,S.jsx)(`thead`,{children:(0,S.jsxs)(`tr`,{className:`text-xs text-[var(--oke-muted)]`,children:[(0,S.jsx)(`th`,{scope:`col`,className:`py-1 pr-3 font-normal`,children:`Stage`}),(0,S.jsx)(`th`,{scope:`col`,className:`py-1 pr-3 font-normal`,children:`Mean ms`}),(0,S.jsx)(`th`,{scope:`col`,className:`py-1 font-normal`,children:`Samples`})]})}),(0,S.jsx)(`tbody`,{children:t.intercepts.map(e=>(0,S.jsxs)(`tr`,{className:`border-t border-[var(--oke-line)]`,children:[(0,S.jsx)(`th`,{scope:`row`,className:`py-1 pr-3 font-mono font-normal`,children:e.stage}),(0,S.jsx)(`td`,{className:`py-1 pr-3`,children:e.meanMs===null?`—`:e.meanMs.toFixed(2)}),(0,S.jsx)(`td`,{className:`py-1`,children:e.count})]},e.stage))})]}),t.hookCost?(0,S.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,S.jsxs)(`section`,{"aria-label":`Supply chain`,children:[(0,S.jsx)(`h3`,{className:`text-sm text-[var(--oke-fg)]`,children:`Supply chain`}),(0,S.jsxs)(`ul`,{className:`mt-2 space-y-1 text-sm`,children:[(0,S.jsx)(T,{label:`Lifecycle scripts`,state:t.supplyChain.lifecycleScripts.state,detail:t.supplyChain.lifecycleScripts.detail}),(0,S.jsx)(T,{label:`Release cooldown`,state:t.supplyChain.releaseCooldown.state,detail:t.supplyChain.releaseCooldown.detail}),(0,S.jsx)(T,{label:`node: scan`,state:t.supplyChain.nodeImportScan.state,detail:t.supplyChain.nodeImportScan.detail}),(0,S.jsx)(T,{label:`npm provenance`,state:t.supplyChain.npmProvenance.state,detail:t.supplyChain.npmProvenance.detail}),(0,S.jsx)(T,{label:`Boot conflicts`,state:t.supplyChain.bootConflicts.state,detail:t.supplyChain.bootConflicts.detail})]})]}),(0,S.jsxs)(`section`,{"aria-label":`Capability diff`,children:[(0,S.jsx)(`h3`,{className:`text-sm text-[var(--oke-fg)]`,children:`Capability diff`}),(0,S.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,S.jsx)(`p`,{className:`mt-2 text-sm text-[var(--oke-muted)]`,children:`No pending capability changes for this plugin`}):(0,S.jsx)(`ul`,{className:`mt-2 space-y-1 text-sm`,children:t.capabilityDiff.map(e=>(0,S.jsxs)(`li`,{children:[(0,S.jsx)(`a`,{className:`text-[var(--oke-fg)] underline`,href:`/manifest-diff?path=${encodeURIComponent(e.path)}`,children:e.summary}),(0,S.jsx)(`span`,{className:`ml-2 text-xs text-[var(--oke-muted)]`,children:e.category})]},e.path))})]}),(0,S.jsxs)(`section`,{"aria-label":`Install command`,children:[(0,S.jsx)(`h3`,{className:`text-sm text-[var(--oke-fg)]`,children:`Command`}),n?(0,S.jsxs)(`div`,{className:`mt-2 flex flex-col gap-2`,children:[(0,S.jsx)(`pre`,{className:`overflow-x-auto rounded border border-[var(--oke-line)] bg-[var(--oke-bg)] p-3 font-mono text-sm`,children:(0,S.jsx)(`code`,{children:n})}),(0,S.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,S.jsx)(s,{type:`button`,onClick:i,className:`min-h-8`,children:_(t)}),r?(0,S.jsx)(`span`,{className:`text-xs text-[var(--oke-muted)]`,role:`status`,children:`Copied`}):null]}),(0,S.jsx)(`p`,{className:`text-xs text-[var(--oke-muted)]`,children:`The Console never installs. Git review is the approval — run this yourself.`})]}):(0,S.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 T(e){return(0,S.jsxs)(`li`,{children:[(0,S.jsxs)(`span`,{className:`text-[var(--oke-muted)]`,children:[e.label,`:`]}),` `,(0,S.jsx)(`span`,{className:`font-mono text-xs`,children:e.state}),(0,S.jsxs)(`span`,{className:`text-[var(--oke-muted)]`,children:[` — `,e.detail]})]})}function E(e){return(0,S.jsxs)(`fieldset`,{className:`flex flex-wrap items-center gap-2 text-xs`,children:[(0,S.jsx)(`legend`,{className:`sr-only`,children:`Origin`}),[[void 0,`All origins`],[`core`,`Core`],[`local`,`Local`],[`community`,`Community`]].map(([t,n])=>(0,S.jsxs)(`label`,{className:`inline-flex min-h-8 items-center gap-1`,children:[(0,S.jsx)(`input`,{type:`radio`,name:`plugins-origin`,checked:e.value===t,onChange:()=>e.onChange(t)}),n]},n))]})}function D(e){return(0,S.jsxs)(`fieldset`,{className:`flex flex-wrap items-center gap-2 text-xs`,children:[(0,S.jsx)(`legend`,{className:`sr-only`,children:`State`}),[[void 0,`All states`],[`on`,`On`],[`off`,`Off`]].map(([t,n])=>(0,S.jsxs)(`label`,{className:`inline-flex min-h-8 items-center gap-1`,children:[(0,S.jsx)(`input`,{type:`radio`,name:`plugins-state`,checked:e.value===t,onChange:()=>e.onChange(t)}),n]},n))]})}var O=t({default:()=>C});export{f as n,O as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as e,r as t,t as n}from"./rolldown-runtime-B0Z9INg1.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-BGv45snf.js";import{i as te}from"./panel-ai-B2S7LEii.js";import{c as ne,l as x}from"./panel-architecture-D7UJh91v.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-BBnRO18l.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 l,nt as u,o as d,r as f,tt as p,u as m,v as h,w as g,x as _,y as v}from"./panel-access-C0J2D-a2.js";import{r as y}from"./panel-runs-C0gmnoYL.js";import{i as b}from"./panel-ai-D_m6WQI8.js";import{n as x}from"./panel-channels-DCDd4WAC.js";var S=v({q:s().optional(),signal:s().optional(),dlq:s().optional(),paused:_([a(),h(`true`),h(`false`)]).optional().transform(e=>e===void 0?void 0:e===!0||e===`true`),rate:b().min(1).max(1e3).optional(),sub:s().optional()});function C(e){let t=S.safeParse(e);return t.success?t.data:{}}function w(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 T(e,t){return{...e,signal:t,dlq:void 0}}function E(e){let{signal:t,dlq:n,...r}=e;return r}function D(e,t){return{...e,dlq:t}}function O(e){let{dlq:t,...n}=e;return n}var k=[`once`,`broadcast`,`live`],A={once:`Once — competing consumers`,broadcast:`Broadcast — every subscriber`,live:`Live — client stream`};function ee(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 k.map(e=>({delivery:e,label:A[e],signals:r.filter(t=>t.delivery===e)})).filter(e=>e.signals.length>0)}function te(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 ne(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:f}}function re(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:f}}function ie(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 ae(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(u(),1),R=p();function z(){let e=g({from:`/signals`}),t=n({from:`/signals`}),a=l(),[s,u]=(0,L.useState)({}),[f,p]=(0,L.useState)(``),[h,_]=(0,L.useState)(``),[v,b]=(0,L.useState)(null),[S,C]=(0,L.useState)(()=>F()),[k,A]=(0,L.useState)(new Set),z=e=>{t({search:w(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)(()=>ee(H,e.q??``),[H,e.q]),W=H.find(t=>t.name===e.signal),G=W?te(W.consumersDurable):null,K=W?.deadLetters.find(t=>t.id===e.dlq),q=W?ie(W.schema):[],J=W?ne(W,{production:!0}):null,Y=W?re(W,{production:!0}):null,X=W?I(W):null;(0,L.useEffect)(()=>{K&&(u(ae(K.payload,q)),p(``),_(``))},[K?.id,W?.name]),(0,L.useEffect)(()=>{if(!(!W||W.delivery!==`live`)){if(e.paused){C(e=>M(e,!0));return}C(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=k.size>0?[...k]: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`:``;b(`${e.succeeded} would succeed, ${e.failed} would still fail${t}`)},onError:e=>{b(e instanceof Error?e.message:`Dry-run refused`)}}),Q=i({mutationFn:async()=>{if(!W||!J)return;if(J.kind===`typed`){let e=o({typed:f,reason:h,phrase:J.phrase});if(e)throw Error(e.typed??e.reason??`confirm`)}let t=k.size>0?[...k]: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`?f:void 0,reason:J.kind===`typed`?h:void 0});if(r.error)throw Error(r.error.code);return r.data},onSuccess:()=>{a.invalidateQueries({queryKey:[`console.signals.list`]}),b(null),A(new Set)}}),$=i({mutationFn:async()=>{if(!W||!Y)return;if(Y.kind===`typed`){let e=o({typed:f,reason:h,phrase:Y.phrase});if(e)throw Error(e.typed??e.reason??`confirm`)}let e=k.size>0?[...k]:K?[K.id]:W.deadLetters.map(e=>e.id),t=await c.signalsDiscard({signal:W.name,messageIds:e,confirmation:Y.kind===`typed`?f:void 0,reason:Y.kind===`typed`?h:void 0});if(t.error)throw Error(t.error.code);return t.data},onSuccess:()=>{a.invalidateQueries({queryKey:[`console.signals.list`]}),K&&z(O(e)),A(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:m(`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(T(e,t.name)),children:[(0,R.jsxs)(`span`,{className:`font-medium`,children:[x(t.name,t.description),t.orphaned?(0,R.jsx)(`span`,{role:`status`,className:`ml-2 text-xs text-[var(--oke-muted)]`,children:`orphaned`}):null]}),t.description?(0,R.jsx)(`span`,{className:`font-mono text-xs text-[var(--oke-muted)]`,children:t.name}):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:x(W.name,W.description)}),W.description?(0,R.jsx)(`p`,{className:`font-mono text-sm text-[var(--oke-muted)]`,children:W.name}):null,(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)(d,{type:`button`,variant:`ghost`,onClick:()=>z(E(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)(d,{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)(d,{type:`button`,variant:`ghost`,onClick:()=>{let t=!S.paused;C(e=>M(e,t)),z({...e,paused:t||void 0})},children:S.paused?`Resume`:`Pause`}),(0,R.jsx)(d,{type:`button`,variant:`ghost`,onClick:()=>{let e=new Blob([P(S.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`}),S.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:()=>{C(t=>{let n=N(t);return n.paused&&!t.paused&&z({...e,paused:!0}),n})},children:(S.payloads.length?S.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)(y,{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)(y,{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)(d,{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)(d,{type:`button`,onClick:()=>Q.mutate(),disabled:Q.isPending||!v,children:`Replay`}),(0,R.jsx)(d,{type:`button`,variant:`ghost`,onClick:()=>$.mutate(),disabled:$.isPending,children:`Discard`})]}),v?(0,R.jsx)(`p`,{role:`status`,className:`text-sm`,children:v}):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:f,onChange:e=>p(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:h,onChange:e=>_(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:k.has(t.id),onChange:e=>{A(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(D(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)(d,{type:`button`,variant:`ghost`,onClick:()=>z(O(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=>u(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=>u(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=>u({_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)(y,{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)(d,{type:`button`,onClick:()=>{A(new Set([K.id])),Q.mutate()},children:`Replay this message`}),(0,R.jsx)(d,{type:`button`,variant:`ghost`,onClick:()=>{A(new Set([K.id])),$.mutate()},children:`Discard`})]})]}):null]})})]})]})}var B=t({default:()=>z});export{C as n,B as t};
|
|
1
|
+
import{a as e,r as t}from"./rolldown-runtime-B0Z9INg1.js";import{C as n,Q as r,Z as i,_ as a,a as o,b as s,d as c,et as l,nt as u,o as d,r as f,tt as p,u as m,v as h,w as g,x as _,y as v}from"./panel-access-BGv45snf.js";import{r as y}from"./panel-runs-CWuRDe0r.js";import{i as b}from"./panel-ai-B2S7LEii.js";import{n as x}from"./panel-channels-9T3ybqRu.js";var S=v({q:s().optional(),signal:s().optional(),dlq:s().optional(),paused:_([a(),h(`true`),h(`false`)]).optional().transform(e=>e===void 0?void 0:e===!0||e===`true`),rate:b().min(1).max(1e3).optional(),sub:s().optional()});function C(e){let t=S.safeParse(e);return t.success?t.data:{}}function w(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 T(e,t){return{...e,signal:t,dlq:void 0}}function E(e){let{signal:t,dlq:n,...r}=e;return r}function D(e,t){return{...e,dlq:t}}function O(e){let{dlq:t,...n}=e;return n}var k=[`once`,`broadcast`,`live`],A={once:`Once — competing consumers`,broadcast:`Broadcast — every subscriber`,live:`Live — client stream`};function ee(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 k.map(e=>({delivery:e,label:A[e],signals:r.filter(t=>t.delivery===e)})).filter(e=>e.signals.length>0)}function te(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 ne(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:f}}function re(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:f}}function ie(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 ae(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(u(),1),R=p();function z(){let e=g({from:`/signals`}),t=n({from:`/signals`}),a=l(),[s,u]=(0,L.useState)({}),[f,p]=(0,L.useState)(``),[h,_]=(0,L.useState)(``),[v,b]=(0,L.useState)(null),[S,C]=(0,L.useState)(()=>F()),[k,A]=(0,L.useState)(new Set),z=e=>{t({search:w(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)(()=>ee(H,e.q??``),[H,e.q]),W=H.find(t=>t.name===e.signal),G=W?te(W.consumersDurable):null,K=W?.deadLetters.find(t=>t.id===e.dlq),q=W?ie(W.schema):[],J=W?ne(W,{production:!0}):null,Y=W?re(W,{production:!0}):null,X=W?I(W):null;(0,L.useEffect)(()=>{K&&(u(ae(K.payload,q)),p(``),_(``))},[K?.id,W?.name]),(0,L.useEffect)(()=>{if(!(!W||W.delivery!==`live`)){if(e.paused){C(e=>M(e,!0));return}C(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=k.size>0?[...k]: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`:``;b(`${e.succeeded} would succeed, ${e.failed} would still fail${t}`)},onError:e=>{b(e instanceof Error?e.message:`Dry-run refused`)}}),Q=i({mutationFn:async()=>{if(!W||!J)return;if(J.kind===`typed`){let e=o({typed:f,reason:h,phrase:J.phrase});if(e)throw Error(e.typed??e.reason??`confirm`)}let t=k.size>0?[...k]: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`?f:void 0,reason:J.kind===`typed`?h:void 0});if(r.error)throw Error(r.error.code);return r.data},onSuccess:()=>{a.invalidateQueries({queryKey:[`console.signals.list`]}),b(null),A(new Set)}}),$=i({mutationFn:async()=>{if(!W||!Y)return;if(Y.kind===`typed`){let e=o({typed:f,reason:h,phrase:Y.phrase});if(e)throw Error(e.typed??e.reason??`confirm`)}let e=k.size>0?[...k]:K?[K.id]:W.deadLetters.map(e=>e.id),t=await c.signalsDiscard({signal:W.name,messageIds:e,confirmation:Y.kind===`typed`?f:void 0,reason:Y.kind===`typed`?h:void 0});if(t.error)throw Error(t.error.code);return t.data},onSuccess:()=>{a.invalidateQueries({queryKey:[`console.signals.list`]}),K&&z(O(e)),A(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:m(`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(T(e,t.name)),children:[(0,R.jsxs)(`span`,{className:`font-medium`,children:[x(t.name,t.description),t.orphaned?(0,R.jsx)(`span`,{role:`status`,className:`ml-2 text-xs text-[var(--oke-muted)]`,children:`orphaned`}):null]}),t.description?(0,R.jsx)(`span`,{className:`font-mono text-xs text-[var(--oke-muted)]`,children:t.name}):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:x(W.name,W.description)}),W.description?(0,R.jsx)(`p`,{className:`font-mono text-sm text-[var(--oke-muted)]`,children:W.name}):null,(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)(d,{type:`button`,variant:`ghost`,onClick:()=>z(E(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)(d,{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)(d,{type:`button`,variant:`ghost`,onClick:()=>{let t=!S.paused;C(e=>M(e,t)),z({...e,paused:t||void 0})},children:S.paused?`Resume`:`Pause`}),(0,R.jsx)(d,{type:`button`,variant:`ghost`,onClick:()=>{let e=new Blob([P(S.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`}),S.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:()=>{C(t=>{let n=N(t);return n.paused&&!t.paused&&z({...e,paused:!0}),n})},children:(S.payloads.length?S.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)(y,{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)(y,{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)(d,{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)(d,{type:`button`,onClick:()=>Q.mutate(),disabled:Q.isPending||!v,children:`Replay`}),(0,R.jsx)(d,{type:`button`,variant:`ghost`,onClick:()=>$.mutate(),disabled:$.isPending,children:`Discard`})]}),v?(0,R.jsx)(`p`,{role:`status`,className:`text-sm`,children:v}):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:f,onChange:e=>p(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:h,onChange:e=>_(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:k.has(t.id),onChange:e=>{A(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(D(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)(d,{type:`button`,variant:`ghost`,onClick:()=>z(O(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=>u(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=>u(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=>u({_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)(y,{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)(d,{type:`button`,onClick:()=>{A(new Set([K.id])),Q.mutate()},children:`Replay this message`}),(0,R.jsx)(d,{type:`button`,variant:`ghost`,onClick:()=>{A(new Set([K.id])),$.mutate()},children:`Discard`})]})]}):null]})})]})]})}var B=t({default:()=>z});export{C 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-C0J2D-a2.js";import{r as _}from"./panel-runs-C0gmnoYL.js";import{n as v}from"./panel-channels-DCDd4WAC.js";var y=g({q:o().optional(),ref:o().optional(),child:o().optional(),tenant:o().optional(),view:l([`browse`,`cache`,`sql`,`probe`]).optional(),prefix:o().optional()});function b(e){let t=y.safeParse(e);return t.success?t.data:{}}function x(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 S(e,t){return{...e,ref:t,child:void 0,view:`browse`}}function C(e,t){return{...e,child:t,view:`browse`}}var w=[`sql`,`kv`,`files`,`index`],T={sql:`SQL`,kv:`KV`,files:`Files`,index:`Index`};function E(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 w.map(e=>({facet:e,label:T[e],stores:r.filter(t=>t.facet===e)})).filter(e=>e.stores.length>0)}function D(e={production:!0}){return e.production?{kind:`typed`,phrase:`EDIT`,requireReason:!0}:{kind:`undo`,windowMs:f}}function O(e={production:!0}){return e.production?{kind:`typed`,phrase:`DELETE`,requireReason:!0}:{kind:`undo`,windowMs:f}}function k(e={production:!0}){return e.production?{kind:`typed`,phrase:`PURGE`,requireReason:!0}:{kind:`undo`,windowMs:f}}function A(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 j(e){return e.facet===`index`?{ok:!1,reason:`Index facet has no bulk-update preview — similarity probe is read-only.`}:{ok:!0}}function ee(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)(`{}`),[_,y]=(0,M.useState)(`SELECT * FROM "bookings" LIMIT 50`),[b,C]=(0,M.useState)(`0.1,0.2,0.3`),[w,T]=(0,M.useState)(null),P=e=>{t({search:x(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,te=I.data?.tenants??[],R=I.data?.stores??[],ne=(0,M.useMemo)(()=>E(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=D({production:!0}),U=O({production:!0}),W=k({production:!0}),G=z?j(z):null,re=B?A(B.willNotFire):null,ie=B?ee(B):null,K=r({queryKey:[`console.store.query`,e.ref,B?.name,e.tenant,e.prefix,V,b],enabled:!!z&&!!B&&V===`browse`&&(!L||!!e.tenant),queryFn:async()=>{if(!z||!B)return null;let t=z.facet===`index`?b.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(``),T(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 T(A(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…`}),te.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,ne.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(S(e,t.ref)),children:[(0,N.jsx)(`span`,{children:v(t.name,t.description)}),t.description?(0,N.jsx)(`span`,{className:`font-mono text-xs text-[var(--oke-muted)]`,children:t.name}):null,(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:ie,willNot:re,willNotPreview:w,patchJson:p,setPatchJson:g,typed:l,setTyped:u,reason:d,setReason:f,sqlText:_,setSqlText:y,probeVector:b,setProbeVector:C,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:y,setReason:b,sqlText:x,setSqlText:S,probeVector:w,setProbeVector:T,onPreview:E,onCommit:D,onDelete:O,onPurge:k,onSql:A,sqlResult:j,onReveal:ee,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:v(t.name,t.description)}),(0,N.jsxs)(`span`,{className:`text-sm text-[var(--oke-muted)]`,children:[t.description?`${t.name} · `:``,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(C(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:k,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:x,onChange:e=>S(e.target.value)}),(0,N.jsx)(d,{type:`button`,onClick:A,children:`Run`}),j?(0,N.jsxs)(`p`,{className:`text-xs text-[var(--oke-muted)]`,children:[j.rows.length,` row(s) · routed `,j.routedRole,j.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:w,onChange:e=>T(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:v(e,F?.columnDescriptions[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:()=>ee(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:()=>O([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:()=>O([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:y,onChange:e=>b(e.target.value)})]}),(0,N.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[(0,N.jsx)(d,{type:`button`,onClick:E,children:`Preview`}),(0,N.jsx)(d,{type:`button`,onClick:D,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{b as n,I as t};
|
|
1
|
+
import{a as e,r as t}from"./rolldown-runtime-B0Z9INg1.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-BGv45snf.js";import{r as _}from"./panel-runs-CWuRDe0r.js";import{n as v}from"./panel-channels-9T3ybqRu.js";var y=g({q:o().optional(),ref:o().optional(),child:o().optional(),tenant:o().optional(),view:l([`browse`,`cache`,`sql`,`probe`]).optional(),prefix:o().optional()});function b(e){let t=y.safeParse(e);return t.success?t.data:{}}function x(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 S(e,t){return{...e,ref:t,child:void 0,view:`browse`}}function C(e,t){return{...e,child:t,view:`browse`}}var w=[`sql`,`kv`,`files`,`index`],T={sql:`SQL`,kv:`KV`,files:`Files`,index:`Index`};function E(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 w.map(e=>({facet:e,label:T[e],stores:r.filter(t=>t.facet===e)})).filter(e=>e.stores.length>0)}function D(e={production:!0}){return e.production?{kind:`typed`,phrase:`EDIT`,requireReason:!0}:{kind:`undo`,windowMs:f}}function O(e={production:!0}){return e.production?{kind:`typed`,phrase:`DELETE`,requireReason:!0}:{kind:`undo`,windowMs:f}}function k(e={production:!0}){return e.production?{kind:`typed`,phrase:`PURGE`,requireReason:!0}:{kind:`undo`,windowMs:f}}function A(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 j(e){return e.facet===`index`?{ok:!1,reason:`Index facet has no bulk-update preview — similarity probe is read-only.`}:{ok:!0}}function ee(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)(`{}`),[_,y]=(0,M.useState)(`SELECT * FROM "bookings" LIMIT 50`),[b,C]=(0,M.useState)(`0.1,0.2,0.3`),[w,T]=(0,M.useState)(null),P=e=>{t({search:x(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,te=I.data?.tenants??[],R=I.data?.stores??[],ne=(0,M.useMemo)(()=>E(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=D({production:!0}),U=O({production:!0}),W=k({production:!0}),G=z?j(z):null,re=B?A(B.willNotFire):null,ie=B?ee(B):null,K=r({queryKey:[`console.store.query`,e.ref,B?.name,e.tenant,e.prefix,V,b],enabled:!!z&&!!B&&V===`browse`&&(!L||!!e.tenant),queryFn:async()=>{if(!z||!B)return null;let t=z.facet===`index`?b.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(``),T(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 T(A(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…`}),te.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,ne.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(S(e,t.ref)),children:[(0,N.jsx)(`span`,{children:v(t.name,t.description)}),t.description?(0,N.jsx)(`span`,{className:`font-mono text-xs text-[var(--oke-muted)]`,children:t.name}):null,(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:ie,willNot:re,willNotPreview:w,patchJson:p,setPatchJson:g,typed:l,setTyped:u,reason:d,setReason:f,sqlText:_,setSqlText:y,probeVector:b,setProbeVector:C,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:y,setReason:b,sqlText:x,setSqlText:S,probeVector:w,setProbeVector:T,onPreview:E,onCommit:D,onDelete:O,onPurge:k,onSql:A,sqlResult:j,onReveal:ee,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:v(t.name,t.description)}),(0,N.jsxs)(`span`,{className:`text-sm text-[var(--oke-muted)]`,children:[t.description?`${t.name} · `:``,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(C(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:k,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:x,onChange:e=>S(e.target.value)}),(0,N.jsx)(d,{type:`button`,onClick:A,children:`Run`}),j?(0,N.jsxs)(`p`,{className:`text-xs text-[var(--oke-muted)]`,children:[j.rows.length,` row(s) · routed `,j.routedRole,j.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:w,onChange:e=>T(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:v(e,F?.columnDescriptions[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:()=>ee(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:()=>O([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:()=>O([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:y,onChange:e=>b(e.target.value)})]}),(0,N.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[(0,N.jsx)(d,{type:`button`,onClick:E,children:`Preview`}),(0,N.jsx)(d,{type:`button`,onClick:D,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{b as n,I as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as e,r as t}from"./rolldown-runtime-B0Z9INg1.js";import{C as n,Q as r,Z as i,b as a,d as o,et as s,l as c,nt as l,o as u,tt as d,u as f,w as p,y as m}from"./panel-access-BGv45snf.js";import{r as h}from"./panel-runs-CWuRDe0r.js";import{n as g,t as _}from"./panel-flows-PiHwT55z.js";var v=e(l(),1);function y(e,t){if(!t)return!0;switch(t.kind){case`wrote`:return e.effects.some(e=>e.kind===`write`&&e.resource===t.resource);case`asked`:return e.effects.some(e=>e.kind===`ask`);case`sent`:return e.effects.some(e=>e.kind===`send`&&(t.resource===void 0||e.resource===t.resource));case`secret`:return e.effects.some(e=>e.kind===`secret`&&(t.resource===void 0||e.resource===t.resource));case`cost`:return(e.cost??0)>t.min}}function b(e,t){return!t||e.some(e=>y(e,t))}function x(e){if(!e?.trim())return null;let t=e.trim();if(t===`asked`)return{kind:`asked`};if(t===`sent`)return{kind:`sent`};if(t.startsWith(`wrote:`))return{kind:`wrote`,resource:t.slice(6)};if(t.startsWith(`sent:`))return{kind:`sent`,resource:t.slice(5)};if(t.startsWith(`secret:`))return{kind:`secret`,resource:t.slice(7)};if(t===`secret`)return{kind:`secret`};if(t.startsWith(`cost:`)){let e=Number(t.slice(5));return Number.isFinite(e)?{kind:`cost`,min:e}:null}return null}function S(e){if(e)switch(e.kind){case`wrote`:return`wrote:${e.resource}`;case`asked`:return`asked`;case`sent`:return e.resource?`sent:${e.resource}`:`sent`;case`secret`:return e.resource?`secret:${e.resource}`:`secret`;case`cost`:return`cost:${e.min}`}}var C=m({trace:a().optional(),span:a().optional(),effect:a().optional(),q:a().optional(),folds:a().optional(),boost:a().optional()});function w(e){let t=C.safeParse(e??{});return t.success?t.data:C.parse({})}function T(e){let t={};return e.trace&&(t.trace=e.trace),e.span&&(t.span=e.span),e.effect&&(t.effect=e.effect),e.q&&(t.q=e.q),e.folds&&(t.folds=e.folds),e.boost&&(t.boost=e.boost),t}function E(e){return e.folds?new Set(e.folds.split(`,`).map(e=>e.trim()).filter(Boolean)):new Set}function D(e,t,n){return{...e,trace:t,span:n}}function ee(e){return{...e,trace:void 0,span:void 0,folds:void 0}}function te(e,t){let n=E(e);n.has(t)?n.delete(t):n.add(t);let r=[...n].join(`,`);return{...e,folds:r||void 0}}function O(e,t){return{...e,effect:S(t)}}function k(e){let t=new Map,n=new Map;for(let n of e)t.set(n.id,n);for(let t of e){if(!t.parentId)continue;let e=n.get(t.parentId)??[];e.push(t),n.set(t.parentId,e)}for(let[,e]of n)e.sort((e,t)=>e.startedAt-t.startedAt);return{byId:t,childrenOf:n}}function A(e,t){let{byId:n,childrenOf:r}=k(e),i=n.get(t);if(!i)return null;let a=[],o=i,s=new Set;for(;o?.parentId&&!s.has(o.parentId);){s.add(o.parentId);let e=n.get(o.parentId);if(!e)break;a.unshift(e),o=e}return{parents:a,current:i,children:r.get(i.id)??[],connected:N((a[0]??i).id,n,r)}}function j(e){let{byId:t,childrenOf:n}=k(e),r=e.filter(e=>!e.parentId||!t.has(e.parentId));return r.sort((e,t)=>t.startedAt-e.startedAt),r.map(e=>({rootId:e.id,root:e,spans:N(e.id,t,n)}))}function M(e,t){if(t&&e.some(e=>e.id===t))return t;let n=e.find(e=>e.errorCode!=null&&e.errorCode!==``);return n?n.id:e.find(t=>!t.parentId||!e.some(e=>e.id===t.parentId))?.id??e[0]?.id}function N(e,t,n){let r=[],i=e=>{let a=t.get(e);if(a){r.push(a);for(let t of n.get(e)??[])i(t.id)}};return i(e),r.sort((e,t)=>e.startedAt-t.startedAt),r}function P(e){if(e.length===0)return new Set;let{byId:t,childrenOf:n}=k(e),r=e.filter(e=>!e.parentId||!t.has(e.parentId)),i=[],a=-1,o=(e,r,s)=>{let c=n.get(e)??[],l=t.get(e);if(!l)return;let u=s+F(l),d=[...r,e];if(c.length===0){u>a&&(a=u,i=d);return}for(let e of c)o(e.id,d,u)};for(let e of r)o(e.id,[],0);return new Set(i)}function F(e){return e.effects.length===0?Math.max(0,e.durationMs):e.effects.reduce((e,t)=>e+Math.max(0,t.duration),0)}function I(e){switch(e){case`read`:return`reads`;case`write`:return`writes`;case`emit`:return`emits`;case`send`:case`ask`:return`external`;case`secret`:return`capabilities`;case`call`:return`reads`}}function L(e){let t=`none`;for(let n of e){let e=I(n.kind);z(e)>z(t)&&(t=e)}return t}function R(e){return e.some(e=>L(e.effects)===`external`)}function z(e){switch(e){case`external`:return 5;case`capabilities`:return 4;case`emits`:return 3;case`writes`:return 2;case`reads`:return 1;case`none`:return 0}}function B(e){let t=Math.max(0,Math.round(e));if(t<1e3)return`${t}ms idle`;let n=t/1e3;if(n<60)return`${U(n)}s idle`;let r=n/60;if(r<60)return`${U(r)}m idle`;let i=r/60;return i<48?`${U(i)}h idle`:`${U(i/24)}d idle`}function V(e,t={},n=new Set){let r=t.foldThresholdMs??50,i=t.expandedFolds??new Set,a=[...e].sort((e,t)=>e.startMs-t.startMs);if(a.length===0)return{segments:[],displayDurationMs:0,wallDurationMs:0};let o=a[0],s=a[a.length-1];if(!o||!s)return{segments:[],displayDurationMs:0,wallDurationMs:0};let c=o.startMs,l=Math.max(...a.map(e=>e.endMs)),u=[],d=c;for(let e of a){let t=e.startMs-d;if(t>=r){let n=`fold:${d}:${e.startMs}`,r=i.has(n),a=t;u.push({kind:`fold`,id:n,startMs:d,endMs:e.startMs,durationMs:a,label:B(a),expanded:r,displayMs:r?a:40})}let a=Math.max(0,e.endMs-e.startMs);u.push({kind:`work`,id:e.id,label:e.label,startMs:e.startMs,endMs:e.endMs,durationMs:a,tier:e.tier,spanId:e.spanId,critical:n.has(e.spanId),failed:e.failed===!0,displayMs:Math.max(1,a)}),d=Math.max(d,e.endMs)}let f=u.reduce((e,t)=>e+t.displayMs,0);return{segments:u,displayDurationMs:Math.max(1,f),wallDurationMs:l-c}}function H(e){let t=[];for(let n of e)if(n.effects.length>0)for(let e of n.effects)t.push({id:`${n.id}:${e.kind}:${e.resource}:${e.timestamp}`,label:`${e.kind} ${e.resource}`,startMs:e.timestamp,endMs:e.timestamp+Math.max(1,e.duration),tier:I(e.kind),spanId:n.id,failed:n.errorCode!=null&&e===n.effects[n.effects.length-1]});else t.push({id:n.id,label:n.flow,startMs:n.startedAt,endMs:n.endedAt,tier:`none`,spanId:n.id,failed:n.errorCode!=null});return t}function U(e){let t=Math.round(e*10)/10;return Number.isInteger(t)?String(t):t.toFixed(1)}function W(e){if(e.length===0)return[];let t=Math.min(...e.map(e=>e.startedAt)),n=Math.max(...e.map(e=>e.endedAt)),r=Math.max(1,n-t);if(e.every(e=>e.effects.length===0))return e.map(e=>({start:(e.startedAt-t)/r,width:Math.max(.02,e.durationMs/r),tier:L(e.effects),failed:e.errorCode!=null}));let i=[];for(let n of e){if(n.effects.length===0){i.push({start:(n.startedAt-t)/r,width:Math.max(.02,n.durationMs/r),tier:`none`,failed:n.errorCode!=null});continue}for(let e=0;e<n.effects.length;e++){let a=n.effects[e];a&&i.push({start:(a.timestamp-t)/r,width:Math.max(.02,a.duration/r),tier:I(a.kind),failed:n.errorCode!=null&&e===n.effects.length-1})}}return i}function G(e){for(let t of e)if(t.errorCode)return t.errorCode;return null}function K(e){return R(e)?{mode:`dry-run`,reason:`This trace contains an external effect. Replay runs as a dry run with external effects stubbed.`}:{mode:`replay`}}var q=`10% + all errors`,J=6e5;function Y(e,t=Date.now()){let n=e.filter(e=>e.until>t);return n.length===0?q:`${q} · full: ${n.map(e=>e.flow).join(`, `)}`}function X(e,t,n=Date.now()){let r=n+J;return[...e.filter(e=>e.flow!==t&&e.until>n),{flow:t,until:r}]}function ne(e,t=Date.now()){return e.filter(e=>e.until>t)}var Z=d();function Q(){let e=p({from:`/traces`}),t=n({from:`/traces`}),a=s(),[l,d]=(0,v.useState)([]),[m]=(0,v.useState)(()=>_()),[y,S]=(0,v.useState)(0),[,C]=(0,v.useState)(0),w=e=>{t({search:T(e),replace:!0})},k=r({queryKey:[`console.runs.list`],queryFn:async()=>{let e=await o.runsList();if(e.error)throw Error(e.error.code);return e.data.runs},refetchInterval:5e3}),N=(0,v.useMemo)(()=>(k.data??[]).map(re),[k.data]);(0,v.useEffect)(()=>{if(N.length===0)return;if(m.visible.length===0){for(let e of N)m.offer({id:e.id,value:e,arrivedAt:e.startedAt});m.flush(),S(0),C(e=>e+1);return}let e=new Set(m.visible.map(e=>e.id));for(let t of m.pending)e.add(t.id);for(let t of N)e.has(t.id)?m.updateInPlace(t.id,t):m.offer({id:t.id,value:t,arrivedAt:Date.now()});S(m.pendingCount),C(e=>e+1)},[N,m]);let F=m.visible.map(e=>e.value),I=x(e.effect),R=(0,v.useMemo)(()=>j(F).filter(t=>{let n=g([t.root.flow,t.root.id,G(t.spans)??``],e.q),r=b(t.spans,I);return n&&r}),[F,e.q,I]),z=R.find(t=>t.rootId===e.trace)??(e.trace?j(F).find(t=>t.rootId===e.trace):void 0),B=z?M(z.spans,e.span):void 0,U=B?A(F,B):null,q=U?P(U.connected):new Set,J=U?V(H(U.connected),{expandedFolds:E(e)},q):null,Q=U?K(U.connected):null,$=i({mutationFn:async()=>{if(!U||!Q)return;let e=await o.tracesReplay({rootId:U.connected[0]?.id??U.current.id,dryRun:Q.mode===`dry-run`});if(e.error)throw Error(e.error.code);return e.data},onSuccess:()=>{a.invalidateQueries({queryKey:[`console.runs.list`]})}}),ae=ne(l);return(0,Z.jsxs)(`div`,{className:`flex h-full min-h-0 flex-col`,children:[(0,Z.jsxs)(`header`,{className:`flex shrink-0 flex-wrap items-end gap-4 border-b border-[var(--oke-line)] px-6 py-4`,children:[(0,Z.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[(0,Z.jsx)(`p`,{className:`text-xs uppercase tracking-[0.2em] text-[var(--oke-muted)]`,children:`Traces`}),(0,Z.jsx)(`h1`,{className:`text-xl font-semibold tracking-tight`,children:`Causal chain`}),(0,Z.jsxs)(`p`,{className:`text-xs text-[var(--oke-muted)]`,children:[`Sampling: `,Y(ae)]})]}),(0,Z.jsxs)(`label`,{className:`flex flex-col gap-1 text-sm`,children:[(0,Z.jsx)(`span`,{className:`text-[var(--oke-muted)]`,children:`Filter by effect`}),(0,Z.jsxs)(`select`,{"aria-label":`Filter by effect`,className:`min-h-8 border border-[var(--oke-line)] bg-transparent px-2 text-sm`,value:e.effect??``,onChange:t=>{let n=t.target.value;w(O(e,n?x(n):null))},children:[(0,Z.jsx)(`option`,{value:``,children:`All effects`}),(0,Z.jsx)(`option`,{value:`wrote:sql:bookings`,children:`Wrote sql:bookings`}),(0,Z.jsx)(`option`,{value:`sent`,children:`Sent (channel)`}),(0,Z.jsx)(`option`,{value:`asked`,children:`Asked a model`}),(0,Z.jsx)(`option`,{value:`secret`,children:`Read a secret`}),(0,Z.jsx)(`option`,{value:`cost:0.05`,children:`Cost > $0.05`})]})]}),(0,Z.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,Z.jsx)(u,{type:`button`,variant:`ghost`,onClick:()=>{let e=z?.root.flow??R[0]?.root.flow??`bookings.create`;d(t=>X(t,e))},children:`Trace flow fully for 10 minutes`}),(0,Z.jsx)(c,{count:y,onFlush:()=>{m.flush(),S(0),C(e=>e+1)}})]})]}),(0,Z.jsxs)(`div`,{className:`grid min-h-0 flex-1 grid-cols-1 md:grid-cols-[minmax(0,1fr)_minmax(0,1.4fr)]`,children:[(0,Z.jsx)(`section`,{"aria-label":`Trace list`,className:`min-h-0 overflow-auto border-r border-[var(--oke-line)]`,children:k.isLoading?(0,Z.jsx)(`p`,{className:`px-6 py-8 text-sm text-[var(--oke-muted)]`,children:`Loading traces…`}):R.length===0?(0,Z.jsx)(`p`,{className:`px-6 py-8 text-sm text-[var(--oke-muted)]`,children:`No traces yet. Invoke a flow or wait for traffic.`}):(0,Z.jsx)(`ul`,{className:`divide-y divide-[var(--oke-line)]`,children:R.map(t=>{let n=G(t.spans),r=W(t.spans),i=t.rootId===e.trace;return(0,Z.jsx)(`li`,{children:(0,Z.jsxs)(`button`,{type:`button`,"aria-pressed":i,className:f(`flex w-full min-h-10 flex-col gap-1 px-4 py-3 text-left text-sm`,i?`bg-[color-mix(in_oklab,var(--oke-fg)_6%,transparent)]`:`hover:bg-[color-mix(in_oklab,var(--oke-fg)_3%,transparent)]`),onClick:()=>{let n=M(t.spans);w(D(e,t.rootId,n))},children:[(0,Z.jsxs)(`div`,{className:`flex items-center justify-between gap-3`,children:[(0,Z.jsx)(`span`,{className:`font-medium`,children:t.root.flow}),n?(0,Z.jsx)(`span`,{role:`status`,className:`font-mono text-xs text-[var(--oke-danger)]`,children:n}):(0,Z.jsxs)(`span`,{className:`font-mono text-xs text-[var(--oke-muted)]`,children:[t.root.durationMs,`ms`]})]}),(0,Z.jsx)(ie,{bars:r})]})},t.rootId)})})}),(0,Z.jsx)(`section`,{"aria-label":`Trace detail`,className:`min-h-0 overflow-auto px-6 py-6`,"aria-live":`polite`,children:!U||!J?(0,Z.jsx)(`p`,{className:`text-sm text-[var(--oke-muted)]`,children:`Select a trace to see the causal chain and folded-time waterfall.`}):(0,Z.jsxs)(`div`,{className:`flex flex-col gap-6`,children:[(0,Z.jsxs)(`div`,{className:`flex flex-wrap items-start justify-between gap-3`,children:[(0,Z.jsxs)(`div`,{children:[(0,Z.jsx)(`h2`,{className:`text-lg font-semibold`,children:U.current.flow}),(0,Z.jsxs)(`p`,{className:`text-xs text-[var(--oke-muted)]`,children:[U.connected.length,` span`,U.connected.length===1?``:`s`,` · wall `,J.wallDurationMs,`ms · display scale `,Math.round(J.displayDurationMs),`ms`]})]}),(0,Z.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[(0,Z.jsx)(h,{to:`/runs`,search:{run:U.current.id},className:`inline-flex min-h-8 items-center border border-[var(--oke-line)] px-3 text-sm`,children:`Open in Runs`}),(0,Z.jsx)(u,{type:`button`,variant:Q?.mode===`dry-run`?`external`:`primary`,disabled:$.isPending,title:Q?.mode===`dry-run`?Q.reason:`Replay from the journal`,onClick:()=>$.mutate(),children:Q?.mode===`dry-run`?`Dry-run replay`:`Replay`}),(0,Z.jsx)(u,{type:`button`,variant:`ghost`,onClick:()=>w(ee(e)),children:`Close`})]})]}),Q?.mode===`dry-run`?(0,Z.jsx)(`p`,{role:`note`,className:`text-sm text-[var(--oke-external)]`,children:Q.reason}):null,(0,Z.jsxs)(`div`,{children:[(0,Z.jsx)(`h3`,{className:`mb-2 text-sm font-medium`,children:`Causal chain`}),(0,Z.jsxs)(`ol`,{className:`flex flex-col gap-1 border-l border-[var(--oke-line)] pl-4`,children:[U.parents.map(t=>(0,Z.jsx)(`li`,{children:(0,Z.jsx)(`button`,{type:`button`,className:`min-h-8 text-sm text-[var(--oke-muted)]`,onClick:()=>w({...e,span:t.id}),children:t.flow})},t.id)),(0,Z.jsxs)(`li`,{"aria-current":`true`,children:[(0,Z.jsx)(`span`,{className:`text-sm font-medium`,children:U.current.flow}),U.current.errorCode?(0,Z.jsx)(`span`,{role:`status`,className:`ml-2 font-mono text-xs text-[var(--oke-danger)]`,children:U.current.errorCode}):null,L(U.current.effects)===`external`?(0,Z.jsx)(`span`,{"aria-label":`external effect`,children:` ↗`}):null]}),U.children.map(t=>(0,Z.jsx)(`li`,{children:(0,Z.jsxs)(`button`,{type:`button`,className:`min-h-8 text-sm text-[var(--oke-muted)]`,onClick:()=>w({...e,span:t.id}),children:[t.flow,L(t.effects)===`external`?(0,Z.jsx)(`span`,{"aria-label":`external effect`,children:` ↗`}):null]})},t.id))]})]}),(0,Z.jsxs)(`div`,{children:[(0,Z.jsx)(`h3`,{id:`waterfall-heading`,className:`mb-2 text-sm font-medium`,children:`Waterfall`}),(0,Z.jsx)(`ul`,{"aria-labelledby":`waterfall-heading`,className:`flex min-h-10 list-none items-stretch gap-0.5 p-0`,children:J.segments.map(t=>t.kind===`fold`?(0,Z.jsx)(`li`,{style:{flex:`${t.displayMs} 1 0`,minWidth:24},children:(0,Z.jsx)(`button`,{type:`button`,"aria-expanded":t.expanded,className:`h-full min-h-10 w-full border border-dashed border-[var(--oke-line)] px-1 font-mono text-[10px] text-[var(--oke-muted)]`,onClick:()=>w(te(e,t.id)),children:t.label})},t.id):(0,Z.jsx)(`li`,{title:t.label,className:f(`min-h-10 px-1 text-[10px] leading-10`,t.tier===`external`?`bg-[var(--oke-external)] text-black`:`bg-[color-mix(in_oklab,var(--oke-accent)_55%,transparent)]`,t.failed&&`outline outline-2 outline-[var(--oke-danger)]`),style:{flex:`${t.displayMs} 1 0`,opacity:t.critical?1:.38,minWidth:4},children:(0,Z.jsxs)(`span`,{className:`sr-only`,children:[t.label,t.critical?` (critical path)`:``,t.failed?` (failed)`:``]})},t.id))}),(0,Z.jsx)(`p`,{className:`mt-2 text-xs text-[var(--oke-muted)]`,children:`Critical path at full opacity · dead time folded into expandable bars`})]})]})})]})]})}function re(e){return{id:e.id,...e.parentId?{parentId:e.parentId}:{},flow:e.flow,...e.unit?{unit:e.unit}:{},trigger:e.trigger,startedAt:e.startedAt,endedAt:e.endedAt,durationMs:e.durationMs,errorCode:e.error,cost:e.cost??void 0,sampled:e.sampled??(e.error?`error`:`sample`),effects:e.effects??[]}}function ie({bars:e}){return(0,Z.jsx)(`div`,{"aria-hidden":`true`,className:`relative h-2 w-full overflow-hidden bg-[color-mix(in_oklab,var(--oke-fg)_6%,transparent)]`,children:e.map((e,t)=>(0,Z.jsx)(`span`,{className:f(`absolute inset-y-0`,e.tier===`external`?`bg-[var(--oke-external)]`:e.failed?`bg-[var(--oke-danger)]`:`bg-[var(--oke-accent)]`),style:{left:`${e.start*100}%`,width:`${Math.max(2,e.width*100)}%`}},t))})}var $=t({default:()=>Q});export{w as n,$ as t};
|
|
@@ -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,c as s,d as c,et as l,g as u,nt as d,o as f,tt as p,u as m,w as h,y as g}from"./panel-access-C0J2D-a2.js";import{n as _}from"./panel-channels-DCDd4WAC.js";var v=g({q:o().optional(),name:o().optional(),action:u([`set`,`rotate`]).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.name&&(t.name=e.name),e.action&&(t.action=e.action),t}function x(e,t){return{...e,name:t,action:void 0}}function S(e,t=``){let n=t.trim().toLowerCase(),r=n?e.filter(e=>e.name.toLowerCase().includes(n)||(e.description?.toLowerCase().includes(n)??!1)):e,i=[`secret`,`config`],a={secret:`Secrets`,config:`Config`};return i.map(e=>({kind:e,label:a[e],secrets:r.filter(t=>t.kind===e)})).filter(e=>e.secrets.length>0)}function C(e={production:!0}){return e.production?{kind:`typed`,phrase:`SET`,requireReason:!0}:{kind:`undo`,windowMs:15e3}}function w(e={production:!0}){return{kind:`typed`,phrase:`ROTATE`,requireReason:!0}}function T(e){if(e.count===0)return{summary:`No in-flight durable runs hold this secret`,detail:null,warn:!1};let t=e.longestOutstandingMs==null?null:E(e.longestOutstandingMs);return{summary:`${e.count} in-flight durable run(s) will wake holding a new key`,detail:t?`Longest outstanding wake in ${t}`:e.longestWakeAt==null?null:`Longest wake at ${new Date(e.longestWakeAt).toISOString()}`,warn:!0}}function E(e){if(e<1e3)return`${e}ms`;let t=Math.floor(e/1e3);if(t<60)return`${t}s`;let n=Math.floor(t/60);if(n<60)return`${n}m`;let r=Math.floor(n/60);return r<48?`${r}h`:`${Math.floor(r/24)}d`}function D(e){return{name:e.name,kind:e.kind,sensitive:e.sensitive,description:e.description??null,rotate:e.rotate??null,fingerprints:{...e.fingerprints},fingerprint:e.fingerprint,cleartext:e.sensitive?null:e.cleartext,winner:e.winner,resolution:e.resolution.map(e=>({...e})),readers:[...e.readers],blastRadius:{count:e.blastRadius.count,longestWakeAt:e.blastRadius.longestWakeAt,longestOutstandingMs:e.blastRadius.longestOutstandingMs,runIds:[...e.blastRadius.runIds]},lastReadAt:e.lastReadAt,sharedFingerprintEnvs:[...e.sharedFingerprintEnvs]}}function O(e){return JSON.stringify(e.map(e=>D(e)),null,2)}var k=e(d(),1),A=p();function j(){let e=h({from:`/vault`}),t=n({from:`/vault`}),o=l(),[u,d]=(0,k.useState)(``),[p,g]=(0,k.useState)(``),[v,y]=(0,k.useState)(``),[E,D]=(0,k.useState)(null),j=e=>{t({search:b(e),replace:!0})},M=r({queryKey:[`console.vault.list`],queryFn:async()=>{let e=await c.vaultList();if(e.error)throw Error(e.error.code);return e.data},refetchInterval:1e4}),N=M.data?.secrets??[],P=M.data?.env??`local`,F=(0,k.useMemo)(()=>S(N,e.q??``),[N,e.q]),I=N.find(t=>t.name===e.name),L=I?T(I.blastRadius):null,R=C({production:!0}),z=w({production:!0}),B=e.action;(0,k.useEffect)(()=>{d(``),g(``),y(``),D(null)},[I?.name,B]);let V=i({mutationFn:async()=>{if(!I)throw Error(`no secret`);if(R.kind===`typed`){let e=a({typed:u,reason:p,phrase:R.phrase});if(e)throw Error(e.typed??e.reason??`confirm`)}let e=await c.vaultSet({name:I.name,value:v,confirmation:R.kind===`typed`?u:void 0,reason:p||void 0});if(e.error)throw Error(e.error.code);return e.data},onSuccess:async()=>{y(``),d(``),g(``),j({...e,action:void 0}),await o.invalidateQueries({queryKey:[`console.vault.list`]})}}),H=i({mutationFn:async()=>{if(!I)throw Error(`no secret`);let e=a({typed:u,reason:p,phrase:z.kind===`typed`?z.phrase:`ROTATE`});if(e)throw Error(e.typed??e.reason??`confirm`);let t=await c.vaultRotate({name:I.name,value:v,confirmation:u,reason:p});if(t.error)throw Error(t.error.code);return t.data},onSuccess:async()=>{y(``),d(``),g(``),j({...e,action:void 0}),await o.invalidateQueries({queryKey:[`console.vault.list`]})}});return(0,A.jsxs)(`div`,{className:`flex h-full min-h-0 flex-col`,children:[(0,A.jsxs)(`header`,{className:`flex shrink-0 flex-wrap items-end gap-3 border-b border-[var(--oke-line)] px-4 py-3`,children:[(0,A.jsxs)(`div`,{children:[(0,A.jsx)(`h1`,{className:`text-lg font-medium text-[var(--oke-fg)]`,children:`Vault`}),(0,A.jsx)(`p`,{className:`text-sm text-[var(--oke-muted)]`,children:`Fingerprints only — secrets are write-only`})]}),(0,A.jsxs)(`p`,{className:`text-sm text-[var(--oke-muted)]`,role:`status`,children:[`Environment `,P]}),(0,A.jsxs)(`label`,{className:`ml-auto flex min-w-[12rem] flex-col gap-1 text-sm`,children:[(0,A.jsx)(`span`,{className:`text-[var(--oke-muted)]`,children:`Filter vault`}),(0,A.jsx)(s,{"aria-label":`Filter vault`,value:e.q??``,onChange:t=>j({...e,q:t.currentTarget.value||void 0})})]}),(0,A.jsx)(f,{type:`button`,variant:`ghost`,onClick:()=>{let e=O(N);navigator.clipboard?.writeText(e),D(`Exported fingerprints only (no secret values)`)},children:`Export`})]}),E?(0,A.jsx)(`p`,{className:`px-4 py-2 text-sm text-[var(--oke-muted)]`,role:`status`,children:E}):null,(0,A.jsxs)(`div`,{className:`flex min-h-0 flex-1`,children:[(0,A.jsxs)(`section`,{"aria-label":`Vault list`,className:`w-80 shrink-0 overflow-y-auto border-r border-[var(--oke-line)]`,children:[(0,A.jsx)(`h2`,{className:`sr-only`,children:`Contracts`}),M.isLoading?(0,A.jsx)(`p`,{className:`p-4 text-sm text-[var(--oke-muted)]`,children:`Loading…`}):null,F.map(t=>(0,A.jsxs)(`section`,{"aria-label":t.label,className:`py-2`,children:[(0,A.jsx)(`h3`,{className:`px-4 py-1 text-xs uppercase tracking-wide text-[var(--oke-muted)]`,children:t.label}),(0,A.jsx)(`ul`,{children:t.secrets.map(t=>(0,A.jsx)(`li`,{children:(0,A.jsxs)(`button`,{type:`button`,"aria-pressed":t.name===I?.name,className:m(`flex min-h-10 w-full flex-col items-start px-4 py-2 text-left text-sm`,t.name===I?.name?`bg-[var(--oke-line)] text-[var(--oke-fg)]`:`text-[var(--oke-muted)] hover:text-[var(--oke-fg)]`),onClick:()=>j(x(e,t.name)),children:[(0,A.jsx)(`span`,{children:_(t.name,t.description)}),t.description?(0,A.jsx)(`span`,{className:`font-mono text-xs text-[var(--oke-muted)]`,children:t.name}):null,(0,A.jsx)(`span`,{className:`truncate text-xs`,children:t.sensitive?t.fingerprint??`unset`:t.cleartext??`unset`}),t.blastRadius.count>0?(0,A.jsxs)(`span`,{role:`status`,className:`text-xs text-[var(--oke-danger)]`,children:[`blast `,t.blastRadius.count]}):null,t.sharedFingerprintEnvs.length>0?(0,A.jsx)(`span`,{role:`status`,className:`text-xs`,children:`shared fingerprint`}):null]})},t.name))})]},t.kind))]}),(0,A.jsx)(`section`,{"aria-label":`Vault detail`,"aria-live":`polite`,className:`min-w-0 flex-1 overflow-y-auto p-4`,children:I?(0,A.jsxs)(`div`,{className:`flex max-w-2xl flex-col gap-6`,children:[(0,A.jsxs)(`div`,{children:[(0,A.jsx)(`h2`,{className:`text-lg text-[var(--oke-fg)]`,children:_(I.name,I.description)}),I.description?(0,A.jsx)(`p`,{className:`font-mono text-sm text-[var(--oke-muted)]`,children:I.name}):null,I.rotate?(0,A.jsxs)(`p`,{className:`text-sm text-[var(--oke-muted)]`,children:[`Rotate hint: `,I.rotate]}):null]}),(0,A.jsxs)(`section`,{"aria-label":`Fingerprints by environment`,children:[(0,A.jsx)(`h3`,{className:`mb-2 text-sm font-medium`,children:`Fingerprints`}),I.sensitive?(0,A.jsxs)(`ul`,{className:`space-y-1 font-mono text-sm`,children:[Object.entries(I.fingerprints).map(([e,t])=>(0,A.jsxs)(`li`,{children:[(0,A.jsxs)(`span`,{className:`text-[var(--oke-muted)]`,children:[e,`:`]}),` `,t,I.sharedFingerprintEnvs.includes(e)?(0,A.jsxs)(`span`,{role:`status`,className:`ml-2 text-[var(--oke-warn,var(--oke-muted))]`,children:[`(matches `,P,` — warning, may be deliberate)`]}):null]},e)),Object.keys(I.fingerprints).length===0?(0,A.jsx)(`li`,{className:`text-[var(--oke-muted)]`,children:`Unset`}):null]}):(0,A.jsx)(`p`,{className:`font-mono text-sm`,role:`status`,children:I.cleartext??`unset`})]}),(0,A.jsxs)(`section`,{"aria-label":`Resolution chain`,children:[(0,A.jsx)(`h3`,{className:`mb-2 text-sm font-medium`,children:`Resolution chain`}),(0,A.jsx)(`ol`,{className:`list-decimal space-y-1 pl-5 text-sm`,children:I.resolution.map(e=>(0,A.jsxs)(`li`,{className:e.won?`text-[var(--oke-fg)]`:`text-[var(--oke-muted)]`,children:[(0,A.jsx)(`span`,{className:`font-mono`,children:e.source}),e.won?` — won`:e.present?` — present (lost)`:` — absent`]},e.source))}),(0,A.jsxs)(`p`,{className:`mt-2 text-sm`,role:`status`,children:[`Winner: `,(0,A.jsx)(`span`,{className:`font-mono`,children:I.winner??`none`})]})]}),(0,A.jsxs)(`section`,{"aria-label":`Readers`,children:[(0,A.jsx)(`h3`,{className:`mb-2 text-sm font-medium`,children:`Readers`}),(0,A.jsxs)(`p`,{className:`text-sm text-[var(--oke-muted)]`,children:[`Flows that declare `,(0,A.jsxs)(`code`,{className:`font-mono`,children:[`fx.vault(`,I.name,`)`]})]}),(0,A.jsx)(`ul`,{className:`mt-1 list-disc pl-5 font-mono text-sm`,children:I.readers.length===0?(0,A.jsx)(`li`,{className:`text-[var(--oke-muted)]`,children:`none`}):I.readers.map(e=>(0,A.jsx)(`li`,{children:e},e))})]}),(0,A.jsxs)(`section`,{"aria-label":`Rotation blast radius`,children:[(0,A.jsx)(`h3`,{className:`mb-2 text-sm font-medium`,children:`Rotation blast radius`}),L?(0,A.jsxs)(A.Fragment,{children:[(0,A.jsx)(`p`,{className:`text-sm`,role:L.warn?`alert`:`status`,children:L.summary}),L.detail?(0,A.jsx)(`p`,{className:`text-sm text-[var(--oke-muted)]`,children:L.detail}):null,I.blastRadius.runIds.length>0?(0,A.jsx)(`p`,{className:`mt-1 font-mono text-xs text-[var(--oke-muted)]`,children:I.blastRadius.runIds.join(`, `)}):null]}):null]}),(0,A.jsxs)(`section`,{"aria-label":`Last read`,children:[(0,A.jsx)(`h3`,{className:`mb-2 text-sm font-medium`,children:`Last read`}),(0,A.jsx)(`p`,{className:`text-sm`,role:`status`,children:I.lastReadAt==null?`Never read — possible dead secret`:new Date(I.lastReadAt).toISOString()})]}),(0,A.jsxs)(`section`,{"aria-label":`Set or rotate`,className:`space-y-3`,children:[(0,A.jsx)(`h3`,{className:`text-sm font-medium`,children:`Set / rotate`}),(0,A.jsx)(`p`,{className:`text-sm text-[var(--oke-muted)]`,children:`Write-only. Values are never revealed after submit. No preview.`}),(0,A.jsxs)(`div`,{className:`flex gap-2`,children:[(0,A.jsx)(f,{type:`button`,variant:B===`set`?`primary`:`ghost`,"aria-pressed":B===`set`,onClick:()=>j({...e,action:`set`}),children:`Set`}),(0,A.jsx)(f,{type:`button`,variant:B===`rotate`?`danger`:`ghost`,"aria-pressed":B===`rotate`,onClick:()=>j({...e,action:`rotate`}),children:`Rotate`})]}),B?(0,A.jsxs)(`div`,{className:`space-y-3 border border-[var(--oke-line)] p-3`,children:[(0,A.jsxs)(`label`,{className:`flex flex-col gap-1 text-sm`,children:[(0,A.jsx)(`span`,{children:`New value`}),(0,A.jsx)(s,{"aria-label":`New vault value`,type:`password`,autoComplete:`off`,value:v,onChange:e=>y(e.currentTarget.value)})]}),(B===`rotate`||R.kind===`typed`)&&(0,A.jsxs)(A.Fragment,{children:[(0,A.jsxs)(`label`,{className:`flex flex-col gap-1 text-sm`,children:[(0,A.jsxs)(`span`,{children:[`Type`,` `,B===`rotate`?z.kind===`typed`?z.phrase:`ROTATE`:R.kind===`typed`?R.phrase:`SET`,` `,`to confirm`]}),(0,A.jsx)(s,{"aria-label":`Confirmation phrase`,value:u,onChange:e=>d(e.currentTarget.value)})]}),(0,A.jsxs)(`label`,{className:`flex flex-col gap-1 text-sm`,children:[(0,A.jsx)(`span`,{children:`Reason`}),(0,A.jsx)(s,{"aria-label":`Reason for vault write`,value:p,onChange:e=>g(e.currentTarget.value)})]})]}),(0,A.jsx)(f,{type:`button`,variant:B===`rotate`?`danger`:`primary`,disabled:!v||(B===`set`?V.isPending:H.isPending),onClick:()=>{B===`set`?V.mutate():H.mutate()},children:B===`set`?`Commit set`:`Commit rotate`}),(V.isError||H.isError)&&(0,A.jsx)(`p`,{role:`alert`,className:`text-sm text-[var(--oke-danger)]`,children:(V.error??H.error)?.message??`Failed`})]}):null]})]}):(0,A.jsx)(`p`,{className:`text-sm text-[var(--oke-muted)]`,children:`Select a contract to inspect fingerprints, resolution, and readers.`})})]})]})}var M=t({default:()=>j});export{y as n,M as t};
|
|
1
|
+
import{a as e,r as t}from"./rolldown-runtime-B0Z9INg1.js";import{C as n,Q as r,Z as i,a,b as o,c as s,d as c,et as l,g as u,nt as d,o as f,tt as p,u as m,w as h,y as g}from"./panel-access-BGv45snf.js";import{n as _}from"./panel-channels-9T3ybqRu.js";var v=g({q:o().optional(),name:o().optional(),action:u([`set`,`rotate`]).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.name&&(t.name=e.name),e.action&&(t.action=e.action),t}function x(e,t){return{...e,name:t,action:void 0}}function S(e,t=``){let n=t.trim().toLowerCase(),r=n?e.filter(e=>e.name.toLowerCase().includes(n)||(e.description?.toLowerCase().includes(n)??!1)):e,i=[`secret`,`config`],a={secret:`Secrets`,config:`Config`};return i.map(e=>({kind:e,label:a[e],secrets:r.filter(t=>t.kind===e)})).filter(e=>e.secrets.length>0)}function C(e={production:!0}){return e.production?{kind:`typed`,phrase:`SET`,requireReason:!0}:{kind:`undo`,windowMs:15e3}}function w(e={production:!0}){return{kind:`typed`,phrase:`ROTATE`,requireReason:!0}}function T(e){if(e.count===0)return{summary:`No in-flight durable runs hold this secret`,detail:null,warn:!1};let t=e.longestOutstandingMs==null?null:E(e.longestOutstandingMs);return{summary:`${e.count} in-flight durable run(s) will wake holding a new key`,detail:t?`Longest outstanding wake in ${t}`:e.longestWakeAt==null?null:`Longest wake at ${new Date(e.longestWakeAt).toISOString()}`,warn:!0}}function E(e){if(e<1e3)return`${e}ms`;let t=Math.floor(e/1e3);if(t<60)return`${t}s`;let n=Math.floor(t/60);if(n<60)return`${n}m`;let r=Math.floor(n/60);return r<48?`${r}h`:`${Math.floor(r/24)}d`}function D(e){return{name:e.name,kind:e.kind,sensitive:e.sensitive,description:e.description??null,rotate:e.rotate??null,fingerprints:{...e.fingerprints},fingerprint:e.fingerprint,cleartext:e.sensitive?null:e.cleartext,winner:e.winner,resolution:e.resolution.map(e=>({...e})),readers:[...e.readers],blastRadius:{count:e.blastRadius.count,longestWakeAt:e.blastRadius.longestWakeAt,longestOutstandingMs:e.blastRadius.longestOutstandingMs,runIds:[...e.blastRadius.runIds]},lastReadAt:e.lastReadAt,sharedFingerprintEnvs:[...e.sharedFingerprintEnvs]}}function O(e){return JSON.stringify(e.map(e=>D(e)),null,2)}var k=e(d(),1),A=p();function j(){let e=h({from:`/vault`}),t=n({from:`/vault`}),o=l(),[u,d]=(0,k.useState)(``),[p,g]=(0,k.useState)(``),[v,y]=(0,k.useState)(``),[E,D]=(0,k.useState)(null),j=e=>{t({search:b(e),replace:!0})},M=r({queryKey:[`console.vault.list`],queryFn:async()=>{let e=await c.vaultList();if(e.error)throw Error(e.error.code);return e.data},refetchInterval:1e4}),N=M.data?.secrets??[],P=M.data?.env??`local`,F=(0,k.useMemo)(()=>S(N,e.q??``),[N,e.q]),I=N.find(t=>t.name===e.name),L=I?T(I.blastRadius):null,R=C({production:!0}),z=w({production:!0}),B=e.action;(0,k.useEffect)(()=>{d(``),g(``),y(``),D(null)},[I?.name,B]);let V=i({mutationFn:async()=>{if(!I)throw Error(`no secret`);if(R.kind===`typed`){let e=a({typed:u,reason:p,phrase:R.phrase});if(e)throw Error(e.typed??e.reason??`confirm`)}let e=await c.vaultSet({name:I.name,value:v,confirmation:R.kind===`typed`?u:void 0,reason:p||void 0});if(e.error)throw Error(e.error.code);return e.data},onSuccess:async()=>{y(``),d(``),g(``),j({...e,action:void 0}),await o.invalidateQueries({queryKey:[`console.vault.list`]})}}),H=i({mutationFn:async()=>{if(!I)throw Error(`no secret`);let e=a({typed:u,reason:p,phrase:z.kind===`typed`?z.phrase:`ROTATE`});if(e)throw Error(e.typed??e.reason??`confirm`);let t=await c.vaultRotate({name:I.name,value:v,confirmation:u,reason:p});if(t.error)throw Error(t.error.code);return t.data},onSuccess:async()=>{y(``),d(``),g(``),j({...e,action:void 0}),await o.invalidateQueries({queryKey:[`console.vault.list`]})}});return(0,A.jsxs)(`div`,{className:`flex h-full min-h-0 flex-col`,children:[(0,A.jsxs)(`header`,{className:`flex shrink-0 flex-wrap items-end gap-3 border-b border-[var(--oke-line)] px-4 py-3`,children:[(0,A.jsxs)(`div`,{children:[(0,A.jsx)(`h1`,{className:`text-lg font-medium text-[var(--oke-fg)]`,children:`Vault`}),(0,A.jsx)(`p`,{className:`text-sm text-[var(--oke-muted)]`,children:`Fingerprints only — secrets are write-only`})]}),(0,A.jsxs)(`p`,{className:`text-sm text-[var(--oke-muted)]`,role:`status`,children:[`Environment `,P]}),(0,A.jsxs)(`label`,{className:`ml-auto flex min-w-[12rem] flex-col gap-1 text-sm`,children:[(0,A.jsx)(`span`,{className:`text-[var(--oke-muted)]`,children:`Filter vault`}),(0,A.jsx)(s,{"aria-label":`Filter vault`,value:e.q??``,onChange:t=>j({...e,q:t.currentTarget.value||void 0})})]}),(0,A.jsx)(f,{type:`button`,variant:`ghost`,onClick:()=>{let e=O(N);navigator.clipboard?.writeText(e),D(`Exported fingerprints only (no secret values)`)},children:`Export`})]}),E?(0,A.jsx)(`p`,{className:`px-4 py-2 text-sm text-[var(--oke-muted)]`,role:`status`,children:E}):null,(0,A.jsxs)(`div`,{className:`flex min-h-0 flex-1`,children:[(0,A.jsxs)(`section`,{"aria-label":`Vault list`,className:`w-80 shrink-0 overflow-y-auto border-r border-[var(--oke-line)]`,children:[(0,A.jsx)(`h2`,{className:`sr-only`,children:`Contracts`}),M.isLoading?(0,A.jsx)(`p`,{className:`p-4 text-sm text-[var(--oke-muted)]`,children:`Loading…`}):null,F.map(t=>(0,A.jsxs)(`section`,{"aria-label":t.label,className:`py-2`,children:[(0,A.jsx)(`h3`,{className:`px-4 py-1 text-xs uppercase tracking-wide text-[var(--oke-muted)]`,children:t.label}),(0,A.jsx)(`ul`,{children:t.secrets.map(t=>(0,A.jsx)(`li`,{children:(0,A.jsxs)(`button`,{type:`button`,"aria-pressed":t.name===I?.name,className:m(`flex min-h-10 w-full flex-col items-start px-4 py-2 text-left text-sm`,t.name===I?.name?`bg-[var(--oke-line)] text-[var(--oke-fg)]`:`text-[var(--oke-muted)] hover:text-[var(--oke-fg)]`),onClick:()=>j(x(e,t.name)),children:[(0,A.jsx)(`span`,{children:_(t.name,t.description)}),t.description?(0,A.jsx)(`span`,{className:`font-mono text-xs text-[var(--oke-muted)]`,children:t.name}):null,(0,A.jsx)(`span`,{className:`truncate text-xs`,children:t.sensitive?t.fingerprint??`unset`:t.cleartext??`unset`}),t.blastRadius.count>0?(0,A.jsxs)(`span`,{role:`status`,className:`text-xs text-[var(--oke-danger)]`,children:[`blast `,t.blastRadius.count]}):null,t.sharedFingerprintEnvs.length>0?(0,A.jsx)(`span`,{role:`status`,className:`text-xs`,children:`shared fingerprint`}):null]})},t.name))})]},t.kind))]}),(0,A.jsx)(`section`,{"aria-label":`Vault detail`,"aria-live":`polite`,className:`min-w-0 flex-1 overflow-y-auto p-4`,children:I?(0,A.jsxs)(`div`,{className:`flex max-w-2xl flex-col gap-6`,children:[(0,A.jsxs)(`div`,{children:[(0,A.jsx)(`h2`,{className:`text-lg text-[var(--oke-fg)]`,children:_(I.name,I.description)}),I.description?(0,A.jsx)(`p`,{className:`font-mono text-sm text-[var(--oke-muted)]`,children:I.name}):null,I.rotate?(0,A.jsxs)(`p`,{className:`text-sm text-[var(--oke-muted)]`,children:[`Rotate hint: `,I.rotate]}):null]}),(0,A.jsxs)(`section`,{"aria-label":`Fingerprints by environment`,children:[(0,A.jsx)(`h3`,{className:`mb-2 text-sm font-medium`,children:`Fingerprints`}),I.sensitive?(0,A.jsxs)(`ul`,{className:`space-y-1 font-mono text-sm`,children:[Object.entries(I.fingerprints).map(([e,t])=>(0,A.jsxs)(`li`,{children:[(0,A.jsxs)(`span`,{className:`text-[var(--oke-muted)]`,children:[e,`:`]}),` `,t,I.sharedFingerprintEnvs.includes(e)?(0,A.jsxs)(`span`,{role:`status`,className:`ml-2 text-[var(--oke-warn,var(--oke-muted))]`,children:[`(matches `,P,` — warning, may be deliberate)`]}):null]},e)),Object.keys(I.fingerprints).length===0?(0,A.jsx)(`li`,{className:`text-[var(--oke-muted)]`,children:`Unset`}):null]}):(0,A.jsx)(`p`,{className:`font-mono text-sm`,role:`status`,children:I.cleartext??`unset`})]}),(0,A.jsxs)(`section`,{"aria-label":`Resolution chain`,children:[(0,A.jsx)(`h3`,{className:`mb-2 text-sm font-medium`,children:`Resolution chain`}),(0,A.jsx)(`ol`,{className:`list-decimal space-y-1 pl-5 text-sm`,children:I.resolution.map(e=>(0,A.jsxs)(`li`,{className:e.won?`text-[var(--oke-fg)]`:`text-[var(--oke-muted)]`,children:[(0,A.jsx)(`span`,{className:`font-mono`,children:e.source}),e.won?` — won`:e.present?` — present (lost)`:` — absent`]},e.source))}),(0,A.jsxs)(`p`,{className:`mt-2 text-sm`,role:`status`,children:[`Winner: `,(0,A.jsx)(`span`,{className:`font-mono`,children:I.winner??`none`})]})]}),(0,A.jsxs)(`section`,{"aria-label":`Readers`,children:[(0,A.jsx)(`h3`,{className:`mb-2 text-sm font-medium`,children:`Readers`}),(0,A.jsxs)(`p`,{className:`text-sm text-[var(--oke-muted)]`,children:[`Flows that declare `,(0,A.jsxs)(`code`,{className:`font-mono`,children:[`fx.vault(`,I.name,`)`]})]}),(0,A.jsx)(`ul`,{className:`mt-1 list-disc pl-5 font-mono text-sm`,children:I.readers.length===0?(0,A.jsx)(`li`,{className:`text-[var(--oke-muted)]`,children:`none`}):I.readers.map(e=>(0,A.jsx)(`li`,{children:e},e))})]}),(0,A.jsxs)(`section`,{"aria-label":`Rotation blast radius`,children:[(0,A.jsx)(`h3`,{className:`mb-2 text-sm font-medium`,children:`Rotation blast radius`}),L?(0,A.jsxs)(A.Fragment,{children:[(0,A.jsx)(`p`,{className:`text-sm`,role:L.warn?`alert`:`status`,children:L.summary}),L.detail?(0,A.jsx)(`p`,{className:`text-sm text-[var(--oke-muted)]`,children:L.detail}):null,I.blastRadius.runIds.length>0?(0,A.jsx)(`p`,{className:`mt-1 font-mono text-xs text-[var(--oke-muted)]`,children:I.blastRadius.runIds.join(`, `)}):null]}):null]}),(0,A.jsxs)(`section`,{"aria-label":`Last read`,children:[(0,A.jsx)(`h3`,{className:`mb-2 text-sm font-medium`,children:`Last read`}),(0,A.jsx)(`p`,{className:`text-sm`,role:`status`,children:I.lastReadAt==null?`Never read — possible dead secret`:new Date(I.lastReadAt).toISOString()})]}),(0,A.jsxs)(`section`,{"aria-label":`Set or rotate`,className:`space-y-3`,children:[(0,A.jsx)(`h3`,{className:`text-sm font-medium`,children:`Set / rotate`}),(0,A.jsx)(`p`,{className:`text-sm text-[var(--oke-muted)]`,children:`Write-only. Values are never revealed after submit. No preview.`}),(0,A.jsxs)(`div`,{className:`flex gap-2`,children:[(0,A.jsx)(f,{type:`button`,variant:B===`set`?`primary`:`ghost`,"aria-pressed":B===`set`,onClick:()=>j({...e,action:`set`}),children:`Set`}),(0,A.jsx)(f,{type:`button`,variant:B===`rotate`?`danger`:`ghost`,"aria-pressed":B===`rotate`,onClick:()=>j({...e,action:`rotate`}),children:`Rotate`})]}),B?(0,A.jsxs)(`div`,{className:`space-y-3 border border-[var(--oke-line)] p-3`,children:[(0,A.jsxs)(`label`,{className:`flex flex-col gap-1 text-sm`,children:[(0,A.jsx)(`span`,{children:`New value`}),(0,A.jsx)(s,{"aria-label":`New vault value`,type:`password`,autoComplete:`off`,value:v,onChange:e=>y(e.currentTarget.value)})]}),(B===`rotate`||R.kind===`typed`)&&(0,A.jsxs)(A.Fragment,{children:[(0,A.jsxs)(`label`,{className:`flex flex-col gap-1 text-sm`,children:[(0,A.jsxs)(`span`,{children:[`Type`,` `,B===`rotate`?z.kind===`typed`?z.phrase:`ROTATE`:R.kind===`typed`?R.phrase:`SET`,` `,`to confirm`]}),(0,A.jsx)(s,{"aria-label":`Confirmation phrase`,value:u,onChange:e=>d(e.currentTarget.value)})]}),(0,A.jsxs)(`label`,{className:`flex flex-col gap-1 text-sm`,children:[(0,A.jsx)(`span`,{children:`Reason`}),(0,A.jsx)(s,{"aria-label":`Reason for vault write`,value:p,onChange:e=>g(e.currentTarget.value)})]})]}),(0,A.jsx)(f,{type:`button`,variant:B===`rotate`?`danger`:`primary`,disabled:!v||(B===`set`?V.isPending:H.isPending),onClick:()=>{B===`set`?V.mutate():H.mutate()},children:B===`set`?`Commit set`:`Commit rotate`}),(V.isError||H.isError)&&(0,A.jsx)(`p`,{role:`alert`,className:`text-sm text-[var(--oke-danger)]`,children:(V.error??H.error)?.message??`Failed`})]}):null]})]}):(0,A.jsx)(`p`,{className:`text-sm text-[var(--oke-muted)]`,children:`Select a contract to inspect fingerprints, resolution, and readers.`})})]})]})}var M=t({default:()=>j});export{y as n,M as t};
|
package/src/console/ui/dist/assets/{rolldown-runtime-CNC7AqOf.js → rolldown-runtime-B0Z9INg1.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,t,n)=>()=>{if(n)throw n[0];try{return e&&(t=e(e=0)),t}catch(e){throw n=[e],e}},s=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t),e=null),t.exports),c=(e,n)=>{let r={};for(var i in e)t(r,i,{get:e[i],enumerable:!0});return n||t(r,Symbol.toStringTag,{value:`Module`}),r},l=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},u=(n,r,
|
|
1
|
+
var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,t,n)=>()=>{if(n)throw n[0];try{return e&&(t=e(e=0)),t}catch(e){throw n=[e],e}},s=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t),e=null),t.exports),c=(e,n)=>{let r={};for(var i in e)t(r,i,{get:e[i],enumerable:!0});return n||t(r,Symbol.toStringTag,{value:`Module`}),r},l=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},u=(n,r,o)=>(o=n==null?{}:e(i(n)),l(r||!n||!n.__esModule||!a.call(n,`default`)?t(o,`default`,{value:n,enumerable:!0}):o,n)),d=e=>a.call(e,`module.exports`)?e[`module.exports`]:l(t({},`__esModule`,{value:!0}),e);export{u as a,d as i,o as n,c as r,s as t};
|
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
6
|
<link rel="icon" href="/favicon.svg" type="image/svg+xml" />
|
|
7
7
|
<title>oke Console</title>
|
|
8
|
-
<script type="module" crossorigin src="/assets/index-
|
|
9
|
-
<link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-
|
|
8
|
+
<script type="module" crossorigin src="/assets/index-CjxwRGVv.js"></script>
|
|
9
|
+
<link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-B0Z9INg1.js">
|
|
10
10
|
<link rel="stylesheet" crossorigin href="/assets/style-C8MxEWPd.css">
|
|
11
11
|
</head>
|
|
12
12
|
<body>
|
package/src/docker/compose.ts
CHANGED
|
@@ -250,6 +250,11 @@ export function buildStackEnv(
|
|
|
250
250
|
// Token is minted by the bootstrap — never a generated password here.
|
|
251
251
|
env[`${prefix}_URL`] = url;
|
|
252
252
|
env.OKE_VAULT_URL = url;
|
|
253
|
+
} else if (spec.role === "store.index") {
|
|
254
|
+
// Meilisearch: standalone HTTP URL + the generated master key.
|
|
255
|
+
env[`${prefix}_URL`] = url;
|
|
256
|
+
env.OKE_STORE_INDEX_URL = url;
|
|
257
|
+
env.OKE_STORE_INDEX_KEY = spec.credentials.password;
|
|
253
258
|
} else {
|
|
254
259
|
env[`${prefix}_USER`] = spec.credentials.user;
|
|
255
260
|
env[`${prefix}_PASSWORD`] = spec.credentials.password;
|