@anvia/studio 1.1.0 → 1.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (31) hide show
  1. package/dist/index.js +1 -1
  2. package/dist/index.js.map +1 -1
  3. package/dist/ui/assets/{graphs-page-D2jzO23K.js → graphs-page-vBCjLEva.js} +2 -2
  4. package/dist/ui/assets/{graphs-page-D2jzO23K.js.map → graphs-page-vBCjLEva.js.map} +1 -1
  5. package/dist/ui/assets/index-D7rMlAzl.js +61 -0
  6. package/dist/ui/assets/index-D7rMlAzl.js.map +1 -0
  7. package/dist/ui/assets/{knowledge-page-BSI_VDOp.js → knowledge-page-ZeAUXg01.js} +2 -2
  8. package/dist/ui/assets/{knowledge-page-BSI_VDOp.js.map → knowledge-page-ZeAUXg01.js.map} +1 -1
  9. package/dist/ui/assets/{mcps-page-BL1FLksQ.js → mcps-page-BSkygYJM.js} +2 -2
  10. package/dist/ui/assets/{mcps-page-BL1FLksQ.js.map → mcps-page-BSkygYJM.js.map} +1 -1
  11. package/dist/ui/assets/{memory-page-C20w55ut.js → memory-page-B2pWZ4in.js} +2 -2
  12. package/dist/ui/assets/{memory-page-C20w55ut.js.map → memory-page-B2pWZ4in.js.map} +1 -1
  13. package/dist/ui/assets/{pipelines-page-BPCS5mwc.js → pipelines-page-DAqa699J.js} +2 -2
  14. package/dist/ui/assets/{pipelines-page-BPCS5mwc.js.map → pipelines-page-DAqa699J.js.map} +1 -1
  15. package/dist/ui/assets/{renderers-CfrpUrJr.js → renderers-DRD34eUr.js} +4 -4
  16. package/dist/ui/assets/{renderers-CfrpUrJr.js.map → renderers-DRD34eUr.js.map} +1 -1
  17. package/dist/ui/assets/{status-page-B-57_iOR.js → status-page-CqmMMSo2.js} +2 -2
  18. package/dist/ui/assets/{status-page-B-57_iOR.js.map → status-page-CqmMMSo2.js.map} +1 -1
  19. package/dist/ui/assets/{style-BstB0PNS.js → style-FGiH1LIC.js} +4 -4
  20. package/dist/ui/assets/style-FGiH1LIC.js.map +1 -0
  21. package/dist/ui/assets/{tool-runner-DcuNII62.js → tool-runner-CExWna8k.js} +2 -2
  22. package/dist/ui/assets/{tool-runner-DcuNII62.js.map → tool-runner-CExWna8k.js.map} +1 -1
  23. package/dist/ui/assets/{tools-page-D4wQGPOl.js → tools-page-CdkExqNd.js} +2 -2
  24. package/dist/ui/assets/{tools-page-D4wQGPOl.js.map → tools-page-CdkExqNd.js.map} +1 -1
  25. package/dist/ui/assets/{transcript-item-B6OLwa1p.js → transcript-item-D9NWsnsD.js} +2 -2
  26. package/dist/ui/assets/{transcript-item-B6OLwa1p.js.map → transcript-item-D9NWsnsD.js.map} +1 -1
  27. package/dist/ui/index.html +1 -1
  28. package/package.json +11 -11
  29. package/dist/ui/assets/index-C0DKDUvj.js +0 -75
  30. package/dist/ui/assets/index-C0DKDUvj.js.map +0 -1
  31. package/dist/ui/assets/style-BstB0PNS.js.map +0 -1
