@anvia/studio 0.7.4 → 0.7.5
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/dist/index.d.ts +17 -1
- package/dist/index.js +66 -12
- package/dist/index.js.map +1 -1
- package/dist/ui/assets/PathIcon-DX1w_Nk9.js +2 -0
- package/dist/ui/assets/PathIcon-DX1w_Nk9.js.map +1 -0
- package/dist/ui/assets/PlayIcon-Culan3xL.js +2 -0
- package/dist/ui/assets/PlayIcon-Culan3xL.js.map +1 -0
- package/dist/ui/assets/RefreshIcon-B3w42HZJ.js +2 -0
- package/dist/ui/assets/RefreshIcon-B3w42HZJ.js.map +1 -0
- package/dist/ui/assets/agents-page-B8Tw2e11.js +2 -0
- package/dist/ui/assets/agents-page-B8Tw2e11.js.map +1 -0
- package/dist/ui/assets/badge-BH7gz3tB.js +2 -0
- package/dist/ui/assets/badge-BH7gz3tB.js.map +1 -0
- package/dist/ui/assets/evals-page-ClfscpGe.js +2 -0
- package/dist/ui/assets/evals-page-ClfscpGe.js.map +1 -0
- package/dist/ui/assets/format-C9HPGfkW.js +2 -0
- package/dist/ui/assets/format-C9HPGfkW.js.map +1 -0
- package/dist/ui/assets/index-C3lio5tU.css +1 -0
- package/dist/ui/assets/index-COJ_MozM.js +54 -0
- package/dist/ui/assets/index-COJ_MozM.js.map +1 -0
- package/dist/ui/assets/knowledge-page-Dt81OgNg.js +2 -0
- package/dist/ui/assets/knowledge-page-Dt81OgNg.js.map +1 -0
- package/dist/ui/assets/mcps-page-Bm4k-j7D.js +2 -0
- package/dist/ui/assets/mcps-page-Bm4k-j7D.js.map +1 -0
- package/dist/ui/assets/memory-page-CxinVNJm.js +2 -0
- package/dist/ui/assets/memory-page-CxinVNJm.js.map +1 -0
- package/dist/ui/assets/pipelines-page-CIAhfO0w.js +8 -0
- package/dist/ui/assets/{pipelines-page-B1kaAtRn.js.map → pipelines-page-CIAhfO0w.js.map} +1 -1
- package/dist/ui/assets/{renderers-BsGl9Gjx.js → renderers-CIC1VVRv.js} +3 -3
- package/dist/ui/assets/{renderers-BsGl9Gjx.js.map → renderers-CIC1VVRv.js.map} +1 -1
- package/dist/ui/assets/sessions-page-DqKjZ6zC.js +2 -0
- package/dist/ui/assets/sessions-page-DqKjZ6zC.js.map +1 -0
- package/dist/ui/assets/status-page-N-P1HQHB.js +2 -0
- package/dist/ui/assets/status-page-N-P1HQHB.js.map +1 -0
- package/dist/ui/assets/tools-page-B0Y9wa_k.js +2 -0
- package/dist/ui/assets/tools-page-B0Y9wa_k.js.map +1 -0
- package/dist/ui/assets/trace-browser-BRkv3nwQ.js +10 -0
- package/dist/ui/assets/trace-browser-BRkv3nwQ.js.map +1 -0
- package/dist/ui/assets/transcript-item-goNEUTqW.js +3 -0
- package/dist/ui/assets/transcript-item-goNEUTqW.js.map +1 -0
- package/dist/ui/index.html +3 -2
- package/package.json +3 -2
- package/dist/ui/assets/ArrowClockwise.es-BRsjq4nG.js +0 -2
- package/dist/ui/assets/ArrowClockwise.es-BRsjq4nG.js.map +0 -1
- package/dist/ui/assets/Path.es-BUWhvlO4.js +0 -2
- package/dist/ui/assets/Path.es-BUWhvlO4.js.map +0 -1
- package/dist/ui/assets/Play.es-BMj9mcZd.js +0 -2
- package/dist/ui/assets/Play.es-BMj9mcZd.js.map +0 -1
- package/dist/ui/assets/agents-page-Cs0-55-x.js +0 -2
- package/dist/ui/assets/agents-page-Cs0-55-x.js.map +0 -1
- package/dist/ui/assets/badge-Bqf5Z3q8.js +0 -2
- package/dist/ui/assets/badge-Bqf5Z3q8.js.map +0 -1
- package/dist/ui/assets/evals-page-CEsOQH1F.js +0 -2
- package/dist/ui/assets/evals-page-CEsOQH1F.js.map +0 -1
- package/dist/ui/assets/index-CISgSi9m.js +0 -54
- package/dist/ui/assets/index-CISgSi9m.js.map +0 -1
- package/dist/ui/assets/index-DZcBJXlw.css +0 -1
- package/dist/ui/assets/knowledge-page-DkuuWYwn.js +0 -2
- package/dist/ui/assets/knowledge-page-DkuuWYwn.js.map +0 -1
- package/dist/ui/assets/mcps-page-Cg44hTqs.js +0 -2
- package/dist/ui/assets/mcps-page-Cg44hTqs.js.map +0 -1
- package/dist/ui/assets/memory-page-CSfAtDIq.js +0 -2
- package/dist/ui/assets/memory-page-CSfAtDIq.js.map +0 -1
- package/dist/ui/assets/pipelines-page-B1kaAtRn.js +0 -8
- package/dist/ui/assets/sessions-page-BC0CO7NX.js +0 -2
- package/dist/ui/assets/sessions-page-BC0CO7NX.js.map +0 -1
- package/dist/ui/assets/status-page-BRktao-I.js +0 -2
- package/dist/ui/assets/status-page-BRktao-I.js.map +0 -1
- package/dist/ui/assets/tools-page-FH6kc45U.js +0 -2
- package/dist/ui/assets/tools-page-FH6kc45U.js.map +0 -1
- package/dist/ui/assets/trace-browser-KsF4pJ1E.js +0 -10
- package/dist/ui/assets/trace-browser-KsF4pJ1E.js.map +0 -1
- package/dist/ui/assets/transcript-item-BwOv5UHH.js +0 -3
- package/dist/ui/assets/transcript-item-BwOv5UHH.js.map +0 -1
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{i as e,r as t,s as n,t as r}from"./utils-BN2yP0LH.js";import{t as i}from"./badge-Bqf5Z3q8.js";var a=n(e(),1),o=t();function s(e){let[t,n]=(0,a.useState)({});return(0,a.useEffect)(()=>{let t=!1;async function r(){let r=await Promise.all(e.agents.map(async e=>{try{let t=await fetch(`/agents/${encodeURIComponent(e.id)}/runtime`);return t.ok?[e.id,await t.json()]:[e.id,void 0]}catch{return[e.id,void 0]}}));t||n(Object.fromEntries(r))}return r(),()=>{t=!0}},[e.agents]),(0,o.jsxs)(`section`,{className:`grid min-h-0 grid-rows-[auto_minmax(0,1fr)] overflow-hidden bg-background/55`,"aria-label":`Agents`,children:[(0,o.jsx)(`header`,{className:`bg-background/70 pb-5 pl-0 pr-6 pt-0 backdrop-blur`,children:(0,o.jsx)(`div`,{className:`grid w-full grid-cols-[minmax(0,1fr)_auto] items-end gap-4 max-md:grid-cols-1`,children:(0,o.jsxs)(`div`,{className:`grid min-w-0 gap-2`,children:[(0,o.jsx)(`div`,{className:`font-mono text-[10px] font-semibold uppercase tracking-[0.24em] text-primary`,children:`Studio registry`}),(0,o.jsx)(`h1`,{className:`m-0 text-2xl font-semibold leading-none tracking-tight text-foreground`,children:`Studio`}),(0,o.jsx)(`p`,{className:`m-0 max-w-[62ch] text-sm leading-6 text-muted-foreground`,children:`Registered agents, operational prompts, and runtime metadata for Studio agents.`})]})})}),(0,o.jsx)(`div`,{className:`min-h-0 overflow-auto pb-6 pl-0 pr-6`,children:(0,o.jsx)(`div`,{className:`grid w-full gap-4`,children:e.agents.length===0?(0,o.jsx)(`div`,{className:`grid min-h-80 place-items-center rounded-xl border border-dashed border-border/80 bg-card/35 px-6 text-center`,children:(0,o.jsxs)(`div`,{className:`grid max-w-md gap-2`,children:[(0,o.jsx)(`h2`,{className:`m-0 text-base font-semibold text-foreground`,children:`No agents`}),(0,o.jsx)(`p`,{className:`m-0 text-sm leading-6 text-muted-foreground`,children:`Studio has no registered agents to inspect.`})]})}):(0,o.jsx)(`div`,{className:`grid gap-4`,children:e.agents.map(n=>(0,o.jsx)(c,{agent:n,runtime:t[n.id],active:n.id===e.selectedAgentId},n.id))})})})]})}function c(e){let t=p(e.agent.metadata),n=e.runtime;return(0,o.jsx)(`article`,{className:r(`grid overflow-hidden rounded-xl border border-border/80 bg-card/45 p-2 shadow-sm transition duration-200 hover:border-border hover:bg-card/60`,e.active&&`border-primary/35 bg-card/70 shadow-[inset_0_1px_0_hsl(0_0%_100%_/_0.08)]`),children:(0,o.jsxs)(`div`,{className:`grid gap-2 xl:grid-cols-[minmax(280px,0.72fr)_minmax(0,1fr)_minmax(280px,0.7fr)]`,children:[(0,o.jsxs)(`section`,{className:`grid content-between gap-8 rounded-lg bg-background/35 p-5`,children:[(0,o.jsxs)(`div`,{className:`grid gap-3`,children:[(0,o.jsxs)(`div`,{className:`flex min-w-0 items-center justify-between gap-3`,children:[(0,o.jsx)(i,{className:r(`border-border/80 bg-muted/45 text-muted-foreground`,e.active&&`border-primary/35 bg-primary/10 text-primary`),children:e.active?`selected`:`agent`}),(0,o.jsxs)(`span`,{className:`font-mono text-[10px] font-semibold uppercase tracking-[0.18em] text-muted-foreground`,children:[e.agent.quickPrompts.length,` prompts`]})]}),(0,o.jsxs)(`div`,{className:`grid gap-2`,children:[(0,o.jsx)(`h2`,{className:`m-0 text-xl font-semibold leading-tight tracking-tight text-foreground text-balance`,children:e.agent.name??e.agent.id}),(0,o.jsx)(`span`,{className:`min-w-0 break-all font-mono text-xs font-medium leading-5 text-muted-foreground`,children:e.agent.id})]})]}),(0,o.jsx)(`div`,{className:`h-px w-20 bg-primary/55`})]}),(0,o.jsxs)(`section`,{className:`grid content-start gap-5 rounded-lg bg-background/35 p-5`,children:[(0,o.jsxs)(`div`,{className:`grid gap-2`,children:[(0,o.jsx)(f,{children:`description`}),(0,o.jsx)(`p`,{className:`m-0 max-w-[72ch] text-sm leading-6 text-muted-foreground`,children:e.agent.description??`No description`})]}),(0,o.jsxs)(`div`,{className:`grid gap-2`,children:[(0,o.jsx)(f,{children:`quick prompts`}),e.agent.quickPrompts.length===0?(0,o.jsx)(`div`,{className:`rounded-lg border border-dashed border-border/80 bg-background/45 px-3 py-2 text-sm text-muted-foreground`,children:`None configured`}):(0,o.jsx)(`div`,{className:`grid gap-2`,children:e.agent.quickPrompts.map((e,t)=>(0,o.jsxs)(`div`,{className:`grid grid-cols-[28px_minmax(0,1fr)] gap-3 rounded-lg border border-border/70 bg-background/45 px-3 py-2 text-sm leading-6 text-foreground`,children:[(0,o.jsx)(`span`,{className:`font-mono text-[11px] font-semibold text-muted-foreground`,children:String(t+1).padStart(2,`0`)}),(0,o.jsx)(`span`,{className:`min-w-0 [overflow-wrap:anywhere]`,children:e})]},e))})]})]}),(0,o.jsxs)(`section`,{className:`grid content-start gap-3 rounded-lg bg-background/35 p-5`,children:[(0,o.jsx)(f,{children:`runtime`}),n===void 0?(0,o.jsx)(`div`,{className:`rounded-lg border border-dashed border-border/80 bg-background/45 px-3 py-2 text-sm text-muted-foreground`,children:`Runtime summary unavailable`}):(0,o.jsxs)(`div`,{className:`grid gap-3`,children:[(0,o.jsxs)(`div`,{className:`grid grid-cols-2 gap-2`,children:[(0,o.jsx)(d,{label:`tools`,value:n.toolCount}),(0,o.jsx)(d,{label:`mcp`,value:n.mcpToolCount}),(0,o.jsx)(d,{label:`context`,value:n.staticContextCount+n.dynamicContextCount}),(0,o.jsx)(d,{label:`observers`,value:n.observerCount})]}),(0,o.jsxs)(`div`,{className:`flex min-w-0 flex-wrap gap-2`,children:[(0,o.jsx)(i,{className:n.hasMemory?l:u,children:`memory`}),(0,o.jsx)(i,{className:n.hasHook?l:u,children:`hook`}),(0,o.jsx)(i,{className:n.hasOutputSchema?l:u,children:`output schema`}),n.defaultMaxTurns===void 0?null:(0,o.jsxs)(i,{className:`border-border/80 bg-muted/55 text-muted-foreground`,children:[n.defaultMaxTurns,` turns`]})]}),n.model===void 0?null:(0,o.jsxs)(`div`,{className:`grid min-w-0 gap-1 rounded-lg bg-muted/20 px-3 py-2 text-sm`,children:[(0,o.jsx)(`span`,{className:`font-mono text-[10px] font-semibold uppercase tracking-[0.18em] text-muted-foreground`,children:`model`}),(0,o.jsx)(`span`,{className:`min-w-0 truncate font-mono text-xs text-foreground`,title:m(n.model),children:m(n.model)})]})]}),(0,o.jsx)(f,{children:`metadata`}),t.length===0?(0,o.jsx)(`div`,{className:`rounded-lg border border-dashed border-border/80 bg-background/45 px-3 py-2 text-sm text-muted-foreground`,children:`None`}):(0,o.jsx)(`div`,{className:`grid gap-1`,children:t.map(([e,t])=>(0,o.jsxs)(`div`,{className:`grid min-w-0 grid-cols-[minmax(110px,0.75fr)_minmax(0,1fr)] gap-3 rounded-lg bg-muted/20 px-3 py-2 text-sm`,children:[(0,o.jsx)(`span`,{className:`min-w-0 truncate font-medium text-muted-foreground`,title:e,children:e}),(0,o.jsx)(`span`,{className:`min-w-0 truncate font-mono text-xs text-foreground`,title:m(t),children:m(t)})]},e))})]})]})})}var l=`border-primary/35 bg-primary/10 text-primary`,u=`border-border/80 bg-muted/55 text-muted-foreground`;function d(e){return(0,o.jsxs)(`div`,{className:`grid gap-1 rounded-lg bg-muted/20 px-3 py-2`,children:[(0,o.jsx)(`span`,{className:`font-mono text-[10px] font-semibold uppercase tracking-[0.18em] text-muted-foreground`,children:e.label}),(0,o.jsx)(`span`,{className:`font-mono text-lg font-semibold text-foreground`,children:e.value})]})}function f(e){return(0,o.jsx)(`h3`,{className:`m-0 font-mono text-[10px] font-semibold uppercase tracking-[0.2em] text-muted-foreground`,children:e.children})}function p(e){return e===void 0?[]:Object.entries(e)}function m(e){return e===null?`null`:typeof e==`string`||typeof e==`number`||typeof e==`boolean`?String(e):Array.isArray(e)?`[${e.length}]`:typeof e==`object`?`{...}`:``}export{s as AgentsPage};
|
|
2
|
-
//# sourceMappingURL=agents-page-Cs0-55-x.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"agents-page-Cs0-55-x.js","names":[],"sources":["../../../src/ui/app/modules/agents/agents-page.tsx"],"sourcesContent":["import { useEffect, useState } from \"react\";\nimport type { StudioAgentRuntimeSummary, StudioConfig } from \"../../../../types\";\nimport { Badge } from \"../../components/ui/badge\";\nimport { cn } from \"../../lib/utils\";\n\nexport function AgentsPage(props: { agents: StudioConfig[\"agents\"]; selectedAgentId: string }) {\n const [runtimeByAgentId, setRuntimeByAgentId] = useState<\n Record<string, StudioAgentRuntimeSummary | undefined>\n >({});\n\n useEffect(() => {\n let cancelled = false;\n async function loadRuntimeSummaries() {\n const entries = await Promise.all(\n props.agents.map(async (agent) => {\n try {\n const response = await fetch(`/agents/${encodeURIComponent(agent.id)}/runtime`);\n if (!response.ok) {\n return [agent.id, undefined] as const;\n }\n return [agent.id, (await response.json()) as StudioAgentRuntimeSummary] as const;\n } catch {\n return [agent.id, undefined] as const;\n }\n }),\n );\n if (!cancelled) {\n setRuntimeByAgentId(Object.fromEntries(entries));\n }\n }\n void loadRuntimeSummaries();\n return () => {\n cancelled = true;\n };\n }, [props.agents]);\n\n return (\n <section\n className=\"grid min-h-0 grid-rows-[auto_minmax(0,1fr)] overflow-hidden bg-background/55\"\n aria-label=\"Agents\"\n >\n <header className=\"bg-background/70 pb-5 pl-0 pr-6 pt-0 backdrop-blur\">\n <div className=\"grid w-full grid-cols-[minmax(0,1fr)_auto] items-end gap-4 max-md:grid-cols-1\">\n <div className=\"grid min-w-0 gap-2\">\n <div className=\"font-mono text-[10px] font-semibold uppercase tracking-[0.24em] text-primary\">\n Studio registry\n </div>\n <h1 className=\"m-0 text-2xl font-semibold leading-none tracking-tight text-foreground\">\n Studio\n </h1>\n <p className=\"m-0 max-w-[62ch] text-sm leading-6 text-muted-foreground\">\n Registered agents, operational prompts, and runtime metadata for Studio agents.\n </p>\n </div>\n </div>\n </header>\n\n <div className=\"min-h-0 overflow-auto pb-6 pl-0 pr-6\">\n <div className=\"grid w-full gap-4\">\n {props.agents.length === 0 ? (\n <div className=\"grid min-h-80 place-items-center rounded-xl border border-dashed border-border/80 bg-card/35 px-6 text-center\">\n <div className=\"grid max-w-md gap-2\">\n <h2 className=\"m-0 text-base font-semibold text-foreground\">No agents</h2>\n <p className=\"m-0 text-sm leading-6 text-muted-foreground\">\n Studio has no registered agents to inspect.\n </p>\n </div>\n </div>\n ) : (\n <div className=\"grid gap-4\">\n {props.agents.map((agent) => (\n <AgentDossier\n agent={agent}\n runtime={runtimeByAgentId[agent.id]}\n active={agent.id === props.selectedAgentId}\n key={agent.id}\n />\n ))}\n </div>\n )}\n </div>\n </div>\n </section>\n );\n}\n\nfunction AgentDossier(props: {\n agent: StudioConfig[\"agents\"][number];\n runtime: StudioAgentRuntimeSummary | undefined;\n active: boolean;\n}) {\n const metadata = metadataEntries(props.agent.metadata);\n const runtime = props.runtime;\n\n return (\n <article\n className={cn(\n \"grid overflow-hidden rounded-xl border border-border/80 bg-card/45 p-2 shadow-sm transition duration-200 hover:border-border hover:bg-card/60\",\n props.active && \"border-primary/35 bg-card/70 shadow-[inset_0_1px_0_hsl(0_0%_100%_/_0.08)]\",\n )}\n >\n <div className=\"grid gap-2 xl:grid-cols-[minmax(280px,0.72fr)_minmax(0,1fr)_minmax(280px,0.7fr)]\">\n <section className=\"grid content-between gap-8 rounded-lg bg-background/35 p-5\">\n <div className=\"grid gap-3\">\n <div className=\"flex min-w-0 items-center justify-between gap-3\">\n <Badge\n className={cn(\n \"border-border/80 bg-muted/45 text-muted-foreground\",\n props.active && \"border-primary/35 bg-primary/10 text-primary\",\n )}\n >\n {props.active ? \"selected\" : \"agent\"}\n </Badge>\n <span className=\"font-mono text-[10px] font-semibold uppercase tracking-[0.18em] text-muted-foreground\">\n {props.agent.quickPrompts.length} prompts\n </span>\n </div>\n <div className=\"grid gap-2\">\n <h2 className=\"m-0 text-xl font-semibold leading-tight tracking-tight text-foreground text-balance\">\n {props.agent.name ?? props.agent.id}\n </h2>\n <span className=\"min-w-0 break-all font-mono text-xs font-medium leading-5 text-muted-foreground\">\n {props.agent.id}\n </span>\n </div>\n </div>\n <div className=\"h-px w-20 bg-primary/55\" />\n </section>\n\n <section className=\"grid content-start gap-5 rounded-lg bg-background/35 p-5\">\n <div className=\"grid gap-2\">\n <SectionLabel>description</SectionLabel>\n <p className=\"m-0 max-w-[72ch] text-sm leading-6 text-muted-foreground\">\n {props.agent.description ?? \"No description\"}\n </p>\n </div>\n <div className=\"grid gap-2\">\n <SectionLabel>quick prompts</SectionLabel>\n {props.agent.quickPrompts.length === 0 ? (\n <div className=\"rounded-lg border border-dashed border-border/80 bg-background/45 px-3 py-2 text-sm text-muted-foreground\">\n None configured\n </div>\n ) : (\n <div className=\"grid gap-2\">\n {props.agent.quickPrompts.map((prompt, index) => (\n <div\n className=\"grid grid-cols-[28px_minmax(0,1fr)] gap-3 rounded-lg border border-border/70 bg-background/45 px-3 py-2 text-sm leading-6 text-foreground\"\n key={prompt}\n >\n <span className=\"font-mono text-[11px] font-semibold text-muted-foreground\">\n {String(index + 1).padStart(2, \"0\")}\n </span>\n <span className=\"min-w-0 [overflow-wrap:anywhere]\">{prompt}</span>\n </div>\n ))}\n </div>\n )}\n </div>\n </section>\n\n <section className=\"grid content-start gap-3 rounded-lg bg-background/35 p-5\">\n <SectionLabel>runtime</SectionLabel>\n {runtime === undefined ? (\n <div className=\"rounded-lg border border-dashed border-border/80 bg-background/45 px-3 py-2 text-sm text-muted-foreground\">\n Runtime summary unavailable\n </div>\n ) : (\n <div className=\"grid gap-3\">\n <div className=\"grid grid-cols-2 gap-2\">\n <RuntimeMetric label=\"tools\" value={runtime.toolCount} />\n <RuntimeMetric label=\"mcp\" value={runtime.mcpToolCount} />\n <RuntimeMetric\n label=\"context\"\n value={runtime.staticContextCount + runtime.dynamicContextCount}\n />\n <RuntimeMetric label=\"observers\" value={runtime.observerCount} />\n </div>\n <div className=\"flex min-w-0 flex-wrap gap-2\">\n <Badge className={runtime.hasMemory ? enabledBadge : disabledBadge}>memory</Badge>\n <Badge className={runtime.hasHook ? enabledBadge : disabledBadge}>hook</Badge>\n <Badge className={runtime.hasOutputSchema ? enabledBadge : disabledBadge}>\n output schema\n </Badge>\n {runtime.defaultMaxTurns === undefined ? null : (\n <Badge className=\"border-border/80 bg-muted/55 text-muted-foreground\">\n {runtime.defaultMaxTurns} turns\n </Badge>\n )}\n </div>\n {runtime.model === undefined ? null : (\n <div className=\"grid min-w-0 gap-1 rounded-lg bg-muted/20 px-3 py-2 text-sm\">\n <span className=\"font-mono text-[10px] font-semibold uppercase tracking-[0.18em] text-muted-foreground\">\n model\n </span>\n <span\n className=\"min-w-0 truncate font-mono text-xs text-foreground\"\n title={formatMetadataValue(runtime.model)}\n >\n {formatMetadataValue(runtime.model)}\n </span>\n </div>\n )}\n </div>\n )}\n\n <SectionLabel>metadata</SectionLabel>\n {metadata.length === 0 ? (\n <div className=\"rounded-lg border border-dashed border-border/80 bg-background/45 px-3 py-2 text-sm text-muted-foreground\">\n None\n </div>\n ) : (\n <div className=\"grid gap-1\">\n {metadata.map(([key, value]) => (\n <div\n className=\"grid min-w-0 grid-cols-[minmax(110px,0.75fr)_minmax(0,1fr)] gap-3 rounded-lg bg-muted/20 px-3 py-2 text-sm\"\n key={key}\n >\n <span className=\"min-w-0 truncate font-medium text-muted-foreground\" title={key}>\n {key}\n </span>\n <span\n className=\"min-w-0 truncate font-mono text-xs text-foreground\"\n title={formatMetadataValue(value)}\n >\n {formatMetadataValue(value)}\n </span>\n </div>\n ))}\n </div>\n )}\n </section>\n </div>\n </article>\n );\n}\n\nconst enabledBadge = \"border-primary/35 bg-primary/10 text-primary\";\nconst disabledBadge = \"border-border/80 bg-muted/55 text-muted-foreground\";\n\nfunction RuntimeMetric(props: { label: string; value: number }) {\n return (\n <div className=\"grid gap-1 rounded-lg bg-muted/20 px-3 py-2\">\n <span className=\"font-mono text-[10px] font-semibold uppercase tracking-[0.18em] text-muted-foreground\">\n {props.label}\n </span>\n <span className=\"font-mono text-lg font-semibold text-foreground\">{props.value}</span>\n </div>\n );\n}\n\nfunction SectionLabel(props: { children: string }) {\n return (\n <h3 className=\"m-0 font-mono text-[10px] font-semibold uppercase tracking-[0.2em] text-muted-foreground\">\n {props.children}\n </h3>\n );\n}\n\nfunction metadataEntries(metadata: StudioConfig[\"agents\"][number][\"metadata\"]) {\n if (metadata === undefined) {\n return [];\n }\n return Object.entries(metadata);\n}\n\nfunction formatMetadataValue(value: unknown): string {\n if (value === null) {\n return \"null\";\n }\n if (typeof value === \"string\" || typeof value === \"number\" || typeof value === \"boolean\") {\n return String(value);\n }\n if (Array.isArray(value)) {\n return `[${value.length}]`;\n }\n if (typeof value === \"object\") {\n return \"{...}\";\n }\n return \"\";\n}\n"],"mappings":"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"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{n as e,r as t,t as n}from"./utils-BN2yP0LH.js";var r=t(),i=e(`inline-flex items-center rounded-lg border px-2 py-1 font-mono text-[11px] font-semibold uppercase tracking-[0.12em]`,{variants:{variant:{default:`border-border/80 bg-muted/70 text-muted-foreground`,success:`border-primary/40 bg-primary/15 text-primary`,destructive:`border-destructive/40 bg-destructive/15 text-destructive`}},defaultVariants:{variant:`default`}});function a({className:e,variant:t,...a}){return(0,r.jsx)(`span`,{className:n(i({variant:t,className:e})),...a})}export{a as t};
|
|
2
|
-
//# sourceMappingURL=badge-Bqf5Z3q8.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"badge-Bqf5Z3q8.js","names":[],"sources":["../../../src/ui/app/components/ui/badge.tsx"],"sourcesContent":["import { cva, type VariantProps } from \"class-variance-authority\";\nimport type * as React from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nconst badgeVariants = cva(\n \"inline-flex items-center rounded-lg border px-2 py-1 font-mono text-[11px] font-semibold uppercase tracking-[0.12em]\",\n {\n variants: {\n variant: {\n default: \"border-border/80 bg-muted/70 text-muted-foreground\",\n success: \"border-primary/40 bg-primary/15 text-primary\",\n destructive: \"border-destructive/40 bg-destructive/15 text-destructive\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n },\n);\n\nexport function Badge({\n className,\n variant,\n ...props\n}: React.ComponentProps<\"span\"> & VariantProps<typeof badgeVariants>) {\n return <span className={cn(badgeVariants({ variant, className }))} {...props} />;\n}\n"],"mappings":"gEAIM,EAAgB,EACpB,uHACA,CACE,SAAU,CACR,QAAS,CACP,QAAS,qDACT,QAAS,+CACT,YAAa,2DACd,CACF,CACD,gBAAiB,CACf,QAAS,UACV,CACF,CACF,CAED,SAAgB,EAAM,CACpB,YACA,UACA,GAAG,GACiE,CACpE,OAAO,EAAA,EAAA,KAAC,OAAD,CAAM,UAAW,EAAG,EAAc,CAAE,UAAS,YAAW,CAAC,CAAC,CAAE,GAAI,EAAS,CAAA"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{r as e}from"./utils-BN2yP0LH.js";import{t}from"./Play.es-BMj9mcZd.js";import{a as n,i as r,n as i,o as a,r as o,w as s}from"./index-CISgSi9m.js";import{t as c}from"./renderers-BsGl9Gjx.js";var l=e();function u(e){let c=e.evals.find(t=>t.id===e.selectedEvalId)??e.evals[0];return e.enabled?(0,l.jsx)(`section`,{className:`grid min-h-0 overflow-auto bg-background/45`,children:(0,l.jsxs)(`div`,{className:`mx-auto grid w-full max-w-6xl content-start gap-5 p-6`,children:[(0,l.jsxs)(`header`,{className:`flex min-w-0 items-start justify-between gap-4 border-b border-border/80 pb-5`,children:[(0,l.jsxs)(`div`,{className:`min-w-0`,children:[(0,l.jsx)(`p`,{className:`m-0 font-mono text-[10px] font-semibold uppercase tracking-[0.16em] text-muted-foreground`,children:`Evals`}),(0,l.jsx)(`h1`,{className:`m-0 mt-2 text-2xl font-semibold tracking-tight text-foreground`,children:c?.name??`Eval suite`}),c?.description===void 0?null:(0,l.jsx)(`p`,{className:`m-0 mt-2 max-w-2xl text-sm leading-6 text-muted-foreground`,children:c.description})]}),(0,l.jsxs)(s,{className:`h-9 shrink-0 rounded-lg px-3 text-sm font-semibold`,disabled:c===void 0||e.runState===`running`,onClick:e.onRun,children:[(0,l.jsx)(t,{className:`mr-1.5 h-3.5 w-3.5`}),e.runState===`running`?`Running`:`Run`]})]}),(0,l.jsxs)(`div`,{className:`grid gap-5 lg:grid-cols-[320px_minmax(0,1fr)]`,children:[(0,l.jsxs)(`aside`,{className:`grid content-start gap-4`,children:[(0,l.jsxs)(`label`,{className:`grid gap-2`,htmlFor:`eval-suite-select`,children:[(0,l.jsx)(`span`,{className:`font-mono text-[9px] font-semibold uppercase tracking-[0.14em] text-muted-foreground`,children:`Suite`}),(0,l.jsxs)(i,{value:c?.id??``,onValueChange:e.onSelectEval,children:[(0,l.jsx)(n,{id:`eval-suite-select`,className:`h-9 w-full rounded-lg border-primary/55 bg-background font-mono text-[11px]`,children:(0,l.jsx)(a,{placeholder:`Select eval`})}),(0,l.jsx)(o,{children:e.evals.map(e=>(0,l.jsx)(r,{value:e.id,children:e.name},e.id))})]})]}),c===void 0?null:(0,l.jsxs)(`div`,{className:`grid gap-2`,children:[(0,l.jsx)(d,{label:`Cases`,value:String(c.caseCount)}),(0,l.jsx)(d,{label:`Metrics`,value:String(c.metricNames.length)}),(0,l.jsx)(d,{label:`Concurrency`,value:String(c.concurrency??1)})]})]}),(0,l.jsx)(`main`,{className:`min-w-0`,children:e.result===void 0?(0,l.jsx)(`div`,{className:`rounded-lg border border-border/80 bg-card/25 p-5 text-sm font-medium text-muted-foreground`,children:`Run a suite to inspect pass, fail, invalid, and per-case metric results.`}):(0,l.jsx)(f,{result:e.result})})]})]})}):(0,l.jsx)(`section`,{className:`grid min-h-0 place-items-center p-8 text-center`,children:(0,l.jsxs)(`div`,{className:`grid max-w-lg gap-3`,children:[(0,l.jsx)(`h1`,{className:`m-0 text-2xl font-semibold text-foreground`,children:`Evals unavailable`}),(0,l.jsx)(`p`,{className:`m-0 text-sm leading-6 text-muted-foreground`,children:`Register eval suites with Studio to run them from this workspace.`})]})})}function d(e){return(0,l.jsxs)(`div`,{className:`rounded-lg bg-card/35 px-3 py-3`,children:[(0,l.jsx)(`div`,{className:`font-mono text-[9px] font-semibold uppercase tracking-[0.14em] text-muted-foreground`,children:e.label}),(0,l.jsx)(`div`,{className:`mt-1 font-mono text-base font-semibold tabular-nums text-foreground`,children:e.value})]})}function f(e){let t=e.result.result;return(0,l.jsxs)(`article`,{className:`grid gap-4 rounded-lg border border-border/80 bg-card/25 p-4`,children:[(0,l.jsxs)(`div`,{className:`grid grid-cols-4 gap-2`,children:[(0,l.jsx)(d,{label:`Passed`,value:String(t.passed??0)}),(0,l.jsx)(d,{label:`Failed`,value:String(t.failed??0)}),(0,l.jsx)(d,{label:`Invalid`,value:String(t.invalid??0)}),(0,l.jsx)(d,{label:`Duration`,value:`${t.durationMs??e.result.durationMs}ms`})]}),(0,l.jsxs)(`div`,{className:`grid gap-2`,children:[(0,l.jsx)(`div`,{className:`font-mono text-[9px] font-semibold uppercase tracking-[0.14em] text-muted-foreground`,children:`Result`}),(0,l.jsx)(`pre`,{className:`max-h-[60vh] overflow-auto whitespace-pre-wrap break-words rounded-lg border border-border/80 bg-background/55 p-3 font-mono text-xs leading-5 text-foreground`,children:(0,l.jsx)(c,{text:JSON.stringify(e.result.result,null,2)})})]})]})}export{u as EvalsPage};
|
|
2
|
-
//# sourceMappingURL=evals-page-CEsOQH1F.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"evals-page-CEsOQH1F.js","names":[],"sources":["../../../src/ui/app/modules/evals/evals-page.tsx"],"sourcesContent":["import { Play } from \"@phosphor-icons/react\";\nimport type { StudioEvalRunResponse, StudioEvalSuiteConfig } from \"../../../../types\";\nimport { Button } from \"../../components/ui/button\";\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"../../components/ui/select\";\nimport { JsonSyntax } from \"../shared/renderers\";\n\nexport function EvalsPage(props: {\n evals: StudioEvalSuiteConfig[];\n selectedEvalId: string;\n enabled: boolean;\n runState: \"idle\" | \"running\";\n result: StudioEvalRunResponse | undefined;\n onSelectEval: (evalId: string) => void;\n onRun: () => void;\n}) {\n const selected = props.evals.find((suite) => suite.id === props.selectedEvalId) ?? props.evals[0];\n\n if (!props.enabled) {\n return (\n <section className=\"grid min-h-0 place-items-center p-8 text-center\">\n <div className=\"grid max-w-lg gap-3\">\n <h1 className=\"m-0 text-2xl font-semibold text-foreground\">Evals unavailable</h1>\n <p className=\"m-0 text-sm leading-6 text-muted-foreground\">\n Register eval suites with Studio to run them from this workspace.\n </p>\n </div>\n </section>\n );\n }\n\n return (\n <section className=\"grid min-h-0 overflow-auto bg-background/45\">\n <div className=\"mx-auto grid w-full max-w-6xl content-start gap-5 p-6\">\n <header className=\"flex min-w-0 items-start justify-between gap-4 border-b border-border/80 pb-5\">\n <div className=\"min-w-0\">\n <p className=\"m-0 font-mono text-[10px] font-semibold uppercase tracking-[0.16em] text-muted-foreground\">\n Evals\n </p>\n <h1 className=\"m-0 mt-2 text-2xl font-semibold tracking-tight text-foreground\">\n {selected?.name ?? \"Eval suite\"}\n </h1>\n {selected?.description === undefined ? null : (\n <p className=\"m-0 mt-2 max-w-2xl text-sm leading-6 text-muted-foreground\">\n {selected.description}\n </p>\n )}\n </div>\n <Button\n className=\"h-9 shrink-0 rounded-lg px-3 text-sm font-semibold\"\n disabled={selected === undefined || props.runState === \"running\"}\n onClick={props.onRun}\n >\n <Play className=\"mr-1.5 h-3.5 w-3.5\" />\n {props.runState === \"running\" ? \"Running\" : \"Run\"}\n </Button>\n </header>\n\n <div className=\"grid gap-5 lg:grid-cols-[320px_minmax(0,1fr)]\">\n <aside className=\"grid content-start gap-4\">\n <label className=\"grid gap-2\" htmlFor=\"eval-suite-select\">\n <span className=\"font-mono text-[9px] font-semibold uppercase tracking-[0.14em] text-muted-foreground\">\n Suite\n </span>\n <Select value={selected?.id ?? \"\"} onValueChange={props.onSelectEval}>\n <SelectTrigger\n id=\"eval-suite-select\"\n className=\"h-9 w-full rounded-lg border-primary/55 bg-background font-mono text-[11px]\"\n >\n <SelectValue placeholder=\"Select eval\" />\n </SelectTrigger>\n <SelectContent>\n {props.evals.map((suite) => (\n <SelectItem key={suite.id} value={suite.id}>\n {suite.name}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </label>\n\n {selected === undefined ? null : (\n <div className=\"grid gap-2\">\n <Metric label=\"Cases\" value={String(selected.caseCount)} />\n <Metric label=\"Metrics\" value={String(selected.metricNames.length)} />\n <Metric label=\"Concurrency\" value={String(selected.concurrency ?? 1)} />\n </div>\n )}\n </aside>\n\n <main className=\"min-w-0\">\n {props.result === undefined ? (\n <div className=\"rounded-lg border border-border/80 bg-card/25 p-5 text-sm font-medium text-muted-foreground\">\n Run a suite to inspect pass, fail, invalid, and per-case metric results.\n </div>\n ) : (\n <EvalResult result={props.result} />\n )}\n </main>\n </div>\n </div>\n </section>\n );\n}\n\nfunction Metric(props: { label: string; value: string }) {\n return (\n <div className=\"rounded-lg bg-card/35 px-3 py-3\">\n <div className=\"font-mono text-[9px] font-semibold uppercase tracking-[0.14em] text-muted-foreground\">\n {props.label}\n </div>\n <div className=\"mt-1 font-mono text-base font-semibold tabular-nums text-foreground\">\n {props.value}\n </div>\n </div>\n );\n}\n\nfunction EvalResult(props: { result: StudioEvalRunResponse }) {\n const result = props.result.result as {\n passed?: number;\n failed?: number;\n invalid?: number;\n durationMs?: number;\n };\n return (\n <article className=\"grid gap-4 rounded-lg border border-border/80 bg-card/25 p-4\">\n <div className=\"grid grid-cols-4 gap-2\">\n <Metric label=\"Passed\" value={String(result.passed ?? 0)} />\n <Metric label=\"Failed\" value={String(result.failed ?? 0)} />\n <Metric label=\"Invalid\" value={String(result.invalid ?? 0)} />\n <Metric label=\"Duration\" value={`${result.durationMs ?? props.result.durationMs}ms`} />\n </div>\n <div className=\"grid gap-2\">\n <div className=\"font-mono text-[9px] font-semibold uppercase tracking-[0.14em] text-muted-foreground\">\n Result\n </div>\n <pre className=\"max-h-[60vh] overflow-auto whitespace-pre-wrap break-words rounded-lg border border-border/80 bg-background/55 p-3 font-mono text-xs leading-5 text-foreground\">\n <JsonSyntax text={JSON.stringify(props.result.result, null, 2)} />\n </pre>\n </div>\n </article>\n );\n}\n"],"mappings":"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"}
|