@contractspec/example.agent-console 3.8.14 → 3.8.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/.turbo/turbo-build.log +49 -36
  2. package/CHANGELOG.md +20 -0
  3. package/README.md +2 -0
  4. package/dist/agent/agent.handler.d.ts +1 -1
  5. package/dist/agent.feature.js +1 -1
  6. package/dist/browser/agent.feature.js +1 -1
  7. package/dist/browser/index.js +11 -11
  8. package/dist/browser/ui/AgentConsolePreview.data.js +1 -0
  9. package/dist/browser/ui/AgentConsolePreview.js +1 -0
  10. package/dist/browser/ui/AgentConsolePreviewPanels.js +1 -0
  11. package/dist/browser/ui/AgentConsolePreviewTable.js +1 -0
  12. package/dist/browser/ui/AgentDashboard.js +1 -1
  13. package/dist/browser/ui/AgentDashboard.visualizations.js +1 -1
  14. package/dist/browser/ui/ExecutionConsoleHost.js +1 -1
  15. package/dist/browser/ui/index.js +5 -5
  16. package/dist/browser/ui/renderers/dashboard.markdown.js +2 -2
  17. package/dist/browser/ui/renderers/index.js +4 -4
  18. package/dist/browser/visualizations/index.js +1 -1
  19. package/dist/browser/visualizations/selectors.js +1 -1
  20. package/dist/index.js +11 -11
  21. package/dist/node/agent.feature.js +1 -1
  22. package/dist/node/index.js +11 -11
  23. package/dist/node/ui/AgentConsolePreview.data.js +1 -0
  24. package/dist/node/ui/AgentConsolePreview.js +1 -0
  25. package/dist/node/ui/AgentConsolePreviewPanels.js +1 -0
  26. package/dist/node/ui/AgentConsolePreviewTable.js +1 -0
  27. package/dist/node/ui/AgentDashboard.js +1 -1
  28. package/dist/node/ui/AgentDashboard.visualizations.js +1 -1
  29. package/dist/node/ui/ExecutionConsoleHost.js +1 -1
  30. package/dist/node/ui/index.js +5 -5
  31. package/dist/node/ui/renderers/dashboard.markdown.js +2 -2
  32. package/dist/node/ui/renderers/index.js +4 -4
  33. package/dist/node/visualizations/index.js +1 -1
  34. package/dist/node/visualizations/selectors.js +1 -1
  35. package/dist/tool/tool.handler.d.ts +1 -1
  36. package/dist/ui/AgentConsolePreview.d.ts +8 -0
  37. package/dist/ui/AgentConsolePreview.data.d.ts +30 -0
  38. package/dist/ui/AgentConsolePreview.data.js +2 -0
  39. package/dist/ui/AgentConsolePreview.js +2 -0
  40. package/dist/ui/AgentConsolePreviewPanels.d.ts +18 -0
  41. package/dist/ui/AgentConsolePreviewPanels.js +2 -0
  42. package/dist/ui/AgentConsolePreviewTable.d.ts +4 -0
  43. package/dist/ui/AgentConsolePreviewTable.js +2 -0
  44. package/dist/ui/AgentDashboard.js +1 -1
  45. package/dist/ui/AgentDashboard.visualizations.js +1 -1
  46. package/dist/ui/ExecutionConsoleHost.js +1 -1
  47. package/dist/ui/index.d.ts +1 -0
  48. package/dist/ui/index.js +5 -5
  49. package/dist/ui/renderers/dashboard.markdown.js +2 -2
  50. package/dist/ui/renderers/index.js +4 -4
  51. package/dist/visualizations/index.js +1 -1
  52. package/dist/visualizations/selectors.d.ts +10 -2
  53. package/dist/visualizations/selectors.js +1 -1
  54. package/package.json +65 -8
  55. package/src/ui/AgentConsolePreview.data.ts +74 -0
  56. package/src/ui/AgentConsolePreview.tsx +124 -0
  57. package/src/ui/AgentConsolePreviewPanels.tsx +159 -0
  58. package/src/ui/AgentConsolePreviewTable.tsx +109 -0
  59. package/src/ui/ExecutionConsoleHost.tsx +2 -2
  60. package/src/ui/index.ts +2 -0
  61. package/src/visualizations/selectors.ts +10 -2
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  // @bun
2
- import{defineVisualization as Y2,VisualizationRegistry as z4}from"@contractspec/lib.contracts-spec/visualizations";var J2={key:"agent.run.list",version:"1.0.0"},$2={version:"1.0.0",domain:"ai-ops",stability:"experimental",owners:["@example.agent-console"],tags:["agent-console","visualization","operations"]},X2=Y2({meta:{...$2,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:J2,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."}}}),z2=Y2({meta:{...$2,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:J2,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."}}}),Q2=Y2({meta:{...$2,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:J2,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."}}}),Y1=[X2,z2,Q2],tZ=new z4([...Y1]),J1=Y1.map((Z)=>({key:Z.meta.key,version:Z.meta.version}));function $1(Z){if(!Z)return"unknown";return Z.toISOString().slice(0,10)}function j0(Z){let q=new Map,D=new Map;for(let Y of Z)q.set(Y.status,(q.get(Y.status)??0)+1),D.set($1(Y.startedAt??Y.queuedAt),(D.get($1(Y.startedAt??Y.queuedAt))??0)+1);return[{key:"run-status",spec:X2,data:{data:Array.from(q.entries()).map(([Y,X])=>({status:Y,runs:X}))},title:"Run Status Breakdown",description:"Completed, failed, running, and cancelled runs in the sample.",height:260},{key:"run-activity",spec:z2,data:{data:Array.from(D.entries()).sort(([Y],[X])=>Y.localeCompare(X)).map(([Y,X])=>({day:Y,runs:X}))},title:"Recent Run Activity",description:"Daily run volume derived from run start times."},{key:"run-efficiency",spec:Q2,data:{data:Z.filter((Y)=>typeof Y.durationMs==="number").map((Y)=>({totalTokens:Y.totalTokens,durationMs:Y.durationMs??0,estimatedCostUsd:Y.estimatedCostUsd}))},title:"Duration vs Tokens",description:"Operational scatter plot for spotting inefficient runs."}]}import{defineFeature as Q4}from"@contractspec/lib.contracts-spec/features";var J3=Q4({meta:{key:"agent-console",version:"1.0.0",title:"AI Agent Console",description:"AI agent orchestration with tools, runs, and logs management",domain:"ai-ops",owners:["@agent-console-team"],tags:["ai","agents","orchestration"],stability:"stable"},operations:[{key:"agent-console.agent.create",version:"1.0.0"},{key:"agent-console.agent.update",version:"1.0.0"},{key:"agent-console.agent.get",version:"1.0.0"},{key:"agent-console.agent.list",version:"1.0.0"},{key:"agent-console.agent.assignTool",version:"1.0.0"},{key:"agent-console.agent.removeTool",version:"1.0.0"},{key:"agent.tool.create",version:"1.0.0"},{key:"agent.tool.update",version:"1.0.0"},{key:"agent.tool.get",version:"1.0.0"},{key:"agent.tool.list",version:"1.0.0"},{key:"agent.tool.test",version:"1.0.0"},{key:"agent.run.execute",version:"1.0.0"},{key:"agent.run.cancel",version:"1.0.0"},{key:"agent.run.get",version:"1.0.0"},{key:"agent.run.list",version:"1.0.0"},{key:"agent.run.getSteps",version:"1.0.0"},{key:"agent.run.getLogs",version:"1.0.0"},{key:"agent.run.getMetrics",version:"1.0.0"}],events:[{key:"agent-console.agent.created",version:"1.0.0"},{key:"agent-console.agent.updated",version:"1.0.0"},{key:"agent-console.agent.toolAssigned",version:"1.0.0"},{key:"agent-console.agent.toolRemoved",version:"1.0.0"},{key:"agent.tool.created",version:"1.0.0"},{key:"agent.tool.updated",version:"1.0.0"},{key:"agent.tool.statusChanged",version:"1.0.0"},{key:"agent.run.started",version:"1.0.0"},{key:"agent.run.completed",version:"1.0.0"},{key:"agent.run.failed",version:"1.0.0"},{key:"agent.run.cancelled",version:"1.0.0"},{key:"agent.run.toolInvoked",version:"1.0.0"},{key:"agent.run.toolCompleted",version:"1.0.0"},{key:"agent.run.messageGenerated",version:"1.0.0"}],presentations:[{key:"agent-console.dashboard",version:"1.0.0"},{key:"agent-console.agent.viewList",version:"1.0.0"},{key:"agent-console.agent.detail",version:"1.0.0"},{key:"agent-console.run.list",version:"1.0.0"},{key:"agent-console.run.detail",version:"1.0.0"},{key:"agent-console.tool.list",version:"1.0.0"},{key:"agent-console.tool.detail",version:"1.0.0"}],opToPresentation:[{op:{key:"agent-console.agent.list",version:"1.0.0"},pres:{key:"agent-console.agent.viewList",version:"1.0.0"}},{op:{key:"agent-console.agent.get",version:"1.0.0"},pres:{key:"agent-console.agent.detail",version:"1.0.0"}},{op:{key:"agent.run.list",version:"1.0.0"},pres:{key:"agent-console.run.list",version:"1.0.0"}},{op:{key:"agent.run.get",version:"1.0.0"},pres:{key:"agent-console.run.detail",version:"1.0.0"}},{op:{key:"agent.tool.list",version:"1.0.0"},pres:{key:"agent-console.tool.list",version:"1.0.0"}},{op:{key:"agent.tool.get",version:"1.0.0"},pres:{key:"agent-console.tool.detail",version:"1.0.0"}}],presentationsTargets:[{key:"agent-console.dashboard",version:"1.0.0",targets:["react","markdown"]},{key:"agent-console.agent.viewList",version:"1.0.0",targets:["react","markdown","application/json"]},{key:"agent-console.run.list",version:"1.0.0",targets:["react","markdown","application/json"]},{key:"agent-console.tool.list",version:"1.0.0",targets:["react","markdown","application/json"]}],visualizations:J1,capabilities:{requires:[{key:"identity",version:"1.0.0"},{key:"audit-trail",version:"1.0.0"},{key:"jobs",version:"1.0.0"}],provides:[{key:"agent",version:"1.0.0"}]},telemetry:[{key:"agent-console.telemetry",version:"1.0.0"}],jobs:[{key:"agent-console.job.run-execution",version:"1.0.0"}],docs:["docs.examples.agent-console.goal","docs.examples.agent-console.usage","docs.examples.agent-console.reference","docs.examples.agent-console.constraints"]});import{defineEntity as X1,defineEntityEnum as z1,field as w,index as L0}from"@contractspec/lib.schema";var Q1=z1({name:"AgentStatus",values:["DRAFT","ACTIVE","PAUSED","ARCHIVED"],description:"Lifecycle status of the agent"}),G1=z1({name:"ModelProvider",values:["OPENAI","ANTHROPIC","GOOGLE","MISTRAL","CUSTOM"],description:"AI model provider"}),G4=X1({name:"Agent",schema:"agent_console",description:"Represents an AI agent configuration with assigned tools and parameters.",fields:{id:w.id(),organizationId:w.string({description:"Organization that owns this agent"}),name:w.string({description:"Agent name (1-100 chars)"}),slug:w.string({description:"URL-safe identifier (lowercase, numbers, hyphens)"}),description:w.string({isOptional:!0,description:"Agent description (max 1000 chars)"}),status:w.enum("AgentStatus",{default:"DRAFT"}),modelProvider:w.enum("ModelProvider",{default:"OPENAI"}),modelName:w.string({description:"Model identifier: 'gpt-4', 'claude-3-opus', etc."}),modelConfig:w.json({isOptional:!0,description:"Model parameters: temperature, max_tokens, etc."}),systemPrompt:w.string({description:"System prompt for the agent"}),userPromptTemplate:w.string({isOptional:!0,description:"Template for user prompts"}),toolIds:w.string({isArray:!0,isOptional:!0,description:"IDs of assigned tools"}),toolChoice:w.string({default:"auto",description:"Tool selection mode: 'auto', 'required', 'none'"}),maxIterations:w.int({default:10,description:"Maximum iterations per run"}),maxTokensPerRun:w.int({isOptional:!0,description:"Maximum tokens per run"}),timeoutMs:w.int({default:120000,description:"Execution timeout in milliseconds"}),version:w.string({default:"1.0.0",description:"Agent version"}),tags:w.string({isArray:!0,isOptional:!0,description:"Tags for categorization"}),createdAt:w.createdAt(),updatedAt:w.updatedAt(),createdById:w.string({isOptional:!0,description:"User who created this agent"}),tools:w.hasMany("Tool",{description:"Tools assigned to this agent"})},indexes:[L0.unique(["organizationId","slug"]),L0.on(["organizationId","status"]),L0.on(["modelProvider","modelName"])],enums:[Q1,G1]}),F4=X1({name:"AgentTool",schema:"agent_console",description:"Links an agent to its assigned tools with configuration.",fields:{id:w.id(),agentId:w.foreignKey({description:"Agent ID"}),toolId:w.foreignKey({description:"Tool ID"}),config:w.json({isOptional:!0,description:"Tool-specific configuration for this agent"}),order:w.int({default:0,description:"Order of tool in agent tool list"}),isEnabled:w.boolean({default:!0,description:"Whether tool is enabled for this agent"}),createdAt:w.createdAt(),agent:w.belongsTo("Agent",["agentId"],["id"]),tool:w.belongsTo("Tool",["toolId"],["id"])},indexes:[L0.unique(["agentId","toolId"]),L0.on(["agentId","order"])]});import{defineEnum as G2}from"@contractspec/lib.schema";var s=G2("AgentStatus",["DRAFT","ACTIVE","PAUSED","ARCHIVED"]),q0=G2("ModelProvider",["OPENAI","ANTHROPIC","GOOGLE","MISTRAL","CUSTOM"]),P0=G2("ToolChoice",["auto","required","none"]);import{defineEvent as x0}from"@contractspec/lib.contracts-spec";import{defineSchemaModel as g0,ScalarTypeEnum as C}from"@contractspec/lib.schema";var T0=["@agent-console-team"],U4=g0({name:"AgentCreatedPayload",description:"Payload for agent created event",fields:{id:{type:C.String_unsecure(),isOptional:!1},organizationId:{type:C.String_unsecure(),isOptional:!1},name:{type:C.String_unsecure(),isOptional:!1},slug:{type:C.String_unsecure(),isOptional:!1},modelProvider:{type:C.String_unsecure(),isOptional:!1},modelName:{type:C.String_unsecure(),isOptional:!1},toolCount:{type:C.Int_unsecure(),isOptional:!1},createdById:{type:C.String_unsecure(),isOptional:!0},createdAt:{type:C.DateTime(),isOptional:!1}}}),F2=x0({meta:{key:"agent-console.agent.created",version:"1.0.0",description:"A new AI agent was configured.",stability:"stable",owners:[...T0],tags:["agent","created"]},payload:U4}),A4=g0({name:"AgentUpdatedPayload",description:"Payload for agent updated event",fields:{id:{type:C.String_unsecure(),isOptional:!1},organizationId:{type:C.String_unsecure(),isOptional:!1},name:{type:C.String_unsecure(),isOptional:!1},status:{type:C.String_unsecure(),isOptional:!1},updatedFields:{type:C.String_unsecure(),isArray:!0,isOptional:!1},updatedAt:{type:C.DateTime(),isOptional:!1}}}),V4=x0({meta:{key:"agent-console.agent.updated",version:"1.0.0",description:"An AI agent configuration was updated.",stability:"stable",owners:[...T0],tags:["agent","updated"]},payload:A4}),K4=g0({name:"AgentToolAssignedPayload",description:"Payload for agent tool assigned event",fields:{agentId:{type:C.String_unsecure(),isOptional:!1},toolId:{type:C.String_unsecure(),isOptional:!1},agentName:{type:C.String_unsecure(),isOptional:!1},toolName:{type:C.String_unsecure(),isOptional:!1},assignedAt:{type:C.DateTime(),isOptional:!1}}}),k4=x0({meta:{key:"agent-console.agent.toolAssigned",version:"1.0.0",description:"A tool was assigned to an agent.",stability:"stable",owners:[...T0],tags:["agent","tool","assigned"]},payload:K4}),P4=g0({name:"AgentToolRemovedPayload",description:"Payload for agent tool removed event",fields:{agentId:{type:C.String_unsecure(),isOptional:!1},toolId:{type:C.String_unsecure(),isOptional:!1},agentName:{type:C.String_unsecure(),isOptional:!1},toolName:{type:C.String_unsecure(),isOptional:!1},removedAt:{type:C.DateTime(),isOptional:!1}}}),I4=x0({meta:{key:"agent-console.agent.toolRemoved",version:"1.0.0",description:"A tool was removed from an agent.",stability:"stable",owners:[...T0],tags:["agent","tool","removed"]},payload:P4});var m=[{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 E=[{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")}];import{defineSchemaModel as I0,ScalarTypeEnum as K}from"@contractspec/lib.schema";var B4=I0({name:"Agent",description:"AI agent configuration",fields:{id:{type:K.String_unsecure(),isOptional:!1},organizationId:{type:K.String_unsecure(),isOptional:!1},name:{type:K.NonEmptyString(),isOptional:!1},slug:{type:K.String_unsecure(),isOptional:!1},description:{type:K.String_unsecure(),isOptional:!0},status:{type:s,isOptional:!1},modelProvider:{type:q0,isOptional:!1},modelName:{type:K.NonEmptyString(),isOptional:!1},modelConfig:{type:K.JSONObject(),isOptional:!0},systemPrompt:{type:K.String_unsecure(),isOptional:!1},userPromptTemplate:{type:K.String_unsecure(),isOptional:!0},toolIds:{type:K.String_unsecure(),isArray:!0,isOptional:!0},toolChoice:{type:P0,isOptional:!1,defaultValue:"auto"},maxIterations:{type:K.Int_unsecure(),isOptional:!1,defaultValue:10},maxTokensPerRun:{type:K.Int_unsecure(),isOptional:!0},timeoutMs:{type:K.Int_unsecure(),isOptional:!1,defaultValue:120000},version:{type:K.NonEmptyString(),isOptional:!1},tags:{type:K.String_unsecure(),isArray:!0,isOptional:!0},createdAt:{type:K.DateTime(),isOptional:!1},updatedAt:{type:K.DateTime(),isOptional:!1}}}),B0=I0({name:"AgentSummary",description:"Summary of an agent for list views",fields:{id:{type:K.String_unsecure(),isOptional:!1},name:{type:K.NonEmptyString(),isOptional:!1},slug:{type:K.String_unsecure(),isOptional:!1},description:{type:K.String_unsecure(),isOptional:!0},status:{type:s,isOptional:!1},modelProvider:{type:q0,isOptional:!1},modelName:{type:K.NonEmptyString(),isOptional:!1},version:{type:K.NonEmptyString(),isOptional:!1},createdAt:{type:K.DateTime(),isOptional:!1}}}),F1=I0({name:"AgentToolRef",description:"Tool reference in agent context",fields:{id:{type:K.String_unsecure(),isOptional:!1},name:{type:K.NonEmptyString(),isOptional:!1},slug:{type:K.String_unsecure(),isOptional:!1},description:{type:K.String_unsecure(),isOptional:!1},category:{type:K.String_unsecure(),isOptional:!1}}}),U2=I0({name:"AgentWithTools",description:"Agent with associated tools",fields:{id:{type:K.String_unsecure(),isOptional:!1},organizationId:{type:K.String_unsecure(),isOptional:!1},name:{type:K.NonEmptyString(),isOptional:!1},slug:{type:K.String_unsecure(),isOptional:!1},description:{type:K.String_unsecure(),isOptional:!0},status:{type:s,isOptional:!1},modelProvider:{type:q0,isOptional:!1},modelName:{type:K.NonEmptyString(),isOptional:!1},modelConfig:{type:K.JSONObject(),isOptional:!0},systemPrompt:{type:K.String_unsecure(),isOptional:!1},userPromptTemplate:{type:K.String_unsecure(),isOptional:!0},toolIds:{type:K.String_unsecure(),isArray:!0,isOptional:!0},toolChoice:{type:P0,isOptional:!1},maxIterations:{type:K.Int_unsecure(),isOptional:!1},maxTokensPerRun:{type:K.Int_unsecure(),isOptional:!0},timeoutMs:{type:K.Int_unsecure(),isOptional:!1},version:{type:K.NonEmptyString(),isOptional:!1},tags:{type:K.String_unsecure(),isArray:!0,isOptional:!0},createdAt:{type:K.DateTime(),isOptional:!1},updatedAt:{type:K.DateTime(),isOptional:!1},tools:{type:F1,isArray:!0,isOptional:!0}}}),A2=I0({name:"CreateAgentInput",description:"Input for creating an agent",fields:{organizationId:{type:K.String_unsecure(),isOptional:!1},name:{type:K.NonEmptyString(),isOptional:!1},slug:{type:K.String_unsecure(),isOptional:!1},description:{type:K.String_unsecure(),isOptional:!0},modelProvider:{type:q0,isOptional:!1},modelName:{type:K.NonEmptyString(),isOptional:!1},modelConfig:{type:K.JSONObject(),isOptional:!0},systemPrompt:{type:K.String_unsecure(),isOptional:!1},userPromptTemplate:{type:K.String_unsecure(),isOptional:!0},toolIds:{type:K.String_unsecure(),isArray:!0,isOptional:!0},toolChoice:{type:P0,isOptional:!0},maxIterations:{type:K.Int_unsecure(),isOptional:!0},maxTokensPerRun:{type:K.Int_unsecure(),isOptional:!0},timeoutMs:{type:K.Int_unsecure(),isOptional:!0},tags:{type:K.String_unsecure(),isArray:!0,isOptional:!0}}}),V2=I0({name:"UpdateAgentInput",description:"Input for updating an agent",fields:{agentId:{type:K.String_unsecure(),isOptional:!1},name:{type:K.NonEmptyString(),isOptional:!0},description:{type:K.String_unsecure(),isOptional:!0},status:{type:s,isOptional:!0},modelConfig:{type:K.JSONObject(),isOptional:!0},systemPrompt:{type:K.String_unsecure(),isOptional:!0},userPromptTemplate:{type:K.String_unsecure(),isOptional:!0},toolIds:{type:K.String_unsecure(),isArray:!0,isOptional:!0},toolChoice:{type:P0,isOptional:!0},maxIterations:{type:K.Int_unsecure(),isOptional:!0},maxTokensPerRun:{type:K.Int_unsecure(),isOptional:!0},timeoutMs:{type:K.Int_unsecure(),isOptional:!0},tags:{type:K.String_unsecure(),isArray:!0,isOptional:!0}}});import{defineCommand as y0,defineQuery as U1}from"@contractspec/lib.contracts-spec/operations";import{defineSchemaModel as n,ScalarTypeEnum as h}from"@contractspec/lib.schema";var J0=["@agent-console-team"],K2=y0({meta:{key:"agent-console.agent.create",version:"1.0.0",stability:"stable",owners:[...J0],tags:["agent","create"],description:"Creates a new AI agent configuration.",goal:"Allow users to define new AI agents with specific models and tools.",context:"Called from the agent builder UI when creating a new agent."},io:{input:A2,output:n({name:"CreateAgentOutput",fields:{id:{type:h.String_unsecure(),isOptional:!1},name:{type:h.NonEmptyString(),isOptional:!1},slug:{type:h.String_unsecure(),isOptional:!1},status:{type:s,isOptional:!1}}}),errors:{SLUG_EXISTS:{description:"An agent with this slug already exists in the organization",http:409,gqlCode:"SLUG_EXISTS",when:"Slug is already taken"}}},policy:{auth:"user"},sideEffects:{emits:[{ref:F2.meta,when:"Agent is successfully created"}],audit:["agent-console.agent.created"]},acceptance:{scenarios:[{key:"create-agent-happy-path",given:["User is authenticated","Organization exists"],when:["User submits valid agent configuration"],then:["New agent is created with DRAFT status","AgentCreated event is emitted"]},{key:"create-agent-slug-conflict",given:["User is authenticated","Agent with same slug exists"],when:["User submits agent with duplicate slug"],then:["SLUG_EXISTS error is returned with 409 status"]}],examples:[{key:"basic-create",input:{name:"Support Assistant",slug:"support-assistant",modelProvider:"openai",modelId:"gpt-4"},output:{id:"agent-123",name:"Support Assistant",slug:"support-assistant",status:"draft"}}]}}),k2=y0({meta:{key:"agent-console.agent.update",version:"1.0.0",stability:"stable",owners:[...J0],tags:["agent","update"],description:"Updates an existing AI agent configuration.",goal:"Allow users to modify agent settings and configuration.",context:"Called from the agent settings UI."},io:{input:V2,output:n({name:"UpdateAgentOutput",fields:{id:{type:h.String_unsecure(),isOptional:!1},name:{type:h.NonEmptyString(),isOptional:!1},status:{type:s,isOptional:!1},updatedAt:{type:h.DateTime(),isOptional:!1}}}),errors:{AGENT_NOT_FOUND:{description:"The specified agent does not exist",http:404,gqlCode:"AGENT_NOT_FOUND",when:"Agent ID is invalid"}}},policy:{auth:"user"},sideEffects:{emits:[{key:"agent.updated",version:"1.0.0",stability:"stable",owners:[...J0],tags:["agent","updated"],when:"Agent is updated",payload:B0}],audit:["agent.updated"]},acceptance:{scenarios:[{key:"update-agent-happy-path",given:["Agent exists","User owns the agent"],when:["User submits updated configuration"],then:["Agent is updated","AgentUpdated event is emitted"]},{key:"update-agent-not-found",given:["Agent does not exist"],when:["User attempts to update"],then:["AGENT_NOT_FOUND error is returned"]}],examples:[{key:"update-name",input:{agentId:"agent-123",name:"Updated Assistant",systemPrompt:"You are a helpful assistant."},output:{id:"agent-123",name:"Updated Assistant",status:"draft",updatedAt:"2025-01-01T00:00:00Z"}}]}}),P2=U1({meta:{key:"agent-console.agent.get",version:"1.0.0",stability:"stable",owners:[...J0],tags:["agent","get"],description:"Retrieves an agent by its ID.",goal:"View detailed agent configuration.",context:"Called when viewing agent details or editing."},io:{input:n({name:"GetAgentInput",fields:{agentId:{type:h.String_unsecure(),isOptional:!1},includeTools:{type:h.Boolean(),isOptional:!0}}}),output:U2,errors:{AGENT_NOT_FOUND:{description:"The specified agent does not exist",http:404,gqlCode:"AGENT_NOT_FOUND",when:"Agent ID is invalid"}}},policy:{auth:"user"},acceptance:{scenarios:[{key:"get-agent-happy-path",given:["Agent exists"],when:["User requests agent by ID"],then:["Agent details are returned"]},{key:"get-agent-with-tools",given:["Agent exists with assigned tools"],when:["User requests agent with includeTools=true"],then:["Agent details with tools list are returned"]}],examples:[{key:"get-basic",input:{agentId:"agent-123",includeTools:!1},output:{id:"agent-123",name:"Support Assistant",status:"active",tools:[]}}]}}),I2=U1({meta:{key:"agent-console.agent.list",version:"1.0.0",stability:"stable",owners:[...J0],tags:["agent","list"],description:"Lists agents for an organization with optional filtering.",goal:"Browse and search available agents.",context:"Agent list/dashboard view."},io:{input:n({name:"ListAgentsInput",fields:{organizationId:{type:h.String_unsecure(),isOptional:!1},status:{type:s,isOptional:!0},modelProvider:{type:q0,isOptional:!0},search:{type:h.String_unsecure(),isOptional:!0},limit:{type:h.Int_unsecure(),isOptional:!0,defaultValue:20},offset:{type:h.Int_unsecure(),isOptional:!0,defaultValue:0}}}),output:n({name:"ListAgentsOutput",fields:{items:{type:B0,isArray:!0,isOptional:!1},total:{type:h.Int_unsecure(),isOptional:!1},hasMore:{type:h.Boolean(),isOptional:!1}}})},policy:{auth:"user"},acceptance:{scenarios:[{key:"list-agents-happy-path",given:["Organization has agents"],when:["User lists agents"],then:["Paginated list of agents is returned"]},{key:"list-agents-filter-by-status",given:["Organization has agents with mixed statuses"],when:["User filters by status=active"],then:["Only active agents are returned"]}],examples:[{key:"list-basic",input:{organizationId:"org-123",limit:10,offset:0},output:{items:[],total:0,hasMore:!1}}]}}),v4=y0({meta:{key:"agent-console.agent.assignTool",version:"1.0.0",stability:"stable",owners:[...J0],tags:["agent","tool","assign"],description:"Assigns a tool to an agent with optional configuration.",goal:"Enable agents to use specific tools.",context:"Agent configuration UI - tool selection."},io:{input:n({name:"AssignToolToAgentInput",fields:{agentId:{type:h.String_unsecure(),isOptional:!1},toolId:{type:h.String_unsecure(),isOptional:!1},config:{type:h.JSONObject(),isOptional:!0},order:{type:h.Int_unsecure(),isOptional:!0}}}),output:n({name:"AssignToolToAgentOutput",fields:{agentToolId:{type:h.String_unsecure(),isOptional:!1},agentId:{type:h.String_unsecure(),isOptional:!1},toolId:{type:h.String_unsecure(),isOptional:!1}}}),errors:{TOOL_ALREADY_ASSIGNED:{description:"This tool is already assigned to the agent",http:409,gqlCode:"TOOL_ALREADY_ASSIGNED",when:"Tool assignment already exists"}}},policy:{auth:"user"},sideEffects:{audit:["agent.tool.assigned"]},acceptance:{scenarios:[{key:"assign-tool-happy-path",given:["Agent exists","Tool exists and is not assigned"],when:["User assigns tool to agent"],then:["Tool is assigned","Assignment ID is returned"]},{key:"assign-tool-already-assigned",given:["Tool is already assigned to agent"],when:["User attempts to assign again"],then:["TOOL_ALREADY_ASSIGNED error is returned"]}],examples:[{key:"assign-basic",input:{agentId:"agent-123",toolId:"tool-456"},output:{agentToolId:"at-789",agentId:"agent-123",toolId:"tool-456"}}]}}),W4=y0({meta:{key:"agent-console.agent.removeTool",version:"1.0.0",stability:"stable",owners:[...J0],tags:["agent","tool","remove"],description:"Removes a tool assignment from an agent.",goal:"Disable specific tools for an agent.",context:"Agent configuration UI - tool management."},io:{input:n({name:"RemoveToolFromAgentInput",fields:{agentId:{type:h.String_unsecure(),isOptional:!1},toolId:{type:h.String_unsecure(),isOptional:!1}}}),output:n({name:"RemoveToolFromAgentOutput",fields:{success:{type:h.Boolean(),isOptional:!1}}})},policy:{auth:"user"},sideEffects:{audit:["agent.tool.removed"]},acceptance:{scenarios:[{key:"remove-tool-happy-path",given:["Agent exists","Tool is assigned to agent"],when:["User removes tool from agent"],then:["Tool is unassigned","Success is returned"]}],examples:[{key:"remove-basic",input:{agentId:"agent-123",toolId:"tool-456"},output:{success:!0}}]}});var _4=m.length+1;async function N4(Z){let{organizationId:q,status:D,modelProvider:Y,search:X,limit:A=20,offset:z=0}=Z,V=m.filter((H)=>H.organizationId===q);if(D)V=V.filter((H)=>H.status===D);if(Y)V=V.filter((H)=>H.modelProvider===Y);if(X){let H=X.toLowerCase();V=V.filter((Q)=>Q.name.toLowerCase().includes(H)||Q.description?.toLowerCase().includes(H)||Q.tags?.some((G)=>G.toLowerCase().includes(H)))}let J=V.length;return{items:V.slice(z,z+A).map((H)=>({id:H.id,name:H.name,slug:H.slug,description:H.description,status:H.status,modelProvider:H.modelProvider,modelName:H.modelName,version:H.version,createdAt:H.createdAt})),total:J,hasMore:z+A<J}}async function L4(Z){let q=m.find((Y)=>Y.id===Z.agentId);if(!q)throw Error("AGENT_NOT_FOUND");let D={...q,toolIds:["tool-1","tool-2"]};if(Z.includeTools)D.tools=E.slice(0,2).map((Y)=>({id:Y.id,name:Y.name,slug:Y.slug,description:Y.description,category:Y.category}));return D}async function R4(Z){if(m.some((D)=>D.organizationId===Z.organizationId&&D.slug===Z.slug))throw Error("SLUG_EXISTS");return{id:`agent-${_4++}`,name:Z.name,slug:Z.slug,status:"DRAFT"}}async function O4(Z){let q=m.find((D)=>D.id===Z.agentId);if(!q)throw Error("AGENT_NOT_FOUND");return{id:q.id,name:Z.name??q.name,status:Z.status??q.status,updatedAt:new Date}}import{definePresentation as B2,StabilityEnum as v2}from"@contractspec/lib.contracts-spec";var M4=B2({meta:{key:"agent-console.agent.viewList",version:"1.0.0",title:"Agent List",description:"List view of AI agents with status, model provider, and version info",goal:"Provide an overview of all agents in an organization.",context:"Main landing page for agent management.",domain:"agent-console",owners:["@agent-console-team"],tags:["agent","list","dashboard"],stability:v2.Experimental},source:{type:"component",framework:"react",componentKey:"AgentListView",props:B0},targets:["react","markdown","application/json"],policy:{flags:["agent-console.enabled"]}}),b4=B2({meta:{key:"agent-console.agent.detail",version:"1.0.0",title:"Agent Details",description:"Detailed view of an AI agent with configuration, tools, and recent runs",goal:"Allow users to inspect and configure a specific agent.",context:"Detailed view of an agent.",domain:"agent-console",owners:["@agent-console-team"],tags:["agent","detail"],stability:v2.Experimental},source:{type:"component",framework:"react",componentKey:"AgentDetailView"},targets:["react","markdown"],policy:{flags:["agent-console.enabled"]}}),w4=B2({meta:{key:"agent-console.dashboard",version:"1.0.0",title:"Agent Console Dashboard",description:"Dashboard overview of AI agents, runs, and tools",goal:"Provide a high-level overview of the AI platform health and usage.",context:"Root dashboard of the Agent Console.",domain:"agent-console",owners:["@agent-console-team"],tags:["dashboard","overview"],stability:v2.Experimental},source:{type:"component",framework:"react",componentKey:"AgentConsoleDashboard"},targets:["react","markdown"],policy:{flags:["agent-console.enabled"]}});import{registerDocBlocks as C4}from"@contractspec/lib.contracts-spec/docs";var h4=[{id:"docs.examples.agent-console.goal",title:"Agent Console \u2014 Goal",summary:"AI agent ops console: tools, agents, runs, logs, and metrics.",kind:"goal",visibility:"public",route:"/docs/examples/agent-console/goal",tags:["ai","agents","goal"],body:`## Why it matters
2
+ import{defineVisualization as W1,VisualizationRegistry as T4}from"@contractspec/lib.contracts-spec/visualizations";var B1={key:"agent.run.list",version:"1.0.0"},k1={version:"1.0.0",domain:"ai-ops",stability:"experimental",owners:["@example.agent-console"],tags:["agent-console","visualization","operations"]},v1=W1({meta:{...k1,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:B1,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."}}}),_1=W1({meta:{...k1,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:B1,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."}}}),N1=W1({meta:{...k1,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:B1,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."}}}),k2=[v1,_1,N1],o3=new T4([...k2]),v2=k2.map((Z)=>({key:Z.meta.key,version:Z.meta.version}));function _2(Z){if(!Z)return"unknown";return Z.toISOString().slice(0,10)}function N0(Z){let D=new Map,$=new Map;for(let q of Z)D.set(q.status,(D.get(q.status)??0)+1),$.set(_2(q.startedAt??q.queuedAt),($.get(_2(q.startedAt??q.queuedAt))??0)+1);return[{key:"run-status",spec:v1,data:{data:Array.from(D.entries()).map(([q,J])=>({status:q,runs:J}))},title:"Run Status Breakdown",description:"Completed, failed, running, and cancelled runs in the sample.",height:260},{key:"run-activity",spec:_1,data:{data:Array.from($.entries()).sort(([q],[J])=>q.localeCompare(J)).map(([q,J])=>({day:q,runs:J}))},title:"Recent Run Activity",description:"Daily run volume derived from run start times."},{key:"run-efficiency",spec:N1,data:{data:Z.filter((q)=>typeof q.durationMs==="number").map((q)=>({totalTokens:q.totalTokens,durationMs:q.durationMs??0,estimatedCostUsd:q.estimatedCostUsd}))},title:"Duration vs Tokens",description:"Operational scatter plot for spotting inefficient runs."}]}import{defineFeature as y4}from"@contractspec/lib.contracts-spec/features";var n3=y4({meta:{key:"agent-console",version:"1.0.0",title:"AI Agent Console",description:"AI agent orchestration with tools, runs, and logs management",domain:"ai-ops",owners:["@agent-console-team"],tags:["ai","agents","orchestration"],stability:"stable"},operations:[{key:"agent-console.agent.create",version:"1.0.0"},{key:"agent-console.agent.update",version:"1.0.0"},{key:"agent-console.agent.get",version:"1.0.0"},{key:"agent-console.agent.list",version:"1.0.0"},{key:"agent-console.agent.assignTool",version:"1.0.0"},{key:"agent-console.agent.removeTool",version:"1.0.0"},{key:"agent.tool.create",version:"1.0.0"},{key:"agent.tool.update",version:"1.0.0"},{key:"agent.tool.get",version:"1.0.0"},{key:"agent.tool.list",version:"1.0.0"},{key:"agent.tool.test",version:"1.0.0"},{key:"agent.run.execute",version:"1.0.0"},{key:"agent.run.cancel",version:"1.0.0"},{key:"agent.run.get",version:"1.0.0"},{key:"agent.run.list",version:"1.0.0"},{key:"agent.run.getSteps",version:"1.0.0"},{key:"agent.run.getLogs",version:"1.0.0"},{key:"agent.run.getMetrics",version:"1.0.0"}],events:[{key:"agent-console.agent.created",version:"1.0.0"},{key:"agent-console.agent.updated",version:"1.0.0"},{key:"agent-console.agent.toolAssigned",version:"1.0.0"},{key:"agent-console.agent.toolRemoved",version:"1.0.0"},{key:"agent.tool.created",version:"1.0.0"},{key:"agent.tool.updated",version:"1.0.0"},{key:"agent.tool.statusChanged",version:"1.0.0"},{key:"agent.run.started",version:"1.0.0"},{key:"agent.run.completed",version:"1.0.0"},{key:"agent.run.failed",version:"1.0.0"},{key:"agent.run.cancelled",version:"1.0.0"},{key:"agent.run.toolInvoked",version:"1.0.0"},{key:"agent.run.toolCompleted",version:"1.0.0"},{key:"agent.run.messageGenerated",version:"1.0.0"}],presentations:[{key:"agent-console.dashboard",version:"1.0.0"},{key:"agent-console.agent.viewList",version:"1.0.0"},{key:"agent-console.agent.detail",version:"1.0.0"},{key:"agent-console.run.list",version:"1.0.0"},{key:"agent-console.run.detail",version:"1.0.0"},{key:"agent-console.tool.list",version:"1.0.0"},{key:"agent-console.tool.detail",version:"1.0.0"}],opToPresentation:[{op:{key:"agent-console.agent.list",version:"1.0.0"},pres:{key:"agent-console.agent.viewList",version:"1.0.0"}},{op:{key:"agent-console.agent.get",version:"1.0.0"},pres:{key:"agent-console.agent.detail",version:"1.0.0"}},{op:{key:"agent.run.list",version:"1.0.0"},pres:{key:"agent-console.run.list",version:"1.0.0"}},{op:{key:"agent.run.get",version:"1.0.0"},pres:{key:"agent-console.run.detail",version:"1.0.0"}},{op:{key:"agent.tool.list",version:"1.0.0"},pres:{key:"agent-console.tool.list",version:"1.0.0"}},{op:{key:"agent.tool.get",version:"1.0.0"},pres:{key:"agent-console.tool.detail",version:"1.0.0"}}],presentationsTargets:[{key:"agent-console.dashboard",version:"1.0.0",targets:["react","markdown"]},{key:"agent-console.agent.viewList",version:"1.0.0",targets:["react","markdown","application/json"]},{key:"agent-console.run.list",version:"1.0.0",targets:["react","markdown","application/json"]},{key:"agent-console.tool.list",version:"1.0.0",targets:["react","markdown","application/json"]}],visualizations:v2,capabilities:{requires:[{key:"identity",version:"1.0.0"},{key:"audit-trail",version:"1.0.0"},{key:"jobs",version:"1.0.0"}],provides:[{key:"agent",version:"1.0.0"}]},telemetry:[{key:"agent-console.telemetry",version:"1.0.0"}],jobs:[{key:"agent-console.job.run-execution",version:"1.0.0"}],docs:["docs.examples.agent-console.goal","docs.examples.agent-console.usage","docs.examples.agent-console.reference","docs.examples.agent-console.constraints"]});import{defineEntity as N2,defineEntityEnum as L2,field as w,index as C0}from"@contractspec/lib.schema";var R2=L2({name:"AgentStatus",values:["DRAFT","ACTIVE","PAUSED","ARCHIVED"],description:"Lifecycle status of the agent"}),O2=L2({name:"ModelProvider",values:["OPENAI","ANTHROPIC","GOOGLE","MISTRAL","CUSTOM"],description:"AI model provider"}),d4=N2({name:"Agent",schema:"agent_console",description:"Represents an AI agent configuration with assigned tools and parameters.",fields:{id:w.id(),organizationId:w.string({description:"Organization that owns this agent"}),name:w.string({description:"Agent name (1-100 chars)"}),slug:w.string({description:"URL-safe identifier (lowercase, numbers, hyphens)"}),description:w.string({isOptional:!0,description:"Agent description (max 1000 chars)"}),status:w.enum("AgentStatus",{default:"DRAFT"}),modelProvider:w.enum("ModelProvider",{default:"OPENAI"}),modelName:w.string({description:"Model identifier: 'gpt-4', 'claude-3-opus', etc."}),modelConfig:w.json({isOptional:!0,description:"Model parameters: temperature, max_tokens, etc."}),systemPrompt:w.string({description:"System prompt for the agent"}),userPromptTemplate:w.string({isOptional:!0,description:"Template for user prompts"}),toolIds:w.string({isArray:!0,isOptional:!0,description:"IDs of assigned tools"}),toolChoice:w.string({default:"auto",description:"Tool selection mode: 'auto', 'required', 'none'"}),maxIterations:w.int({default:10,description:"Maximum iterations per run"}),maxTokensPerRun:w.int({isOptional:!0,description:"Maximum tokens per run"}),timeoutMs:w.int({default:120000,description:"Execution timeout in milliseconds"}),version:w.string({default:"1.0.0",description:"Agent version"}),tags:w.string({isArray:!0,isOptional:!0,description:"Tags for categorization"}),createdAt:w.createdAt(),updatedAt:w.updatedAt(),createdById:w.string({isOptional:!0,description:"User who created this agent"}),tools:w.hasMany("Tool",{description:"Tools assigned to this agent"})},indexes:[C0.unique(["organizationId","slug"]),C0.on(["organizationId","status"]),C0.on(["modelProvider","modelName"])],enums:[R2,O2]}),m4=N2({name:"AgentTool",schema:"agent_console",description:"Links an agent to its assigned tools with configuration.",fields:{id:w.id(),agentId:w.foreignKey({description:"Agent ID"}),toolId:w.foreignKey({description:"Tool ID"}),config:w.json({isOptional:!0,description:"Tool-specific configuration for this agent"}),order:w.int({default:0,description:"Order of tool in agent tool list"}),isEnabled:w.boolean({default:!0,description:"Whether tool is enabled for this agent"}),createdAt:w.createdAt(),agent:w.belongsTo("Agent",["agentId"],["id"]),tool:w.belongsTo("Tool",["toolId"],["id"])},indexes:[C0.unique(["agentId","toolId"]),C0.on(["agentId","order"])]});import{defineEnum as L1}from"@contractspec/lib.schema";var e=L1("AgentStatus",["DRAFT","ACTIVE","PAUSED","ARCHIVED"]),J0=L1("ModelProvider",["OPENAI","ANTHROPIC","GOOGLE","MISTRAL","CUSTOM"]),L0=L1("ToolChoice",["auto","required","none"]);import{defineEvent as o0}from"@contractspec/lib.contracts-spec";import{defineSchemaModel as S0,ScalarTypeEnum as h}from"@contractspec/lib.schema";var r0=["@agent-console-team"],E4=S0({name:"AgentCreatedPayload",description:"Payload for agent created event",fields:{id:{type:h.String_unsecure(),isOptional:!1},organizationId:{type:h.String_unsecure(),isOptional:!1},name:{type:h.String_unsecure(),isOptional:!1},slug:{type:h.String_unsecure(),isOptional:!1},modelProvider:{type:h.String_unsecure(),isOptional:!1},modelName:{type:h.String_unsecure(),isOptional:!1},toolCount:{type:h.Int_unsecure(),isOptional:!1},createdById:{type:h.String_unsecure(),isOptional:!0},createdAt:{type:h.DateTime(),isOptional:!1}}}),R1=o0({meta:{key:"agent-console.agent.created",version:"1.0.0",description:"A new AI agent was configured.",stability:"stable",owners:[...r0],tags:["agent","created"]},payload:E4}),p4=S0({name:"AgentUpdatedPayload",description:"Payload for agent updated event",fields:{id:{type:h.String_unsecure(),isOptional:!1},organizationId:{type:h.String_unsecure(),isOptional:!1},name:{type:h.String_unsecure(),isOptional:!1},status:{type:h.String_unsecure(),isOptional:!1},updatedFields:{type:h.String_unsecure(),isArray:!0,isOptional:!1},updatedAt:{type:h.DateTime(),isOptional:!1}}}),o4=o0({meta:{key:"agent-console.agent.updated",version:"1.0.0",description:"An AI agent configuration was updated.",stability:"stable",owners:[...r0],tags:["agent","updated"]},payload:p4}),S4=S0({name:"AgentToolAssignedPayload",description:"Payload for agent tool assigned event",fields:{agentId:{type:h.String_unsecure(),isOptional:!1},toolId:{type:h.String_unsecure(),isOptional:!1},agentName:{type:h.String_unsecure(),isOptional:!1},toolName:{type:h.String_unsecure(),isOptional:!1},assignedAt:{type:h.DateTime(),isOptional:!1}}}),r4=o0({meta:{key:"agent-console.agent.toolAssigned",version:"1.0.0",description:"A tool was assigned to an agent.",stability:"stable",owners:[...r0],tags:["agent","tool","assigned"]},payload:S4}),c4=S0({name:"AgentToolRemovedPayload",description:"Payload for agent tool removed event",fields:{agentId:{type:h.String_unsecure(),isOptional:!1},toolId:{type:h.String_unsecure(),isOptional:!1},agentName:{type:h.String_unsecure(),isOptional:!1},toolName:{type:h.String_unsecure(),isOptional:!1},removedAt:{type:h.DateTime(),isOptional:!1}}}),i4=o0({meta:{key:"agent-console.agent.toolRemoved",version:"1.0.0",description:"A tool was removed from an agent.",stability:"stable",owners:[...r0],tags:["agent","tool","removed"]},payload:c4});var d=[{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 m=[{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")}];import{defineSchemaModel as R0,ScalarTypeEnum as V}from"@contractspec/lib.schema";var u4=R0({name:"Agent",description:"AI agent configuration",fields:{id:{type:V.String_unsecure(),isOptional:!1},organizationId:{type:V.String_unsecure(),isOptional:!1},name:{type:V.NonEmptyString(),isOptional:!1},slug:{type:V.String_unsecure(),isOptional:!1},description:{type:V.String_unsecure(),isOptional:!0},status:{type:e,isOptional:!1},modelProvider:{type:J0,isOptional:!1},modelName:{type:V.NonEmptyString(),isOptional:!1},modelConfig:{type:V.JSONObject(),isOptional:!0},systemPrompt:{type:V.String_unsecure(),isOptional:!1},userPromptTemplate:{type:V.String_unsecure(),isOptional:!0},toolIds:{type:V.String_unsecure(),isArray:!0,isOptional:!0},toolChoice:{type:L0,isOptional:!1,defaultValue:"auto"},maxIterations:{type:V.Int_unsecure(),isOptional:!1,defaultValue:10},maxTokensPerRun:{type:V.Int_unsecure(),isOptional:!0},timeoutMs:{type:V.Int_unsecure(),isOptional:!1,defaultValue:120000},version:{type:V.NonEmptyString(),isOptional:!1},tags:{type:V.String_unsecure(),isArray:!0,isOptional:!0},createdAt:{type:V.DateTime(),isOptional:!1},updatedAt:{type:V.DateTime(),isOptional:!1}}}),O0=R0({name:"AgentSummary",description:"Summary of an agent for list views",fields:{id:{type:V.String_unsecure(),isOptional:!1},name:{type:V.NonEmptyString(),isOptional:!1},slug:{type:V.String_unsecure(),isOptional:!1},description:{type:V.String_unsecure(),isOptional:!0},status:{type:e,isOptional:!1},modelProvider:{type:J0,isOptional:!1},modelName:{type:V.NonEmptyString(),isOptional:!1},version:{type:V.NonEmptyString(),isOptional:!1},createdAt:{type:V.DateTime(),isOptional:!1}}}),M2=R0({name:"AgentToolRef",description:"Tool reference in agent context",fields:{id:{type:V.String_unsecure(),isOptional:!1},name:{type:V.NonEmptyString(),isOptional:!1},slug:{type:V.String_unsecure(),isOptional:!1},description:{type:V.String_unsecure(),isOptional:!1},category:{type:V.String_unsecure(),isOptional:!1}}}),O1=R0({name:"AgentWithTools",description:"Agent with associated tools",fields:{id:{type:V.String_unsecure(),isOptional:!1},organizationId:{type:V.String_unsecure(),isOptional:!1},name:{type:V.NonEmptyString(),isOptional:!1},slug:{type:V.String_unsecure(),isOptional:!1},description:{type:V.String_unsecure(),isOptional:!0},status:{type:e,isOptional:!1},modelProvider:{type:J0,isOptional:!1},modelName:{type:V.NonEmptyString(),isOptional:!1},modelConfig:{type:V.JSONObject(),isOptional:!0},systemPrompt:{type:V.String_unsecure(),isOptional:!1},userPromptTemplate:{type:V.String_unsecure(),isOptional:!0},toolIds:{type:V.String_unsecure(),isArray:!0,isOptional:!0},toolChoice:{type:L0,isOptional:!1},maxIterations:{type:V.Int_unsecure(),isOptional:!1},maxTokensPerRun:{type:V.Int_unsecure(),isOptional:!0},timeoutMs:{type:V.Int_unsecure(),isOptional:!1},version:{type:V.NonEmptyString(),isOptional:!1},tags:{type:V.String_unsecure(),isArray:!0,isOptional:!0},createdAt:{type:V.DateTime(),isOptional:!1},updatedAt:{type:V.DateTime(),isOptional:!1},tools:{type:M2,isArray:!0,isOptional:!0}}}),M1=R0({name:"CreateAgentInput",description:"Input for creating an agent",fields:{organizationId:{type:V.String_unsecure(),isOptional:!1},name:{type:V.NonEmptyString(),isOptional:!1},slug:{type:V.String_unsecure(),isOptional:!1},description:{type:V.String_unsecure(),isOptional:!0},modelProvider:{type:J0,isOptional:!1},modelName:{type:V.NonEmptyString(),isOptional:!1},modelConfig:{type:V.JSONObject(),isOptional:!0},systemPrompt:{type:V.String_unsecure(),isOptional:!1},userPromptTemplate:{type:V.String_unsecure(),isOptional:!0},toolIds:{type:V.String_unsecure(),isArray:!0,isOptional:!0},toolChoice:{type:L0,isOptional:!0},maxIterations:{type:V.Int_unsecure(),isOptional:!0},maxTokensPerRun:{type:V.Int_unsecure(),isOptional:!0},timeoutMs:{type:V.Int_unsecure(),isOptional:!0},tags:{type:V.String_unsecure(),isArray:!0,isOptional:!0}}}),b1=R0({name:"UpdateAgentInput",description:"Input for updating an agent",fields:{agentId:{type:V.String_unsecure(),isOptional:!1},name:{type:V.NonEmptyString(),isOptional:!0},description:{type:V.String_unsecure(),isOptional:!0},status:{type:e,isOptional:!0},modelConfig:{type:V.JSONObject(),isOptional:!0},systemPrompt:{type:V.String_unsecure(),isOptional:!0},userPromptTemplate:{type:V.String_unsecure(),isOptional:!0},toolIds:{type:V.String_unsecure(),isArray:!0,isOptional:!0},toolChoice:{type:L0,isOptional:!0},maxIterations:{type:V.Int_unsecure(),isOptional:!0},maxTokensPerRun:{type:V.Int_unsecure(),isOptional:!0},timeoutMs:{type:V.Int_unsecure(),isOptional:!0},tags:{type:V.String_unsecure(),isArray:!0,isOptional:!0}}});import{defineCommand as c0,defineQuery as b2}from"@contractspec/lib.contracts-spec/operations";import{defineSchemaModel as D0,ScalarTypeEnum as C}from"@contractspec/lib.schema";var U0=["@agent-console-team"],w1=c0({meta:{key:"agent-console.agent.create",version:"1.0.0",stability:"stable",owners:[...U0],tags:["agent","create"],description:"Creates a new AI agent configuration.",goal:"Allow users to define new AI agents with specific models and tools.",context:"Called from the agent builder UI when creating a new agent."},io:{input:M1,output:D0({name:"CreateAgentOutput",fields:{id:{type:C.String_unsecure(),isOptional:!1},name:{type:C.NonEmptyString(),isOptional:!1},slug:{type:C.String_unsecure(),isOptional:!1},status:{type:e,isOptional:!1}}}),errors:{SLUG_EXISTS:{description:"An agent with this slug already exists in the organization",http:409,gqlCode:"SLUG_EXISTS",when:"Slug is already taken"}}},policy:{auth:"user"},sideEffects:{emits:[{ref:R1.meta,when:"Agent is successfully created"}],audit:["agent-console.agent.created"]},acceptance:{scenarios:[{key:"create-agent-happy-path",given:["User is authenticated","Organization exists"],when:["User submits valid agent configuration"],then:["New agent is created with DRAFT status","AgentCreated event is emitted"]},{key:"create-agent-slug-conflict",given:["User is authenticated","Agent with same slug exists"],when:["User submits agent with duplicate slug"],then:["SLUG_EXISTS error is returned with 409 status"]}],examples:[{key:"basic-create",input:{name:"Support Assistant",slug:"support-assistant",modelProvider:"openai",modelId:"gpt-4"},output:{id:"agent-123",name:"Support Assistant",slug:"support-assistant",status:"draft"}}]}}),h1=c0({meta:{key:"agent-console.agent.update",version:"1.0.0",stability:"stable",owners:[...U0],tags:["agent","update"],description:"Updates an existing AI agent configuration.",goal:"Allow users to modify agent settings and configuration.",context:"Called from the agent settings UI."},io:{input:b1,output:D0({name:"UpdateAgentOutput",fields:{id:{type:C.String_unsecure(),isOptional:!1},name:{type:C.NonEmptyString(),isOptional:!1},status:{type:e,isOptional:!1},updatedAt:{type:C.DateTime(),isOptional:!1}}}),errors:{AGENT_NOT_FOUND:{description:"The specified agent does not exist",http:404,gqlCode:"AGENT_NOT_FOUND",when:"Agent ID is invalid"}}},policy:{auth:"user"},sideEffects:{emits:[{key:"agent.updated",version:"1.0.0",stability:"stable",owners:[...U0],tags:["agent","updated"],when:"Agent is updated",payload:O0}],audit:["agent.updated"]},acceptance:{scenarios:[{key:"update-agent-happy-path",given:["Agent exists","User owns the agent"],when:["User submits updated configuration"],then:["Agent is updated","AgentUpdated event is emitted"]},{key:"update-agent-not-found",given:["Agent does not exist"],when:["User attempts to update"],then:["AGENT_NOT_FOUND error is returned"]}],examples:[{key:"update-name",input:{agentId:"agent-123",name:"Updated Assistant",systemPrompt:"You are a helpful assistant."},output:{id:"agent-123",name:"Updated Assistant",status:"draft",updatedAt:"2025-01-01T00:00:00Z"}}]}}),C1=b2({meta:{key:"agent-console.agent.get",version:"1.0.0",stability:"stable",owners:[...U0],tags:["agent","get"],description:"Retrieves an agent by its ID.",goal:"View detailed agent configuration.",context:"Called when viewing agent details or editing."},io:{input:D0({name:"GetAgentInput",fields:{agentId:{type:C.String_unsecure(),isOptional:!1},includeTools:{type:C.Boolean(),isOptional:!0}}}),output:O1,errors:{AGENT_NOT_FOUND:{description:"The specified agent does not exist",http:404,gqlCode:"AGENT_NOT_FOUND",when:"Agent ID is invalid"}}},policy:{auth:"user"},acceptance:{scenarios:[{key:"get-agent-happy-path",given:["Agent exists"],when:["User requests agent by ID"],then:["Agent details are returned"]},{key:"get-agent-with-tools",given:["Agent exists with assigned tools"],when:["User requests agent with includeTools=true"],then:["Agent details with tools list are returned"]}],examples:[{key:"get-basic",input:{agentId:"agent-123",includeTools:!1},output:{id:"agent-123",name:"Support Assistant",status:"active",tools:[]}}]}}),f1=b2({meta:{key:"agent-console.agent.list",version:"1.0.0",stability:"stable",owners:[...U0],tags:["agent","list"],description:"Lists agents for an organization with optional filtering.",goal:"Browse and search available agents.",context:"Agent list/dashboard view."},io:{input:D0({name:"ListAgentsInput",fields:{organizationId:{type:C.String_unsecure(),isOptional:!1},status:{type:e,isOptional:!0},modelProvider:{type:J0,isOptional:!0},search:{type:C.String_unsecure(),isOptional:!0},limit:{type:C.Int_unsecure(),isOptional:!0,defaultValue:20},offset:{type:C.Int_unsecure(),isOptional:!0,defaultValue:0}}}),output:D0({name:"ListAgentsOutput",fields:{items:{type:O0,isArray:!0,isOptional:!1},total:{type:C.Int_unsecure(),isOptional:!1},hasMore:{type:C.Boolean(),isOptional:!1}}})},policy:{auth:"user"},acceptance:{scenarios:[{key:"list-agents-happy-path",given:["Organization has agents"],when:["User lists agents"],then:["Paginated list of agents is returned"]},{key:"list-agents-filter-by-status",given:["Organization has agents with mixed statuses"],when:["User filters by status=active"],then:["Only active agents are returned"]}],examples:[{key:"list-basic",input:{organizationId:"org-123",limit:10,offset:0},output:{items:[],total:0,hasMore:!1}}]}}),l4=c0({meta:{key:"agent-console.agent.assignTool",version:"1.0.0",stability:"stable",owners:[...U0],tags:["agent","tool","assign"],description:"Assigns a tool to an agent with optional configuration.",goal:"Enable agents to use specific tools.",context:"Agent configuration UI - tool selection."},io:{input:D0({name:"AssignToolToAgentInput",fields:{agentId:{type:C.String_unsecure(),isOptional:!1},toolId:{type:C.String_unsecure(),isOptional:!1},config:{type:C.JSONObject(),isOptional:!0},order:{type:C.Int_unsecure(),isOptional:!0}}}),output:D0({name:"AssignToolToAgentOutput",fields:{agentToolId:{type:C.String_unsecure(),isOptional:!1},agentId:{type:C.String_unsecure(),isOptional:!1},toolId:{type:C.String_unsecure(),isOptional:!1}}}),errors:{TOOL_ALREADY_ASSIGNED:{description:"This tool is already assigned to the agent",http:409,gqlCode:"TOOL_ALREADY_ASSIGNED",when:"Tool assignment already exists"}}},policy:{auth:"user"},sideEffects:{audit:["agent.tool.assigned"]},acceptance:{scenarios:[{key:"assign-tool-happy-path",given:["Agent exists","Tool exists and is not assigned"],when:["User assigns tool to agent"],then:["Tool is assigned","Assignment ID is returned"]},{key:"assign-tool-already-assigned",given:["Tool is already assigned to agent"],when:["User attempts to assign again"],then:["TOOL_ALREADY_ASSIGNED error is returned"]}],examples:[{key:"assign-basic",input:{agentId:"agent-123",toolId:"tool-456"},output:{agentToolId:"at-789",agentId:"agent-123",toolId:"tool-456"}}]}}),s4=c0({meta:{key:"agent-console.agent.removeTool",version:"1.0.0",stability:"stable",owners:[...U0],tags:["agent","tool","remove"],description:"Removes a tool assignment from an agent.",goal:"Disable specific tools for an agent.",context:"Agent configuration UI - tool management."},io:{input:D0({name:"RemoveToolFromAgentInput",fields:{agentId:{type:C.String_unsecure(),isOptional:!1},toolId:{type:C.String_unsecure(),isOptional:!1}}}),output:D0({name:"RemoveToolFromAgentOutput",fields:{success:{type:C.Boolean(),isOptional:!1}}})},policy:{auth:"user"},sideEffects:{audit:["agent.tool.removed"]},acceptance:{scenarios:[{key:"remove-tool-happy-path",given:["Agent exists","Tool is assigned to agent"],when:["User removes tool from agent"],then:["Tool is unassigned","Success is returned"]}],examples:[{key:"remove-basic",input:{agentId:"agent-123",toolId:"tool-456"},output:{success:!0}}]}});var t4=d.length+1;async function n4(Z){let{organizationId:D,status:$,modelProvider:q,search:J,limit:z=20,offset:X=0}=Z,A=d.filter((H)=>H.organizationId===D);if($)A=A.filter((H)=>H.status===$);if(q)A=A.filter((H)=>H.modelProvider===q);if(J){let H=J.toLowerCase();A=A.filter((Q)=>Q.name.toLowerCase().includes(H)||Q.description?.toLowerCase().includes(H)||Q.tags?.some((U)=>U.toLowerCase().includes(H)))}let Y=A.length;return{items:A.slice(X,X+z).map((H)=>({id:H.id,name:H.name,slug:H.slug,description:H.description,status:H.status,modelProvider:H.modelProvider,modelName:H.modelName,version:H.version,createdAt:H.createdAt})),total:Y,hasMore:X+z<Y}}async function e4(Z){let D=d.find((q)=>q.id===Z.agentId);if(!D)throw Error("AGENT_NOT_FOUND");let $={...D,toolIds:["tool-1","tool-2"]};if(Z.includeTools)$.tools=m.slice(0,2).map((q)=>({id:q.id,name:q.name,slug:q.slug,description:q.description,category:q.category}));return $}async function a4(Z){if(d.some(($)=>$.organizationId===Z.organizationId&&$.slug===Z.slug))throw Error("SLUG_EXISTS");return{id:`agent-${t4++}`,name:Z.name,slug:Z.slug,status:"DRAFT"}}async function Z5(Z){let D=d.find(($)=>$.id===Z.agentId);if(!D)throw Error("AGENT_NOT_FOUND");return{id:D.id,name:Z.name??D.name,status:Z.status??D.status,updatedAt:new Date}}import{definePresentation as g1,StabilityEnum as j1}from"@contractspec/lib.contracts-spec";var D5=g1({meta:{key:"agent-console.agent.viewList",version:"1.0.0",title:"Agent List",description:"List view of AI agents with status, model provider, and version info",goal:"Provide an overview of all agents in an organization.",context:"Main landing page for agent management.",domain:"agent-console",owners:["@agent-console-team"],tags:["agent","list","dashboard"],stability:j1.Experimental},source:{type:"component",framework:"react",componentKey:"AgentListView",props:O0},targets:["react","markdown","application/json"],policy:{flags:["agent-console.enabled"]}}),q5=g1({meta:{key:"agent-console.agent.detail",version:"1.0.0",title:"Agent Details",description:"Detailed view of an AI agent with configuration, tools, and recent runs",goal:"Allow users to inspect and configure a specific agent.",context:"Detailed view of an agent.",domain:"agent-console",owners:["@agent-console-team"],tags:["agent","detail"],stability:j1.Experimental},source:{type:"component",framework:"react",componentKey:"AgentDetailView"},targets:["react","markdown"],policy:{flags:["agent-console.enabled"]}}),H5=g1({meta:{key:"agent-console.dashboard",version:"1.0.0",title:"Agent Console Dashboard",description:"Dashboard overview of AI agents, runs, and tools",goal:"Provide a high-level overview of the AI platform health and usage.",context:"Root dashboard of the Agent Console.",domain:"agent-console",owners:["@agent-console-team"],tags:["dashboard","overview"],stability:j1.Experimental},source:{type:"component",framework:"react",componentKey:"AgentConsoleDashboard"},targets:["react","markdown"],policy:{flags:["agent-console.enabled"]}});import{registerDocBlocks as $5}from"@contractspec/lib.contracts-spec/docs";var Y5=[{id:"docs.examples.agent-console.goal",title:"Agent Console \u2014 Goal",summary:"AI agent ops console: tools, agents, runs, logs, and metrics.",kind:"goal",visibility:"public",route:"/docs/examples/agent-console/goal",tags:["ai","agents","goal"],body:`## Why it matters
3
3
  - Provides a regenerable agent operations surface with tool registry and run history.
4
4
  - Prevents drift between tool schemas, agent configs, and execution logs.
5
5
 
@@ -50,20 +50,20 @@ import{defineVisualization as Y2,VisualizationRegistry as z4}from"@contractspec/
50
50
  ## Verification
51
51
  - Add fixtures for tool schema changes and run lifecycle.
52
52
  - Ensure Audit/Notifications remain wired for runs; metrics collection unchanged.
53
- - Use Feature Flags to gate risky tools; default safe/off.`}];C4(h4);import{defineExample as f4}from"@contractspec/lib.contracts-spec/examples";var j4=f4({meta:{key:"agent-console",version:"1.0.0",title:"Agent Console",description:"Agent Console example - AI agent orchestration with tools, runs, and logs",kind:"template",visibility:"public",stability:"experimental",owners:["@contractspec-core"],tags:["package","examples","agent-console","agents","autonomous"]},surfaces:{templates:!0,sandbox:{enabled:!0,modes:["playground","specs"]},studio:{enabled:!1,installable:!1},mcp:{enabled:!1}},entrypoints:{packageName:"@contractspec/example.agent-console"}}),x4=j4;import{defineEnum as d0}from"@contractspec/lib.schema";var a=d0("RunStatus",["QUEUED","IN_PROGRESS","COMPLETED","FAILED","CANCELLED","EXPIRED"]),W2=d0("RunStepType",["MESSAGE_CREATION","TOOL_CALL","TOOL_RESULT","ERROR"]),R0=d0("LogLevel",["DEBUG","INFO","WARN","ERROR"]),_2=d0("Granularity",["hour","day","week","month"]);import{defineSchemaModel as $0,ScalarTypeEnum as I}from"@contractspec/lib.schema";var N2=$0({name:"RunInput",description:"Input data for agent execution",fields:{message:{type:I.NonEmptyString(),isOptional:!1},context:{type:I.JSONObject(),isOptional:!0}}}),m0=$0({name:"RunStep",description:"Individual step within a run",fields:{id:{type:I.String_unsecure(),isOptional:!1},stepNumber:{type:I.Int_unsecure(),isOptional:!1},type:{type:W2,isOptional:!1},toolId:{type:I.String_unsecure(),isOptional:!0},toolName:{type:I.String_unsecure(),isOptional:!0},input:{type:I.JSONObject(),isOptional:!0},output:{type:I.JSONObject(),isOptional:!0},status:{type:a,isOptional:!1},errorMessage:{type:I.String_unsecure(),isOptional:!0},tokensUsed:{type:I.Int_unsecure(),isOptional:!1,defaultValue:0},durationMs:{type:I.Int_unsecure(),isOptional:!0},startedAt:{type:I.DateTime(),isOptional:!1},completedAt:{type:I.DateTime(),isOptional:!0}}}),E0=$0({name:"RunLog",description:"Execution log entry",fields:{id:{type:I.String_unsecure(),isOptional:!1},stepId:{type:I.String_unsecure(),isOptional:!0},level:{type:R0,isOptional:!1},message:{type:I.String_unsecure(),isOptional:!1},data:{type:I.JSONObject(),isOptional:!0},source:{type:I.String_unsecure(),isOptional:!0},traceId:{type:I.String_unsecure(),isOptional:!0},spanId:{type:I.String_unsecure(),isOptional:!0},timestamp:{type:I.DateTime(),isOptional:!1}}}),A1=$0({name:"RunAgentRef",description:"Agent reference in a run",fields:{id:{type:I.String_unsecure(),isOptional:!1},name:{type:I.NonEmptyString(),isOptional:!1},modelProvider:{type:I.String_unsecure(),isOptional:!1},modelName:{type:I.String_unsecure(),isOptional:!1}}}),L2=$0({name:"Run",description:"Agent execution instance",fields:{id:{type:I.String_unsecure(),isOptional:!1},organizationId:{type:I.String_unsecure(),isOptional:!1},agentId:{type:I.String_unsecure(),isOptional:!1},userId:{type:I.String_unsecure(),isOptional:!0},sessionId:{type:I.String_unsecure(),isOptional:!0},input:{type:I.JSONObject(),isOptional:!1},output:{type:I.JSONObject(),isOptional:!0},status:{type:a,isOptional:!1},errorMessage:{type:I.String_unsecure(),isOptional:!0},errorCode:{type:I.String_unsecure(),isOptional:!0},totalTokens:{type:I.Int_unsecure(),isOptional:!1,defaultValue:0},promptTokens:{type:I.Int_unsecure(),isOptional:!1,defaultValue:0},completionTokens:{type:I.Int_unsecure(),isOptional:!1,defaultValue:0},totalIterations:{type:I.Int_unsecure(),isOptional:!1,defaultValue:0},durationMs:{type:I.Int_unsecure(),isOptional:!0},estimatedCostUsd:{type:I.Float_unsecure(),isOptional:!0},queuedAt:{type:I.DateTime(),isOptional:!1},startedAt:{type:I.DateTime(),isOptional:!0},completedAt:{type:I.DateTime(),isOptional:!0},metadata:{type:I.JSONObject(),isOptional:!0},steps:{type:m0,isArray:!0,isOptional:!0},logs:{type:E0,isArray:!0,isOptional:!0},agent:{type:A1,isOptional:!0}}}),X0=$0({name:"RunSummary",description:"Summary of a run for list views",fields:{id:{type:I.String_unsecure(),isOptional:!1},agentId:{type:I.String_unsecure(),isOptional:!1},agentName:{type:I.NonEmptyString(),isOptional:!1},status:{type:a,isOptional:!1},totalTokens:{type:I.Int_unsecure(),isOptional:!1},durationMs:{type:I.Int_unsecure(),isOptional:!0},estimatedCostUsd:{type:I.Float_unsecure(),isOptional:!0},queuedAt:{type:I.DateTime(),isOptional:!1},completedAt:{type:I.DateTime(),isOptional:!0}}}),R2=$0({name:"TimelineDataPoint",description:"Timeline data point for metrics",fields:{period:{type:I.String_unsecure(),isOptional:!1},runs:{type:I.Int_unsecure(),isOptional:!1},tokens:{type:I.Int_unsecure(),isOptional:!1},costUsd:{type:I.Float_unsecure(),isOptional:!1},avgDurationMs:{type:I.Float_unsecure(),isOptional:!1}}});import{defineCommand as V1,defineQuery as O0}from"@contractspec/lib.contracts-spec/operations";import{defineSchemaModel as S,ScalarTypeEnum as N}from"@contractspec/lib.schema";var e=["@agent-console-team"],O2=V1({meta:{key:"agent.run.execute",version:"1.0.0",stability:"stable",owners:[...e],tags:["run","execute"],description:"Starts a new agent run with the given input.",goal:"Execute an AI agent with user input.",context:"Called from chat interface or API."},io:{input:S({name:"ExecuteAgentInput",fields:{agentId:{type:N.String_unsecure(),isOptional:!1},input:{type:N2,isOptional:!1},sessionId:{type:N.String_unsecure(),isOptional:!0},metadata:{type:N.JSONObject(),isOptional:!0},stream:{type:N.Boolean(),isOptional:!0},maxIterations:{type:N.Int_unsecure(),isOptional:!0},timeoutMs:{type:N.Int_unsecure(),isOptional:!0}}}),output:S({name:"ExecuteAgentOutput",fields:{runId:{type:N.String_unsecure(),isOptional:!1},status:{type:a,isOptional:!1},estimatedWaitMs:{type:N.Int_unsecure(),isOptional:!0}}}),errors:{AGENT_NOT_FOUND:{description:"The specified agent does not exist",http:404,gqlCode:"AGENT_NOT_FOUND",when:"Agent ID is invalid"},AGENT_NOT_ACTIVE:{description:"The specified agent is not active",http:400,gqlCode:"AGENT_NOT_ACTIVE",when:"Agent is in draft/paused/archived state"}}},policy:{auth:"user"},sideEffects:{emits:[{key:"run.started",version:"1.0.0",stability:"stable",owners:[...e],tags:["run","started"],when:"Run is queued",payload:X0}],audit:["run.started"]},acceptance:{scenarios:[{key:"execute-agent-happy-path",given:["Agent exists","Agent is active"],when:["User submits execution request"],then:["Run is created","RunStarted event is emitted"]},{key:"execute-agent-not-active",given:["Agent exists but is not active"],when:["User attempts to execute"],then:["AGENT_NOT_ACTIVE error is returned"]}],examples:[{key:"basic-execute",input:{agentId:"agent-123",input:{message:"Hello"}},output:{runId:"run-456",status:"pending",estimatedWaitMs:5000}}]}}),K1=V1({meta:{key:"agent.run.cancel",version:"1.0.0",stability:"stable",owners:[...e],tags:["run","cancel"],description:"Cancels an in-progress agent run.",goal:"Stop a running agent execution.",context:"Called when user wants to abort a long-running task."},io:{input:S({name:"CancelRunInput",fields:{runId:{type:N.String_unsecure(),isOptional:!1},reason:{type:N.String_unsecure(),isOptional:!0}}}),output:S({name:"CancelRunOutput",fields:{success:{type:N.Boolean(),isOptional:!1},status:{type:a,isOptional:!1}}}),errors:{RUN_NOT_FOUND:{description:"The specified run does not exist",http:404,gqlCode:"RUN_NOT_FOUND",when:"Run ID is invalid"},RUN_NOT_CANCELLABLE:{description:"The run cannot be cancelled",http:400,gqlCode:"RUN_NOT_CANCELLABLE",when:"Run is already completed/failed/cancelled"}}},policy:{auth:"user"},sideEffects:{emits:[{key:"run.cancelled",version:"1.0.0",stability:"stable",owners:[...e],tags:["run","cancelled"],when:"Run is cancelled",payload:X0}],audit:["run.cancelled"]},acceptance:{scenarios:[{key:"cancel-run-happy-path",given:["Run exists","Run is in progress"],when:["User cancels run"],then:["Run is cancelled","RunCancelled event is emitted"]},{key:"cancel-run-already-completed",given:["Run exists but is already completed"],when:["User attempts to cancel"],then:["RUN_NOT_CANCELLABLE error is returned"]}],examples:[{key:"cancel-basic",input:{runId:"run-456",reason:"User requested"},output:{success:!0,status:"cancelled"}}]}}),k1=O0({meta:{key:"agent.run.get",version:"1.0.0",stability:"stable",owners:[...e],tags:["run","get"],description:"Retrieves a run by its ID with optional details.",goal:"View detailed run information.",context:"Run details page or monitoring."},io:{input:S({name:"GetRunInput",fields:{runId:{type:N.String_unsecure(),isOptional:!1},includeSteps:{type:N.Boolean(),isOptional:!0},includeLogs:{type:N.Boolean(),isOptional:!0}}}),output:L2,errors:{RUN_NOT_FOUND:{description:"The specified run does not exist",http:404,gqlCode:"RUN_NOT_FOUND",when:"Run ID is invalid"}}},policy:{auth:"user"},acceptance:{scenarios:[{key:"get-run-happy-path",given:["Run exists"],when:["User requests run by ID"],then:["Run details are returned"]}],examples:[{key:"get-with-steps",input:{runId:"run-456",includeSteps:!0,includeLogs:!1},output:{id:"run-456",status:"completed",steps:[]}}]}}),M2=O0({meta:{key:"agent.run.list",version:"1.0.0",stability:"stable",owners:[...e],tags:["run","list"],description:"Lists runs with optional filtering.",goal:"Browse and search run history.",context:"Run history/dashboard view."},io:{input:S({name:"ListRunsInput",fields:{organizationId:{type:N.String_unsecure(),isOptional:!0},agentId:{type:N.String_unsecure(),isOptional:!0},userId:{type:N.String_unsecure(),isOptional:!0},sessionId:{type:N.String_unsecure(),isOptional:!0},status:{type:a,isOptional:!0},startDate:{type:N.DateTime(),isOptional:!0},endDate:{type:N.DateTime(),isOptional:!0},limit:{type:N.Int_unsecure(),isOptional:!0,defaultValue:20},offset:{type:N.Int_unsecure(),isOptional:!0,defaultValue:0}}}),output:S({name:"ListRunsOutput",fields:{items:{type:X0,isArray:!0,isOptional:!1},total:{type:N.Int_unsecure(),isOptional:!1},hasMore:{type:N.Boolean(),isOptional:!1}}})},policy:{auth:"user"},acceptance:{scenarios:[{key:"list-runs-happy-path",given:["Organization has runs"],when:["User lists runs"],then:["Paginated list of runs is returned"]}],examples:[{key:"list-by-agent",input:{agentId:"agent-123",limit:20,offset:0},output:{items:[],total:0,hasMore:!1}}]}}),g4=O0({meta:{key:"agent.run.getSteps",version:"1.0.0",stability:"stable",owners:[...e],tags:["run","steps"],description:"Retrieves all steps for a specific run.",goal:"View step-by-step execution details.",context:"Run details page - steps tab."},io:{input:S({name:"GetRunStepsInput",fields:{runId:{type:N.String_unsecure(),isOptional:!1}}}),output:S({name:"GetRunStepsOutput",fields:{steps:{type:m0,isArray:!0,isOptional:!1}}})},policy:{auth:"user"},acceptance:{scenarios:[{key:"get-run-steps-happy-path",given:["Run exists with steps"],when:["User requests steps"],then:["Steps list is returned"]}],examples:[{key:"get-steps-basic",input:{runId:"run-456"},output:{steps:[]}}]}}),T4=O0({meta:{key:"agent.run.getLogs",version:"1.0.0",stability:"stable",owners:[...e],tags:["run","logs"],description:"Retrieves all logs for a specific run.",goal:"Debug and audit run execution.",context:"Run details page - logs tab."},io:{input:S({name:"GetRunLogsInput",fields:{runId:{type:N.String_unsecure(),isOptional:!1},level:{type:R0,isOptional:!0},stepId:{type:N.String_unsecure(),isOptional:!0},limit:{type:N.Int_unsecure(),isOptional:!0,defaultValue:100},offset:{type:N.Int_unsecure(),isOptional:!0,defaultValue:0}}}),output:S({name:"GetRunLogsOutput",fields:{items:{type:E0,isArray:!0,isOptional:!1},total:{type:N.Int_unsecure(),isOptional:!1},hasMore:{type:N.Boolean(),isOptional:!1}}})},policy:{auth:"user"},acceptance:{scenarios:[{key:"get-run-logs-happy-path",given:["Run exists with logs"],when:["User requests logs"],then:["Paginated logs list is returned"]}],examples:[{key:"get-logs-filtered",input:{runId:"run-456",level:"error",limit:50},output:{items:[],total:0,hasMore:!1}}]}}),P1=O0({meta:{key:"agent.run.getMetrics",version:"1.0.0",stability:"stable",owners:[...e],tags:["run","metrics"],description:"Retrieves aggregated metrics for runs within a time period.",goal:"Monitor and analyze agent usage.",context:"Analytics dashboard."},io:{input:S({name:"GetRunMetricsInput",fields:{organizationId:{type:N.String_unsecure(),isOptional:!1},agentId:{type:N.String_unsecure(),isOptional:!0},startDate:{type:N.DateTime(),isOptional:!1},endDate:{type:N.DateTime(),isOptional:!1},granularity:{type:_2,isOptional:!0,defaultValue:"day"}}}),output:S({name:"GetRunMetricsOutput",fields:{totalRuns:{type:N.Int_unsecure(),isOptional:!1},completedRuns:{type:N.Int_unsecure(),isOptional:!1},failedRuns:{type:N.Int_unsecure(),isOptional:!1},totalTokens:{type:N.Int_unsecure(),isOptional:!1},totalCostUsd:{type:N.Float_unsecure(),isOptional:!1},averageDurationMs:{type:N.Float_unsecure(),isOptional:!1},successRate:{type:N.Float_unsecure(),isOptional:!1},timeline:{type:R2,isArray:!0,isOptional:!1}}})},policy:{auth:"user"},acceptance:{scenarios:[{key:"get-run-metrics-happy-path",given:["Organization has run history"],when:["User requests metrics for date range"],then:["Aggregated metrics are returned"]}],examples:[{key:"get-daily-metrics",input:{organizationId:"org-123",startDate:"2025-01-01",endDate:"2025-01-31",granularity:"day"},output:{totalRuns:100,completedRuns:90,failedRuns:10,totalTokens:50000,totalCostUsd:5,averageDurationMs:2500,successRate:0.9,timeline:[]}}]}});import{defineEnum as b2}from"@contractspec/lib.schema";var z0=b2("ToolCategory",["RETRIEVAL","COMPUTATION","COMMUNICATION","INTEGRATION","UTILITY","CUSTOM"]),Z0=b2("ToolStatus",["DRAFT","ACTIVE","DEPRECATED","DISABLED"]),p0=b2("ImplementationType",["http","function","workflow"]);import{defineSchemaModel as o0,ScalarTypeEnum as O}from"@contractspec/lib.schema";var w2=o0({name:"Tool",description:"AI tool definition",fields:{id:{type:O.String_unsecure(),isOptional:!1},organizationId:{type:O.String_unsecure(),isOptional:!1},name:{type:O.NonEmptyString(),isOptional:!1},slug:{type:O.String_unsecure(),isOptional:!1},description:{type:O.String_unsecure(),isOptional:!1},category:{type:z0,isOptional:!1},status:{type:Z0,isOptional:!1},parametersSchema:{type:O.JSONObject(),isOptional:!1},outputSchema:{type:O.JSONObject(),isOptional:!0},implementationType:{type:p0,isOptional:!1},implementationConfig:{type:O.JSONObject(),isOptional:!1},maxInvocationsPerMinute:{type:O.Int_unsecure(),isOptional:!0},timeoutMs:{type:O.Int_unsecure(),isOptional:!1,defaultValue:30000},version:{type:O.NonEmptyString(),isOptional:!1},tags:{type:O.String_unsecure(),isArray:!0,isOptional:!0},createdAt:{type:O.DateTime(),isOptional:!1},updatedAt:{type:O.DateTime(),isOptional:!1}}}),Q0=o0({name:"ToolSummary",description:"Summary of a tool for list views",fields:{id:{type:O.String_unsecure(),isOptional:!1},name:{type:O.NonEmptyString(),isOptional:!1},slug:{type:O.String_unsecure(),isOptional:!1},description:{type:O.String_unsecure(),isOptional:!1},category:{type:z0,isOptional:!1},status:{type:Z0,isOptional:!1},version:{type:O.NonEmptyString(),isOptional:!1},createdAt:{type:O.DateTime(),isOptional:!1}}}),C2=o0({name:"CreateToolInput",description:"Input for creating a tool",fields:{organizationId:{type:O.String_unsecure(),isOptional:!1},name:{type:O.NonEmptyString(),isOptional:!1},slug:{type:O.String_unsecure(),isOptional:!1},description:{type:O.String_unsecure(),isOptional:!1},category:{type:z0,isOptional:!0},parametersSchema:{type:O.JSONObject(),isOptional:!1},outputSchema:{type:O.JSONObject(),isOptional:!0},implementationType:{type:p0,isOptional:!1},implementationConfig:{type:O.JSONObject(),isOptional:!1},maxInvocationsPerMinute:{type:O.Int_unsecure(),isOptional:!0},timeoutMs:{type:O.Int_unsecure(),isOptional:!0},tags:{type:O.String_unsecure(),isArray:!0,isOptional:!0}}}),h2=o0({name:"UpdateToolInput",description:"Input for updating a tool",fields:{toolId:{type:O.String_unsecure(),isOptional:!1},name:{type:O.NonEmptyString(),isOptional:!0},description:{type:O.String_unsecure(),isOptional:!0},status:{type:Z0,isOptional:!0},parametersSchema:{type:O.JSONObject(),isOptional:!0},outputSchema:{type:O.JSONObject(),isOptional:!0},implementationConfig:{type:O.JSONObject(),isOptional:!0},maxInvocationsPerMinute:{type:O.Int_unsecure(),isOptional:!0},timeoutMs:{type:O.Int_unsecure(),isOptional:!0},tags:{type:O.String_unsecure(),isArray:!0,isOptional:!0}}});import{defineCommand as f2,defineQuery as I1}from"@contractspec/lib.contracts-spec/operations";import{defineSchemaModel as G0,ScalarTypeEnum as x}from"@contractspec/lib.schema";var F0=["@agent-console-team"],B1=f2({meta:{key:"agent.tool.create",version:"1.0.0",stability:"stable",owners:[...F0],tags:["tool","create"],description:"Creates a new AI tool definition.",goal:"Allow users to define new tools that agents can use.",context:"Called from the tool builder UI when creating a new tool."},io:{input:C2,output:G0({name:"CreateToolOutput",fields:{id:{type:x.String_unsecure(),isOptional:!1},name:{type:x.NonEmptyString(),isOptional:!1},slug:{type:x.String_unsecure(),isOptional:!1},status:{type:Z0,isOptional:!1}}}),errors:{SLUG_EXISTS:{description:"A tool with this slug already exists in the organization",http:409,gqlCode:"SLUG_EXISTS",when:"Slug is already taken"}}},policy:{auth:"user"},sideEffects:{emits:[{key:"tool.created",version:"1.0.0",stability:"stable",owners:[...F0],tags:["tool","created"],when:"Tool is successfully created",payload:Q0}],audit:["tool.created"]},acceptance:{scenarios:[{key:"create-tool-happy-path",given:["User is authenticated","Organization exists"],when:["User submits valid tool configuration"],then:["New tool is created","ToolCreated event is emitted"]},{key:"create-tool-slug-conflict",given:["Tool with same slug exists"],when:["User submits tool with duplicate slug"],then:["SLUG_EXISTS error is returned"]}],examples:[{key:"create-api-tool",input:{name:"Weather API",slug:"weather-api",category:"api",description:"Fetches weather data"},output:{id:"tool-123",name:"Weather API",slug:"weather-api",status:"draft"}}]}}),v1=f2({meta:{key:"agent.tool.update",version:"1.0.0",stability:"stable",owners:[...F0],tags:["tool","update"],description:"Updates an existing AI tool definition.",goal:"Allow users to modify tool settings and configuration.",context:"Called from the tool settings UI."},io:{input:h2,output:G0({name:"UpdateToolOutput",fields:{id:{type:x.String_unsecure(),isOptional:!1},name:{type:x.NonEmptyString(),isOptional:!1},status:{type:Z0,isOptional:!1},updatedAt:{type:x.DateTime(),isOptional:!1}}}),errors:{TOOL_NOT_FOUND:{description:"The specified tool does not exist",http:404,gqlCode:"TOOL_NOT_FOUND",when:"Tool ID is invalid"}}},policy:{auth:"user"},sideEffects:{emits:[{key:"tool.updated",version:"1.0.0",stability:"stable",owners:[...F0],tags:["tool","updated"],when:"Tool is updated",payload:Q0}],audit:["tool.updated"]},acceptance:{scenarios:[{key:"update-tool-happy-path",given:["Tool exists","User owns the tool"],when:["User submits updated configuration"],then:["Tool is updated","ToolUpdated event is emitted"]}],examples:[{key:"update-description",input:{toolId:"tool-123",description:"Updated weather API tool"},output:{id:"tool-123",name:"Weather API",status:"draft",updatedAt:"2025-01-01T00:00:00Z"}}]}}),W1=I1({meta:{key:"agent.tool.get",version:"1.0.0",stability:"stable",owners:[...F0],tags:["tool","get"],description:"Retrieves a tool by its ID.",goal:"View detailed tool configuration.",context:"Called when viewing tool details or editing."},io:{input:G0({name:"GetToolInput",fields:{toolId:{type:x.String_unsecure(),isOptional:!1}}}),output:w2,errors:{TOOL_NOT_FOUND:{description:"The specified tool does not exist",http:404,gqlCode:"TOOL_NOT_FOUND",when:"Tool ID is invalid"}}},policy:{auth:"user"},acceptance:{scenarios:[{key:"get-tool-happy-path",given:["Tool exists"],when:["User requests tool by ID"],then:["Tool details are returned"]}],examples:[{key:"get-basic",input:{toolId:"tool-123"},output:{id:"tool-123",name:"Weather API",status:"active",category:"api"}}]}}),j2=I1({meta:{key:"agent.tool.list",version:"1.0.0",stability:"stable",owners:[...F0],tags:["tool","list"],description:"Lists tools for an organization with optional filtering.",goal:"Browse and search available tools.",context:"Tool list/dashboard view."},io:{input:G0({name:"ListToolsInput",fields:{organizationId:{type:x.String_unsecure(),isOptional:!1},category:{type:z0,isOptional:!0},status:{type:Z0,isOptional:!0},search:{type:x.String_unsecure(),isOptional:!0},limit:{type:x.Int_unsecure(),isOptional:!0,defaultValue:20},offset:{type:x.Int_unsecure(),isOptional:!0,defaultValue:0}}}),output:G0({name:"ListToolsOutput",fields:{items:{type:Q0,isArray:!0,isOptional:!1},total:{type:x.Int_unsecure(),isOptional:!1},hasMore:{type:x.Boolean(),isOptional:!1}}})},policy:{auth:"user"},acceptance:{scenarios:[{key:"list-tools-happy-path",given:["Organization has tools"],when:["User lists tools"],then:["Paginated list of tools is returned"]}],examples:[{key:"list-by-category",input:{organizationId:"org-123",category:"api",limit:10},output:{items:[],total:0,hasMore:!1}}]}}),_1=f2({meta:{key:"agent.tool.test",version:"1.0.0",stability:"stable",owners:[...F0],tags:["tool","test"],description:"Tests a tool with sample input to verify it works correctly.",goal:"Validate tool configuration before deployment.",context:"Tool builder UI - test panel."},io:{input:G0({name:"TestToolInput",fields:{toolId:{type:x.String_unsecure(),isOptional:!1},testInput:{type:x.JSONObject(),isOptional:!1}}}),output:G0({name:"TestToolOutput",fields:{success:{type:x.Boolean(),isOptional:!1},output:{type:x.JSONObject(),isOptional:!0},error:{type:x.String_unsecure(),isOptional:!0},durationMs:{type:x.Int_unsecure(),isOptional:!1}}}),errors:{TOOL_NOT_FOUND:{description:"The specified tool does not exist",http:404,gqlCode:"TOOL_NOT_FOUND",when:"Tool ID is invalid"},TOOL_EXECUTION_ERROR:{description:"Tool execution failed",http:500,gqlCode:"TOOL_EXECUTION_ERROR",when:"Tool returns an error"}}},policy:{auth:"user"},sideEffects:{audit:["tool.tested"]},acceptance:{scenarios:[{key:"test-tool-success",given:["Tool exists","Tool is configured correctly"],when:["User runs test with valid input"],then:["Tool executes successfully","Output is returned"]},{key:"test-tool-failure",given:["Tool exists","Tool has configuration error"],when:["User runs test"],then:["TOOL_EXECUTION_ERROR is returned"]}],examples:[{key:"test-weather-api",input:{toolId:"tool-123",testInput:{city:"Paris"}},output:{success:!0,output:{temperature:22},durationMs:150}}]}});import{web as y4}from"@contractspec/lib.runtime-sandbox";var{generateId:N1}=y4;var L1={queuedAt:"r.queuedAt",totalTokens:"r.totalTokens",durationMs:"r.durationMs",estimatedCostUsd:"r.estimatedCostUsd",status:"r.status",agentName:"a.name"};function S0(Z){return{id:Z.id,projectId:Z.projectId,organizationId:Z.organizationId,name:Z.name,description:Z.description??void 0,modelProvider:Z.modelProvider,modelName:Z.modelName,systemPrompt:Z.systemPrompt??void 0,temperature:Z.temperature,maxTokens:Z.maxTokens,status:Z.status,createdAt:new Date(Z.createdAt),updatedAt:new Date(Z.updatedAt)}}function d4(Z){return{id:Z.id,projectId:Z.projectId,organizationId:Z.organizationId,name:Z.name,description:Z.description??void 0,version:Z.version,category:Z.category,status:Z.status,inputSchema:Z.inputSchema??void 0,outputSchema:Z.outputSchema??void 0,endpoint:Z.endpoint??void 0,createdAt:new Date(Z.createdAt),updatedAt:new Date(Z.updatedAt)}}function R1(Z,q){return{id:Z.id,projectId:Z.projectId,agentId:Z.agentId,agentName:q,status:Z.status,input:Z.input??void 0,output:Z.output??void 0,totalTokens:Z.totalTokens,promptTokens:Z.promptTokens,completionTokens:Z.completionTokens,estimatedCostUsd:Z.estimatedCostUsd,durationMs:Z.durationMs??void 0,errorMessage:Z.errorMessage??void 0,queuedAt:new Date(Z.queuedAt),startedAt:Z.startedAt?new Date(Z.startedAt):void 0,completedAt:Z.completedAt?new Date(Z.completedAt):void 0}}function m4(Z){async function q($){let{projectId:H,organizationId:Q,status:G,search:F,limit:U=20,offset:L=0}=$,B="WHERE projectId = ?",W=[H];if(Q)B+=" AND organizationId = ?",W.push(Q);if(G&&G!=="all")B+=" AND status = ?",W.push(G);if(F)B+=" AND (name LIKE ? OR description LIKE ?)",W.push(`%${F}%`,`%${F}%`);let v=(await Z.query(`SELECT COUNT(*) as count FROM agent_definition ${B}`,W)).rows[0]?.count??0,b=(await Z.query(`SELECT * FROM agent_definition ${B} ORDER BY createdAt DESC LIMIT ? OFFSET ?`,[...W,U,L])).rows;return{items:b.map(S0),total:v,hasMore:L+b.length<v}}async function D($){let H=(await Z.query("SELECT * FROM agent_definition WHERE id = ?",[$])).rows;return H[0]?S0(H[0]):null}async function Y($,H){let Q=N1("agent"),G=new Date().toISOString();await Z.execute(`INSERT INTO agent_definition (id, projectId, organizationId, name, description, modelProvider, modelName, systemPrompt, temperature, maxTokens, status, createdAt, updatedAt)
54
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[Q,H.projectId,H.organizationId,$.name,$.description??null,$.modelProvider??"openai",$.modelName??"gpt-4",$.systemPrompt??null,$.temperature??0.7,$.maxTokens??4096,"DRAFT",G,G]);let U=(await Z.query("SELECT * FROM agent_definition WHERE id = ?",[Q])).rows[0];if(!U)throw Error("Failed to retrieve created agent");return S0(U)}async function X($){let H=new Date().toISOString(),Q=["updatedAt = ?"],G=[H];if($.name!==void 0)Q.push("name = ?"),G.push($.name);if($.description!==void 0)Q.push("description = ?"),G.push($.description);if($.status!==void 0)Q.push("status = ?"),G.push($.status);G.push($.id),await Z.execute(`UPDATE agent_definition SET ${Q.join(", ")} WHERE id = ?`,G);let F=(await Z.query("SELECT * FROM agent_definition WHERE id = ?",[$.id])).rows;if(!F[0])throw Error("NOT_FOUND");return S0(F[0])}async function A($){let{projectId:H,organizationId:Q,category:G,status:F,search:U,limit:L=50,offset:B=0}=$,W="WHERE projectId = ?",P=[H];if(Q)W+=" AND organizationId = ?",P.push(Q);if(G&&G!=="all")W+=" AND category = ?",P.push(G);if(F&&F!=="all")W+=" AND status = ?",P.push(F);if(U)W+=" AND (name LIKE ? OR description LIKE ?)",P.push(`%${U}%`,`%${U}%`);let b=(await Z.query(`SELECT COUNT(*) as count FROM agent_tool ${W}`,P)).rows[0]?.count??0,o=(await Z.query(`SELECT * FROM agent_tool ${W} ORDER BY name ASC LIMIT ? OFFSET ?`,[...P,L,B])).rows;return{items:o.map(d4),total:b,hasMore:B+o.length<b}}async function z($){let{projectId:H,agentId:Q,status:G,sortBy:F,sortDirection:U="desc",limit:L=20,offset:B=0}=$,W="WHERE r.projectId = ?",P=[H];if(Q)W+=" AND r.agentId = ?",P.push(Q);if(G&&G!=="all")W+=" AND r.status = ?",P.push(G);let b=(await Z.query(`SELECT COUNT(*) as count FROM agent_run r ${W}`,P)).rows[0]?.count??0,o=F?L1[F]:L1.queuedAt,f0=U==="asc"?"ASC":"DESC",d=(await Z.query(`SELECT r.*, a.name as agentName
53
+ - Use Feature Flags to gate risky tools; default safe/off.`}];$5(Y5);import{defineExample as J5}from"@contractspec/lib.contracts-spec/examples";var X5=J5({meta:{key:"agent-console",version:"1.0.0",title:"Agent Console",description:"Agent Console example - AI agent orchestration with tools, runs, and logs",kind:"template",visibility:"public",stability:"experimental",owners:["@contractspec-core"],tags:["package","examples","agent-console","agents","autonomous"]},surfaces:{templates:!0,sandbox:{enabled:!0,modes:["playground","specs"]},studio:{enabled:!1,installable:!1},mcp:{enabled:!1}},entrypoints:{packageName:"@contractspec/example.agent-console"}}),F5=X5;import{defineEnum as i0}from"@contractspec/lib.schema";var q0=i0("RunStatus",["QUEUED","IN_PROGRESS","COMPLETED","FAILED","CANCELLED","EXPIRED"]),x1=i0("RunStepType",["MESSAGE_CREATION","TOOL_CALL","TOOL_RESULT","ERROR"]),f0=i0("LogLevel",["DEBUG","INFO","WARN","ERROR"]),T1=i0("Granularity",["hour","day","week","month"]);import{defineSchemaModel as z0,ScalarTypeEnum as W}from"@contractspec/lib.schema";var y1=z0({name:"RunInput",description:"Input data for agent execution",fields:{message:{type:W.NonEmptyString(),isOptional:!1},context:{type:W.JSONObject(),isOptional:!0}}}),u0=z0({name:"RunStep",description:"Individual step within a run",fields:{id:{type:W.String_unsecure(),isOptional:!1},stepNumber:{type:W.Int_unsecure(),isOptional:!1},type:{type:x1,isOptional:!1},toolId:{type:W.String_unsecure(),isOptional:!0},toolName:{type:W.String_unsecure(),isOptional:!0},input:{type:W.JSONObject(),isOptional:!0},output:{type:W.JSONObject(),isOptional:!0},status:{type:q0,isOptional:!1},errorMessage:{type:W.String_unsecure(),isOptional:!0},tokensUsed:{type:W.Int_unsecure(),isOptional:!1,defaultValue:0},durationMs:{type:W.Int_unsecure(),isOptional:!0},startedAt:{type:W.DateTime(),isOptional:!1},completedAt:{type:W.DateTime(),isOptional:!0}}}),l0=z0({name:"RunLog",description:"Execution log entry",fields:{id:{type:W.String_unsecure(),isOptional:!1},stepId:{type:W.String_unsecure(),isOptional:!0},level:{type:f0,isOptional:!1},message:{type:W.String_unsecure(),isOptional:!1},data:{type:W.JSONObject(),isOptional:!0},source:{type:W.String_unsecure(),isOptional:!0},traceId:{type:W.String_unsecure(),isOptional:!0},spanId:{type:W.String_unsecure(),isOptional:!0},timestamp:{type:W.DateTime(),isOptional:!1}}}),w2=z0({name:"RunAgentRef",description:"Agent reference in a run",fields:{id:{type:W.String_unsecure(),isOptional:!1},name:{type:W.NonEmptyString(),isOptional:!1},modelProvider:{type:W.String_unsecure(),isOptional:!1},modelName:{type:W.String_unsecure(),isOptional:!1}}}),d1=z0({name:"Run",description:"Agent execution instance",fields:{id:{type:W.String_unsecure(),isOptional:!1},organizationId:{type:W.String_unsecure(),isOptional:!1},agentId:{type:W.String_unsecure(),isOptional:!1},userId:{type:W.String_unsecure(),isOptional:!0},sessionId:{type:W.String_unsecure(),isOptional:!0},input:{type:W.JSONObject(),isOptional:!1},output:{type:W.JSONObject(),isOptional:!0},status:{type:q0,isOptional:!1},errorMessage:{type:W.String_unsecure(),isOptional:!0},errorCode:{type:W.String_unsecure(),isOptional:!0},totalTokens:{type:W.Int_unsecure(),isOptional:!1,defaultValue:0},promptTokens:{type:W.Int_unsecure(),isOptional:!1,defaultValue:0},completionTokens:{type:W.Int_unsecure(),isOptional:!1,defaultValue:0},totalIterations:{type:W.Int_unsecure(),isOptional:!1,defaultValue:0},durationMs:{type:W.Int_unsecure(),isOptional:!0},estimatedCostUsd:{type:W.Float_unsecure(),isOptional:!0},queuedAt:{type:W.DateTime(),isOptional:!1},startedAt:{type:W.DateTime(),isOptional:!0},completedAt:{type:W.DateTime(),isOptional:!0},metadata:{type:W.JSONObject(),isOptional:!0},steps:{type:u0,isArray:!0,isOptional:!0},logs:{type:l0,isArray:!0,isOptional:!0},agent:{type:w2,isOptional:!0}}}),G0=z0({name:"RunSummary",description:"Summary of a run for list views",fields:{id:{type:W.String_unsecure(),isOptional:!1},agentId:{type:W.String_unsecure(),isOptional:!1},agentName:{type:W.NonEmptyString(),isOptional:!1},status:{type:q0,isOptional:!1},totalTokens:{type:W.Int_unsecure(),isOptional:!1},durationMs:{type:W.Int_unsecure(),isOptional:!0},estimatedCostUsd:{type:W.Float_unsecure(),isOptional:!0},queuedAt:{type:W.DateTime(),isOptional:!1},completedAt:{type:W.DateTime(),isOptional:!0}}}),m1=z0({name:"TimelineDataPoint",description:"Timeline data point for metrics",fields:{period:{type:W.String_unsecure(),isOptional:!1},runs:{type:W.Int_unsecure(),isOptional:!1},tokens:{type:W.Int_unsecure(),isOptional:!1},costUsd:{type:W.Float_unsecure(),isOptional:!1},avgDurationMs:{type:W.Float_unsecure(),isOptional:!1}}});import{defineCommand as h2,defineQuery as g0}from"@contractspec/lib.contracts-spec/operations";import{defineSchemaModel as l,ScalarTypeEnum as N}from"@contractspec/lib.schema";var H0=["@agent-console-team"],E1=h2({meta:{key:"agent.run.execute",version:"1.0.0",stability:"stable",owners:[...H0],tags:["run","execute"],description:"Starts a new agent run with the given input.",goal:"Execute an AI agent with user input.",context:"Called from chat interface or API."},io:{input:l({name:"ExecuteAgentInput",fields:{agentId:{type:N.String_unsecure(),isOptional:!1},input:{type:y1,isOptional:!1},sessionId:{type:N.String_unsecure(),isOptional:!0},metadata:{type:N.JSONObject(),isOptional:!0},stream:{type:N.Boolean(),isOptional:!0},maxIterations:{type:N.Int_unsecure(),isOptional:!0},timeoutMs:{type:N.Int_unsecure(),isOptional:!0}}}),output:l({name:"ExecuteAgentOutput",fields:{runId:{type:N.String_unsecure(),isOptional:!1},status:{type:q0,isOptional:!1},estimatedWaitMs:{type:N.Int_unsecure(),isOptional:!0}}}),errors:{AGENT_NOT_FOUND:{description:"The specified agent does not exist",http:404,gqlCode:"AGENT_NOT_FOUND",when:"Agent ID is invalid"},AGENT_NOT_ACTIVE:{description:"The specified agent is not active",http:400,gqlCode:"AGENT_NOT_ACTIVE",when:"Agent is in draft/paused/archived state"}}},policy:{auth:"user"},sideEffects:{emits:[{key:"run.started",version:"1.0.0",stability:"stable",owners:[...H0],tags:["run","started"],when:"Run is queued",payload:G0}],audit:["run.started"]},acceptance:{scenarios:[{key:"execute-agent-happy-path",given:["Agent exists","Agent is active"],when:["User submits execution request"],then:["Run is created","RunStarted event is emitted"]},{key:"execute-agent-not-active",given:["Agent exists but is not active"],when:["User attempts to execute"],then:["AGENT_NOT_ACTIVE error is returned"]}],examples:[{key:"basic-execute",input:{agentId:"agent-123",input:{message:"Hello"}},output:{runId:"run-456",status:"pending",estimatedWaitMs:5000}}]}}),C2=h2({meta:{key:"agent.run.cancel",version:"1.0.0",stability:"stable",owners:[...H0],tags:["run","cancel"],description:"Cancels an in-progress agent run.",goal:"Stop a running agent execution.",context:"Called when user wants to abort a long-running task."},io:{input:l({name:"CancelRunInput",fields:{runId:{type:N.String_unsecure(),isOptional:!1},reason:{type:N.String_unsecure(),isOptional:!0}}}),output:l({name:"CancelRunOutput",fields:{success:{type:N.Boolean(),isOptional:!1},status:{type:q0,isOptional:!1}}}),errors:{RUN_NOT_FOUND:{description:"The specified run does not exist",http:404,gqlCode:"RUN_NOT_FOUND",when:"Run ID is invalid"},RUN_NOT_CANCELLABLE:{description:"The run cannot be cancelled",http:400,gqlCode:"RUN_NOT_CANCELLABLE",when:"Run is already completed/failed/cancelled"}}},policy:{auth:"user"},sideEffects:{emits:[{key:"run.cancelled",version:"1.0.0",stability:"stable",owners:[...H0],tags:["run","cancelled"],when:"Run is cancelled",payload:G0}],audit:["run.cancelled"]},acceptance:{scenarios:[{key:"cancel-run-happy-path",given:["Run exists","Run is in progress"],when:["User cancels run"],then:["Run is cancelled","RunCancelled event is emitted"]},{key:"cancel-run-already-completed",given:["Run exists but is already completed"],when:["User attempts to cancel"],then:["RUN_NOT_CANCELLABLE error is returned"]}],examples:[{key:"cancel-basic",input:{runId:"run-456",reason:"User requested"},output:{success:!0,status:"cancelled"}}]}}),f2=g0({meta:{key:"agent.run.get",version:"1.0.0",stability:"stable",owners:[...H0],tags:["run","get"],description:"Retrieves a run by its ID with optional details.",goal:"View detailed run information.",context:"Run details page or monitoring."},io:{input:l({name:"GetRunInput",fields:{runId:{type:N.String_unsecure(),isOptional:!1},includeSteps:{type:N.Boolean(),isOptional:!0},includeLogs:{type:N.Boolean(),isOptional:!0}}}),output:d1,errors:{RUN_NOT_FOUND:{description:"The specified run does not exist",http:404,gqlCode:"RUN_NOT_FOUND",when:"Run ID is invalid"}}},policy:{auth:"user"},acceptance:{scenarios:[{key:"get-run-happy-path",given:["Run exists"],when:["User requests run by ID"],then:["Run details are returned"]}],examples:[{key:"get-with-steps",input:{runId:"run-456",includeSteps:!0,includeLogs:!1},output:{id:"run-456",status:"completed",steps:[]}}]}}),p1=g0({meta:{key:"agent.run.list",version:"1.0.0",stability:"stable",owners:[...H0],tags:["run","list"],description:"Lists runs with optional filtering.",goal:"Browse and search run history.",context:"Run history/dashboard view."},io:{input:l({name:"ListRunsInput",fields:{organizationId:{type:N.String_unsecure(),isOptional:!0},agentId:{type:N.String_unsecure(),isOptional:!0},userId:{type:N.String_unsecure(),isOptional:!0},sessionId:{type:N.String_unsecure(),isOptional:!0},status:{type:q0,isOptional:!0},startDate:{type:N.DateTime(),isOptional:!0},endDate:{type:N.DateTime(),isOptional:!0},limit:{type:N.Int_unsecure(),isOptional:!0,defaultValue:20},offset:{type:N.Int_unsecure(),isOptional:!0,defaultValue:0}}}),output:l({name:"ListRunsOutput",fields:{items:{type:G0,isArray:!0,isOptional:!1},total:{type:N.Int_unsecure(),isOptional:!1},hasMore:{type:N.Boolean(),isOptional:!1}}})},policy:{auth:"user"},acceptance:{scenarios:[{key:"list-runs-happy-path",given:["Organization has runs"],when:["User lists runs"],then:["Paginated list of runs is returned"]}],examples:[{key:"list-by-agent",input:{agentId:"agent-123",limit:20,offset:0},output:{items:[],total:0,hasMore:!1}}]}}),Q5=g0({meta:{key:"agent.run.getSteps",version:"1.0.0",stability:"stable",owners:[...H0],tags:["run","steps"],description:"Retrieves all steps for a specific run.",goal:"View step-by-step execution details.",context:"Run details page - steps tab."},io:{input:l({name:"GetRunStepsInput",fields:{runId:{type:N.String_unsecure(),isOptional:!1}}}),output:l({name:"GetRunStepsOutput",fields:{steps:{type:u0,isArray:!0,isOptional:!1}}})},policy:{auth:"user"},acceptance:{scenarios:[{key:"get-run-steps-happy-path",given:["Run exists with steps"],when:["User requests steps"],then:["Steps list is returned"]}],examples:[{key:"get-steps-basic",input:{runId:"run-456"},output:{steps:[]}}]}}),U5=g0({meta:{key:"agent.run.getLogs",version:"1.0.0",stability:"stable",owners:[...H0],tags:["run","logs"],description:"Retrieves all logs for a specific run.",goal:"Debug and audit run execution.",context:"Run details page - logs tab."},io:{input:l({name:"GetRunLogsInput",fields:{runId:{type:N.String_unsecure(),isOptional:!1},level:{type:f0,isOptional:!0},stepId:{type:N.String_unsecure(),isOptional:!0},limit:{type:N.Int_unsecure(),isOptional:!0,defaultValue:100},offset:{type:N.Int_unsecure(),isOptional:!0,defaultValue:0}}}),output:l({name:"GetRunLogsOutput",fields:{items:{type:l0,isArray:!0,isOptional:!1},total:{type:N.Int_unsecure(),isOptional:!1},hasMore:{type:N.Boolean(),isOptional:!1}}})},policy:{auth:"user"},acceptance:{scenarios:[{key:"get-run-logs-happy-path",given:["Run exists with logs"],when:["User requests logs"],then:["Paginated logs list is returned"]}],examples:[{key:"get-logs-filtered",input:{runId:"run-456",level:"error",limit:50},output:{items:[],total:0,hasMore:!1}}]}}),g2=g0({meta:{key:"agent.run.getMetrics",version:"1.0.0",stability:"stable",owners:[...H0],tags:["run","metrics"],description:"Retrieves aggregated metrics for runs within a time period.",goal:"Monitor and analyze agent usage.",context:"Analytics dashboard."},io:{input:l({name:"GetRunMetricsInput",fields:{organizationId:{type:N.String_unsecure(),isOptional:!1},agentId:{type:N.String_unsecure(),isOptional:!0},startDate:{type:N.DateTime(),isOptional:!1},endDate:{type:N.DateTime(),isOptional:!1},granularity:{type:T1,isOptional:!0,defaultValue:"day"}}}),output:l({name:"GetRunMetricsOutput",fields:{totalRuns:{type:N.Int_unsecure(),isOptional:!1},completedRuns:{type:N.Int_unsecure(),isOptional:!1},failedRuns:{type:N.Int_unsecure(),isOptional:!1},totalTokens:{type:N.Int_unsecure(),isOptional:!1},totalCostUsd:{type:N.Float_unsecure(),isOptional:!1},averageDurationMs:{type:N.Float_unsecure(),isOptional:!1},successRate:{type:N.Float_unsecure(),isOptional:!1},timeline:{type:m1,isArray:!0,isOptional:!1}}})},policy:{auth:"user"},acceptance:{scenarios:[{key:"get-run-metrics-happy-path",given:["Organization has run history"],when:["User requests metrics for date range"],then:["Aggregated metrics are returned"]}],examples:[{key:"get-daily-metrics",input:{organizationId:"org-123",startDate:"2025-01-01",endDate:"2025-01-31",granularity:"day"},output:{totalRuns:100,completedRuns:90,failedRuns:10,totalTokens:50000,totalCostUsd:5,averageDurationMs:2500,successRate:0.9,timeline:[]}}]}});import{defineEnum as o1}from"@contractspec/lib.schema";var K0=o1("ToolCategory",["RETRIEVAL","COMPUTATION","COMMUNICATION","INTEGRATION","UTILITY","CUSTOM"]),$0=o1("ToolStatus",["DRAFT","ACTIVE","DEPRECATED","DISABLED"]),s0=o1("ImplementationType",["http","function","workflow"]);import{defineSchemaModel as t0,ScalarTypeEnum as O}from"@contractspec/lib.schema";var S1=t0({name:"Tool",description:"AI tool definition",fields:{id:{type:O.String_unsecure(),isOptional:!1},organizationId:{type:O.String_unsecure(),isOptional:!1},name:{type:O.NonEmptyString(),isOptional:!1},slug:{type:O.String_unsecure(),isOptional:!1},description:{type:O.String_unsecure(),isOptional:!1},category:{type:K0,isOptional:!1},status:{type:$0,isOptional:!1},parametersSchema:{type:O.JSONObject(),isOptional:!1},outputSchema:{type:O.JSONObject(),isOptional:!0},implementationType:{type:s0,isOptional:!1},implementationConfig:{type:O.JSONObject(),isOptional:!1},maxInvocationsPerMinute:{type:O.Int_unsecure(),isOptional:!0},timeoutMs:{type:O.Int_unsecure(),isOptional:!1,defaultValue:30000},version:{type:O.NonEmptyString(),isOptional:!1},tags:{type:O.String_unsecure(),isArray:!0,isOptional:!0},createdAt:{type:O.DateTime(),isOptional:!1},updatedAt:{type:O.DateTime(),isOptional:!1}}}),A0=t0({name:"ToolSummary",description:"Summary of a tool for list views",fields:{id:{type:O.String_unsecure(),isOptional:!1},name:{type:O.NonEmptyString(),isOptional:!1},slug:{type:O.String_unsecure(),isOptional:!1},description:{type:O.String_unsecure(),isOptional:!1},category:{type:K0,isOptional:!1},status:{type:$0,isOptional:!1},version:{type:O.NonEmptyString(),isOptional:!1},createdAt:{type:O.DateTime(),isOptional:!1}}}),r1=t0({name:"CreateToolInput",description:"Input for creating a tool",fields:{organizationId:{type:O.String_unsecure(),isOptional:!1},name:{type:O.NonEmptyString(),isOptional:!1},slug:{type:O.String_unsecure(),isOptional:!1},description:{type:O.String_unsecure(),isOptional:!1},category:{type:K0,isOptional:!0},parametersSchema:{type:O.JSONObject(),isOptional:!1},outputSchema:{type:O.JSONObject(),isOptional:!0},implementationType:{type:s0,isOptional:!1},implementationConfig:{type:O.JSONObject(),isOptional:!1},maxInvocationsPerMinute:{type:O.Int_unsecure(),isOptional:!0},timeoutMs:{type:O.Int_unsecure(),isOptional:!0},tags:{type:O.String_unsecure(),isArray:!0,isOptional:!0}}}),c1=t0({name:"UpdateToolInput",description:"Input for updating a tool",fields:{toolId:{type:O.String_unsecure(),isOptional:!1},name:{type:O.NonEmptyString(),isOptional:!0},description:{type:O.String_unsecure(),isOptional:!0},status:{type:$0,isOptional:!0},parametersSchema:{type:O.JSONObject(),isOptional:!0},outputSchema:{type:O.JSONObject(),isOptional:!0},implementationConfig:{type:O.JSONObject(),isOptional:!0},maxInvocationsPerMinute:{type:O.Int_unsecure(),isOptional:!0},timeoutMs:{type:O.Int_unsecure(),isOptional:!0},tags:{type:O.String_unsecure(),isArray:!0,isOptional:!0}}});import{defineCommand as i1,defineQuery as j2}from"@contractspec/lib.contracts-spec/operations";import{defineSchemaModel as V0,ScalarTypeEnum as x}from"@contractspec/lib.schema";var P0=["@agent-console-team"],x2=i1({meta:{key:"agent.tool.create",version:"1.0.0",stability:"stable",owners:[...P0],tags:["tool","create"],description:"Creates a new AI tool definition.",goal:"Allow users to define new tools that agents can use.",context:"Called from the tool builder UI when creating a new tool."},io:{input:r1,output:V0({name:"CreateToolOutput",fields:{id:{type:x.String_unsecure(),isOptional:!1},name:{type:x.NonEmptyString(),isOptional:!1},slug:{type:x.String_unsecure(),isOptional:!1},status:{type:$0,isOptional:!1}}}),errors:{SLUG_EXISTS:{description:"A tool with this slug already exists in the organization",http:409,gqlCode:"SLUG_EXISTS",when:"Slug is already taken"}}},policy:{auth:"user"},sideEffects:{emits:[{key:"tool.created",version:"1.0.0",stability:"stable",owners:[...P0],tags:["tool","created"],when:"Tool is successfully created",payload:A0}],audit:["tool.created"]},acceptance:{scenarios:[{key:"create-tool-happy-path",given:["User is authenticated","Organization exists"],when:["User submits valid tool configuration"],then:["New tool is created","ToolCreated event is emitted"]},{key:"create-tool-slug-conflict",given:["Tool with same slug exists"],when:["User submits tool with duplicate slug"],then:["SLUG_EXISTS error is returned"]}],examples:[{key:"create-api-tool",input:{name:"Weather API",slug:"weather-api",category:"api",description:"Fetches weather data"},output:{id:"tool-123",name:"Weather API",slug:"weather-api",status:"draft"}}]}}),T2=i1({meta:{key:"agent.tool.update",version:"1.0.0",stability:"stable",owners:[...P0],tags:["tool","update"],description:"Updates an existing AI tool definition.",goal:"Allow users to modify tool settings and configuration.",context:"Called from the tool settings UI."},io:{input:c1,output:V0({name:"UpdateToolOutput",fields:{id:{type:x.String_unsecure(),isOptional:!1},name:{type:x.NonEmptyString(),isOptional:!1},status:{type:$0,isOptional:!1},updatedAt:{type:x.DateTime(),isOptional:!1}}}),errors:{TOOL_NOT_FOUND:{description:"The specified tool does not exist",http:404,gqlCode:"TOOL_NOT_FOUND",when:"Tool ID is invalid"}}},policy:{auth:"user"},sideEffects:{emits:[{key:"tool.updated",version:"1.0.0",stability:"stable",owners:[...P0],tags:["tool","updated"],when:"Tool is updated",payload:A0}],audit:["tool.updated"]},acceptance:{scenarios:[{key:"update-tool-happy-path",given:["Tool exists","User owns the tool"],when:["User submits updated configuration"],then:["Tool is updated","ToolUpdated event is emitted"]}],examples:[{key:"update-description",input:{toolId:"tool-123",description:"Updated weather API tool"},output:{id:"tool-123",name:"Weather API",status:"draft",updatedAt:"2025-01-01T00:00:00Z"}}]}}),y2=j2({meta:{key:"agent.tool.get",version:"1.0.0",stability:"stable",owners:[...P0],tags:["tool","get"],description:"Retrieves a tool by its ID.",goal:"View detailed tool configuration.",context:"Called when viewing tool details or editing."},io:{input:V0({name:"GetToolInput",fields:{toolId:{type:x.String_unsecure(),isOptional:!1}}}),output:S1,errors:{TOOL_NOT_FOUND:{description:"The specified tool does not exist",http:404,gqlCode:"TOOL_NOT_FOUND",when:"Tool ID is invalid"}}},policy:{auth:"user"},acceptance:{scenarios:[{key:"get-tool-happy-path",given:["Tool exists"],when:["User requests tool by ID"],then:["Tool details are returned"]}],examples:[{key:"get-basic",input:{toolId:"tool-123"},output:{id:"tool-123",name:"Weather API",status:"active",category:"api"}}]}}),u1=j2({meta:{key:"agent.tool.list",version:"1.0.0",stability:"stable",owners:[...P0],tags:["tool","list"],description:"Lists tools for an organization with optional filtering.",goal:"Browse and search available tools.",context:"Tool list/dashboard view."},io:{input:V0({name:"ListToolsInput",fields:{organizationId:{type:x.String_unsecure(),isOptional:!1},category:{type:K0,isOptional:!0},status:{type:$0,isOptional:!0},search:{type:x.String_unsecure(),isOptional:!0},limit:{type:x.Int_unsecure(),isOptional:!0,defaultValue:20},offset:{type:x.Int_unsecure(),isOptional:!0,defaultValue:0}}}),output:V0({name:"ListToolsOutput",fields:{items:{type:A0,isArray:!0,isOptional:!1},total:{type:x.Int_unsecure(),isOptional:!1},hasMore:{type:x.Boolean(),isOptional:!1}}})},policy:{auth:"user"},acceptance:{scenarios:[{key:"list-tools-happy-path",given:["Organization has tools"],when:["User lists tools"],then:["Paginated list of tools is returned"]}],examples:[{key:"list-by-category",input:{organizationId:"org-123",category:"api",limit:10},output:{items:[],total:0,hasMore:!1}}]}}),d2=i1({meta:{key:"agent.tool.test",version:"1.0.0",stability:"stable",owners:[...P0],tags:["tool","test"],description:"Tests a tool with sample input to verify it works correctly.",goal:"Validate tool configuration before deployment.",context:"Tool builder UI - test panel."},io:{input:V0({name:"TestToolInput",fields:{toolId:{type:x.String_unsecure(),isOptional:!1},testInput:{type:x.JSONObject(),isOptional:!1}}}),output:V0({name:"TestToolOutput",fields:{success:{type:x.Boolean(),isOptional:!1},output:{type:x.JSONObject(),isOptional:!0},error:{type:x.String_unsecure(),isOptional:!0},durationMs:{type:x.Int_unsecure(),isOptional:!1}}}),errors:{TOOL_NOT_FOUND:{description:"The specified tool does not exist",http:404,gqlCode:"TOOL_NOT_FOUND",when:"Tool ID is invalid"},TOOL_EXECUTION_ERROR:{description:"Tool execution failed",http:500,gqlCode:"TOOL_EXECUTION_ERROR",when:"Tool returns an error"}}},policy:{auth:"user"},sideEffects:{audit:["tool.tested"]},acceptance:{scenarios:[{key:"test-tool-success",given:["Tool exists","Tool is configured correctly"],when:["User runs test with valid input"],then:["Tool executes successfully","Output is returned"]},{key:"test-tool-failure",given:["Tool exists","Tool has configuration error"],when:["User runs test"],then:["TOOL_EXECUTION_ERROR is returned"]}],examples:[{key:"test-weather-api",input:{toolId:"tool-123",testInput:{city:"Paris"}},output:{success:!0,output:{temperature:22},durationMs:150}}]}});import{web as z5}from"@contractspec/lib.runtime-sandbox";var{generateId:m2}=z5;var E2={queuedAt:"r.queuedAt",totalTokens:"r.totalTokens",durationMs:"r.durationMs",estimatedCostUsd:"r.estimatedCostUsd",status:"r.status",agentName:"a.name"};function n0(Z){return{id:Z.id,projectId:Z.projectId,organizationId:Z.organizationId,name:Z.name,description:Z.description??void 0,modelProvider:Z.modelProvider,modelName:Z.modelName,systemPrompt:Z.systemPrompt??void 0,temperature:Z.temperature,maxTokens:Z.maxTokens,status:Z.status,createdAt:new Date(Z.createdAt),updatedAt:new Date(Z.updatedAt)}}function G5(Z){return{id:Z.id,projectId:Z.projectId,organizationId:Z.organizationId,name:Z.name,description:Z.description??void 0,version:Z.version,category:Z.category,status:Z.status,inputSchema:Z.inputSchema??void 0,outputSchema:Z.outputSchema??void 0,endpoint:Z.endpoint??void 0,createdAt:new Date(Z.createdAt),updatedAt:new Date(Z.updatedAt)}}function p2(Z,D){return{id:Z.id,projectId:Z.projectId,agentId:Z.agentId,agentName:D,status:Z.status,input:Z.input??void 0,output:Z.output??void 0,totalTokens:Z.totalTokens,promptTokens:Z.promptTokens,completionTokens:Z.completionTokens,estimatedCostUsd:Z.estimatedCostUsd,durationMs:Z.durationMs??void 0,errorMessage:Z.errorMessage??void 0,queuedAt:new Date(Z.queuedAt),startedAt:Z.startedAt?new Date(Z.startedAt):void 0,completedAt:Z.completedAt?new Date(Z.completedAt):void 0}}function K5(Z){async function D(F){let{projectId:H,organizationId:Q,status:U,search:G,limit:K=20,offset:L=0}=F,B="WHERE projectId = ?",v=[H];if(Q)B+=" AND organizationId = ?",v.push(Q);if(U&&U!=="all")B+=" AND status = ?",v.push(U);if(G)B+=" AND (name LIKE ? OR description LIKE ?)",v.push(`%${G}%`,`%${G}%`);let k=(await Z.query(`SELECT COUNT(*) as count FROM agent_definition ${B}`,v)).rows[0]?.count??0,b=(await Z.query(`SELECT * FROM agent_definition ${B} ORDER BY createdAt DESC LIMIT ? OFFSET ?`,[...v,K,L])).rows;return{items:b.map(n0),total:k,hasMore:L+b.length<k}}async function $(F){let H=(await Z.query("SELECT * FROM agent_definition WHERE id = ?",[F])).rows;return H[0]?n0(H[0]):null}async function q(F,H){let Q=m2("agent"),U=new Date().toISOString();await Z.execute(`INSERT INTO agent_definition (id, projectId, organizationId, name, description, modelProvider, modelName, systemPrompt, temperature, maxTokens, status, createdAt, updatedAt)
54
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[Q,H.projectId,H.organizationId,F.name,F.description??null,F.modelProvider??"openai",F.modelName??"gpt-4",F.systemPrompt??null,F.temperature??0.7,F.maxTokens??4096,"DRAFT",U,U]);let K=(await Z.query("SELECT * FROM agent_definition WHERE id = ?",[Q])).rows[0];if(!K)throw Error("Failed to retrieve created agent");return n0(K)}async function J(F){let H=new Date().toISOString(),Q=["updatedAt = ?"],U=[H];if(F.name!==void 0)Q.push("name = ?"),U.push(F.name);if(F.description!==void 0)Q.push("description = ?"),U.push(F.description);if(F.status!==void 0)Q.push("status = ?"),U.push(F.status);U.push(F.id),await Z.execute(`UPDATE agent_definition SET ${Q.join(", ")} WHERE id = ?`,U);let G=(await Z.query("SELECT * FROM agent_definition WHERE id = ?",[F.id])).rows;if(!G[0])throw Error("NOT_FOUND");return n0(G[0])}async function z(F){let{projectId:H,organizationId:Q,category:U,status:G,search:K,limit:L=50,offset:B=0}=F,v="WHERE projectId = ?",I=[H];if(Q)v+=" AND organizationId = ?",I.push(Q);if(U&&U!=="all")v+=" AND category = ?",I.push(U);if(G&&G!=="all")v+=" AND status = ?",I.push(G);if(K)v+=" AND (name LIKE ? OR description LIKE ?)",I.push(`%${K}%`,`%${K}%`);let b=(await Z.query(`SELECT COUNT(*) as count FROM agent_tool ${v}`,I)).rows[0]?.count??0,u=(await Z.query(`SELECT * FROM agent_tool ${v} ORDER BY name ASC LIMIT ? OFFSET ?`,[...I,L,B])).rows;return{items:u.map(G5),total:b,hasMore:B+u.length<b}}async function X(F){let{projectId:H,agentId:Q,status:U,sortBy:G,sortDirection:K="desc",limit:L=20,offset:B=0}=F,v="WHERE r.projectId = ?",I=[H];if(Q)v+=" AND r.agentId = ?",I.push(Q);if(U&&U!=="all")v+=" AND r.status = ?",I.push(U);let b=(await Z.query(`SELECT COUNT(*) as count FROM agent_run r ${v}`,I)).rows[0]?.count??0,u=G?E2[G]:E2.queuedAt,p0=K==="asc"?"ASC":"DESC",o=(await Z.query(`SELECT r.*, a.name as agentName
55
55
  FROM agent_run r
56
56
  LEFT JOIN agent_definition a ON r.agentId = a.id
57
- ${W}
58
- ORDER BY ${o} ${f0}, r.queuedAt DESC LIMIT ? OFFSET ?`,[...P,L,B])).rows;return{items:d.map((r)=>R1(r,r.agentName)),total:b,hasMore:B+d.length<b}}async function V($){let H="WHERE projectId = ?",Q=[$.projectId];if($.agentId)H+=" AND agentId = ?",Q.push($.agentId);if($.startDate)H+=" AND queuedAt >= ?",Q.push($.startDate.toISOString());if($.endDate)H+=" AND queuedAt <= ?",Q.push($.endDate.toISOString());let F=(await Z.query(`SELECT
57
+ ${v}
58
+ ORDER BY ${u} ${p0}, r.queuedAt DESC LIMIT ? OFFSET ?`,[...I,L,B])).rows;return{items:o.map((t)=>p2(t,t.agentName)),total:b,hasMore:B+o.length<b}}async function A(F){let H="WHERE projectId = ?",Q=[F.projectId];if(F.agentId)H+=" AND agentId = ?",Q.push(F.agentId);if(F.startDate)H+=" AND queuedAt >= ?",Q.push(F.startDate.toISOString());if(F.endDate)H+=" AND queuedAt <= ?",Q.push(F.endDate.toISOString());let G=(await Z.query(`SELECT
59
59
  COUNT(*) as totalRuns,
60
60
  SUM(CASE WHEN status = 'COMPLETED' THEN 1 ELSE 0 END) as completedRuns,
61
61
  AVG(CASE WHEN status = 'COMPLETED' THEN durationMs ELSE NULL END) as avgDuration,
62
62
  COALESCE(SUM(totalTokens), 0) as totalTokens,
63
63
  COALESCE(SUM(estimatedCostUsd), 0) as totalCost
64
- FROM agent_run ${H}`,Q)).rows[0],U=F?.totalRuns??0,L=F?.completedRuns??0;return{totalRuns:U,successRate:U>0?L/U:0,averageDurationMs:F?.avgDuration??0,totalTokens:F?.totalTokens??0,totalCostUsd:F?.totalCost??0}}async function J($){let H=await D($.agentId);if(!H)throw Error("AGENT_NOT_FOUND");if(H.status!=="ACTIVE")throw Error("AGENT_NOT_ACTIVE");let Q=N1("run"),G=new Date().toISOString(),F=$.context?.projectId??H.projectId;await Z.execute(`INSERT INTO agent_run (id, projectId, agentId, status, input, totalTokens, promptTokens, completionTokens, estimatedCostUsd, queuedAt)
65
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[Q,F,$.agentId,"QUEUED",$.message,0,0,0,0,G]);let U=(await Z.query("SELECT r.*, a.name as agentName FROM agent_run r LEFT JOIN agent_definition a ON r.agentId = a.id WHERE r.id = ?",[Q])).rows;if(!U[0])throw Error("Failed to retrieve created run");return R1(U[0],U[0].agentName)}return{listAgents:q,getAgent:D,createAgent:Y,updateAgent:X,executeAgent:J,listTools:A,listRuns:z,getRunMetrics:V}}var i=[{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 E4=i.length+1;async function p4(Z){let{agentId:q,status:D,limit:Y=20,offset:X=0}=Z,A=[...i];if(q)A=A.filter((J)=>J.agentId===q);if(D)A=A.filter((J)=>J.status===D);let z=A.length;return{items:A.slice(X,X+Y).map((J)=>{let $=m.find((H)=>H.id===J.agentId);return{id:J.id,agentId:J.agentId,agentName:$?.name??"Unknown",status:J.status,totalTokens:J.totalTokens,durationMs:J.durationMs,estimatedCostUsd:J.estimatedCostUsd,queuedAt:J.queuedAt,completedAt:J.completedAt}}),total:z,hasMore:X+Y<z}}async function o4(Z){let q=i.find((Y)=>Y.id===Z.runId);if(!q)throw Error("RUN_NOT_FOUND");let D=m.find((Y)=>Y.id===q.agentId);return{...q,agent:D?{id:D.id,name:D.name,modelProvider:D.modelProvider,modelName:D.modelName}:void 0,steps:Z.includeSteps?q.steps:void 0,logs:Z.includeLogs?q.logs:void 0}}async function S4(Z){let q=m.find((D)=>D.id===Z.agentId);if(!q)throw Error("AGENT_NOT_FOUND");if(q.status!=="ACTIVE")throw Error("AGENT_NOT_ACTIVE");return{runId:`run-${E4++}`,status:"QUEUED",estimatedWaitMs:500}}async function c4(Z){let q=i.find((D)=>D.id===Z.runId);if(!q)throw Error("RUN_NOT_FOUND");if(!["QUEUED","IN_PROGRESS"].includes(q.status))throw Error("RUN_NOT_CANCELLABLE");return{success:!0,status:"CANCELLED"}}var r4=E.length+1;async function i4(Z){let{organizationId:q,category:D,status:Y,search:X,limit:A=20,offset:z=0}=Z,V=E.filter((H)=>H.organizationId===q);if(D)V=V.filter((H)=>H.category===D);if(Y)V=V.filter((H)=>H.status===Y);if(X){let H=X.toLowerCase();V=V.filter((Q)=>Q.name.toLowerCase().includes(H)||Q.description.toLowerCase().includes(H))}let J=V.length;return{items:V.slice(z,z+A).map((H)=>({id:H.id,name:H.name,slug:H.slug,description:H.description,category:H.category,status:H.status,version:H.version,createdAt:H.createdAt})),total:J,hasMore:z+A<J}}async function u4(Z){let q=E.find((D)=>D.id===Z.toolId);if(!q)throw Error("TOOL_NOT_FOUND");return q}async function s4(Z){if(E.some((D)=>D.organizationId===Z.organizationId&&D.slug===Z.slug))throw Error("SLUG_EXISTS");return{id:`tool-${r4++}`,name:Z.name,slug:Z.slug,status:"DRAFT"}}async function l4(Z){let q=E.find((D)=>D.id===Z.toolId);if(!q)throw Error("TOOL_NOT_FOUND");return{id:q.id,name:Z.name??q.name,status:Z.status??q.status,updatedAt:new Date}}async function t4(Z){if(!E.find((D)=>D.id===Z.toolId))throw Error("TOOL_NOT_FOUND");return await new Promise((D)=>setTimeout(D,100)),{success:!0,output:{result:"Test successful",input:Z.testInput},durationMs:100}}import{defineEntity as x2,defineEntityEnum as g2,field as _,index as U0}from"@contractspec/lib.schema";var O1=g2({name:"RunStatus",values:["QUEUED","IN_PROGRESS","COMPLETED","FAILED","CANCELLED","EXPIRED"],description:"Status of an agent run"}),M1=g2({name:"RunStepType",values:["MESSAGE_CREATION","TOOL_CALL","TOOL_RESULT","ERROR"],description:"Type of run step"}),b1=g2({name:"LogLevel",values:["DEBUG","INFO","WARN","ERROR"],description:"Log level"}),n4=x2({name:"Run",schema:"agent_console",description:"An execution of an agent with input/output and metrics.",fields:{id:_.id(),organizationId:_.string({description:"Organization ID"}),agentId:_.foreignKey({description:"Agent being executed"}),userId:_.string({isOptional:!0,description:"User who initiated the run"}),sessionId:_.string({isOptional:!0,description:"Conversation session ID"}),input:_.json({description:"Input data for the run"}),output:_.json({isOptional:!0,description:"Output result from the run"}),status:_.enum("RunStatus",{default:"QUEUED"}),errorMessage:_.string({isOptional:!0,description:"Error message if failed"}),errorCode:_.string({isOptional:!0,description:"Error code if failed"}),totalTokens:_.int({default:0,description:"Total tokens used"}),promptTokens:_.int({default:0,description:"Prompt tokens used"}),completionTokens:_.int({default:0,description:"Completion tokens used"}),totalIterations:_.int({default:0,description:"Number of iterations"}),durationMs:_.int({isOptional:!0,description:"Execution duration in ms"}),estimatedCostUsd:_.float({isOptional:!0,description:"Estimated cost in USD"}),queuedAt:_.dateTime({description:"When run was queued"}),startedAt:_.dateTime({isOptional:!0,description:"When run started executing"}),completedAt:_.dateTime({isOptional:!0,description:"When run completed"}),metadata:_.json({isOptional:!0,description:"Additional metadata"}),agent:_.belongsTo("Agent",["agentId"],["id"]),steps:_.hasMany("RunStep",{description:"Execution steps"}),logs:_.hasMany("RunLog",{description:"Execution logs"})},indexes:[U0.on(["organizationId","agentId","queuedAt"]),U0.on(["organizationId","status"]),U0.on(["agentId","status"]),U0.on(["sessionId"])],enums:[O1]}),a4=x2({name:"RunStep",schema:"agent_console",description:"An individual step in an agent run.",fields:{id:_.id(),runId:_.foreignKey({description:"Parent run"}),stepNumber:_.int({description:"Step sequence number"}),type:_.enum("RunStepType"),toolId:_.string({isOptional:!0,description:"Tool used in this step"}),toolName:_.string({isOptional:!0,description:"Tool name"}),input:_.json({isOptional:!0,description:"Step input"}),output:_.json({isOptional:!0,description:"Step output"}),status:_.enum("RunStatus"),errorMessage:_.string({isOptional:!0}),tokensUsed:_.int({default:0}),durationMs:_.int({isOptional:!0}),startedAt:_.dateTime(),completedAt:_.dateTime({isOptional:!0}),run:_.belongsTo("Run",["runId"],["id"])},indexes:[U0.on(["runId","stepNumber"])],enums:[M1]}),e4=x2({name:"RunLog",schema:"agent_console",description:"A log entry for an agent run.",fields:{id:_.id(),runId:_.foreignKey({description:"Parent run"}),stepId:_.string({isOptional:!0,description:"Related step"}),level:_.enum("LogLevel"),message:_.string({description:"Log message"}),data:_.json({isOptional:!0,description:"Additional log data"}),source:_.string({isOptional:!0,description:"Log source component"}),traceId:_.string({isOptional:!0}),spanId:_.string({isOptional:!0}),timestamp:_.dateTime(),run:_.belongsTo("Run",["runId"],["id"])},indexes:[U0.on(["runId","timestamp"]),U0.on(["runId","level"])],enums:[b1]});import{defineEvent as A0}from"@contractspec/lib.contracts-spec";import{defineEnum as Z5,defineSchemaModel as V0,ScalarTypeEnum as k}from"@contractspec/lib.schema";var K0=["@agent-console-team"],H5=V0({name:"RunStartedPayload",description:"Payload for run started event",fields:{runId:{type:k.String_unsecure(),isOptional:!1},organizationId:{type:k.String_unsecure(),isOptional:!1},agentId:{type:k.String_unsecure(),isOptional:!1},agentName:{type:k.String_unsecure(),isOptional:!1},userId:{type:k.String_unsecure(),isOptional:!0},sessionId:{type:k.String_unsecure(),isOptional:!0},input:{type:k.JSONObject(),isOptional:!1},startedAt:{type:k.DateTime(),isOptional:!1}}}),q5=A0({meta:{key:"agent.run.started",version:"1.0.0",description:"An agent run was started.",stability:"stable",owners:[...K0],tags:["run","started"]},payload:H5}),D5=V0({name:"RunCompletedPayload",description:"Payload for run completed event",fields:{runId:{type:k.String_unsecure(),isOptional:!1},organizationId:{type:k.String_unsecure(),isOptional:!1},agentId:{type:k.String_unsecure(),isOptional:!1},agentName:{type:k.String_unsecure(),isOptional:!1},userId:{type:k.String_unsecure(),isOptional:!0},output:{type:k.JSONObject(),isOptional:!1},totalTokens:{type:k.Int_unsecure(),isOptional:!1},promptTokens:{type:k.Int_unsecure(),isOptional:!1},completionTokens:{type:k.Int_unsecure(),isOptional:!1},totalIterations:{type:k.Int_unsecure(),isOptional:!1},durationMs:{type:k.Int_unsecure(),isOptional:!1},estimatedCostUsd:{type:k.Float_unsecure(),isOptional:!0},completedAt:{type:k.DateTime(),isOptional:!1}}}),Y5=A0({meta:{key:"agent.run.completed",version:"1.0.0",description:"An agent run completed successfully.",stability:"stable",owners:[...K0],tags:["run","completed"]},payload:D5}),J5=V0({name:"RunFailedPayload",description:"Payload for run failed event",fields:{runId:{type:k.String_unsecure(),isOptional:!1},organizationId:{type:k.String_unsecure(),isOptional:!1},agentId:{type:k.String_unsecure(),isOptional:!1},agentName:{type:k.String_unsecure(),isOptional:!1},userId:{type:k.String_unsecure(),isOptional:!0},errorMessage:{type:k.String_unsecure(),isOptional:!1},errorCode:{type:k.String_unsecure(),isOptional:!0},totalTokens:{type:k.Int_unsecure(),isOptional:!1},totalIterations:{type:k.Int_unsecure(),isOptional:!1},durationMs:{type:k.Int_unsecure(),isOptional:!0},failedAt:{type:k.DateTime(),isOptional:!1}}}),$5=A0({meta:{key:"agent.run.failed",version:"1.0.0",description:"An agent run encountered an error.",stability:"stable",owners:[...K0],tags:["run","failed"]},payload:J5}),X5=V0({name:"RunCancelledPayload",description:"Payload for run cancelled event",fields:{runId:{type:k.String_unsecure(),isOptional:!1},organizationId:{type:k.String_unsecure(),isOptional:!1},agentId:{type:k.String_unsecure(),isOptional:!1},userId:{type:k.String_unsecure(),isOptional:!0},cancelledBy:{type:k.String_unsecure(),isOptional:!0},reason:{type:k.String_unsecure(),isOptional:!0},totalTokens:{type:k.Int_unsecure(),isOptional:!1},totalIterations:{type:k.Int_unsecure(),isOptional:!1},cancelledAt:{type:k.DateTime(),isOptional:!1}}}),z5=A0({meta:{key:"agent.run.cancelled",version:"1.0.0",description:"An agent run was cancelled by the user.",stability:"stable",owners:[...K0],tags:["run","cancelled"]},payload:X5}),Q5=V0({name:"ToolInvokedPayload",description:"Payload for tool invoked event",fields:{runId:{type:k.String_unsecure(),isOptional:!1},stepId:{type:k.String_unsecure(),isOptional:!1},toolId:{type:k.String_unsecure(),isOptional:!1},toolName:{type:k.String_unsecure(),isOptional:!1},input:{type:k.JSONObject(),isOptional:!1},invokedAt:{type:k.DateTime(),isOptional:!1}}}),G5=A0({meta:{key:"agent.run.toolInvoked",version:"1.0.0",description:"A tool was invoked during an agent run.",stability:"stable",owners:[...K0],tags:["run","tool","invoked"]},payload:Q5}),F5=V0({name:"ToolCompletedPayload",description:"Payload for tool completed event",fields:{runId:{type:k.String_unsecure(),isOptional:!1},stepId:{type:k.String_unsecure(),isOptional:!1},toolId:{type:k.String_unsecure(),isOptional:!1},toolName:{type:k.String_unsecure(),isOptional:!1},success:{type:k.Boolean(),isOptional:!1},output:{type:k.JSONObject(),isOptional:!0},errorMessage:{type:k.String_unsecure(),isOptional:!0},durationMs:{type:k.Int_unsecure(),isOptional:!1},completedAt:{type:k.DateTime(),isOptional:!1}}}),U5=A0({meta:{key:"agent.run.toolCompleted",version:"1.0.0",description:"A tool invocation completed during an agent run.",stability:"stable",owners:[...K0],tags:["run","tool","completed"]},payload:F5}),A5=Z5("MessageType",["assistant","system"]),V5=V0({name:"MessageGeneratedPayload",description:"Payload for message generated event",fields:{runId:{type:k.String_unsecure(),isOptional:!1},stepId:{type:k.String_unsecure(),isOptional:!1},messageType:{type:A5,isOptional:!1},content:{type:k.String_unsecure(),isOptional:!1},tokensUsed:{type:k.Int_unsecure(),isOptional:!1},generatedAt:{type:k.DateTime(),isOptional:!1}}}),K5=A0({meta:{key:"agent.run.messageGenerated",version:"1.0.0",description:"An agent generated a message during a run.",stability:"stable",owners:[...K0],tags:["run","message","generated"]},payload:V5});import{definePresentation as w1,StabilityEnum as C1}from"@contractspec/lib.contracts-spec";var k5=w1({meta:{key:"agent-console.run.list",version:"1.0.0",title:"Run List",description:"List view of agent runs with status, tokens, and duration info",goal:"Provide an overview of agent execution history and performance.",context:"Run history dashboard.",domain:"agent-console",owners:["@agent-console-team"],tags:["run","list","dashboard"],stability:C1.Experimental},source:{type:"component",framework:"react",componentKey:"RunListView",props:X0},targets:["react","markdown","application/json"],policy:{flags:["agent-console.enabled"]}}),P5=w1({meta:{key:"agent-console.run.detail",version:"1.0.0",title:"Run Details",description:"Detailed view of an agent run with steps, logs, and metrics",goal:"Allow users to inspect and debug a specific agent run.",context:"Detailed view of an agent run.",domain:"agent-console",owners:["@agent-console-team"],tags:["run","detail"],stability:C1.Experimental},source:{type:"component",framework:"react",componentKey:"RunDetailView"},targets:["react","markdown"],policy:{flags:["agent-console.enabled"]}});var D0="demo-org",c0="agent-console-demo";function M0(Z){return Z.toLowerCase().trim().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")}function b0(Z){return{...Z}}function h1(Z){return{...Z}}function T2(Z){return{...Z}}function f1(){let Z=0,q=Date.parse("2026-03-20T09:00:00.000Z");return()=>new Date(q+Z++*60000)}function I5(Z){return Z.toLowerCase()}function B5(Z){return Z==="IN_PROGRESS"?"RUNNING":Z}function j1(Z,q){let D=m.map((z)=>({id:z.id,projectId:Z,organizationId:q,name:z.name,slug:z.slug,description:z.description,modelProvider:I5(z.modelProvider),modelName:z.modelName,systemPrompt:z.systemPrompt,temperature:typeof z.modelConfig?.temperature==="number"?z.modelConfig.temperature:0.4,maxTokens:8192,status:z.status,createdAt:z.createdAt,updatedAt:z.updatedAt})),Y=E.map((z)=>({id:z.id,projectId:Z,organizationId:q,name:z.name,description:z.description,version:z.version,category:z.category,status:z.status,inputSchema:JSON.stringify(z.parametersSchema),outputSchema:z.outputSchema?JSON.stringify(z.outputSchema):void 0,endpoint:typeof z.implementationConfig?.url==="string"?z.implementationConfig.url:void 0,createdAt:z.createdAt,updatedAt:z.updatedAt})),X=new Map(D.map((z)=>[z.id,z.name])),A=i.map((z)=>({id:z.id,projectId:Z,agentId:z.agentId,agentName:X.get(z.agentId)??z.agentName??"Unknown agent",status:B5(z.status),input:JSON.stringify(z.input),output:z.output?JSON.stringify(z.output):void 0,totalTokens:z.totalTokens,promptTokens:z.promptTokens,completionTokens:z.completionTokens,estimatedCostUsd:z.estimatedCostUsd??0,durationMs:z.durationMs,errorMessage:z.errorMessage,queuedAt:z.queuedAt,startedAt:z.startedAt,completedAt:z.completedAt}));return{agents:D,tools:Y,runs:A}}function x1(Z){let q=Z.length,D=Z.filter((X)=>X.status==="COMPLETED").length,Y=Z.map((X)=>X.durationMs).filter((X)=>typeof X==="number");return{totalRuns:q,successRate:q===0?0:D/q,averageDurationMs:Y.length===0?0:Math.round(Y.reduce((X,A)=>X+A,0)/Y.length),totalTokens:Z.reduce((X,A)=>X+A.totalTokens,0),totalCostUsd:Z.reduce((X,A)=>X+A.estimatedCostUsd,0)}}function y2(Z){let q=Z.projectId,D=Z.organizationId??D0,Y=Z.now??f1(),X=j1(q,D),A=X.agents.length+1,z=X.runs.length+1,V=(J)=>{let $=J==="agent"?A++:z++;return Z.idFactory?.(J,$)??`${J}-demo-${$}`};return{async listAgents(J){let $=X.agents.filter((F)=>F.projectId===J.projectId).filter((F)=>!J.organizationId||F.organizationId===J.organizationId).filter((F)=>!J.status||J.status==="all"||F.status===J.status).filter((F)=>{if(!J.search)return!0;let U=J.search.toLowerCase();return F.name.toLowerCase().includes(U)||(F.description??"").toLowerCase().includes(U)}).sort((F,U)=>U.updatedAt.getTime()-F.updatedAt.getTime()),H=J.limit??20,Q=J.offset??0,G=$.slice(Q,Q+H).map(b0);return{items:G,total:$.length,hasMore:Q+G.length<$.length}},async getAgent(J){let $=X.agents.find((H)=>H.id===J);return $?b0($):null},async createAgent(J,$){let H=J.name.trim(),Q=M0(H);if(X.agents.find((L)=>L.projectId===$.projectId&&L.organizationId===$.organizationId&&(L.slug===Q||L.name.toLowerCase()===H.toLowerCase())))throw Error("AGENT_NAME_OR_SLUG_EXISTS");let F=Y(),U={id:V("agent"),projectId:$.projectId,organizationId:$.organizationId,name:H,slug:Q,description:J.description,modelProvider:J.modelProvider??"openai",modelName:J.modelName??"gpt-5.4",systemPrompt:J.systemPrompt,temperature:J.temperature??0.4,maxTokens:J.maxTokens??8192,status:"DRAFT",createdAt:F,updatedAt:F};return X.agents.unshift(U),b0(U)},async updateAgent(J){let $=X.agents.find((Q)=>Q.id===J.id);if(!$)throw Error("AGENT_NOT_FOUND");let H=J.name;if(H&&M0(H)!==$.slug){if(X.agents.find((G)=>G.id!==$.id&&G.projectId===$.projectId&&G.organizationId===$.organizationId&&(G.slug===M0(H)||G.name.toLowerCase()===H.toLowerCase())))throw Error("AGENT_NAME_OR_SLUG_EXISTS");$.slug=M0(H),$.name=H}if(J.description!==void 0)$.description=J.description;if(J.status)$.status=J.status;return $.updatedAt=Y(),b0($)},async executeAgent(J){let $=X.agents.find((W)=>W.id===J.agentId);if(!$)throw Error("AGENT_NOT_FOUND");if($.status!=="ACTIVE")throw Error("AGENT_NOT_ACTIVE");let H=Y(),Q=Y(),G=Y(),F=2200+J.message.length*12,U=600+J.message.length*3,L=240+$.name.length*4,B={id:V("run"),projectId:J.context?.projectId??$.projectId,agentId:$.id,agentName:$.name,status:"COMPLETED",input:J.message,output:`Deterministic demo reply from ${$.name}: ${J.message}`,totalTokens:U+L,promptTokens:U,completionTokens:L,estimatedCostUsd:Number(((U+L)/1e6).toFixed(4)),durationMs:F,queuedAt:H,startedAt:Q,completedAt:G};return X.runs.unshift(B),T2(B)},async listTools(J){let $=X.tools.filter((F)=>F.projectId===J.projectId).filter((F)=>!J.organizationId||F.organizationId===J.organizationId).filter((F)=>!J.category||J.category==="all"||F.category===J.category).filter((F)=>!J.status||J.status==="all"||F.status===J.status).filter((F)=>{if(!J.search)return!0;let U=J.search.toLowerCase();return F.name.toLowerCase().includes(U)||(F.description??"").toLowerCase().includes(U)}).sort((F,U)=>F.name.localeCompare(U.name)),H=J.limit??50,Q=J.offset??0,G=$.slice(Q,Q+H).map(h1);return{items:G,total:$.length,hasMore:Q+G.length<$.length}},async listRuns(J){let $=X.runs.filter((F)=>F.projectId===J.projectId).filter((F)=>!J.agentId||F.agentId===J.agentId).filter((F)=>!J.status||J.status==="all"||F.status===J.status).sort((F,U)=>U.queuedAt.getTime()-F.queuedAt.getTime()),H=J.limit??20,Q=J.offset??0,G=$.slice(Q,Q+H).map(T2);return{items:G,total:$.length,hasMore:Q+G.length<$.length}},async getRunMetrics(J){let $=X.runs.filter((H)=>{if(H.projectId!==J.projectId)return!1;if(J.agentId&&H.agentId!==J.agentId)return!1;if(J.startDate&&H.queuedAt<J.startDate)return!1;if(J.endDate&&H.queuedAt>J.endDate)return!1;return!0});return x1($)}}}async function g1(Z,q){let D=q.organizationId??D0,[Y,X,A]=await Promise.all([Z.listAgents({projectId:q.projectId,organizationId:D,limit:10}),Z.listRuns({projectId:q.projectId,limit:10}),Z.listTools({projectId:q.projectId,organizationId:D,limit:10})]);return{agents:Y.items,runs:X.items,tools:A.items,summary:{totalAgents:Y.total,totalRuns:X.total,totalTools:A.total}}}async function v5(){let Z=y2({projectId:c0});return g1(Z,{projectId:c0})}import{defineEntity as W5,defineEntityEnum as m2,field as g,index as d2}from"@contractspec/lib.schema";var T1=m2({name:"ToolCategory",values:["RETRIEVAL","COMPUTATION","COMMUNICATION","INTEGRATION","UTILITY","CUSTOM"],description:"Category of tool"}),y1=m2({name:"ToolStatus",values:["DRAFT","ACTIVE","DEPRECATED","DISABLED"],description:"Status of tool"}),d1=m2({name:"ImplementationType",values:["http","function","workflow"],description:"How the tool is implemented"}),_5=W5({name:"Tool",schema:"agent_console",description:"An AI tool that can be used by agents.",fields:{id:g.id(),organizationId:g.string({description:"Organization that owns this tool"}),name:g.string({description:"Tool name"}),slug:g.string({description:"URL-safe identifier"}),description:g.string({description:"Tool description"}),category:g.enum("ToolCategory",{default:"CUSTOM"}),status:g.enum("ToolStatus",{default:"DRAFT"}),parametersSchema:g.json({description:"JSON Schema for tool parameters"}),outputSchema:g.json({isOptional:!0,description:"JSON Schema for tool output"}),implementationType:g.enum("ImplementationType"),implementationConfig:g.json({description:"Implementation configuration"}),maxInvocationsPerMinute:g.int({isOptional:!0,description:"Rate limit"}),timeoutMs:g.int({default:30000,description:"Execution timeout"}),version:g.string({default:"1.0.0",description:"Tool version"}),tags:g.string({isArray:!0,isOptional:!0,description:"Tags for categorization"}),createdAt:g.createdAt(),updatedAt:g.updatedAt(),createdById:g.string({isOptional:!0,description:"User who created this tool"}),agents:g.hasMany("Agent",{description:"Agents using this tool"})},indexes:[d2.unique(["organizationId","slug"]),d2.on(["organizationId","category"]),d2.on(["organizationId","status"])],enums:[T1,y1,d1]});import{defineEvent as E2}from"@contractspec/lib.contracts-spec";import{defineSchemaModel as p2,ScalarTypeEnum as j}from"@contractspec/lib.schema";var o2=["@agent-console-team"],N5=p2({name:"ToolCreatedPayload",description:"Payload for tool created event",fields:{id:{type:j.String_unsecure(),isOptional:!1},organizationId:{type:j.String_unsecure(),isOptional:!1},name:{type:j.String_unsecure(),isOptional:!1},slug:{type:j.String_unsecure(),isOptional:!1},category:{type:j.String_unsecure(),isOptional:!1},implementationType:{type:j.String_unsecure(),isOptional:!1},createdById:{type:j.String_unsecure(),isOptional:!0},createdAt:{type:j.DateTime(),isOptional:!1}}}),L5=E2({meta:{key:"agent.tool.created",version:"1.0.0",description:"A new AI tool was created.",stability:"stable",owners:[...o2],tags:["tool","created"]},payload:N5}),R5=p2({name:"ToolUpdatedPayload",description:"Payload for tool updated event",fields:{id:{type:j.String_unsecure(),isOptional:!1},organizationId:{type:j.String_unsecure(),isOptional:!1},name:{type:j.String_unsecure(),isOptional:!1},status:{type:j.String_unsecure(),isOptional:!1},updatedFields:{type:j.String_unsecure(),isArray:!0,isOptional:!1},updatedAt:{type:j.DateTime(),isOptional:!1}}}),O5=E2({meta:{key:"agent.tool.updated",version:"1.0.0",description:"An AI tool configuration was updated.",stability:"stable",owners:[...o2],tags:["tool","updated"]},payload:R5}),M5=p2({name:"ToolStatusChangedPayload",description:"Payload for tool status changed event",fields:{id:{type:j.String_unsecure(),isOptional:!1},organizationId:{type:j.String_unsecure(),isOptional:!1},name:{type:j.String_unsecure(),isOptional:!1},previousStatus:{type:j.String_unsecure(),isOptional:!1},newStatus:{type:j.String_unsecure(),isOptional:!1},changedAt:{type:j.DateTime(),isOptional:!1}}}),b5=E2({meta:{key:"agent.tool.statusChanged",version:"1.0.0",description:"An AI tool status was changed (activated, deprecated, disabled).",stability:"stable",owners:[...o2],tags:["tool","status"]},payload:M5});import{definePresentation as m1,StabilityEnum as E1}from"@contractspec/lib.contracts-spec";var w5=m1({meta:{key:"agent-console.tool.list",version:"1.0.0",title:"Tool List",description:"List view of AI tools with category, status, and version info",goal:"Provide an overview of all available tools for agents.",context:"Tool management dashboard.",domain:"agent-console",owners:["@agent-console-team"],tags:["tool","list","dashboard"],stability:E1.Experimental},source:{type:"component",framework:"react",componentKey:"ToolListView",props:Q0},targets:["react","markdown","application/json"],policy:{flags:["agent-console.enabled"]}}),C5=m1({meta:{key:"agent-console.tool.detail",version:"1.0.0",title:"Tool Details",description:"Detailed view of an AI tool with configuration and test panel",goal:"Allow users to inspect and test a specific tool.",context:"Detailed view of a tool.",domain:"agent-console",owners:["@agent-console-team"],tags:["tool","detail"],stability:E1.Experimental},source:{type:"component",framework:"react",componentKey:"ToolDetailView"},targets:["react","markdown"],policy:{flags:["agent-console.enabled"]}});import{VisualizationCard as h5,VisualizationGrid as f5}from"@contractspec/lib.design-system";import{jsx as r0,jsxs as p1}from"react/jsx-runtime";function o1({runs:Z}){let q=j0(Z);return p1("section",{className:"space-y-3",children:[p1("div",{children:[r0("h3",{className:"font-semibold text-lg",children:"Operational Visualizations"}),r0("p",{className:"text-muted-foreground text-sm",children:"Contract-backed charts derived from recent run activity."})]}),r0(f5,{children:q.map((D)=>r0(h5,{data:D.data,description:D.description,height:D.height,spec:D.spec,title:D.title},D.key))})]})}import{useTemplateRuntime as j5}from"@contractspec/lib.example-shared-ui";import{useCallback as x5,useEffect as g5,useMemo as T5,useState as i0}from"react";function v0(Z={}){let{handlers:q,projectId:D}=j5(),{agent:Y}=q,[X,A]=i0(null),[z,V]=i0(!0),[J,$]=i0(null),[H,Q]=i0(1),G=x5(async()=>{V(!0),$(null);try{let U=await Y.listAgents({projectId:D,search:Z.search,status:Z.status==="all"?void 0:Z.status,limit:Z.limit??20,offset:(H-1)*(Z.limit??20)});A(U)}catch(U){$(U instanceof Error?U:Error("Unknown error"))}finally{V(!1)}},[Y,D,Z.search,Z.status,Z.limit,H]);g5(()=>{G()},[G]);let F=T5(()=>{if(!X)return null;return{total:X.total,active:X.items.filter((U)=>U.status==="ACTIVE").length,paused:X.items.filter((U)=>U.status==="PAUSED").length,draft:X.items.filter((U)=>U.status==="DRAFT").length}},[X]);return{data:X,loading:z,error:J,stats:F,page:H,refetch:G,nextPage:()=>Q((U)=>U+1),prevPage:()=>H>1&&Q((U)=>U-1)}}import{useTemplateRuntime as y5}from"@contractspec/lib.example-shared-ui";import{useCallback as W0,useState as S2}from"react";function c2(Z,q){return Z instanceof Error?Z:Error(q)}function r2(Z={}){let{handlers:q,projectId:D}=y5(),{agent:Y}=q,[X,A]=S2({loading:!1,error:null,data:null}),[z,V]=S2({loading:!1,error:null,data:null}),[J,$]=S2({loading:!1,error:null,data:null}),H=W0(async(B)=>{A({loading:!0,error:null,data:null});try{let W=await Y.createAgent(B,{projectId:D,organizationId:D0});return A({loading:!1,error:null,data:W}),Z.onSuccess?.(),W}catch(W){let P=c2(W,"Failed to create agent");throw A({loading:!1,error:P,data:null}),Z.onError?.(P),P}},[Y,D,Z]),Q=W0(async(B)=>{V({loading:!0,error:null,data:null});try{let W=await Y.updateAgent(B);return V({loading:!1,error:null,data:W}),Z.onSuccess?.(),W}catch(W){let P=c2(W,"Failed to update agent");throw V({loading:!1,error:P,data:null}),Z.onError?.(P),P}},[Y,Z]),G=W0(async(B)=>{return Q({id:B,status:"ACTIVE"})},[Q]),F=W0(async(B)=>{return Q({id:B,status:"PAUSED"})},[Q]),U=W0(async(B)=>{return Q({id:B,status:"ARCHIVED"})},[Q]),L=W0(async(B)=>{$({loading:!0,error:null,data:null});try{let W=await Y.executeAgent({agentId:B.agentId,message:B.message,context:{projectId:D,organizationId:D0}});return $({loading:!1,error:null,data:W}),Z.onSuccess?.(),W}catch(W){let P=c2(W,"Failed to execute agent");throw $({loading:!1,error:P,data:null}),Z.onError?.(P),P}},[Y,D,Z]);return{createAgent:H,updateAgent:Q,activateAgent:G,pauseAgent:F,archiveAgent:U,executeAgent:L,createState:X,updateState:z,executeState:J,isLoading:X.loading||z.loading||J.loading}}import{useTemplateRuntime as d5}from"@contractspec/lib.example-shared-ui";import{useCallback as m5,useEffect as E5,useState as w0}from"react";function C0(Z={}){let{handlers:q,projectId:D}=d5(),{agent:Y}=q,[X,A]=w0(null),[z,V]=w0(null),[J,$]=w0(!0),[H,Q]=w0(null),[G,F]=w0(0),U=Z.pageSize??Z.limit??20,L=Z.pageIndex??G,[B]=Z.sorting??[],W=m5(async()=>{$(!0),Q(null);try{let[v,b]=await Promise.all([Y.listRuns({projectId:D,agentId:Z.agentId,status:Z.status==="all"?void 0:Z.status,sortBy:B?.id,sortDirection:B?B.desc?"desc":"asc":void 0,limit:U,offset:L*U}),Y.getRunMetrics({projectId:D,agentId:Z.agentId})]);A(v),V(b)}catch(v){Q(v instanceof Error?v:Error("Unknown error"))}finally{$(!1)}},[Y,L,U,D,Z.agentId,Z.status,B?.desc,B?.id]);E5(()=>{W()},[W]);let P=Z.pageIndex!==void 0;return{data:X,metrics:z,loading:J,error:H,page:L+1,pageIndex:L,pageSize:U,refetch:W,nextPage:P?void 0:()=>F((v)=>v+1),prevPage:P?void 0:()=>F((v)=>Math.max(0,v-1))}}import{Button as l}from"@contractspec/lib.design-system";import{useState as u0}from"react";import{jsx as f,jsxs as y}from"react/jsx-runtime";function p5(Z){switch(Z){case"ACTIVE":return"text-green-600 bg-green-100 dark:text-green-400 dark:bg-green-900/30";case"DRAFT":return"text-blue-600 bg-blue-100 dark:text-blue-400 dark:bg-blue-900/30";case"PAUSED":return"text-yellow-600 bg-yellow-100 dark:text-yellow-400 dark:bg-yellow-900/30";case"ARCHIVED":return"text-gray-600 bg-gray-100 dark:text-gray-400 dark:bg-gray-700";default:return"text-gray-600 bg-gray-100"}}function i2({isOpen:Z,agent:q,onClose:D,onActivate:Y,onPause:X,onArchive:A,onExecute:z,isLoading:V=!1}){let[J,$]=u0("menu"),[H,Q]=u0(""),[G,F]=u0(null),[U,L]=u0(null),B=()=>{$("menu"),Q(""),F(null),L(null)},W=()=>{B(),D()},P=async()=>{if(!q)return;if(L(null),!H.trim()){L("Please enter a message");return}try{await z(q.id,H.trim()),W()}catch(b){L(b instanceof Error?b.message:"Failed to execute agent")}},v=async(b)=>{if(!q)return;L(null);try{switch(b){case"activate":await Y(q.id);break;case"pause":await X(q.id);break;case"archive":await A(q.id);break}W()}catch(o){L(o instanceof Error?o.message:`Failed to ${b} agent`)}};if(!Z||!q)return null;return y("div",{className:"fixed inset-0 z-50 flex items-center justify-center",children:[f("div",{className:"absolute inset-0 bg-background/80 backdrop-blur-sm",onClick:W,role:"button",tabIndex:0,onKeyDown:(b)=>{if(b.key==="Enter"||b.key===" ")W()},"aria-label":"Close modal"}),y("div",{className:"relative z-10 w-full max-w-md rounded-xl border border-border bg-card p-6 shadow-xl",children:[y("div",{className:"mb-4 border-border border-b pb-4",children:[f("h2",{className:"font-semibold text-xl",children:q.name}),y("div",{className:"mt-1 flex items-center gap-2",children:[y("span",{className:"text-muted-foreground text-sm",children:[q.modelProvider," / ",q.modelName]}),f("span",{className:`rounded-full px-2 py-0.5 font-medium text-xs ${p5(q.status)}`,children:q.status})]}),q.description&&f("p",{className:"mt-2 text-muted-foreground text-sm",children:q.description})]}),J==="menu"&&y("div",{className:"space-y-3",children:[q.status==="ACTIVE"&&y(l,{className:"w-full justify-start",variant:"ghost",onPress:()=>$("execute"),children:[f("span",{className:"mr-2",children:"\u25B6\uFE0F"})," Execute Agent"]}),(q.status==="DRAFT"||q.status==="PAUSED")&&y(l,{className:"w-full justify-start",variant:"ghost",onPress:()=>v("activate"),disabled:V,children:[f("span",{className:"mr-2",children:"\uD83D\uDFE2"})," Activate Agent"]}),q.status==="ACTIVE"&&y(l,{className:"w-full justify-start",variant:"ghost",onPress:()=>v("pause"),disabled:V,children:[f("span",{className:"mr-2",children:"\u23F8\uFE0F"})," Pause Agent"]}),q.status!=="ARCHIVED"&&y(l,{className:"w-full justify-start text-yellow-600 hover:text-yellow-700",variant:"ghost",onPress:()=>{F("archive"),$("confirm")},children:[f("span",{className:"mr-2",children:"\uD83D\uDCE6"})," Archive Agent"]}),q.status==="ARCHIVED"&&y(l,{className:"w-full justify-start",variant:"ghost",onPress:()=>v("activate"),disabled:V,children:[f("span",{className:"mr-2",children:"\uD83D\uDD04"})," Restore Agent"]}),U&&f("div",{className:"rounded-md bg-destructive/10 p-3 text-destructive text-sm",children:U}),f("div",{className:"border-border border-t pt-3",children:f(l,{className:"w-full",variant:"outline",onPress:W,children:"Close"})})]}),J==="execute"&&y("div",{className:"space-y-4",children:[y("div",{children:[f("label",{htmlFor:"execute-message",className:"mb-1 block font-medium text-muted-foreground text-sm",children:"Message *"}),f("textarea",{id:"execute-message",value:H,onChange:(b)=>Q(b.target.value),placeholder:"Enter your message to the agent...",rows:4,disabled:V,className:"w-full rounded-md border border-input bg-background px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-ring disabled:opacity-50"})]}),U&&f("div",{className:"rounded-md bg-destructive/10 p-3 text-destructive text-sm",children:U}),y("div",{className:"flex justify-end gap-3 pt-2",children:[f(l,{variant:"ghost",onPress:()=>$("menu"),disabled:V,children:"Back"}),f(l,{onPress:P,disabled:V,children:V?"Executing...":"\u25B6\uFE0F Execute"})]})]}),J==="confirm"&&G==="archive"&&y("div",{className:"space-y-4",children:[y("p",{className:"text-muted-foreground",children:["Are you sure you want to archive"," ",f("span",{className:"font-medium text-foreground",children:q.name}),"?"]}),f("p",{className:"text-muted-foreground text-sm",children:"Archived agents cannot be executed but can be restored later."}),U&&f("div",{className:"rounded-md bg-destructive/10 p-3 text-destructive text-sm",children:U}),y("div",{className:"flex justify-end gap-3 pt-2",children:[f(l,{variant:"ghost",onPress:()=>$("menu"),disabled:V,children:"Cancel"}),f(l,{onPress:()=>v("archive"),disabled:V,children:V?"Archiving...":"\uD83D\uDCE6 Archive"})]})]})]})]})}import{Button as S1,Input as o5}from"@contractspec/lib.design-system";import{useState as _0}from"react";import{jsx as T,jsxs as t}from"react/jsx-runtime";var u2=[{value:"openai",label:"OpenAI",models:["gpt-5.4","gpt-5-mini","gpt-4o","gpt-4-turbo","gpt-3.5-turbo"]},{value:"anthropic",label:"Anthropic",models:["claude-sonnet-4-6","claude-opus-4-6","claude-haiku-4-5"]},{value:"google",label:"Google",models:["gemini-2.5-flash","gemini-2.5-pro","gemini-pro","gemini-ultra"]},{value:"mistral",label:"Mistral",models:["mistral-large-2512","mistral-large-latest","mistral-medium-latest","mistral-small-latest"]}];function s2({isOpen:Z,onClose:q,onSubmit:D,isLoading:Y=!1}){let[X,A]=_0(""),[z,V]=_0(""),[J,$]=_0("openai"),[H,Q]=_0("gpt-5.4"),[G,F]=_0(""),[U,L]=_0(null),B=u2.find((v)=>v.value===J),W=async(v)=>{if(v.preventDefault(),L(null),!X.trim()){L("Agent name is required");return}try{await D({name:X.trim(),description:z.trim()||void 0,modelProvider:J,modelName:H,systemPrompt:G.trim()||void 0}),A(""),V(""),$("openai"),Q("gpt-5.4"),F(""),q()}catch(b){L(b instanceof Error?b.message:"Failed to create agent")}},P=(v)=>{$(v);let b=u2.find((o)=>o.value===v);if(b)Q(b.models[0])};if(!Z)return null;return t("div",{className:"fixed inset-0 z-50 flex items-center justify-center",children:[T("div",{className:"absolute inset-0 bg-background/80 backdrop-blur-sm",onClick:q,role:"button",tabIndex:0,onKeyDown:(v)=>{if(v.key==="Enter"||v.key===" ")q()},"aria-label":"Close modal"}),t("div",{className:"relative z-10 max-h-[90vh] w-full max-w-lg overflow-y-auto rounded-xl border border-border bg-card p-6 shadow-xl",children:[T("h2",{className:"mb-4 font-semibold text-xl",children:"Create New Agent"}),t("form",{onSubmit:W,className:"space-y-4",children:[t("div",{children:[T("label",{htmlFor:"agent-name",className:"mb-1 block font-medium text-muted-foreground text-sm",children:"Agent Name *"}),T(o5,{id:"agent-name",value:X,onChange:(v)=>A(v.target.value),placeholder:"e.g., Customer Support Bot",disabled:Y})]}),t("div",{children:[T("label",{htmlFor:"agent-description",className:"mb-1 block font-medium text-muted-foreground text-sm",children:"Description"}),T("textarea",{id:"agent-description",value:z,onChange:(v)=>V(v.target.value),placeholder:"Describe what this agent does...",rows:2,disabled:Y,className:"w-full rounded-md border border-input bg-background px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-ring disabled:opacity-50"})]}),t("div",{className:"flex gap-3",children:[t("div",{className:"flex-1",children:[T("label",{htmlFor:"model-provider",className:"mb-1 block font-medium text-muted-foreground text-sm",children:"Provider *"}),T("select",{id:"model-provider",value:J,onChange:(v)=>P(v.target.value),disabled:Y,className:"h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-ring disabled:opacity-50",children:u2.map((v)=>T("option",{value:v.value,children:v.label},v.value))})]}),t("div",{className:"flex-1",children:[T("label",{htmlFor:"model-name",className:"mb-1 block font-medium text-muted-foreground text-sm",children:"Model *"}),T("select",{id:"model-name",value:H,onChange:(v)=>Q(v.target.value),disabled:Y,className:"h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-ring disabled:opacity-50",children:B?.models.map((v)=>T("option",{value:v,children:v},v))})]})]}),t("div",{children:[T("label",{htmlFor:"system-prompt",className:"mb-1 block font-medium text-muted-foreground text-sm",children:"System Prompt"}),T("textarea",{id:"system-prompt",value:G,onChange:(v)=>F(v.target.value),placeholder:"You are a helpful assistant that...",rows:4,disabled:Y,className:"w-full rounded-md border border-input bg-background px-3 py-2 font-mono text-sm focus:outline-none focus:ring-2 focus:ring-ring disabled:opacity-50"}),T("p",{className:"mt-1 text-muted-foreground text-xs",children:"Instructions that define the agent's behavior"})]}),U&&T("div",{className:"rounded-md bg-destructive/10 p-3 text-destructive text-sm",children:U}),t("div",{className:"flex justify-end gap-3 pt-2",children:[T(S1,{type:"button",variant:"ghost",onPress:q,disabled:Y,children:"Cancel"}),T(S1,{type:"submit",disabled:Y,children:Y?"Creating...":"Create Agent"})]})]})]})]})}import{Button as s0,StatusChip as S5}from"@contractspec/lib.design-system";import{HStack as t2,VStack as l2}from"@contractspec/lib.ui-kit-web/ui/stack";import{Text as k0}from"@contractspec/lib.ui-kit-web/ui/text";import{jsx as H0,jsxs as u}from"react/jsx-runtime";function n2(Z){switch(Z){case"COMPLETED":return"success";case"RUNNING":return"warning";case"QUEUED":return"neutral";case"FAILED":case"CANCELLED":return"danger";default:return"neutral"}}function a2(Z){if(!Z)return"-";if(Z<1000)return`${Z}ms`;if(Z<60000)return`${(Z/1000).toFixed(1)}s`;return`${(Z/60000).toFixed(1)}m`}function N0(Z){if(Z<1000)return Z.toString();if(Z<1e6)return`${(Z/1000).toFixed(1)}K`;return`${(Z/1e6).toFixed(2)}M`}function r1(Z){if(!Z)return"-";return`$${Z.toFixed(4)}`}function c1(Z){return JSON.stringify(Z??null,null,2)}function i1({run:Z}){return u(l2,{gap:"sm",className:"py-2",children:[u(t2,{justify:"between",className:"flex-wrap",children:[H0(S5,{tone:n2(Z.status),label:Z.status}),u(k0,{className:"text-muted-foreground text-sm",children:["Queued ",Z.queuedAt.toLocaleString()]})]}),u(t2,{gap:"lg",className:"flex-wrap",children:[u(k0,{className:"text-muted-foreground text-sm",children:["Prompt ",N0(Z.promptTokens)]}),u(k0,{className:"text-muted-foreground text-sm",children:["Completion ",N0(Z.completionTokens)]}),u(k0,{className:"text-muted-foreground text-sm",children:["Duration ",a2(Z.durationMs)]})]}),u(l2,{gap:"xs",children:[H0(k0,{className:"font-medium text-sm",children:"Input"}),H0("pre",{className:"overflow-auto rounded-md bg-muted/40 p-3 text-xs",children:c1(Z.input)})]}),u(l2,{gap:"xs",children:[H0(k0,{className:"font-medium text-sm",children:"Output"}),H0("pre",{className:"overflow-auto rounded-md bg-muted/40 p-3 text-xs",children:c1(Z.output??Z.errorMessage??"Pending")})]})]})}function u1({controller:Z,totalRuns:q}){let D=Z.rows[0],Y=Z.columns.find((z)=>z.id==="queuedAt"),X=Z.columns.find((z)=>z.id==="durationMs"),A=Z.columns.find((z)=>z.id==="estimatedCostUsd");return u(t2,{gap:"sm",className:"flex-wrap",children:[u(k0,{className:"text-muted-foreground text-sm",children:[q," runs"]}),H0(s0,{variant:"outline",size:"sm",onPress:()=>D?.toggleExpanded?.(!D?.isExpanded),children:"Expand Latest Run"}),H0(s0,{variant:"outline",size:"sm",onPress:()=>Y?.toggleVisibility?.(!Y?.visible),children:Y?.visible?"Hide Time":"Show Time"}),H0(s0,{variant:"outline",size:"sm",onPress:()=>X?.toggleVisibility?.(!X?.visible),children:X?.visible?"Hide Duration":"Show Duration"}),H0(s0,{variant:"outline",size:"sm",onPress:()=>A?.toggleVisibility?.(!A?.visible),children:A?.visible?"Hide Cost":"Show Cost"})]})}import{StatusChip as c5}from"@contractspec/lib.design-system";import{VStack as r5}from"@contractspec/lib.ui-kit-web/ui/stack";import{Text as e2}from"@contractspec/lib.ui-kit-web/ui/text";import{jsx as l0,jsxs as i5}from"react/jsx-runtime";function s1(){return[{id:"queuedAt",header:"Run",label:"Run",accessor:(Z)=>Z.queuedAt.getTime(),cell:({item:Z})=>i5(r5,{gap:"xs",children:[l0(e2,{className:"font-mono text-sm",children:Z.id.slice(-8)}),l0(e2,{className:"text-muted-foreground text-xs",children:Z.queuedAt.toLocaleString()})]}),size:220,minSize:180,canSort:!0,canHide:!0,canResize:!0},{id:"agentName",header:"Agent",label:"Agent",accessor:(Z)=>Z.agentName??"Unknown Agent",cell:({value:Z})=>l0(e2,{className:"font-medium",children:typeof Z==="string"?Z:"Unknown Agent"}),size:220,canSort:!0,canResize:!0},{id:"status",header:"Status",label:"Status",accessorKey:"status",cell:({value:Z})=>{let q=typeof Z==="string"?Z:"QUEUED";return l0(c5,{tone:n2(q),label:q})},size:150,canSort:!0,canResize:!0},{id:"totalTokens",header:"Tokens",label:"Tokens",accessorKey:"totalTokens",cell:({value:Z})=>N0(Number(Z??0)),align:"right",size:140,canSort:!0,canResize:!0},{id:"durationMs",header:"Duration",label:"Duration",accessorKey:"durationMs",cell:({value:Z})=>a2(typeof Z==="number"?Z:void 0),align:"right",size:140,canSort:!0,canHide:!0,canResize:!0},{id:"estimatedCostUsd",header:"Cost",label:"Cost",accessorKey:"estimatedCostUsd",cell:({value:Z})=>r1(typeof Z==="number"?Z:void 0),align:"right",size:140,canSort:!0,canHide:!0,canResize:!0}]}import{DataTable as u5}from"@contractspec/lib.design-system";import{useContractTable as s5}from"@contractspec/lib.presentation-runtime-react";import*as l1 from"react";import{jsx as t0}from"react/jsx-runtime";function t1({runs:Z,totalItems:q,pageIndex:D,pageSize:Y,sorting:X,loading:A,onSortingChange:z,onPaginationChange:V,onRunClick:J}){let $=l1.useMemo(()=>s1(),[]),H=s5({data:Z,columns:$,executionMode:"server",totalItems:q,state:{sorting:X,pagination:{pageIndex:D,pageSize:Y}},onSortingChange:z,onPaginationChange:V,initialState:{columnVisibility:{estimatedCostUsd:!1}},getRowId:(Q)=>Q.id,renderExpandedContent:(Q)=>t0(i1,{run:Q}),getCanExpand:()=>!0});return t0(u5,{controller:H,title:"Run History",description:"Server-mode ContractSpec table with shared pagination, sorting, visibility, and expansion.",loading:A,onRowPress:(Q)=>J?.(Q.id),toolbar:t0(u1,{controller:H,totalRuns:q}),emptyState:t0("div",{className:"rounded-md border border-dashed p-8 text-center text-muted-foreground text-sm",children:"No runs yet"})})}import{EmptyState as l5,ErrorState as t5,LoaderBlock as n5,StatCard as n0,StatCardGroup as a5}from"@contractspec/lib.design-system";import{useState as n1}from"react";import{jsx as Y0,jsxs as a1}from"react/jsx-runtime";function a0({agentId:Z,onRunClick:q}){let[D,Y]=n1([{id:"queuedAt",desc:!0}]),[X,A]=n1({pageIndex:0,pageSize:3}),{data:z,metrics:V,loading:J,error:$,refetch:H}=C0({agentId:Z,pageIndex:X.pageIndex,pageSize:X.pageSize,sorting:D});if(J&&!z)return Y0(n5,{label:"Loading runs..."});if($)return Y0(t5,{title:"Failed to load runs",description:$.message,onRetry:H,retryLabel:"Retry"});if(!z?.items.length)return Y0(l5,{title:"No runs yet",description:"Execute an agent to see run history here."});return a1("div",{className:"space-y-6",children:[V?a1(a5,{children:[Y0(n0,{label:"Total Runs",value:V.totalRuns}),Y0(n0,{label:"Success Rate",value:`${(V.successRate*100).toFixed(1)}%`}),Y0(n0,{label:"Total Tokens",value:N0(V.totalTokens)}),Y0(n0,{label:"Total Cost",value:`$${V.totalCostUsd.toFixed(2)}`})]}):null,Y0(t1,{runs:z.items,totalItems:z.total,pageIndex:X.pageIndex,pageSize:X.pageSize,sorting:D,loading:J,onSortingChange:(Q)=>{Y(Q),A((G)=>({...G,pageIndex:0}))},onPaginationChange:A,onRunClick:q})]})}import{useTemplateRuntime as e5}from"@contractspec/lib.example-shared-ui";import{useCallback as ZZ,useEffect as HZ,useMemo as qZ,useState as e0}from"react";function Z1(Z={}){let{handlers:q,projectId:D}=e5(),{agent:Y}=q,[X,A]=e0(null),[z,V]=e0(!0),[J,$]=e0(null),[H,Q]=e0(1),G=ZZ(async()=>{V(!0),$(null);try{let B=await Y.listTools({projectId:D,search:Z.search,category:Z.category,status:Z.status==="all"?void 0:Z.status,limit:Z.limit??50,offset:(H-1)*(Z.limit??50)});A(B)}catch(B){$(B instanceof Error?B:Error("Unknown error"))}finally{V(!1)}},[Y,D,Z.search,Z.category,Z.status,Z.limit,H]);HZ(()=>{G()},[G]);let{stats:F,groupedByCategory:U,categoryStats:L}=qZ(()=>{if(!X)return{stats:null,groupedByCategory:{},categoryStats:[]};let B=X.items,W=B.filter((d)=>d.status==="ACTIVE").length,P=B.filter((d)=>d.status==="DEPRECATED").length,v=B.filter((d)=>d.status==="DISABLED").length,b={},o={};B.forEach((d)=>{let r=d.category;if(!b[r])b[r]=[];b[r].push(d),o[r]=(o[r]||0)+1});let f0=Object.entries(o).map(([d,r])=>({category:d,count:r})).sort((d,r)=>r.count-d.count);return{stats:{total:X.total,active:W,deprecated:P,disabled:v,topCategories:f0.slice(0,5)},groupedByCategory:b,categoryStats:f0}},[X]);return{data:X,loading:z,error:J,stats:F,groupedByCategory:U,categoryStats:L,page:H,refetch:G,nextPage:()=>Q((B)=>B+1),prevPage:()=>H>1&&Q((B)=>B-1)}}import{Button as DZ,EmptyState as YZ,EntityCard as JZ,ErrorState as $Z,LoaderBlock as XZ,StatCard as e1,StatCardGroup as zZ,StatusChip as QZ}from"@contractspec/lib.design-system";import{jsx as p,jsxs as Z2}from"react/jsx-runtime";var Z4={RETRIEVAL:"\uD83D\uDD0D",COMPUTATION:"\uD83E\uDDEE",COMMUNICATION:"\uD83D\uDCE7",INTEGRATION:"\uD83D\uDD17",UTILITY:"\uD83D\uDEE0\uFE0F",CUSTOM:"\u2699\uFE0F"};function GZ(Z){switch(Z){case"ACTIVE":return"success";case"DRAFT":return"neutral";case"DEPRECATED":return"warning";case"DISABLED":return"danger";default:return"neutral"}}function H2({onToolClick:Z,onCreateTool:q}){let{data:D,loading:Y,error:X,groupedByCategory:A,categoryStats:z,refetch:V}=Z1();if(Y&&!D)return p(XZ,{label:"Loading tools..."});if(X)return p($Z,{title:"Failed to load tools",description:X.message,onRetry:V,retryLabel:"Retry"});if(!D?.items.length)return p(YZ,{title:"No tools registered",description:"Create your first tool to extend agent capabilities.",primaryAction:q?p(DZ,{onPress:q,children:"Create Tool"}):void 0});return Z2("div",{className:"space-y-8",children:[Z2(zZ,{children:[p(e1,{label:"Total Tools",value:D.total}),z.slice(0,3).map(({category:J,count:$})=>p(e1,{label:`${Z4[J]??""} ${J}`,value:$},J))]}),Object.entries(A).map(([J,$])=>Z2("section",{className:"space-y-4",children:[Z2("div",{className:"flex items-center gap-2",children:[p("span",{className:"text-2xl",children:Z4[J]}),p("h3",{className:"font-semibold text-lg",children:J}),p("span",{className:"rounded-full bg-muted px-2 py-0.5 text-muted-foreground text-xs",children:$.length})]}),p("div",{className:"grid gap-4 md:grid-cols-2 lg:grid-cols-3",children:$.map((H)=>p(JZ,{cardTitle:H.name,cardSubtitle:`v${H.version}`,meta:p("p",{className:"text-muted-foreground text-sm",children:H.description}),chips:p(QZ,{tone:GZ(H.status),label:H.status}),footer:p("code",{className:"text-muted-foreground text-xs",children:H.name}),onClick:Z?()=>Z(H.id):void 0},H.id))})]},J))]})}import{Button as H1,StatCard as FZ,StatCardGroup as UZ}from"@contractspec/lib.design-system";import{useCallback as AZ,useMemo as VZ,useState as h0}from"react";import{jsx as R,jsxs as M}from"react/jsx-runtime";function q4(){let[Z,q]=h0("runs"),[D,Y]=h0(!1),[X,A]=h0(null),[z,V]=h0(!1),[J,$]=h0(0),{data:H,metrics:Q,refetch:G}=C0(),{refetch:F}=v0(),U=r2({onSuccess:()=>{F(),G(),$((P)=>P+1)}}),L=AZ((P)=>{A(P),V(!0)},[]),B=[{id:"runs",label:"Runs",icon:"\u25B6"},{id:"agents",label:"Agents",icon:"\uD83E\uDD16"},{id:"tools",label:"Tools",icon:"\uD83D\uDD27"},{id:"metrics",label:"Metrics",icon:"\uD83D\uDCCA"}],W=VZ(()=>{if(!Q)return[{label:"Total Runs",value:"-",hint:"Loading..."},{label:"Success Rate",value:"-",hint:""},{label:"Total Tokens",value:"-",hint:""},{label:"Total Cost",value:"-",hint:""}];return[{label:"Total Runs",value:Q.totalRuns.toLocaleString(),hint:`${(Q.successRate*100).toFixed(0)}% success`},{label:"Success Rate",value:`${(Q.successRate*100).toFixed(0)}%`,hint:"of all runs"},{label:"Total Tokens",value:Q.totalTokens>=1e6?`${(Q.totalTokens/1e6).toFixed(1)}M`:`${(Q.totalTokens/1000).toFixed(0)}K`,hint:"This period"},{label:"Total Cost",value:`$${Q.totalCostUsd.toFixed(2)}`,hint:"This period"}]},[Q]);return M("div",{className:"space-y-6",children:[M("div",{className:"flex items-center justify-between",children:[R("h2",{className:"font-bold text-2xl",children:"AI Agent Console"}),M(H1,{onPress:()=>Y(!0),children:[R("span",{className:"mr-2",children:"+"})," New Agent"]})]}),R(UZ,{children:W.map((P,v)=>R(FZ,{label:P.label,value:P.value,hint:P.hint},v))}),R(o1,{runs:H?.items??[]}),R("nav",{className:"flex gap-1 rounded-lg bg-muted p-1",role:"tablist",children:B.map((P)=>M("button",{type:"button",role:"tab","aria-selected":Z===P.id,onClick:()=>q(P.id),className:`flex flex-1 items-center justify-center gap-2 rounded-md px-4 py-2 font-medium text-sm transition-colors ${Z===P.id?"bg-background text-foreground shadow-sm":"text-muted-foreground hover:text-foreground"}`,children:[R("span",{children:P.icon}),P.label]},P.id))}),M("div",{className:"min-h-[400px]",role:"tabpanel",children:[Z==="runs"&&R(a0,{},J),Z==="agents"&&R(KZ,{onAgentClick:L},J),Z==="tools"&&R(H2,{}),Z==="metrics"&&R(PZ,{metrics:Q})]}),R(s2,{isOpen:D,onClose:()=>Y(!1),onSubmit:async(P)=>{await U.createAgent(P)},isLoading:U.createState.loading}),R(i2,{isOpen:z,agent:X,onClose:()=>{V(!1),A(null)},onActivate:async(P)=>{await U.activateAgent(P)},onPause:async(P)=>{await U.pauseAgent(P)},onArchive:async(P)=>{await U.archiveAgent(P)},onExecute:async(P,v)=>{await U.executeAgent({agentId:P,message:v})},isLoading:U.isLoading})]})}function KZ({onAgentClick:Z}){let{data:q,loading:D,error:Y,stats:X,refetch:A}=v0();if(D&&!q)return R("div",{className:"flex h-64 items-center justify-center text-muted-foreground",children:"Loading agents..."});if(Y)return M("div",{className:"flex h-64 flex-col items-center justify-center text-destructive",children:[M("p",{children:["Failed to load agents: ",Y.message]}),R(H1,{variant:"outline",onPress:A,className:"mt-2",children:"Retry"})]});if(!q?.items.length)return M("div",{className:"flex h-64 flex-col items-center justify-center text-muted-foreground",children:[R("p",{className:"font-medium text-lg",children:"No agents yet"}),R("p",{className:"text-sm",children:"Create your first AI agent to get started."})]});return M("div",{className:"space-y-4",children:[X&&M("div",{className:"flex gap-4 text-sm",children:[M("span",{children:["Total: ",X.total]}),M("span",{className:"text-green-600",children:["Active: ",X.active]}),M("span",{className:"text-yellow-600",children:["Paused: ",X.paused]}),M("span",{className:"text-blue-600",children:["Draft: ",X.draft]})]}),R("div",{className:"grid gap-4 md:grid-cols-2 lg:grid-cols-3",children:q.items.map((z)=>R(kZ,{agent:z,onClick:()=>Z(z)},z.id))})]})}function kZ({agent:Z,onClick:q}){let D={ACTIVE:"bg-green-100 text-green-700 dark:bg-green-900/30 dark:text-green-400",DRAFT:"bg-blue-100 text-blue-700 dark:bg-blue-900/30 dark:text-blue-400",PAUSED:"bg-yellow-100 text-yellow-700 dark:bg-yellow-900/30 dark:text-yellow-400",ARCHIVED:"bg-gray-100 text-gray-600 dark:bg-gray-700 dark:text-gray-400"};return M("div",{onClick:q,className:"cursor-pointer rounded-xl border border-border bg-card p-4 transition-all hover:shadow-md",role:"button",tabIndex:0,onKeyDown:(Y)=>{if(Y.key==="Enter"||Y.key===" ")q()},children:[M("div",{className:"flex items-start justify-between",children:[M("div",{className:"min-w-0 flex-1",children:[R("h3",{className:"truncate font-semibold",children:Z.name}),M("p",{className:"text-muted-foreground text-sm",children:[Z.modelProvider," / ",Z.modelName]})]}),R("span",{className:`rounded-full px-2 py-0.5 font-medium text-xs ${D[Z.status]}`,children:Z.status})]}),Z.description&&R("p",{className:"mt-2 line-clamp-2 text-muted-foreground text-sm",children:Z.description}),M("div",{className:"mt-3 flex items-center justify-between",children:[R("span",{className:"text-muted-foreground text-xs",children:Z.modelName}),R(H1,{variant:"ghost",size:"sm",onPress:q,children:"Actions"})]})]})}function PZ({metrics:Z}){if(!Z)return R("div",{className:"flex h-64 items-center justify-center text-muted-foreground",children:"Loading metrics..."});let q=Math.round(Z.totalRuns*Z.successRate),D=Z.totalRuns-q;return M("div",{className:"space-y-6",children:[R("h3",{className:"font-semibold text-lg",children:"Usage Analytics"}),M("div",{className:"grid gap-6 md:grid-cols-2",children:[M("div",{className:"rounded-xl border border-border bg-card p-4",children:[R("h4",{className:"font-medium",children:"Run Outcomes"}),M("div",{className:"mt-4 space-y-3",children:[R(H4,{label:"Completed",value:q,total:Z.totalRuns,color:"bg-green-500"}),R(H4,{label:"Failed",value:D,total:Z.totalRuns,color:"bg-red-500"})]})]}),M("div",{className:"rounded-xl border border-border bg-card p-4",children:[R("h4",{className:"font-medium",children:"Performance"}),M("dl",{className:"mt-4 grid grid-cols-2 gap-4",children:[M("div",{children:[R("dt",{className:"text-muted-foreground text-sm",children:"Avg Duration"}),M("dd",{className:"font-semibold text-xl",children:[(Z.averageDurationMs/1000).toFixed(1),"s"]})]}),M("div",{children:[R("dt",{className:"text-muted-foreground text-sm",children:"Success Rate"}),M("dd",{className:"font-semibold text-xl",children:[(Z.successRate*100).toFixed(0),"%"]})]})]})]})]}),M("div",{className:"rounded-xl border border-border bg-card p-4",children:[R("h4",{className:"font-medium",children:"Key Metrics"}),M("dl",{className:"mt-4 grid gap-4 sm:grid-cols-3",children:[M("div",{children:[R("dt",{className:"text-muted-foreground text-sm",children:"Total Runs"}),R("dd",{className:"font-semibold text-2xl",children:Z.totalRuns.toLocaleString()})]}),M("div",{children:[R("dt",{className:"text-muted-foreground text-sm",children:"Total Tokens"}),M("dd",{className:"font-semibold text-2xl",children:[(Z.totalTokens/1000).toFixed(0),"K"]})]}),M("div",{children:[R("dt",{className:"text-muted-foreground text-sm",children:"Cost per Run"}),M("dd",{className:"font-semibold text-2xl",children:["$",Z.totalRuns>0?(Z.totalCostUsd/Z.totalRuns).toFixed(4):"0"]})]})]})]})]})}function H4({label:Z,value:q,total:D,color:Y}){let X=D>0?q/D*100:0;return M("div",{children:[M("div",{className:"flex justify-between text-sm",children:[R("span",{children:Z}),M("span",{className:"text-muted-foreground",children:[q," (",X.toFixed(0),"%)"]})]}),R("div",{className:"mt-1 h-2 overflow-hidden rounded-full bg-muted",children:R("div",{className:`h-full ${Y}`,style:{width:`${X}%`}})})]})}import{VStack as IZ}from"@contractspec/lib.ui-kit-web/ui/stack";import{ExecutionLaneConsoleDemo as BZ}from"@contractspec/module.execution-console";import{jsx as D4,jsxs as vZ}from"react/jsx-runtime";function gD(){return vZ(IZ,{gap:"xl",align:"stretch",children:[D4(q4,{}),D4(BZ,{})]})}var WZ={overlayId:"agent-console.demo-user",version:"1.0.0",description:"Simplifies agent console for demo users",appliesTo:{feature:"agent-console",role:"demo"},modifications:[{type:"hideField",field:"modelConfig",reason:"Advanced config not relevant for demo"},{type:"hideField",field:"webhookConfig",reason:"Integration not available in demo"},{type:"renameLabel",field:"systemPrompt",newLabel:"Agent Instructions"},{type:"addBadge",position:"header",label:"Demo Mode",variant:"warning"}]},_Z={overlayId:"agent-console.read-only",version:"1.0.0",description:"Read-only view for non-admin users",appliesTo:{feature:"agent-console",role:"viewer"},modifications:[{type:"hideField",field:"deleteButton",reason:"No delete permission"},{type:"hideField",field:"editButton",reason:"No edit permission"},{type:"hideField",field:"createButton",reason:"No create permission"}]},iD=[WZ,_Z];import{AGENT_CONSOLE_DEMO_ORGANIZATION_ID as NZ,AGENT_CONSOLE_DEMO_PROJECT_ID as Y4,createAgentConsoleDemoHandlers as LZ}from"@contractspec/example.agent-console/shared";var RZ={target:"markdown",render:async(Z,q)=>{if(Z.source.type!=="component"||Z.source.componentKey!=="AgentListView")throw Error("agentListMarkdownRenderer: not AgentListView");let D=Array.isArray(q?.data)?{items:q.data,total:q.data.length,hasMore:!1}:await LZ({projectId:Y4}).listAgents({projectId:Y4,organizationId:NZ,limit:50,offset:0}),Y=[`# ${Z.meta.description??"Agent List"}`,"",`> ${Z.meta.key} v${Z.meta.version}`,"",`**Total Agents:** ${D.total}`,"","## Agents",""],X={};for(let A of D.items){let z=A.status;if(X[z])X[z].push(A);else X[z]=[A]}for(let[A,z]of Object.entries(X)){Y.push(`### ${A} (${z.length})`),Y.push("");for(let V of z)if(Y.push(`- **${V.name}** (${V.modelProvider}/${V.modelName})`),V.description)Y.push(` > ${V.description}`);Y.push("")}return{mimeType:"text/markdown",body:Y.join(`
66
- `)}}};import{Button as OZ,EmptyState as MZ,EntityCard as bZ,ErrorState as wZ,LoaderBlock as CZ,StatCard as q2,StatCardGroup as hZ,StatusChip as fZ}from"@contractspec/lib.design-system";import{jsx as c,jsxs as D2}from"react/jsx-runtime";function jZ(Z){switch(Z){case"ACTIVE":return"success";case"PAUSED":case"DRAFT":return"warning";case"ARCHIVED":return"neutral";default:return"neutral"}}function q1(){let{data:Z,loading:q,error:D,stats:Y,refetch:X}=v0();if(q&&!Z)return c(CZ,{label:"Loading agents..."});if(D)return c(wZ,{title:"Failed to load agents",description:D.message,onRetry:X,retryLabel:"Retry"});if(!Z?.items.length)return c(MZ,{title:"No agents yet",description:"Create your first AI agent to get started."});return D2("div",{className:"space-y-6",children:[Y&&D2(hZ,{children:[c(q2,{label:"Total Agents",value:Y.total}),c(q2,{label:"Active",value:Y.active}),c(q2,{label:"Paused",value:Y.paused}),c(q2,{label:"Draft",value:Y.draft})]}),D2("div",{className:"flex items-center justify-between",children:[c("h3",{className:"font-semibold text-lg",children:"Agents"}),c(OZ,{onPress:()=>alert("Create Agent clicked!"),children:"Create Agent"})]}),c("div",{className:"grid gap-4 sm:grid-cols-2 lg:grid-cols-3",children:Z.items.map((A)=>c(bZ,{cardTitle:A.name,cardSubtitle:A.modelName,meta:c("p",{className:"text-muted-foreground text-sm",children:A.description}),chips:c(fZ,{tone:jZ(A.status),label:A.status}),footer:D2("span",{className:"text-muted-foreground text-xs",children:["Created ",A.createdAt.toLocaleDateString()]}),onClick:()=>alert(`View agent: ${A.name}`)},A.id))})]})}import{jsx as gZ}from"react/jsx-runtime";var xZ={target:"react",render:async(Z)=>{if(Z.source.type!=="component")throw Error("AgentListRenderer: expected component source");if(Z.source.componentKey!=="AgentListView")throw Error(`AgentListRenderer: unknown component ${Z.source.componentKey}`);return gZ(q1,{})}};import{getFallbackAgentConsoleDashboardData as TZ}from"@contractspec/example.agent-console/shared";function yZ(Z){if(Z<1000)return`${Z}ms`;if(Z<60000)return`${(Z/1000).toFixed(1)}s`;return`${(Z/60000).toFixed(1)}m`}var dZ={target:"markdown",render:async(Z,q)=>{if(Z.source.type!=="component"||Z.source.componentKey!=="AgentConsoleDashboard")throw Error("agentDashboardMarkdownRenderer: not AgentConsoleDashboard");let D=q?.data??await TZ(),Y=D.agents.filter((G)=>G.status==="ACTIVE").length,X=D.runs.filter((G)=>G.status==="COMPLETED").length,A=D.runs.filter((G)=>G.status==="FAILED").length,z=D.runs.reduce((G,F)=>G+(F.totalTokens??0),0),V=D.runs.reduce((G,F)=>G+(F.estimatedCostUsd??0),0),J=D.tools.filter((G)=>G.status==="ACTIVE").length,$=j0(D.runs),H=["# Agent Console Dashboard","","> AI agent operations overview","","## Summary","","| Metric | Value |","|--------|-------|",`| Total Agents | ${D.summary.totalAgents} |`,`| Active Agents | ${Y} |`,`| Total Runs | ${D.summary.totalRuns} |`,`| Completed Runs | ${X} |`,`| Failed Runs | ${A} |`,`| Total Tokens | ${z.toLocaleString()} |`,`| Total Cost | $${V.toFixed(4)} |`,`| Total Tools | ${D.summary.totalTools} |`,`| Active Tools | ${J} |`,"","## Agents",""];if(D.agents.length===0)H.push("_No agents configured._");else{H.push("| Agent | Model | Status | Description |"),H.push("|-------|-------|--------|-------------|");for(let G of D.agents.slice(0,5))H.push(`| ${G.name} | ${G.modelProvider}/${G.modelName} | ${G.status} | ${G.description??"-"} |`);if(D.agents.length>5)H.push(`| ... | ... | ... | _${D.summary.totalAgents-5} more_ |`)}if(H.push(""),H.push("## Recent Runs"),H.push(""),D.runs.length===0)H.push("_No runs yet._");else{H.push("| Run ID | Agent | Status | Duration | Tokens | Cost |"),H.push("|--------|-------|--------|----------|--------|------|");for(let G of D.runs.slice(0,5))H.push(`| ${G.id.slice(-8)} | ${G.agentName} | ${G.status} | ${G.durationMs?yZ(G.durationMs):"-"} | ${G.totalTokens??0} | $${(G.estimatedCostUsd??0).toFixed(4)} |`);if(D.runs.length>5)H.push(`| ... | ... | ... | ... | ... | _${D.summary.totalRuns-5} more_ |`)}H.push(""),H.push("## Visualization Overview"),H.push("");for(let G of $)H.push(`- **${G.title}** via \`${G.spec.meta.key}\``);H.push(""),H.push("## Tools"),H.push("");let Q={};for(let G of D.tools){let F=G.category;if(!Q[F])Q[F]=[];Q[F].push(G)}if(Object.keys(Q).length===0)H.push("_No tools registered._");else{H.push("| Category | Tools | Active |"),H.push("|----------|-------|--------|");for(let[G,F]of Object.entries(Q).sort()){let U=F.filter((L)=>L.status==="ACTIVE").length;H.push(`| ${G} | ${F.length} | ${U} |`)}}return{mimeType:"text/markdown",body:H.join(`
67
- `)}}};import{AGENT_CONSOLE_DEMO_PROJECT_ID as J4,createAgentConsoleDemoHandlers as mZ}from"@contractspec/example.agent-console/shared";function EZ(Z){if(Z<1000)return`${Z}ms`;if(Z<60000)return`${(Z/1000).toFixed(1)}s`;return`${(Z/60000).toFixed(1)}m`}var pZ={target:"markdown",render:async(Z,q)=>{if(Z.source.type!=="component"||Z.source.componentKey!=="RunListView")throw Error("runListMarkdownRenderer: not RunListView");let D=Array.isArray(q?.data)?{items:q.data,total:q.data.length,hasMore:!1}:await mZ({projectId:J4}).listRuns({projectId:J4,limit:20,offset:0}),Y=[`# ${Z.meta.description??"Agent Runs"}`,"",`> ${Z.meta.key} v${Z.meta.version}`,"",`**Total Runs:** ${D.total}`,"","## Recent Runs","","| ID | Agent | Status | Duration | Tokens | Cost |","| --- | --- | --- | --- | --- | --- |"];for(let X of D.items.slice(0,10))Y.push(`| ${X.id.slice(-8)} | ${X.agentName} | ${X.status} | ${X.durationMs?EZ(X.durationMs):"-"} | ${X.totalTokens} | $${X.estimatedCostUsd?.toFixed(4)??"-"} |`);return{mimeType:"text/markdown",body:Y.join(`
68
- `)}}};import{AGENT_CONSOLE_DEMO_ORGANIZATION_ID as oZ,AGENT_CONSOLE_DEMO_PROJECT_ID as $4,createAgentConsoleDemoHandlers as SZ}from"@contractspec/example.agent-console/shared";var cZ={target:"markdown",render:async(Z,q)=>{if(Z.source.type!=="component"||Z.source.componentKey!=="ToolRegistryView")throw Error("toolRegistryMarkdownRenderer: not ToolRegistryView");let D=Array.isArray(q?.data)?{items:q.data,total:q.data.length,hasMore:!1}:await SZ({projectId:$4}).listTools({projectId:$4,organizationId:oZ,limit:50,offset:0}),Y=[`# ${Z.meta.description??"Tool Registry"}`,"",`> ${Z.meta.key} v${Z.meta.version}`,"",`**Total Tools:** ${D.total}`,""],X={};for(let A of D.items){let z=A.category;if(!X[z])X[z]=[];X[z].push(A)}for(let[A,z]of Object.entries(X).sort()){Y.push(`## ${A} (${z.length})`),Y.push("");for(let V of z){let J=V.status==="ACTIVE"?"\u2705":V.status==="DEPRECATED"?"\u26A0\uFE0F":"\u274C";if(Y.push(`### ${J} ${V.name} v${V.version}`),Y.push(""),Y.push(`> \`${V.id}\``),Y.push(""),V.description)Y.push(V.description),Y.push("")}}return{mimeType:"text/markdown",body:Y.join(`
69
- `)}}};import{defineHarnessScenario as rZ}from"@contractspec/lib.contracts-spec";var X4="Paris Meetup Demo Agent",iZ=i.filter((Z)=>Z.status==="COMPLETED").length,uZ=(iZ+1)/(i.length+1),D1=rZ({meta:{key:"agent-console.meetup.proof",version:"1.0.0",title:"Agent console meetup proof",description:"Verifies the deterministic autonomous-agent walkthrough end-to-end.",domain:"agent-console",owners:["@agent-console-team"],tags:["meetup","proof","autonomous-agents"],stability:"experimental"},target:{allowlistedDomains:["sandbox.contractspec.local"],isolation:"sandbox"},allowedModes:["code-execution"],steps:[{key:"open-dashboard",description:"Inspect seeded dashboard state",actionClass:"code-exec-read",intent:"Confirm the local demo starts with seeded agents, tools, and runs."},{key:"create-agent",description:"Create the meetup demo agent",actionClass:"code-exec-mutate",intent:"Add a new agent for the walkthrough.",mutatesState:!0},{key:"activate-agent",description:"Activate the meetup demo agent",actionClass:"code-exec-mutate",intent:"Move the new agent into an executable state.",mutatesState:!0},{key:"execute-agent",description:"Run the meetup demo agent",actionClass:"code-exec-mutate",intent:"Create a deterministic completed run.",mutatesState:!0},{key:"inspect-dashboard",description:"Confirm dashboard totals after execution",actionClass:"code-exec-read",intent:"Verify the new agent and run are visible in the demo state."}],assertions:[{key:"captured-step-summaries",type:"count",source:"step-summary",match:5},{key:"execution-completed",type:"step-status",source:"execute-agent",match:"completed"},{key:"final-summary-mentions-meetup-agent",type:"text-match",source:"inspect-dashboard",match:X4},{key:"final-dashboard-shape",type:"json-match",source:"inspect-dashboard",match:{agentCount:m.length+1,runCount:i.length+1,toolCount:E.length,latestAgentName:X4,latestRunId:"run-meetup-1",successRate:uZ}}]});import{defineHarnessSuite as sZ}from"@contractspec/lib.contracts-spec";var m9=sZ({meta:{key:"agent-console.meetup.proof-suite",version:"1.0.0",title:"Agent console meetup proof suite",description:"Bundles the deterministic meetup walkthrough into a reusable harness suite.",domain:"agent-console",owners:["@agent-console-team"],tags:["meetup","proof","harness-suite"],stability:"experimental"},summary:"Runs the canonical agent-console meetup scenario and validates the final dashboard evidence.",tags:["agent-console","meetup","proof"],scenarios:[{scenario:{key:D1.meta.key,version:D1.meta.version},required:!0,weight:1}]});export{Z1 as useToolList,C0 as useRunList,r2 as useAgentMutations,v0 as useAgentList,cZ as toolRegistryMarkdownRenderer,pZ as runListMarkdownRenderer,l4 as mockUpdateToolHandler,O4 as mockUpdateAgentHandler,t4 as mockTestToolHandler,i4 as mockListToolsHandler,p4 as mockListRunsHandler,N4 as mockListAgentsHandler,u4 as mockGetToolHandler,o4 as mockGetRunHandler,L4 as mockGetAgentHandler,S4 as mockExecuteAgentHandler,s4 as mockCreateToolHandler,R4 as mockCreateAgentHandler,c4 as mockCancelRunHandler,v5 as getFallbackAgentConsoleDashboardData,g1 as getAgentConsoleDashboardData,x4 as example,j0 as createAgentVisualizationItems,m4 as createAgentHandlers,y2 as createAgentConsoleDemoHandlers,xZ as agentListReactRenderer,RZ as agentListMarkdownRenderer,dZ as agentDashboardMarkdownRenderer,_Z as agentConsoleReadOnlyOverlay,iD as agentConsoleOverlays,WZ as agentConsoleDemoOverlay,h2 as UpdateToolInputModel,v1 as UpdateToolCommand,V2 as UpdateAgentInputModel,k2 as UpdateAgentCommand,O5 as ToolUpdatedEvent,Q0 as ToolSummaryModel,Z0 as ToolStatusEnum,y1 as ToolStatusEntityEnum,b5 as ToolStatusChangedEvent,H2 as ToolRegistryView,w2 as ToolModel,w5 as ToolListPresentation,G5 as ToolInvokedEvent,_5 as ToolEntity,C5 as ToolDetailPresentation,L5 as ToolCreatedEvent,U5 as ToolCompletedEvent,P0 as ToolChoiceEnum,z0 as ToolCategoryEnum,T1 as ToolCategoryEntityEnum,R2 as TimelineDataPointModel,_1 as TestToolCommand,X0 as RunSummaryModel,W2 as RunStepTypeEnum,M1 as RunStepTypeEntityEnum,m0 as RunStepModel,a4 as RunStepEntity,a as RunStatusEnum,O1 as RunStatusEntityEnum,q5 as RunStartedEvent,L2 as RunModel,E0 as RunLogModel,e4 as RunLogEntity,a0 as RunListView,k5 as RunListPresentation,N2 as RunInputModel,$5 as RunFailedEvent,n4 as RunEntity,P5 as RunDetailPresentation,Y5 as RunCompletedEvent,z5 as RunCancelledEvent,A1 as RunAgentRefModel,W4 as RemoveToolFromAgentCommand,q0 as ModelProviderEnum,G1 as ModelProviderEntityEnum,K5 as MessageGeneratedEvent,E as MOCK_TOOLS,i as MOCK_RUNS,m as MOCK_AGENTS,X4 as MEETUP_AGENT_NAME,R0 as LogLevelEnum,b1 as LogLevelEntityEnum,j2 as ListToolsQuery,M2 as ListRunsQuery,I2 as ListAgentsQuery,p0 as ImplementationTypeEnum,d1 as ImplementationTypeEntityEnum,_2 as GranularityEnum,W1 as GetToolQuery,g4 as GetRunStepsQuery,k1 as GetRunQuery,P1 as GetRunMetricsQuery,T4 as GetRunLogsQuery,P2 as GetAgentQuery,gD as ExecutionConsoleHost,O2 as ExecuteAgentCommand,j4 as ExamplesAgentConsoleExample,C2 as CreateToolInputModel,B1 as CreateToolCommand,s2 as CreateAgentModal,A2 as CreateAgentInputModel,K2 as CreateAgentCommand,K1 as CancelRunCommand,v4 as AssignToolToAgentCommand,U2 as AgentWithToolsModel,Y1 as AgentVisualizationSpecs,tZ as AgentVisualizationRegistry,J1 as AgentVisualizationRefs,V4 as AgentUpdatedEvent,I4 as AgentToolRemovedEvent,H2 as AgentToolRegistry,F1 as AgentToolRefModel,F4 as AgentToolEntity,k4 as AgentToolAssignedEvent,B0 as AgentSummaryModel,s as AgentStatusEnum,Q1 as AgentStatusEntityEnum,X2 as AgentRunStatusVisualization,a0 as AgentRunList,Q2 as AgentRunEfficiencyVisualization,z2 as AgentRunActivityVisualization,B4 as AgentModel,q1 as AgentListView,M4 as AgentListPresentation,G4 as AgentEntity,b4 as AgentDetailPresentation,q4 as AgentDashboard,F2 as AgentCreatedEvent,m9 as AgentConsoleMeetupProofSuite,J3 as AgentConsoleFeature,w4 as AgentConsoleDashboardPresentation,i2 as AgentActionsModal,D1 as AGENT_CONSOLE_MEETUP_PROOF_SCENARIO,c0 as AGENT_CONSOLE_DEMO_PROJECT_ID,D0 as AGENT_CONSOLE_DEMO_ORGANIZATION_ID};
64
+ FROM agent_run ${H}`,Q)).rows[0],K=G?.totalRuns??0,L=G?.completedRuns??0;return{totalRuns:K,successRate:K>0?L/K:0,averageDurationMs:G?.avgDuration??0,totalTokens:G?.totalTokens??0,totalCostUsd:G?.totalCost??0}}async function Y(F){let H=await $(F.agentId);if(!H)throw Error("AGENT_NOT_FOUND");if(H.status!=="ACTIVE")throw Error("AGENT_NOT_ACTIVE");let Q=m2("run"),U=new Date().toISOString(),G=F.context?.projectId??H.projectId;await Z.execute(`INSERT INTO agent_run (id, projectId, agentId, status, input, totalTokens, promptTokens, completionTokens, estimatedCostUsd, queuedAt)
65
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[Q,G,F.agentId,"QUEUED",F.message,0,0,0,0,U]);let K=(await Z.query("SELECT r.*, a.name as agentName FROM agent_run r LEFT JOIN agent_definition a ON r.agentId = a.id WHERE r.id = ?",[Q])).rows;if(!K[0])throw Error("Failed to retrieve created run");return p2(K[0],K[0].agentName)}return{listAgents:D,getAgent:$,createAgent:q,updateAgent:J,executeAgent:Y,listTools:z,listRuns:X,getRunMetrics:A}}var r=[{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 A5=r.length+1;async function V5(Z){let{agentId:D,status:$,limit:q=20,offset:J=0}=Z,z=[...r];if(D)z=z.filter((Y)=>Y.agentId===D);if($)z=z.filter((Y)=>Y.status===$);let X=z.length;return{items:z.slice(J,J+q).map((Y)=>{let F=d.find((H)=>H.id===Y.agentId);return{id:Y.id,agentId:Y.agentId,agentName:F?.name??"Unknown",status:Y.status,totalTokens:Y.totalTokens,durationMs:Y.durationMs,estimatedCostUsd:Y.estimatedCostUsd,queuedAt:Y.queuedAt,completedAt:Y.completedAt}}),total:X,hasMore:J+q<X}}async function P5(Z){let D=r.find((q)=>q.id===Z.runId);if(!D)throw Error("RUN_NOT_FOUND");let $=d.find((q)=>q.id===D.agentId);return{...D,agent:$?{id:$.id,name:$.name,modelProvider:$.modelProvider,modelName:$.modelName}:void 0,steps:Z.includeSteps?D.steps:void 0,logs:Z.includeLogs?D.logs:void 0}}async function I5(Z){let D=d.find(($)=>$.id===Z.agentId);if(!D)throw Error("AGENT_NOT_FOUND");if(D.status!=="ACTIVE")throw Error("AGENT_NOT_ACTIVE");return{runId:`run-${A5++}`,status:"QUEUED",estimatedWaitMs:500}}async function W5(Z){let D=r.find(($)=>$.id===Z.runId);if(!D)throw Error("RUN_NOT_FOUND");if(!["QUEUED","IN_PROGRESS"].includes(D.status))throw Error("RUN_NOT_CANCELLABLE");return{success:!0,status:"CANCELLED"}}var B5=m.length+1;async function k5(Z){let{organizationId:D,category:$,status:q,search:J,limit:z=20,offset:X=0}=Z,A=m.filter((H)=>H.organizationId===D);if($)A=A.filter((H)=>H.category===$);if(q)A=A.filter((H)=>H.status===q);if(J){let H=J.toLowerCase();A=A.filter((Q)=>Q.name.toLowerCase().includes(H)||Q.description.toLowerCase().includes(H))}let Y=A.length;return{items:A.slice(X,X+z).map((H)=>({id:H.id,name:H.name,slug:H.slug,description:H.description,category:H.category,status:H.status,version:H.version,createdAt:H.createdAt})),total:Y,hasMore:X+z<Y}}async function v5(Z){let D=m.find(($)=>$.id===Z.toolId);if(!D)throw Error("TOOL_NOT_FOUND");return D}async function _5(Z){if(m.some(($)=>$.organizationId===Z.organizationId&&$.slug===Z.slug))throw Error("SLUG_EXISTS");return{id:`tool-${B5++}`,name:Z.name,slug:Z.slug,status:"DRAFT"}}async function N5(Z){let D=m.find(($)=>$.id===Z.toolId);if(!D)throw Error("TOOL_NOT_FOUND");return{id:D.id,name:Z.name??D.name,status:Z.status??D.status,updatedAt:new Date}}async function L5(Z){if(!m.find(($)=>$.id===Z.toolId))throw Error("TOOL_NOT_FOUND");return await new Promise(($)=>setTimeout($,100)),{success:!0,output:{result:"Test successful",input:Z.testInput},durationMs:100}}import{defineEntity as l1,defineEntityEnum as s1,field as _,index as I0}from"@contractspec/lib.schema";var o2=s1({name:"RunStatus",values:["QUEUED","IN_PROGRESS","COMPLETED","FAILED","CANCELLED","EXPIRED"],description:"Status of an agent run"}),S2=s1({name:"RunStepType",values:["MESSAGE_CREATION","TOOL_CALL","TOOL_RESULT","ERROR"],description:"Type of run step"}),r2=s1({name:"LogLevel",values:["DEBUG","INFO","WARN","ERROR"],description:"Log level"}),R5=l1({name:"Run",schema:"agent_console",description:"An execution of an agent with input/output and metrics.",fields:{id:_.id(),organizationId:_.string({description:"Organization ID"}),agentId:_.foreignKey({description:"Agent being executed"}),userId:_.string({isOptional:!0,description:"User who initiated the run"}),sessionId:_.string({isOptional:!0,description:"Conversation session ID"}),input:_.json({description:"Input data for the run"}),output:_.json({isOptional:!0,description:"Output result from the run"}),status:_.enum("RunStatus",{default:"QUEUED"}),errorMessage:_.string({isOptional:!0,description:"Error message if failed"}),errorCode:_.string({isOptional:!0,description:"Error code if failed"}),totalTokens:_.int({default:0,description:"Total tokens used"}),promptTokens:_.int({default:0,description:"Prompt tokens used"}),completionTokens:_.int({default:0,description:"Completion tokens used"}),totalIterations:_.int({default:0,description:"Number of iterations"}),durationMs:_.int({isOptional:!0,description:"Execution duration in ms"}),estimatedCostUsd:_.float({isOptional:!0,description:"Estimated cost in USD"}),queuedAt:_.dateTime({description:"When run was queued"}),startedAt:_.dateTime({isOptional:!0,description:"When run started executing"}),completedAt:_.dateTime({isOptional:!0,description:"When run completed"}),metadata:_.json({isOptional:!0,description:"Additional metadata"}),agent:_.belongsTo("Agent",["agentId"],["id"]),steps:_.hasMany("RunStep",{description:"Execution steps"}),logs:_.hasMany("RunLog",{description:"Execution logs"})},indexes:[I0.on(["organizationId","agentId","queuedAt"]),I0.on(["organizationId","status"]),I0.on(["agentId","status"]),I0.on(["sessionId"])],enums:[o2]}),O5=l1({name:"RunStep",schema:"agent_console",description:"An individual step in an agent run.",fields:{id:_.id(),runId:_.foreignKey({description:"Parent run"}),stepNumber:_.int({description:"Step sequence number"}),type:_.enum("RunStepType"),toolId:_.string({isOptional:!0,description:"Tool used in this step"}),toolName:_.string({isOptional:!0,description:"Tool name"}),input:_.json({isOptional:!0,description:"Step input"}),output:_.json({isOptional:!0,description:"Step output"}),status:_.enum("RunStatus"),errorMessage:_.string({isOptional:!0}),tokensUsed:_.int({default:0}),durationMs:_.int({isOptional:!0}),startedAt:_.dateTime(),completedAt:_.dateTime({isOptional:!0}),run:_.belongsTo("Run",["runId"],["id"])},indexes:[I0.on(["runId","stepNumber"])],enums:[S2]}),M5=l1({name:"RunLog",schema:"agent_console",description:"A log entry for an agent run.",fields:{id:_.id(),runId:_.foreignKey({description:"Parent run"}),stepId:_.string({isOptional:!0,description:"Related step"}),level:_.enum("LogLevel"),message:_.string({description:"Log message"}),data:_.json({isOptional:!0,description:"Additional log data"}),source:_.string({isOptional:!0,description:"Log source component"}),traceId:_.string({isOptional:!0}),spanId:_.string({isOptional:!0}),timestamp:_.dateTime(),run:_.belongsTo("Run",["runId"],["id"])},indexes:[I0.on(["runId","timestamp"]),I0.on(["runId","level"])],enums:[r2]});import{defineEvent as W0}from"@contractspec/lib.contracts-spec";import{defineEnum as b5,defineSchemaModel as B0,ScalarTypeEnum as P}from"@contractspec/lib.schema";var k0=["@agent-console-team"],w5=B0({name:"RunStartedPayload",description:"Payload for run started event",fields:{runId:{type:P.String_unsecure(),isOptional:!1},organizationId:{type:P.String_unsecure(),isOptional:!1},agentId:{type:P.String_unsecure(),isOptional:!1},agentName:{type:P.String_unsecure(),isOptional:!1},userId:{type:P.String_unsecure(),isOptional:!0},sessionId:{type:P.String_unsecure(),isOptional:!0},input:{type:P.JSONObject(),isOptional:!1},startedAt:{type:P.DateTime(),isOptional:!1}}}),h5=W0({meta:{key:"agent.run.started",version:"1.0.0",description:"An agent run was started.",stability:"stable",owners:[...k0],tags:["run","started"]},payload:w5}),C5=B0({name:"RunCompletedPayload",description:"Payload for run completed event",fields:{runId:{type:P.String_unsecure(),isOptional:!1},organizationId:{type:P.String_unsecure(),isOptional:!1},agentId:{type:P.String_unsecure(),isOptional:!1},agentName:{type:P.String_unsecure(),isOptional:!1},userId:{type:P.String_unsecure(),isOptional:!0},output:{type:P.JSONObject(),isOptional:!1},totalTokens:{type:P.Int_unsecure(),isOptional:!1},promptTokens:{type:P.Int_unsecure(),isOptional:!1},completionTokens:{type:P.Int_unsecure(),isOptional:!1},totalIterations:{type:P.Int_unsecure(),isOptional:!1},durationMs:{type:P.Int_unsecure(),isOptional:!1},estimatedCostUsd:{type:P.Float_unsecure(),isOptional:!0},completedAt:{type:P.DateTime(),isOptional:!1}}}),f5=W0({meta:{key:"agent.run.completed",version:"1.0.0",description:"An agent run completed successfully.",stability:"stable",owners:[...k0],tags:["run","completed"]},payload:C5}),g5=B0({name:"RunFailedPayload",description:"Payload for run failed event",fields:{runId:{type:P.String_unsecure(),isOptional:!1},organizationId:{type:P.String_unsecure(),isOptional:!1},agentId:{type:P.String_unsecure(),isOptional:!1},agentName:{type:P.String_unsecure(),isOptional:!1},userId:{type:P.String_unsecure(),isOptional:!0},errorMessage:{type:P.String_unsecure(),isOptional:!1},errorCode:{type:P.String_unsecure(),isOptional:!0},totalTokens:{type:P.Int_unsecure(),isOptional:!1},totalIterations:{type:P.Int_unsecure(),isOptional:!1},durationMs:{type:P.Int_unsecure(),isOptional:!0},failedAt:{type:P.DateTime(),isOptional:!1}}}),j5=W0({meta:{key:"agent.run.failed",version:"1.0.0",description:"An agent run encountered an error.",stability:"stable",owners:[...k0],tags:["run","failed"]},payload:g5}),x5=B0({name:"RunCancelledPayload",description:"Payload for run cancelled event",fields:{runId:{type:P.String_unsecure(),isOptional:!1},organizationId:{type:P.String_unsecure(),isOptional:!1},agentId:{type:P.String_unsecure(),isOptional:!1},userId:{type:P.String_unsecure(),isOptional:!0},cancelledBy:{type:P.String_unsecure(),isOptional:!0},reason:{type:P.String_unsecure(),isOptional:!0},totalTokens:{type:P.Int_unsecure(),isOptional:!1},totalIterations:{type:P.Int_unsecure(),isOptional:!1},cancelledAt:{type:P.DateTime(),isOptional:!1}}}),T5=W0({meta:{key:"agent.run.cancelled",version:"1.0.0",description:"An agent run was cancelled by the user.",stability:"stable",owners:[...k0],tags:["run","cancelled"]},payload:x5}),y5=B0({name:"ToolInvokedPayload",description:"Payload for tool invoked event",fields:{runId:{type:P.String_unsecure(),isOptional:!1},stepId:{type:P.String_unsecure(),isOptional:!1},toolId:{type:P.String_unsecure(),isOptional:!1},toolName:{type:P.String_unsecure(),isOptional:!1},input:{type:P.JSONObject(),isOptional:!1},invokedAt:{type:P.DateTime(),isOptional:!1}}}),d5=W0({meta:{key:"agent.run.toolInvoked",version:"1.0.0",description:"A tool was invoked during an agent run.",stability:"stable",owners:[...k0],tags:["run","tool","invoked"]},payload:y5}),m5=B0({name:"ToolCompletedPayload",description:"Payload for tool completed event",fields:{runId:{type:P.String_unsecure(),isOptional:!1},stepId:{type:P.String_unsecure(),isOptional:!1},toolId:{type:P.String_unsecure(),isOptional:!1},toolName:{type:P.String_unsecure(),isOptional:!1},success:{type:P.Boolean(),isOptional:!1},output:{type:P.JSONObject(),isOptional:!0},errorMessage:{type:P.String_unsecure(),isOptional:!0},durationMs:{type:P.Int_unsecure(),isOptional:!1},completedAt:{type:P.DateTime(),isOptional:!1}}}),E5=W0({meta:{key:"agent.run.toolCompleted",version:"1.0.0",description:"A tool invocation completed during an agent run.",stability:"stable",owners:[...k0],tags:["run","tool","completed"]},payload:m5}),p5=b5("MessageType",["assistant","system"]),o5=B0({name:"MessageGeneratedPayload",description:"Payload for message generated event",fields:{runId:{type:P.String_unsecure(),isOptional:!1},stepId:{type:P.String_unsecure(),isOptional:!1},messageType:{type:p5,isOptional:!1},content:{type:P.String_unsecure(),isOptional:!1},tokensUsed:{type:P.Int_unsecure(),isOptional:!1},generatedAt:{type:P.DateTime(),isOptional:!1}}}),S5=W0({meta:{key:"agent.run.messageGenerated",version:"1.0.0",description:"An agent generated a message during a run.",stability:"stable",owners:[...k0],tags:["run","message","generated"]},payload:o5});import{definePresentation as c2,StabilityEnum as i2}from"@contractspec/lib.contracts-spec";var r5=c2({meta:{key:"agent-console.run.list",version:"1.0.0",title:"Run List",description:"List view of agent runs with status, tokens, and duration info",goal:"Provide an overview of agent execution history and performance.",context:"Run history dashboard.",domain:"agent-console",owners:["@agent-console-team"],tags:["run","list","dashboard"],stability:i2.Experimental},source:{type:"component",framework:"react",componentKey:"RunListView",props:G0},targets:["react","markdown","application/json"],policy:{flags:["agent-console.enabled"]}}),c5=c2({meta:{key:"agent-console.run.detail",version:"1.0.0",title:"Run Details",description:"Detailed view of an agent run with steps, logs, and metrics",goal:"Allow users to inspect and debug a specific agent run.",context:"Detailed view of an agent run.",domain:"agent-console",owners:["@agent-console-team"],tags:["run","detail"],stability:i2.Experimental},source:{type:"component",framework:"react",componentKey:"RunDetailView"},targets:["react","markdown"],policy:{flags:["agent-console.enabled"]}});var X0="demo-org",e0="agent-console-demo";function j0(Z){return Z.toLowerCase().trim().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")}function x0(Z){return{...Z}}function u2(Z){return{...Z}}function t1(Z){return{...Z}}function l2(){let Z=0,D=Date.parse("2026-03-20T09:00:00.000Z");return()=>new Date(D+Z++*60000)}function i5(Z){return Z.toLowerCase()}function u5(Z){return Z==="IN_PROGRESS"?"RUNNING":Z}function s2(Z,D){let $=d.map((X)=>({id:X.id,projectId:Z,organizationId:D,name:X.name,slug:X.slug,description:X.description,modelProvider:i5(X.modelProvider),modelName:X.modelName,systemPrompt:X.systemPrompt,temperature:typeof X.modelConfig?.temperature==="number"?X.modelConfig.temperature:0.4,maxTokens:8192,status:X.status,createdAt:X.createdAt,updatedAt:X.updatedAt})),q=m.map((X)=>({id:X.id,projectId:Z,organizationId:D,name:X.name,description:X.description,version:X.version,category:X.category,status:X.status,inputSchema:JSON.stringify(X.parametersSchema),outputSchema:X.outputSchema?JSON.stringify(X.outputSchema):void 0,endpoint:typeof X.implementationConfig?.url==="string"?X.implementationConfig.url:void 0,createdAt:X.createdAt,updatedAt:X.updatedAt})),J=new Map($.map((X)=>[X.id,X.name])),z=r.map((X)=>({id:X.id,projectId:Z,agentId:X.agentId,agentName:J.get(X.agentId)??X.agentName??"Unknown agent",status:u5(X.status),input:JSON.stringify(X.input),output:X.output?JSON.stringify(X.output):void 0,totalTokens:X.totalTokens,promptTokens:X.promptTokens,completionTokens:X.completionTokens,estimatedCostUsd:X.estimatedCostUsd??0,durationMs:X.durationMs,errorMessage:X.errorMessage,queuedAt:X.queuedAt,startedAt:X.startedAt,completedAt:X.completedAt}));return{agents:$,tools:q,runs:z}}function t2(Z){let D=Z.length,$=Z.filter((J)=>J.status==="COMPLETED").length,q=Z.map((J)=>J.durationMs).filter((J)=>typeof J==="number");return{totalRuns:D,successRate:D===0?0:$/D,averageDurationMs:q.length===0?0:Math.round(q.reduce((J,z)=>J+z,0)/q.length),totalTokens:Z.reduce((J,z)=>J+z.totalTokens,0),totalCostUsd:Z.reduce((J,z)=>J+z.estimatedCostUsd,0)}}function n1(Z){let D=Z.projectId,$=Z.organizationId??X0,q=Z.now??l2(),J=s2(D,$),z=J.agents.length+1,X=J.runs.length+1,A=(Y)=>{let F=Y==="agent"?z++:X++;return Z.idFactory?.(Y,F)??`${Y}-demo-${F}`};return{async listAgents(Y){let F=J.agents.filter((G)=>G.projectId===Y.projectId).filter((G)=>!Y.organizationId||G.organizationId===Y.organizationId).filter((G)=>!Y.status||Y.status==="all"||G.status===Y.status).filter((G)=>{if(!Y.search)return!0;let K=Y.search.toLowerCase();return G.name.toLowerCase().includes(K)||(G.description??"").toLowerCase().includes(K)}).sort((G,K)=>K.updatedAt.getTime()-G.updatedAt.getTime()),H=Y.limit??20,Q=Y.offset??0,U=F.slice(Q,Q+H).map(x0);return{items:U,total:F.length,hasMore:Q+U.length<F.length}},async getAgent(Y){let F=J.agents.find((H)=>H.id===Y);return F?x0(F):null},async createAgent(Y,F){let H=Y.name.trim(),Q=j0(H);if(J.agents.find((L)=>L.projectId===F.projectId&&L.organizationId===F.organizationId&&(L.slug===Q||L.name.toLowerCase()===H.toLowerCase())))throw Error("AGENT_NAME_OR_SLUG_EXISTS");let G=q(),K={id:A("agent"),projectId:F.projectId,organizationId:F.organizationId,name:H,slug:Q,description:Y.description,modelProvider:Y.modelProvider??"openai",modelName:Y.modelName??"gpt-5.4",systemPrompt:Y.systemPrompt,temperature:Y.temperature??0.4,maxTokens:Y.maxTokens??8192,status:"DRAFT",createdAt:G,updatedAt:G};return J.agents.unshift(K),x0(K)},async updateAgent(Y){let F=J.agents.find((Q)=>Q.id===Y.id);if(!F)throw Error("AGENT_NOT_FOUND");let H=Y.name;if(H&&j0(H)!==F.slug){if(J.agents.find((U)=>U.id!==F.id&&U.projectId===F.projectId&&U.organizationId===F.organizationId&&(U.slug===j0(H)||U.name.toLowerCase()===H.toLowerCase())))throw Error("AGENT_NAME_OR_SLUG_EXISTS");F.slug=j0(H),F.name=H}if(Y.description!==void 0)F.description=Y.description;if(Y.status)F.status=Y.status;return F.updatedAt=q(),x0(F)},async executeAgent(Y){let F=J.agents.find((v)=>v.id===Y.agentId);if(!F)throw Error("AGENT_NOT_FOUND");if(F.status!=="ACTIVE")throw Error("AGENT_NOT_ACTIVE");let H=q(),Q=q(),U=q(),G=2200+Y.message.length*12,K=600+Y.message.length*3,L=240+F.name.length*4,B={id:A("run"),projectId:Y.context?.projectId??F.projectId,agentId:F.id,agentName:F.name,status:"COMPLETED",input:Y.message,output:`Deterministic demo reply from ${F.name}: ${Y.message}`,totalTokens:K+L,promptTokens:K,completionTokens:L,estimatedCostUsd:Number(((K+L)/1e6).toFixed(4)),durationMs:G,queuedAt:H,startedAt:Q,completedAt:U};return J.runs.unshift(B),t1(B)},async listTools(Y){let F=J.tools.filter((G)=>G.projectId===Y.projectId).filter((G)=>!Y.organizationId||G.organizationId===Y.organizationId).filter((G)=>!Y.category||Y.category==="all"||G.category===Y.category).filter((G)=>!Y.status||Y.status==="all"||G.status===Y.status).filter((G)=>{if(!Y.search)return!0;let K=Y.search.toLowerCase();return G.name.toLowerCase().includes(K)||(G.description??"").toLowerCase().includes(K)}).sort((G,K)=>G.name.localeCompare(K.name)),H=Y.limit??50,Q=Y.offset??0,U=F.slice(Q,Q+H).map(u2);return{items:U,total:F.length,hasMore:Q+U.length<F.length}},async listRuns(Y){let F=J.runs.filter((G)=>G.projectId===Y.projectId).filter((G)=>!Y.agentId||G.agentId===Y.agentId).filter((G)=>!Y.status||Y.status==="all"||G.status===Y.status).sort((G,K)=>K.queuedAt.getTime()-G.queuedAt.getTime()),H=Y.limit??20,Q=Y.offset??0,U=F.slice(Q,Q+H).map(t1);return{items:U,total:F.length,hasMore:Q+U.length<F.length}},async getRunMetrics(Y){let F=J.runs.filter((H)=>{if(H.projectId!==Y.projectId)return!1;if(Y.agentId&&H.agentId!==Y.agentId)return!1;if(Y.startDate&&H.queuedAt<Y.startDate)return!1;if(Y.endDate&&H.queuedAt>Y.endDate)return!1;return!0});return t2(F)}}}async function n2(Z,D){let $=D.organizationId??X0,[q,J,z]=await Promise.all([Z.listAgents({projectId:D.projectId,organizationId:$,limit:10}),Z.listRuns({projectId:D.projectId,limit:10}),Z.listTools({projectId:D.projectId,organizationId:$,limit:10})]);return{agents:q.items,runs:J.items,tools:z.items,summary:{totalAgents:q.total,totalRuns:J.total,totalTools:z.total}}}async function l5(){let Z=n1({projectId:e0});return n2(Z,{projectId:e0})}import{defineEntity as s5,defineEntityEnum as a1,field as T,index as e1}from"@contractspec/lib.schema";var e2=a1({name:"ToolCategory",values:["RETRIEVAL","COMPUTATION","COMMUNICATION","INTEGRATION","UTILITY","CUSTOM"],description:"Category of tool"}),a2=a1({name:"ToolStatus",values:["DRAFT","ACTIVE","DEPRECATED","DISABLED"],description:"Status of tool"}),Z4=a1({name:"ImplementationType",values:["http","function","workflow"],description:"How the tool is implemented"}),t5=s5({name:"Tool",schema:"agent_console",description:"An AI tool that can be used by agents.",fields:{id:T.id(),organizationId:T.string({description:"Organization that owns this tool"}),name:T.string({description:"Tool name"}),slug:T.string({description:"URL-safe identifier"}),description:T.string({description:"Tool description"}),category:T.enum("ToolCategory",{default:"CUSTOM"}),status:T.enum("ToolStatus",{default:"DRAFT"}),parametersSchema:T.json({description:"JSON Schema for tool parameters"}),outputSchema:T.json({isOptional:!0,description:"JSON Schema for tool output"}),implementationType:T.enum("ImplementationType"),implementationConfig:T.json({description:"Implementation configuration"}),maxInvocationsPerMinute:T.int({isOptional:!0,description:"Rate limit"}),timeoutMs:T.int({default:30000,description:"Execution timeout"}),version:T.string({default:"1.0.0",description:"Tool version"}),tags:T.string({isArray:!0,isOptional:!0,description:"Tags for categorization"}),createdAt:T.createdAt(),updatedAt:T.updatedAt(),createdById:T.string({isOptional:!0,description:"User who created this tool"}),agents:T.hasMany("Agent",{description:"Agents using this tool"})},indexes:[e1.unique(["organizationId","slug"]),e1.on(["organizationId","category"]),e1.on(["organizationId","status"])],enums:[e2,a2,Z4]});import{defineEvent as Z2}from"@contractspec/lib.contracts-spec";import{defineSchemaModel as D2,ScalarTypeEnum as g}from"@contractspec/lib.schema";var q2=["@agent-console-team"],n5=D2({name:"ToolCreatedPayload",description:"Payload for tool created event",fields:{id:{type:g.String_unsecure(),isOptional:!1},organizationId:{type:g.String_unsecure(),isOptional:!1},name:{type:g.String_unsecure(),isOptional:!1},slug:{type:g.String_unsecure(),isOptional:!1},category:{type:g.String_unsecure(),isOptional:!1},implementationType:{type:g.String_unsecure(),isOptional:!1},createdById:{type:g.String_unsecure(),isOptional:!0},createdAt:{type:g.DateTime(),isOptional:!1}}}),e5=Z2({meta:{key:"agent.tool.created",version:"1.0.0",description:"A new AI tool was created.",stability:"stable",owners:[...q2],tags:["tool","created"]},payload:n5}),a5=D2({name:"ToolUpdatedPayload",description:"Payload for tool updated event",fields:{id:{type:g.String_unsecure(),isOptional:!1},organizationId:{type:g.String_unsecure(),isOptional:!1},name:{type:g.String_unsecure(),isOptional:!1},status:{type:g.String_unsecure(),isOptional:!1},updatedFields:{type:g.String_unsecure(),isArray:!0,isOptional:!1},updatedAt:{type:g.DateTime(),isOptional:!1}}}),ZZ=Z2({meta:{key:"agent.tool.updated",version:"1.0.0",description:"An AI tool configuration was updated.",stability:"stable",owners:[...q2],tags:["tool","updated"]},payload:a5}),DZ=D2({name:"ToolStatusChangedPayload",description:"Payload for tool status changed event",fields:{id:{type:g.String_unsecure(),isOptional:!1},organizationId:{type:g.String_unsecure(),isOptional:!1},name:{type:g.String_unsecure(),isOptional:!1},previousStatus:{type:g.String_unsecure(),isOptional:!1},newStatus:{type:g.String_unsecure(),isOptional:!1},changedAt:{type:g.DateTime(),isOptional:!1}}}),qZ=Z2({meta:{key:"agent.tool.statusChanged",version:"1.0.0",description:"An AI tool status was changed (activated, deprecated, disabled).",stability:"stable",owners:[...q2],tags:["tool","status"]},payload:DZ});import{definePresentation as D4,StabilityEnum as q4}from"@contractspec/lib.contracts-spec";var HZ=D4({meta:{key:"agent-console.tool.list",version:"1.0.0",title:"Tool List",description:"List view of AI tools with category, status, and version info",goal:"Provide an overview of all available tools for agents.",context:"Tool management dashboard.",domain:"agent-console",owners:["@agent-console-team"],tags:["tool","list","dashboard"],stability:q4.Experimental},source:{type:"component",framework:"react",componentKey:"ToolListView",props:A0},targets:["react","markdown","application/json"],policy:{flags:["agent-console.enabled"]}}),$Z=D4({meta:{key:"agent-console.tool.detail",version:"1.0.0",title:"Tool Details",description:"Detailed view of an AI tool with configuration and test panel",goal:"Allow users to inspect and test a specific tool.",context:"Detailed view of a tool.",domain:"agent-console",owners:["@agent-console-team"],tags:["tool","detail"],stability:q4.Experimental},source:{type:"component",framework:"react",componentKey:"ToolDetailView"},targets:["react","markdown"],policy:{flags:["agent-console.enabled"]}});var H4=[{id:"runs",label:"Runs",icon:"\u25B6"},{id:"agents",label:"Agents",icon:"\uD83E\uDD16"},{id:"tools",label:"Tools",icon:"\uD83D\uDD27"},{id:"metrics",label:"Metrics",icon:"\uD83D\uDCCA"}];function $4(Z){let D=Z.filter((z)=>z.status==="COMPLETED").length,$=Z.reduce((z,X)=>z+X.totalTokens,0),q=Z.reduce((z,X)=>z+(X.estimatedCostUsd??0),0),J=Z.map((z)=>z.durationMs).filter((z)=>typeof z==="number");return{averageDurationMs:J.length>0?J.reduce((z,X)=>z+X,0)/J.length:0,completedRuns:D,successRate:Z.length>0?D/Z.length:0,totalCostUsd:q,totalRuns:Z.length,totalTokens:$}}function a0(Z){if(Z<1000)return Z.toString();if(Z<1e6)return`${(Z/1000).toFixed(1)}K`;return`${(Z/1e6).toFixed(2)}M`}function Y4(Z){if(!Z)return"-";if(Z<1000)return`${Z}ms`;if(Z<60000)return`${(Z/1000).toFixed(1)}s`;return`${(Z/60000).toFixed(1)}m`}function J4(Z){return new Intl.DateTimeFormat("en-US",{dateStyle:"medium",timeStyle:"short"}).format(Z)}function H2(Z){if(typeof document>"u")return{onPress:Z};return{onClick:Z}}import{Badge as YZ}from"@contractspec/lib.ui-kit-web/ui/badge";import{Card as Z1,CardContent as D1,CardHeader as JZ,CardTitle as XZ}from"@contractspec/lib.ui-kit-web/ui/card";import{HStack as $2,VStack as T0}from"@contractspec/lib.ui-kit-web/ui/stack";import{Text as c}from"@contractspec/lib.ui-kit-web/ui/text";import{jsx as j,jsxs as S}from"react/jsx-runtime";function X4({metrics:Z}){let D=[{label:"Total Runs",value:String(Z.totalRuns),hint:`${Math.round(Z.successRate*100)}% success`},{label:"Success Rate",value:`${Math.round(Z.successRate*100)}%`,hint:"of all runs"},{label:"Total Tokens",value:a0(Z.totalTokens),hint:"This period"},{label:"Total Cost",value:`$${Z.totalCostUsd.toFixed(2)}`,hint:"This period"}];return j($2,{gap:"md",className:"flex-wrap",children:D.map(($)=>j(Z1,{className:"min-w-52 flex-1",children:S(D1,{className:"flex flex-col gap-1 pt-6",children:[j(c,{className:"text-muted-foreground text-sm",children:$.label}),j(c,{className:"font-bold text-2xl",children:$.value}),j(c,{className:"text-muted-foreground text-sm",children:$.hint})]})},$.label))})}function F4({agents:Z}){return j(T0,{gap:"md",children:Z.map((D)=>j(Z1,{children:S(D1,{className:"flex flex-col gap-2 pt-6",children:[S($2,{justify:"between",align:"start",children:[S(T0,{gap:"xs",className:"flex-1",children:[j(c,{className:"font-semibold text-lg",children:D.name}),S(c,{className:"text-muted-foreground text-sm",children:[D.modelProvider," / ",D.modelName]})]}),j(q1,{status:D.status})]}),j(c,{className:"text-muted-foreground text-sm",children:D.description})]})},D.id))})}function Q4({tools:Z}){return j(T0,{gap:"md",children:Z.map((D)=>j(Z1,{children:S(D1,{className:"flex flex-col gap-2 pt-6",children:[S($2,{justify:"between",align:"start",children:[S(T0,{gap:"xs",className:"flex-1",children:[j(c,{className:"font-semibold text-lg",children:D.name}),S(c,{className:"text-muted-foreground text-sm",children:[D.category," / ",D.implementationType]})]}),j(q1,{status:D.status})]}),j(c,{className:"text-muted-foreground text-sm",children:D.description})]})},D.id))})}function U4({metrics:Z}){return S(T0,{gap:"md",children:[j(c,{className:"font-semibold text-lg",children:"Usage Analytics"}),S(Z1,{children:[j(JZ,{children:j(XZ,{children:"Run Outcomes"})}),S(D1,{className:"flex flex-col gap-3",children:[S(c,{children:["Completed: ",Z.completedRuns]}),S(c,{children:["Failed: ",Z.totalRuns-Z.completedRuns]}),S(c,{children:["Average duration: ",(Z.averageDurationMs/1000).toFixed(1),"s"]})]})]})]})}function q1({status:Z}){return j(YZ,{variant:Z==="FAILED"||Z==="CANCELLED"?"destructive":Z==="ACTIVE"||Z==="COMPLETED"?"secondary":"outline",children:j(c,{className:"font-semibold text-xs",children:Z})})}import{useContractTable as FZ}from"@contractspec/lib.presentation-runtime-react";import{Card as QZ,CardContent as UZ}from"@contractspec/lib.ui-kit-web/ui/card";import{DataTable as zZ}from"@contractspec/lib.ui-kit-web/ui/data-table";import{VStack as GZ}from"@contractspec/lib.ui-kit-web/ui/stack";import{Text as H1}from"@contractspec/lib.ui-kit-web/ui/text";import{useMemo as KZ}from"react";import{jsx as F0,jsxs as AZ}from"react/jsx-runtime";function z4({runs:Z}){let D=KZ(()=>[{id:"queuedAt",header:"Run",label:"Run",accessor:(q)=>q.queuedAt.getTime(),cell:({item:q})=>AZ(GZ,{gap:"xs",children:[F0(H1,{className:"font-mono text-sm",children:q.id}),F0(H1,{className:"text-muted-foreground text-xs",children:J4(q.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:q})=>F0(q1,{status:String(q)}),size:140,canSort:!0},{id:"totalTokens",header:"Tokens",label:"Tokens",accessorKey:"totalTokens",cell:({value:q})=>a0(Number(q??0)),align:"right",size:120,canSort:!0},{id:"durationMs",header:"Duration",label:"Duration",accessorKey:"durationMs",cell:({value:q})=>Y4(typeof q==="number"?q:void 0),align:"right",size:130,canHide:!0}],[]),$=FZ({data:Z,columns:D,initialState:{pagination:{pageIndex:0,pageSize:5}},getRowId:(q)=>q.id});return F0(zZ,{controller:$,toolbar:F0(H1,{className:"text-muted-foreground text-sm",children:"Run History"}),emptyState:F0(QZ,{children:F0(UZ,{className:"pt-6",children:F0(H1,{className:"text-muted-foreground",children:"No runs yet"})})})})}import{createVisualizationModel as VZ}from"@contractspec/lib.presentation-runtime-core";import{Button as G4}from"@contractspec/lib.ui-kit-web/ui/button";import{Card as PZ,CardContent as IZ,CardDescription as WZ,CardHeader as BZ,CardTitle as kZ}from"@contractspec/lib.ui-kit-web/ui/card";import{HStack as K4,VStack as $1}from"@contractspec/lib.ui-kit-web/ui/stack";import{Text as y0}from"@contractspec/lib.ui-kit-web/ui/text";import{Visualization as vZ}from"@contractspec/lib.ui-kit-web/ui/visualization";import{useMemo as A4,useState as _Z}from"react";import{jsx as E,jsxs as v0}from"react/jsx-runtime";function V4({agents:Z=d,runs:D=r,showHeaderAction:$=!0,tools:q=m}){let[J,z]=_Z("runs"),X=A4(()=>$4(D),[D]),A=A4(()=>N0(D),[D]);return v0($1,{gap:"xl",align:"stretch",children:[v0(K4,{justify:"between",align:"center",className:"gap-3",children:[E(y0,{className:"font-bold text-2xl",children:"AI Agent Console"}),$?E(G4,{...H2(()=>{return}),children:E(y0,{children:"+ New Agent"})}):null]}),E(X4,{metrics:X}),v0($1,{gap:"md",children:[v0($1,{gap:"xs",children:[E(y0,{className:"font-semibold text-lg",children:"Operational Visualizations"}),E(y0,{className:"text-muted-foreground text-sm",children:"Contract-backed charts derived from recent run activity."})]}),E($1,{gap:"md",children:A.map((Y)=>v0(PZ,{children:[v0(BZ,{children:[E(kZ,{children:Y.title}),E(WZ,{children:Y.description})]}),E(IZ,{children:E(vZ,{height:Y.height,model:VZ(Y.spec,Y.data)})})]},Y.key))})]}),E(K4,{className:"rounded-lg bg-muted p-1",gap:"xs",children:H4.map((Y)=>E(G4,{size:"sm",variant:J===Y.id?"secondary":"ghost",className:"flex-1",...H2(()=>z(Y.id)),children:v0(y0,{children:[Y.icon," ",Y.label]})},Y.id))}),J==="runs"?E(z4,{runs:D}):null,J==="agents"?E(F4,{agents:Z}):null,J==="tools"?E(Q4,{tools:q}):null,J==="metrics"?E(U4,{metrics:X}):null]})}import{VisualizationCard as NZ,VisualizationGrid as LZ}from"@contractspec/lib.design-system";import{jsx as Y1,jsxs as P4}from"react/jsx-runtime";function I4({runs:Z}){let D=N0(Z);return P4("section",{className:"space-y-3",children:[P4("div",{children:[Y1("h3",{className:"font-semibold text-lg",children:"Operational Visualizations"}),Y1("p",{className:"text-muted-foreground text-sm",children:"Contract-backed charts derived from recent run activity."})]}),Y1(LZ,{children:D.map(($)=>Y1(NZ,{data:$.data,description:$.description,height:$.height,spec:$.spec,title:$.title},$.key))})]})}import{useTemplateRuntime as RZ}from"@contractspec/lib.example-shared-ui";import{useCallback as OZ,useEffect as MZ,useMemo as bZ,useState as J1}from"react";function M0(Z={}){let{handlers:D,projectId:$}=RZ(),{agent:q}=D,[J,z]=J1(null),[X,A]=J1(!0),[Y,F]=J1(null),[H,Q]=J1(1),U=OZ(async()=>{A(!0),F(null);try{let K=await q.listAgents({projectId:$,search:Z.search,status:Z.status==="all"?void 0:Z.status,limit:Z.limit??20,offset:(H-1)*(Z.limit??20)});z(K)}catch(K){F(K instanceof Error?K:Error("Unknown error"))}finally{A(!1)}},[q,$,Z.search,Z.status,Z.limit,H]);MZ(()=>{U()},[U]);let G=bZ(()=>{if(!J)return null;return{total:J.total,active:J.items.filter((K)=>K.status==="ACTIVE").length,paused:J.items.filter((K)=>K.status==="PAUSED").length,draft:J.items.filter((K)=>K.status==="DRAFT").length}},[J]);return{data:J,loading:X,error:Y,stats:G,page:H,refetch:U,nextPage:()=>Q((K)=>K+1),prevPage:()=>H>1&&Q((K)=>K-1)}}import{useTemplateRuntime as wZ}from"@contractspec/lib.example-shared-ui";import{useCallback as b0,useState as Y2}from"react";function J2(Z,D){return Z instanceof Error?Z:Error(D)}function X2(Z={}){let{handlers:D,projectId:$}=wZ(),{agent:q}=D,[J,z]=Y2({loading:!1,error:null,data:null}),[X,A]=Y2({loading:!1,error:null,data:null}),[Y,F]=Y2({loading:!1,error:null,data:null}),H=b0(async(B)=>{z({loading:!0,error:null,data:null});try{let v=await q.createAgent(B,{projectId:$,organizationId:X0});return z({loading:!1,error:null,data:v}),Z.onSuccess?.(),v}catch(v){let I=J2(v,"Failed to create agent");throw z({loading:!1,error:I,data:null}),Z.onError?.(I),I}},[q,$,Z]),Q=b0(async(B)=>{A({loading:!0,error:null,data:null});try{let v=await q.updateAgent(B);return A({loading:!1,error:null,data:v}),Z.onSuccess?.(),v}catch(v){let I=J2(v,"Failed to update agent");throw A({loading:!1,error:I,data:null}),Z.onError?.(I),I}},[q,Z]),U=b0(async(B)=>{return Q({id:B,status:"ACTIVE"})},[Q]),G=b0(async(B)=>{return Q({id:B,status:"PAUSED"})},[Q]),K=b0(async(B)=>{return Q({id:B,status:"ARCHIVED"})},[Q]),L=b0(async(B)=>{F({loading:!0,error:null,data:null});try{let v=await q.executeAgent({agentId:B.agentId,message:B.message,context:{projectId:$,organizationId:X0}});return F({loading:!1,error:null,data:v}),Z.onSuccess?.(),v}catch(v){let I=J2(v,"Failed to execute agent");throw F({loading:!1,error:I,data:null}),Z.onError?.(I),I}},[q,$,Z]);return{createAgent:H,updateAgent:Q,activateAgent:U,pauseAgent:G,archiveAgent:K,executeAgent:L,createState:J,updateState:X,executeState:Y,isLoading:J.loading||X.loading||Y.loading}}import{useTemplateRuntime as hZ}from"@contractspec/lib.example-shared-ui";import{useCallback as CZ,useEffect as fZ,useState as d0}from"react";function m0(Z={}){let{handlers:D,projectId:$}=hZ(),{agent:q}=D,[J,z]=d0(null),[X,A]=d0(null),[Y,F]=d0(!0),[H,Q]=d0(null),[U,G]=d0(0),K=Z.pageSize??Z.limit??20,L=Z.pageIndex??U,[B]=Z.sorting??[],v=CZ(async()=>{F(!0),Q(null);try{let[k,b]=await Promise.all([q.listRuns({projectId:$,agentId:Z.agentId,status:Z.status==="all"?void 0:Z.status,sortBy:B?.id,sortDirection:B?B.desc?"desc":"asc":void 0,limit:K,offset:L*K}),q.getRunMetrics({projectId:$,agentId:Z.agentId})]);z(k),A(b)}catch(k){Q(k instanceof Error?k:Error("Unknown error"))}finally{F(!1)}},[q,L,K,$,Z.agentId,Z.status,B?.desc,B?.id]);fZ(()=>{v()},[v]);let I=Z.pageIndex!==void 0;return{data:J,metrics:X,loading:Y,error:H,page:L+1,pageIndex:L,pageSize:K,refetch:v,nextPage:I?void 0:()=>G((k)=>k+1),prevPage:I?void 0:()=>G((k)=>Math.max(0,k-1))}}import{Button as a}from"@contractspec/lib.design-system";import{useState as X1}from"react";import{jsx as f,jsxs as p}from"react/jsx-runtime";function gZ(Z){switch(Z){case"ACTIVE":return"text-green-600 bg-green-100 dark:text-green-400 dark:bg-green-900/30";case"DRAFT":return"text-blue-600 bg-blue-100 dark:text-blue-400 dark:bg-blue-900/30";case"PAUSED":return"text-yellow-600 bg-yellow-100 dark:text-yellow-400 dark:bg-yellow-900/30";case"ARCHIVED":return"text-gray-600 bg-gray-100 dark:text-gray-400 dark:bg-gray-700";default:return"text-gray-600 bg-gray-100"}}function F2({isOpen:Z,agent:D,onClose:$,onActivate:q,onPause:J,onArchive:z,onExecute:X,isLoading:A=!1}){let[Y,F]=X1("menu"),[H,Q]=X1(""),[U,G]=X1(null),[K,L]=X1(null),B=()=>{F("menu"),Q(""),G(null),L(null)},v=()=>{B(),$()},I=async()=>{if(!D)return;if(L(null),!H.trim()){L("Please enter a message");return}try{await X(D.id,H.trim()),v()}catch(b){L(b instanceof Error?b.message:"Failed to execute agent")}},k=async(b)=>{if(!D)return;L(null);try{switch(b){case"activate":await q(D.id);break;case"pause":await J(D.id);break;case"archive":await z(D.id);break}v()}catch(u){L(u instanceof Error?u.message:`Failed to ${b} agent`)}};if(!Z||!D)return null;return p("div",{className:"fixed inset-0 z-50 flex items-center justify-center",children:[f("div",{className:"absolute inset-0 bg-background/80 backdrop-blur-sm",onClick:v,role:"button",tabIndex:0,onKeyDown:(b)=>{if(b.key==="Enter"||b.key===" ")v()},"aria-label":"Close modal"}),p("div",{className:"relative z-10 w-full max-w-md rounded-xl border border-border bg-card p-6 shadow-xl",children:[p("div",{className:"mb-4 border-border border-b pb-4",children:[f("h2",{className:"font-semibold text-xl",children:D.name}),p("div",{className:"mt-1 flex items-center gap-2",children:[p("span",{className:"text-muted-foreground text-sm",children:[D.modelProvider," / ",D.modelName]}),f("span",{className:`rounded-full px-2 py-0.5 font-medium text-xs ${gZ(D.status)}`,children:D.status})]}),D.description&&f("p",{className:"mt-2 text-muted-foreground text-sm",children:D.description})]}),Y==="menu"&&p("div",{className:"space-y-3",children:[D.status==="ACTIVE"&&p(a,{className:"w-full justify-start",variant:"ghost",onPress:()=>F("execute"),children:[f("span",{className:"mr-2",children:"\u25B6\uFE0F"})," Execute Agent"]}),(D.status==="DRAFT"||D.status==="PAUSED")&&p(a,{className:"w-full justify-start",variant:"ghost",onPress:()=>k("activate"),disabled:A,children:[f("span",{className:"mr-2",children:"\uD83D\uDFE2"})," Activate Agent"]}),D.status==="ACTIVE"&&p(a,{className:"w-full justify-start",variant:"ghost",onPress:()=>k("pause"),disabled:A,children:[f("span",{className:"mr-2",children:"\u23F8\uFE0F"})," Pause Agent"]}),D.status!=="ARCHIVED"&&p(a,{className:"w-full justify-start text-yellow-600 hover:text-yellow-700",variant:"ghost",onPress:()=>{G("archive"),F("confirm")},children:[f("span",{className:"mr-2",children:"\uD83D\uDCE6"})," Archive Agent"]}),D.status==="ARCHIVED"&&p(a,{className:"w-full justify-start",variant:"ghost",onPress:()=>k("activate"),disabled:A,children:[f("span",{className:"mr-2",children:"\uD83D\uDD04"})," Restore Agent"]}),K&&f("div",{className:"rounded-md bg-destructive/10 p-3 text-destructive text-sm",children:K}),f("div",{className:"border-border border-t pt-3",children:f(a,{className:"w-full",variant:"outline",onPress:v,children:"Close"})})]}),Y==="execute"&&p("div",{className:"space-y-4",children:[p("div",{children:[f("label",{htmlFor:"execute-message",className:"mb-1 block font-medium text-muted-foreground text-sm",children:"Message *"}),f("textarea",{id:"execute-message",value:H,onChange:(b)=>Q(b.target.value),placeholder:"Enter your message to the agent...",rows:4,disabled:A,className:"w-full rounded-md border border-input bg-background px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-ring disabled:opacity-50"})]}),K&&f("div",{className:"rounded-md bg-destructive/10 p-3 text-destructive text-sm",children:K}),p("div",{className:"flex justify-end gap-3 pt-2",children:[f(a,{variant:"ghost",onPress:()=>F("menu"),disabled:A,children:"Back"}),f(a,{onPress:I,disabled:A,children:A?"Executing...":"\u25B6\uFE0F Execute"})]})]}),Y==="confirm"&&U==="archive"&&p("div",{className:"space-y-4",children:[p("p",{className:"text-muted-foreground",children:["Are you sure you want to archive"," ",f("span",{className:"font-medium text-foreground",children:D.name}),"?"]}),f("p",{className:"text-muted-foreground text-sm",children:"Archived agents cannot be executed but can be restored later."}),K&&f("div",{className:"rounded-md bg-destructive/10 p-3 text-destructive text-sm",children:K}),p("div",{className:"flex justify-end gap-3 pt-2",children:[f(a,{variant:"ghost",onPress:()=>F("menu"),disabled:A,children:"Cancel"}),f(a,{onPress:()=>k("archive"),disabled:A,children:A?"Archiving...":"\uD83D\uDCE6 Archive"})]})]})]})]})}import{Button as W4,Input as jZ}from"@contractspec/lib.design-system";import{useState as w0}from"react";import{jsx as y,jsxs as Z0}from"react/jsx-runtime";var Q2=[{value:"openai",label:"OpenAI",models:["gpt-5.4","gpt-5-mini","gpt-4o","gpt-4-turbo","gpt-3.5-turbo"]},{value:"anthropic",label:"Anthropic",models:["claude-sonnet-4-6","claude-opus-4-6","claude-haiku-4-5"]},{value:"google",label:"Google",models:["gemini-2.5-flash","gemini-2.5-pro","gemini-pro","gemini-ultra"]},{value:"mistral",label:"Mistral",models:["mistral-large-2512","mistral-large-latest","mistral-medium-latest","mistral-small-latest"]}];function U2({isOpen:Z,onClose:D,onSubmit:$,isLoading:q=!1}){let[J,z]=w0(""),[X,A]=w0(""),[Y,F]=w0("openai"),[H,Q]=w0("gpt-5.4"),[U,G]=w0(""),[K,L]=w0(null),B=Q2.find((k)=>k.value===Y),v=async(k)=>{if(k.preventDefault(),L(null),!J.trim()){L("Agent name is required");return}try{await $({name:J.trim(),description:X.trim()||void 0,modelProvider:Y,modelName:H,systemPrompt:U.trim()||void 0}),z(""),A(""),F("openai"),Q("gpt-5.4"),G(""),D()}catch(b){L(b instanceof Error?b.message:"Failed to create agent")}},I=(k)=>{F(k);let b=Q2.find((u)=>u.value===k);if(b)Q(b.models[0])};if(!Z)return null;return Z0("div",{className:"fixed inset-0 z-50 flex items-center justify-center",children:[y("div",{className:"absolute inset-0 bg-background/80 backdrop-blur-sm",onClick:D,role:"button",tabIndex:0,onKeyDown:(k)=>{if(k.key==="Enter"||k.key===" ")D()},"aria-label":"Close modal"}),Z0("div",{className:"relative z-10 max-h-[90vh] w-full max-w-lg overflow-y-auto rounded-xl border border-border bg-card p-6 shadow-xl",children:[y("h2",{className:"mb-4 font-semibold text-xl",children:"Create New Agent"}),Z0("form",{onSubmit:v,className:"space-y-4",children:[Z0("div",{children:[y("label",{htmlFor:"agent-name",className:"mb-1 block font-medium text-muted-foreground text-sm",children:"Agent Name *"}),y(jZ,{id:"agent-name",value:J,onChange:(k)=>z(k.target.value),placeholder:"e.g., Customer Support Bot",disabled:q})]}),Z0("div",{children:[y("label",{htmlFor:"agent-description",className:"mb-1 block font-medium text-muted-foreground text-sm",children:"Description"}),y("textarea",{id:"agent-description",value:X,onChange:(k)=>A(k.target.value),placeholder:"Describe what this agent does...",rows:2,disabled:q,className:"w-full rounded-md border border-input bg-background px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-ring disabled:opacity-50"})]}),Z0("div",{className:"flex gap-3",children:[Z0("div",{className:"flex-1",children:[y("label",{htmlFor:"model-provider",className:"mb-1 block font-medium text-muted-foreground text-sm",children:"Provider *"}),y("select",{id:"model-provider",value:Y,onChange:(k)=>I(k.target.value),disabled:q,className:"h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-ring disabled:opacity-50",children:Q2.map((k)=>y("option",{value:k.value,children:k.label},k.value))})]}),Z0("div",{className:"flex-1",children:[y("label",{htmlFor:"model-name",className:"mb-1 block font-medium text-muted-foreground text-sm",children:"Model *"}),y("select",{id:"model-name",value:H,onChange:(k)=>Q(k.target.value),disabled:q,className:"h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-ring disabled:opacity-50",children:B?.models.map((k)=>y("option",{value:k,children:k},k))})]})]}),Z0("div",{children:[y("label",{htmlFor:"system-prompt",className:"mb-1 block font-medium text-muted-foreground text-sm",children:"System Prompt"}),y("textarea",{id:"system-prompt",value:U,onChange:(k)=>G(k.target.value),placeholder:"You are a helpful assistant that...",rows:4,disabled:q,className:"w-full rounded-md border border-input bg-background px-3 py-2 font-mono text-sm focus:outline-none focus:ring-2 focus:ring-ring disabled:opacity-50"}),y("p",{className:"mt-1 text-muted-foreground text-xs",children:"Instructions that define the agent's behavior"})]}),K&&y("div",{className:"rounded-md bg-destructive/10 p-3 text-destructive text-sm",children:K}),Z0("div",{className:"flex justify-end gap-3 pt-2",children:[y(W4,{type:"button",variant:"ghost",onPress:D,disabled:q,children:"Cancel"}),y(W4,{type:"submit",disabled:q,children:q?"Creating...":"Create Agent"})]})]})]})]})}import{Button as F1,StatusChip as xZ}from"@contractspec/lib.design-system";import{HStack as G2,VStack as z2}from"@contractspec/lib.ui-kit-web/ui/stack";import{Text as _0}from"@contractspec/lib.ui-kit-web/ui/text";import{jsx as Y0,jsxs as n}from"react/jsx-runtime";function K2(Z){switch(Z){case"COMPLETED":return"success";case"RUNNING":return"warning";case"QUEUED":return"neutral";case"FAILED":case"CANCELLED":return"danger";default:return"neutral"}}function A2(Z){if(!Z)return"-";if(Z<1000)return`${Z}ms`;if(Z<60000)return`${(Z/1000).toFixed(1)}s`;return`${(Z/60000).toFixed(1)}m`}function h0(Z){if(Z<1000)return Z.toString();if(Z<1e6)return`${(Z/1000).toFixed(1)}K`;return`${(Z/1e6).toFixed(2)}M`}function k4(Z){if(!Z)return"-";return`$${Z.toFixed(4)}`}function B4(Z){return JSON.stringify(Z??null,null,2)}function v4({run:Z}){return n(z2,{gap:"sm",className:"py-2",children:[n(G2,{justify:"between",className:"flex-wrap",children:[Y0(xZ,{tone:K2(Z.status),label:Z.status}),n(_0,{className:"text-muted-foreground text-sm",children:["Queued ",Z.queuedAt.toLocaleString()]})]}),n(G2,{gap:"lg",className:"flex-wrap",children:[n(_0,{className:"text-muted-foreground text-sm",children:["Prompt ",h0(Z.promptTokens)]}),n(_0,{className:"text-muted-foreground text-sm",children:["Completion ",h0(Z.completionTokens)]}),n(_0,{className:"text-muted-foreground text-sm",children:["Duration ",A2(Z.durationMs)]})]}),n(z2,{gap:"xs",children:[Y0(_0,{className:"font-medium text-sm",children:"Input"}),Y0("pre",{className:"overflow-auto rounded-md bg-muted/40 p-3 text-xs",children:B4(Z.input)})]}),n(z2,{gap:"xs",children:[Y0(_0,{className:"font-medium text-sm",children:"Output"}),Y0("pre",{className:"overflow-auto rounded-md bg-muted/40 p-3 text-xs",children:B4(Z.output??Z.errorMessage??"Pending")})]})]})}function _4({controller:Z,totalRuns:D}){let $=Z.rows[0],q=Z.columns.find((X)=>X.id==="queuedAt"),J=Z.columns.find((X)=>X.id==="durationMs"),z=Z.columns.find((X)=>X.id==="estimatedCostUsd");return n(G2,{gap:"sm",className:"flex-wrap",children:[n(_0,{className:"text-muted-foreground text-sm",children:[D," runs"]}),Y0(F1,{variant:"outline",size:"sm",onPress:()=>$?.toggleExpanded?.(!$?.isExpanded),children:"Expand Latest Run"}),Y0(F1,{variant:"outline",size:"sm",onPress:()=>q?.toggleVisibility?.(!q?.visible),children:q?.visible?"Hide Time":"Show Time"}),Y0(F1,{variant:"outline",size:"sm",onPress:()=>J?.toggleVisibility?.(!J?.visible),children:J?.visible?"Hide Duration":"Show Duration"}),Y0(F1,{variant:"outline",size:"sm",onPress:()=>z?.toggleVisibility?.(!z?.visible),children:z?.visible?"Hide Cost":"Show Cost"})]})}import{StatusChip as TZ}from"@contractspec/lib.design-system";import{VStack as yZ}from"@contractspec/lib.ui-kit-web/ui/stack";import{Text as V2}from"@contractspec/lib.ui-kit-web/ui/text";import{jsx as Q1,jsxs as dZ}from"react/jsx-runtime";function N4(){return[{id:"queuedAt",header:"Run",label:"Run",accessor:(Z)=>Z.queuedAt.getTime(),cell:({item:Z})=>dZ(yZ,{gap:"xs",children:[Q1(V2,{className:"font-mono text-sm",children:Z.id.slice(-8)}),Q1(V2,{className:"text-muted-foreground text-xs",children:Z.queuedAt.toLocaleString()})]}),size:220,minSize:180,canSort:!0,canHide:!0,canResize:!0},{id:"agentName",header:"Agent",label:"Agent",accessor:(Z)=>Z.agentName??"Unknown Agent",cell:({value:Z})=>Q1(V2,{className:"font-medium",children:typeof Z==="string"?Z:"Unknown Agent"}),size:220,canSort:!0,canResize:!0},{id:"status",header:"Status",label:"Status",accessorKey:"status",cell:({value:Z})=>{let D=typeof Z==="string"?Z:"QUEUED";return Q1(TZ,{tone:K2(D),label:D})},size:150,canSort:!0,canResize:!0},{id:"totalTokens",header:"Tokens",label:"Tokens",accessorKey:"totalTokens",cell:({value:Z})=>h0(Number(Z??0)),align:"right",size:140,canSort:!0,canResize:!0},{id:"durationMs",header:"Duration",label:"Duration",accessorKey:"durationMs",cell:({value:Z})=>A2(typeof Z==="number"?Z:void 0),align:"right",size:140,canSort:!0,canHide:!0,canResize:!0},{id:"estimatedCostUsd",header:"Cost",label:"Cost",accessorKey:"estimatedCostUsd",cell:({value:Z})=>k4(typeof Z==="number"?Z:void 0),align:"right",size:140,canSort:!0,canHide:!0,canResize:!0}]}import{DataTable as mZ}from"@contractspec/lib.design-system";import{useContractTable as EZ}from"@contractspec/lib.presentation-runtime-react";import*as L4 from"react";import{jsx as U1}from"react/jsx-runtime";function R4({runs:Z,totalItems:D,pageIndex:$,pageSize:q,sorting:J,loading:z,onSortingChange:X,onPaginationChange:A,onRunClick:Y}){let F=L4.useMemo(()=>N4(),[]),H=EZ({data:Z,columns:F,executionMode:"server",totalItems:D,state:{sorting:J,pagination:{pageIndex:$,pageSize:q}},onSortingChange:X,onPaginationChange:A,initialState:{columnVisibility:{estimatedCostUsd:!1}},getRowId:(Q)=>Q.id,renderExpandedContent:(Q)=>U1(v4,{run:Q}),getCanExpand:()=>!0});return U1(mZ,{controller:H,title:"Run History",description:"Server-mode ContractSpec table with shared pagination, sorting, visibility, and expansion.",loading:z,onRowPress:(Q)=>Y?.(Q.id),toolbar:U1(_4,{controller:H,totalRuns:D}),emptyState:U1("div",{className:"rounded-md border border-dashed p-8 text-center text-muted-foreground text-sm",children:"No runs yet"})})}import{EmptyState as pZ,ErrorState as oZ,LoaderBlock as SZ,StatCard as z1,StatCardGroup as rZ}from"@contractspec/lib.design-system";import{useState as O4}from"react";import{jsx as Q0,jsxs as M4}from"react/jsx-runtime";function G1({agentId:Z,onRunClick:D}){let[$,q]=O4([{id:"queuedAt",desc:!0}]),[J,z]=O4({pageIndex:0,pageSize:3}),{data:X,metrics:A,loading:Y,error:F,refetch:H}=m0({agentId:Z,pageIndex:J.pageIndex,pageSize:J.pageSize,sorting:$});if(Y&&!X)return Q0(SZ,{label:"Loading runs..."});if(F)return Q0(oZ,{title:"Failed to load runs",description:F.message,onRetry:H,retryLabel:"Retry"});if(!X?.items.length)return Q0(pZ,{title:"No runs yet",description:"Execute an agent to see run history here."});return M4("div",{className:"space-y-6",children:[A?M4(rZ,{children:[Q0(z1,{label:"Total Runs",value:A.totalRuns}),Q0(z1,{label:"Success Rate",value:`${(A.successRate*100).toFixed(1)}%`}),Q0(z1,{label:"Total Tokens",value:h0(A.totalTokens)}),Q0(z1,{label:"Total Cost",value:`$${A.totalCostUsd.toFixed(2)}`})]}):null,Q0(R4,{runs:X.items,totalItems:X.total,pageIndex:J.pageIndex,pageSize:J.pageSize,sorting:$,loading:Y,onSortingChange:(Q)=>{q(Q),z((U)=>({...U,pageIndex:0}))},onPaginationChange:z,onRunClick:D})]})}import{useTemplateRuntime as cZ}from"@contractspec/lib.example-shared-ui";import{useCallback as iZ,useEffect as uZ,useMemo as lZ,useState as K1}from"react";function P2(Z={}){let{handlers:D,projectId:$}=cZ(),{agent:q}=D,[J,z]=K1(null),[X,A]=K1(!0),[Y,F]=K1(null),[H,Q]=K1(1),U=iZ(async()=>{A(!0),F(null);try{let B=await q.listTools({projectId:$,search:Z.search,category:Z.category,status:Z.status==="all"?void 0:Z.status,limit:Z.limit??50,offset:(H-1)*(Z.limit??50)});z(B)}catch(B){F(B instanceof Error?B:Error("Unknown error"))}finally{A(!1)}},[q,$,Z.search,Z.category,Z.status,Z.limit,H]);uZ(()=>{U()},[U]);let{stats:G,groupedByCategory:K,categoryStats:L}=lZ(()=>{if(!J)return{stats:null,groupedByCategory:{},categoryStats:[]};let B=J.items,v=B.filter((o)=>o.status==="ACTIVE").length,I=B.filter((o)=>o.status==="DEPRECATED").length,k=B.filter((o)=>o.status==="DISABLED").length,b={},u={};B.forEach((o)=>{let t=o.category;if(!b[t])b[t]=[];b[t].push(o),u[t]=(u[t]||0)+1});let p0=Object.entries(u).map(([o,t])=>({category:o,count:t})).sort((o,t)=>t.count-o.count);return{stats:{total:J.total,active:v,deprecated:I,disabled:k,topCategories:p0.slice(0,5)},groupedByCategory:b,categoryStats:p0}},[J]);return{data:J,loading:X,error:Y,stats:G,groupedByCategory:K,categoryStats:L,page:H,refetch:U,nextPage:()=>Q((B)=>B+1),prevPage:()=>H>1&&Q((B)=>B-1)}}import{Button as sZ,EmptyState as tZ,EntityCard as nZ,ErrorState as eZ,LoaderBlock as aZ,StatCard as b4,StatCardGroup as Z3,StatusChip as D3}from"@contractspec/lib.design-system";import{jsx as i,jsxs as A1}from"react/jsx-runtime";var w4={RETRIEVAL:"\uD83D\uDD0D",COMPUTATION:"\uD83E\uDDEE",COMMUNICATION:"\uD83D\uDCE7",INTEGRATION:"\uD83D\uDD17",UTILITY:"\uD83D\uDEE0\uFE0F",CUSTOM:"\u2699\uFE0F"};function q3(Z){switch(Z){case"ACTIVE":return"success";case"DRAFT":return"neutral";case"DEPRECATED":return"warning";case"DISABLED":return"danger";default:return"neutral"}}function V1({onToolClick:Z,onCreateTool:D}){let{data:$,loading:q,error:J,groupedByCategory:z,categoryStats:X,refetch:A}=P2();if(q&&!$)return i(aZ,{label:"Loading tools..."});if(J)return i(eZ,{title:"Failed to load tools",description:J.message,onRetry:A,retryLabel:"Retry"});if(!$?.items.length)return i(tZ,{title:"No tools registered",description:"Create your first tool to extend agent capabilities.",primaryAction:D?i(sZ,{onPress:D,children:"Create Tool"}):void 0});return A1("div",{className:"space-y-8",children:[A1(Z3,{children:[i(b4,{label:"Total Tools",value:$.total}),X.slice(0,3).map(({category:Y,count:F})=>i(b4,{label:`${w4[Y]??""} ${Y}`,value:F},Y))]}),Object.entries(z).map(([Y,F])=>A1("section",{className:"space-y-4",children:[A1("div",{className:"flex items-center gap-2",children:[i("span",{className:"text-2xl",children:w4[Y]}),i("h3",{className:"font-semibold text-lg",children:Y}),i("span",{className:"rounded-full bg-muted px-2 py-0.5 text-muted-foreground text-xs",children:F.length})]}),i("div",{className:"grid gap-4 md:grid-cols-2 lg:grid-cols-3",children:F.map((H)=>i(nZ,{cardTitle:H.name,cardSubtitle:`v${H.version}`,meta:i("p",{className:"text-muted-foreground text-sm",children:H.description}),chips:i(D3,{tone:q3(H.status),label:H.status}),footer:i("code",{className:"text-muted-foreground text-xs",children:H.name}),onClick:Z?()=>Z(H.id):void 0},H.id))})]},Y))]})}import{Button as I2,StatCard as H3,StatCardGroup as $3}from"@contractspec/lib.design-system";import{useCallback as Y3,useMemo as J3,useState as E0}from"react";import{jsx as R,jsxs as M}from"react/jsx-runtime";function e9(){let[Z,D]=E0("runs"),[$,q]=E0(!1),[J,z]=E0(null),[X,A]=E0(!1),[Y,F]=E0(0),{data:H,metrics:Q,refetch:U}=m0(),{refetch:G}=M0(),K=X2({onSuccess:()=>{G(),U(),F((I)=>I+1)}}),L=Y3((I)=>{z(I),A(!0)},[]),B=[{id:"runs",label:"Runs",icon:"\u25B6"},{id:"agents",label:"Agents",icon:"\uD83E\uDD16"},{id:"tools",label:"Tools",icon:"\uD83D\uDD27"},{id:"metrics",label:"Metrics",icon:"\uD83D\uDCCA"}],v=J3(()=>{if(!Q)return[{label:"Total Runs",value:"-",hint:"Loading..."},{label:"Success Rate",value:"-",hint:""},{label:"Total Tokens",value:"-",hint:""},{label:"Total Cost",value:"-",hint:""}];return[{label:"Total Runs",value:Q.totalRuns.toLocaleString(),hint:`${(Q.successRate*100).toFixed(0)}% success`},{label:"Success Rate",value:`${(Q.successRate*100).toFixed(0)}%`,hint:"of all runs"},{label:"Total Tokens",value:Q.totalTokens>=1e6?`${(Q.totalTokens/1e6).toFixed(1)}M`:`${(Q.totalTokens/1000).toFixed(0)}K`,hint:"This period"},{label:"Total Cost",value:`$${Q.totalCostUsd.toFixed(2)}`,hint:"This period"}]},[Q]);return M("div",{className:"space-y-6",children:[M("div",{className:"flex items-center justify-between",children:[R("h2",{className:"font-bold text-2xl",children:"AI Agent Console"}),M(I2,{onPress:()=>q(!0),children:[R("span",{className:"mr-2",children:"+"})," New Agent"]})]}),R($3,{children:v.map((I,k)=>R(H3,{label:I.label,value:I.value,hint:I.hint},k))}),R(I4,{runs:H?.items??[]}),R("nav",{className:"flex gap-1 rounded-lg bg-muted p-1",role:"tablist",children:B.map((I)=>M("button",{type:"button",role:"tab","aria-selected":Z===I.id,onClick:()=>D(I.id),className:`flex flex-1 items-center justify-center gap-2 rounded-md px-4 py-2 font-medium text-sm transition-colors ${Z===I.id?"bg-background text-foreground shadow-sm":"text-muted-foreground hover:text-foreground"}`,children:[R("span",{children:I.icon}),I.label]},I.id))}),M("div",{className:"min-h-[400px]",role:"tabpanel",children:[Z==="runs"&&R(G1,{},Y),Z==="agents"&&R(X3,{onAgentClick:L},Y),Z==="tools"&&R(V1,{}),Z==="metrics"&&R(Q3,{metrics:Q})]}),R(U2,{isOpen:$,onClose:()=>q(!1),onSubmit:async(I)=>{await K.createAgent(I)},isLoading:K.createState.loading}),R(F2,{isOpen:X,agent:J,onClose:()=>{A(!1),z(null)},onActivate:async(I)=>{await K.activateAgent(I)},onPause:async(I)=>{await K.pauseAgent(I)},onArchive:async(I)=>{await K.archiveAgent(I)},onExecute:async(I,k)=>{await K.executeAgent({agentId:I,message:k})},isLoading:K.isLoading})]})}function X3({onAgentClick:Z}){let{data:D,loading:$,error:q,stats:J,refetch:z}=M0();if($&&!D)return R("div",{className:"flex h-64 items-center justify-center text-muted-foreground",children:"Loading agents..."});if(q)return M("div",{className:"flex h-64 flex-col items-center justify-center text-destructive",children:[M("p",{children:["Failed to load agents: ",q.message]}),R(I2,{variant:"outline",onPress:z,className:"mt-2",children:"Retry"})]});if(!D?.items.length)return M("div",{className:"flex h-64 flex-col items-center justify-center text-muted-foreground",children:[R("p",{className:"font-medium text-lg",children:"No agents yet"}),R("p",{className:"text-sm",children:"Create your first AI agent to get started."})]});return M("div",{className:"space-y-4",children:[J&&M("div",{className:"flex gap-4 text-sm",children:[M("span",{children:["Total: ",J.total]}),M("span",{className:"text-green-600",children:["Active: ",J.active]}),M("span",{className:"text-yellow-600",children:["Paused: ",J.paused]}),M("span",{className:"text-blue-600",children:["Draft: ",J.draft]})]}),R("div",{className:"grid gap-4 md:grid-cols-2 lg:grid-cols-3",children:D.items.map((X)=>R(F3,{agent:X,onClick:()=>Z(X)},X.id))})]})}function F3({agent:Z,onClick:D}){let $={ACTIVE:"bg-green-100 text-green-700 dark:bg-green-900/30 dark:text-green-400",DRAFT:"bg-blue-100 text-blue-700 dark:bg-blue-900/30 dark:text-blue-400",PAUSED:"bg-yellow-100 text-yellow-700 dark:bg-yellow-900/30 dark:text-yellow-400",ARCHIVED:"bg-gray-100 text-gray-600 dark:bg-gray-700 dark:text-gray-400"};return M("div",{onClick:D,className:"cursor-pointer rounded-xl border border-border bg-card p-4 transition-all hover:shadow-md",role:"button",tabIndex:0,onKeyDown:(q)=>{if(q.key==="Enter"||q.key===" ")D()},children:[M("div",{className:"flex items-start justify-between",children:[M("div",{className:"min-w-0 flex-1",children:[R("h3",{className:"truncate font-semibold",children:Z.name}),M("p",{className:"text-muted-foreground text-sm",children:[Z.modelProvider," / ",Z.modelName]})]}),R("span",{className:`rounded-full px-2 py-0.5 font-medium text-xs ${$[Z.status]}`,children:Z.status})]}),Z.description&&R("p",{className:"mt-2 line-clamp-2 text-muted-foreground text-sm",children:Z.description}),M("div",{className:"mt-3 flex items-center justify-between",children:[R("span",{className:"text-muted-foreground text-xs",children:Z.modelName}),R(I2,{variant:"ghost",size:"sm",onPress:D,children:"Actions"})]})]})}function Q3({metrics:Z}){if(!Z)return R("div",{className:"flex h-64 items-center justify-center text-muted-foreground",children:"Loading metrics..."});let D=Math.round(Z.totalRuns*Z.successRate),$=Z.totalRuns-D;return M("div",{className:"space-y-6",children:[R("h3",{className:"font-semibold text-lg",children:"Usage Analytics"}),M("div",{className:"grid gap-6 md:grid-cols-2",children:[M("div",{className:"rounded-xl border border-border bg-card p-4",children:[R("h4",{className:"font-medium",children:"Run Outcomes"}),M("div",{className:"mt-4 space-y-3",children:[R(h4,{label:"Completed",value:D,total:Z.totalRuns,color:"bg-green-500"}),R(h4,{label:"Failed",value:$,total:Z.totalRuns,color:"bg-red-500"})]})]}),M("div",{className:"rounded-xl border border-border bg-card p-4",children:[R("h4",{className:"font-medium",children:"Performance"}),M("dl",{className:"mt-4 grid grid-cols-2 gap-4",children:[M("div",{children:[R("dt",{className:"text-muted-foreground text-sm",children:"Avg Duration"}),M("dd",{className:"font-semibold text-xl",children:[(Z.averageDurationMs/1000).toFixed(1),"s"]})]}),M("div",{children:[R("dt",{className:"text-muted-foreground text-sm",children:"Success Rate"}),M("dd",{className:"font-semibold text-xl",children:[(Z.successRate*100).toFixed(0),"%"]})]})]})]})]}),M("div",{className:"rounded-xl border border-border bg-card p-4",children:[R("h4",{className:"font-medium",children:"Key Metrics"}),M("dl",{className:"mt-4 grid gap-4 sm:grid-cols-3",children:[M("div",{children:[R("dt",{className:"text-muted-foreground text-sm",children:"Total Runs"}),R("dd",{className:"font-semibold text-2xl",children:Z.totalRuns.toLocaleString()})]}),M("div",{children:[R("dt",{className:"text-muted-foreground text-sm",children:"Total Tokens"}),M("dd",{className:"font-semibold text-2xl",children:[(Z.totalTokens/1000).toFixed(0),"K"]})]}),M("div",{children:[R("dt",{className:"text-muted-foreground text-sm",children:"Cost per Run"}),M("dd",{className:"font-semibold text-2xl",children:["$",Z.totalRuns>0?(Z.totalCostUsd/Z.totalRuns).toFixed(4):"0"]})]})]})]})]})}function h4({label:Z,value:D,total:$,color:q}){let J=$>0?D/$*100:0;return M("div",{children:[M("div",{className:"flex justify-between text-sm",children:[R("span",{children:Z}),M("span",{className:"text-muted-foreground",children:[D," (",J.toFixed(0),"%)"]})]}),R("div",{className:"mt-1 h-2 overflow-hidden rounded-full bg-muted",children:R("div",{className:`h-full ${q}`,style:{width:`${J}%`}})})]})}import{VStack as U3}from"@contractspec/lib.ui-kit-web/ui/stack";import{ExecutionLaneConsoleDemo as z3}from"@contractspec/module.execution-console";import{jsx as C4,jsxs as G3}from"react/jsx-runtime";function FH(){return G3(U3,{gap:"xl",align:"stretch",children:[C4(V4,{}),C4(z3,{})]})}var K3={overlayId:"agent-console.demo-user",version:"1.0.0",description:"Simplifies agent console for demo users",appliesTo:{feature:"agent-console",role:"demo"},modifications:[{type:"hideField",field:"modelConfig",reason:"Advanced config not relevant for demo"},{type:"hideField",field:"webhookConfig",reason:"Integration not available in demo"},{type:"renameLabel",field:"systemPrompt",newLabel:"Agent Instructions"},{type:"addBadge",position:"header",label:"Demo Mode",variant:"warning"}]},A3={overlayId:"agent-console.read-only",version:"1.0.0",description:"Read-only view for non-admin users",appliesTo:{feature:"agent-console",role:"viewer"},modifications:[{type:"hideField",field:"deleteButton",reason:"No delete permission"},{type:"hideField",field:"editButton",reason:"No edit permission"},{type:"hideField",field:"createButton",reason:"No create permission"}]},BH=[K3,A3];import{AGENT_CONSOLE_DEMO_ORGANIZATION_ID as V3,AGENT_CONSOLE_DEMO_PROJECT_ID as f4,createAgentConsoleDemoHandlers as P3}from"@contractspec/example.agent-console/shared";var I3={target:"markdown",render:async(Z,D)=>{if(Z.source.type!=="component"||Z.source.componentKey!=="AgentListView")throw Error("agentListMarkdownRenderer: not AgentListView");let $=Array.isArray(D?.data)?{items:D.data,total:D.data.length,hasMore:!1}:await P3({projectId:f4}).listAgents({projectId:f4,organizationId:V3,limit:50,offset:0}),q=[`# ${Z.meta.description??"Agent List"}`,"",`> ${Z.meta.key} v${Z.meta.version}`,"",`**Total Agents:** ${$.total}`,"","## Agents",""],J={};for(let z of $.items){let X=z.status;if(J[X])J[X].push(z);else J[X]=[z]}for(let[z,X]of Object.entries(J)){q.push(`### ${z} (${X.length})`),q.push("");for(let A of X)if(q.push(`- **${A.name}** (${A.modelProvider}/${A.modelName})`),A.description)q.push(` > ${A.description}`);q.push("")}return{mimeType:"text/markdown",body:q.join(`
66
+ `)}}};import{Button as W3,EmptyState as B3,EntityCard as k3,ErrorState as v3,LoaderBlock as _3,StatCard as P1,StatCardGroup as N3,StatusChip as L3}from"@contractspec/lib.design-system";import{jsx as s,jsxs as I1}from"react/jsx-runtime";function R3(Z){switch(Z){case"ACTIVE":return"success";case"PAUSED":case"DRAFT":return"warning";case"ARCHIVED":return"neutral";default:return"neutral"}}function W2(){let{data:Z,loading:D,error:$,stats:q,refetch:J}=M0();if(D&&!Z)return s(_3,{label:"Loading agents..."});if($)return s(v3,{title:"Failed to load agents",description:$.message,onRetry:J,retryLabel:"Retry"});if(!Z?.items.length)return s(B3,{title:"No agents yet",description:"Create your first AI agent to get started."});return I1("div",{className:"space-y-6",children:[q&&I1(N3,{children:[s(P1,{label:"Total Agents",value:q.total}),s(P1,{label:"Active",value:q.active}),s(P1,{label:"Paused",value:q.paused}),s(P1,{label:"Draft",value:q.draft})]}),I1("div",{className:"flex items-center justify-between",children:[s("h3",{className:"font-semibold text-lg",children:"Agents"}),s(W3,{onPress:()=>alert("Create Agent clicked!"),children:"Create Agent"})]}),s("div",{className:"grid gap-4 sm:grid-cols-2 lg:grid-cols-3",children:Z.items.map((z)=>s(k3,{cardTitle:z.name,cardSubtitle:z.modelName,meta:s("p",{className:"text-muted-foreground text-sm",children:z.description}),chips:s(L3,{tone:R3(z.status),label:z.status}),footer:I1("span",{className:"text-muted-foreground text-xs",children:["Created ",z.createdAt.toLocaleDateString()]}),onClick:()=>alert(`View agent: ${z.name}`)},z.id))})]})}import{jsx as M3}from"react/jsx-runtime";var O3={target:"react",render:async(Z)=>{if(Z.source.type!=="component")throw Error("AgentListRenderer: expected component source");if(Z.source.componentKey!=="AgentListView")throw Error(`AgentListRenderer: unknown component ${Z.source.componentKey}`);return M3(W2,{})}};import{getFallbackAgentConsoleDashboardData as b3}from"@contractspec/example.agent-console/shared";function w3(Z){if(Z<1000)return`${Z}ms`;if(Z<60000)return`${(Z/1000).toFixed(1)}s`;return`${(Z/60000).toFixed(1)}m`}var h3={target:"markdown",render:async(Z,D)=>{if(Z.source.type!=="component"||Z.source.componentKey!=="AgentConsoleDashboard")throw Error("agentDashboardMarkdownRenderer: not AgentConsoleDashboard");let $=D?.data??await b3(),q=$.agents.filter((U)=>U.status==="ACTIVE").length,J=$.runs.filter((U)=>U.status==="COMPLETED").length,z=$.runs.filter((U)=>U.status==="FAILED").length,X=$.runs.reduce((U,G)=>U+(G.totalTokens??0),0),A=$.runs.reduce((U,G)=>U+(G.estimatedCostUsd??0),0),Y=$.tools.filter((U)=>U.status==="ACTIVE").length,F=N0($.runs),H=["# Agent Console Dashboard","","> AI agent operations overview","","## Summary","","| Metric | Value |","|--------|-------|",`| Total Agents | ${$.summary.totalAgents} |`,`| Active Agents | ${q} |`,`| Total Runs | ${$.summary.totalRuns} |`,`| Completed Runs | ${J} |`,`| Failed Runs | ${z} |`,`| Total Tokens | ${X.toLocaleString()} |`,`| Total Cost | $${A.toFixed(4)} |`,`| Total Tools | ${$.summary.totalTools} |`,`| Active Tools | ${Y} |`,"","## Agents",""];if($.agents.length===0)H.push("_No agents configured._");else{H.push("| Agent | Model | Status | Description |"),H.push("|-------|-------|--------|-------------|");for(let U of $.agents.slice(0,5))H.push(`| ${U.name} | ${U.modelProvider}/${U.modelName} | ${U.status} | ${U.description??"-"} |`);if($.agents.length>5)H.push(`| ... | ... | ... | _${$.summary.totalAgents-5} more_ |`)}if(H.push(""),H.push("## Recent Runs"),H.push(""),$.runs.length===0)H.push("_No runs yet._");else{H.push("| Run ID | Agent | Status | Duration | Tokens | Cost |"),H.push("|--------|-------|--------|----------|--------|------|");for(let U of $.runs.slice(0,5))H.push(`| ${U.id.slice(-8)} | ${U.agentName} | ${U.status} | ${U.durationMs?w3(U.durationMs):"-"} | ${U.totalTokens??0} | $${(U.estimatedCostUsd??0).toFixed(4)} |`);if($.runs.length>5)H.push(`| ... | ... | ... | ... | ... | _${$.summary.totalRuns-5} more_ |`)}H.push(""),H.push("## Visualization Overview"),H.push("");for(let U of F)H.push(`- **${U.title}** via \`${U.spec.meta.key}\``);H.push(""),H.push("## Tools"),H.push("");let Q={};for(let U of $.tools){let G=U.category;if(!Q[G])Q[G]=[];Q[G].push(U)}if(Object.keys(Q).length===0)H.push("_No tools registered._");else{H.push("| Category | Tools | Active |"),H.push("|----------|-------|--------|");for(let[U,G]of Object.entries(Q).sort()){let K=G.filter((L)=>L.status==="ACTIVE").length;H.push(`| ${U} | ${G.length} | ${K} |`)}}return{mimeType:"text/markdown",body:H.join(`
67
+ `)}}};import{AGENT_CONSOLE_DEMO_PROJECT_ID as g4,createAgentConsoleDemoHandlers as C3}from"@contractspec/example.agent-console/shared";function f3(Z){if(Z<1000)return`${Z}ms`;if(Z<60000)return`${(Z/1000).toFixed(1)}s`;return`${(Z/60000).toFixed(1)}m`}var g3={target:"markdown",render:async(Z,D)=>{if(Z.source.type!=="component"||Z.source.componentKey!=="RunListView")throw Error("runListMarkdownRenderer: not RunListView");let $=Array.isArray(D?.data)?{items:D.data,total:D.data.length,hasMore:!1}:await C3({projectId:g4}).listRuns({projectId:g4,limit:20,offset:0}),q=[`# ${Z.meta.description??"Agent Runs"}`,"",`> ${Z.meta.key} v${Z.meta.version}`,"",`**Total Runs:** ${$.total}`,"","## Recent Runs","","| ID | Agent | Status | Duration | Tokens | Cost |","| --- | --- | --- | --- | --- | --- |"];for(let J of $.items.slice(0,10))q.push(`| ${J.id.slice(-8)} | ${J.agentName} | ${J.status} | ${J.durationMs?f3(J.durationMs):"-"} | ${J.totalTokens} | $${J.estimatedCostUsd?.toFixed(4)??"-"} |`);return{mimeType:"text/markdown",body:q.join(`
68
+ `)}}};import{AGENT_CONSOLE_DEMO_ORGANIZATION_ID as j3,AGENT_CONSOLE_DEMO_PROJECT_ID as j4,createAgentConsoleDemoHandlers as x3}from"@contractspec/example.agent-console/shared";var T3={target:"markdown",render:async(Z,D)=>{if(Z.source.type!=="component"||Z.source.componentKey!=="ToolRegistryView")throw Error("toolRegistryMarkdownRenderer: not ToolRegistryView");let $=Array.isArray(D?.data)?{items:D.data,total:D.data.length,hasMore:!1}:await x3({projectId:j4}).listTools({projectId:j4,organizationId:j3,limit:50,offset:0}),q=[`# ${Z.meta.description??"Tool Registry"}`,"",`> ${Z.meta.key} v${Z.meta.version}`,"",`**Total Tools:** ${$.total}`,""],J={};for(let z of $.items){let X=z.category;if(!J[X])J[X]=[];J[X].push(z)}for(let[z,X]of Object.entries(J).sort()){q.push(`## ${z} (${X.length})`),q.push("");for(let A of X){let Y=A.status==="ACTIVE"?"\u2705":A.status==="DEPRECATED"?"\u26A0\uFE0F":"\u274C";if(q.push(`### ${Y} ${A.name} v${A.version}`),q.push(""),q.push(`> \`${A.id}\``),q.push(""),A.description)q.push(A.description),q.push("")}}return{mimeType:"text/markdown",body:q.join(`
69
+ `)}}};import{defineHarnessScenario as y3}from"@contractspec/lib.contracts-spec";var x4="Paris Meetup Demo Agent",d3=r.filter((Z)=>Z.status==="COMPLETED").length,m3=(d3+1)/(r.length+1),B2=y3({meta:{key:"agent-console.meetup.proof",version:"1.0.0",title:"Agent console meetup proof",description:"Verifies the deterministic autonomous-agent walkthrough end-to-end.",domain:"agent-console",owners:["@agent-console-team"],tags:["meetup","proof","autonomous-agents"],stability:"experimental"},target:{allowlistedDomains:["sandbox.contractspec.local"],isolation:"sandbox"},allowedModes:["code-execution"],steps:[{key:"open-dashboard",description:"Inspect seeded dashboard state",actionClass:"code-exec-read",intent:"Confirm the local demo starts with seeded agents, tools, and runs."},{key:"create-agent",description:"Create the meetup demo agent",actionClass:"code-exec-mutate",intent:"Add a new agent for the walkthrough.",mutatesState:!0},{key:"activate-agent",description:"Activate the meetup demo agent",actionClass:"code-exec-mutate",intent:"Move the new agent into an executable state.",mutatesState:!0},{key:"execute-agent",description:"Run the meetup demo agent",actionClass:"code-exec-mutate",intent:"Create a deterministic completed run.",mutatesState:!0},{key:"inspect-dashboard",description:"Confirm dashboard totals after execution",actionClass:"code-exec-read",intent:"Verify the new agent and run are visible in the demo state."}],assertions:[{key:"captured-step-summaries",type:"count",source:"step-summary",match:5},{key:"execution-completed",type:"step-status",source:"execute-agent",match:"completed"},{key:"final-summary-mentions-meetup-agent",type:"text-match",source:"inspect-dashboard",match:x4},{key:"final-dashboard-shape",type:"json-match",source:"inspect-dashboard",match:{agentCount:d.length+1,runCount:r.length+1,toolCount:m.length,latestAgentName:x4,latestRunId:"run-meetup-1",successRate:m3}}]});import{defineHarnessSuite as E3}from"@contractspec/lib.contracts-spec";var K8=E3({meta:{key:"agent-console.meetup.proof-suite",version:"1.0.0",title:"Agent console meetup proof suite",description:"Bundles the deterministic meetup walkthrough into a reusable harness suite.",domain:"agent-console",owners:["@agent-console-team"],tags:["meetup","proof","harness-suite"],stability:"experimental"},summary:"Runs the canonical agent-console meetup scenario and validates the final dashboard evidence.",tags:["agent-console","meetup","proof"],scenarios:[{scenario:{key:B2.meta.key,version:B2.meta.version},required:!0,weight:1}]});export{P2 as useToolList,m0 as useRunList,X2 as useAgentMutations,M0 as useAgentList,T3 as toolRegistryMarkdownRenderer,g3 as runListMarkdownRenderer,N5 as mockUpdateToolHandler,Z5 as mockUpdateAgentHandler,L5 as mockTestToolHandler,k5 as mockListToolsHandler,V5 as mockListRunsHandler,n4 as mockListAgentsHandler,v5 as mockGetToolHandler,P5 as mockGetRunHandler,e4 as mockGetAgentHandler,I5 as mockExecuteAgentHandler,_5 as mockCreateToolHandler,a4 as mockCreateAgentHandler,W5 as mockCancelRunHandler,l5 as getFallbackAgentConsoleDashboardData,n2 as getAgentConsoleDashboardData,F5 as example,N0 as createAgentVisualizationItems,K5 as createAgentHandlers,n1 as createAgentConsoleDemoHandlers,O3 as agentListReactRenderer,I3 as agentListMarkdownRenderer,h3 as agentDashboardMarkdownRenderer,A3 as agentConsoleReadOnlyOverlay,BH as agentConsoleOverlays,K3 as agentConsoleDemoOverlay,c1 as UpdateToolInputModel,T2 as UpdateToolCommand,b1 as UpdateAgentInputModel,h1 as UpdateAgentCommand,ZZ as ToolUpdatedEvent,A0 as ToolSummaryModel,$0 as ToolStatusEnum,a2 as ToolStatusEntityEnum,qZ as ToolStatusChangedEvent,V1 as ToolRegistryView,S1 as ToolModel,HZ as ToolListPresentation,d5 as ToolInvokedEvent,t5 as ToolEntity,$Z as ToolDetailPresentation,e5 as ToolCreatedEvent,E5 as ToolCompletedEvent,L0 as ToolChoiceEnum,K0 as ToolCategoryEnum,e2 as ToolCategoryEntityEnum,m1 as TimelineDataPointModel,d2 as TestToolCommand,G0 as RunSummaryModel,x1 as RunStepTypeEnum,S2 as RunStepTypeEntityEnum,u0 as RunStepModel,O5 as RunStepEntity,q0 as RunStatusEnum,o2 as RunStatusEntityEnum,h5 as RunStartedEvent,d1 as RunModel,l0 as RunLogModel,M5 as RunLogEntity,G1 as RunListView,r5 as RunListPresentation,y1 as RunInputModel,j5 as RunFailedEvent,R5 as RunEntity,c5 as RunDetailPresentation,f5 as RunCompletedEvent,T5 as RunCancelledEvent,w2 as RunAgentRefModel,s4 as RemoveToolFromAgentCommand,J0 as ModelProviderEnum,O2 as ModelProviderEntityEnum,S5 as MessageGeneratedEvent,m as MOCK_TOOLS,r as MOCK_RUNS,d as MOCK_AGENTS,x4 as MEETUP_AGENT_NAME,f0 as LogLevelEnum,r2 as LogLevelEntityEnum,u1 as ListToolsQuery,p1 as ListRunsQuery,f1 as ListAgentsQuery,s0 as ImplementationTypeEnum,Z4 as ImplementationTypeEntityEnum,T1 as GranularityEnum,y2 as GetToolQuery,Q5 as GetRunStepsQuery,f2 as GetRunQuery,g2 as GetRunMetricsQuery,U5 as GetRunLogsQuery,C1 as GetAgentQuery,FH as ExecutionConsoleHost,E1 as ExecuteAgentCommand,X5 as ExamplesAgentConsoleExample,r1 as CreateToolInputModel,x2 as CreateToolCommand,U2 as CreateAgentModal,M1 as CreateAgentInputModel,w1 as CreateAgentCommand,C2 as CancelRunCommand,l4 as AssignToolToAgentCommand,O1 as AgentWithToolsModel,k2 as AgentVisualizationSpecs,o3 as AgentVisualizationRegistry,v2 as AgentVisualizationRefs,o4 as AgentUpdatedEvent,i4 as AgentToolRemovedEvent,V1 as AgentToolRegistry,M2 as AgentToolRefModel,m4 as AgentToolEntity,r4 as AgentToolAssignedEvent,O0 as AgentSummaryModel,e as AgentStatusEnum,R2 as AgentStatusEntityEnum,v1 as AgentRunStatusVisualization,G1 as AgentRunList,N1 as AgentRunEfficiencyVisualization,_1 as AgentRunActivityVisualization,u4 as AgentModel,W2 as AgentListView,D5 as AgentListPresentation,d4 as AgentEntity,q5 as AgentDetailPresentation,e9 as AgentDashboard,R1 as AgentCreatedEvent,V4 as AgentConsolePreview,K8 as AgentConsoleMeetupProofSuite,n3 as AgentConsoleFeature,H5 as AgentConsoleDashboardPresentation,F2 as AgentActionsModal,B2 as AGENT_CONSOLE_MEETUP_PROOF_SCENARIO,e0 as AGENT_CONSOLE_DEMO_PROJECT_ID,X0 as AGENT_CONSOLE_DEMO_ORGANIZATION_ID};