@@ -1,2 +1,2 @@
1
- import{i as e,r as t,s as n}from"./utils-DzstcfqT.js";import{l as r,t as i}from"./button-B_AoswCu.js";import{a,i as o,n as s,r as c,t as l}from"./studio-DzEdCFsX.js";import{t as u}from"./badge-C3fkxijh.js";import{t as d}from"./renderers-CfrpUrJr.js";var f=n(e(),1),p=t();function m(e){let[t,n]=(0,f.useState)(),[r,u]=(0,f.useState)(!1),[d,m]=(0,f.useState)(``),g=(0,f.useCallback)(async()=>{if(!e.enabled){n(void 0);return}u(!0),m(``);try{let e=await fetch(`/status`);if(!e.ok)throw Error(`Status failed with HTTP ${e.status}`);n(await e.json())}catch(e){m(e instanceof Error?e.message:String(e)),n(void 0)}finally{u(!1)}},[e.enabled]);return(0,f.useEffect)(()=>{g()},[g]),(0,p.jsxs)(a,{className:`grid-rows-[auto_minmax(0,1fr)]`,"aria-label":`Status`,children:[(0,p.jsx)(o,{title:`Status`,description:`Runtime health, storage adapters, feature capabilities, and current record counts.`,action:(0,p.jsxs)(`div`,{className:`flex min-w-0 flex-wrap justify-end gap-2 max-sm:justify-start`,children:[(0,p.jsx)(s,{label:`agents`,value:t?.counts.agents??0}),(0,p.jsx)(s,{label:`sessions`,value:t?.counts.sessions??`-`}),(0,p.jsx)(s,{label:`traces`,value:t?.counts.traces??`-`}),(0,p.jsx)(i,{className:`h-8 min-h-8 rounded-md px-3 text-xs`,type:`button`,variant:`secondary`,disabled:r,onClick:()=>void g(),children:`Refresh`})]})}),(0,p.jsx)(c,{className:`overflow-auto`,children:e.enabled?r&&t===void 0?(0,p.jsx)(l,{title:`Loading status`,text:`Reading runtime status.`}):d.length>0?(0,p.jsx)(l,{title:`Status error`,text:d}):t===void 0?null:(0,p.jsx)(h,{summary:t}):(0,p.jsx)(l,{title:`Status unavailable`,text:`This Studio runtime did not expose status.`})})]})}function h(e){let t=Object.entries(e.summary.capabilities).filter(([,e])=>e?.enabled===!0).length;return(0,p.jsxs)(`div`,{className:`grid h-full min-h-0 gap-5 border-t border-hair pt-4`,children:[(0,p.jsxs)(`section`,{className:`grid gap-5 xl:grid-cols-[minmax(280px,0.58fr)_minmax(0,1.42fr)]`,children:[(0,p.jsx)(g,{summary:e.summary,enabledCapabilityCount:t}),(0,p.jsxs)(`div`,{className:`grid gap-5 lg:grid-cols-2`,children:[(0,p.jsx)(_,{storage:e.summary.storage}),(0,p.jsx)(v,{counts:e.summary.counts})]})]}),(0,p.jsxs)(`section`,{className:`grid gap-5 xl:grid-cols-[minmax(0,1.05fr)_minmax(0,0.95fr)]`,children:[(0,p.jsx)(y,{capabilities:e.summary.capabilities}),(0,p.jsx)(b,{summary:e.summary})]})]})}function g(e){return(0,p.jsxs)(`section`,{className:`grid content-start gap-5 border-b border-hair pb-5 xl:border-b-0 xl:border-r xl:pb-0 xl:pr-5`,children:[(0,p.jsxs)(`div`,{className:`grid gap-3`,children:[(0,p.jsx)(S,{children:`runtime`}),(0,p.jsxs)(`div`,{className:`flex min-w-0 flex-wrap items-center gap-2`,children:[(0,p.jsx)(u,{className:`border-hair bg-muted text-foreground`,children:`online`}),(0,p.jsxs)(u,{className:`border-hair bg-background text-muted-foreground`,children:[e.enabledCapabilityCount,` capabilities`]})]})]}),(0,p.jsxs)(`div`,{className:`grid border-y border-hair`,children:[(0,p.jsx)(C,{label:`id`,value:e.summary.runner.id}),(0,p.jsx)(C,{label:`name`,value:e.summary.runner.name??`-`}),(0,p.jsx)(C,{label:`version`,value:e.summary.runner.version??`-`}),(0,p.jsx)(C,{label:`generated`,value:`${r(e.summary.generatedAt)} / ${e.summary.generatedAt}`})]})]})}function _(e){let t=Object.entries(e.storage);return(0,p.jsxs)(`section`,{className:`grid content-start gap-3`,children:[(0,p.jsx)(x,{title:`storage`,value:`${t.length} adapters`}),t.length===0?(0,p.jsx)(T,{text:`No storage adapters reported.`}):(0,p.jsx)(`div`,{className:`grid border-y border-hair`,children:t.map(([e,t])=>(0,p.jsx)(w,{label:E(e),value:t??`-`,tone:t===void 0?`muted`:`normal`},e))})]})}function v(e){let t=Object.entries(e.counts).filter(e=>typeof e[1]==`number`);return(0,p.jsxs)(`section`,{className:`grid content-start gap-3`,children:[(0,p.jsx)(x,{title:`records`,value:`${t.length} counters`}),(0,p.jsx)(`div`,{className:`grid border-y border-hair`,children:t.map(([e,t])=>(0,p.jsx)(w,{label:E(e),value:t},e))})]})}function y(e){let t=Object.entries(e.capabilities);return(0,p.jsxs)(`section`,{className:`grid content-start gap-3`,children:[(0,p.jsx)(x,{title:`capabilities`,value:`${t.length} reported`}),t.length===0?(0,p.jsx)(T,{text:`No capabilities reported.`}):(0,p.jsx)(`div`,{className:`grid border-y border-hair sm:grid-cols-2 sm:divide-x sm:divide-hair`,children:t.map(([e,n],r)=>(0,p.jsxs)(`div`,{className:[`grid min-w-0 gap-1 border-b border-hair px-3 py-3`,r>=t.length-(t.length%2==0?2:1)?`sm:border-b-0`:``].join(` `),children:[(0,p.jsxs)(`div`,{className:`flex min-w-0 items-center justify-between gap-3`,children:[(0,p.jsx)(`span`,{className:`min-w-0 truncate text-sm font-semibold text-foreground`,children:E(e)}),(0,p.jsx)(`span`,{className:n?.enabled?`text-xs font-medium text-foreground`:`text-xs font-medium text-muted-foreground`,children:n?.enabled?`enabled`:`disabled`})]}),n?.reason===void 0?null:(0,p.jsx)(`p`,{className:`m-0 text-xs leading-5 text-muted-foreground`,children:n.reason})]},e))})]})}function b(e){return(0,p.jsxs)(`section`,{className:`grid min-w-0 content-start gap-3`,children:[(0,p.jsx)(x,{title:`raw summary`,value:`JSON`}),(0,p.jsxs)(`details`,{className:`group grid min-w-0 overflow-hidden border-y border-hair`,open:!0,children:[(0,p.jsxs)(`summary`,{className:`flex min-h-11 cursor-pointer list-none items-center justify-between gap-3 bg-muted px-3 text-xs font-semibold uppercase tracking-[0.16em] text-muted-foreground marker:hidden`,children:[`Payload`,(0,p.jsx)(`span`,{className:`font-medium normal-case tracking-normal group-open:hidden`,children:`Show`}),(0,p.jsx)(`span`,{className:`hidden font-medium normal-case tracking-normal group-open:inline`,children:`Hide`})]}),(0,p.jsx)(`div`,{className:`min-w-0 overflow-x-auto border-t border-hair`,children:(0,p.jsx)(`pre`,{className:`m-0 max-h-[28rem] min-w-max p-4 text-xs leading-5 text-foreground`,children:(0,p.jsx)(`code`,{children:(0,p.jsx)(d,{text:JSON.stringify(e.summary,null,2)})})})})]})]})}function x(e){return(0,p.jsxs)(`div`,{className:`flex min-w-0 items-center justify-between gap-3`,children:[(0,p.jsx)(S,{children:e.title}),(0,p.jsx)(`span`,{className:`text-xs font-medium text-muted-foreground`,children:e.value})]})}function S(e){return(0,p.jsx)(`h2`,{className:`m-0 text-xs font-semibold uppercase tracking-[0.18em] text-muted-foreground`,children:e.children})}function C(e){return(0,p.jsxs)(`div`,{className:`grid min-w-0 gap-1 border-b border-hair px-3 py-3 first:pt-3 last:border-b-0`,children:[(0,p.jsx)(`span`,{className:`text-xs font-semibold uppercase tracking-[0.16em] text-muted-foreground`,children:e.label}),(0,p.jsx)(`span`,{className:`min-w-0 truncate text-sm text-foreground`,title:String(e.value),children:e.value})]})}function w(e){return(0,p.jsxs)(`div`,{className:`grid min-w-0 grid-cols-[minmax(120px,0.5fr)_minmax(0,1fr)] gap-3 border-b border-hair px-3 py-3 last:border-b-0`,children:[(0,p.jsx)(`span`,{className:`min-w-0 truncate text-sm font-medium text-muted-foreground`,children:e.label}),(0,p.jsx)(`span`,{className:[`min-w-0 truncate text-right text-sm font-semibold tabular-nums`,e.tone===`muted`?`text-muted-foreground`:`text-foreground`].join(` `),title:String(e.value),children:e.value})]})}function T(e){return(0,p.jsx)(`div`,{className:`border-y border-dashed border-hair px-3 py-8 text-center text-sm text-muted-foreground`,children:e.text})}function E(e){return e.replace(/([a-z])([A-Z])/g,`$1 $2`).replace(/[_-]+/g,` `).toLowerCase()}export{m as StatusPage};
2
- //# sourceMappingURL=status-page-B-57_iOR.js.map
1
+ import{i as e,r as t,s as n}from"./utils-DzstcfqT.js";import{l as r,t as i}from"./button-B_AoswCu.js";import{a,i as o,n as s,r as c,t as l}from"./studio-DzEdCFsX.js";import{t as u}from"./badge-C3fkxijh.js";import{t as d}from"./renderers-DRD34eUr.js";var f=n(e(),1),p=t();function m(e){let[t,n]=(0,f.useState)(),[r,u]=(0,f.useState)(!1),[d,m]=(0,f.useState)(``),g=(0,f.useCallback)(async()=>{if(!e.enabled){n(void 0);return}u(!0),m(``);try{let e=await fetch(`/status`);if(!e.ok)throw Error(`Status failed with HTTP ${e.status}`);n(await e.json())}catch(e){m(e instanceof Error?e.message:String(e)),n(void 0)}finally{u(!1)}},[e.enabled]);return(0,f.useEffect)(()=>{g()},[g]),(0,p.jsxs)(a,{className:`grid-rows-[auto_minmax(0,1fr)]`,"aria-label":`Status`,children:[(0,p.jsx)(o,{title:`Status`,description:`Runtime health, storage adapters, feature capabilities, and current record counts.`,action:(0,p.jsxs)(`div`,{className:`flex min-w-0 flex-wrap justify-end gap-2 max-sm:justify-start`,children:[(0,p.jsx)(s,{label:`agents`,value:t?.counts.agents??0}),(0,p.jsx)(s,{label:`sessions`,value:t?.counts.sessions??`-`}),(0,p.jsx)(s,{label:`traces`,value:t?.counts.traces??`-`}),(0,p.jsx)(i,{className:`h-8 min-h-8 rounded-md px-3 text-xs`,type:`button`,variant:`secondary`,disabled:r,onClick:()=>void g(),children:`Refresh`})]})}),(0,p.jsx)(c,{className:`overflow-auto`,children:e.enabled?r&&t===void 0?(0,p.jsx)(l,{title:`Loading status`,text:`Reading runtime status.`}):d.length>0?(0,p.jsx)(l,{title:`Status error`,text:d}):t===void 0?null:(0,p.jsx)(h,{summary:t}):(0,p.jsx)(l,{title:`Status unavailable`,text:`This Studio runtime did not expose status.`})})]})}function h(e){let t=Object.entries(e.summary.capabilities).filter(([,e])=>e?.enabled===!0).length;return(0,p.jsxs)(`div`,{className:`grid h-full min-h-0 gap-5 border-t border-hair pt-4`,children:[(0,p.jsxs)(`section`,{className:`grid gap-5 xl:grid-cols-[minmax(280px,0.58fr)_minmax(0,1.42fr)]`,children:[(0,p.jsx)(g,{summary:e.summary,enabledCapabilityCount:t}),(0,p.jsxs)(`div`,{className:`grid gap-5 lg:grid-cols-2`,children:[(0,p.jsx)(_,{storage:e.summary.storage}),(0,p.jsx)(v,{counts:e.summary.counts})]})]}),(0,p.jsxs)(`section`,{className:`grid gap-5 xl:grid-cols-[minmax(0,1.05fr)_minmax(0,0.95fr)]`,children:[(0,p.jsx)(y,{capabilities:e.summary.capabilities}),(0,p.jsx)(b,{summary:e.summary})]})]})}function g(e){return(0,p.jsxs)(`section`,{className:`grid content-start gap-5 border-b border-hair pb-5 xl:border-b-0 xl:border-r xl:pb-0 xl:pr-5`,children:[(0,p.jsxs)(`div`,{className:`grid gap-3`,children:[(0,p.jsx)(S,{children:`runtime`}),(0,p.jsxs)(`div`,{className:`flex min-w-0 flex-wrap items-center gap-2`,children:[(0,p.jsx)(u,{className:`border-hair bg-muted text-foreground`,children:`online`}),(0,p.jsxs)(u,{className:`border-hair bg-background text-muted-foreground`,children:[e.enabledCapabilityCount,` capabilities`]})]})]}),(0,p.jsxs)(`div`,{className:`grid border-y border-hair`,children:[(0,p.jsx)(C,{label:`id`,value:e.summary.runner.id}),(0,p.jsx)(C,{label:`name`,value:e.summary.runner.name??`-`}),(0,p.jsx)(C,{label:`version`,value:e.summary.runner.version??`-`}),(0,p.jsx)(C,{label:`generated`,value:`${r(e.summary.generatedAt)} / ${e.summary.generatedAt}`})]})]})}function _(e){let t=Object.entries(e.storage);return(0,p.jsxs)(`section`,{className:`grid content-start gap-3`,children:[(0,p.jsx)(x,{title:`storage`,value:`${t.length} adapters`}),t.length===0?(0,p.jsx)(T,{text:`No storage adapters reported.`}):(0,p.jsx)(`div`,{className:`grid border-y border-hair`,children:t.map(([e,t])=>(0,p.jsx)(w,{label:E(e),value:t??`-`,tone:t===void 0?`muted`:`normal`},e))})]})}function v(e){let t=Object.entries(e.counts).filter(e=>typeof e[1]==`number`);return(0,p.jsxs)(`section`,{className:`grid content-start gap-3`,children:[(0,p.jsx)(x,{title:`records`,value:`${t.length} counters`}),(0,p.jsx)(`div`,{className:`grid border-y border-hair`,children:t.map(([e,t])=>(0,p.jsx)(w,{label:E(e),value:t},e))})]})}function y(e){let t=Object.entries(e.capabilities);return(0,p.jsxs)(`section`,{className:`grid content-start gap-3`,children:[(0,p.jsx)(x,{title:`capabilities`,value:`${t.length} reported`}),t.length===0?(0,p.jsx)(T,{text:`No capabilities reported.`}):(0,p.jsx)(`div`,{className:`grid border-y border-hair sm:grid-cols-2 sm:divide-x sm:divide-hair`,children:t.map(([e,n],r)=>(0,p.jsxs)(`div`,{className:[`grid min-w-0 gap-1 border-b border-hair px-3 py-3`,r>=t.length-(t.length%2==0?2:1)?`sm:border-b-0`:``].join(` `),children:[(0,p.jsxs)(`div`,{className:`flex min-w-0 items-center justify-between gap-3`,children:[(0,p.jsx)(`span`,{className:`min-w-0 truncate text-sm font-semibold text-foreground`,children:E(e)}),(0,p.jsx)(`span`,{className:n?.enabled?`text-xs font-medium text-foreground`:`text-xs font-medium text-muted-foreground`,children:n?.enabled?`enabled`:`disabled`})]}),n?.reason===void 0?null:(0,p.jsx)(`p`,{className:`m-0 text-xs leading-5 text-muted-foreground`,children:n.reason})]},e))})]})}function b(e){return(0,p.jsxs)(`section`,{className:`grid min-w-0 content-start gap-3`,children:[(0,p.jsx)(x,{title:`raw summary`,value:`JSON`}),(0,p.jsxs)(`details`,{className:`group grid min-w-0 overflow-hidden border-y border-hair`,open:!0,children:[(0,p.jsxs)(`summary`,{className:`flex min-h-11 cursor-pointer list-none items-center justify-between gap-3 bg-muted px-3 text-xs font-semibold uppercase tracking-[0.16em] text-muted-foreground marker:hidden`,children:[`Payload`,(0,p.jsx)(`span`,{className:`font-medium normal-case tracking-normal group-open:hidden`,children:`Show`}),(0,p.jsx)(`span`,{className:`hidden font-medium normal-case tracking-normal group-open:inline`,children:`Hide`})]}),(0,p.jsx)(`div`,{className:`min-w-0 overflow-x-auto border-t border-hair`,children:(0,p.jsx)(`pre`,{className:`m-0 max-h-[28rem] min-w-max p-4 text-xs leading-5 text-foreground`,children:(0,p.jsx)(`code`,{children:(0,p.jsx)(d,{text:JSON.stringify(e.summary,null,2)})})})})]})]})}function x(e){return(0,p.jsxs)(`div`,{className:`flex min-w-0 items-center justify-between gap-3`,children:[(0,p.jsx)(S,{children:e.title}),(0,p.jsx)(`span`,{className:`text-xs font-medium text-muted-foreground`,children:e.value})]})}function S(e){return(0,p.jsx)(`h2`,{className:`m-0 text-xs font-semibold uppercase tracking-[0.18em] text-muted-foreground`,children:e.children})}function C(e){return(0,p.jsxs)(`div`,{className:`grid min-w-0 gap-1 border-b border-hair px-3 py-3 first:pt-3 last:border-b-0`,children:[(0,p.jsx)(`span`,{className:`text-xs font-semibold uppercase tracking-[0.16em] text-muted-foreground`,children:e.label}),(0,p.jsx)(`span`,{className:`min-w-0 truncate text-sm text-foreground`,title:String(e.value),children:e.value})]})}function w(e){return(0,p.jsxs)(`div`,{className:`grid min-w-0 grid-cols-[minmax(120px,0.5fr)_minmax(0,1fr)] gap-3 border-b border-hair px-3 py-3 last:border-b-0`,children:[(0,p.jsx)(`span`,{className:`min-w-0 truncate text-sm font-medium text-muted-foreground`,children:e.label}),(0,p.jsx)(`span`,{className:[`min-w-0 truncate text-right text-sm font-semibold tabular-nums`,e.tone===`muted`?`text-muted-foreground`:`text-foreground`].join(` `),title:String(e.value),children:e.value})]})}function T(e){return(0,p.jsx)(`div`,{className:`border-y border-dashed border-hair px-3 py-8 text-center text-sm text-muted-foreground`,children:e.text})}function E(e){return e.replace(/([a-z])([A-Z])/g,`$1 $2`).replace(/[_-]+/g,` `).toLowerCase()}export{m as StatusPage};
2
+ //# sourceMappingURL=status-page-CqmMMSo2.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"status-page-B-57_iOR.js","names":[],"sources":["../../../src/ui/app/modules/status/status-page.tsx"],"sourcesContent":["import { useCallback, useEffect, useState } from \"react\";\nimport type { StudioStatusSummary } from \"../../../../types\";\nimport { Badge } from \"../../components/ui/badge\";\nimport { Button } from \"../../components/ui/button\";\nimport {\n StudioEmptyState,\n StudioHeaderMetric,\n StudioPageContent,\n StudioPageHeader,\n StudioPageShell,\n} from \"../../components/ui/studio\";\nimport { formatRelativeTime } from \"../shared/format\";\nimport { JsonSyntax } from \"../shared/renderers\";\n\nexport function StatusPage(props: { enabled: boolean }) {\n const [summary, setSummary] = useState<StudioStatusSummary | undefined>();\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState(\"\");\n\n const loadStatus = useCallback(async () => {\n if (!props.enabled) {\n setSummary(undefined);\n return;\n }\n setLoading(true);\n setError(\"\");\n try {\n const response = await fetch(\"/status\");\n if (!response.ok) {\n throw new Error(`Status failed with HTTP ${response.status}`);\n }\n setSummary((await response.json()) as StudioStatusSummary);\n } catch (loadError) {\n setError(loadError instanceof Error ? loadError.message : String(loadError));\n setSummary(undefined);\n } finally {\n setLoading(false);\n }\n }, [props.enabled]);\n\n useEffect(() => {\n void loadStatus();\n }, [loadStatus]);\n\n return (\n <StudioPageShell className=\"grid-rows-[auto_minmax(0,1fr)]\" aria-label=\"Status\">\n <StudioPageHeader\n title=\"Status\"\n description=\"Runtime health, storage adapters, feature capabilities, and current record counts.\"\n action={\n <div className=\"flex min-w-0 flex-wrap justify-end gap-2 max-sm:justify-start\">\n <StudioHeaderMetric label=\"agents\" value={summary?.counts.agents ?? 0} />\n <StudioHeaderMetric label=\"sessions\" value={summary?.counts.sessions ?? \"-\"} />\n <StudioHeaderMetric label=\"traces\" value={summary?.counts.traces ?? \"-\"} />\n <Button\n className=\"h-8 min-h-8 rounded-md px-3 text-xs\"\n type=\"button\"\n variant=\"secondary\"\n disabled={loading}\n onClick={() => void loadStatus()}\n >\n Refresh\n </Button>\n </div>\n }\n />\n\n <StudioPageContent className=\"overflow-auto\">\n {!props.enabled ? (\n <StudioEmptyState\n title=\"Status unavailable\"\n text=\"This Studio runtime did not expose status.\"\n />\n ) : loading && summary === undefined ? (\n <StudioEmptyState title=\"Loading status\" text=\"Reading runtime status.\" />\n ) : error.length > 0 ? (\n <StudioEmptyState title=\"Status error\" text={error} />\n ) : summary === undefined ? null : (\n <StatusDashboard summary={summary} />\n )}\n </StudioPageContent>\n </StudioPageShell>\n );\n}\n\nfunction StatusDashboard(props: { summary: StudioStatusSummary }) {\n const capabilityEntries = Object.entries(props.summary.capabilities);\n const enabledCapabilityCount = capabilityEntries.filter(\n ([, capability]) => capability?.enabled === true,\n ).length;\n\n return (\n <div className=\"grid h-full min-h-0 gap-5 border-t border-hair pt-4\">\n <section className=\"grid gap-5 xl:grid-cols-[minmax(280px,0.58fr)_minmax(0,1.42fr)]\">\n <RuntimeSummary summary={props.summary} enabledCapabilityCount={enabledCapabilityCount} />\n <div className=\"grid gap-5 lg:grid-cols-2\">\n <StorageMatrix storage={props.summary.storage} />\n <CountsLedger counts={props.summary.counts} />\n </div>\n </section>\n <section className=\"grid gap-5 xl:grid-cols-[minmax(0,1.05fr)_minmax(0,0.95fr)]\">\n <CapabilityLedger capabilities={props.summary.capabilities} />\n <RawSummary summary={props.summary} />\n </section>\n </div>\n );\n}\n\nfunction RuntimeSummary(props: { summary: StudioStatusSummary; enabledCapabilityCount: number }) {\n return (\n <section className=\"grid content-start gap-5 border-b border-hair pb-5 xl:border-b-0 xl:border-r xl:pb-0 xl:pr-5\">\n <div className=\"grid gap-3\">\n <SectionLabel>runtime</SectionLabel>\n <div className=\"flex min-w-0 flex-wrap items-center gap-2\">\n <Badge className=\"border-hair bg-muted text-foreground\">online</Badge>\n <Badge className=\"border-hair bg-background text-muted-foreground\">\n {props.enabledCapabilityCount} capabilities\n </Badge>\n </div>\n </div>\n <div className=\"grid border-y border-hair\">\n <StatusFact label=\"id\" value={props.summary.runner.id} />\n <StatusFact label=\"name\" value={props.summary.runner.name ?? \"-\"} />\n <StatusFact label=\"version\" value={props.summary.runner.version ?? \"-\"} />\n <StatusFact\n label=\"generated\"\n value={`${formatRelativeTime(props.summary.generatedAt)} / ${props.summary.generatedAt}`}\n />\n </div>\n </section>\n );\n}\n\nfunction StorageMatrix(props: { storage: StudioStatusSummary[\"storage\"] }) {\n const entries = Object.entries(props.storage);\n return (\n <section className=\"grid content-start gap-3\">\n <SectionHeader title=\"storage\" value={`${entries.length} adapters`} />\n {entries.length === 0 ? (\n <DashedNote text=\"No storage adapters reported.\" />\n ) : (\n <div className=\"grid border-y border-hair\">\n {entries.map(([key, value]) => (\n <StatusRow\n label={humanizeKey(key)}\n value={value ?? \"-\"}\n key={key}\n tone={value === undefined ? \"muted\" : \"normal\"}\n />\n ))}\n </div>\n )}\n </section>\n );\n}\n\nfunction CountsLedger(props: { counts: StudioStatusSummary[\"counts\"] }) {\n const entries = Object.entries(props.counts).filter((entry): entry is [string, number] => {\n return typeof entry[1] === \"number\";\n });\n return (\n <section className=\"grid content-start gap-3\">\n <SectionHeader title=\"records\" value={`${entries.length} counters`} />\n <div className=\"grid border-y border-hair\">\n {entries.map(([key, value]) => (\n <StatusRow label={humanizeKey(key)} value={value} key={key} />\n ))}\n </div>\n </section>\n );\n}\n\nfunction CapabilityLedger(props: { capabilities: StudioStatusSummary[\"capabilities\"] }) {\n const entries = Object.entries(props.capabilities);\n return (\n <section className=\"grid content-start gap-3\">\n <SectionHeader title=\"capabilities\" value={`${entries.length} reported`} />\n {entries.length === 0 ? (\n <DashedNote text=\"No capabilities reported.\" />\n ) : (\n <div className=\"grid border-y border-hair sm:grid-cols-2 sm:divide-x sm:divide-hair\">\n {entries.map(([name, capability], index) => (\n <div\n className={[\n \"grid min-w-0 gap-1 border-b border-hair px-3 py-3\",\n index >= entries.length - (entries.length % 2 === 0 ? 2 : 1) ? \"sm:border-b-0\" : \"\",\n ].join(\" \")}\n key={name}\n >\n <div className=\"flex min-w-0 items-center justify-between gap-3\">\n <span className=\"min-w-0 truncate text-sm font-semibold text-foreground\">\n {humanizeKey(name)}\n </span>\n <span\n className={\n capability?.enabled\n ? \"text-xs font-medium text-foreground\"\n : \"text-xs font-medium text-muted-foreground\"\n }\n >\n {capability?.enabled ? \"enabled\" : \"disabled\"}\n </span>\n </div>\n {capability?.reason === undefined ? null : (\n <p className=\"m-0 text-xs leading-5 text-muted-foreground\">{capability.reason}</p>\n )}\n </div>\n ))}\n </div>\n )}\n </section>\n );\n}\n\nfunction RawSummary(props: { summary: StudioStatusSummary }) {\n return (\n <section className=\"grid min-w-0 content-start gap-3\">\n <SectionHeader title=\"raw summary\" value=\"JSON\" />\n <details className=\"group grid min-w-0 overflow-hidden border-y border-hair\" open>\n <summary className=\"flex min-h-11 cursor-pointer list-none items-center justify-between gap-3 bg-muted px-3 text-xs font-semibold uppercase tracking-[0.16em] text-muted-foreground marker:hidden\">\n Payload\n <span className=\"font-medium normal-case tracking-normal group-open:hidden\">Show</span>\n <span className=\"hidden font-medium normal-case tracking-normal group-open:inline\">\n Hide\n </span>\n </summary>\n <div className=\"min-w-0 overflow-x-auto border-t border-hair\">\n <pre className=\"m-0 max-h-[28rem] min-w-max p-4 text-xs leading-5 text-foreground\">\n <code>\n <JsonSyntax text={JSON.stringify(props.summary, null, 2)} />\n </code>\n </pre>\n </div>\n </details>\n </section>\n );\n}\n\nfunction SectionHeader(props: { title: string; value: string }) {\n return (\n <div className=\"flex min-w-0 items-center justify-between gap-3\">\n <SectionLabel>{props.title}</SectionLabel>\n <span className=\"text-xs font-medium text-muted-foreground\">{props.value}</span>\n </div>\n );\n}\n\nfunction SectionLabel(props: { children: string }) {\n return (\n <h2 className=\"m-0 text-xs font-semibold uppercase tracking-[0.18em] text-muted-foreground\">\n {props.children}\n </h2>\n );\n}\n\nfunction StatusFact(props: { label: string; value: string | number }) {\n return (\n <div className=\"grid min-w-0 gap-1 border-b border-hair px-3 py-3 first:pt-3 last:border-b-0\">\n <span className=\"text-xs font-semibold uppercase tracking-[0.16em] text-muted-foreground\">\n {props.label}\n </span>\n <span className=\"min-w-0 truncate text-sm text-foreground\" title={String(props.value)}>\n {props.value}\n </span>\n </div>\n );\n}\n\nfunction StatusRow(props: { label: string; value: string | number; tone?: \"normal\" | \"muted\" }) {\n return (\n <div className=\"grid min-w-0 grid-cols-[minmax(120px,0.5fr)_minmax(0,1fr)] gap-3 border-b border-hair px-3 py-3 last:border-b-0\">\n <span className=\"min-w-0 truncate text-sm font-medium text-muted-foreground\">\n {props.label}\n </span>\n <span\n className={[\n \"min-w-0 truncate text-right text-sm font-semibold tabular-nums\",\n props.tone === \"muted\" ? \"text-muted-foreground\" : \"text-foreground\",\n ].join(\" \")}\n title={String(props.value)}\n >\n {props.value}\n </span>\n </div>\n );\n}\n\nfunction DashedNote(props: { text: string }) {\n return (\n <div className=\"border-y border-dashed border-hair px-3 py-8 text-center text-sm text-muted-foreground\">\n {props.text}\n </div>\n );\n}\n\nfunction humanizeKey(value: string): string {\n return value\n .replace(/([a-z])([A-Z])/g, \"$1 $2\")\n .replace(/[_-]+/g, \" \")\n .toLowerCase();\n}\n"],"mappings":"+QAcA,SAAgB,EAAW,EAA6B,CACtD,GAAM,CAAC,EAAS,IAAA,EAAc,EAAA,SAAA,CAA0C,EAClE,CAAC,EAAS,IAAA,EAAc,EAAA,SAAA,CAAS,EAAK,EACtC,CAAC,EAAO,IAAA,EAAY,EAAA,SAAA,CAAS,EAAE,EAE/B,GAAA,EAAa,EAAA,YAAA,CAAY,SAAY,CACzC,GAAI,CAAC,EAAM,QAAS,CAClB,EAAW,IAAA,EAAS,EACpB,MACF,CACA,EAAW,EAAI,EACf,EAAS,EAAE,EACX,GAAI,CACF,IAAM,EAAW,MAAM,MAAM,SAAS,EACtC,GAAI,CAAC,EAAS,GACZ,MAAU,MAAM,2BAA2B,EAAS,QAAQ,EAE9D,EAAY,MAAM,EAAS,KAAK,CAAyB,CAC3D,OAAS,EAAW,CAClB,EAAS,aAAqB,MAAQ,EAAU,QAAU,OAAO,CAAS,CAAC,EAC3E,EAAW,IAAA,EAAS,CACtB,QAAU,CACR,EAAW,EAAK,CAClB,CACF,EAAG,CAAC,EAAM,OAAO,CAAC,EAMlB,OAJA,EAAA,EAAA,UAAA,KAAgB,CACd,EAAgB,CAClB,EAAG,CAAC,CAAU,CAAC,GAGb,EAAA,EAAA,KAAA,CAAC,EAAD,CAAiB,UAAU,iCAAiC,aAAW,SAAvE,SAAA,EACE,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,MAAM,SACN,YAAY,qFACZ,QACE,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,gEAAf,SAAA,EACE,EAAA,EAAA,IAAA,CAAC,EAAD,CAAoB,MAAM,SAAS,MAAO,GAAS,OAAO,QAAU,CAAI,CAAA,GACxE,EAAA,EAAA,IAAA,CAAC,EAAD,CAAoB,MAAM,WAAW,MAAO,GAAS,OAAO,UAAY,GAAM,CAAA,GAC9E,EAAA,EAAA,IAAA,CAAC,EAAD,CAAoB,MAAM,SAAS,MAAO,GAAS,OAAO,QAAU,GAAM,CAAA,GAC1E,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,UAAU,sCACV,KAAK,SACL,QAAQ,YACR,SAAU,EACV,YAAe,KAAK,EAAW,EAChC,SAAA,SAEO,CAAA,CACL,GAER,CAAA,GAED,EAAA,EAAA,IAAA,CAAC,EAAD,CAAmB,UAAU,gBAC1B,SAAC,EAAM,QAKJ,GAAW,IAAY,IAAA,IACzB,EAAA,EAAA,IAAA,CAAC,EAAD,CAAkB,MAAM,iBAAiB,KAAK,yBAA2B,CAAA,EACvE,EAAM,OAAS,GACjB,EAAA,EAAA,IAAA,CAAC,EAAD,CAAkB,MAAM,eAAe,KAAM,CAAQ,CAAA,EACnD,IAAY,IAAA,GAAY,MAC1B,EAAA,EAAA,IAAA,CAAC,EAAD,CAA0B,SAAU,CAAA,GATpC,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,MAAM,qBACN,KAAK,4CACN,CAAA,CAQc,CAAA,CACJ,GAErB,CAEA,SAAS,EAAgB,EAAyC,CAEhE,IAAM,EADoB,OAAO,QAAQ,EAAM,QAAQ,YACxB,CAAA,CAAkB,QAC9C,EAAG,KAAgB,GAAY,UAAY,EAC9C,CAAC,CAAC,OAEF,OACE,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,sDAAf,SAAA,EACE,EAAA,EAAA,KAAA,CAAC,UAAD,CAAS,UAAU,kEAAnB,SAAA,EACE,EAAA,EAAA,IAAA,CAAC,EAAD,CAAgB,QAAS,EAAM,QAAiC,wBAAyB,CAAA,GACzF,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,4BAAf,SAAA,EACE,EAAA,EAAA,IAAA,CAAC,EAAD,CAAe,QAAS,EAAM,QAAQ,OAAU,CAAA,GAChD,EAAA,EAAA,IAAA,CAAC,EAAD,CAAc,OAAQ,EAAM,QAAQ,MAAS,CAAA,CAC1C,CACE,CAAA,CAAA,CACT,CAAA,GAAA,EAAA,EAAA,KAAA,CAAC,UAAD,CAAS,UAAU,8DAAnB,SAAA,EACE,EAAA,EAAA,IAAA,CAAC,EAAD,CAAkB,aAAc,EAAM,QAAQ,YAAe,CAAA,GAC7D,EAAA,EAAA,IAAA,CAAC,EAAD,CAAY,QAAS,EAAM,OAAU,CAAA,CAC9B,CACN,CAAA,CAAA,GAET,CAEA,SAAS,EAAe,EAAyE,CAC/F,OACE,EAAA,EAAA,KAAA,CAAC,UAAD,CAAS,UAAU,+FAAnB,SAAA,EACE,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,aAAf,SAAA,EACE,EAAA,EAAA,IAAA,CAAC,EAAD,CAAA,SAAc,SAAqB,CAAA,GACnC,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,4CAAf,SAAA,EACE,EAAA,EAAA,IAAA,CAAC,EAAD,CAAO,UAAU,uCAAuC,SAAA,QAAa,CAAA,GACrE,EAAA,EAAA,KAAA,CAAC,EAAD,CAAO,UAAU,kDAAjB,SAAA,CACG,EAAM,uBAAuB,eACzB,CACJ,CAAA,CAAA,CACF,CAAA,CAAA,CACL,CAAA,GAAA,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,4BAAf,SAAA,EACE,EAAA,EAAA,IAAA,CAAC,EAAD,CAAY,MAAM,KAAK,MAAO,EAAM,QAAQ,OAAO,EAAK,CAAA,GACxD,EAAA,EAAA,IAAA,CAAC,EAAD,CAAY,MAAM,OAAO,MAAO,EAAM,QAAQ,OAAO,MAAQ,GAAM,CAAA,GACnE,EAAA,EAAA,IAAA,CAAC,EAAD,CAAY,MAAM,UAAU,MAAO,EAAM,QAAQ,OAAO,SAAW,GAAM,CAAA,GACzE,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,MAAM,YACN,MAAO,GAAG,EAAmB,EAAM,QAAQ,WAAW,EAAE,KAAK,EAAM,QAAQ,aAC5E,CAAA,CACE,CACE,CAAA,CAAA,GAEb,CAEA,SAAS,EAAc,EAAoD,CACzE,IAAM,EAAU,OAAO,QAAQ,EAAM,OAAO,EAC5C,OACE,EAAA,EAAA,KAAA,CAAC,UAAD,CAAS,UAAU,2BAAnB,SAAA,EACE,EAAA,EAAA,IAAA,CAAC,EAAD,CAAe,MAAM,UAAU,MAAO,GAAG,EAAQ,OAAO,UAAa,CAAA,EACpE,EAAQ,SAAW,GAClB,EAAA,EAAA,IAAA,CAAC,EAAD,CAAY,KAAK,+BAAiC,CAAA,GAElD,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAU,4BACZ,SAAA,EAAQ,KAAK,CAAC,EAAK,MAClB,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,MAAO,EAAY,CAAG,EACtB,MAAO,GAAS,IAEhB,KAAM,IAAU,IAAA,GAAY,QAAU,QACvC,EAFM,CAEN,CACF,CACE,CAAA,CAEA,GAEb,CAEA,SAAS,EAAa,EAAkD,CACtE,IAAM,EAAU,OAAO,QAAQ,EAAM,MAAM,CAAC,CAAC,OAAQ,GAC5C,OAAO,EAAM,IAAO,QAC5B,EACD,OACE,EAAA,EAAA,KAAA,CAAC,UAAD,CAAS,UAAU,2BAAnB,SAAA,EACE,EAAA,EAAA,IAAA,CAAC,EAAD,CAAe,MAAM,UAAU,MAAO,GAAG,EAAQ,OAAO,UAAa,CAAA,GACrE,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAU,4BACZ,SAAA,EAAQ,KAAK,CAAC,EAAK,MAClB,EAAA,EAAA,IAAA,CAAC,EAAD,CAAW,MAAO,EAAY,CAAG,EAAU,OAAkB,EAAN,CAAM,CAC9D,CACE,CAAA,CACE,GAEb,CAEA,SAAS,EAAiB,EAA8D,CACtF,IAAM,EAAU,OAAO,QAAQ,EAAM,YAAY,EACjD,OACE,EAAA,EAAA,KAAA,CAAC,UAAD,CAAS,UAAU,2BAAnB,SAAA,EACE,EAAA,EAAA,IAAA,CAAC,EAAD,CAAe,MAAM,eAAe,MAAO,GAAG,EAAQ,OAAO,UAAa,CAAA,EACzE,EAAQ,SAAW,GAClB,EAAA,EAAA,IAAA,CAAC,EAAD,CAAY,KAAK,2BAA6B,CAAA,GAE9C,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAU,sEACZ,SAAA,EAAQ,KAAK,CAAC,EAAM,GAAa,KAChC,EAAA,EAAA,KAAA,CAAC,MAAD,CACE,UAAW,CACT,oDACA,GAAS,EAAQ,QAAU,EAAQ,OAAS,GAAM,EAAI,EAAI,GAAK,gBAAkB,EACnF,CAAC,CAAC,KAAK,GAAG,EAJZ,SAAA,EAOE,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,kDAAf,SAAA,EACE,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,UAAU,yDACb,SAAA,EAAY,CAAI,CACb,CAAA,GACN,EAAA,EAAA,IAAA,CAAC,OAAD,CACE,UACE,GAAY,QACR,sCACA,4CAGL,SAAA,GAAY,QAAU,UAAY,UAC/B,CAAA,CACH,CACJ,CAAA,EAAA,GAAY,SAAW,IAAA,GAAY,MAClC,EAAA,EAAA,IAAA,CAAC,IAAD,CAAG,UAAU,8CAA+C,SAAA,EAAW,MAAU,CAAA,CAEhF,CAnBE,EAAA,CAmBF,CACN,CACE,CAAA,CAEA,GAEb,CAEA,SAAS,EAAW,EAAyC,CAC3D,OACE,EAAA,EAAA,KAAA,CAAC,UAAD,CAAS,UAAU,mCAAnB,SAAA,EACE,EAAA,EAAA,IAAA,CAAC,EAAD,CAAe,MAAM,cAAc,MAAM,MAAQ,CAAA,GACjD,EAAA,EAAA,KAAA,CAAC,UAAD,CAAS,UAAU,0DAA0D,KAAA,GAA7E,SAAA,EACE,EAAA,EAAA,KAAA,CAAC,UAAD,CAAS,UAAU,gLAAnB,SAAA,CAAmM,WAEjM,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,UAAU,4DAA4D,SAAA,MAAU,CAAA,GACtF,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,UAAU,mEAAmE,SAAA,MAE7E,CAAA,CACC,CACT,CAAA,GAAA,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAU,+CACb,UAAA,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAU,oEACb,UAAA,EAAA,EAAA,IAAA,CAAC,OAAD,CAAA,UACE,EAAA,EAAA,IAAA,CAAC,EAAD,CAAY,KAAM,KAAK,UAAU,EAAM,QAAS,KAAM,CAAC,CAAI,CAAA,CACvD,CAAA,CACH,CAAA,CACF,CAAA,CACE,CACF,CAAA,CAAA,GAEb,CAEA,SAAS,EAAc,EAAyC,CAC9D,OACE,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,kDAAf,SAAA,EACE,EAAA,EAAA,IAAA,CAAC,EAAD,CAAA,SAAe,EAAM,KAAoB,CAAA,GACzC,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,UAAU,4CAA6C,SAAA,EAAM,KAAY,CAAA,CAC5E,GAET,CAEA,SAAS,EAAa,EAA6B,CACjD,OACE,EAAA,EAAA,IAAA,CAAC,KAAD,CAAI,UAAU,8EACX,SAAA,EAAM,QACL,CAAA,CAER,CAEA,SAAS,EAAW,EAAkD,CACpE,OACE,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,+EAAf,SAAA,EACE,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,UAAU,0EACb,SAAA,EAAM,KACH,CAAA,GACN,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,UAAU,2CAA2C,MAAO,OAAO,EAAM,KAAK,EACjF,SAAA,EAAM,KACH,CAAA,CACH,GAET,CAEA,SAAS,EAAU,EAA6E,CAC9F,OACE,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,kHAAf,SAAA,EACE,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,UAAU,6DACb,SAAA,EAAM,KACH,CAAA,GACN,EAAA,EAAA,IAAA,CAAC,OAAD,CACE,UAAW,CACT,iEACA,EAAM,OAAS,QAAU,wBAA0B,iBACrD,CAAC,CAAC,KAAK,GAAG,EACV,MAAO,OAAO,EAAM,KAAK,EAExB,SAAA,EAAM,KACH,CAAA,CACH,GAET,CAEA,SAAS,EAAW,EAAyB,CAC3C,OACE,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAU,yFACZ,SAAA,EAAM,IACJ,CAAA,CAET,CAEA,SAAS,EAAY,EAAuB,CAC1C,OAAO,EACJ,QAAQ,kBAAmB,OAAO,CAAC,CACnC,QAAQ,SAAU,GAAG,CAAC,CACtB,YAAY,CACjB"}
1
+ {"version":3,"file":"status-page-CqmMMSo2.js","names":[],"sources":["../../../src/ui/app/modules/status/status-page.tsx"],"sourcesContent":["import { useCallback, useEffect, useState } from \"react\";\nimport type { StudioStatusSummary } from \"../../../../types\";\nimport { Badge } from \"../../components/ui/badge\";\nimport { Button } from \"../../components/ui/button\";\nimport {\n StudioEmptyState,\n StudioHeaderMetric,\n StudioPageContent,\n StudioPageHeader,\n StudioPageShell,\n} from \"../../components/ui/studio\";\nimport { formatRelativeTime } from \"../shared/format\";\nimport { JsonSyntax } from \"../shared/renderers\";\n\nexport function StatusPage(props: { enabled: boolean }) {\n const [summary, setSummary] = useState<StudioStatusSummary | undefined>();\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState(\"\");\n\n const loadStatus = useCallback(async () => {\n if (!props.enabled) {\n setSummary(undefined);\n return;\n }\n setLoading(true);\n setError(\"\");\n try {\n const response = await fetch(\"/status\");\n if (!response.ok) {\n throw new Error(`Status failed with HTTP ${response.status}`);\n }\n setSummary((await response.json()) as StudioStatusSummary);\n } catch (loadError) {\n setError(loadError instanceof Error ? loadError.message : String(loadError));\n setSummary(undefined);\n } finally {\n setLoading(false);\n }\n }, [props.enabled]);\n\n useEffect(() => {\n void loadStatus();\n }, [loadStatus]);\n\n return (\n <StudioPageShell className=\"grid-rows-[auto_minmax(0,1fr)]\" aria-label=\"Status\">\n <StudioPageHeader\n title=\"Status\"\n description=\"Runtime health, storage adapters, feature capabilities, and current record counts.\"\n action={\n <div className=\"flex min-w-0 flex-wrap justify-end gap-2 max-sm:justify-start\">\n <StudioHeaderMetric label=\"agents\" value={summary?.counts.agents ?? 0} />\n <StudioHeaderMetric label=\"sessions\" value={summary?.counts.sessions ?? \"-\"} />\n <StudioHeaderMetric label=\"traces\" value={summary?.counts.traces ?? \"-\"} />\n <Button\n className=\"h-8 min-h-8 rounded-md px-3 text-xs\"\n type=\"button\"\n variant=\"secondary\"\n disabled={loading}\n onClick={() => void loadStatus()}\n >\n Refresh\n </Button>\n </div>\n }\n />\n\n <StudioPageContent className=\"overflow-auto\">\n {!props.enabled ? (\n <StudioEmptyState\n title=\"Status unavailable\"\n text=\"This Studio runtime did not expose status.\"\n />\n ) : loading && summary === undefined ? (\n <StudioEmptyState title=\"Loading status\" text=\"Reading runtime status.\" />\n ) : error.length > 0 ? (\n <StudioEmptyState title=\"Status error\" text={error} />\n ) : summary === undefined ? null : (\n <StatusDashboard summary={summary} />\n )}\n </StudioPageContent>\n </StudioPageShell>\n );\n}\n\nfunction StatusDashboard(props: { summary: StudioStatusSummary }) {\n const capabilityEntries = Object.entries(props.summary.capabilities);\n const enabledCapabilityCount = capabilityEntries.filter(\n ([, capability]) => capability?.enabled === true,\n ).length;\n\n return (\n <div className=\"grid h-full min-h-0 gap-5 border-t border-hair pt-4\">\n <section className=\"grid gap-5 xl:grid-cols-[minmax(280px,0.58fr)_minmax(0,1.42fr)]\">\n <RuntimeSummary summary={props.summary} enabledCapabilityCount={enabledCapabilityCount} />\n <div className=\"grid gap-5 lg:grid-cols-2\">\n <StorageMatrix storage={props.summary.storage} />\n <CountsLedger counts={props.summary.counts} />\n </div>\n </section>\n <section className=\"grid gap-5 xl:grid-cols-[minmax(0,1.05fr)_minmax(0,0.95fr)]\">\n <CapabilityLedger capabilities={props.summary.capabilities} />\n <RawSummary summary={props.summary} />\n </section>\n </div>\n );\n}\n\nfunction RuntimeSummary(props: { summary: StudioStatusSummary; enabledCapabilityCount: number }) {\n return (\n <section className=\"grid content-start gap-5 border-b border-hair pb-5 xl:border-b-0 xl:border-r xl:pb-0 xl:pr-5\">\n <div className=\"grid gap-3\">\n <SectionLabel>runtime</SectionLabel>\n <div className=\"flex min-w-0 flex-wrap items-center gap-2\">\n <Badge className=\"border-hair bg-muted text-foreground\">online</Badge>\n <Badge className=\"border-hair bg-background text-muted-foreground\">\n {props.enabledCapabilityCount} capabilities\n </Badge>\n </div>\n </div>\n <div className=\"grid border-y border-hair\">\n <StatusFact label=\"id\" value={props.summary.runner.id} />\n <StatusFact label=\"name\" value={props.summary.runner.name ?? \"-\"} />\n <StatusFact label=\"version\" value={props.summary.runner.version ?? \"-\"} />\n <StatusFact\n label=\"generated\"\n value={`${formatRelativeTime(props.summary.generatedAt)} / ${props.summary.generatedAt}`}\n />\n </div>\n </section>\n );\n}\n\nfunction StorageMatrix(props: { storage: StudioStatusSummary[\"storage\"] }) {\n const entries = Object.entries(props.storage);\n return (\n <section className=\"grid content-start gap-3\">\n <SectionHeader title=\"storage\" value={`${entries.length} adapters`} />\n {entries.length === 0 ? (\n <DashedNote text=\"No storage adapters reported.\" />\n ) : (\n <div className=\"grid border-y border-hair\">\n {entries.map(([key, value]) => (\n <StatusRow\n label={humanizeKey(key)}\n value={value ?? \"-\"}\n key={key}\n tone={value === undefined ? \"muted\" : \"normal\"}\n />\n ))}\n </div>\n )}\n </section>\n );\n}\n\nfunction CountsLedger(props: { counts: StudioStatusSummary[\"counts\"] }) {\n const entries = Object.entries(props.counts).filter((entry): entry is [string, number] => {\n return typeof entry[1] === \"number\";\n });\n return (\n <section className=\"grid content-start gap-3\">\n <SectionHeader title=\"records\" value={`${entries.length} counters`} />\n <div className=\"grid border-y border-hair\">\n {entries.map(([key, value]) => (\n <StatusRow label={humanizeKey(key)} value={value} key={key} />\n ))}\n </div>\n </section>\n );\n}\n\nfunction CapabilityLedger(props: { capabilities: StudioStatusSummary[\"capabilities\"] }) {\n const entries = Object.entries(props.capabilities);\n return (\n <section className=\"grid content-start gap-3\">\n <SectionHeader title=\"capabilities\" value={`${entries.length} reported`} />\n {entries.length === 0 ? (\n <DashedNote text=\"No capabilities reported.\" />\n ) : (\n <div className=\"grid border-y border-hair sm:grid-cols-2 sm:divide-x sm:divide-hair\">\n {entries.map(([name, capability], index) => (\n <div\n className={[\n \"grid min-w-0 gap-1 border-b border-hair px-3 py-3\",\n index >= entries.length - (entries.length % 2 === 0 ? 2 : 1) ? \"sm:border-b-0\" : \"\",\n ].join(\" \")}\n key={name}\n >\n <div className=\"flex min-w-0 items-center justify-between gap-3\">\n <span className=\"min-w-0 truncate text-sm font-semibold text-foreground\">\n {humanizeKey(name)}\n </span>\n <span\n className={\n capability?.enabled\n ? \"text-xs font-medium text-foreground\"\n : \"text-xs font-medium text-muted-foreground\"\n }\n >\n {capability?.enabled ? \"enabled\" : \"disabled\"}\n </span>\n </div>\n {capability?.reason === undefined ? null : (\n <p className=\"m-0 text-xs leading-5 text-muted-foreground\">{capability.reason}</p>\n )}\n </div>\n ))}\n </div>\n )}\n </section>\n );\n}\n\nfunction RawSummary(props: { summary: StudioStatusSummary }) {\n return (\n <section className=\"grid min-w-0 content-start gap-3\">\n <SectionHeader title=\"raw summary\" value=\"JSON\" />\n <details className=\"group grid min-w-0 overflow-hidden border-y border-hair\" open>\n <summary className=\"flex min-h-11 cursor-pointer list-none items-center justify-between gap-3 bg-muted px-3 text-xs font-semibold uppercase tracking-[0.16em] text-muted-foreground marker:hidden\">\n Payload\n <span className=\"font-medium normal-case tracking-normal group-open:hidden\">Show</span>\n <span className=\"hidden font-medium normal-case tracking-normal group-open:inline\">\n Hide\n </span>\n </summary>\n <div className=\"min-w-0 overflow-x-auto border-t border-hair\">\n <pre className=\"m-0 max-h-[28rem] min-w-max p-4 text-xs leading-5 text-foreground\">\n <code>\n <JsonSyntax text={JSON.stringify(props.summary, null, 2)} />\n </code>\n </pre>\n </div>\n </details>\n </section>\n );\n}\n\nfunction SectionHeader(props: { title: string; value: string }) {\n return (\n <div className=\"flex min-w-0 items-center justify-between gap-3\">\n <SectionLabel>{props.title}</SectionLabel>\n <span className=\"text-xs font-medium text-muted-foreground\">{props.value}</span>\n </div>\n );\n}\n\nfunction SectionLabel(props: { children: string }) {\n return (\n <h2 className=\"m-0 text-xs font-semibold uppercase tracking-[0.18em] text-muted-foreground\">\n {props.children}\n </h2>\n );\n}\n\nfunction StatusFact(props: { label: string; value: string | number }) {\n return (\n <div className=\"grid min-w-0 gap-1 border-b border-hair px-3 py-3 first:pt-3 last:border-b-0\">\n <span className=\"text-xs font-semibold uppercase tracking-[0.16em] text-muted-foreground\">\n {props.label}\n </span>\n <span className=\"min-w-0 truncate text-sm text-foreground\" title={String(props.value)}>\n {props.value}\n </span>\n </div>\n );\n}\n\nfunction StatusRow(props: { label: string; value: string | number; tone?: \"normal\" | \"muted\" }) {\n return (\n <div className=\"grid min-w-0 grid-cols-[minmax(120px,0.5fr)_minmax(0,1fr)] gap-3 border-b border-hair px-3 py-3 last:border-b-0\">\n <span className=\"min-w-0 truncate text-sm font-medium text-muted-foreground\">\n {props.label}\n </span>\n <span\n className={[\n \"min-w-0 truncate text-right text-sm font-semibold tabular-nums\",\n props.tone === \"muted\" ? \"text-muted-foreground\" : \"text-foreground\",\n ].join(\" \")}\n title={String(props.value)}\n >\n {props.value}\n </span>\n </div>\n );\n}\n\nfunction DashedNote(props: { text: string }) {\n return (\n <div className=\"border-y border-dashed border-hair px-3 py-8 text-center text-sm text-muted-foreground\">\n {props.text}\n </div>\n );\n}\n\nfunction humanizeKey(value: string): string {\n return value\n .replace(/([a-z])([A-Z])/g, \"$1 $2\")\n .replace(/[_-]+/g, \" \")\n .toLowerCase();\n}\n"],"mappings":"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"}