@contractspec/example.agent-console 3.8.16 → 3.8.17

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.
@@ -1 +1 @@
1
- import{defineVisualization as D,VisualizationRegistry as V}from"@contractspec/lib.contracts-spec/visualizations";var M={key:"agent.run.list",version:"1.0.0"},P={version:"1.0.0",domain:"ai-ops",stability:"experimental",owners:["@example.agent-console"],tags:["agent-console","visualization","operations"]},b=D({meta:{...P,key:"agent-console.visualization.run-status",title:"Run Status Breakdown",description:"Distribution of run outcomes across the current sample.",goal:"Make operational success and failure mix visible at a glance.",context:"Agent operations overview."},source:{primary:M,resultPath:"data"},visualization:{kind:"pie",nameDimension:"status",valueMeasure:"runs",dimensions:[{key:"status",label:"Status",dataPath:"status",type:"category"}],measures:[{key:"runs",label:"Runs",dataPath:"runs",format:"number"}],table:{caption:"Run counts by status."}}}),Z=D({meta:{...P,key:"agent-console.visualization.run-activity",title:"Recent Run Activity",description:"Daily run volume across the current sample.",goal:"Show whether agent activity is rising or slowing down.",context:"Operations trend monitoring."},source:{primary:M,resultPath:"data"},visualization:{kind:"cartesian",variant:"line",xDimension:"day",yMeasures:["runs"],dimensions:[{key:"day",label:"Day",dataPath:"day",type:"time"}],measures:[{key:"runs",label:"Runs",dataPath:"runs",format:"number",color:"#0f766e"}],table:{caption:"Daily run counts."}}}),C=D({meta:{...P,key:"agent-console.visualization.run-efficiency",title:"Duration vs Tokens",description:"Scatter chart comparing token consumption and runtime.",goal:"Reveal outlier runs that are slow relative to their token usage.",context:"Operational performance diagnostics."},source:{primary:M,resultPath:"data"},visualization:{kind:"cartesian",variant:"scatter",xDimension:"totalTokens",yMeasures:["durationMs"],dimensions:[{key:"totalTokens",label:"Total Tokens",dataPath:"totalTokens",type:"number"}],measures:[{key:"durationMs",label:"Duration",dataPath:"durationMs",format:"duration",color:"#7c3aed"},{key:"estimatedCostUsd",label:"Cost",dataPath:"estimatedCostUsd",format:"currency"}],series:[{key:"runs",label:"Runs",measure:"durationMs",type:"scatter",color:"#7c3aed"}],table:{caption:"Run duration versus token usage."}}}),v=[b,Z,C],ye=new V([...v]),fe=v.map((e)=>({key:e.meta.key,version:e.meta.version}));function E(e){if(!e)return"unknown";return e.toISOString().slice(0,10)}function R(e){let o=new Map,s=new Map;for(let t of e)o.set(t.status,(o.get(t.status)??0)+1),s.set(E(t.startedAt??t.queuedAt),(s.get(E(t.startedAt??t.queuedAt))??0)+1);return[{key:"run-status",spec:b,data:{data:Array.from(o.entries()).map(([t,a])=>({status:t,runs:a}))},title:"Run Status Breakdown",description:"Completed, failed, running, and cancelled runs in the sample.",height:260},{key:"run-activity",spec:Z,data:{data:Array.from(s.entries()).sort(([t],[a])=>t.localeCompare(a)).map(([t,a])=>({day:t,runs:a}))},title:"Recent Run Activity",description:"Daily run volume derived from run start times."},{key:"run-efficiency",spec:C,data:{data:e.filter((t)=>typeof t.durationMs==="number").map((t)=>({totalTokens:t.totalTokens,durationMs:t.durationMs??0,estimatedCostUsd:t.estimatedCostUsd}))},title:"Duration vs Tokens",description:"Operational scatter plot for spotting inefficient runs."}]}var S=[{id:"agent-1",organizationId:"demo-org",name:"Customer Support Bot",slug:"customer-support-bot",description:"Handles tier-1 customer inquiries and routes complex issues.",status:"ACTIVE",modelProvider:"OPENAI",modelName:"gpt-4o-mini",modelConfig:{temperature:0.7},systemPrompt:"You are a helpful customer support assistant.",toolChoice:"auto",maxIterations:10,timeoutMs:120000,version:"1.0.0",tags:["support","tier-1"],createdAt:new Date("2024-01-15T10:00:00Z"),updatedAt:new Date("2024-03-20T14:30:00Z")},{id:"agent-2",organizationId:"demo-org",name:"Code Review Assistant",slug:"code-review-assistant",description:"Reviews pull requests and provides actionable feedback.",status:"ACTIVE",modelProvider:"ANTHROPIC",modelName:"claude-sonnet-4-20250514",modelConfig:{temperature:0.3},systemPrompt:"You are a code review expert.",toolChoice:"auto",maxIterations:15,timeoutMs:180000,version:"2.1.0",tags:["code","review","dev"],createdAt:new Date("2024-02-10T09:00:00Z"),updatedAt:new Date("2024-04-05T11:15:00Z")},{id:"agent-3",organizationId:"demo-org",name:"Data Analyst",slug:"data-analyst",description:"Queries databases and generates insights from data.",status:"PAUSED",modelProvider:"OPENAI",modelName:"gpt-4o",modelConfig:{temperature:0.5},systemPrompt:"You are a data analyst expert in SQL and analytics.",toolChoice:"required",maxIterations:20,timeoutMs:300000,version:"1.2.0",tags:["data","analytics","sql"],createdAt:new Date("2024-03-01T08:00:00Z"),updatedAt:new Date("2024-04-10T16:45:00Z")},{id:"agent-4",organizationId:"demo-org",name:"Meeting Scheduler",slug:"meeting-scheduler",description:"Schedules meetings and manages calendar conflicts.",status:"DRAFT",modelProvider:"GOOGLE",modelName:"gemini-2.0-flash",modelConfig:{temperature:0.2},systemPrompt:"You help schedule and organize meetings efficiently.",toolChoice:"auto",maxIterations:5,timeoutMs:60000,version:"0.1.0",tags:["calendar","scheduling"],createdAt:new Date("2024-04-01T12:00:00Z"),updatedAt:new Date("2024-04-01T12:00:00Z")}];var N=[{id:"tool-1",organizationId:"demo-org",name:"Web Search",slug:"web-search",description:"Search the web for real-time information using Brave API.",category:"RETRIEVAL",status:"ACTIVE",parametersSchema:{type:"object",properties:{query:{type:"string",description:"Search query"},numResults:{type:"number",default:10}},required:["query"]},outputSchema:{type:"array",items:{type:"object"}},implementationType:"http",implementationConfig:{url:"https://api.brave.com/search",method:"GET"},maxInvocationsPerMinute:60,timeoutMs:30000,version:"1.0.0",tags:["search","web"],createdAt:new Date("2024-01-01T00:00:00Z"),updatedAt:new Date("2024-02-15T10:00:00Z")},{id:"tool-2",organizationId:"demo-org",name:"SQL Query",slug:"sql-query",description:"Execute read-only SQL queries against the data warehouse.",category:"RETRIEVAL",status:"ACTIVE",parametersSchema:{type:"object",properties:{query:{type:"string",description:"SQL query"},maxRows:{type:"number",default:100}},required:["query"]},outputSchema:{type:"object"},implementationType:"function",implementationConfig:{handler:"executeSqlQuery"},maxInvocationsPerMinute:30,timeoutMs:60000,version:"1.1.0",tags:["sql","database"],createdAt:new Date("2024-01-05T00:00:00Z"),updatedAt:new Date("2024-03-10T14:00:00Z")},{id:"tool-3",organizationId:"demo-org",name:"Email Sender",slug:"email-sender",description:"Send emails via SMTP or API.",category:"COMMUNICATION",status:"ACTIVE",parametersSchema:{type:"object",properties:{to:{type:"string"},subject:{type:"string"},body:{type:"string"}},required:["to","subject","body"]},implementationType:"http",implementationConfig:{url:"/api/send-email",method:"POST"},maxInvocationsPerMinute:10,timeoutMs:30000,version:"1.0.0",tags:["email","communication"],createdAt:new Date("2024-02-01T00:00:00Z"),updatedAt:new Date("2024-02-01T00:00:00Z")},{id:"tool-4",organizationId:"demo-org",name:"GitHub Integration",slug:"github-integration",description:"Interact with GitHub repositories, PRs, and issues.",category:"INTEGRATION",status:"ACTIVE",parametersSchema:{type:"object",properties:{action:{type:"string",enum:["list_prs","get_pr","create_comment"]},repo:{type:"string"},params:{type:"object"}},required:["action","repo"]},implementationType:"http",implementationConfig:{url:"https://api.github.com",auth:"token"},maxInvocationsPerMinute:100,timeoutMs:15000,version:"2.0.0",tags:["github","integration","code"],createdAt:new Date("2024-02-20T00:00:00Z"),updatedAt:new Date("2024-04-01T09:00:00Z")},{id:"tool-5",organizationId:"demo-org",name:"Calculator",slug:"calculator",description:"Perform mathematical calculations.",category:"COMPUTATION",status:"ACTIVE",parametersSchema:{type:"object",properties:{expression:{type:"string",description:"Math expression to evaluate"}},required:["expression"]},outputSchema:{type:"object",properties:{result:{type:"number"}}},implementationType:"function",implementationConfig:{handler:"evaluateMath"},timeoutMs:5000,version:"1.0.0",tags:["math","utility"],createdAt:new Date("2024-01-10T00:00:00Z"),updatedAt:new Date("2024-01-10T00:00:00Z")}];var k=[{id:"run-1",organizationId:"demo-org",projectId:"demo-project",agentId:"agent-1",agentName:"Customer Support Bot",userId:"user-1",sessionId:"session-1",input:{message:"How do I reset my password?",context:{}},output:{response:"You can reset your password by clicking..."},status:"COMPLETED",totalTokens:1250,promptTokens:800,completionTokens:450,totalIterations:3,durationMs:4500,estimatedCostUsd:0.0025,queuedAt:new Date("2024-04-15T10:00:00Z"),startedAt:new Date("2024-04-15T10:00:01Z"),completedAt:new Date("2024-04-15T10:00:05Z"),steps:[],logs:[]},{id:"run-2",organizationId:"demo-org",projectId:"demo-project",agentId:"agent-2",agentName:"Code Review Assistant",userId:"user-2",input:{message:"Review PR #123",context:{prNumber:123}},status:"IN_PROGRESS",totalTokens:3500,promptTokens:3000,completionTokens:500,totalIterations:5,queuedAt:new Date("2024-04-15T10:30:00Z"),startedAt:new Date("2024-04-15T10:30:02Z"),steps:[],logs:[]},{id:"run-3",organizationId:"demo-org",projectId:"demo-project",agentId:"agent-1",agentName:"Customer Support Bot",userId:"user-1",input:{message:"What are your business hours?"},output:{response:"Our business hours are 9 AM to 5 PM EST..."},status:"COMPLETED",totalTokens:800,promptTokens:500,completionTokens:300,totalIterations:2,durationMs:2100,estimatedCostUsd:0.0012,queuedAt:new Date("2024-04-15T09:00:00Z"),startedAt:new Date("2024-04-15T09:00:01Z"),completedAt:new Date("2024-04-15T09:00:03Z"),steps:[],logs:[]},{id:"run-4",organizationId:"demo-org",projectId:"demo-project",agentId:"agent-3",agentName:"Data Analyst",userId:"user-3",input:{message:"Generate sales report for Q1"},status:"FAILED",errorMessage:"Database connection timeout",errorCode:"DB_TIMEOUT",totalTokens:2000,promptTokens:1500,completionTokens:500,totalIterations:8,durationMs:45000,queuedAt:new Date("2024-04-14T15:00:00Z"),startedAt:new Date("2024-04-14T15:00:05Z"),completedAt:new Date("2024-04-14T15:00:50Z"),steps:[],logs:[]},{id:"run-5",organizationId:"demo-org",projectId:"demo-project",agentId:"agent-2",agentName:"Code Review Assistant",userId:"user-2",input:{message:"Review PR #120"},output:{response:"Code review complete. 3 suggestions..."},status:"COMPLETED",totalTokens:5200,promptTokens:4000,completionTokens:1200,totalIterations:7,durationMs:15000,estimatedCostUsd:0.0156,queuedAt:new Date("2024-04-14T11:00:00Z"),startedAt:new Date("2024-04-14T11:00:03Z"),completedAt:new Date("2024-04-14T11:00:18Z"),steps:[],logs:[]}];var U=[{id:"runs",label:"Runs",icon:"▶"},{id:"agents",label:"Agents",icon:"\uD83E\uDD16"},{id:"tools",label:"Tools",icon:"\uD83D\uDD27"},{id:"metrics",label:"Metrics",icon:"\uD83D\uDCCA"}];function _(e){let o=e.filter((u)=>u.status==="COMPLETED").length,s=e.reduce((u,m)=>u+m.totalTokens,0),t=e.reduce((u,m)=>u+(m.estimatedCostUsd??0),0),a=e.map((u)=>u.durationMs).filter((u)=>typeof u==="number");return{averageDurationMs:a.length>0?a.reduce((u,m)=>u+m,0)/a.length:0,completedRuns:o,successRate:e.length>0?o/e.length:0,totalCostUsd:t,totalRuns:e.length,totalTokens:s}}function f(e){if(e<1000)return e.toString();if(e<1e6)return`${(e/1000).toFixed(1)}K`;return`${(e/1e6).toFixed(2)}M`}function L(e){if(!e)return"-";if(e<1000)return`${e}ms`;if(e<60000)return`${(e/1000).toFixed(1)}s`;return`${(e/60000).toFixed(1)}m`}function z(e){return new Intl.DateTimeFormat("en-US",{dateStyle:"medium",timeStyle:"short"}).format(e)}function O(e){if(typeof document>"u")return{onPress:e};return{onClick:e}}import{Badge as X}from"@contractspec/lib.ui-kit-web/ui/badge";import{Card as I,CardContent as A,CardHeader as H,CardTitle as j}from"@contractspec/lib.ui-kit-web/ui/card";import{HStack as q,VStack as l}from"@contractspec/lib.ui-kit-web/ui/stack";import{Text as d}from"@contractspec/lib.ui-kit-web/ui/text";import{jsx as n,jsxs as i}from"react/jsx-runtime";function G({metrics:e}){let o=[{label:"Total Runs",value:String(e.totalRuns),hint:`${Math.round(e.successRate*100)}% success`},{label:"Success Rate",value:`${Math.round(e.successRate*100)}%`,hint:"of all runs"},{label:"Total Tokens",value:f(e.totalTokens),hint:"This period"},{label:"Total Cost",value:`$${e.totalCostUsd.toFixed(2)}`,hint:"This period"}];return n(q,{gap:"md",className:"flex-wrap",children:o.map((s)=>n(I,{className:"min-w-52 flex-1",children:i(A,{className:"flex flex-col gap-1 pt-6",children:[n(d,{className:"text-muted-foreground text-sm",children:s.label}),n(d,{className:"font-bold text-2xl",children:s.value}),n(d,{className:"text-muted-foreground text-sm",children:s.hint})]})},s.label))})}function K({agents:e}){return n(l,{gap:"md",children:e.map((o)=>n(I,{children:i(A,{className:"flex flex-col gap-2 pt-6",children:[i(q,{justify:"between",align:"start",children:[i(l,{gap:"xs",className:"flex-1",children:[n(d,{className:"font-semibold text-lg",children:o.name}),i(d,{className:"text-muted-foreground text-sm",children:[o.modelProvider," / ",o.modelName]})]}),n(h,{status:o.status})]}),n(d,{className:"text-muted-foreground text-sm",children:o.description})]})},o.id))})}function Q({tools:e}){return n(l,{gap:"md",children:e.map((o)=>n(I,{children:i(A,{className:"flex flex-col gap-2 pt-6",children:[i(q,{justify:"between",align:"start",children:[i(l,{gap:"xs",className:"flex-1",children:[n(d,{className:"font-semibold text-lg",children:o.name}),i(d,{className:"text-muted-foreground text-sm",children:[o.category," / ",o.implementationType]})]}),n(h,{status:o.status})]}),n(d,{className:"text-muted-foreground text-sm",children:o.description})]})},o.id))})}function Y({metrics:e}){return i(l,{gap:"md",children:[n(d,{className:"font-semibold text-lg",children:"Usage Analytics"}),i(I,{children:[n(H,{children:n(j,{children:"Run Outcomes"})}),i(A,{className:"flex flex-col gap-3",children:[i(d,{children:["Completed: ",e.completedRuns]}),i(d,{children:["Failed: ",e.totalRuns-e.completedRuns]}),i(d,{children:["Average duration: ",(e.averageDurationMs/1000).toFixed(1),"s"]})]})]})]})}function h({status:e}){return n(X,{variant:e==="FAILED"||e==="CANCELLED"?"destructive":e==="ACTIVE"||e==="COMPLETED"?"secondary":"outline",children:n(d,{className:"font-semibold text-xs",children:e})})}import{useContractTable as x}from"@contractspec/lib.presentation-runtime-react";import{Card as ee,CardContent as te}from"@contractspec/lib.ui-kit-web/ui/card";import{DataTable as oe}from"@contractspec/lib.ui-kit-web/ui/data-table";import{VStack as ne}from"@contractspec/lib.ui-kit-web/ui/stack";import{Text as T}from"@contractspec/lib.ui-kit-web/ui/text";import{useMemo as re}from"react";import{jsx as c,jsxs as ae}from"react/jsx-runtime";function $({runs:e}){let o=re(()=>[{id:"queuedAt",header:"Run",label:"Run",accessor:(t)=>t.queuedAt.getTime(),cell:({item:t})=>ae(ne,{gap:"xs",children:[c(T,{className:"font-mono text-sm",children:t.id}),c(T,{className:"text-muted-foreground text-xs",children:z(t.queuedAt)})]}),size:180,canSort:!0,canHide:!0},{id:"agentName",header:"Agent",label:"Agent",accessorKey:"agentName",size:220,canSort:!0},{id:"status",header:"Status",label:"Status",accessorKey:"status",cell:({value:t})=>c(h,{status:String(t)}),size:140,canSort:!0},{id:"totalTokens",header:"Tokens",label:"Tokens",accessorKey:"totalTokens",cell:({value:t})=>f(Number(t??0)),align:"right",size:120,canSort:!0},{id:"durationMs",header:"Duration",label:"Duration",accessorKey:"durationMs",cell:({value:t})=>L(typeof t==="number"?t:void 0),align:"right",size:130,canHide:!0}],[]),s=x({data:e,columns:o,initialState:{pagination:{pageIndex:0,pageSize:5}},getRowId:(t)=>t.id});return c(oe,{controller:s,toolbar:c(T,{className:"text-muted-foreground text-sm",children:"Run History"}),emptyState:c(ee,{children:c(te,{className:"pt-6",children:c(T,{className:"text-muted-foreground",children:"No runs yet"})})})})}import{createVisualizationModel as ie}from"@contractspec/lib.presentation-runtime-core";import{Button as F}from"@contractspec/lib.ui-kit-web/ui/button";import{Card as se,CardContent as de,CardDescription as ue,CardHeader as pe,CardTitle as me}from"@contractspec/lib.ui-kit-web/ui/card";import{HStack as B,VStack as w}from"@contractspec/lib.ui-kit-web/ui/stack";import{Text as y}from"@contractspec/lib.ui-kit-web/ui/text";import{Visualization as ce}from"@contractspec/lib.ui-kit-web/ui/visualization";import{useMemo as W,useState as ge}from"react";import{jsx as r,jsxs as g}from"react/jsx-runtime";function rt({agents:e=S,runs:o=k,showHeaderAction:s=!0,tools:t=N}){let[a,u]=ge("runs"),m=W(()=>_(o),[o]),J=W(()=>R(o),[o]);return g(w,{gap:"xl",align:"stretch",children:[g(B,{justify:"between",align:"center",className:"gap-3",children:[r(y,{className:"font-bold text-2xl",children:"AI Agent Console"}),s?r(F,{...O(()=>{return}),children:r(y,{children:"+ New Agent"})}):null]}),r(G,{metrics:m}),g(w,{gap:"md",children:[g(w,{gap:"xs",children:[r(y,{className:"font-semibold text-lg",children:"Operational Visualizations"}),r(y,{className:"text-muted-foreground text-sm",children:"Contract-backed charts derived from recent run activity."})]}),r(w,{gap:"md",children:J.map((p)=>g(se,{children:[g(pe,{children:[r(me,{children:p.title}),r(ue,{children:p.description})]}),r(de,{children:r(ce,{height:p.height,model:ie(p.spec,p.data)})})]},p.key))})]}),r(B,{className:"rounded-lg bg-muted p-1",gap:"xs",children:U.map((p)=>r(F,{size:"sm",variant:a===p.id?"secondary":"ghost",className:"flex-1",...O(()=>u(p.id)),children:g(y,{children:[p.icon," ",p.label]})},p.id))}),a==="runs"?r($,{runs:o}):null,a==="agents"?r(K,{agents:e}):null,a==="tools"?r(Q,{tools:t}):null,a==="metrics"?r(Y,{metrics:m}):null]})}export{rt as AgentConsolePreview};
1
+ import{defineVisualization as D,VisualizationRegistry as X}from"@contractspec/lib.contracts-spec/visualizations";var M={key:"agent.run.list",version:"1.0.0"},P={version:"1.0.0",domain:"ai-ops",stability:"experimental",owners:["@example.agent-console"],tags:["agent-console","visualization","operations"]},b=D({meta:{...P,key:"agent-console.visualization.run-status",title:"Run Status Breakdown",description:"Distribution of run outcomes across the current sample.",goal:"Make operational success and failure mix visible at a glance.",context:"Agent operations overview."},source:{primary:M,resultPath:"data"},visualization:{kind:"pie",nameDimension:"status",valueMeasure:"runs",dimensions:[{key:"status",label:"Status",dataPath:"status",type:"category"}],measures:[{key:"runs",label:"Runs",dataPath:"runs",format:"number"}],table:{caption:"Run counts by status."}}}),S=D({meta:{...P,key:"agent-console.visualization.run-activity",title:"Recent Run Activity",description:"Daily run volume across the current sample.",goal:"Show whether agent activity is rising or slowing down.",context:"Operations trend monitoring."},source:{primary:M,resultPath:"data"},visualization:{kind:"cartesian",variant:"line",xDimension:"day",yMeasures:["runs"],dimensions:[{key:"day",label:"Day",dataPath:"day",type:"time"}],measures:[{key:"runs",label:"Runs",dataPath:"runs",format:"number",color:"#0f766e"}],table:{caption:"Daily run counts."}}}),Z=D({meta:{...P,key:"agent-console.visualization.run-efficiency",title:"Duration vs Tokens",description:"Scatter chart comparing token consumption and runtime.",goal:"Reveal outlier runs that are slow relative to their token usage.",context:"Operational performance diagnostics."},source:{primary:M,resultPath:"data"},visualization:{kind:"cartesian",variant:"scatter",xDimension:"totalTokens",yMeasures:["durationMs"],dimensions:[{key:"totalTokens",label:"Total Tokens",dataPath:"totalTokens",type:"number"}],measures:[{key:"durationMs",label:"Duration",dataPath:"durationMs",format:"duration",color:"#7c3aed"},{key:"estimatedCostUsd",label:"Cost",dataPath:"estimatedCostUsd",format:"currency"}],series:[{key:"runs",label:"Runs",measure:"durationMs",type:"scatter",color:"#7c3aed"}],table:{caption:"Run duration versus token usage."}}}),q=[b,S,Z],be=new X([...q]),Se=q.map((e)=>({key:e.meta.key,version:e.meta.version}));function E(e){if(!e)return"unknown";return e.toISOString().slice(0,10)}function R(e){let o=new Map,a=new Map;for(let t of e)o.set(t.status,(o.get(t.status)??0)+1),a.set(E(t.startedAt??t.queuedAt),(a.get(E(t.startedAt??t.queuedAt))??0)+1);return[{key:"run-status",spec:b,data:{data:Array.from(o.entries()).map(([t,d])=>({status:t,runs:d}))},title:"Run Status Breakdown",description:"Completed, failed, running, and cancelled runs in the sample.",height:260},{key:"run-activity",spec:S,data:{data:Array.from(a.entries()).sort(([t],[d])=>t.localeCompare(d)).map(([t,d])=>({day:t,runs:d}))},title:"Recent Run Activity",description:"Daily run volume derived from run start times."},{key:"run-efficiency",spec:Z,data:{data:e.filter((t)=>typeof t.durationMs==="number").map((t)=>({totalTokens:t.totalTokens,durationMs:t.durationMs??0,estimatedCostUsd:t.estimatedCostUsd}))},title:"Duration vs Tokens",description:"Operational scatter plot for spotting inefficient runs."}]}var N=[{id:"agent-1",organizationId:"demo-org",name:"Customer Support Bot",slug:"customer-support-bot",description:"Handles tier-1 customer inquiries and routes complex issues.",status:"ACTIVE",modelProvider:"OPENAI",modelName:"gpt-4o-mini",modelConfig:{temperature:0.7},systemPrompt:"You are a helpful customer support assistant.",toolChoice:"auto",maxIterations:10,timeoutMs:120000,version:"1.0.0",tags:["support","tier-1"],createdAt:new Date("2024-01-15T10:00:00Z"),updatedAt:new Date("2024-03-20T14:30:00Z")},{id:"agent-2",organizationId:"demo-org",name:"Code Review Assistant",slug:"code-review-assistant",description:"Reviews pull requests and provides actionable feedback.",status:"ACTIVE",modelProvider:"ANTHROPIC",modelName:"claude-sonnet-4-20250514",modelConfig:{temperature:0.3},systemPrompt:"You are a code review expert.",toolChoice:"auto",maxIterations:15,timeoutMs:180000,version:"2.1.0",tags:["code","review","dev"],createdAt:new Date("2024-02-10T09:00:00Z"),updatedAt:new Date("2024-04-05T11:15:00Z")},{id:"agent-3",organizationId:"demo-org",name:"Data Analyst",slug:"data-analyst",description:"Queries databases and generates insights from data.",status:"PAUSED",modelProvider:"OPENAI",modelName:"gpt-4o",modelConfig:{temperature:0.5},systemPrompt:"You are a data analyst expert in SQL and analytics.",toolChoice:"required",maxIterations:20,timeoutMs:300000,version:"1.2.0",tags:["data","analytics","sql"],createdAt:new Date("2024-03-01T08:00:00Z"),updatedAt:new Date("2024-04-10T16:45:00Z")},{id:"agent-4",organizationId:"demo-org",name:"Meeting Scheduler",slug:"meeting-scheduler",description:"Schedules meetings and manages calendar conflicts.",status:"DRAFT",modelProvider:"GOOGLE",modelName:"gemini-2.0-flash",modelConfig:{temperature:0.2},systemPrompt:"You help schedule and organize meetings efficiently.",toolChoice:"auto",maxIterations:5,timeoutMs:60000,version:"0.1.0",tags:["calendar","scheduling"],createdAt:new Date("2024-04-01T12:00:00Z"),updatedAt:new Date("2024-04-01T12:00:00Z")}];var k=[{id:"tool-1",organizationId:"demo-org",name:"Web Search",slug:"web-search",description:"Search the web for real-time information using Brave API.",category:"RETRIEVAL",status:"ACTIVE",parametersSchema:{type:"object",properties:{query:{type:"string",description:"Search query"},numResults:{type:"number",default:10}},required:["query"]},outputSchema:{type:"array",items:{type:"object"}},implementationType:"http",implementationConfig:{url:"https://api.brave.com/search",method:"GET"},maxInvocationsPerMinute:60,timeoutMs:30000,version:"1.0.0",tags:["search","web"],createdAt:new Date("2024-01-01T00:00:00Z"),updatedAt:new Date("2024-02-15T10:00:00Z")},{id:"tool-2",organizationId:"demo-org",name:"SQL Query",slug:"sql-query",description:"Execute read-only SQL queries against the data warehouse.",category:"RETRIEVAL",status:"ACTIVE",parametersSchema:{type:"object",properties:{query:{type:"string",description:"SQL query"},maxRows:{type:"number",default:100}},required:["query"]},outputSchema:{type:"object"},implementationType:"function",implementationConfig:{handler:"executeSqlQuery"},maxInvocationsPerMinute:30,timeoutMs:60000,version:"1.1.0",tags:["sql","database"],createdAt:new Date("2024-01-05T00:00:00Z"),updatedAt:new Date("2024-03-10T14:00:00Z")},{id:"tool-3",organizationId:"demo-org",name:"Email Sender",slug:"email-sender",description:"Send emails via SMTP or API.",category:"COMMUNICATION",status:"ACTIVE",parametersSchema:{type:"object",properties:{to:{type:"string"},subject:{type:"string"},body:{type:"string"}},required:["to","subject","body"]},implementationType:"http",implementationConfig:{url:"/api/send-email",method:"POST"},maxInvocationsPerMinute:10,timeoutMs:30000,version:"1.0.0",tags:["email","communication"],createdAt:new Date("2024-02-01T00:00:00Z"),updatedAt:new Date("2024-02-01T00:00:00Z")},{id:"tool-4",organizationId:"demo-org",name:"GitHub Integration",slug:"github-integration",description:"Interact with GitHub repositories, PRs, and issues.",category:"INTEGRATION",status:"ACTIVE",parametersSchema:{type:"object",properties:{action:{type:"string",enum:["list_prs","get_pr","create_comment"]},repo:{type:"string"},params:{type:"object"}},required:["action","repo"]},implementationType:"http",implementationConfig:{url:"https://api.github.com",auth:"token"},maxInvocationsPerMinute:100,timeoutMs:15000,version:"2.0.0",tags:["github","integration","code"],createdAt:new Date("2024-02-20T00:00:00Z"),updatedAt:new Date("2024-04-01T09:00:00Z")},{id:"tool-5",organizationId:"demo-org",name:"Calculator",slug:"calculator",description:"Perform mathematical calculations.",category:"COMPUTATION",status:"ACTIVE",parametersSchema:{type:"object",properties:{expression:{type:"string",description:"Math expression to evaluate"}},required:["expression"]},outputSchema:{type:"object",properties:{result:{type:"number"}}},implementationType:"function",implementationConfig:{handler:"evaluateMath"},timeoutMs:5000,version:"1.0.0",tags:["math","utility"],createdAt:new Date("2024-01-10T00:00:00Z"),updatedAt:new Date("2024-01-10T00:00:00Z")}];var C=[{id:"run-1",organizationId:"demo-org",projectId:"demo-project",agentId:"agent-1",agentName:"Customer Support Bot",userId:"user-1",sessionId:"session-1",input:{message:"How do I reset my password?",context:{}},output:{response:"You can reset your password by clicking..."},status:"COMPLETED",totalTokens:1250,promptTokens:800,completionTokens:450,totalIterations:3,durationMs:4500,estimatedCostUsd:0.0025,queuedAt:new Date("2024-04-15T10:00:00Z"),startedAt:new Date("2024-04-15T10:00:01Z"),completedAt:new Date("2024-04-15T10:00:05Z"),steps:[],logs:[]},{id:"run-2",organizationId:"demo-org",projectId:"demo-project",agentId:"agent-2",agentName:"Code Review Assistant",userId:"user-2",input:{message:"Review PR #123",context:{prNumber:123}},status:"IN_PROGRESS",totalTokens:3500,promptTokens:3000,completionTokens:500,totalIterations:5,queuedAt:new Date("2024-04-15T10:30:00Z"),startedAt:new Date("2024-04-15T10:30:02Z"),steps:[],logs:[]},{id:"run-3",organizationId:"demo-org",projectId:"demo-project",agentId:"agent-1",agentName:"Customer Support Bot",userId:"user-1",input:{message:"What are your business hours?"},output:{response:"Our business hours are 9 AM to 5 PM EST..."},status:"COMPLETED",totalTokens:800,promptTokens:500,completionTokens:300,totalIterations:2,durationMs:2100,estimatedCostUsd:0.0012,queuedAt:new Date("2024-04-15T09:00:00Z"),startedAt:new Date("2024-04-15T09:00:01Z"),completedAt:new Date("2024-04-15T09:00:03Z"),steps:[],logs:[]},{id:"run-4",organizationId:"demo-org",projectId:"demo-project",agentId:"agent-3",agentName:"Data Analyst",userId:"user-3",input:{message:"Generate sales report for Q1"},status:"FAILED",errorMessage:"Database connection timeout",errorCode:"DB_TIMEOUT",totalTokens:2000,promptTokens:1500,completionTokens:500,totalIterations:8,durationMs:45000,queuedAt:new Date("2024-04-14T15:00:00Z"),startedAt:new Date("2024-04-14T15:00:05Z"),completedAt:new Date("2024-04-14T15:00:50Z"),steps:[],logs:[]},{id:"run-5",organizationId:"demo-org",projectId:"demo-project",agentId:"agent-2",agentName:"Code Review Assistant",userId:"user-2",input:{message:"Review PR #120"},output:{response:"Code review complete. 3 suggestions..."},status:"COMPLETED",totalTokens:5200,promptTokens:4000,completionTokens:1200,totalIterations:7,durationMs:15000,estimatedCostUsd:0.0156,queuedAt:new Date("2024-04-14T11:00:00Z"),startedAt:new Date("2024-04-14T11:00:03Z"),completedAt:new Date("2024-04-14T11:00:18Z"),steps:[],logs:[]}];var U=[{id:"runs",label:"Runs",icon:"▶"},{id:"agents",label:"Agents",icon:"\uD83E\uDD16"},{id:"tools",label:"Tools",icon:"\uD83D\uDD27"},{id:"metrics",label:"Metrics",icon:"\uD83D\uDCCA"}];function _(e){let o=e.filter((i)=>i.status==="COMPLETED").length,a=e.reduce((i,r)=>i+r.totalTokens,0),t=e.reduce((i,r)=>i+(r.estimatedCostUsd??0),0),d=e.map((i)=>i.durationMs).filter((i)=>typeof i==="number");return{averageDurationMs:d.length>0?d.reduce((i,r)=>i+r,0)/d.length:0,completedRuns:o,successRate:e.length>0?o/e.length:0,totalCostUsd:t,totalRuns:e.length,totalTokens:a}}function y(e){if(e<1000)return e.toString();if(e<1e6)return`${(e/1000).toFixed(1)}K`;return`${(e/1e6).toFixed(2)}M`}function L(e){if(!e)return"-";if(e<1000)return`${e}ms`;if(e<60000)return`${(e/1000).toFixed(1)}s`;return`${(e/60000).toFixed(1)}m`}function z(e){return new Intl.DateTimeFormat("en-US",{dateStyle:"medium",timeStyle:"short"}).format(e)}function G(e){if(typeof document>"u")return{onPress:e};return{onClick:e}}import{Badge as H}from"@contractspec/lib.ui-kit-web/ui/badge";import{Card as j,CardContent as x}from"@contractspec/lib.ui-kit-web/ui/card";import{Box as ee,HStack as Q,VStack as te}from"@contractspec/lib.ui-kit-web/ui/stack";import{Text as f}from"@contractspec/lib.ui-kit-web/ui/text";import{jsx as u,jsxs as O}from"react/jsx-runtime";function I({getKey:e,items:o,renderItem:a}){return u(Q,{gap:"none",align:"stretch",className:"flex-wrap",children:o.map((t)=>u(ee,{gap:"none",className:"flex w-full min-w-0 p-1.5 sm:w-1/2 lg:w-1/4",children:a(t)},e(t)))})}function v({description:e,name:o,status:a,subtitle:t}){return u(j,{className:"h-full w-full",children:O(x,{className:"flex flex-col gap-2 pt-6",children:[O(Q,{justify:"between",align:"start",children:[O(te,{gap:"xs",className:"flex-1",children:[u(f,{className:"font-semibold text-lg",children:o}),u(f,{className:"text-muted-foreground text-sm",children:t})]}),u(T,{status:a})]}),u(f,{className:"text-muted-foreground text-sm",children:e})]})})}function T({status:e}){return u(H,{variant:e==="FAILED"||e==="CANCELLED"?"destructive":e==="ACTIVE"||e==="COMPLETED"?"secondary":"outline",children:u(f,{className:"font-semibold text-xs",children:e})})}import{Card as K,CardContent as Y,CardHeader as oe,CardTitle as ne}from"@contractspec/lib.ui-kit-web/ui/card";import{VStack as ae}from"@contractspec/lib.ui-kit-web/ui/stack";import{Text as p}from"@contractspec/lib.ui-kit-web/ui/text";import{jsx as s,jsxs as g}from"react/jsx-runtime";function $({metrics:e}){let o=[{label:"Total Runs",value:String(e.totalRuns),hint:`${Math.round(e.successRate*100)}% success`},{label:"Success Rate",value:`${Math.round(e.successRate*100)}%`,hint:"of all runs"},{label:"Total Tokens",value:y(e.totalTokens),hint:"This period"},{label:"Total Cost",value:`$${e.totalCostUsd.toFixed(2)}`,hint:"This period"}];return s(I,{items:o,getKey:(a)=>a.label,renderItem:(a)=>s(K,{className:"h-full w-full",children:g(Y,{className:"flex flex-col gap-1 pt-6",children:[s(p,{className:"text-muted-foreground text-sm",children:a.label}),s(p,{className:"font-bold text-2xl",children:a.value}),s(p,{className:"text-muted-foreground text-sm",children:a.hint})]})})})}function F({agents:e}){return s(I,{items:e,getKey:(o)=>o.id,renderItem:(o)=>s(v,{description:o.description,name:o.name,status:o.status,subtitle:`${o.modelProvider} / ${o.modelName}`})})}function V({tools:e}){return s(I,{items:e,getKey:(o)=>o.id,renderItem:(o)=>s(v,{description:o.description,name:o.name,status:o.status,subtitle:`${o.category} / ${o.implementationType}`})})}function B({metrics:e}){return g(ae,{gap:"md",children:[s(p,{className:"font-semibold text-lg",children:"Usage Analytics"}),g(K,{children:[s(oe,{children:s(ne,{children:s(p,{children:"Run Outcomes"})})}),g(Y,{className:"flex flex-col gap-3",children:[g(p,{children:["Completed: ",e.completedRuns]}),g(p,{children:["Failed: ",e.totalRuns-e.completedRuns]}),g(p,{children:["Average duration: ",(e.averageDurationMs/1000).toFixed(1),"s"]})]})]})]})}import{useContractTable as re}from"@contractspec/lib.presentation-runtime-react";import{Card as ie,CardContent as se}from"@contractspec/lib.ui-kit-web/ui/card";import{DataTable as de}from"@contractspec/lib.ui-kit-web/ui/data-table";import{VStack as ue}from"@contractspec/lib.ui-kit-web/ui/stack";import{Text as h}from"@contractspec/lib.ui-kit-web/ui/text";import{useMemo as pe}from"react";import{jsx as m,jsxs as me}from"react/jsx-runtime";function W({runs:e}){let o=pe(()=>[{id:"queuedAt",header:"Run",label:"Run",accessor:(t)=>t.queuedAt.getTime(),cell:({item:t})=>me(ue,{gap:"xs",children:[m(h,{className:"font-mono text-sm",children:t.id}),m(h,{className:"text-muted-foreground text-xs",children:z(t.queuedAt)})]}),size:180,canSort:!0,canHide:!0},{id:"agentName",header:"Agent",label:"Agent",accessorKey:"agentName",size:220,canSort:!0},{id:"status",header:"Status",label:"Status",accessorKey:"status",cell:({value:t})=>m(T,{status:String(t)}),size:140,canSort:!0},{id:"totalTokens",header:"Tokens",label:"Tokens",accessorKey:"totalTokens",cell:({value:t})=>y(Number(t??0)),align:"right",size:120,canSort:!0},{id:"durationMs",header:"Duration",label:"Duration",accessorKey:"durationMs",cell:({value:t})=>L(typeof t==="number"?t:void 0),align:"right",size:130,canHide:!0}],[]),a=re({data:e,columns:o,initialState:{pagination:{pageIndex:0,pageSize:5}},getRowId:(t)=>t.id});return m(de,{controller:a,toolbar:m(h,{className:"text-muted-foreground text-sm",children:"Run History"}),emptyState:m(ie,{children:m(se,{className:"pt-6",children:m(h,{className:"text-muted-foreground",children:"No runs yet"})})})})}import{Tabs as ce,TabsContent as A,TabsList as ge,TabsTrigger as le}from"@contractspec/lib.design-system";import{createVisualizationModel as ye}from"@contractspec/lib.presentation-runtime-core";import{Button as fe}from"@contractspec/lib.ui-kit-web/ui/button";import{Card as Ie,CardContent as Te,CardDescription as he,CardHeader as Ae,CardTitle as we}from"@contractspec/lib.ui-kit-web/ui/card";import{HStack as De,VStack as w}from"@contractspec/lib.ui-kit-web/ui/stack";import{Text as l}from"@contractspec/lib.ui-kit-web/ui/text";import{Visualization as Me}from"@contractspec/lib.ui-kit-web/ui/visualization";import{useMemo as J}from"react";import{jsx as n,jsxs as c}from"react/jsx-runtime";function Dt({agents:e=N,runs:o=C,showHeaderAction:a=!0,tools:t=k}){let d=J(()=>_(o),[o]),i=J(()=>R(o),[o]);return c(w,{gap:"xl",align:"stretch",children:[c(De,{justify:"between",align:"center",className:"gap-3",children:[n(l,{className:"font-bold text-2xl",children:"AI Agent Console"}),a?n(fe,{...G(()=>{return}),children:n(l,{children:"+ New Agent"})}):null]}),n($,{metrics:d}),c(w,{gap:"md",children:[c(w,{gap:"xs",children:[n(l,{className:"font-semibold text-lg",children:"Operational Visualizations"}),n(l,{className:"text-muted-foreground text-sm",children:"Contract-backed charts derived from recent run activity."})]}),n(w,{gap:"md",children:i.map((r)=>c(Ie,{children:[c(Ae,{children:[n(we,{children:r.title}),n(he,{children:r.description})]}),n(Te,{children:n(Me,{height:r.height,model:ye(r.spec,r.data)})})]},r.key))})]}),c(ce,{defaultValue:"runs",className:"w-full gap-4",children:[n(ge,{className:"h-auto w-full flex-wrap",children:U.map((r)=>n(le,{value:r.id,className:"min-h-8 min-w-24 flex-1",children:c(l,{children:[r.icon," ",r.label]})},r.id))}),n(A,{value:"runs",children:n(W,{runs:o})}),n(A,{value:"agents",children:n(F,{agents:e})}),n(A,{value:"tools",children:n(V,{tools:t})}),n(A,{value:"metrics",children:n(B,{metrics:d})})]})]})}export{Dt as AgentConsolePreview};
@@ -0,0 +1 @@
1
+ import{Badge as G}from"@contractspec/lib.ui-kit-web/ui/badge";import{Card as J,CardContent as L}from"@contractspec/lib.ui-kit-web/ui/card";import{Box as M,HStack as F,VStack as N}from"@contractspec/lib.ui-kit-web/ui/stack";import{Text as z}from"@contractspec/lib.ui-kit-web/ui/text";import{jsx as h,jsxs as E}from"react/jsx-runtime";function W({getKey:f,items:q,renderItem:D}){return h(F,{gap:"none",align:"stretch",className:"flex-wrap",children:q.map((v)=>h(M,{gap:"none",className:"flex w-full min-w-0 p-1.5 sm:w-1/2 lg:w-1/4",children:D(v)},f(v)))})}function X({description:f,name:q,status:D,subtitle:v}){return h(J,{className:"h-full w-full",children:E(L,{className:"flex flex-col gap-2 pt-6",children:[E(F,{justify:"between",align:"start",children:[E(N,{gap:"xs",className:"flex-1",children:[h(z,{className:"font-semibold text-lg",children:q}),h(z,{className:"text-muted-foreground text-sm",children:v})]}),h(O,{status:D})]}),h(z,{className:"text-muted-foreground text-sm",children:f})]})})}function O({status:f}){return h(G,{variant:f==="FAILED"||f==="CANCELLED"?"destructive":f==="ACTIVE"||f==="COMPLETED"?"secondary":"outline",children:h(z,{className:"font-semibold text-xs",children:f})})}export{O as AgentConsoleStatusBadge,W as AgentConsoleResponsiveCards,X as AgentConsoleEntityCard};
@@ -1 +1 @@
1
- var v=[{id:"runs",label:"Runs",icon:"▶"},{id:"agents",label:"Agents",icon:"\uD83E\uDD16"},{id:"tools",label:"Tools",icon:"\uD83D\uDD27"},{id:"metrics",label:"Metrics",icon:"\uD83D\uDCCA"}];function E(e){let o=e.filter((f)=>f.status==="COMPLETED").length,p=e.reduce((f,l)=>f+l.totalTokens,0),d=e.reduce((f,l)=>f+(l.estimatedCostUsd??0),0),A=e.map((f)=>f.durationMs).filter((f)=>typeof f==="number");return{averageDurationMs:A.length>0?A.reduce((f,l)=>f+l,0)/A.length:0,completedRuns:o,successRate:e.length>0?o/e.length:0,totalCostUsd:d,totalRuns:e.length,totalTokens:p}}function b(e){if(e<1000)return e.toString();if(e<1e6)return`${(e/1000).toFixed(1)}K`;return`${(e/1e6).toFixed(2)}M`}function K(e){if(!e)return"-";if(e<1000)return`${e}ms`;if(e<60000)return`${(e/1000).toFixed(1)}s`;return`${(e/60000).toFixed(1)}m`}function h(e){return new Intl.DateTimeFormat("en-US",{dateStyle:"medium",timeStyle:"short"}).format(e)}function w(e){if(typeof document>"u")return{onPress:e};return{onClick:e}}import{Badge as P}from"@contractspec/lib.ui-kit-web/ui/badge";import{Card as _,CardContent as y,CardHeader as R,CardTitle as g}from"@contractspec/lib.ui-kit-web/ui/card";import{HStack as O,VStack as u}from"@contractspec/lib.ui-kit-web/ui/stack";import{Text as i}from"@contractspec/lib.ui-kit-web/ui/text";import{jsx as n,jsxs as r}from"react/jsx-runtime";function C({metrics:e}){let o=[{label:"Total Runs",value:String(e.totalRuns),hint:`${Math.round(e.successRate*100)}% success`},{label:"Success Rate",value:`${Math.round(e.successRate*100)}%`,hint:"of all runs"},{label:"Total Tokens",value:b(e.totalTokens),hint:"This period"},{label:"Total Cost",value:`$${e.totalCostUsd.toFixed(2)}`,hint:"This period"}];return n(O,{gap:"md",className:"flex-wrap",children:o.map((p)=>n(_,{className:"min-w-52 flex-1",children:r(y,{className:"flex flex-col gap-1 pt-6",children:[n(i,{className:"text-muted-foreground text-sm",children:p.label}),n(i,{className:"font-bold text-2xl",children:p.value}),n(i,{className:"text-muted-foreground text-sm",children:p.hint})]})},p.label))})}function L({agents:e}){return n(u,{gap:"md",children:e.map((o)=>n(_,{children:r(y,{className:"flex flex-col gap-2 pt-6",children:[r(O,{justify:"between",align:"start",children:[r(u,{gap:"xs",className:"flex-1",children:[n(i,{className:"font-semibold text-lg",children:o.name}),r(i,{className:"text-muted-foreground text-sm",children:[o.modelProvider," / ",o.modelName]})]}),n(M,{status:o.status})]}),n(i,{className:"text-muted-foreground text-sm",children:o.description})]})},o.id))})}function G({tools:e}){return n(u,{gap:"md",children:e.map((o)=>n(_,{children:r(y,{className:"flex flex-col gap-2 pt-6",children:[r(O,{justify:"between",align:"start",children:[r(u,{gap:"xs",className:"flex-1",children:[n(i,{className:"font-semibold text-lg",children:o.name}),r(i,{className:"text-muted-foreground text-sm",children:[o.category," / ",o.implementationType]})]}),n(M,{status:o.status})]}),n(i,{className:"text-muted-foreground text-sm",children:o.description})]})},o.id))})}function I({metrics:e}){return r(u,{gap:"md",children:[n(i,{className:"font-semibold text-lg",children:"Usage Analytics"}),r(_,{children:[n(R,{children:n(g,{children:"Run Outcomes"})}),r(y,{className:"flex flex-col gap-3",children:[r(i,{children:["Completed: ",e.completedRuns]}),r(i,{children:["Failed: ",e.totalRuns-e.completedRuns]}),r(i,{children:["Average duration: ",(e.averageDurationMs/1000).toFixed(1),"s"]})]})]})]})}function M({status:e}){return n(P,{variant:e==="FAILED"||e==="CANCELLED"?"destructive":e==="ACTIVE"||e==="COMPLETED"?"secondary":"outline",children:n(i,{className:"font-semibold text-xs",children:e})})}export{G as AgentConsoleToolCards,M as AgentConsoleStatusBadge,I as AgentConsoleMetricsPanel,C as AgentConsoleMetricCards,L as AgentConsoleAgentCards};
1
+ var v=[{id:"runs",label:"Runs",icon:"▶"},{id:"agents",label:"Agents",icon:"\uD83E\uDD16"},{id:"tools",label:"Tools",icon:"\uD83D\uDD27"},{id:"metrics",label:"Metrics",icon:"\uD83D\uDCCA"}];function w(n){let o=n.filter((p)=>p.status==="COMPLETED").length,f=n.reduce((p,O)=>p+O.totalTokens,0),l=n.reduce((p,O)=>p+(O.estimatedCostUsd??0),0),y=n.map((p)=>p.durationMs).filter((p)=>typeof p==="number");return{averageDurationMs:y.length>0?y.reduce((p,O)=>p+O,0)/y.length:0,completedRuns:o,successRate:n.length>0?o/n.length:0,totalCostUsd:l,totalRuns:n.length,totalTokens:f}}function A(n){if(n<1000)return n.toString();if(n<1e6)return`${(n/1000).toFixed(1)}K`;return`${(n/1e6).toFixed(2)}M`}function G(n){if(!n)return"-";if(n<1000)return`${n}ms`;if(n<60000)return`${(n/1000).toFixed(1)}s`;return`${(n/60000).toFixed(1)}m`}function g(n){return new Intl.DateTimeFormat("en-US",{dateStyle:"medium",timeStyle:"short"}).format(n)}function T(n){if(typeof document>"u")return{onPress:n};return{onClick:n}}import{Badge as N}from"@contractspec/lib.ui-kit-web/ui/badge";import{Card as R,CardContent as F}from"@contractspec/lib.ui-kit-web/ui/card";import{Box as K,HStack as S,VStack as U}from"@contractspec/lib.ui-kit-web/ui/stack";import{Text as M}from"@contractspec/lib.ui-kit-web/ui/text";import{jsx as u,jsxs as P}from"react/jsx-runtime";function i({getKey:n,items:o,renderItem:f}){return u(S,{gap:"none",align:"stretch",className:"flex-wrap",children:o.map((l)=>u(K,{gap:"none",className:"flex w-full min-w-0 p-1.5 sm:w-1/2 lg:w-1/4",children:f(l)},n(l)))})}function b({description:n,name:o,status:f,subtitle:l}){return u(R,{className:"h-full w-full",children:P(F,{className:"flex flex-col gap-2 pt-6",children:[P(S,{justify:"between",align:"start",children:[P(U,{gap:"xs",className:"flex-1",children:[u(M,{className:"font-semibold text-lg",children:o}),u(M,{className:"text-muted-foreground text-sm",children:l})]}),u(h,{status:f})]}),u(M,{className:"text-muted-foreground text-sm",children:n})]})})}function h({status:n}){return u(N,{variant:n==="FAILED"||n==="CANCELLED"?"destructive":n==="ACTIVE"||n==="COMPLETED"?"secondary":"outline",children:u(M,{className:"font-semibold text-xs",children:n})})}import{Card as D,CardContent as E,CardHeader as $,CardTitle as L}from"@contractspec/lib.ui-kit-web/ui/card";import{VStack as d}from"@contractspec/lib.ui-kit-web/ui/stack";import{Text as _}from"@contractspec/lib.ui-kit-web/ui/text";import{jsx as r,jsxs as e}from"react/jsx-runtime";function c({metrics:n}){let o=[{label:"Total Runs",value:String(n.totalRuns),hint:`${Math.round(n.successRate*100)}% success`},{label:"Success Rate",value:`${Math.round(n.successRate*100)}%`,hint:"of all runs"},{label:"Total Tokens",value:A(n.totalTokens),hint:"This period"},{label:"Total Cost",value:`$${n.totalCostUsd.toFixed(2)}`,hint:"This period"}];return r(i,{items:o,getKey:(f)=>f.label,renderItem:(f)=>r(D,{className:"h-full w-full",children:e(E,{className:"flex flex-col gap-1 pt-6",children:[r(_,{className:"text-muted-foreground text-sm",children:f.label}),r(_,{className:"font-bold text-2xl",children:f.value}),r(_,{className:"text-muted-foreground text-sm",children:f.hint})]})})})}function m({agents:n}){return r(i,{items:n,getKey:(o)=>o.id,renderItem:(o)=>r(b,{description:o.description,name:o.name,status:o.status,subtitle:`${o.modelProvider} / ${o.modelName}`})})}function C({tools:n}){return r(i,{items:n,getKey:(o)=>o.id,renderItem:(o)=>r(b,{description:o.description,name:o.name,status:o.status,subtitle:`${o.category} / ${o.implementationType}`})})}function k({metrics:n}){return e(d,{gap:"md",children:[r(_,{className:"font-semibold text-lg",children:"Usage Analytics"}),e(D,{children:[r($,{children:r(L,{children:r(_,{children:"Run Outcomes"})})}),e(E,{className:"flex flex-col gap-3",children:[e(_,{children:["Completed: ",n.completedRuns]}),e(_,{children:["Failed: ",n.totalRuns-n.completedRuns]}),e(_,{children:["Average duration: ",(n.averageDurationMs/1000).toFixed(1),"s"]})]})]})]})}export{C as AgentConsoleToolCards,h as AgentConsoleStatusBadge,k as AgentConsoleMetricsPanel,c as AgentConsoleMetricCards,m as AgentConsoleAgentCards};
@@ -1 +1 @@
1
- var W=[{id:"runs",label:"Runs",icon:"▶"},{id:"agents",label:"Agents",icon:"\uD83E\uDD16"},{id:"tools",label:"Tools",icon:"\uD83D\uDD27"},{id:"metrics",label:"Metrics",icon:"\uD83D\uDCCA"}];function q(n){let o=n.filter((_)=>_.status==="COMPLETED").length,y=n.reduce((_,M)=>_+M.totalTokens,0),i=n.reduce((_,M)=>_+(M.estimatedCostUsd??0),0),A=n.map((_)=>_.durationMs).filter((_)=>typeof _==="number");return{averageDurationMs:A.length>0?A.reduce((_,M)=>_+M,0)/A.length:0,completedRuns:o,successRate:n.length>0?o/n.length:0,totalCostUsd:i,totalRuns:n.length,totalTokens:y}}function R(n){if(n<1000)return n.toString();if(n<1e6)return`${(n/1000).toFixed(1)}K`;return`${(n/1e6).toFixed(2)}M`}function h(n){if(!n)return"-";if(n<1000)return`${n}ms`;if(n<60000)return`${(n/1000).toFixed(1)}s`;return`${(n/60000).toFixed(1)}m`}function N(n){return new Intl.DateTimeFormat("en-US",{dateStyle:"medium",timeStyle:"short"}).format(n)}function u(n){if(typeof document>"u")return{onPress:n};return{onClick:n}}import{Badge as F}from"@contractspec/lib.ui-kit-web/ui/badge";import{Card as b,CardContent as E,CardHeader as U,CardTitle as $}from"@contractspec/lib.ui-kit-web/ui/card";import{HStack as K,VStack as e}from"@contractspec/lib.ui-kit-web/ui/stack";import{Text as f}from"@contractspec/lib.ui-kit-web/ui/text";import{jsx as r,jsxs as p}from"react/jsx-runtime";function Z({metrics:n}){let o=[{label:"Total Runs",value:String(n.totalRuns),hint:`${Math.round(n.successRate*100)}% success`},{label:"Success Rate",value:`${Math.round(n.successRate*100)}%`,hint:"of all runs"},{label:"Total Tokens",value:R(n.totalTokens),hint:"This period"},{label:"Total Cost",value:`$${n.totalCostUsd.toFixed(2)}`,hint:"This period"}];return r(K,{gap:"md",className:"flex-wrap",children:o.map((y)=>r(b,{className:"min-w-52 flex-1",children:p(E,{className:"flex flex-col gap-1 pt-6",children:[r(f,{className:"text-muted-foreground text-sm",children:y.label}),r(f,{className:"font-bold text-2xl",children:y.value}),r(f,{className:"text-muted-foreground text-sm",children:y.hint})]})},y.label))})}function v({agents:n}){return r(e,{gap:"md",children:n.map((o)=>r(b,{children:p(E,{className:"flex flex-col gap-2 pt-6",children:[p(K,{justify:"between",align:"start",children:[p(e,{gap:"xs",className:"flex-1",children:[r(f,{className:"font-semibold text-lg",children:o.name}),p(f,{className:"text-muted-foreground text-sm",children:[o.modelProvider," / ",o.modelName]})]}),r(P,{status:o.status})]}),r(f,{className:"text-muted-foreground text-sm",children:o.description})]})},o.id))})}function B({tools:n}){return r(e,{gap:"md",children:n.map((o)=>r(b,{children:p(E,{className:"flex flex-col gap-2 pt-6",children:[p(K,{justify:"between",align:"start",children:[p(e,{gap:"xs",className:"flex-1",children:[r(f,{className:"font-semibold text-lg",children:o.name}),p(f,{className:"text-muted-foreground text-sm",children:[o.category," / ",o.implementationType]})]}),r(P,{status:o.status})]}),r(f,{className:"text-muted-foreground text-sm",children:o.description})]})},o.id))})}function H({metrics:n}){return p(e,{gap:"md",children:[r(f,{className:"font-semibold text-lg",children:"Usage Analytics"}),p(b,{children:[r(U,{children:r($,{children:"Run Outcomes"})}),p(E,{className:"flex flex-col gap-3",children:[p(f,{children:["Completed: ",n.completedRuns]}),p(f,{children:["Failed: ",n.totalRuns-n.completedRuns]}),p(f,{children:["Average duration: ",(n.averageDurationMs/1000).toFixed(1),"s"]})]})]})]})}function P({status:n}){return r(F,{variant:n==="FAILED"||n==="CANCELLED"?"destructive":n==="ACTIVE"||n==="COMPLETED"?"secondary":"outline",children:r(f,{className:"font-semibold text-xs",children:n})})}import{useContractTable as L}from"@contractspec/lib.presentation-runtime-react";import{Card as w,CardContent as D}from"@contractspec/lib.ui-kit-web/ui/card";import{DataTable as G}from"@contractspec/lib.ui-kit-web/ui/data-table";import{VStack as l}from"@contractspec/lib.ui-kit-web/ui/stack";import{Text as d}from"@contractspec/lib.ui-kit-web/ui/text";import{useMemo as I}from"react";import{jsx as O,jsxs as g}from"react/jsx-runtime";function s({runs:n}){let o=I(()=>[{id:"queuedAt",header:"Run",label:"Run",accessor:(i)=>i.queuedAt.getTime(),cell:({item:i})=>g(l,{gap:"xs",children:[O(d,{className:"font-mono text-sm",children:i.id}),O(d,{className:"text-muted-foreground text-xs",children:N(i.queuedAt)})]}),size:180,canSort:!0,canHide:!0},{id:"agentName",header:"Agent",label:"Agent",accessorKey:"agentName",size:220,canSort:!0},{id:"status",header:"Status",label:"Status",accessorKey:"status",cell:({value:i})=>O(P,{status:String(i)}),size:140,canSort:!0},{id:"totalTokens",header:"Tokens",label:"Tokens",accessorKey:"totalTokens",cell:({value:i})=>R(Number(i??0)),align:"right",size:120,canSort:!0},{id:"durationMs",header:"Duration",label:"Duration",accessorKey:"durationMs",cell:({value:i})=>h(typeof i==="number"?i:void 0),align:"right",size:130,canHide:!0}],[]),y=L({data:n,columns:o,initialState:{pagination:{pageIndex:0,pageSize:5}},getRowId:(i)=>i.id});return O(G,{controller:y,toolbar:O(d,{className:"text-muted-foreground text-sm",children:"Run History"}),emptyState:O(w,{children:O(D,{className:"pt-6",children:O(d,{className:"text-muted-foreground",children:"No runs yet"})})})})}export{s as AgentConsoleRunHistoryTable};
1
+ var g=[{id:"runs",label:"Runs",icon:"▶"},{id:"agents",label:"Agents",icon:"\uD83E\uDD16"},{id:"tools",label:"Tools",icon:"\uD83D\uDD27"},{id:"metrics",label:"Metrics",icon:"\uD83D\uDCCA"}];function u(f){let p=f.filter((o)=>o.status==="COMPLETED").length,O=f.reduce((o,E)=>o+E.totalTokens,0),_=f.reduce((o,E)=>o+(E.estimatedCostUsd??0),0),S=f.map((o)=>o.durationMs).filter((o)=>typeof o==="number");return{averageDurationMs:S.length>0?S.reduce((o,E)=>o+E,0)/S.length:0,completedRuns:p,successRate:f.length>0?p/f.length:0,totalCostUsd:_,totalRuns:f.length,totalTokens:O}}function N(f){if(f<1000)return f.toString();if(f<1e6)return`${(f/1000).toFixed(1)}K`;return`${(f/1e6).toFixed(2)}M`}function b(f){if(!f)return"-";if(f<1000)return`${f}ms`;if(f<60000)return`${(f/1000).toFixed(1)}s`;return`${(f/60000).toFixed(1)}m`}function L(f){return new Intl.DateTimeFormat("en-US",{dateStyle:"medium",timeStyle:"short"}).format(f)}function T(f){if(typeof document>"u")return{onPress:f};return{onClick:f}}import{Badge as W}from"@contractspec/lib.ui-kit-web/ui/badge";import{Card as q,CardContent as w}from"@contractspec/lib.ui-kit-web/ui/card";import{Box as z,HStack as D,VStack as I}from"@contractspec/lib.ui-kit-web/ui/stack";import{Text as P}from"@contractspec/lib.ui-kit-web/ui/text";import{jsx as r,jsxs as U}from"react/jsx-runtime";function R({getKey:f,items:p,renderItem:O}){return r(D,{gap:"none",align:"stretch",className:"flex-wrap",children:p.map((_)=>r(z,{gap:"none",className:"flex w-full min-w-0 p-1.5 sm:w-1/2 lg:w-1/4",children:O(_)},f(_)))})}function $({description:f,name:p,status:O,subtitle:_}){return r(q,{className:"h-full w-full",children:U(w,{className:"flex flex-col gap-2 pt-6",children:[U(D,{justify:"between",align:"start",children:[U(I,{gap:"xs",className:"flex-1",children:[r(P,{className:"font-semibold text-lg",children:p}),r(P,{className:"text-muted-foreground text-sm",children:_})]}),r(F,{status:O})]}),r(P,{className:"text-muted-foreground text-sm",children:f})]})})}function F({status:f}){return r(W,{variant:f==="FAILED"||f==="CANCELLED"?"destructive":f==="ACTIVE"||f==="COMPLETED"?"secondary":"outline",children:r(P,{className:"font-semibold text-xs",children:f})})}import{Card as G,CardContent as A,CardHeader as J,CardTitle as Q}from"@contractspec/lib.ui-kit-web/ui/card";import{VStack as X}from"@contractspec/lib.ui-kit-web/ui/stack";import{Text as y}from"@contractspec/lib.ui-kit-web/ui/text";import{jsx as M,jsxs as n}from"react/jsx-runtime";function f0({metrics:f}){let p=[{label:"Total Runs",value:String(f.totalRuns),hint:`${Math.round(f.successRate*100)}% success`},{label:"Success Rate",value:`${Math.round(f.successRate*100)}%`,hint:"of all runs"},{label:"Total Tokens",value:N(f.totalTokens),hint:"This period"},{label:"Total Cost",value:`$${f.totalCostUsd.toFixed(2)}`,hint:"This period"}];return M(R,{items:p,getKey:(O)=>O.label,renderItem:(O)=>M(G,{className:"h-full w-full",children:n(A,{className:"flex flex-col gap-1 pt-6",children:[M(y,{className:"text-muted-foreground text-sm",children:O.label}),M(y,{className:"font-bold text-2xl",children:O.value}),M(y,{className:"text-muted-foreground text-sm",children:O.hint})]})})})}function p0({agents:f}){return M(R,{items:f,getKey:(p)=>p.id,renderItem:(p)=>M($,{description:p.description,name:p.name,status:p.status,subtitle:`${p.modelProvider} / ${p.modelName}`})})}function _0({tools:f}){return M(R,{items:f,getKey:(p)=>p.id,renderItem:(p)=>M($,{description:p.description,name:p.name,status:p.status,subtitle:`${p.category} / ${p.implementationType}`})})}function O0({metrics:f}){return n(X,{gap:"md",children:[M(y,{className:"font-semibold text-lg",children:"Usage Analytics"}),n(G,{children:[M(J,{children:M(Q,{children:M(y,{children:"Run Outcomes"})})}),n(A,{className:"flex flex-col gap-3",children:[n(y,{children:["Completed: ",f.completedRuns]}),n(y,{children:["Failed: ",f.totalRuns-f.completedRuns]}),n(y,{children:["Average duration: ",(f.averageDurationMs/1000).toFixed(1),"s"]})]})]})]})}import{useContractTable as Y}from"@contractspec/lib.presentation-runtime-react";import{Card as Z,CardContent as d}from"@contractspec/lib.ui-kit-web/ui/card";import{DataTable as i}from"@contractspec/lib.ui-kit-web/ui/data-table";import{VStack as V}from"@contractspec/lib.ui-kit-web/ui/stack";import{Text as K}from"@contractspec/lib.ui-kit-web/ui/text";import{useMemo as B}from"react";import{jsx as h,jsxs as H}from"react/jsx-runtime";function K0({runs:f}){let p=B(()=>[{id:"queuedAt",header:"Run",label:"Run",accessor:(_)=>_.queuedAt.getTime(),cell:({item:_})=>H(V,{gap:"xs",children:[h(K,{className:"font-mono text-sm",children:_.id}),h(K,{className:"text-muted-foreground text-xs",children:L(_.queuedAt)})]}),size:180,canSort:!0,canHide:!0},{id:"agentName",header:"Agent",label:"Agent",accessorKey:"agentName",size:220,canSort:!0},{id:"status",header:"Status",label:"Status",accessorKey:"status",cell:({value:_})=>h(F,{status:String(_)}),size:140,canSort:!0},{id:"totalTokens",header:"Tokens",label:"Tokens",accessorKey:"totalTokens",cell:({value:_})=>N(Number(_??0)),align:"right",size:120,canSort:!0},{id:"durationMs",header:"Duration",label:"Duration",accessorKey:"durationMs",cell:({value:_})=>b(typeof _==="number"?_:void 0),align:"right",size:130,canHide:!0}],[]),O=Y({data:f,columns:p,initialState:{pagination:{pageIndex:0,pageSize:5}},getRowId:(_)=>_.id});return h(i,{controller:O,toolbar:h(K,{className:"text-muted-foreground text-sm",children:"Run History"}),emptyState:h(Z,{children:h(d,{className:"pt-6",children:h(K,{className:"text-muted-foreground",children:"No runs yet"})})})})}export{K0 as AgentConsoleRunHistoryTable};
@@ -1 +1 @@
1
- import{defineVisualization as D,VisualizationRegistry as H}from"@contractspec/lib.contracts-spec/visualizations";var M={key:"agent.run.list",version:"1.0.0"},b={version:"1.0.0",domain:"ai-ops",stability:"experimental",owners:["@example.agent-console"],tags:["agent-console","visualization","operations"]},P=D({meta:{...b,key:"agent-console.visualization.run-status",title:"Run Status Breakdown",description:"Distribution of run outcomes across the current sample.",goal:"Make operational success and failure mix visible at a glance.",context:"Agent operations overview."},source:{primary:M,resultPath:"data"},visualization:{kind:"pie",nameDimension:"status",valueMeasure:"runs",dimensions:[{key:"status",label:"Status",dataPath:"status",type:"category"}],measures:[{key:"runs",label:"Runs",dataPath:"runs",format:"number"}],table:{caption:"Run counts by status."}}}),Z=D({meta:{...b,key:"agent-console.visualization.run-activity",title:"Recent Run Activity",description:"Daily run volume across the current sample.",goal:"Show whether agent activity is rising or slowing down.",context:"Operations trend monitoring."},source:{primary:M,resultPath:"data"},visualization:{kind:"cartesian",variant:"line",xDimension:"day",yMeasures:["runs"],dimensions:[{key:"day",label:"Day",dataPath:"day",type:"time"}],measures:[{key:"runs",label:"Runs",dataPath:"runs",format:"number",color:"#0f766e"}],table:{caption:"Daily run counts."}}}),O=D({meta:{...b,key:"agent-console.visualization.run-efficiency",title:"Duration vs Tokens",description:"Scatter chart comparing token consumption and runtime.",goal:"Reveal outlier runs that are slow relative to their token usage.",context:"Operational performance diagnostics."},source:{primary:M,resultPath:"data"},visualization:{kind:"cartesian",variant:"scatter",xDimension:"totalTokens",yMeasures:["durationMs"],dimensions:[{key:"totalTokens",label:"Total Tokens",dataPath:"totalTokens",type:"number"}],measures:[{key:"durationMs",label:"Duration",dataPath:"durationMs",format:"duration",color:"#7c3aed"},{key:"estimatedCostUsd",label:"Cost",dataPath:"estimatedCostUsd",format:"currency"}],series:[{key:"runs",label:"Runs",measure:"durationMs",type:"scatter",color:"#7c3aed"}],table:{caption:"Run duration versus token usage."}}}),v=[P,Z,O],Te=new H([...v]),we=v.map((e)=>({key:e.meta.key,version:e.meta.version}));function E(e){if(!e)return"unknown";return e.toISOString().slice(0,10)}function R(e){let o=new Map,s=new Map;for(let t of e)o.set(t.status,(o.get(t.status)??0)+1),s.set(E(t.startedAt??t.queuedAt),(s.get(E(t.startedAt??t.queuedAt))??0)+1);return[{key:"run-status",spec:P,data:{data:Array.from(o.entries()).map(([t,a])=>({status:t,runs:a}))},title:"Run Status Breakdown",description:"Completed, failed, running, and cancelled runs in the sample.",height:260},{key:"run-activity",spec:Z,data:{data:Array.from(s.entries()).sort(([t],[a])=>t.localeCompare(a)).map(([t,a])=>({day:t,runs:a}))},title:"Recent Run Activity",description:"Daily run volume derived from run start times."},{key:"run-efficiency",spec:O,data:{data:e.filter((t)=>typeof t.durationMs==="number").map((t)=>({totalTokens:t.totalTokens,durationMs:t.durationMs??0,estimatedCostUsd:t.estimatedCostUsd}))},title:"Duration vs Tokens",description:"Operational scatter plot for spotting inefficient runs."}]}var S=[{id:"agent-1",organizationId:"demo-org",name:"Customer Support Bot",slug:"customer-support-bot",description:"Handles tier-1 customer inquiries and routes complex issues.",status:"ACTIVE",modelProvider:"OPENAI",modelName:"gpt-4o-mini",modelConfig:{temperature:0.7},systemPrompt:"You are a helpful customer support assistant.",toolChoice:"auto",maxIterations:10,timeoutMs:120000,version:"1.0.0",tags:["support","tier-1"],createdAt:new Date("2024-01-15T10:00:00Z"),updatedAt:new Date("2024-03-20T14:30:00Z")},{id:"agent-2",organizationId:"demo-org",name:"Code Review Assistant",slug:"code-review-assistant",description:"Reviews pull requests and provides actionable feedback.",status:"ACTIVE",modelProvider:"ANTHROPIC",modelName:"claude-sonnet-4-20250514",modelConfig:{temperature:0.3},systemPrompt:"You are a code review expert.",toolChoice:"auto",maxIterations:15,timeoutMs:180000,version:"2.1.0",tags:["code","review","dev"],createdAt:new Date("2024-02-10T09:00:00Z"),updatedAt:new Date("2024-04-05T11:15:00Z")},{id:"agent-3",organizationId:"demo-org",name:"Data Analyst",slug:"data-analyst",description:"Queries databases and generates insights from data.",status:"PAUSED",modelProvider:"OPENAI",modelName:"gpt-4o",modelConfig:{temperature:0.5},systemPrompt:"You are a data analyst expert in SQL and analytics.",toolChoice:"required",maxIterations:20,timeoutMs:300000,version:"1.2.0",tags:["data","analytics","sql"],createdAt:new Date("2024-03-01T08:00:00Z"),updatedAt:new Date("2024-04-10T16:45:00Z")},{id:"agent-4",organizationId:"demo-org",name:"Meeting Scheduler",slug:"meeting-scheduler",description:"Schedules meetings and manages calendar conflicts.",status:"DRAFT",modelProvider:"GOOGLE",modelName:"gemini-2.0-flash",modelConfig:{temperature:0.2},systemPrompt:"You help schedule and organize meetings efficiently.",toolChoice:"auto",maxIterations:5,timeoutMs:60000,version:"0.1.0",tags:["calendar","scheduling"],createdAt:new Date("2024-04-01T12:00:00Z"),updatedAt:new Date("2024-04-01T12:00:00Z")}];var N=[{id:"tool-1",organizationId:"demo-org",name:"Web Search",slug:"web-search",description:"Search the web for real-time information using Brave API.",category:"RETRIEVAL",status:"ACTIVE",parametersSchema:{type:"object",properties:{query:{type:"string",description:"Search query"},numResults:{type:"number",default:10}},required:["query"]},outputSchema:{type:"array",items:{type:"object"}},implementationType:"http",implementationConfig:{url:"https://api.brave.com/search",method:"GET"},maxInvocationsPerMinute:60,timeoutMs:30000,version:"1.0.0",tags:["search","web"],createdAt:new Date("2024-01-01T00:00:00Z"),updatedAt:new Date("2024-02-15T10:00:00Z")},{id:"tool-2",organizationId:"demo-org",name:"SQL Query",slug:"sql-query",description:"Execute read-only SQL queries against the data warehouse.",category:"RETRIEVAL",status:"ACTIVE",parametersSchema:{type:"object",properties:{query:{type:"string",description:"SQL query"},maxRows:{type:"number",default:100}},required:["query"]},outputSchema:{type:"object"},implementationType:"function",implementationConfig:{handler:"executeSqlQuery"},maxInvocationsPerMinute:30,timeoutMs:60000,version:"1.1.0",tags:["sql","database"],createdAt:new Date("2024-01-05T00:00:00Z"),updatedAt:new Date("2024-03-10T14:00:00Z")},{id:"tool-3",organizationId:"demo-org",name:"Email Sender",slug:"email-sender",description:"Send emails via SMTP or API.",category:"COMMUNICATION",status:"ACTIVE",parametersSchema:{type:"object",properties:{to:{type:"string"},subject:{type:"string"},body:{type:"string"}},required:["to","subject","body"]},implementationType:"http",implementationConfig:{url:"/api/send-email",method:"POST"},maxInvocationsPerMinute:10,timeoutMs:30000,version:"1.0.0",tags:["email","communication"],createdAt:new Date("2024-02-01T00:00:00Z"),updatedAt:new Date("2024-02-01T00:00:00Z")},{id:"tool-4",organizationId:"demo-org",name:"GitHub Integration",slug:"github-integration",description:"Interact with GitHub repositories, PRs, and issues.",category:"INTEGRATION",status:"ACTIVE",parametersSchema:{type:"object",properties:{action:{type:"string",enum:["list_prs","get_pr","create_comment"]},repo:{type:"string"},params:{type:"object"}},required:["action","repo"]},implementationType:"http",implementationConfig:{url:"https://api.github.com",auth:"token"},maxInvocationsPerMinute:100,timeoutMs:15000,version:"2.0.0",tags:["github","integration","code"],createdAt:new Date("2024-02-20T00:00:00Z"),updatedAt:new Date("2024-04-01T09:00:00Z")},{id:"tool-5",organizationId:"demo-org",name:"Calculator",slug:"calculator",description:"Perform mathematical calculations.",category:"COMPUTATION",status:"ACTIVE",parametersSchema:{type:"object",properties:{expression:{type:"string",description:"Math expression to evaluate"}},required:["expression"]},outputSchema:{type:"object",properties:{result:{type:"number"}}},implementationType:"function",implementationConfig:{handler:"evaluateMath"},timeoutMs:5000,version:"1.0.0",tags:["math","utility"],createdAt:new Date("2024-01-10T00:00:00Z"),updatedAt:new Date("2024-01-10T00:00:00Z")}];var k=[{id:"run-1",organizationId:"demo-org",projectId:"demo-project",agentId:"agent-1",agentName:"Customer Support Bot",userId:"user-1",sessionId:"session-1",input:{message:"How do I reset my password?",context:{}},output:{response:"You can reset your password by clicking..."},status:"COMPLETED",totalTokens:1250,promptTokens:800,completionTokens:450,totalIterations:3,durationMs:4500,estimatedCostUsd:0.0025,queuedAt:new Date("2024-04-15T10:00:00Z"),startedAt:new Date("2024-04-15T10:00:01Z"),completedAt:new Date("2024-04-15T10:00:05Z"),steps:[],logs:[]},{id:"run-2",organizationId:"demo-org",projectId:"demo-project",agentId:"agent-2",agentName:"Code Review Assistant",userId:"user-2",input:{message:"Review PR #123",context:{prNumber:123}},status:"IN_PROGRESS",totalTokens:3500,promptTokens:3000,completionTokens:500,totalIterations:5,queuedAt:new Date("2024-04-15T10:30:00Z"),startedAt:new Date("2024-04-15T10:30:02Z"),steps:[],logs:[]},{id:"run-3",organizationId:"demo-org",projectId:"demo-project",agentId:"agent-1",agentName:"Customer Support Bot",userId:"user-1",input:{message:"What are your business hours?"},output:{response:"Our business hours are 9 AM to 5 PM EST..."},status:"COMPLETED",totalTokens:800,promptTokens:500,completionTokens:300,totalIterations:2,durationMs:2100,estimatedCostUsd:0.0012,queuedAt:new Date("2024-04-15T09:00:00Z"),startedAt:new Date("2024-04-15T09:00:01Z"),completedAt:new Date("2024-04-15T09:00:03Z"),steps:[],logs:[]},{id:"run-4",organizationId:"demo-org",projectId:"demo-project",agentId:"agent-3",agentName:"Data Analyst",userId:"user-3",input:{message:"Generate sales report for Q1"},status:"FAILED",errorMessage:"Database connection timeout",errorCode:"DB_TIMEOUT",totalTokens:2000,promptTokens:1500,completionTokens:500,totalIterations:8,durationMs:45000,queuedAt:new Date("2024-04-14T15:00:00Z"),startedAt:new Date("2024-04-14T15:00:05Z"),completedAt:new Date("2024-04-14T15:00:50Z"),steps:[],logs:[]},{id:"run-5",organizationId:"demo-org",projectId:"demo-project",agentId:"agent-2",agentName:"Code Review Assistant",userId:"user-2",input:{message:"Review PR #120"},output:{response:"Code review complete. 3 suggestions..."},status:"COMPLETED",totalTokens:5200,promptTokens:4000,completionTokens:1200,totalIterations:7,durationMs:15000,estimatedCostUsd:0.0156,queuedAt:new Date("2024-04-14T11:00:00Z"),startedAt:new Date("2024-04-14T11:00:03Z"),completedAt:new Date("2024-04-14T11:00:18Z"),steps:[],logs:[]}];var U=[{id:"runs",label:"Runs",icon:"▶"},{id:"agents",label:"Agents",icon:"\uD83E\uDD16"},{id:"tools",label:"Tools",icon:"\uD83D\uDD27"},{id:"metrics",label:"Metrics",icon:"\uD83D\uDCCA"}];function _(e){let o=e.filter((p)=>p.status==="COMPLETED").length,s=e.reduce((p,m)=>p+m.totalTokens,0),t=e.reduce((p,m)=>p+(m.estimatedCostUsd??0),0),a=e.map((p)=>p.durationMs).filter((p)=>typeof p==="number");return{averageDurationMs:a.length>0?a.reduce((p,m)=>p+m,0)/a.length:0,completedRuns:o,successRate:e.length>0?o/e.length:0,totalCostUsd:t,totalRuns:e.length,totalTokens:s}}function f(e){if(e<1000)return e.toString();if(e<1e6)return`${(e/1000).toFixed(1)}K`;return`${(e/1e6).toFixed(2)}M`}function z(e){if(!e)return"-";if(e<1000)return`${e}ms`;if(e<60000)return`${(e/1000).toFixed(1)}s`;return`${(e/60000).toFixed(1)}m`}function G(e){return new Intl.DateTimeFormat("en-US",{dateStyle:"medium",timeStyle:"short"}).format(e)}function q(e){if(typeof document>"u")return{onPress:e};return{onClick:e}}import{Badge as j}from"@contractspec/lib.ui-kit-web/ui/badge";import{Card as I,CardContent as A,CardHeader as x,CardTitle as ee}from"@contractspec/lib.ui-kit-web/ui/card";import{HStack as C,VStack as l}from"@contractspec/lib.ui-kit-web/ui/stack";import{Text as d}from"@contractspec/lib.ui-kit-web/ui/text";import{jsx as n,jsxs as i}from"react/jsx-runtime";function L({metrics:e}){let o=[{label:"Total Runs",value:String(e.totalRuns),hint:`${Math.round(e.successRate*100)}% success`},{label:"Success Rate",value:`${Math.round(e.successRate*100)}%`,hint:"of all runs"},{label:"Total Tokens",value:f(e.totalTokens),hint:"This period"},{label:"Total Cost",value:`$${e.totalCostUsd.toFixed(2)}`,hint:"This period"}];return n(C,{gap:"md",className:"flex-wrap",children:o.map((s)=>n(I,{className:"min-w-52 flex-1",children:i(A,{className:"flex flex-col gap-1 pt-6",children:[n(d,{className:"text-muted-foreground text-sm",children:s.label}),n(d,{className:"font-bold text-2xl",children:s.value}),n(d,{className:"text-muted-foreground text-sm",children:s.hint})]})},s.label))})}function K({agents:e}){return n(l,{gap:"md",children:e.map((o)=>n(I,{children:i(A,{className:"flex flex-col gap-2 pt-6",children:[i(C,{justify:"between",align:"start",children:[i(l,{gap:"xs",className:"flex-1",children:[n(d,{className:"font-semibold text-lg",children:o.name}),i(d,{className:"text-muted-foreground text-sm",children:[o.modelProvider," / ",o.modelName]})]}),n(h,{status:o.status})]}),n(d,{className:"text-muted-foreground text-sm",children:o.description})]})},o.id))})}function Q({tools:e}){return n(l,{gap:"md",children:e.map((o)=>n(I,{children:i(A,{className:"flex flex-col gap-2 pt-6",children:[i(C,{justify:"between",align:"start",children:[i(l,{gap:"xs",className:"flex-1",children:[n(d,{className:"font-semibold text-lg",children:o.name}),i(d,{className:"text-muted-foreground text-sm",children:[o.category," / ",o.implementationType]})]}),n(h,{status:o.status})]}),n(d,{className:"text-muted-foreground text-sm",children:o.description})]})},o.id))})}function Y({metrics:e}){return i(l,{gap:"md",children:[n(d,{className:"font-semibold text-lg",children:"Usage Analytics"}),i(I,{children:[n(x,{children:n(ee,{children:"Run Outcomes"})}),i(A,{className:"flex flex-col gap-3",children:[i(d,{children:["Completed: ",e.completedRuns]}),i(d,{children:["Failed: ",e.totalRuns-e.completedRuns]}),i(d,{children:["Average duration: ",(e.averageDurationMs/1000).toFixed(1),"s"]})]})]})]})}function h({status:e}){return n(j,{variant:e==="FAILED"||e==="CANCELLED"?"destructive":e==="ACTIVE"||e==="COMPLETED"?"secondary":"outline",children:n(d,{className:"font-semibold text-xs",children:e})})}import{useContractTable as te}from"@contractspec/lib.presentation-runtime-react";import{Card as oe,CardContent as ne}from"@contractspec/lib.ui-kit-web/ui/card";import{DataTable as re}from"@contractspec/lib.ui-kit-web/ui/data-table";import{VStack as ae}from"@contractspec/lib.ui-kit-web/ui/stack";import{Text as T}from"@contractspec/lib.ui-kit-web/ui/text";import{useMemo as ie}from"react";import{jsx as c,jsxs as se}from"react/jsx-runtime";function $({runs:e}){let o=ie(()=>[{id:"queuedAt",header:"Run",label:"Run",accessor:(t)=>t.queuedAt.getTime(),cell:({item:t})=>se(ae,{gap:"xs",children:[c(T,{className:"font-mono text-sm",children:t.id}),c(T,{className:"text-muted-foreground text-xs",children:G(t.queuedAt)})]}),size:180,canSort:!0,canHide:!0},{id:"agentName",header:"Agent",label:"Agent",accessorKey:"agentName",size:220,canSort:!0},{id:"status",header:"Status",label:"Status",accessorKey:"status",cell:({value:t})=>c(h,{status:String(t)}),size:140,canSort:!0},{id:"totalTokens",header:"Tokens",label:"Tokens",accessorKey:"totalTokens",cell:({value:t})=>f(Number(t??0)),align:"right",size:120,canSort:!0},{id:"durationMs",header:"Duration",label:"Duration",accessorKey:"durationMs",cell:({value:t})=>z(typeof t==="number"?t:void 0),align:"right",size:130,canHide:!0}],[]),s=te({data:e,columns:o,initialState:{pagination:{pageIndex:0,pageSize:5}},getRowId:(t)=>t.id});return c(re,{controller:s,toolbar:c(T,{className:"text-muted-foreground text-sm",children:"Run History"}),emptyState:c(oe,{children:c(ne,{className:"pt-6",children:c(T,{className:"text-muted-foreground",children:"No runs yet"})})})})}import{createVisualizationModel as de}from"@contractspec/lib.presentation-runtime-core";import{Button as F}from"@contractspec/lib.ui-kit-web/ui/button";import{Card as pe,CardContent as ue,CardDescription as me,CardHeader as ce,CardTitle as ge}from"@contractspec/lib.ui-kit-web/ui/card";import{HStack as B,VStack as w}from"@contractspec/lib.ui-kit-web/ui/stack";import{Text as y}from"@contractspec/lib.ui-kit-web/ui/text";import{Visualization as le}from"@contractspec/lib.ui-kit-web/ui/visualization";import{useMemo as W,useState as ye}from"react";import{jsx as r,jsxs as g}from"react/jsx-runtime";function J({agents:e=S,runs:o=k,showHeaderAction:s=!0,tools:t=N}){let[a,p]=ye("runs"),m=W(()=>_(o),[o]),V=W(()=>R(o),[o]);return g(w,{gap:"xl",align:"stretch",children:[g(B,{justify:"between",align:"center",className:"gap-3",children:[r(y,{className:"font-bold text-2xl",children:"AI Agent Console"}),s?r(F,{...q(()=>{return}),children:r(y,{children:"+ New Agent"})}):null]}),r(L,{metrics:m}),g(w,{gap:"md",children:[g(w,{gap:"xs",children:[r(y,{className:"font-semibold text-lg",children:"Operational Visualizations"}),r(y,{className:"text-muted-foreground text-sm",children:"Contract-backed charts derived from recent run activity."})]}),r(w,{gap:"md",children:V.map((u)=>g(pe,{children:[g(ce,{children:[r(ge,{children:u.title}),r(me,{children:u.description})]}),r(ue,{children:r(le,{height:u.height,model:de(u.spec,u.data)})})]},u.key))})]}),r(B,{className:"rounded-lg bg-muted p-1",gap:"xs",children:U.map((u)=>r(F,{size:"sm",variant:a===u.id?"secondary":"ghost",className:"flex-1",...q(()=>p(u.id)),children:g(y,{children:[u.icon," ",u.label]})},u.id))}),a==="runs"?r($,{runs:o}):null,a==="agents"?r(K,{agents:e}):null,a==="tools"?r(Q,{tools:t}):null,a==="metrics"?r(Y,{metrics:m}):null]})}import{VStack as fe}from"@contractspec/lib.ui-kit-web/ui/stack";import{ExecutionLaneConsoleDemo as Ie}from"@contractspec/module.execution-console";import{jsx as X,jsxs as Ae}from"react/jsx-runtime";function lt(){return Ae(fe,{gap:"xl",align:"stretch",children:[X(J,{}),X(Ie,{})]})}export{lt as ExecutionConsoleHost};
1
+ import{defineVisualization as D,VisualizationRegistry as j}from"@contractspec/lib.contracts-spec/visualizations";var M={key:"agent.run.list",version:"1.0.0"},b={version:"1.0.0",domain:"ai-ops",stability:"experimental",owners:["@example.agent-console"],tags:["agent-console","visualization","operations"]},Z=D({meta:{...b,key:"agent-console.visualization.run-status",title:"Run Status Breakdown",description:"Distribution of run outcomes across the current sample.",goal:"Make operational success and failure mix visible at a glance.",context:"Agent operations overview."},source:{primary:M,resultPath:"data"},visualization:{kind:"pie",nameDimension:"status",valueMeasure:"runs",dimensions:[{key:"status",label:"Status",dataPath:"status",type:"category"}],measures:[{key:"runs",label:"Runs",dataPath:"runs",format:"number"}],table:{caption:"Run counts by status."}}}),O=D({meta:{...b,key:"agent-console.visualization.run-activity",title:"Recent Run Activity",description:"Daily run volume across the current sample.",goal:"Show whether agent activity is rising or slowing down.",context:"Operations trend monitoring."},source:{primary:M,resultPath:"data"},visualization:{kind:"cartesian",variant:"line",xDimension:"day",yMeasures:["runs"],dimensions:[{key:"day",label:"Day",dataPath:"day",type:"time"}],measures:[{key:"runs",label:"Runs",dataPath:"runs",format:"number",color:"#0f766e"}],table:{caption:"Daily run counts."}}}),P=D({meta:{...b,key:"agent-console.visualization.run-efficiency",title:"Duration vs Tokens",description:"Scatter chart comparing token consumption and runtime.",goal:"Reveal outlier runs that are slow relative to their token usage.",context:"Operational performance diagnostics."},source:{primary:M,resultPath:"data"},visualization:{kind:"cartesian",variant:"scatter",xDimension:"totalTokens",yMeasures:["durationMs"],dimensions:[{key:"totalTokens",label:"Total Tokens",dataPath:"totalTokens",type:"number"}],measures:[{key:"durationMs",label:"Duration",dataPath:"durationMs",format:"duration",color:"#7c3aed"},{key:"estimatedCostUsd",label:"Cost",dataPath:"estimatedCostUsd",format:"currency"}],series:[{key:"runs",label:"Runs",measure:"durationMs",type:"scatter",color:"#7c3aed"}],table:{caption:"Run duration versus token usage."}}}),v=[Z,O,P],ve=new j([...v]),Ee=v.map((e)=>({key:e.meta.key,version:e.meta.version}));function E(e){if(!e)return"unknown";return e.toISOString().slice(0,10)}function R(e){let o=new Map,a=new Map;for(let t of e)o.set(t.status,(o.get(t.status)??0)+1),a.set(E(t.startedAt??t.queuedAt),(a.get(E(t.startedAt??t.queuedAt))??0)+1);return[{key:"run-status",spec:Z,data:{data:Array.from(o.entries()).map(([t,d])=>({status:t,runs:d}))},title:"Run Status Breakdown",description:"Completed, failed, running, and cancelled runs in the sample.",height:260},{key:"run-activity",spec:O,data:{data:Array.from(a.entries()).sort(([t],[d])=>t.localeCompare(d)).map(([t,d])=>({day:t,runs:d}))},title:"Recent Run Activity",description:"Daily run volume derived from run start times."},{key:"run-efficiency",spec:P,data:{data:e.filter((t)=>typeof t.durationMs==="number").map((t)=>({totalTokens:t.totalTokens,durationMs:t.durationMs??0,estimatedCostUsd:t.estimatedCostUsd}))},title:"Duration vs Tokens",description:"Operational scatter plot for spotting inefficient runs."}]}var N=[{id:"agent-1",organizationId:"demo-org",name:"Customer Support Bot",slug:"customer-support-bot",description:"Handles tier-1 customer inquiries and routes complex issues.",status:"ACTIVE",modelProvider:"OPENAI",modelName:"gpt-4o-mini",modelConfig:{temperature:0.7},systemPrompt:"You are a helpful customer support assistant.",toolChoice:"auto",maxIterations:10,timeoutMs:120000,version:"1.0.0",tags:["support","tier-1"],createdAt:new Date("2024-01-15T10:00:00Z"),updatedAt:new Date("2024-03-20T14:30:00Z")},{id:"agent-2",organizationId:"demo-org",name:"Code Review Assistant",slug:"code-review-assistant",description:"Reviews pull requests and provides actionable feedback.",status:"ACTIVE",modelProvider:"ANTHROPIC",modelName:"claude-sonnet-4-20250514",modelConfig:{temperature:0.3},systemPrompt:"You are a code review expert.",toolChoice:"auto",maxIterations:15,timeoutMs:180000,version:"2.1.0",tags:["code","review","dev"],createdAt:new Date("2024-02-10T09:00:00Z"),updatedAt:new Date("2024-04-05T11:15:00Z")},{id:"agent-3",organizationId:"demo-org",name:"Data Analyst",slug:"data-analyst",description:"Queries databases and generates insights from data.",status:"PAUSED",modelProvider:"OPENAI",modelName:"gpt-4o",modelConfig:{temperature:0.5},systemPrompt:"You are a data analyst expert in SQL and analytics.",toolChoice:"required",maxIterations:20,timeoutMs:300000,version:"1.2.0",tags:["data","analytics","sql"],createdAt:new Date("2024-03-01T08:00:00Z"),updatedAt:new Date("2024-04-10T16:45:00Z")},{id:"agent-4",organizationId:"demo-org",name:"Meeting Scheduler",slug:"meeting-scheduler",description:"Schedules meetings and manages calendar conflicts.",status:"DRAFT",modelProvider:"GOOGLE",modelName:"gemini-2.0-flash",modelConfig:{temperature:0.2},systemPrompt:"You help schedule and organize meetings efficiently.",toolChoice:"auto",maxIterations:5,timeoutMs:60000,version:"0.1.0",tags:["calendar","scheduling"],createdAt:new Date("2024-04-01T12:00:00Z"),updatedAt:new Date("2024-04-01T12:00:00Z")}];var k=[{id:"tool-1",organizationId:"demo-org",name:"Web Search",slug:"web-search",description:"Search the web for real-time information using Brave API.",category:"RETRIEVAL",status:"ACTIVE",parametersSchema:{type:"object",properties:{query:{type:"string",description:"Search query"},numResults:{type:"number",default:10}},required:["query"]},outputSchema:{type:"array",items:{type:"object"}},implementationType:"http",implementationConfig:{url:"https://api.brave.com/search",method:"GET"},maxInvocationsPerMinute:60,timeoutMs:30000,version:"1.0.0",tags:["search","web"],createdAt:new Date("2024-01-01T00:00:00Z"),updatedAt:new Date("2024-02-15T10:00:00Z")},{id:"tool-2",organizationId:"demo-org",name:"SQL Query",slug:"sql-query",description:"Execute read-only SQL queries against the data warehouse.",category:"RETRIEVAL",status:"ACTIVE",parametersSchema:{type:"object",properties:{query:{type:"string",description:"SQL query"},maxRows:{type:"number",default:100}},required:["query"]},outputSchema:{type:"object"},implementationType:"function",implementationConfig:{handler:"executeSqlQuery"},maxInvocationsPerMinute:30,timeoutMs:60000,version:"1.1.0",tags:["sql","database"],createdAt:new Date("2024-01-05T00:00:00Z"),updatedAt:new Date("2024-03-10T14:00:00Z")},{id:"tool-3",organizationId:"demo-org",name:"Email Sender",slug:"email-sender",description:"Send emails via SMTP or API.",category:"COMMUNICATION",status:"ACTIVE",parametersSchema:{type:"object",properties:{to:{type:"string"},subject:{type:"string"},body:{type:"string"}},required:["to","subject","body"]},implementationType:"http",implementationConfig:{url:"/api/send-email",method:"POST"},maxInvocationsPerMinute:10,timeoutMs:30000,version:"1.0.0",tags:["email","communication"],createdAt:new Date("2024-02-01T00:00:00Z"),updatedAt:new Date("2024-02-01T00:00:00Z")},{id:"tool-4",organizationId:"demo-org",name:"GitHub Integration",slug:"github-integration",description:"Interact with GitHub repositories, PRs, and issues.",category:"INTEGRATION",status:"ACTIVE",parametersSchema:{type:"object",properties:{action:{type:"string",enum:["list_prs","get_pr","create_comment"]},repo:{type:"string"},params:{type:"object"}},required:["action","repo"]},implementationType:"http",implementationConfig:{url:"https://api.github.com",auth:"token"},maxInvocationsPerMinute:100,timeoutMs:15000,version:"2.0.0",tags:["github","integration","code"],createdAt:new Date("2024-02-20T00:00:00Z"),updatedAt:new Date("2024-04-01T09:00:00Z")},{id:"tool-5",organizationId:"demo-org",name:"Calculator",slug:"calculator",description:"Perform mathematical calculations.",category:"COMPUTATION",status:"ACTIVE",parametersSchema:{type:"object",properties:{expression:{type:"string",description:"Math expression to evaluate"}},required:["expression"]},outputSchema:{type:"object",properties:{result:{type:"number"}}},implementationType:"function",implementationConfig:{handler:"evaluateMath"},timeoutMs:5000,version:"1.0.0",tags:["math","utility"],createdAt:new Date("2024-01-10T00:00:00Z"),updatedAt:new Date("2024-01-10T00:00:00Z")}];var C=[{id:"run-1",organizationId:"demo-org",projectId:"demo-project",agentId:"agent-1",agentName:"Customer Support Bot",userId:"user-1",sessionId:"session-1",input:{message:"How do I reset my password?",context:{}},output:{response:"You can reset your password by clicking..."},status:"COMPLETED",totalTokens:1250,promptTokens:800,completionTokens:450,totalIterations:3,durationMs:4500,estimatedCostUsd:0.0025,queuedAt:new Date("2024-04-15T10:00:00Z"),startedAt:new Date("2024-04-15T10:00:01Z"),completedAt:new Date("2024-04-15T10:00:05Z"),steps:[],logs:[]},{id:"run-2",organizationId:"demo-org",projectId:"demo-project",agentId:"agent-2",agentName:"Code Review Assistant",userId:"user-2",input:{message:"Review PR #123",context:{prNumber:123}},status:"IN_PROGRESS",totalTokens:3500,promptTokens:3000,completionTokens:500,totalIterations:5,queuedAt:new Date("2024-04-15T10:30:00Z"),startedAt:new Date("2024-04-15T10:30:02Z"),steps:[],logs:[]},{id:"run-3",organizationId:"demo-org",projectId:"demo-project",agentId:"agent-1",agentName:"Customer Support Bot",userId:"user-1",input:{message:"What are your business hours?"},output:{response:"Our business hours are 9 AM to 5 PM EST..."},status:"COMPLETED",totalTokens:800,promptTokens:500,completionTokens:300,totalIterations:2,durationMs:2100,estimatedCostUsd:0.0012,queuedAt:new Date("2024-04-15T09:00:00Z"),startedAt:new Date("2024-04-15T09:00:01Z"),completedAt:new Date("2024-04-15T09:00:03Z"),steps:[],logs:[]},{id:"run-4",organizationId:"demo-org",projectId:"demo-project",agentId:"agent-3",agentName:"Data Analyst",userId:"user-3",input:{message:"Generate sales report for Q1"},status:"FAILED",errorMessage:"Database connection timeout",errorCode:"DB_TIMEOUT",totalTokens:2000,promptTokens:1500,completionTokens:500,totalIterations:8,durationMs:45000,queuedAt:new Date("2024-04-14T15:00:00Z"),startedAt:new Date("2024-04-14T15:00:05Z"),completedAt:new Date("2024-04-14T15:00:50Z"),steps:[],logs:[]},{id:"run-5",organizationId:"demo-org",projectId:"demo-project",agentId:"agent-2",agentName:"Code Review Assistant",userId:"user-2",input:{message:"Review PR #120"},output:{response:"Code review complete. 3 suggestions..."},status:"COMPLETED",totalTokens:5200,promptTokens:4000,completionTokens:1200,totalIterations:7,durationMs:15000,estimatedCostUsd:0.0156,queuedAt:new Date("2024-04-14T11:00:00Z"),startedAt:new Date("2024-04-14T11:00:03Z"),completedAt:new Date("2024-04-14T11:00:18Z"),steps:[],logs:[]}];var U=[{id:"runs",label:"Runs",icon:"▶"},{id:"agents",label:"Agents",icon:"\uD83E\uDD16"},{id:"tools",label:"Tools",icon:"\uD83D\uDD27"},{id:"metrics",label:"Metrics",icon:"\uD83D\uDCCA"}];function _(e){let o=e.filter((i)=>i.status==="COMPLETED").length,a=e.reduce((i,r)=>i+r.totalTokens,0),t=e.reduce((i,r)=>i+(r.estimatedCostUsd??0),0),d=e.map((i)=>i.durationMs).filter((i)=>typeof i==="number");return{averageDurationMs:d.length>0?d.reduce((i,r)=>i+r,0)/d.length:0,completedRuns:o,successRate:e.length>0?o/e.length:0,totalCostUsd:t,totalRuns:e.length,totalTokens:a}}function y(e){if(e<1000)return e.toString();if(e<1e6)return`${(e/1000).toFixed(1)}K`;return`${(e/1e6).toFixed(2)}M`}function z(e){if(!e)return"-";if(e<1000)return`${e}ms`;if(e<60000)return`${(e/1000).toFixed(1)}s`;return`${(e/60000).toFixed(1)}m`}function G(e){return new Intl.DateTimeFormat("en-US",{dateStyle:"medium",timeStyle:"short"}).format(e)}function L(e){if(typeof document>"u")return{onPress:e};return{onClick:e}}import{Badge as x}from"@contractspec/lib.ui-kit-web/ui/badge";import{Card as ee,CardContent as te}from"@contractspec/lib.ui-kit-web/ui/card";import{Box as oe,HStack as Q,VStack as ne}from"@contractspec/lib.ui-kit-web/ui/stack";import{Text as f}from"@contractspec/lib.ui-kit-web/ui/text";import{jsx as p,jsxs as S}from"react/jsx-runtime";function I({getKey:e,items:o,renderItem:a}){return p(Q,{gap:"none",align:"stretch",className:"flex-wrap",children:o.map((t)=>p(oe,{gap:"none",className:"flex w-full min-w-0 p-1.5 sm:w-1/2 lg:w-1/4",children:a(t)},e(t)))})}function q({description:e,name:o,status:a,subtitle:t}){return p(ee,{className:"h-full w-full",children:S(te,{className:"flex flex-col gap-2 pt-6",children:[S(Q,{justify:"between",align:"start",children:[S(ne,{gap:"xs",className:"flex-1",children:[p(f,{className:"font-semibold text-lg",children:o}),p(f,{className:"text-muted-foreground text-sm",children:t})]}),p(T,{status:a})]}),p(f,{className:"text-muted-foreground text-sm",children:e})]})})}function T({status:e}){return p(x,{variant:e==="FAILED"||e==="CANCELLED"?"destructive":e==="ACTIVE"||e==="COMPLETED"?"secondary":"outline",children:p(f,{className:"font-semibold text-xs",children:e})})}import{Card as K,CardContent as Y,CardHeader as ae,CardTitle as re}from"@contractspec/lib.ui-kit-web/ui/card";import{VStack as ie}from"@contractspec/lib.ui-kit-web/ui/stack";import{Text as u}from"@contractspec/lib.ui-kit-web/ui/text";import{jsx as s,jsxs as g}from"react/jsx-runtime";function $({metrics:e}){let o=[{label:"Total Runs",value:String(e.totalRuns),hint:`${Math.round(e.successRate*100)}% success`},{label:"Success Rate",value:`${Math.round(e.successRate*100)}%`,hint:"of all runs"},{label:"Total Tokens",value:y(e.totalTokens),hint:"This period"},{label:"Total Cost",value:`$${e.totalCostUsd.toFixed(2)}`,hint:"This period"}];return s(I,{items:o,getKey:(a)=>a.label,renderItem:(a)=>s(K,{className:"h-full w-full",children:g(Y,{className:"flex flex-col gap-1 pt-6",children:[s(u,{className:"text-muted-foreground text-sm",children:a.label}),s(u,{className:"font-bold text-2xl",children:a.value}),s(u,{className:"text-muted-foreground text-sm",children:a.hint})]})})})}function F({agents:e}){return s(I,{items:e,getKey:(o)=>o.id,renderItem:(o)=>s(q,{description:o.description,name:o.name,status:o.status,subtitle:`${o.modelProvider} / ${o.modelName}`})})}function B({tools:e}){return s(I,{items:e,getKey:(o)=>o.id,renderItem:(o)=>s(q,{description:o.description,name:o.name,status:o.status,subtitle:`${o.category} / ${o.implementationType}`})})}function V({metrics:e}){return g(ie,{gap:"md",children:[s(u,{className:"font-semibold text-lg",children:"Usage Analytics"}),g(K,{children:[s(ae,{children:s(re,{children:s(u,{children:"Run Outcomes"})})}),g(Y,{className:"flex flex-col gap-3",children:[g(u,{children:["Completed: ",e.completedRuns]}),g(u,{children:["Failed: ",e.totalRuns-e.completedRuns]}),g(u,{children:["Average duration: ",(e.averageDurationMs/1000).toFixed(1),"s"]})]})]})]})}import{useContractTable as se}from"@contractspec/lib.presentation-runtime-react";import{Card as de,CardContent as pe}from"@contractspec/lib.ui-kit-web/ui/card";import{DataTable as ue}from"@contractspec/lib.ui-kit-web/ui/data-table";import{VStack as me}from"@contractspec/lib.ui-kit-web/ui/stack";import{Text as h}from"@contractspec/lib.ui-kit-web/ui/text";import{useMemo as ce}from"react";import{jsx as m,jsxs as ge}from"react/jsx-runtime";function W({runs:e}){let o=ce(()=>[{id:"queuedAt",header:"Run",label:"Run",accessor:(t)=>t.queuedAt.getTime(),cell:({item:t})=>ge(me,{gap:"xs",children:[m(h,{className:"font-mono text-sm",children:t.id}),m(h,{className:"text-muted-foreground text-xs",children:G(t.queuedAt)})]}),size:180,canSort:!0,canHide:!0},{id:"agentName",header:"Agent",label:"Agent",accessorKey:"agentName",size:220,canSort:!0},{id:"status",header:"Status",label:"Status",accessorKey:"status",cell:({value:t})=>m(T,{status:String(t)}),size:140,canSort:!0},{id:"totalTokens",header:"Tokens",label:"Tokens",accessorKey:"totalTokens",cell:({value:t})=>y(Number(t??0)),align:"right",size:120,canSort:!0},{id:"durationMs",header:"Duration",label:"Duration",accessorKey:"durationMs",cell:({value:t})=>z(typeof t==="number"?t:void 0),align:"right",size:130,canHide:!0}],[]),a=se({data:e,columns:o,initialState:{pagination:{pageIndex:0,pageSize:5}},getRowId:(t)=>t.id});return m(ue,{controller:a,toolbar:m(h,{className:"text-muted-foreground text-sm",children:"Run History"}),emptyState:m(de,{children:m(pe,{className:"pt-6",children:m(h,{className:"text-muted-foreground",children:"No runs yet"})})})})}import{Tabs as le,TabsContent as A,TabsList as ye,TabsTrigger as fe}from"@contractspec/lib.design-system";import{createVisualizationModel as Ie}from"@contractspec/lib.presentation-runtime-core";import{Button as Te}from"@contractspec/lib.ui-kit-web/ui/button";import{Card as he,CardContent as Ae,CardDescription as we,CardHeader as De,CardTitle as Me}from"@contractspec/lib.ui-kit-web/ui/card";import{HStack as be,VStack as w}from"@contractspec/lib.ui-kit-web/ui/stack";import{Text as l}from"@contractspec/lib.ui-kit-web/ui/text";import{Visualization as Ze}from"@contractspec/lib.ui-kit-web/ui/visualization";import{useMemo as J}from"react";import{jsx as n,jsxs as c}from"react/jsx-runtime";function X({agents:e=N,runs:o=C,showHeaderAction:a=!0,tools:t=k}){let d=J(()=>_(o),[o]),i=J(()=>R(o),[o]);return c(w,{gap:"xl",align:"stretch",children:[c(be,{justify:"between",align:"center",className:"gap-3",children:[n(l,{className:"font-bold text-2xl",children:"AI Agent Console"}),a?n(Te,{...L(()=>{return}),children:n(l,{children:"+ New Agent"})}):null]}),n($,{metrics:d}),c(w,{gap:"md",children:[c(w,{gap:"xs",children:[n(l,{className:"font-semibold text-lg",children:"Operational Visualizations"}),n(l,{className:"text-muted-foreground text-sm",children:"Contract-backed charts derived from recent run activity."})]}),n(w,{gap:"md",children:i.map((r)=>c(he,{children:[c(De,{children:[n(Me,{children:r.title}),n(we,{children:r.description})]}),n(Ae,{children:n(Ze,{height:r.height,model:Ie(r.spec,r.data)})})]},r.key))})]}),c(le,{defaultValue:"runs",className:"w-full gap-4",children:[n(ye,{className:"h-auto w-full flex-wrap",children:U.map((r)=>n(fe,{value:r.id,className:"min-h-8 min-w-24 flex-1",children:c(l,{children:[r.icon," ",r.label]})},r.id))}),n(A,{value:"runs",children:n(W,{runs:o})}),n(A,{value:"agents",children:n(F,{agents:e})}),n(A,{value:"tools",children:n(B,{tools:t})}),n(A,{value:"metrics",children:n(V,{metrics:d})})]})]})}import{VStack as Oe}from"@contractspec/lib.ui-kit-web/ui/stack";import{ExecutionLaneConsoleDemo as Pe}from"@contractspec/module.execution-console";import{jsx as H,jsxs as Se}from"react/jsx-runtime";function Rt(){return Se(Oe,{gap:"xl",align:"stretch",children:[H(X,{}),H(Pe,{})]})}export{Rt as ExecutionConsoleHost};