@contractspec/example.agent-console 3.8.15 → 3.8.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- 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 — 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
1
+ import{defineVisualization as W1,VisualizationRegistry as E4}from"@contractspec/lib.contracts-spec/visualizations";var B1={key:"agent.run.list",version:"1.0.0"},v1={version:"1.0.0",domain:"ai-ops",stability:"experimental",owners:["@example.agent-console"],tags:["agent-console","visualization","operations"]},_1=W1({meta:{...v1,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."}}}),N1=W1({meta:{...v1,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."}}}),L1=W1({meta:{...v1,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."}}}),v2=[_1,N1,L1],ZD=new E4([...v2]),_2=v2.map((Z)=>({key:Z.meta.key,version:Z.meta.version}));function N2(Z){if(!Z)return"unknown";return Z.toISOString().slice(0,10)}function L0(Z){let D=new Map,H=new Map;for(let q of Z)D.set(q.status,(D.get(q.status)??0)+1),H.set(N2(q.startedAt??q.queuedAt),(H.get(N2(q.startedAt??q.queuedAt))??0)+1);return[{key:"run-status",spec:_1,data:{data:Array.from(D.entries()).map(([q,X])=>({status:q,runs:X}))},title:"Run Status Breakdown",description:"Completed, failed, running, and cancelled runs in the sample.",height:260},{key:"run-activity",spec:N1,data:{data:Array.from(H.entries()).sort(([q],[X])=>q.localeCompare(X)).map(([q,X])=>({day:q,runs:X}))},title:"Recent Run Activity",description:"Daily run volume derived from run start times."},{key:"run-efficiency",spec:L1,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 m4}from"@contractspec/lib.contracts-spec/features";var QD=m4({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:_2,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 L2,defineEntityEnum as R2,field as w,index as f0}from"@contractspec/lib.schema";var O2=R2({name:"AgentStatus",values:["DRAFT","ACTIVE","PAUSED","ARCHIVED"],description:"Lifecycle status of the agent"}),M2=R2({name:"ModelProvider",values:["OPENAI","ANTHROPIC","GOOGLE","MISTRAL","CUSTOM"],description:"AI model provider"}),p4=L2({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:[f0.unique(["organizationId","slug"]),f0.on(["organizationId","status"]),f0.on(["modelProvider","modelName"])],enums:[O2,M2]}),S4=L2({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:[f0.unique(["agentId","toolId"]),f0.on(["agentId","order"])]});import{defineEnum as R1}from"@contractspec/lib.schema";var t=R1("AgentStatus",["DRAFT","ACTIVE","PAUSED","ARCHIVED"]),Y0=R1("ModelProvider",["OPENAI","ANTHROPIC","GOOGLE","MISTRAL","CUSTOM"]),R0=R1("ToolChoice",["auto","required","none"]);import{defineEvent as S0}from"@contractspec/lib.contracts-spec";import{defineSchemaModel as o0,ScalarTypeEnum as h}from"@contractspec/lib.schema";var c0=["@agent-console-team"],o4=o0({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}}}),O1=S0({meta:{key:"agent-console.agent.created",version:"1.0.0",description:"A new AI agent was configured.",stability:"stable",owners:[...c0],tags:["agent","created"]},payload:o4}),c4=o0({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}}}),r4=S0({meta:{key:"agent-console.agent.updated",version:"1.0.0",description:"An AI agent configuration was updated.",stability:"stable",owners:[...c0],tags:["agent","updated"]},payload:c4}),i4=o0({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}}}),u4=S0({meta:{key:"agent-console.agent.toolAssigned",version:"1.0.0",description:"A tool was assigned to an agent.",stability:"stable",owners:[...c0],tags:["agent","tool","assigned"]},payload:i4}),l4=o0({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}}}),s4=S0({meta:{key:"agent-console.agent.toolRemoved",version:"1.0.0",description:"A tool was removed from an agent.",stability:"stable",owners:[...c0],tags:["agent","tool","removed"]},payload:l4});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 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 O0,ScalarTypeEnum as A}from"@contractspec/lib.schema";var t4=O0({name:"Agent",description:"AI agent configuration",fields:{id:{type:A.String_unsecure(),isOptional:!1},organizationId:{type:A.String_unsecure(),isOptional:!1},name:{type:A.NonEmptyString(),isOptional:!1},slug:{type:A.String_unsecure(),isOptional:!1},description:{type:A.String_unsecure(),isOptional:!0},status:{type:t,isOptional:!1},modelProvider:{type:Y0,isOptional:!1},modelName:{type:A.NonEmptyString(),isOptional:!1},modelConfig:{type:A.JSONObject(),isOptional:!0},systemPrompt:{type:A.String_unsecure(),isOptional:!1},userPromptTemplate:{type:A.String_unsecure(),isOptional:!0},toolIds:{type:A.String_unsecure(),isArray:!0,isOptional:!0},toolChoice:{type:R0,isOptional:!1,defaultValue:"auto"},maxIterations:{type:A.Int_unsecure(),isOptional:!1,defaultValue:10},maxTokensPerRun:{type:A.Int_unsecure(),isOptional:!0},timeoutMs:{type:A.Int_unsecure(),isOptional:!1,defaultValue:120000},version:{type:A.NonEmptyString(),isOptional:!1},tags:{type:A.String_unsecure(),isArray:!0,isOptional:!0},createdAt:{type:A.DateTime(),isOptional:!1},updatedAt:{type:A.DateTime(),isOptional:!1}}}),M0=O0({name:"AgentSummary",description:"Summary of an agent for list views",fields:{id:{type:A.String_unsecure(),isOptional:!1},name:{type:A.NonEmptyString(),isOptional:!1},slug:{type:A.String_unsecure(),isOptional:!1},description:{type:A.String_unsecure(),isOptional:!0},status:{type:t,isOptional:!1},modelProvider:{type:Y0,isOptional:!1},modelName:{type:A.NonEmptyString(),isOptional:!1},version:{type:A.NonEmptyString(),isOptional:!1},createdAt:{type:A.DateTime(),isOptional:!1}}}),b2=O0({name:"AgentToolRef",description:"Tool reference in agent context",fields:{id:{type:A.String_unsecure(),isOptional:!1},name:{type:A.NonEmptyString(),isOptional:!1},slug:{type:A.String_unsecure(),isOptional:!1},description:{type:A.String_unsecure(),isOptional:!1},category:{type:A.String_unsecure(),isOptional:!1}}}),M1=O0({name:"AgentWithTools",description:"Agent with associated tools",fields:{id:{type:A.String_unsecure(),isOptional:!1},organizationId:{type:A.String_unsecure(),isOptional:!1},name:{type:A.NonEmptyString(),isOptional:!1},slug:{type:A.String_unsecure(),isOptional:!1},description:{type:A.String_unsecure(),isOptional:!0},status:{type:t,isOptional:!1},modelProvider:{type:Y0,isOptional:!1},modelName:{type:A.NonEmptyString(),isOptional:!1},modelConfig:{type:A.JSONObject(),isOptional:!0},systemPrompt:{type:A.String_unsecure(),isOptional:!1},userPromptTemplate:{type:A.String_unsecure(),isOptional:!0},toolIds:{type:A.String_unsecure(),isArray:!0,isOptional:!0},toolChoice:{type:R0,isOptional:!1},maxIterations:{type:A.Int_unsecure(),isOptional:!1},maxTokensPerRun:{type:A.Int_unsecure(),isOptional:!0},timeoutMs:{type:A.Int_unsecure(),isOptional:!1},version:{type:A.NonEmptyString(),isOptional:!1},tags:{type:A.String_unsecure(),isArray:!0,isOptional:!0},createdAt:{type:A.DateTime(),isOptional:!1},updatedAt:{type:A.DateTime(),isOptional:!1},tools:{type:b2,isArray:!0,isOptional:!0}}}),b1=O0({name:"CreateAgentInput",description:"Input for creating an agent",fields:{organizationId:{type:A.String_unsecure(),isOptional:!1},name:{type:A.NonEmptyString(),isOptional:!1},slug:{type:A.String_unsecure(),isOptional:!1},description:{type:A.String_unsecure(),isOptional:!0},modelProvider:{type:Y0,isOptional:!1},modelName:{type:A.NonEmptyString(),isOptional:!1},modelConfig:{type:A.JSONObject(),isOptional:!0},systemPrompt:{type:A.String_unsecure(),isOptional:!1},userPromptTemplate:{type:A.String_unsecure(),isOptional:!0},toolIds:{type:A.String_unsecure(),isArray:!0,isOptional:!0},toolChoice:{type:R0,isOptional:!0},maxIterations:{type:A.Int_unsecure(),isOptional:!0},maxTokensPerRun:{type:A.Int_unsecure(),isOptional:!0},timeoutMs:{type:A.Int_unsecure(),isOptional:!0},tags:{type:A.String_unsecure(),isArray:!0,isOptional:!0}}}),w1=O0({name:"UpdateAgentInput",description:"Input for updating an agent",fields:{agentId:{type:A.String_unsecure(),isOptional:!1},name:{type:A.NonEmptyString(),isOptional:!0},description:{type:A.String_unsecure(),isOptional:!0},status:{type:t,isOptional:!0},modelConfig:{type:A.JSONObject(),isOptional:!0},systemPrompt:{type:A.String_unsecure(),isOptional:!0},userPromptTemplate:{type:A.String_unsecure(),isOptional:!0},toolIds:{type:A.String_unsecure(),isArray:!0,isOptional:!0},toolChoice:{type:R0,isOptional:!0},maxIterations:{type:A.Int_unsecure(),isOptional:!0},maxTokensPerRun:{type:A.Int_unsecure(),isOptional:!0},timeoutMs:{type:A.Int_unsecure(),isOptional:!0},tags:{type:A.String_unsecure(),isArray:!0,isOptional:!0}}});import{defineCommand as r0,defineQuery as w2}from"@contractspec/lib.contracts-spec/operations";import{defineSchemaModel as e,ScalarTypeEnum as C}from"@contractspec/lib.schema";var z0=["@agent-console-team"],h1=r0({meta:{key:"agent-console.agent.create",version:"1.0.0",stability:"stable",owners:[...z0],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:b1,output:e({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:t,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:O1.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"}}]}}),C1=r0({meta:{key:"agent-console.agent.update",version:"1.0.0",stability:"stable",owners:[...z0],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:w1,output:e({name:"UpdateAgentOutput",fields:{id:{type:C.String_unsecure(),isOptional:!1},name:{type:C.NonEmptyString(),isOptional:!1},status:{type:t,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:[...z0],tags:["agent","updated"],when:"Agent is updated",payload:M0}],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"}}]}}),f1=w2({meta:{key:"agent-console.agent.get",version:"1.0.0",stability:"stable",owners:[...z0],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:e({name:"GetAgentInput",fields:{agentId:{type:C.String_unsecure(),isOptional:!1},includeTools:{type:C.Boolean(),isOptional:!0}}}),output:M1,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:[]}}]}}),g1=w2({meta:{key:"agent-console.agent.list",version:"1.0.0",stability:"stable",owners:[...z0],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:e({name:"ListAgentsInput",fields:{organizationId:{type:C.String_unsecure(),isOptional:!1},status:{type:t,isOptional:!0},modelProvider:{type:Y0,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:e({name:"ListAgentsOutput",fields:{items:{type:M0,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}}]}}),n4=r0({meta:{key:"agent-console.agent.assignTool",version:"1.0.0",stability:"stable",owners:[...z0],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:e({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:e({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"}}]}}),a4=r0({meta:{key:"agent-console.agent.removeTool",version:"1.0.0",stability:"stable",owners:[...z0],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:e({name:"RemoveToolFromAgentInput",fields:{agentId:{type:C.String_unsecure(),isOptional:!1},toolId:{type:C.String_unsecure(),isOptional:!1}}}),output:e({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 e4=d.length+1;async function Z5(Z){let{organizationId:D,status:H,modelProvider:q,search:X,limit:z=20,offset:Y=0}=Z,V=d.filter(($)=>$.organizationId===D);if(H)V=V.filter(($)=>$.status===H);if(q)V=V.filter(($)=>$.modelProvider===q);if(X){let $=X.toLowerCase();V=V.filter((Q)=>Q.name.toLowerCase().includes($)||Q.description?.toLowerCase().includes($)||Q.tags?.some((U)=>U.toLowerCase().includes($)))}let J=V.length;return{items:V.slice(Y,Y+z).map(($)=>({id:$.id,name:$.name,slug:$.slug,description:$.description,status:$.status,modelProvider:$.modelProvider,modelName:$.modelName,version:$.version,createdAt:$.createdAt})),total:J,hasMore:Y+z<J}}async function D5(Z){let D=d.find((q)=>q.id===Z.agentId);if(!D)throw Error("AGENT_NOT_FOUND");let H={...D,toolIds:["tool-1","tool-2"]};if(Z.includeTools)H.tools=E.slice(0,2).map((q)=>({id:q.id,name:q.name,slug:q.slug,description:q.description,category:q.category}));return H}async function q5(Z){if(d.some((H)=>H.organizationId===Z.organizationId&&H.slug===Z.slug))throw Error("SLUG_EXISTS");return{id:`agent-${e4++}`,name:Z.name,slug:Z.slug,status:"DRAFT"}}async function H5(Z){let D=d.find((H)=>H.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 j1,StabilityEnum as x1}from"@contractspec/lib.contracts-spec";var $5=j1({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:x1.Experimental},source:{type:"component",framework:"react",componentKey:"AgentListView",props:M0},targets:["react","markdown","application/json"],policy:{flags:["agent-console.enabled"]}}),Y5=j1({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:x1.Experimental},source:{type:"component",framework:"react",componentKey:"AgentDetailView"},targets:["react","markdown"],policy:{flags:["agent-console.enabled"]}}),J5=j1({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:x1.Experimental},source:{type:"component",framework:"react",componentKey:"AgentConsoleDashboard"},targets:["react","markdown"],policy:{flags:["agent-console.enabled"]}});import{registerDocBlocks as X5}from"@contractspec/lib.contracts-spec/docs";var F5=[{id:"docs.examples.agent-console.goal",title:"Agent Console — 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
2
  - Provides a regenerable agent operations surface with tool registry and run history.
3
3
  - Prevents drift between tool schemas, agent configs, and execution logs.
4
4
 
@@ -49,20 +49,20 @@ import{defineVisualization as W1,VisualizationRegistry as T4}from"@contractspec/
49
49
  ## Verification
50
50
  - Add fixtures for tool schema changes and run lifecycle.
51
51
  - Ensure Audit/Notifications remain wired for runs; metrics collection unchanged.
52
- - 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)
53
- 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
52
+ - Use Feature Flags to gate risky tools; default safe/off.`}];X5(F5);import{defineExample as Q5}from"@contractspec/lib.contracts-spec/examples";var U5=Q5({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"}}),z5=U5;import{defineEnum as i0}from"@contractspec/lib.schema";var Z0=i0("RunStatus",["QUEUED","IN_PROGRESS","COMPLETED","FAILED","CANCELLED","EXPIRED"]),T1=i0("RunStepType",["MESSAGE_CREATION","TOOL_CALL","TOOL_RESULT","ERROR"]),g0=i0("LogLevel",["DEBUG","INFO","WARN","ERROR"]),y1=i0("Granularity",["hour","day","week","month"]);import{defineSchemaModel as G0,ScalarTypeEnum as k}from"@contractspec/lib.schema";var d1=G0({name:"RunInput",description:"Input data for agent execution",fields:{message:{type:k.NonEmptyString(),isOptional:!1},context:{type:k.JSONObject(),isOptional:!0}}}),u0=G0({name:"RunStep",description:"Individual step within a run",fields:{id:{type:k.String_unsecure(),isOptional:!1},stepNumber:{type:k.Int_unsecure(),isOptional:!1},type:{type:T1,isOptional:!1},toolId:{type:k.String_unsecure(),isOptional:!0},toolName:{type:k.String_unsecure(),isOptional:!0},input:{type:k.JSONObject(),isOptional:!0},output:{type:k.JSONObject(),isOptional:!0},status:{type:Z0,isOptional:!1},errorMessage:{type:k.String_unsecure(),isOptional:!0},tokensUsed:{type:k.Int_unsecure(),isOptional:!1,defaultValue:0},durationMs:{type:k.Int_unsecure(),isOptional:!0},startedAt:{type:k.DateTime(),isOptional:!1},completedAt:{type:k.DateTime(),isOptional:!0}}}),l0=G0({name:"RunLog",description:"Execution log entry",fields:{id:{type:k.String_unsecure(),isOptional:!1},stepId:{type:k.String_unsecure(),isOptional:!0},level:{type:g0,isOptional:!1},message:{type:k.String_unsecure(),isOptional:!1},data:{type:k.JSONObject(),isOptional:!0},source:{type:k.String_unsecure(),isOptional:!0},traceId:{type:k.String_unsecure(),isOptional:!0},spanId:{type:k.String_unsecure(),isOptional:!0},timestamp:{type:k.DateTime(),isOptional:!1}}}),h2=G0({name:"RunAgentRef",description:"Agent reference in a run",fields:{id:{type:k.String_unsecure(),isOptional:!1},name:{type:k.NonEmptyString(),isOptional:!1},modelProvider:{type:k.String_unsecure(),isOptional:!1},modelName:{type:k.String_unsecure(),isOptional:!1}}}),E1=G0({name:"Run",description:"Agent execution instance",fields:{id:{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},sessionId:{type:k.String_unsecure(),isOptional:!0},input:{type:k.JSONObject(),isOptional:!1},output:{type:k.JSONObject(),isOptional:!0},status:{type:Z0,isOptional:!1},errorMessage:{type:k.String_unsecure(),isOptional:!0},errorCode:{type:k.String_unsecure(),isOptional:!0},totalTokens:{type:k.Int_unsecure(),isOptional:!1,defaultValue:0},promptTokens:{type:k.Int_unsecure(),isOptional:!1,defaultValue:0},completionTokens:{type:k.Int_unsecure(),isOptional:!1,defaultValue:0},totalIterations:{type:k.Int_unsecure(),isOptional:!1,defaultValue:0},durationMs:{type:k.Int_unsecure(),isOptional:!0},estimatedCostUsd:{type:k.Float_unsecure(),isOptional:!0},queuedAt:{type:k.DateTime(),isOptional:!1},startedAt:{type:k.DateTime(),isOptional:!0},completedAt:{type:k.DateTime(),isOptional:!0},metadata:{type:k.JSONObject(),isOptional:!0},steps:{type:u0,isArray:!0,isOptional:!0},logs:{type:l0,isArray:!0,isOptional:!0},agent:{type:h2,isOptional:!0}}}),K0=G0({name:"RunSummary",description:"Summary of a run for list views",fields:{id:{type:k.String_unsecure(),isOptional:!1},agentId:{type:k.String_unsecure(),isOptional:!1},agentName:{type:k.NonEmptyString(),isOptional:!1},status:{type:Z0,isOptional:!1},totalTokens:{type:k.Int_unsecure(),isOptional:!1},durationMs:{type:k.Int_unsecure(),isOptional:!0},estimatedCostUsd:{type:k.Float_unsecure(),isOptional:!0},queuedAt:{type:k.DateTime(),isOptional:!1},completedAt:{type:k.DateTime(),isOptional:!0}}}),m1=G0({name:"TimelineDataPoint",description:"Timeline data point for metrics",fields:{period:{type:k.String_unsecure(),isOptional:!1},runs:{type:k.Int_unsecure(),isOptional:!1},tokens:{type:k.Int_unsecure(),isOptional:!1},costUsd:{type:k.Float_unsecure(),isOptional:!1},avgDurationMs:{type:k.Float_unsecure(),isOptional:!1}}});import{defineCommand as C2,defineQuery as j0}from"@contractspec/lib.contracts-spec/operations";import{defineSchemaModel as r,ScalarTypeEnum as N}from"@contractspec/lib.schema";var D0=["@agent-console-team"],p1=C2({meta:{key:"agent.run.execute",version:"1.0.0",stability:"stable",owners:[...D0],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:r({name:"ExecuteAgentInput",fields:{agentId:{type:N.String_unsecure(),isOptional:!1},input:{type:d1,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:r({name:"ExecuteAgentOutput",fields:{runId:{type:N.String_unsecure(),isOptional:!1},status:{type:Z0,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:[...D0],tags:["run","started"],when:"Run is queued",payload:K0}],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}}]}}),f2=C2({meta:{key:"agent.run.cancel",version:"1.0.0",stability:"stable",owners:[...D0],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:r({name:"CancelRunInput",fields:{runId:{type:N.String_unsecure(),isOptional:!1},reason:{type:N.String_unsecure(),isOptional:!0}}}),output:r({name:"CancelRunOutput",fields:{success:{type:N.Boolean(),isOptional:!1},status:{type:Z0,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:[...D0],tags:["run","cancelled"],when:"Run is cancelled",payload:K0}],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"}}]}}),g2=j0({meta:{key:"agent.run.get",version:"1.0.0",stability:"stable",owners:[...D0],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:r({name:"GetRunInput",fields:{runId:{type:N.String_unsecure(),isOptional:!1},includeSteps:{type:N.Boolean(),isOptional:!0},includeLogs:{type:N.Boolean(),isOptional:!0}}}),output:E1,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:[]}}]}}),S1=j0({meta:{key:"agent.run.list",version:"1.0.0",stability:"stable",owners:[...D0],tags:["run","list"],description:"Lists runs with optional filtering.",goal:"Browse and search run history.",context:"Run history/dashboard view."},io:{input:r({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:Z0,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:r({name:"ListRunsOutput",fields:{items:{type:K0,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}}]}}),G5=j0({meta:{key:"agent.run.getSteps",version:"1.0.0",stability:"stable",owners:[...D0],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:r({name:"GetRunStepsInput",fields:{runId:{type:N.String_unsecure(),isOptional:!1}}}),output:r({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:[]}}]}}),K5=j0({meta:{key:"agent.run.getLogs",version:"1.0.0",stability:"stable",owners:[...D0],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:r({name:"GetRunLogsInput",fields:{runId:{type:N.String_unsecure(),isOptional:!1},level:{type:g0,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:r({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}}]}}),j2=j0({meta:{key:"agent.run.getMetrics",version:"1.0.0",stability:"stable",owners:[...D0],tags:["run","metrics"],description:"Retrieves aggregated metrics for runs within a time period.",goal:"Monitor and analyze agent usage.",context:"Analytics dashboard."},io:{input:r({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:y1,isOptional:!0,defaultValue:"day"}}}),output:r({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 V0=o1("ToolCategory",["RETRIEVAL","COMPUTATION","COMMUNICATION","INTEGRATION","UTILITY","CUSTOM"]),q0=o1("ToolStatus",["DRAFT","ACTIVE","DEPRECATED","DISABLED"]),s0=o1("ImplementationType",["http","function","workflow"]);import{defineSchemaModel as t0,ScalarTypeEnum as O}from"@contractspec/lib.schema";var c1=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:V0,isOptional:!1},status:{type:q0,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:V0,isOptional:!1},status:{type:q0,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:V0,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}}}),i1=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:q0,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 u1,defineQuery as x2}from"@contractspec/lib.contracts-spec/operations";import{defineSchemaModel as P0,ScalarTypeEnum as x}from"@contractspec/lib.schema";var I0=["@agent-console-team"],T2=u1({meta:{key:"agent.tool.create",version:"1.0.0",stability:"stable",owners:[...I0],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:P0({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:q0,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:[...I0],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"}}]}}),y2=u1({meta:{key:"agent.tool.update",version:"1.0.0",stability:"stable",owners:[...I0],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:i1,output:P0({name:"UpdateToolOutput",fields:{id:{type:x.String_unsecure(),isOptional:!1},name:{type:x.NonEmptyString(),isOptional:!1},status:{type:q0,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:[...I0],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"}}]}}),d2=x2({meta:{key:"agent.tool.get",version:"1.0.0",stability:"stable",owners:[...I0],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:P0({name:"GetToolInput",fields:{toolId:{type:x.String_unsecure(),isOptional:!1}}}),output:c1,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"}}]}}),l1=x2({meta:{key:"agent.tool.list",version:"1.0.0",stability:"stable",owners:[...I0],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:P0({name:"ListToolsInput",fields:{organizationId:{type:x.String_unsecure(),isOptional:!1},category:{type:V0,isOptional:!0},status:{type:q0,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:P0({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}}]}}),E2=u1({meta:{key:"agent.tool.test",version:"1.0.0",stability:"stable",owners:[...I0],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:P0({name:"TestToolInput",fields:{toolId:{type:x.String_unsecure(),isOptional:!1},testInput:{type:x.JSONObject(),isOptional:!1}}}),output:P0({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 V5}from"@contractspec/lib.runtime-sandbox";var{generateId:m2}=V5;var p2={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 A5(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 S2(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 P5(Z){async function D(F){let{projectId:$,organizationId:Q,status:U,search:G,limit:K=20,offset:L=0}=F,W="WHERE projectId = ?",v=[$];if(Q)W+=" AND organizationId = ?",v.push(Q);if(U&&U!=="all")W+=" AND status = ?",v.push(U);if(G)W+=" AND (name LIKE ? OR description LIKE ?)",v.push(`%${G}%`,`%${G}%`);let B=(await Z.query(`SELECT COUNT(*) as count FROM agent_definition ${W}`,v)).rows[0]?.count??0,b=(await Z.query(`SELECT * FROM agent_definition ${W} ORDER BY createdAt DESC LIMIT ? OFFSET ?`,[...v,K,L])).rows;return{items:b.map(n0),total:B,hasMore:L+b.length<B}}async function H(F){let $=(await Z.query("SELECT * FROM agent_definition WHERE id = ?",[F])).rows;return $[0]?n0($[0]):null}async function q(F,$){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)
53
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[Q,$.projectId,$.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 X(F){let $=new Date().toISOString(),Q=["updatedAt = ?"],U=[$];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:$,organizationId:Q,category:U,status:G,search:K,limit:L=50,offset:W=0}=F,v="WHERE projectId = ?",I=[$];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,c=(await Z.query(`SELECT * FROM agent_tool ${v} ORDER BY name ASC LIMIT ? OFFSET ?`,[...I,L,W])).rows;return{items:c.map(A5),total:b,hasMore:W+c.length<b}}async function Y(F){let{projectId:$,agentId:Q,status:U,sortBy:G,sortDirection:K="desc",limit:L=20,offset:W=0}=F,v="WHERE r.projectId = ?",I=[$];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,c=G?p2[G]:p2.queuedAt,p0=K==="asc"?"ASC":"DESC",p=(await Z.query(`SELECT r.*, a.name as agentName
54
54
  FROM agent_run r
55
55
  LEFT JOIN agent_definition a ON r.agentId = a.id
56
56
  ${v}
57
- 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
57
+ ORDER BY ${c} ${p0}, r.queuedAt DESC LIMIT ? OFFSET ?`,[...I,L,W])).rows;return{items:p.map((l)=>S2(l,l.agentName)),total:b,hasMore:W+p.length<b}}async function V(F){let $="WHERE projectId = ?",Q=[F.projectId];if(F.agentId)$+=" AND agentId = ?",Q.push(F.agentId);if(F.startDate)$+=" AND queuedAt >= ?",Q.push(F.startDate.toISOString());if(F.endDate)$+=" AND queuedAt <= ?",Q.push(F.endDate.toISOString());let G=(await Z.query(`SELECT
58
58
  COUNT(*) as totalRuns,
59
59
  SUM(CASE WHEN status = 'COMPLETED' THEN 1 ELSE 0 END) as completedRuns,
60
60
  AVG(CASE WHEN status = 'COMPLETED' THEN durationMs ELSE NULL END) as avgDuration,
61
61
  COALESCE(SUM(totalTokens), 0) as totalTokens,
62
62
  COALESCE(SUM(estimatedCostUsd), 0) as totalCost
63
- 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)
64
- 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:"▶"},{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:"▶️"})," 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:"⏸️"})," 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...":"▶️ 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️",CUSTOM:"⚙️"};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:"▶"},{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(`
65
- `)}}};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(`
66
- `)}}};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(`
67
- `)}}};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"?"✅":A.status==="DEPRECATED"?"⚠️":"❌";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(`
68
- `)}}};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};
63
+ FROM agent_run ${$}`,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 J(F){let $=await H(F.agentId);if(!$)throw Error("AGENT_NOT_FOUND");if($.status!=="ACTIVE")throw Error("AGENT_NOT_ACTIVE");let Q=m2("run"),U=new Date().toISOString(),G=F.context?.projectId??$.projectId;await Z.execute(`INSERT INTO agent_run (id, projectId, agentId, status, input, totalTokens, promptTokens, completionTokens, estimatedCostUsd, queuedAt)
64
+ 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 S2(K[0],K[0].agentName)}return{listAgents:D,getAgent:H,createAgent:q,updateAgent:X,executeAgent:J,listTools:z,listRuns:Y,getRunMetrics:V}}var S=[{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 I5=S.length+1;async function k5(Z){let{agentId:D,status:H,limit:q=20,offset:X=0}=Z,z=[...S];if(D)z=z.filter((J)=>J.agentId===D);if(H)z=z.filter((J)=>J.status===H);let Y=z.length;return{items:z.slice(X,X+q).map((J)=>{let F=d.find(($)=>$.id===J.agentId);return{id:J.id,agentId:J.agentId,agentName:F?.name??"Unknown",status:J.status,totalTokens:J.totalTokens,durationMs:J.durationMs,estimatedCostUsd:J.estimatedCostUsd,queuedAt:J.queuedAt,completedAt:J.completedAt}}),total:Y,hasMore:X+q<Y}}async function W5(Z){let D=S.find((q)=>q.id===Z.runId);if(!D)throw Error("RUN_NOT_FOUND");let H=d.find((q)=>q.id===D.agentId);return{...D,agent:H?{id:H.id,name:H.name,modelProvider:H.modelProvider,modelName:H.modelName}:void 0,steps:Z.includeSteps?D.steps:void 0,logs:Z.includeLogs?D.logs:void 0}}async function B5(Z){let D=d.find((H)=>H.id===Z.agentId);if(!D)throw Error("AGENT_NOT_FOUND");if(D.status!=="ACTIVE")throw Error("AGENT_NOT_ACTIVE");return{runId:`run-${I5++}`,status:"QUEUED",estimatedWaitMs:500}}async function v5(Z){let D=S.find((H)=>H.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 _5=E.length+1;async function N5(Z){let{organizationId:D,category:H,status:q,search:X,limit:z=20,offset:Y=0}=Z,V=E.filter(($)=>$.organizationId===D);if(H)V=V.filter(($)=>$.category===H);if(q)V=V.filter(($)=>$.status===q);if(X){let $=X.toLowerCase();V=V.filter((Q)=>Q.name.toLowerCase().includes($)||Q.description.toLowerCase().includes($))}let J=V.length;return{items:V.slice(Y,Y+z).map(($)=>({id:$.id,name:$.name,slug:$.slug,description:$.description,category:$.category,status:$.status,version:$.version,createdAt:$.createdAt})),total:J,hasMore:Y+z<J}}async function L5(Z){let D=E.find((H)=>H.id===Z.toolId);if(!D)throw Error("TOOL_NOT_FOUND");return D}async function R5(Z){if(E.some((H)=>H.organizationId===Z.organizationId&&H.slug===Z.slug))throw Error("SLUG_EXISTS");return{id:`tool-${_5++}`,name:Z.name,slug:Z.slug,status:"DRAFT"}}async function O5(Z){let D=E.find((H)=>H.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 M5(Z){if(!E.find((H)=>H.id===Z.toolId))throw Error("TOOL_NOT_FOUND");return await new Promise((H)=>setTimeout(H,100)),{success:!0,output:{result:"Test successful",input:Z.testInput},durationMs:100}}import{defineEntity as s1,defineEntityEnum as t1,field as _,index as k0}from"@contractspec/lib.schema";var o2=t1({name:"RunStatus",values:["QUEUED","IN_PROGRESS","COMPLETED","FAILED","CANCELLED","EXPIRED"],description:"Status of an agent run"}),c2=t1({name:"RunStepType",values:["MESSAGE_CREATION","TOOL_CALL","TOOL_RESULT","ERROR"],description:"Type of run step"}),r2=t1({name:"LogLevel",values:["DEBUG","INFO","WARN","ERROR"],description:"Log level"}),b5=s1({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:[k0.on(["organizationId","agentId","queuedAt"]),k0.on(["organizationId","status"]),k0.on(["agentId","status"]),k0.on(["sessionId"])],enums:[o2]}),w5=s1({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:[k0.on(["runId","stepNumber"])],enums:[c2]}),h5=s1({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:[k0.on(["runId","timestamp"]),k0.on(["runId","level"])],enums:[r2]});import{defineEvent as W0}from"@contractspec/lib.contracts-spec";import{defineEnum as C5,defineSchemaModel as B0,ScalarTypeEnum as P}from"@contractspec/lib.schema";var v0=["@agent-console-team"],f5=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}}}),g5=W0({meta:{key:"agent.run.started",version:"1.0.0",description:"An agent run was started.",stability:"stable",owners:[...v0],tags:["run","started"]},payload:f5}),j5=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}}}),x5=W0({meta:{key:"agent.run.completed",version:"1.0.0",description:"An agent run completed successfully.",stability:"stable",owners:[...v0],tags:["run","completed"]},payload:j5}),T5=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}}}),y5=W0({meta:{key:"agent.run.failed",version:"1.0.0",description:"An agent run encountered an error.",stability:"stable",owners:[...v0],tags:["run","failed"]},payload:T5}),d5=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}}}),E5=W0({meta:{key:"agent.run.cancelled",version:"1.0.0",description:"An agent run was cancelled by the user.",stability:"stable",owners:[...v0],tags:["run","cancelled"]},payload:d5}),m5=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}}}),p5=W0({meta:{key:"agent.run.toolInvoked",version:"1.0.0",description:"A tool was invoked during an agent run.",stability:"stable",owners:[...v0],tags:["run","tool","invoked"]},payload:m5}),S5=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}}}),o5=W0({meta:{key:"agent.run.toolCompleted",version:"1.0.0",description:"A tool invocation completed during an agent run.",stability:"stable",owners:[...v0],tags:["run","tool","completed"]},payload:S5}),c5=C5("MessageType",["assistant","system"]),r5=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:c5,isOptional:!1},content:{type:P.String_unsecure(),isOptional:!1},tokensUsed:{type:P.Int_unsecure(),isOptional:!1},generatedAt:{type:P.DateTime(),isOptional:!1}}}),i5=W0({meta:{key:"agent.run.messageGenerated",version:"1.0.0",description:"An agent generated a message during a run.",stability:"stable",owners:[...v0],tags:["run","message","generated"]},payload:r5});import{definePresentation as i2,StabilityEnum as u2}from"@contractspec/lib.contracts-spec";var u5=i2({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:u2.Experimental},source:{type:"component",framework:"react",componentKey:"RunListView",props:K0},targets:["react","markdown","application/json"],policy:{flags:["agent-console.enabled"]}}),l5=i2({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:u2.Experimental},source:{type:"component",framework:"react",componentKey:"RunDetailView"},targets:["react","markdown"],policy:{flags:["agent-console.enabled"]}});var J0="demo-org",a0="agent-console-demo";function x0(Z){return Z.toLowerCase().trim().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")}function T0(Z){return{...Z}}function l2(Z){return{...Z}}function n1(Z){return{...Z}}function s2(){let Z=0,D=Date.parse("2026-03-20T09:00:00.000Z");return()=>new Date(D+Z++*60000)}function s5(Z){return Z.toLowerCase()}function t5(Z){return Z==="IN_PROGRESS"?"RUNNING":Z}function t2(Z,D){let H=d.map((Y)=>({id:Y.id,projectId:Z,organizationId:D,name:Y.name,slug:Y.slug,description:Y.description,modelProvider:s5(Y.modelProvider),modelName:Y.modelName,systemPrompt:Y.systemPrompt,temperature:typeof Y.modelConfig?.temperature==="number"?Y.modelConfig.temperature:0.4,maxTokens:8192,status:Y.status,createdAt:Y.createdAt,updatedAt:Y.updatedAt})),q=E.map((Y)=>({id:Y.id,projectId:Z,organizationId:D,name:Y.name,description:Y.description,version:Y.version,category:Y.category,status:Y.status,inputSchema:JSON.stringify(Y.parametersSchema),outputSchema:Y.outputSchema?JSON.stringify(Y.outputSchema):void 0,endpoint:typeof Y.implementationConfig?.url==="string"?Y.implementationConfig.url:void 0,createdAt:Y.createdAt,updatedAt:Y.updatedAt})),X=new Map(H.map((Y)=>[Y.id,Y.name])),z=S.map((Y)=>({id:Y.id,projectId:Z,agentId:Y.agentId,agentName:X.get(Y.agentId)??Y.agentName??"Unknown agent",status:t5(Y.status),input:JSON.stringify(Y.input),output:Y.output?JSON.stringify(Y.output):void 0,totalTokens:Y.totalTokens,promptTokens:Y.promptTokens,completionTokens:Y.completionTokens,estimatedCostUsd:Y.estimatedCostUsd??0,durationMs:Y.durationMs,errorMessage:Y.errorMessage,queuedAt:Y.queuedAt,startedAt:Y.startedAt,completedAt:Y.completedAt}));return{agents:H,tools:q,runs:z}}function n2(Z){let D=Z.length,H=Z.filter((X)=>X.status==="COMPLETED").length,q=Z.map((X)=>X.durationMs).filter((X)=>typeof X==="number");return{totalRuns:D,successRate:D===0?0:H/D,averageDurationMs:q.length===0?0:Math.round(q.reduce((X,z)=>X+z,0)/q.length),totalTokens:Z.reduce((X,z)=>X+z.totalTokens,0),totalCostUsd:Z.reduce((X,z)=>X+z.estimatedCostUsd,0)}}function a1(Z){let D=Z.projectId,H=Z.organizationId??J0,q=Z.now??s2(),X=t2(D,H),z=X.agents.length+1,Y=X.runs.length+1,V=(J)=>{let F=J==="agent"?z++:Y++;return Z.idFactory?.(J,F)??`${J}-demo-${F}`};return{async listAgents(J){let F=X.agents.filter((G)=>G.projectId===J.projectId).filter((G)=>!J.organizationId||G.organizationId===J.organizationId).filter((G)=>!J.status||J.status==="all"||G.status===J.status).filter((G)=>{if(!J.search)return!0;let K=J.search.toLowerCase();return G.name.toLowerCase().includes(K)||(G.description??"").toLowerCase().includes(K)}).sort((G,K)=>K.updatedAt.getTime()-G.updatedAt.getTime()),$=J.limit??20,Q=J.offset??0,U=F.slice(Q,Q+$).map(T0);return{items:U,total:F.length,hasMore:Q+U.length<F.length}},async getAgent(J){let F=X.agents.find(($)=>$.id===J);return F?T0(F):null},async createAgent(J,F){let $=J.name.trim(),Q=x0($);if(X.agents.find((L)=>L.projectId===F.projectId&&L.organizationId===F.organizationId&&(L.slug===Q||L.name.toLowerCase()===$.toLowerCase())))throw Error("AGENT_NAME_OR_SLUG_EXISTS");let G=q(),K={id:V("agent"),projectId:F.projectId,organizationId:F.organizationId,name:$,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:G,updatedAt:G};return X.agents.unshift(K),T0(K)},async updateAgent(J){let F=X.agents.find((Q)=>Q.id===J.id);if(!F)throw Error("AGENT_NOT_FOUND");let $=J.name;if($&&x0($)!==F.slug){if(X.agents.find((U)=>U.id!==F.id&&U.projectId===F.projectId&&U.organizationId===F.organizationId&&(U.slug===x0($)||U.name.toLowerCase()===$.toLowerCase())))throw Error("AGENT_NAME_OR_SLUG_EXISTS");F.slug=x0($),F.name=$}if(J.description!==void 0)F.description=J.description;if(J.status)F.status=J.status;return F.updatedAt=q(),T0(F)},async executeAgent(J){let F=X.agents.find((v)=>v.id===J.agentId);if(!F)throw Error("AGENT_NOT_FOUND");if(F.status!=="ACTIVE")throw Error("AGENT_NOT_ACTIVE");let $=q(),Q=q(),U=q(),G=2200+J.message.length*12,K=600+J.message.length*3,L=240+F.name.length*4,W={id:V("run"),projectId:J.context?.projectId??F.projectId,agentId:F.id,agentName:F.name,status:"COMPLETED",input:J.message,output:`Deterministic demo reply from ${F.name}: ${J.message}`,totalTokens:K+L,promptTokens:K,completionTokens:L,estimatedCostUsd:Number(((K+L)/1e6).toFixed(4)),durationMs:G,queuedAt:$,startedAt:Q,completedAt:U};return X.runs.unshift(W),n1(W)},async listTools(J){let F=X.tools.filter((G)=>G.projectId===J.projectId).filter((G)=>!J.organizationId||G.organizationId===J.organizationId).filter((G)=>!J.category||J.category==="all"||G.category===J.category).filter((G)=>!J.status||J.status==="all"||G.status===J.status).filter((G)=>{if(!J.search)return!0;let K=J.search.toLowerCase();return G.name.toLowerCase().includes(K)||(G.description??"").toLowerCase().includes(K)}).sort((G,K)=>G.name.localeCompare(K.name)),$=J.limit??50,Q=J.offset??0,U=F.slice(Q,Q+$).map(l2);return{items:U,total:F.length,hasMore:Q+U.length<F.length}},async listRuns(J){let F=X.runs.filter((G)=>G.projectId===J.projectId).filter((G)=>!J.agentId||G.agentId===J.agentId).filter((G)=>!J.status||J.status==="all"||G.status===J.status).sort((G,K)=>K.queuedAt.getTime()-G.queuedAt.getTime()),$=J.limit??20,Q=J.offset??0,U=F.slice(Q,Q+$).map(n1);return{items:U,total:F.length,hasMore:Q+U.length<F.length}},async getRunMetrics(J){let F=X.runs.filter(($)=>{if($.projectId!==J.projectId)return!1;if(J.agentId&&$.agentId!==J.agentId)return!1;if(J.startDate&&$.queuedAt<J.startDate)return!1;if(J.endDate&&$.queuedAt>J.endDate)return!1;return!0});return n2(F)}}}async function a2(Z,D){let H=D.organizationId??J0,[q,X,z]=await Promise.all([Z.listAgents({projectId:D.projectId,organizationId:H,limit:10}),Z.listRuns({projectId:D.projectId,limit:10}),Z.listTools({projectId:D.projectId,organizationId:H,limit:10})]);return{agents:q.items,runs:X.items,tools:z.items,summary:{totalAgents:q.total,totalRuns:X.total,totalTools:z.total}}}async function n5(){let Z=a1({projectId:a0});return a2(Z,{projectId:a0})}import{defineEntity as a5,defineEntityEnum as Z2,field as T,index as e1}from"@contractspec/lib.schema";var e2=Z2({name:"ToolCategory",values:["RETRIEVAL","COMPUTATION","COMMUNICATION","INTEGRATION","UTILITY","CUSTOM"],description:"Category of tool"}),Z4=Z2({name:"ToolStatus",values:["DRAFT","ACTIVE","DEPRECATED","DISABLED"],description:"Status of tool"}),D4=Z2({name:"ImplementationType",values:["http","function","workflow"],description:"How the tool is implemented"}),e5=a5({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,Z4,D4]});import{defineEvent as D2}from"@contractspec/lib.contracts-spec";import{defineSchemaModel as q2,ScalarTypeEnum as j}from"@contractspec/lib.schema";var H2=["@agent-console-team"],ZZ=q2({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}}}),DZ=D2({meta:{key:"agent.tool.created",version:"1.0.0",description:"A new AI tool was created.",stability:"stable",owners:[...H2],tags:["tool","created"]},payload:ZZ}),qZ=q2({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}}}),HZ=D2({meta:{key:"agent.tool.updated",version:"1.0.0",description:"An AI tool configuration was updated.",stability:"stable",owners:[...H2],tags:["tool","updated"]},payload:qZ}),$Z=q2({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}}}),YZ=D2({meta:{key:"agent.tool.statusChanged",version:"1.0.0",description:"An AI tool status was changed (activated, deprecated, disabled).",stability:"stable",owners:[...H2],tags:["tool","status"]},payload:$Z});import{definePresentation as q4,StabilityEnum as H4}from"@contractspec/lib.contracts-spec";var JZ=q4({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:H4.Experimental},source:{type:"component",framework:"react",componentKey:"ToolListView",props:A0},targets:["react","markdown","application/json"],policy:{flags:["agent-console.enabled"]}}),XZ=q4({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:H4.Experimental},source:{type:"component",framework:"react",componentKey:"ToolDetailView"},targets:["react","markdown"],policy:{flags:["agent-console.enabled"]}});var $4=[{id:"runs",label:"Runs",icon:"▶"},{id:"agents",label:"Agents",icon:"\uD83E\uDD16"},{id:"tools",label:"Tools",icon:"\uD83D\uDD27"},{id:"metrics",label:"Metrics",icon:"\uD83D\uDCCA"}];function Y4(Z){let D=Z.filter((z)=>z.status==="COMPLETED").length,H=Z.reduce((z,Y)=>z+Y.totalTokens,0),q=Z.reduce((z,Y)=>z+(Y.estimatedCostUsd??0),0),X=Z.map((z)=>z.durationMs).filter((z)=>typeof z==="number");return{averageDurationMs:X.length>0?X.reduce((z,Y)=>z+Y,0)/X.length:0,completedRuns:D,successRate:Z.length>0?D/Z.length:0,totalCostUsd:q,totalRuns:Z.length,totalTokens:H}}function e0(Z){if(Z<1000)return Z.toString();if(Z<1e6)return`${(Z/1000).toFixed(1)}K`;return`${(Z/1e6).toFixed(2)}M`}function J4(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 X4(Z){return new Intl.DateTimeFormat("en-US",{dateStyle:"medium",timeStyle:"short"}).format(Z)}function F4(Z){if(typeof document>"u")return{onPress:Z};return{onClick:Z}}import{Badge as FZ}from"@contractspec/lib.ui-kit-web/ui/badge";import{Card as QZ,CardContent as UZ}from"@contractspec/lib.ui-kit-web/ui/card";import{Box as zZ,HStack as Q4,VStack as GZ}from"@contractspec/lib.ui-kit-web/ui/stack";import{Text as Z1}from"@contractspec/lib.ui-kit-web/ui/text";import{jsx as H0,jsxs as $2}from"react/jsx-runtime";function D1({getKey:Z,items:D,renderItem:H}){return H0(Q4,{gap:"none",align:"stretch",className:"flex-wrap",children:D.map((q)=>H0(zZ,{gap:"none",className:"flex w-full min-w-0 p-1.5 sm:w-1/2 lg:w-1/4",children:H(q)},Z(q)))})}function Y2({description:Z,name:D,status:H,subtitle:q}){return H0(QZ,{className:"h-full w-full",children:$2(UZ,{className:"flex flex-col gap-2 pt-6",children:[$2(Q4,{justify:"between",align:"start",children:[$2(GZ,{gap:"xs",className:"flex-1",children:[H0(Z1,{className:"font-semibold text-lg",children:D}),H0(Z1,{className:"text-muted-foreground text-sm",children:q})]}),H0(q1,{status:H})]}),H0(Z1,{className:"text-muted-foreground text-sm",children:Z})]})})}function q1({status:Z}){return H0(FZ,{variant:Z==="FAILED"||Z==="CANCELLED"?"destructive":Z==="ACTIVE"||Z==="COMPLETED"?"secondary":"outline",children:H0(Z1,{className:"font-semibold text-xs",children:Z})})}import{Card as U4,CardContent as z4,CardHeader as KZ,CardTitle as VZ}from"@contractspec/lib.ui-kit-web/ui/card";import{VStack as AZ}from"@contractspec/lib.ui-kit-web/ui/stack";import{Text as X0}from"@contractspec/lib.ui-kit-web/ui/text";import{jsx as i,jsxs as _0}from"react/jsx-runtime";function G4({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:e0(Z.totalTokens),hint:"This period"},{label:"Total Cost",value:`$${Z.totalCostUsd.toFixed(2)}`,hint:"This period"}];return i(D1,{items:D,getKey:(H)=>H.label,renderItem:(H)=>i(U4,{className:"h-full w-full",children:_0(z4,{className:"flex flex-col gap-1 pt-6",children:[i(X0,{className:"text-muted-foreground text-sm",children:H.label}),i(X0,{className:"font-bold text-2xl",children:H.value}),i(X0,{className:"text-muted-foreground text-sm",children:H.hint})]})})})}function K4({agents:Z}){return i(D1,{items:Z,getKey:(D)=>D.id,renderItem:(D)=>i(Y2,{description:D.description,name:D.name,status:D.status,subtitle:`${D.modelProvider} / ${D.modelName}`})})}function V4({tools:Z}){return i(D1,{items:Z,getKey:(D)=>D.id,renderItem:(D)=>i(Y2,{description:D.description,name:D.name,status:D.status,subtitle:`${D.category} / ${D.implementationType}`})})}function A4({metrics:Z}){return _0(AZ,{gap:"md",children:[i(X0,{className:"font-semibold text-lg",children:"Usage Analytics"}),_0(U4,{children:[i(KZ,{children:i(VZ,{children:i(X0,{children:"Run Outcomes"})})}),_0(z4,{className:"flex flex-col gap-3",children:[_0(X0,{children:["Completed: ",Z.completedRuns]}),_0(X0,{children:["Failed: ",Z.totalRuns-Z.completedRuns]}),_0(X0,{children:["Average duration: ",(Z.averageDurationMs/1000).toFixed(1),"s"]})]})]})]})}import{useContractTable as PZ}from"@contractspec/lib.presentation-runtime-react";import{Card as IZ,CardContent as kZ}from"@contractspec/lib.ui-kit-web/ui/card";import{DataTable as WZ}from"@contractspec/lib.ui-kit-web/ui/data-table";import{VStack as BZ}from"@contractspec/lib.ui-kit-web/ui/stack";import{Text as H1}from"@contractspec/lib.ui-kit-web/ui/text";import{useMemo as vZ}from"react";import{jsx as F0,jsxs as _Z}from"react/jsx-runtime";function P4({runs:Z}){let D=vZ(()=>[{id:"queuedAt",header:"Run",label:"Run",accessor:(q)=>q.queuedAt.getTime(),cell:({item:q})=>_Z(BZ,{gap:"xs",children:[F0(H1,{className:"font-mono text-sm",children:q.id}),F0(H1,{className:"text-muted-foreground text-xs",children:X4(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})=>e0(Number(q??0)),align:"right",size:120,canSort:!0},{id:"durationMs",header:"Duration",label:"Duration",accessorKey:"durationMs",cell:({value:q})=>J4(typeof q==="number"?q:void 0),align:"right",size:130,canHide:!0}],[]),H=PZ({data:Z,columns:D,initialState:{pagination:{pageIndex:0,pageSize:5}},getRowId:(q)=>q.id});return F0(WZ,{controller:H,toolbar:F0(H1,{className:"text-muted-foreground text-sm",children:"Run History"}),emptyState:F0(IZ,{children:F0(kZ,{className:"pt-6",children:F0(H1,{className:"text-muted-foreground",children:"No runs yet"})})})})}import{Tabs as NZ,TabsContent as $1,TabsList as LZ,TabsTrigger as RZ}from"@contractspec/lib.design-system";import{createVisualizationModel as OZ}from"@contractspec/lib.presentation-runtime-core";import{Button as MZ}from"@contractspec/lib.ui-kit-web/ui/button";import{Card as bZ,CardContent as wZ,CardDescription as hZ,CardHeader as CZ,CardTitle as fZ}from"@contractspec/lib.ui-kit-web/ui/card";import{HStack as gZ,VStack as Y1}from"@contractspec/lib.ui-kit-web/ui/stack";import{Text as y0}from"@contractspec/lib.ui-kit-web/ui/text";import{Visualization as jZ}from"@contractspec/lib.ui-kit-web/ui/visualization";import{useMemo as I4}from"react";import{jsx as g,jsxs as Q0}from"react/jsx-runtime";function k4({agents:Z=d,runs:D=S,showHeaderAction:H=!0,tools:q=E}){let X=I4(()=>Y4(D),[D]),z=I4(()=>L0(D),[D]);return Q0(Y1,{gap:"xl",align:"stretch",children:[Q0(gZ,{justify:"between",align:"center",className:"gap-3",children:[g(y0,{className:"font-bold text-2xl",children:"AI Agent Console"}),H?g(MZ,{...F4(()=>{return}),children:g(y0,{children:"+ New Agent"})}):null]}),g(G4,{metrics:X}),Q0(Y1,{gap:"md",children:[Q0(Y1,{gap:"xs",children:[g(y0,{className:"font-semibold text-lg",children:"Operational Visualizations"}),g(y0,{className:"text-muted-foreground text-sm",children:"Contract-backed charts derived from recent run activity."})]}),g(Y1,{gap:"md",children:z.map((Y)=>Q0(bZ,{children:[Q0(CZ,{children:[g(fZ,{children:Y.title}),g(hZ,{children:Y.description})]}),g(wZ,{children:g(jZ,{height:Y.height,model:OZ(Y.spec,Y.data)})})]},Y.key))})]}),Q0(NZ,{defaultValue:"runs",className:"w-full gap-4",children:[g(LZ,{className:"h-auto w-full flex-wrap",children:$4.map((Y)=>g(RZ,{value:Y.id,className:"min-h-8 min-w-24 flex-1",children:Q0(y0,{children:[Y.icon," ",Y.label]})},Y.id))}),g($1,{value:"runs",children:g(P4,{runs:D})}),g($1,{value:"agents",children:g(K4,{agents:Z})}),g($1,{value:"tools",children:g(V4,{tools:q})}),g($1,{value:"metrics",children:g(A4,{metrics:X})})]})]})}import{VisualizationCard as xZ,VisualizationGrid as TZ}from"@contractspec/lib.design-system";import{jsx as J1,jsxs as W4}from"react/jsx-runtime";function B4({runs:Z}){let D=L0(Z);return W4("section",{className:"space-y-3",children:[W4("div",{children:[J1("h3",{className:"font-semibold text-lg",children:"Operational Visualizations"}),J1("p",{className:"text-muted-foreground text-sm",children:"Contract-backed charts derived from recent run activity."})]}),J1(TZ,{children:D.map((H)=>J1(xZ,{data:H.data,description:H.description,height:H.height,spec:H.spec,title:H.title},H.key))})]})}import{useTemplateRuntime as yZ}from"@contractspec/lib.example-shared-ui";import{useCallback as dZ,useEffect as EZ,useMemo as mZ,useState as X1}from"react";function b0(Z={}){let{handlers:D,projectId:H}=yZ(),{agent:q}=D,[X,z]=X1(null),[Y,V]=X1(!0),[J,F]=X1(null),[$,Q]=X1(1),U=dZ(async()=>{V(!0),F(null);try{let K=await q.listAgents({projectId:H,search:Z.search,status:Z.status==="all"?void 0:Z.status,limit:Z.limit??20,offset:($-1)*(Z.limit??20)});z(K)}catch(K){F(K instanceof Error?K:Error("Unknown error"))}finally{V(!1)}},[q,H,Z.search,Z.status,Z.limit,$]);EZ(()=>{U()},[U]);let G=mZ(()=>{if(!X)return null;return{total:X.total,active:X.items.filter((K)=>K.status==="ACTIVE").length,paused:X.items.filter((K)=>K.status==="PAUSED").length,draft:X.items.filter((K)=>K.status==="DRAFT").length}},[X]);return{data:X,loading:Y,error:J,stats:G,page:$,refetch:U,nextPage:()=>Q((K)=>K+1),prevPage:()=>$>1&&Q((K)=>K-1)}}import{useTemplateRuntime as pZ}from"@contractspec/lib.example-shared-ui";import{useCallback as w0,useState as J2}from"react";function X2(Z,D){return Z instanceof Error?Z:Error(D)}function F2(Z={}){let{handlers:D,projectId:H}=pZ(),{agent:q}=D,[X,z]=J2({loading:!1,error:null,data:null}),[Y,V]=J2({loading:!1,error:null,data:null}),[J,F]=J2({loading:!1,error:null,data:null}),$=w0(async(W)=>{z({loading:!0,error:null,data:null});try{let v=await q.createAgent(W,{projectId:H,organizationId:J0});return z({loading:!1,error:null,data:v}),Z.onSuccess?.(),v}catch(v){let I=X2(v,"Failed to create agent");throw z({loading:!1,error:I,data:null}),Z.onError?.(I),I}},[q,H,Z]),Q=w0(async(W)=>{V({loading:!0,error:null,data:null});try{let v=await q.updateAgent(W);return V({loading:!1,error:null,data:v}),Z.onSuccess?.(),v}catch(v){let I=X2(v,"Failed to update agent");throw V({loading:!1,error:I,data:null}),Z.onError?.(I),I}},[q,Z]),U=w0(async(W)=>{return Q({id:W,status:"ACTIVE"})},[Q]),G=w0(async(W)=>{return Q({id:W,status:"PAUSED"})},[Q]),K=w0(async(W)=>{return Q({id:W,status:"ARCHIVED"})},[Q]),L=w0(async(W)=>{F({loading:!0,error:null,data:null});try{let v=await q.executeAgent({agentId:W.agentId,message:W.message,context:{projectId:H,organizationId:J0}});return F({loading:!1,error:null,data:v}),Z.onSuccess?.(),v}catch(v){let I=X2(v,"Failed to execute agent");throw F({loading:!1,error:I,data:null}),Z.onError?.(I),I}},[q,H,Z]);return{createAgent:$,updateAgent:Q,activateAgent:U,pauseAgent:G,archiveAgent:K,executeAgent:L,createState:X,updateState:Y,executeState:J,isLoading:X.loading||Y.loading||J.loading}}import{useTemplateRuntime as SZ}from"@contractspec/lib.example-shared-ui";import{useCallback as oZ,useEffect as cZ,useState as d0}from"react";function E0(Z={}){let{handlers:D,projectId:H}=SZ(),{agent:q}=D,[X,z]=d0(null),[Y,V]=d0(null),[J,F]=d0(!0),[$,Q]=d0(null),[U,G]=d0(0),K=Z.pageSize??Z.limit??20,L=Z.pageIndex??U,[W]=Z.sorting??[],v=oZ(async()=>{F(!0),Q(null);try{let[B,b]=await Promise.all([q.listRuns({projectId:H,agentId:Z.agentId,status:Z.status==="all"?void 0:Z.status,sortBy:W?.id,sortDirection:W?W.desc?"desc":"asc":void 0,limit:K,offset:L*K}),q.getRunMetrics({projectId:H,agentId:Z.agentId})]);z(B),V(b)}catch(B){Q(B instanceof Error?B:Error("Unknown error"))}finally{F(!1)}},[q,L,K,H,Z.agentId,Z.status,W?.desc,W?.id]);cZ(()=>{v()},[v]);let I=Z.pageIndex!==void 0;return{data:X,metrics:Y,loading:J,error:$,page:L+1,pageIndex:L,pageSize:K,refetch:v,nextPage:I?void 0:()=>G((B)=>B+1),prevPage:I?void 0:()=>G((B)=>Math.max(0,B-1))}}import{Button as n}from"@contractspec/lib.design-system";import{useState as F1}from"react";import{jsx as f,jsxs as m}from"react/jsx-runtime";function rZ(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 Q2({isOpen:Z,agent:D,onClose:H,onActivate:q,onPause:X,onArchive:z,onExecute:Y,isLoading:V=!1}){let[J,F]=F1("menu"),[$,Q]=F1(""),[U,G]=F1(null),[K,L]=F1(null),W=()=>{F("menu"),Q(""),G(null),L(null)},v=()=>{W(),H()},I=async()=>{if(!D)return;if(L(null),!$.trim()){L("Please enter a message");return}try{await Y(D.id,$.trim()),v()}catch(b){L(b instanceof Error?b.message:"Failed to execute agent")}},B=async(b)=>{if(!D)return;L(null);try{switch(b){case"activate":await q(D.id);break;case"pause":await X(D.id);break;case"archive":await z(D.id);break}v()}catch(c){L(c instanceof Error?c.message:`Failed to ${b} agent`)}};if(!Z||!D)return null;return m("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"}),m("div",{className:"relative z-10 w-full max-w-md rounded-xl border border-border bg-card p-6 shadow-xl",children:[m("div",{className:"mb-4 border-border border-b pb-4",children:[f("h2",{className:"font-semibold text-xl",children:D.name}),m("div",{className:"mt-1 flex items-center gap-2",children:[m("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 ${rZ(D.status)}`,children:D.status})]}),D.description&&f("p",{className:"mt-2 text-muted-foreground text-sm",children:D.description})]}),J==="menu"&&m("div",{className:"space-y-3",children:[D.status==="ACTIVE"&&m(n,{className:"w-full justify-start",variant:"ghost",onPress:()=>F("execute"),children:[f("span",{className:"mr-2",children:"▶️"})," Execute Agent"]}),(D.status==="DRAFT"||D.status==="PAUSED")&&m(n,{className:"w-full justify-start",variant:"ghost",onPress:()=>B("activate"),disabled:V,children:[f("span",{className:"mr-2",children:"\uD83D\uDFE2"})," Activate Agent"]}),D.status==="ACTIVE"&&m(n,{className:"w-full justify-start",variant:"ghost",onPress:()=>B("pause"),disabled:V,children:[f("span",{className:"mr-2",children:"⏸️"})," Pause Agent"]}),D.status!=="ARCHIVED"&&m(n,{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"&&m(n,{className:"w-full justify-start",variant:"ghost",onPress:()=>B("activate"),disabled:V,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(n,{className:"w-full",variant:"outline",onPress:v,children:"Close"})})]}),J==="execute"&&m("div",{className:"space-y-4",children:[m("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:$,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"})]}),K&&f("div",{className:"rounded-md bg-destructive/10 p-3 text-destructive text-sm",children:K}),m("div",{className:"flex justify-end gap-3 pt-2",children:[f(n,{variant:"ghost",onPress:()=>F("menu"),disabled:V,children:"Back"}),f(n,{onPress:I,disabled:V,children:V?"Executing...":"▶️ Execute"})]})]}),J==="confirm"&&U==="archive"&&m("div",{className:"space-y-4",children:[m("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}),m("div",{className:"flex justify-end gap-3 pt-2",children:[f(n,{variant:"ghost",onPress:()=>F("menu"),disabled:V,children:"Cancel"}),f(n,{onPress:()=>B("archive"),disabled:V,children:V?"Archiving...":"\uD83D\uDCE6 Archive"})]})]})]})]})}import{Button as v4,Input as iZ}from"@contractspec/lib.design-system";import{useState as h0}from"react";import{jsx as y,jsxs as a}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 z2({isOpen:Z,onClose:D,onSubmit:H,isLoading:q=!1}){let[X,z]=h0(""),[Y,V]=h0(""),[J,F]=h0("openai"),[$,Q]=h0("gpt-5.4"),[U,G]=h0(""),[K,L]=h0(null),W=U2.find((B)=>B.value===J),v=async(B)=>{if(B.preventDefault(),L(null),!X.trim()){L("Agent name is required");return}try{await H({name:X.trim(),description:Y.trim()||void 0,modelProvider:J,modelName:$,systemPrompt:U.trim()||void 0}),z(""),V(""),F("openai"),Q("gpt-5.4"),G(""),D()}catch(b){L(b instanceof Error?b.message:"Failed to create agent")}},I=(B)=>{F(B);let b=U2.find((c)=>c.value===B);if(b)Q(b.models[0])};if(!Z)return null;return a("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:(B)=>{if(B.key==="Enter"||B.key===" ")D()},"aria-label":"Close modal"}),a("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"}),a("form",{onSubmit:v,className:"space-y-4",children:[a("div",{children:[y("label",{htmlFor:"agent-name",className:"mb-1 block font-medium text-muted-foreground text-sm",children:"Agent Name *"}),y(iZ,{id:"agent-name",value:X,onChange:(B)=>z(B.target.value),placeholder:"e.g., Customer Support Bot",disabled:q})]}),a("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:Y,onChange:(B)=>V(B.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"})]}),a("div",{className:"flex gap-3",children:[a("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:J,onChange:(B)=>I(B.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:U2.map((B)=>y("option",{value:B.value,children:B.label},B.value))})]}),a("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:$,onChange:(B)=>Q(B.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:W?.models.map((B)=>y("option",{value:B,children:B},B))})]})]}),a("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:(B)=>G(B.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}),a("div",{className:"flex justify-end gap-3 pt-2",children:[y(v4,{type:"button",variant:"ghost",onPress:D,disabled:q,children:"Cancel"}),y(v4,{type:"submit",disabled:q,children:q?"Creating...":"Create Agent"})]})]})]})]})}import{Button as Q1,StatusChip as uZ}from"@contractspec/lib.design-system";import{HStack as K2,VStack as G2}from"@contractspec/lib.ui-kit-web/ui/stack";import{Text as N0}from"@contractspec/lib.ui-kit-web/ui/text";import{jsx as $0,jsxs as s}from"react/jsx-runtime";function V2(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 C0(Z){if(Z<1000)return Z.toString();if(Z<1e6)return`${(Z/1000).toFixed(1)}K`;return`${(Z/1e6).toFixed(2)}M`}function N4(Z){if(!Z)return"-";return`$${Z.toFixed(4)}`}function _4(Z){return JSON.stringify(Z??null,null,2)}function L4({run:Z}){return s(G2,{gap:"sm",className:"py-2",children:[s(K2,{justify:"between",className:"flex-wrap",children:[$0(uZ,{tone:V2(Z.status),label:Z.status}),s(N0,{className:"text-muted-foreground text-sm",children:["Queued ",Z.queuedAt.toLocaleString()]})]}),s(K2,{gap:"lg",className:"flex-wrap",children:[s(N0,{className:"text-muted-foreground text-sm",children:["Prompt ",C0(Z.promptTokens)]}),s(N0,{className:"text-muted-foreground text-sm",children:["Completion ",C0(Z.completionTokens)]}),s(N0,{className:"text-muted-foreground text-sm",children:["Duration ",A2(Z.durationMs)]})]}),s(G2,{gap:"xs",children:[$0(N0,{className:"font-medium text-sm",children:"Input"}),$0("pre",{className:"overflow-auto rounded-md bg-muted/40 p-3 text-xs",children:_4(Z.input)})]}),s(G2,{gap:"xs",children:[$0(N0,{className:"font-medium text-sm",children:"Output"}),$0("pre",{className:"overflow-auto rounded-md bg-muted/40 p-3 text-xs",children:_4(Z.output??Z.errorMessage??"Pending")})]})]})}function R4({controller:Z,totalRuns:D}){let H=Z.rows[0],q=Z.columns.find((Y)=>Y.id==="queuedAt"),X=Z.columns.find((Y)=>Y.id==="durationMs"),z=Z.columns.find((Y)=>Y.id==="estimatedCostUsd");return s(K2,{gap:"sm",className:"flex-wrap",children:[s(N0,{className:"text-muted-foreground text-sm",children:[D," runs"]}),$0(Q1,{variant:"outline",size:"sm",onPress:()=>H?.toggleExpanded?.(!H?.isExpanded),children:"Expand Latest Run"}),$0(Q1,{variant:"outline",size:"sm",onPress:()=>q?.toggleVisibility?.(!q?.visible),children:q?.visible?"Hide Time":"Show Time"}),$0(Q1,{variant:"outline",size:"sm",onPress:()=>X?.toggleVisibility?.(!X?.visible),children:X?.visible?"Hide Duration":"Show Duration"}),$0(Q1,{variant:"outline",size:"sm",onPress:()=>z?.toggleVisibility?.(!z?.visible),children:z?.visible?"Hide Cost":"Show Cost"})]})}import{StatusChip as lZ}from"@contractspec/lib.design-system";import{VStack as sZ}from"@contractspec/lib.ui-kit-web/ui/stack";import{Text as P2}from"@contractspec/lib.ui-kit-web/ui/text";import{jsx as U1,jsxs as tZ}from"react/jsx-runtime";function O4(){return[{id:"queuedAt",header:"Run",label:"Run",accessor:(Z)=>Z.queuedAt.getTime(),cell:({item:Z})=>tZ(sZ,{gap:"xs",children:[U1(P2,{className:"font-mono text-sm",children:Z.id.slice(-8)}),U1(P2,{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})=>U1(P2,{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 U1(lZ,{tone:V2(D),label:D})},size:150,canSort:!0,canResize:!0},{id:"totalTokens",header:"Tokens",label:"Tokens",accessorKey:"totalTokens",cell:({value:Z})=>C0(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})=>N4(typeof Z==="number"?Z:void 0),align:"right",size:140,canSort:!0,canHide:!0,canResize:!0}]}import{DataTable as nZ}from"@contractspec/lib.design-system";import{useContractTable as aZ}from"@contractspec/lib.presentation-runtime-react";import*as M4 from"react";import{jsx as z1}from"react/jsx-runtime";function b4({runs:Z,totalItems:D,pageIndex:H,pageSize:q,sorting:X,loading:z,onSortingChange:Y,onPaginationChange:V,onRunClick:J}){let F=M4.useMemo(()=>O4(),[]),$=aZ({data:Z,columns:F,executionMode:"server",totalItems:D,state:{sorting:X,pagination:{pageIndex:H,pageSize:q}},onSortingChange:Y,onPaginationChange:V,initialState:{columnVisibility:{estimatedCostUsd:!1}},getRowId:(Q)=>Q.id,renderExpandedContent:(Q)=>z1(L4,{run:Q}),getCanExpand:()=>!0});return z1(nZ,{controller:$,title:"Run History",description:"Server-mode ContractSpec table with shared pagination, sorting, visibility, and expansion.",loading:z,onRowPress:(Q)=>J?.(Q.id),toolbar:z1(R4,{controller:$,totalRuns:D}),emptyState:z1("div",{className:"rounded-md border border-dashed p-8 text-center text-muted-foreground text-sm",children:"No runs yet"})})}import{EmptyState as eZ,ErrorState as Z3,LoaderBlock as D3,StatCard as G1,StatCardGroup as q3}from"@contractspec/lib.design-system";import{useState as w4}from"react";import{jsx as U0,jsxs as h4}from"react/jsx-runtime";function K1({agentId:Z,onRunClick:D}){let[H,q]=w4([{id:"queuedAt",desc:!0}]),[X,z]=w4({pageIndex:0,pageSize:3}),{data:Y,metrics:V,loading:J,error:F,refetch:$}=E0({agentId:Z,pageIndex:X.pageIndex,pageSize:X.pageSize,sorting:H});if(J&&!Y)return U0(D3,{label:"Loading runs..."});if(F)return U0(Z3,{title:"Failed to load runs",description:F.message,onRetry:$,retryLabel:"Retry"});if(!Y?.items.length)return U0(eZ,{title:"No runs yet",description:"Execute an agent to see run history here."});return h4("div",{className:"space-y-6",children:[V?h4(q3,{children:[U0(G1,{label:"Total Runs",value:V.totalRuns}),U0(G1,{label:"Success Rate",value:`${(V.successRate*100).toFixed(1)}%`}),U0(G1,{label:"Total Tokens",value:C0(V.totalTokens)}),U0(G1,{label:"Total Cost",value:`$${V.totalCostUsd.toFixed(2)}`})]}):null,U0(b4,{runs:Y.items,totalItems:Y.total,pageIndex:X.pageIndex,pageSize:X.pageSize,sorting:H,loading:J,onSortingChange:(Q)=>{q(Q),z((U)=>({...U,pageIndex:0}))},onPaginationChange:z,onRunClick:D})]})}import{useTemplateRuntime as H3}from"@contractspec/lib.example-shared-ui";import{useCallback as $3,useEffect as Y3,useMemo as J3,useState as V1}from"react";function I2(Z={}){let{handlers:D,projectId:H}=H3(),{agent:q}=D,[X,z]=V1(null),[Y,V]=V1(!0),[J,F]=V1(null),[$,Q]=V1(1),U=$3(async()=>{V(!0),F(null);try{let W=await q.listTools({projectId:H,search:Z.search,category:Z.category,status:Z.status==="all"?void 0:Z.status,limit:Z.limit??50,offset:($-1)*(Z.limit??50)});z(W)}catch(W){F(W instanceof Error?W:Error("Unknown error"))}finally{V(!1)}},[q,H,Z.search,Z.category,Z.status,Z.limit,$]);Y3(()=>{U()},[U]);let{stats:G,groupedByCategory:K,categoryStats:L}=J3(()=>{if(!X)return{stats:null,groupedByCategory:{},categoryStats:[]};let W=X.items,v=W.filter((p)=>p.status==="ACTIVE").length,I=W.filter((p)=>p.status==="DEPRECATED").length,B=W.filter((p)=>p.status==="DISABLED").length,b={},c={};W.forEach((p)=>{let l=p.category;if(!b[l])b[l]=[];b[l].push(p),c[l]=(c[l]||0)+1});let p0=Object.entries(c).map(([p,l])=>({category:p,count:l})).sort((p,l)=>l.count-p.count);return{stats:{total:X.total,active:v,deprecated:I,disabled:B,topCategories:p0.slice(0,5)},groupedByCategory:b,categoryStats:p0}},[X]);return{data:X,loading:Y,error:J,stats:G,groupedByCategory:K,categoryStats:L,page:$,refetch:U,nextPage:()=>Q((W)=>W+1),prevPage:()=>$>1&&Q((W)=>W-1)}}import{Button as X3,EmptyState as F3,EntityCard as Q3,ErrorState as U3,LoaderBlock as z3,StatCard as C4,StatCardGroup as G3,StatusChip as K3}from"@contractspec/lib.design-system";import{jsx as o,jsxs as A1}from"react/jsx-runtime";var f4={RETRIEVAL:"\uD83D\uDD0D",COMPUTATION:"\uD83E\uDDEE",COMMUNICATION:"\uD83D\uDCE7",INTEGRATION:"\uD83D\uDD17",UTILITY:"\uD83D\uDEE0️",CUSTOM:"⚙️"};function V3(Z){switch(Z){case"ACTIVE":return"success";case"DRAFT":return"neutral";case"DEPRECATED":return"warning";case"DISABLED":return"danger";default:return"neutral"}}function P1({onToolClick:Z,onCreateTool:D}){let{data:H,loading:q,error:X,groupedByCategory:z,categoryStats:Y,refetch:V}=I2();if(q&&!H)return o(z3,{label:"Loading tools..."});if(X)return o(U3,{title:"Failed to load tools",description:X.message,onRetry:V,retryLabel:"Retry"});if(!H?.items.length)return o(F3,{title:"No tools registered",description:"Create your first tool to extend agent capabilities.",primaryAction:D?o(X3,{onPress:D,children:"Create Tool"}):void 0});return A1("div",{className:"space-y-8",children:[A1(G3,{children:[o(C4,{label:"Total Tools",value:H.total}),Y.slice(0,3).map(({category:J,count:F})=>o(C4,{label:`${f4[J]??""} ${J}`,value:F},J))]}),Object.entries(z).map(([J,F])=>A1("section",{className:"space-y-4",children:[A1("div",{className:"flex items-center gap-2",children:[o("span",{className:"text-2xl",children:f4[J]}),o("h3",{className:"font-semibold text-lg",children:J}),o("span",{className:"rounded-full bg-muted px-2 py-0.5 text-muted-foreground text-xs",children:F.length})]}),o("div",{className:"grid gap-4 md:grid-cols-2 lg:grid-cols-3",children:F.map(($)=>o(Q3,{cardTitle:$.name,cardSubtitle:`v${$.version}`,meta:o("p",{className:"text-muted-foreground text-sm",children:$.description}),chips:o(K3,{tone:V3($.status),label:$.status}),footer:o("code",{className:"text-muted-foreground text-xs",children:$.name}),onClick:Z?()=>Z($.id):void 0},$.id))})]},J))]})}import{Button as k2,StatCard as A3,StatCardGroup as P3}from"@contractspec/lib.design-system";import{useCallback as I3,useMemo as k3,useState as m0}from"react";import{jsx as R,jsxs as M}from"react/jsx-runtime";function k9(){let[Z,D]=m0("runs"),[H,q]=m0(!1),[X,z]=m0(null),[Y,V]=m0(!1),[J,F]=m0(0),{data:$,metrics:Q,refetch:U}=E0(),{refetch:G}=b0(),K=F2({onSuccess:()=>{G(),U(),F((I)=>I+1)}}),L=I3((I)=>{z(I),V(!0)},[]),W=[{id:"runs",label:"Runs",icon:"▶"},{id:"agents",label:"Agents",icon:"\uD83E\uDD16"},{id:"tools",label:"Tools",icon:"\uD83D\uDD27"},{id:"metrics",label:"Metrics",icon:"\uD83D\uDCCA"}],v=k3(()=>{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(k2,{onPress:()=>q(!0),children:[R("span",{className:"mr-2",children:"+"})," New Agent"]})]}),R(P3,{children:v.map((I,B)=>R(A3,{label:I.label,value:I.value,hint:I.hint},B))}),R(B4,{runs:$?.items??[]}),R("nav",{className:"flex gap-1 rounded-lg bg-muted p-1",role:"tablist",children:W.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(K1,{},J),Z==="agents"&&R(W3,{onAgentClick:L},J),Z==="tools"&&R(P1,{}),Z==="metrics"&&R(v3,{metrics:Q})]}),R(z2,{isOpen:H,onClose:()=>q(!1),onSubmit:async(I)=>{await K.createAgent(I)},isLoading:K.createState.loading}),R(Q2,{isOpen:Y,agent:X,onClose:()=>{V(!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,B)=>{await K.executeAgent({agentId:I,message:B})},isLoading:K.isLoading})]})}function W3({onAgentClick:Z}){let{data:D,loading:H,error:q,stats:X,refetch:z}=b0();if(H&&!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(k2,{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:[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:D.items.map((Y)=>R(B3,{agent:Y,onClick:()=>Z(Y)},Y.id))})]})}function B3({agent:Z,onClick:D}){let H={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 ${H[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(k2,{variant:"ghost",size:"sm",onPress:D,children:"Actions"})]})]})}function v3({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),H=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(g4,{label:"Completed",value:D,total:Z.totalRuns,color:"bg-green-500"}),R(g4,{label:"Failed",value:H,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 g4({label:Z,value:D,total:H,color:q}){let X=H>0?D/H*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," (",X.toFixed(0),"%)"]})]}),R("div",{className:"mt-1 h-2 overflow-hidden rounded-full bg-muted",children:R("div",{className:`h-full ${q}`,style:{width:`${X}%`}})})]})}import{VStack as _3}from"@contractspec/lib.ui-kit-web/ui/stack";import{ExecutionLaneConsoleDemo as N3}from"@contractspec/module.execution-console";import{jsx as j4,jsxs as L3}from"react/jsx-runtime";function b9(){return L3(_3,{gap:"xl",align:"stretch",children:[j4(k4,{}),j4(N3,{})]})}var R3={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"}]},O3={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"}]},E9=[R3,O3];import{AGENT_CONSOLE_DEMO_ORGANIZATION_ID as M3,AGENT_CONSOLE_DEMO_PROJECT_ID as x4,createAgentConsoleDemoHandlers as b3}from"@contractspec/example.agent-console/shared";var w3={target:"markdown",render:async(Z,D)=>{if(Z.source.type!=="component"||Z.source.componentKey!=="AgentListView")throw Error("agentListMarkdownRenderer: not AgentListView");let H=Array.isArray(D?.data)?{items:D.data,total:D.data.length,hasMore:!1}:await b3({projectId:x4}).listAgents({projectId:x4,organizationId:M3,limit:50,offset:0}),q=[`# ${Z.meta.description??"Agent List"}`,"",`> ${Z.meta.key} v${Z.meta.version}`,"",`**Total Agents:** ${H.total}`,"","## Agents",""],X={};for(let z of H.items){let Y=z.status;if(X[Y])X[Y].push(z);else X[Y]=[z]}for(let[z,Y]of Object.entries(X)){q.push(`### ${z} (${Y.length})`),q.push("");for(let V of Y)if(q.push(`- **${V.name}** (${V.modelProvider}/${V.modelName})`),V.description)q.push(` > ${V.description}`);q.push("")}return{mimeType:"text/markdown",body:q.join(`
65
+ `)}}};import{Button as h3,EmptyState as C3,EntityCard as f3,ErrorState as g3,LoaderBlock as j3,StatCard as I1,StatCardGroup as x3,StatusChip as T3}from"@contractspec/lib.design-system";import{jsx as u,jsxs as k1}from"react/jsx-runtime";function y3(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:H,stats:q,refetch:X}=b0();if(D&&!Z)return u(j3,{label:"Loading agents..."});if(H)return u(g3,{title:"Failed to load agents",description:H.message,onRetry:X,retryLabel:"Retry"});if(!Z?.items.length)return u(C3,{title:"No agents yet",description:"Create your first AI agent to get started."});return k1("div",{className:"space-y-6",children:[q&&k1(x3,{children:[u(I1,{label:"Total Agents",value:q.total}),u(I1,{label:"Active",value:q.active}),u(I1,{label:"Paused",value:q.paused}),u(I1,{label:"Draft",value:q.draft})]}),k1("div",{className:"flex items-center justify-between",children:[u("h3",{className:"font-semibold text-lg",children:"Agents"}),u(h3,{onPress:()=>alert("Create Agent clicked!"),children:"Create Agent"})]}),u("div",{className:"grid gap-4 sm:grid-cols-2 lg:grid-cols-3",children:Z.items.map((z)=>u(f3,{cardTitle:z.name,cardSubtitle:z.modelName,meta:u("p",{className:"text-muted-foreground text-sm",children:z.description}),chips:u(T3,{tone:y3(z.status),label:z.status}),footer:k1("span",{className:"text-muted-foreground text-xs",children:["Created ",z.createdAt.toLocaleDateString()]}),onClick:()=>alert(`View agent: ${z.name}`)},z.id))})]})}import{jsx as E3}from"react/jsx-runtime";var d3={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 E3(W2,{})}};import{getFallbackAgentConsoleDashboardData as m3}from"@contractspec/example.agent-console/shared";function p3(Z){if(Z<1000)return`${Z}ms`;if(Z<60000)return`${(Z/1000).toFixed(1)}s`;return`${(Z/60000).toFixed(1)}m`}var S3={target:"markdown",render:async(Z,D)=>{if(Z.source.type!=="component"||Z.source.componentKey!=="AgentConsoleDashboard")throw Error("agentDashboardMarkdownRenderer: not AgentConsoleDashboard");let H=D?.data??await m3(),q=H.agents.filter((U)=>U.status==="ACTIVE").length,X=H.runs.filter((U)=>U.status==="COMPLETED").length,z=H.runs.filter((U)=>U.status==="FAILED").length,Y=H.runs.reduce((U,G)=>U+(G.totalTokens??0),0),V=H.runs.reduce((U,G)=>U+(G.estimatedCostUsd??0),0),J=H.tools.filter((U)=>U.status==="ACTIVE").length,F=L0(H.runs),$=["# Agent Console Dashboard","","> AI agent operations overview","","## Summary","","| Metric | Value |","|--------|-------|",`| Total Agents | ${H.summary.totalAgents} |`,`| Active Agents | ${q} |`,`| Total Runs | ${H.summary.totalRuns} |`,`| Completed Runs | ${X} |`,`| Failed Runs | ${z} |`,`| Total Tokens | ${Y.toLocaleString()} |`,`| Total Cost | $${V.toFixed(4)} |`,`| Total Tools | ${H.summary.totalTools} |`,`| Active Tools | ${J} |`,"","## Agents",""];if(H.agents.length===0)$.push("_No agents configured._");else{$.push("| Agent | Model | Status | Description |"),$.push("|-------|-------|--------|-------------|");for(let U of H.agents.slice(0,5))$.push(`| ${U.name} | ${U.modelProvider}/${U.modelName} | ${U.status} | ${U.description??"-"} |`);if(H.agents.length>5)$.push(`| ... | ... | ... | _${H.summary.totalAgents-5} more_ |`)}if($.push(""),$.push("## Recent Runs"),$.push(""),H.runs.length===0)$.push("_No runs yet._");else{$.push("| Run ID | Agent | Status | Duration | Tokens | Cost |"),$.push("|--------|-------|--------|----------|--------|------|");for(let U of H.runs.slice(0,5))$.push(`| ${U.id.slice(-8)} | ${U.agentName} | ${U.status} | ${U.durationMs?p3(U.durationMs):"-"} | ${U.totalTokens??0} | $${(U.estimatedCostUsd??0).toFixed(4)} |`);if(H.runs.length>5)$.push(`| ... | ... | ... | ... | ... | _${H.summary.totalRuns-5} more_ |`)}$.push(""),$.push("## Visualization Overview"),$.push("");for(let U of F)$.push(`- **${U.title}** via \`${U.spec.meta.key}\``);$.push(""),$.push("## Tools"),$.push("");let Q={};for(let U of H.tools){let G=U.category;if(!Q[G])Q[G]=[];Q[G].push(U)}if(Object.keys(Q).length===0)$.push("_No tools registered._");else{$.push("| Category | Tools | Active |"),$.push("|----------|-------|--------|");for(let[U,G]of Object.entries(Q).sort()){let K=G.filter((L)=>L.status==="ACTIVE").length;$.push(`| ${U} | ${G.length} | ${K} |`)}}return{mimeType:"text/markdown",body:$.join(`
66
+ `)}}};import{AGENT_CONSOLE_DEMO_PROJECT_ID as T4,createAgentConsoleDemoHandlers as o3}from"@contractspec/example.agent-console/shared";function c3(Z){if(Z<1000)return`${Z}ms`;if(Z<60000)return`${(Z/1000).toFixed(1)}s`;return`${(Z/60000).toFixed(1)}m`}var r3={target:"markdown",render:async(Z,D)=>{if(Z.source.type!=="component"||Z.source.componentKey!=="RunListView")throw Error("runListMarkdownRenderer: not RunListView");let H=Array.isArray(D?.data)?{items:D.data,total:D.data.length,hasMore:!1}:await o3({projectId:T4}).listRuns({projectId:T4,limit:20,offset:0}),q=[`# ${Z.meta.description??"Agent Runs"}`,"",`> ${Z.meta.key} v${Z.meta.version}`,"",`**Total Runs:** ${H.total}`,"","## Recent Runs","","| ID | Agent | Status | Duration | Tokens | Cost |","| --- | --- | --- | --- | --- | --- |"];for(let X of H.items.slice(0,10))q.push(`| ${X.id.slice(-8)} | ${X.agentName} | ${X.status} | ${X.durationMs?c3(X.durationMs):"-"} | ${X.totalTokens} | $${X.estimatedCostUsd?.toFixed(4)??"-"} |`);return{mimeType:"text/markdown",body:q.join(`
67
+ `)}}};import{AGENT_CONSOLE_DEMO_ORGANIZATION_ID as i3,AGENT_CONSOLE_DEMO_PROJECT_ID as y4,createAgentConsoleDemoHandlers as u3}from"@contractspec/example.agent-console/shared";var l3={target:"markdown",render:async(Z,D)=>{if(Z.source.type!=="component"||Z.source.componentKey!=="ToolRegistryView")throw Error("toolRegistryMarkdownRenderer: not ToolRegistryView");let H=Array.isArray(D?.data)?{items:D.data,total:D.data.length,hasMore:!1}:await u3({projectId:y4}).listTools({projectId:y4,organizationId:i3,limit:50,offset:0}),q=[`# ${Z.meta.description??"Tool Registry"}`,"",`> ${Z.meta.key} v${Z.meta.version}`,"",`**Total Tools:** ${H.total}`,""],X={};for(let z of H.items){let Y=z.category;if(!X[Y])X[Y]=[];X[Y].push(z)}for(let[z,Y]of Object.entries(X).sort()){q.push(`## ${z} (${Y.length})`),q.push("");for(let V of Y){let J=V.status==="ACTIVE"?"✅":V.status==="DEPRECATED"?"⚠️":"❌";if(q.push(`### ${J} ${V.name} v${V.version}`),q.push(""),q.push(`> \`${V.id}\``),q.push(""),V.description)q.push(V.description),q.push("")}}return{mimeType:"text/markdown",body:q.join(`
68
+ `)}}};import{defineHarnessScenario as s3}from"@contractspec/lib.contracts-spec";var d4="Paris Meetup Demo Agent",t3=S.filter((Z)=>Z.status==="COMPLETED").length,n3=(t3+1)/(S.length+1),B2=s3({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:d4},{key:"final-dashboard-shape",type:"json-match",source:"inspect-dashboard",match:{agentCount:d.length+1,runCount:S.length+1,toolCount:E.length,latestAgentName:d4,latestRunId:"run-meetup-1",successRate:n3}}]});import{defineHarnessSuite as a3}from"@contractspec/lib.contracts-spec";var g8=a3({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{I2 as useToolList,E0 as useRunList,F2 as useAgentMutations,b0 as useAgentList,l3 as toolRegistryMarkdownRenderer,r3 as runListMarkdownRenderer,O5 as mockUpdateToolHandler,H5 as mockUpdateAgentHandler,M5 as mockTestToolHandler,N5 as mockListToolsHandler,k5 as mockListRunsHandler,Z5 as mockListAgentsHandler,L5 as mockGetToolHandler,W5 as mockGetRunHandler,D5 as mockGetAgentHandler,B5 as mockExecuteAgentHandler,R5 as mockCreateToolHandler,q5 as mockCreateAgentHandler,v5 as mockCancelRunHandler,n5 as getFallbackAgentConsoleDashboardData,a2 as getAgentConsoleDashboardData,z5 as example,L0 as createAgentVisualizationItems,P5 as createAgentHandlers,a1 as createAgentConsoleDemoHandlers,d3 as agentListReactRenderer,w3 as agentListMarkdownRenderer,S3 as agentDashboardMarkdownRenderer,O3 as agentConsoleReadOnlyOverlay,E9 as agentConsoleOverlays,R3 as agentConsoleDemoOverlay,i1 as UpdateToolInputModel,y2 as UpdateToolCommand,w1 as UpdateAgentInputModel,C1 as UpdateAgentCommand,HZ as ToolUpdatedEvent,A0 as ToolSummaryModel,q0 as ToolStatusEnum,Z4 as ToolStatusEntityEnum,YZ as ToolStatusChangedEvent,P1 as ToolRegistryView,c1 as ToolModel,JZ as ToolListPresentation,p5 as ToolInvokedEvent,e5 as ToolEntity,XZ as ToolDetailPresentation,DZ as ToolCreatedEvent,o5 as ToolCompletedEvent,R0 as ToolChoiceEnum,V0 as ToolCategoryEnum,e2 as ToolCategoryEntityEnum,m1 as TimelineDataPointModel,E2 as TestToolCommand,K0 as RunSummaryModel,T1 as RunStepTypeEnum,c2 as RunStepTypeEntityEnum,u0 as RunStepModel,w5 as RunStepEntity,Z0 as RunStatusEnum,o2 as RunStatusEntityEnum,g5 as RunStartedEvent,E1 as RunModel,l0 as RunLogModel,h5 as RunLogEntity,K1 as RunListView,u5 as RunListPresentation,d1 as RunInputModel,y5 as RunFailedEvent,b5 as RunEntity,l5 as RunDetailPresentation,x5 as RunCompletedEvent,E5 as RunCancelledEvent,h2 as RunAgentRefModel,a4 as RemoveToolFromAgentCommand,Y0 as ModelProviderEnum,M2 as ModelProviderEntityEnum,i5 as MessageGeneratedEvent,E as MOCK_TOOLS,S as MOCK_RUNS,d as MOCK_AGENTS,d4 as MEETUP_AGENT_NAME,g0 as LogLevelEnum,r2 as LogLevelEntityEnum,l1 as ListToolsQuery,S1 as ListRunsQuery,g1 as ListAgentsQuery,s0 as ImplementationTypeEnum,D4 as ImplementationTypeEntityEnum,y1 as GranularityEnum,d2 as GetToolQuery,G5 as GetRunStepsQuery,g2 as GetRunQuery,j2 as GetRunMetricsQuery,K5 as GetRunLogsQuery,f1 as GetAgentQuery,b9 as ExecutionConsoleHost,p1 as ExecuteAgentCommand,U5 as ExamplesAgentConsoleExample,r1 as CreateToolInputModel,T2 as CreateToolCommand,z2 as CreateAgentModal,b1 as CreateAgentInputModel,h1 as CreateAgentCommand,f2 as CancelRunCommand,n4 as AssignToolToAgentCommand,M1 as AgentWithToolsModel,v2 as AgentVisualizationSpecs,ZD as AgentVisualizationRegistry,_2 as AgentVisualizationRefs,r4 as AgentUpdatedEvent,s4 as AgentToolRemovedEvent,P1 as AgentToolRegistry,b2 as AgentToolRefModel,S4 as AgentToolEntity,u4 as AgentToolAssignedEvent,M0 as AgentSummaryModel,t as AgentStatusEnum,O2 as AgentStatusEntityEnum,_1 as AgentRunStatusVisualization,K1 as AgentRunList,L1 as AgentRunEfficiencyVisualization,N1 as AgentRunActivityVisualization,t4 as AgentModel,W2 as AgentListView,$5 as AgentListPresentation,p4 as AgentEntity,Y5 as AgentDetailPresentation,k9 as AgentDashboard,O1 as AgentCreatedEvent,k4 as AgentConsolePreview,g8 as AgentConsoleMeetupProofSuite,QD as AgentConsoleFeature,J5 as AgentConsoleDashboardPresentation,Q2 as AgentActionsModal,B2 as AGENT_CONSOLE_MEETUP_PROOF_SCENARIO,a0 as AGENT_CONSOLE_DEMO_PROJECT_ID,J0 as AGENT_CONSOLE_DEMO_ORGANIZATION_ID};