@contractspec/example.agent-console 3.8.11 → 3.8.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +9 -9
- package/CHANGELOG.md +55 -0
- package/dist/agent.feature.js +1 -1
- package/dist/browser/agent.feature.js +1 -1
- package/dist/browser/example.js +1 -1
- package/dist/browser/index.js +3 -3
- package/dist/example.d.ts +3 -2
- package/dist/example.js +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +3 -3
- package/dist/node/agent.feature.js +1 -1
- package/dist/node/example.js +1 -1
- package/dist/node/index.js +3 -3
- package/package.json +10 -10
- package/src/agent.feature.ts +1 -1
- package/src/example.ts +13 -25
- package/src/index.ts +2 -0
- package/src/ui/AgentDashboard.sandbox.test.tsx +10 -0
- package/src/ui/ExecutionConsoleHost.test.tsx +10 -0
package/dist/node/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{defineVisualization as Y2,VisualizationRegistry as z4}from"@contractspec/lib.contracts-spec/visualizations";var J2={key:"agent.run.list",version:"1.0.0"},$2={version:"1.0.0",domain:"ai-ops",stability:"experimental",owners:["@example.agent-console"],tags:["agent-console","visualization","operations"]},X2=Y2({meta:{...$2,key:"agent-console.visualization.run-status",title:"Run Status Breakdown",description:"Distribution of run outcomes across the current sample.",goal:"Make operational success and failure mix visible at a glance.",context:"Agent operations overview."},source:{primary:J2,resultPath:"data"},visualization:{kind:"pie",nameDimension:"status",valueMeasure:"runs",dimensions:[{key:"status",label:"Status",dataPath:"status",type:"category"}],measures:[{key:"runs",label:"Runs",dataPath:"runs",format:"number"}],table:{caption:"Run counts by status."}}}),z2=Y2({meta:{...$2,key:"agent-console.visualization.run-activity",title:"Recent Run Activity",description:"Daily run volume across the current sample.",goal:"Show whether agent activity is rising or slowing down.",context:"Operations trend monitoring."},source:{primary:J2,resultPath:"data"},visualization:{kind:"cartesian",variant:"line",xDimension:"day",yMeasures:["runs"],dimensions:[{key:"day",label:"Day",dataPath:"day",type:"time"}],measures:[{key:"runs",label:"Runs",dataPath:"runs",format:"number",color:"#0f766e"}],table:{caption:"Daily run counts."}}}),Q2=Y2({meta:{...$2,key:"agent-console.visualization.run-efficiency",title:"Duration vs Tokens",description:"Scatter chart comparing token consumption and runtime.",goal:"Reveal outlier runs that are slow relative to their token usage.",context:"Operational performance diagnostics."},source:{primary:J2,resultPath:"data"},visualization:{kind:"cartesian",variant:"scatter",xDimension:"totalTokens",yMeasures:["durationMs"],dimensions:[{key:"totalTokens",label:"Total Tokens",dataPath:"totalTokens",type:"number"}],measures:[{key:"durationMs",label:"Duration",dataPath:"durationMs",format:"duration",color:"#7c3aed"},{key:"estimatedCostUsd",label:"Cost",dataPath:"estimatedCostUsd",format:"currency"}],series:[{key:"runs",label:"Runs",measure:"durationMs",type:"scatter",color:"#7c3aed"}],table:{caption:"Run duration versus token usage."}}}),Y1=[X2,z2,Q2],tZ=new z4([...Y1]),J1=Y1.map((Z)=>({key:Z.meta.key,version:Z.meta.version}));function $1(Z){if(!Z)return"unknown";return Z.toISOString().slice(0,10)}function j0(Z){let q=new Map,D=new Map;for(let Y of Z)q.set(Y.status,(q.get(Y.status)??0)+1),D.set($1(Y.startedAt??Y.queuedAt),(D.get($1(Y.startedAt??Y.queuedAt))??0)+1);return[{key:"run-status",spec:X2,data:{data:Array.from(q.entries()).map(([Y,X])=>({status:Y,runs:X}))},title:"Run Status Breakdown",description:"Completed, failed, running, and cancelled runs in the sample.",height:260},{key:"run-activity",spec:z2,data:{data:Array.from(D.entries()).sort(([Y],[X])=>Y.localeCompare(X)).map(([Y,X])=>({day:Y,runs:X}))},title:"Recent Run Activity",description:"Daily run volume derived from run start times."},{key:"run-efficiency",spec:Q2,data:{data:Z.filter((Y)=>typeof Y.durationMs==="number").map((Y)=>({totalTokens:Y.totalTokens,durationMs:Y.durationMs??0,estimatedCostUsd:Y.estimatedCostUsd}))},title:"Duration vs Tokens",description:"Operational scatter plot for spotting inefficient runs."}]}import{defineFeature as Q4}from"@contractspec/lib.contracts-spec";var J3=Q4({meta:{key:"agent-console",version:"1.0.0",title:"AI Agent Console",description:"AI agent orchestration with tools, runs, and logs management",domain:"ai-ops",owners:["@agent-console-team"],tags:["ai","agents","orchestration"],stability:"stable"},operations:[{key:"agent-console.agent.create",version:"1.0.0"},{key:"agent-console.agent.update",version:"1.0.0"},{key:"agent-console.agent.get",version:"1.0.0"},{key:"agent-console.agent.list",version:"1.0.0"},{key:"agent-console.agent.assignTool",version:"1.0.0"},{key:"agent-console.agent.removeTool",version:"1.0.0"},{key:"agent.tool.create",version:"1.0.0"},{key:"agent.tool.update",version:"1.0.0"},{key:"agent.tool.get",version:"1.0.0"},{key:"agent.tool.list",version:"1.0.0"},{key:"agent.tool.test",version:"1.0.0"},{key:"agent.run.execute",version:"1.0.0"},{key:"agent.run.cancel",version:"1.0.0"},{key:"agent.run.get",version:"1.0.0"},{key:"agent.run.list",version:"1.0.0"},{key:"agent.run.getSteps",version:"1.0.0"},{key:"agent.run.getLogs",version:"1.0.0"},{key:"agent.run.getMetrics",version:"1.0.0"}],events:[{key:"agent-console.agent.created",version:"1.0.0"},{key:"agent-console.agent.updated",version:"1.0.0"},{key:"agent-console.agent.toolAssigned",version:"1.0.0"},{key:"agent-console.agent.toolRemoved",version:"1.0.0"},{key:"agent.tool.created",version:"1.0.0"},{key:"agent.tool.updated",version:"1.0.0"},{key:"agent.tool.statusChanged",version:"1.0.0"},{key:"agent.run.started",version:"1.0.0"},{key:"agent.run.completed",version:"1.0.0"},{key:"agent.run.failed",version:"1.0.0"},{key:"agent.run.cancelled",version:"1.0.0"},{key:"agent.run.toolInvoked",version:"1.0.0"},{key:"agent.run.toolCompleted",version:"1.0.0"},{key:"agent.run.messageGenerated",version:"1.0.0"}],presentations:[{key:"agent-console.dashboard",version:"1.0.0"},{key:"agent-console.agent.viewList",version:"1.0.0"},{key:"agent-console.agent.detail",version:"1.0.0"},{key:"agent-console.run.list",version:"1.0.0"},{key:"agent-console.run.detail",version:"1.0.0"},{key:"agent-console.tool.list",version:"1.0.0"},{key:"agent-console.tool.detail",version:"1.0.0"}],opToPresentation:[{op:{key:"agent-console.agent.list",version:"1.0.0"},pres:{key:"agent-console.agent.viewList",version:"1.0.0"}},{op:{key:"agent-console.agent.get",version:"1.0.0"},pres:{key:"agent-console.agent.detail",version:"1.0.0"}},{op:{key:"agent.run.list",version:"1.0.0"},pres:{key:"agent-console.run.list",version:"1.0.0"}},{op:{key:"agent.run.get",version:"1.0.0"},pres:{key:"agent-console.run.detail",version:"1.0.0"}},{op:{key:"agent.tool.list",version:"1.0.0"},pres:{key:"agent-console.tool.list",version:"1.0.0"}},{op:{key:"agent.tool.get",version:"1.0.0"},pres:{key:"agent-console.tool.detail",version:"1.0.0"}}],presentationsTargets:[{key:"agent-console.dashboard",version:"1.0.0",targets:["react","markdown"]},{key:"agent-console.agent.viewList",version:"1.0.0",targets:["react","markdown","application/json"]},{key:"agent-console.run.list",version:"1.0.0",targets:["react","markdown","application/json"]},{key:"agent-console.tool.list",version:"1.0.0",targets:["react","markdown","application/json"]}],visualizations:J1,capabilities:{requires:[{key:"identity",version:"1.0.0"},{key:"audit-trail",version:"1.0.0"},{key:"jobs",version:"1.0.0"}],provides:[{key:"agent",version:"1.0.0"}]},telemetry:[{key:"agent-console.telemetry",version:"1.0.0"}],jobs:[{key:"agent-console.job.run-execution",version:"1.0.0"}],docs:["docs.examples.agent-console.goal","docs.examples.agent-console.usage","docs.examples.agent-console.reference","docs.examples.agent-console.constraints"]});import{defineEntity as X1,defineEntityEnum as z1,field as w,index as L0}from"@contractspec/lib.schema";var Q1=z1({name:"AgentStatus",values:["DRAFT","ACTIVE","PAUSED","ARCHIVED"],description:"Lifecycle status of the agent"}),G1=z1({name:"ModelProvider",values:["OPENAI","ANTHROPIC","GOOGLE","MISTRAL","CUSTOM"],description:"AI model provider"}),G4=X1({name:"Agent",schema:"agent_console",description:"Represents an AI agent configuration with assigned tools and parameters.",fields:{id:w.id(),organizationId:w.string({description:"Organization that owns this agent"}),name:w.string({description:"Agent name (1-100 chars)"}),slug:w.string({description:"URL-safe identifier (lowercase, numbers, hyphens)"}),description:w.string({isOptional:!0,description:"Agent description (max 1000 chars)"}),status:w.enum("AgentStatus",{default:"DRAFT"}),modelProvider:w.enum("ModelProvider",{default:"OPENAI"}),modelName:w.string({description:"Model identifier: 'gpt-4', 'claude-3-opus', etc."}),modelConfig:w.json({isOptional:!0,description:"Model parameters: temperature, max_tokens, etc."}),systemPrompt:w.string({description:"System prompt for the agent"}),userPromptTemplate:w.string({isOptional:!0,description:"Template for user prompts"}),toolIds:w.string({isArray:!0,isOptional:!0,description:"IDs of assigned tools"}),toolChoice:w.string({default:"auto",description:"Tool selection mode: 'auto', 'required', 'none'"}),maxIterations:w.int({default:10,description:"Maximum iterations per run"}),maxTokensPerRun:w.int({isOptional:!0,description:"Maximum tokens per run"}),timeoutMs:w.int({default:120000,description:"Execution timeout in milliseconds"}),version:w.string({default:"1.0.0",description:"Agent version"}),tags:w.string({isArray:!0,isOptional:!0,description:"Tags for categorization"}),createdAt:w.createdAt(),updatedAt:w.updatedAt(),createdById:w.string({isOptional:!0,description:"User who created this agent"}),tools:w.hasMany("Tool",{description:"Tools assigned to this agent"})},indexes:[L0.unique(["organizationId","slug"]),L0.on(["organizationId","status"]),L0.on(["modelProvider","modelName"])],enums:[Q1,G1]}),F4=X1({name:"AgentTool",schema:"agent_console",description:"Links an agent to its assigned tools with configuration.",fields:{id:w.id(),agentId:w.foreignKey({description:"Agent ID"}),toolId:w.foreignKey({description:"Tool ID"}),config:w.json({isOptional:!0,description:"Tool-specific configuration for this agent"}),order:w.int({default:0,description:"Order of tool in agent tool list"}),isEnabled:w.boolean({default:!0,description:"Whether tool is enabled for this agent"}),createdAt:w.createdAt(),agent:w.belongsTo("Agent",["agentId"],["id"]),tool:w.belongsTo("Tool",["toolId"],["id"])},indexes:[L0.unique(["agentId","toolId"]),L0.on(["agentId","order"])]});import{defineEnum as G2}from"@contractspec/lib.schema";var s=G2("AgentStatus",["DRAFT","ACTIVE","PAUSED","ARCHIVED"]),q0=G2("ModelProvider",["OPENAI","ANTHROPIC","GOOGLE","MISTRAL","CUSTOM"]),P0=G2("ToolChoice",["auto","required","none"]);import{defineEvent as x0}from"@contractspec/lib.contracts-spec";import{defineSchemaModel as g0,ScalarTypeEnum as C}from"@contractspec/lib.schema";var T0=["@agent-console-team"],U4=g0({name:"AgentCreatedPayload",description:"Payload for agent created event",fields:{id:{type:C.String_unsecure(),isOptional:!1},organizationId:{type:C.String_unsecure(),isOptional:!1},name:{type:C.String_unsecure(),isOptional:!1},slug:{type:C.String_unsecure(),isOptional:!1},modelProvider:{type:C.String_unsecure(),isOptional:!1},modelName:{type:C.String_unsecure(),isOptional:!1},toolCount:{type:C.Int_unsecure(),isOptional:!1},createdById:{type:C.String_unsecure(),isOptional:!0},createdAt:{type:C.DateTime(),isOptional:!1}}}),F2=x0({meta:{key:"agent-console.agent.created",version:"1.0.0",description:"A new AI agent was configured.",stability:"stable",owners:[...T0],tags:["agent","created"]},payload:U4}),A4=g0({name:"AgentUpdatedPayload",description:"Payload for agent updated event",fields:{id:{type:C.String_unsecure(),isOptional:!1},organizationId:{type:C.String_unsecure(),isOptional:!1},name:{type:C.String_unsecure(),isOptional:!1},status:{type:C.String_unsecure(),isOptional:!1},updatedFields:{type:C.String_unsecure(),isArray:!0,isOptional:!1},updatedAt:{type:C.DateTime(),isOptional:!1}}}),V4=x0({meta:{key:"agent-console.agent.updated",version:"1.0.0",description:"An AI agent configuration was updated.",stability:"stable",owners:[...T0],tags:["agent","updated"]},payload:A4}),K4=g0({name:"AgentToolAssignedPayload",description:"Payload for agent tool assigned event",fields:{agentId:{type:C.String_unsecure(),isOptional:!1},toolId:{type:C.String_unsecure(),isOptional:!1},agentName:{type:C.String_unsecure(),isOptional:!1},toolName:{type:C.String_unsecure(),isOptional:!1},assignedAt:{type:C.DateTime(),isOptional:!1}}}),k4=x0({meta:{key:"agent-console.agent.toolAssigned",version:"1.0.0",description:"A tool was assigned to an agent.",stability:"stable",owners:[...T0],tags:["agent","tool","assigned"]},payload:K4}),P4=g0({name:"AgentToolRemovedPayload",description:"Payload for agent tool removed event",fields:{agentId:{type:C.String_unsecure(),isOptional:!1},toolId:{type:C.String_unsecure(),isOptional:!1},agentName:{type:C.String_unsecure(),isOptional:!1},toolName:{type:C.String_unsecure(),isOptional:!1},removedAt:{type:C.DateTime(),isOptional:!1}}}),I4=x0({meta:{key:"agent-console.agent.toolRemoved",version:"1.0.0",description:"A tool was removed from an agent.",stability:"stable",owners:[...T0],tags:["agent","tool","removed"]},payload:P4});var m=[{id:"agent-1",organizationId:"demo-org",name:"Customer Support Bot",slug:"customer-support-bot",description:"Handles tier-1 customer inquiries and routes complex issues.",status:"ACTIVE",modelProvider:"OPENAI",modelName:"gpt-4o-mini",modelConfig:{temperature:0.7},systemPrompt:"You are a helpful customer support assistant.",toolChoice:"auto",maxIterations:10,timeoutMs:120000,version:"1.0.0",tags:["support","tier-1"],createdAt:new Date("2024-01-15T10:00:00Z"),updatedAt:new Date("2024-03-20T14:30:00Z")},{id:"agent-2",organizationId:"demo-org",name:"Code Review Assistant",slug:"code-review-assistant",description:"Reviews pull requests and provides actionable feedback.",status:"ACTIVE",modelProvider:"ANTHROPIC",modelName:"claude-sonnet-4-20250514",modelConfig:{temperature:0.3},systemPrompt:"You are a code review expert.",toolChoice:"auto",maxIterations:15,timeoutMs:180000,version:"2.1.0",tags:["code","review","dev"],createdAt:new Date("2024-02-10T09:00:00Z"),updatedAt:new Date("2024-04-05T11:15:00Z")},{id:"agent-3",organizationId:"demo-org",name:"Data Analyst",slug:"data-analyst",description:"Queries databases and generates insights from data.",status:"PAUSED",modelProvider:"OPENAI",modelName:"gpt-4o",modelConfig:{temperature:0.5},systemPrompt:"You are a data analyst expert in SQL and analytics.",toolChoice:"required",maxIterations:20,timeoutMs:300000,version:"1.2.0",tags:["data","analytics","sql"],createdAt:new Date("2024-03-01T08:00:00Z"),updatedAt:new Date("2024-04-10T16:45:00Z")},{id:"agent-4",organizationId:"demo-org",name:"Meeting Scheduler",slug:"meeting-scheduler",description:"Schedules meetings and manages calendar conflicts.",status:"DRAFT",modelProvider:"GOOGLE",modelName:"gemini-2.0-flash",modelConfig:{temperature:0.2},systemPrompt:"You help schedule and organize meetings efficiently.",toolChoice:"auto",maxIterations:5,timeoutMs:60000,version:"0.1.0",tags:["calendar","scheduling"],createdAt:new Date("2024-04-01T12:00:00Z"),updatedAt:new Date("2024-04-01T12:00:00Z")}];var E=[{id:"tool-1",organizationId:"demo-org",name:"Web Search",slug:"web-search",description:"Search the web for real-time information using Brave API.",category:"RETRIEVAL",status:"ACTIVE",parametersSchema:{type:"object",properties:{query:{type:"string",description:"Search query"},numResults:{type:"number",default:10}},required:["query"]},outputSchema:{type:"array",items:{type:"object"}},implementationType:"http",implementationConfig:{url:"https://api.brave.com/search",method:"GET"},maxInvocationsPerMinute:60,timeoutMs:30000,version:"1.0.0",tags:["search","web"],createdAt:new Date("2024-01-01T00:00:00Z"),updatedAt:new Date("2024-02-15T10:00:00Z")},{id:"tool-2",organizationId:"demo-org",name:"SQL Query",slug:"sql-query",description:"Execute read-only SQL queries against the data warehouse.",category:"RETRIEVAL",status:"ACTIVE",parametersSchema:{type:"object",properties:{query:{type:"string",description:"SQL query"},maxRows:{type:"number",default:100}},required:["query"]},outputSchema:{type:"object"},implementationType:"function",implementationConfig:{handler:"executeSqlQuery"},maxInvocationsPerMinute:30,timeoutMs:60000,version:"1.1.0",tags:["sql","database"],createdAt:new Date("2024-01-05T00:00:00Z"),updatedAt:new Date("2024-03-10T14:00:00Z")},{id:"tool-3",organizationId:"demo-org",name:"Email Sender",slug:"email-sender",description:"Send emails via SMTP or API.",category:"COMMUNICATION",status:"ACTIVE",parametersSchema:{type:"object",properties:{to:{type:"string"},subject:{type:"string"},body:{type:"string"}},required:["to","subject","body"]},implementationType:"http",implementationConfig:{url:"/api/send-email",method:"POST"},maxInvocationsPerMinute:10,timeoutMs:30000,version:"1.0.0",tags:["email","communication"],createdAt:new Date("2024-02-01T00:00:00Z"),updatedAt:new Date("2024-02-01T00:00:00Z")},{id:"tool-4",organizationId:"demo-org",name:"GitHub Integration",slug:"github-integration",description:"Interact with GitHub repositories, PRs, and issues.",category:"INTEGRATION",status:"ACTIVE",parametersSchema:{type:"object",properties:{action:{type:"string",enum:["list_prs","get_pr","create_comment"]},repo:{type:"string"},params:{type:"object"}},required:["action","repo"]},implementationType:"http",implementationConfig:{url:"https://api.github.com",auth:"token"},maxInvocationsPerMinute:100,timeoutMs:15000,version:"2.0.0",tags:["github","integration","code"],createdAt:new Date("2024-02-20T00:00:00Z"),updatedAt:new Date("2024-04-01T09:00:00Z")},{id:"tool-5",organizationId:"demo-org",name:"Calculator",slug:"calculator",description:"Perform mathematical calculations.",category:"COMPUTATION",status:"ACTIVE",parametersSchema:{type:"object",properties:{expression:{type:"string",description:"Math expression to evaluate"}},required:["expression"]},outputSchema:{type:"object",properties:{result:{type:"number"}}},implementationType:"function",implementationConfig:{handler:"evaluateMath"},timeoutMs:5000,version:"1.0.0",tags:["math","utility"],createdAt:new Date("2024-01-10T00:00:00Z"),updatedAt:new Date("2024-01-10T00:00:00Z")}];import{defineSchemaModel as I0,ScalarTypeEnum as K}from"@contractspec/lib.schema";var B4=I0({name:"Agent",description:"AI agent configuration",fields:{id:{type:K.String_unsecure(),isOptional:!1},organizationId:{type:K.String_unsecure(),isOptional:!1},name:{type:K.NonEmptyString(),isOptional:!1},slug:{type:K.String_unsecure(),isOptional:!1},description:{type:K.String_unsecure(),isOptional:!0},status:{type:s,isOptional:!1},modelProvider:{type:q0,isOptional:!1},modelName:{type:K.NonEmptyString(),isOptional:!1},modelConfig:{type:K.JSONObject(),isOptional:!0},systemPrompt:{type:K.String_unsecure(),isOptional:!1},userPromptTemplate:{type:K.String_unsecure(),isOptional:!0},toolIds:{type:K.String_unsecure(),isArray:!0,isOptional:!0},toolChoice:{type:P0,isOptional:!1,defaultValue:"auto"},maxIterations:{type:K.Int_unsecure(),isOptional:!1,defaultValue:10},maxTokensPerRun:{type:K.Int_unsecure(),isOptional:!0},timeoutMs:{type:K.Int_unsecure(),isOptional:!1,defaultValue:120000},version:{type:K.NonEmptyString(),isOptional:!1},tags:{type:K.String_unsecure(),isArray:!0,isOptional:!0},createdAt:{type:K.DateTime(),isOptional:!1},updatedAt:{type:K.DateTime(),isOptional:!1}}}),B0=I0({name:"AgentSummary",description:"Summary of an agent for list views",fields:{id:{type:K.String_unsecure(),isOptional:!1},name:{type:K.NonEmptyString(),isOptional:!1},slug:{type:K.String_unsecure(),isOptional:!1},description:{type:K.String_unsecure(),isOptional:!0},status:{type:s,isOptional:!1},modelProvider:{type:q0,isOptional:!1},modelName:{type:K.NonEmptyString(),isOptional:!1},version:{type:K.NonEmptyString(),isOptional:!1},createdAt:{type:K.DateTime(),isOptional:!1}}}),F1=I0({name:"AgentToolRef",description:"Tool reference in agent context",fields:{id:{type:K.String_unsecure(),isOptional:!1},name:{type:K.NonEmptyString(),isOptional:!1},slug:{type:K.String_unsecure(),isOptional:!1},description:{type:K.String_unsecure(),isOptional:!1},category:{type:K.String_unsecure(),isOptional:!1}}}),U2=I0({name:"AgentWithTools",description:"Agent with associated tools",fields:{id:{type:K.String_unsecure(),isOptional:!1},organizationId:{type:K.String_unsecure(),isOptional:!1},name:{type:K.NonEmptyString(),isOptional:!1},slug:{type:K.String_unsecure(),isOptional:!1},description:{type:K.String_unsecure(),isOptional:!0},status:{type:s,isOptional:!1},modelProvider:{type:q0,isOptional:!1},modelName:{type:K.NonEmptyString(),isOptional:!1},modelConfig:{type:K.JSONObject(),isOptional:!0},systemPrompt:{type:K.String_unsecure(),isOptional:!1},userPromptTemplate:{type:K.String_unsecure(),isOptional:!0},toolIds:{type:K.String_unsecure(),isArray:!0,isOptional:!0},toolChoice:{type:P0,isOptional:!1},maxIterations:{type:K.Int_unsecure(),isOptional:!1},maxTokensPerRun:{type:K.Int_unsecure(),isOptional:!0},timeoutMs:{type:K.Int_unsecure(),isOptional:!1},version:{type:K.NonEmptyString(),isOptional:!1},tags:{type:K.String_unsecure(),isArray:!0,isOptional:!0},createdAt:{type:K.DateTime(),isOptional:!1},updatedAt:{type:K.DateTime(),isOptional:!1},tools:{type:F1,isArray:!0,isOptional:!0}}}),A2=I0({name:"CreateAgentInput",description:"Input for creating an agent",fields:{organizationId:{type:K.String_unsecure(),isOptional:!1},name:{type:K.NonEmptyString(),isOptional:!1},slug:{type:K.String_unsecure(),isOptional:!1},description:{type:K.String_unsecure(),isOptional:!0},modelProvider:{type:q0,isOptional:!1},modelName:{type:K.NonEmptyString(),isOptional:!1},modelConfig:{type:K.JSONObject(),isOptional:!0},systemPrompt:{type:K.String_unsecure(),isOptional:!1},userPromptTemplate:{type:K.String_unsecure(),isOptional:!0},toolIds:{type:K.String_unsecure(),isArray:!0,isOptional:!0},toolChoice:{type:P0,isOptional:!0},maxIterations:{type:K.Int_unsecure(),isOptional:!0},maxTokensPerRun:{type:K.Int_unsecure(),isOptional:!0},timeoutMs:{type:K.Int_unsecure(),isOptional:!0},tags:{type:K.String_unsecure(),isArray:!0,isOptional:!0}}}),V2=I0({name:"UpdateAgentInput",description:"Input for updating an agent",fields:{agentId:{type:K.String_unsecure(),isOptional:!1},name:{type:K.NonEmptyString(),isOptional:!0},description:{type:K.String_unsecure(),isOptional:!0},status:{type:s,isOptional:!0},modelConfig:{type:K.JSONObject(),isOptional:!0},systemPrompt:{type:K.String_unsecure(),isOptional:!0},userPromptTemplate:{type:K.String_unsecure(),isOptional:!0},toolIds:{type:K.String_unsecure(),isArray:!0,isOptional:!0},toolChoice:{type:P0,isOptional:!0},maxIterations:{type:K.Int_unsecure(),isOptional:!0},maxTokensPerRun:{type:K.Int_unsecure(),isOptional:!0},timeoutMs:{type:K.Int_unsecure(),isOptional:!0},tags:{type:K.String_unsecure(),isArray:!0,isOptional:!0}}});import{defineCommand as y0,defineQuery as U1}from"@contractspec/lib.contracts-spec/operations";import{defineSchemaModel as n,ScalarTypeEnum as h}from"@contractspec/lib.schema";var J0=["@agent-console-team"],K2=y0({meta:{key:"agent-console.agent.create",version:"1.0.0",stability:"stable",owners:[...J0],tags:["agent","create"],description:"Creates a new AI agent configuration.",goal:"Allow users to define new AI agents with specific models and tools.",context:"Called from the agent builder UI when creating a new agent."},io:{input:A2,output:n({name:"CreateAgentOutput",fields:{id:{type:h.String_unsecure(),isOptional:!1},name:{type:h.NonEmptyString(),isOptional:!1},slug:{type:h.String_unsecure(),isOptional:!1},status:{type:s,isOptional:!1}}}),errors:{SLUG_EXISTS:{description:"An agent with this slug already exists in the organization",http:409,gqlCode:"SLUG_EXISTS",when:"Slug is already taken"}}},policy:{auth:"user"},sideEffects:{emits:[{ref:F2.meta,when:"Agent is successfully created"}],audit:["agent-console.agent.created"]},acceptance:{scenarios:[{key:"create-agent-happy-path",given:["User is authenticated","Organization exists"],when:["User submits valid agent configuration"],then:["New agent is created with DRAFT status","AgentCreated event is emitted"]},{key:"create-agent-slug-conflict",given:["User is authenticated","Agent with same slug exists"],when:["User submits agent with duplicate slug"],then:["SLUG_EXISTS error is returned with 409 status"]}],examples:[{key:"basic-create",input:{name:"Support Assistant",slug:"support-assistant",modelProvider:"openai",modelId:"gpt-4"},output:{id:"agent-123",name:"Support Assistant",slug:"support-assistant",status:"draft"}}]}}),k2=y0({meta:{key:"agent-console.agent.update",version:"1.0.0",stability:"stable",owners:[...J0],tags:["agent","update"],description:"Updates an existing AI agent configuration.",goal:"Allow users to modify agent settings and configuration.",context:"Called from the agent settings UI."},io:{input:V2,output:n({name:"UpdateAgentOutput",fields:{id:{type:h.String_unsecure(),isOptional:!1},name:{type:h.NonEmptyString(),isOptional:!1},status:{type:s,isOptional:!1},updatedAt:{type:h.DateTime(),isOptional:!1}}}),errors:{AGENT_NOT_FOUND:{description:"The specified agent does not exist",http:404,gqlCode:"AGENT_NOT_FOUND",when:"Agent ID is invalid"}}},policy:{auth:"user"},sideEffects:{emits:[{key:"agent.updated",version:"1.0.0",stability:"stable",owners:[...J0],tags:["agent","updated"],when:"Agent is updated",payload:B0}],audit:["agent.updated"]},acceptance:{scenarios:[{key:"update-agent-happy-path",given:["Agent exists","User owns the agent"],when:["User submits updated configuration"],then:["Agent is updated","AgentUpdated event is emitted"]},{key:"update-agent-not-found",given:["Agent does not exist"],when:["User attempts to update"],then:["AGENT_NOT_FOUND error is returned"]}],examples:[{key:"update-name",input:{agentId:"agent-123",name:"Updated Assistant",systemPrompt:"You are a helpful assistant."},output:{id:"agent-123",name:"Updated Assistant",status:"draft",updatedAt:"2025-01-01T00:00:00Z"}}]}}),P2=U1({meta:{key:"agent-console.agent.get",version:"1.0.0",stability:"stable",owners:[...J0],tags:["agent","get"],description:"Retrieves an agent by its ID.",goal:"View detailed agent configuration.",context:"Called when viewing agent details or editing."},io:{input:n({name:"GetAgentInput",fields:{agentId:{type:h.String_unsecure(),isOptional:!1},includeTools:{type:h.Boolean(),isOptional:!0}}}),output:U2,errors:{AGENT_NOT_FOUND:{description:"The specified agent does not exist",http:404,gqlCode:"AGENT_NOT_FOUND",when:"Agent ID is invalid"}}},policy:{auth:"user"},acceptance:{scenarios:[{key:"get-agent-happy-path",given:["Agent exists"],when:["User requests agent by ID"],then:["Agent details are returned"]},{key:"get-agent-with-tools",given:["Agent exists with assigned tools"],when:["User requests agent with includeTools=true"],then:["Agent details with tools list are returned"]}],examples:[{key:"get-basic",input:{agentId:"agent-123",includeTools:!1},output:{id:"agent-123",name:"Support Assistant",status:"active",tools:[]}}]}}),I2=U1({meta:{key:"agent-console.agent.list",version:"1.0.0",stability:"stable",owners:[...J0],tags:["agent","list"],description:"Lists agents for an organization with optional filtering.",goal:"Browse and search available agents.",context:"Agent list/dashboard view."},io:{input:n({name:"ListAgentsInput",fields:{organizationId:{type:h.String_unsecure(),isOptional:!1},status:{type:s,isOptional:!0},modelProvider:{type:q0,isOptional:!0},search:{type:h.String_unsecure(),isOptional:!0},limit:{type:h.Int_unsecure(),isOptional:!0,defaultValue:20},offset:{type:h.Int_unsecure(),isOptional:!0,defaultValue:0}}}),output:n({name:"ListAgentsOutput",fields:{items:{type:B0,isArray:!0,isOptional:!1},total:{type:h.Int_unsecure(),isOptional:!1},hasMore:{type:h.Boolean(),isOptional:!1}}})},policy:{auth:"user"},acceptance:{scenarios:[{key:"list-agents-happy-path",given:["Organization has agents"],when:["User lists agents"],then:["Paginated list of agents is returned"]},{key:"list-agents-filter-by-status",given:["Organization has agents with mixed statuses"],when:["User filters by status=active"],then:["Only active agents are returned"]}],examples:[{key:"list-basic",input:{organizationId:"org-123",limit:10,offset:0},output:{items:[],total:0,hasMore:!1}}]}}),v4=y0({meta:{key:"agent-console.agent.assignTool",version:"1.0.0",stability:"stable",owners:[...J0],tags:["agent","tool","assign"],description:"Assigns a tool to an agent with optional configuration.",goal:"Enable agents to use specific tools.",context:"Agent configuration UI - tool selection."},io:{input:n({name:"AssignToolToAgentInput",fields:{agentId:{type:h.String_unsecure(),isOptional:!1},toolId:{type:h.String_unsecure(),isOptional:!1},config:{type:h.JSONObject(),isOptional:!0},order:{type:h.Int_unsecure(),isOptional:!0}}}),output:n({name:"AssignToolToAgentOutput",fields:{agentToolId:{type:h.String_unsecure(),isOptional:!1},agentId:{type:h.String_unsecure(),isOptional:!1},toolId:{type:h.String_unsecure(),isOptional:!1}}}),errors:{TOOL_ALREADY_ASSIGNED:{description:"This tool is already assigned to the agent",http:409,gqlCode:"TOOL_ALREADY_ASSIGNED",when:"Tool assignment already exists"}}},policy:{auth:"user"},sideEffects:{audit:["agent.tool.assigned"]},acceptance:{scenarios:[{key:"assign-tool-happy-path",given:["Agent exists","Tool exists and is not assigned"],when:["User assigns tool to agent"],then:["Tool is assigned","Assignment ID is returned"]},{key:"assign-tool-already-assigned",given:["Tool is already assigned to agent"],when:["User attempts to assign again"],then:["TOOL_ALREADY_ASSIGNED error is returned"]}],examples:[{key:"assign-basic",input:{agentId:"agent-123",toolId:"tool-456"},output:{agentToolId:"at-789",agentId:"agent-123",toolId:"tool-456"}}]}}),W4=y0({meta:{key:"agent-console.agent.removeTool",version:"1.0.0",stability:"stable",owners:[...J0],tags:["agent","tool","remove"],description:"Removes a tool assignment from an agent.",goal:"Disable specific tools for an agent.",context:"Agent configuration UI - tool management."},io:{input:n({name:"RemoveToolFromAgentInput",fields:{agentId:{type:h.String_unsecure(),isOptional:!1},toolId:{type:h.String_unsecure(),isOptional:!1}}}),output:n({name:"RemoveToolFromAgentOutput",fields:{success:{type:h.Boolean(),isOptional:!1}}})},policy:{auth:"user"},sideEffects:{audit:["agent.tool.removed"]},acceptance:{scenarios:[{key:"remove-tool-happy-path",given:["Agent exists","Tool is assigned to agent"],when:["User removes tool from agent"],then:["Tool is unassigned","Success is returned"]}],examples:[{key:"remove-basic",input:{agentId:"agent-123",toolId:"tool-456"},output:{success:!0}}]}});var _4=m.length+1;async function N4(Z){let{organizationId:q,status:D,modelProvider:Y,search:X,limit:A=20,offset:z=0}=Z,V=m.filter((H)=>H.organizationId===q);if(D)V=V.filter((H)=>H.status===D);if(Y)V=V.filter((H)=>H.modelProvider===Y);if(X){let H=X.toLowerCase();V=V.filter((Q)=>Q.name.toLowerCase().includes(H)||Q.description?.toLowerCase().includes(H)||Q.tags?.some((G)=>G.toLowerCase().includes(H)))}let J=V.length;return{items:V.slice(z,z+A).map((H)=>({id:H.id,name:H.name,slug:H.slug,description:H.description,status:H.status,modelProvider:H.modelProvider,modelName:H.modelName,version:H.version,createdAt:H.createdAt})),total:J,hasMore:z+A<J}}async function L4(Z){let q=m.find((Y)=>Y.id===Z.agentId);if(!q)throw Error("AGENT_NOT_FOUND");let D={...q,toolIds:["tool-1","tool-2"]};if(Z.includeTools)D.tools=E.slice(0,2).map((Y)=>({id:Y.id,name:Y.name,slug:Y.slug,description:Y.description,category:Y.category}));return D}async function R4(Z){if(m.some((D)=>D.organizationId===Z.organizationId&&D.slug===Z.slug))throw Error("SLUG_EXISTS");return{id:`agent-${_4++}`,name:Z.name,slug:Z.slug,status:"DRAFT"}}async function O4(Z){let q=m.find((D)=>D.id===Z.agentId);if(!q)throw Error("AGENT_NOT_FOUND");return{id:q.id,name:Z.name??q.name,status:Z.status??q.status,updatedAt:new Date}}import{definePresentation as B2,StabilityEnum as v2}from"@contractspec/lib.contracts-spec";var M4=B2({meta:{key:"agent-console.agent.viewList",version:"1.0.0",title:"Agent List",description:"List view of AI agents with status, model provider, and version info",goal:"Provide an overview of all agents in an organization.",context:"Main landing page for agent management.",domain:"agent-console",owners:["@agent-console-team"],tags:["agent","list","dashboard"],stability:v2.Experimental},source:{type:"component",framework:"react",componentKey:"AgentListView",props:B0},targets:["react","markdown","application/json"],policy:{flags:["agent-console.enabled"]}}),b4=B2({meta:{key:"agent-console.agent.detail",version:"1.0.0",title:"Agent Details",description:"Detailed view of an AI agent with configuration, tools, and recent runs",goal:"Allow users to inspect and configure a specific agent.",context:"Detailed view of an agent.",domain:"agent-console",owners:["@agent-console-team"],tags:["agent","detail"],stability:v2.Experimental},source:{type:"component",framework:"react",componentKey:"AgentDetailView"},targets:["react","markdown"],policy:{flags:["agent-console.enabled"]}}),w4=B2({meta:{key:"agent-console.dashboard",version:"1.0.0",title:"Agent Console Dashboard",description:"Dashboard overview of AI agents, runs, and tools",goal:"Provide a high-level overview of the AI platform health and usage.",context:"Root dashboard of the Agent Console.",domain:"agent-console",owners:["@agent-console-team"],tags:["dashboard","overview"],stability:v2.Experimental},source:{type:"component",framework:"react",componentKey:"AgentConsoleDashboard"},targets:["react","markdown"],policy:{flags:["agent-console.enabled"]}});import{registerDocBlocks as C4}from"@contractspec/lib.contracts-spec/docs";var h4=[{id:"docs.examples.agent-console.goal",title:"Agent Console — 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 Y2,VisualizationRegistry as z4}from"@contractspec/lib.contracts-spec/visualizations";var J2={key:"agent.run.list",version:"1.0.0"},$2={version:"1.0.0",domain:"ai-ops",stability:"experimental",owners:["@example.agent-console"],tags:["agent-console","visualization","operations"]},X2=Y2({meta:{...$2,key:"agent-console.visualization.run-status",title:"Run Status Breakdown",description:"Distribution of run outcomes across the current sample.",goal:"Make operational success and failure mix visible at a glance.",context:"Agent operations overview."},source:{primary:J2,resultPath:"data"},visualization:{kind:"pie",nameDimension:"status",valueMeasure:"runs",dimensions:[{key:"status",label:"Status",dataPath:"status",type:"category"}],measures:[{key:"runs",label:"Runs",dataPath:"runs",format:"number"}],table:{caption:"Run counts by status."}}}),z2=Y2({meta:{...$2,key:"agent-console.visualization.run-activity",title:"Recent Run Activity",description:"Daily run volume across the current sample.",goal:"Show whether agent activity is rising or slowing down.",context:"Operations trend monitoring."},source:{primary:J2,resultPath:"data"},visualization:{kind:"cartesian",variant:"line",xDimension:"day",yMeasures:["runs"],dimensions:[{key:"day",label:"Day",dataPath:"day",type:"time"}],measures:[{key:"runs",label:"Runs",dataPath:"runs",format:"number",color:"#0f766e"}],table:{caption:"Daily run counts."}}}),Q2=Y2({meta:{...$2,key:"agent-console.visualization.run-efficiency",title:"Duration vs Tokens",description:"Scatter chart comparing token consumption and runtime.",goal:"Reveal outlier runs that are slow relative to their token usage.",context:"Operational performance diagnostics."},source:{primary:J2,resultPath:"data"},visualization:{kind:"cartesian",variant:"scatter",xDimension:"totalTokens",yMeasures:["durationMs"],dimensions:[{key:"totalTokens",label:"Total Tokens",dataPath:"totalTokens",type:"number"}],measures:[{key:"durationMs",label:"Duration",dataPath:"durationMs",format:"duration",color:"#7c3aed"},{key:"estimatedCostUsd",label:"Cost",dataPath:"estimatedCostUsd",format:"currency"}],series:[{key:"runs",label:"Runs",measure:"durationMs",type:"scatter",color:"#7c3aed"}],table:{caption:"Run duration versus token usage."}}}),Y1=[X2,z2,Q2],tZ=new z4([...Y1]),J1=Y1.map((Z)=>({key:Z.meta.key,version:Z.meta.version}));function $1(Z){if(!Z)return"unknown";return Z.toISOString().slice(0,10)}function j0(Z){let q=new Map,D=new Map;for(let Y of Z)q.set(Y.status,(q.get(Y.status)??0)+1),D.set($1(Y.startedAt??Y.queuedAt),(D.get($1(Y.startedAt??Y.queuedAt))??0)+1);return[{key:"run-status",spec:X2,data:{data:Array.from(q.entries()).map(([Y,X])=>({status:Y,runs:X}))},title:"Run Status Breakdown",description:"Completed, failed, running, and cancelled runs in the sample.",height:260},{key:"run-activity",spec:z2,data:{data:Array.from(D.entries()).sort(([Y],[X])=>Y.localeCompare(X)).map(([Y,X])=>({day:Y,runs:X}))},title:"Recent Run Activity",description:"Daily run volume derived from run start times."},{key:"run-efficiency",spec:Q2,data:{data:Z.filter((Y)=>typeof Y.durationMs==="number").map((Y)=>({totalTokens:Y.totalTokens,durationMs:Y.durationMs??0,estimatedCostUsd:Y.estimatedCostUsd}))},title:"Duration vs Tokens",description:"Operational scatter plot for spotting inefficient runs."}]}import{defineFeature as Q4}from"@contractspec/lib.contracts-spec/features";var J3=Q4({meta:{key:"agent-console",version:"1.0.0",title:"AI Agent Console",description:"AI agent orchestration with tools, runs, and logs management",domain:"ai-ops",owners:["@agent-console-team"],tags:["ai","agents","orchestration"],stability:"stable"},operations:[{key:"agent-console.agent.create",version:"1.0.0"},{key:"agent-console.agent.update",version:"1.0.0"},{key:"agent-console.agent.get",version:"1.0.0"},{key:"agent-console.agent.list",version:"1.0.0"},{key:"agent-console.agent.assignTool",version:"1.0.0"},{key:"agent-console.agent.removeTool",version:"1.0.0"},{key:"agent.tool.create",version:"1.0.0"},{key:"agent.tool.update",version:"1.0.0"},{key:"agent.tool.get",version:"1.0.0"},{key:"agent.tool.list",version:"1.0.0"},{key:"agent.tool.test",version:"1.0.0"},{key:"agent.run.execute",version:"1.0.0"},{key:"agent.run.cancel",version:"1.0.0"},{key:"agent.run.get",version:"1.0.0"},{key:"agent.run.list",version:"1.0.0"},{key:"agent.run.getSteps",version:"1.0.0"},{key:"agent.run.getLogs",version:"1.0.0"},{key:"agent.run.getMetrics",version:"1.0.0"}],events:[{key:"agent-console.agent.created",version:"1.0.0"},{key:"agent-console.agent.updated",version:"1.0.0"},{key:"agent-console.agent.toolAssigned",version:"1.0.0"},{key:"agent-console.agent.toolRemoved",version:"1.0.0"},{key:"agent.tool.created",version:"1.0.0"},{key:"agent.tool.updated",version:"1.0.0"},{key:"agent.tool.statusChanged",version:"1.0.0"},{key:"agent.run.started",version:"1.0.0"},{key:"agent.run.completed",version:"1.0.0"},{key:"agent.run.failed",version:"1.0.0"},{key:"agent.run.cancelled",version:"1.0.0"},{key:"agent.run.toolInvoked",version:"1.0.0"},{key:"agent.run.toolCompleted",version:"1.0.0"},{key:"agent.run.messageGenerated",version:"1.0.0"}],presentations:[{key:"agent-console.dashboard",version:"1.0.0"},{key:"agent-console.agent.viewList",version:"1.0.0"},{key:"agent-console.agent.detail",version:"1.0.0"},{key:"agent-console.run.list",version:"1.0.0"},{key:"agent-console.run.detail",version:"1.0.0"},{key:"agent-console.tool.list",version:"1.0.0"},{key:"agent-console.tool.detail",version:"1.0.0"}],opToPresentation:[{op:{key:"agent-console.agent.list",version:"1.0.0"},pres:{key:"agent-console.agent.viewList",version:"1.0.0"}},{op:{key:"agent-console.agent.get",version:"1.0.0"},pres:{key:"agent-console.agent.detail",version:"1.0.0"}},{op:{key:"agent.run.list",version:"1.0.0"},pres:{key:"agent-console.run.list",version:"1.0.0"}},{op:{key:"agent.run.get",version:"1.0.0"},pres:{key:"agent-console.run.detail",version:"1.0.0"}},{op:{key:"agent.tool.list",version:"1.0.0"},pres:{key:"agent-console.tool.list",version:"1.0.0"}},{op:{key:"agent.tool.get",version:"1.0.0"},pres:{key:"agent-console.tool.detail",version:"1.0.0"}}],presentationsTargets:[{key:"agent-console.dashboard",version:"1.0.0",targets:["react","markdown"]},{key:"agent-console.agent.viewList",version:"1.0.0",targets:["react","markdown","application/json"]},{key:"agent-console.run.list",version:"1.0.0",targets:["react","markdown","application/json"]},{key:"agent-console.tool.list",version:"1.0.0",targets:["react","markdown","application/json"]}],visualizations:J1,capabilities:{requires:[{key:"identity",version:"1.0.0"},{key:"audit-trail",version:"1.0.0"},{key:"jobs",version:"1.0.0"}],provides:[{key:"agent",version:"1.0.0"}]},telemetry:[{key:"agent-console.telemetry",version:"1.0.0"}],jobs:[{key:"agent-console.job.run-execution",version:"1.0.0"}],docs:["docs.examples.agent-console.goal","docs.examples.agent-console.usage","docs.examples.agent-console.reference","docs.examples.agent-console.constraints"]});import{defineEntity as X1,defineEntityEnum as z1,field as w,index as L0}from"@contractspec/lib.schema";var Q1=z1({name:"AgentStatus",values:["DRAFT","ACTIVE","PAUSED","ARCHIVED"],description:"Lifecycle status of the agent"}),G1=z1({name:"ModelProvider",values:["OPENAI","ANTHROPIC","GOOGLE","MISTRAL","CUSTOM"],description:"AI model provider"}),G4=X1({name:"Agent",schema:"agent_console",description:"Represents an AI agent configuration with assigned tools and parameters.",fields:{id:w.id(),organizationId:w.string({description:"Organization that owns this agent"}),name:w.string({description:"Agent name (1-100 chars)"}),slug:w.string({description:"URL-safe identifier (lowercase, numbers, hyphens)"}),description:w.string({isOptional:!0,description:"Agent description (max 1000 chars)"}),status:w.enum("AgentStatus",{default:"DRAFT"}),modelProvider:w.enum("ModelProvider",{default:"OPENAI"}),modelName:w.string({description:"Model identifier: 'gpt-4', 'claude-3-opus', etc."}),modelConfig:w.json({isOptional:!0,description:"Model parameters: temperature, max_tokens, etc."}),systemPrompt:w.string({description:"System prompt for the agent"}),userPromptTemplate:w.string({isOptional:!0,description:"Template for user prompts"}),toolIds:w.string({isArray:!0,isOptional:!0,description:"IDs of assigned tools"}),toolChoice:w.string({default:"auto",description:"Tool selection mode: 'auto', 'required', 'none'"}),maxIterations:w.int({default:10,description:"Maximum iterations per run"}),maxTokensPerRun:w.int({isOptional:!0,description:"Maximum tokens per run"}),timeoutMs:w.int({default:120000,description:"Execution timeout in milliseconds"}),version:w.string({default:"1.0.0",description:"Agent version"}),tags:w.string({isArray:!0,isOptional:!0,description:"Tags for categorization"}),createdAt:w.createdAt(),updatedAt:w.updatedAt(),createdById:w.string({isOptional:!0,description:"User who created this agent"}),tools:w.hasMany("Tool",{description:"Tools assigned to this agent"})},indexes:[L0.unique(["organizationId","slug"]),L0.on(["organizationId","status"]),L0.on(["modelProvider","modelName"])],enums:[Q1,G1]}),F4=X1({name:"AgentTool",schema:"agent_console",description:"Links an agent to its assigned tools with configuration.",fields:{id:w.id(),agentId:w.foreignKey({description:"Agent ID"}),toolId:w.foreignKey({description:"Tool ID"}),config:w.json({isOptional:!0,description:"Tool-specific configuration for this agent"}),order:w.int({default:0,description:"Order of tool in agent tool list"}),isEnabled:w.boolean({default:!0,description:"Whether tool is enabled for this agent"}),createdAt:w.createdAt(),agent:w.belongsTo("Agent",["agentId"],["id"]),tool:w.belongsTo("Tool",["toolId"],["id"])},indexes:[L0.unique(["agentId","toolId"]),L0.on(["agentId","order"])]});import{defineEnum as G2}from"@contractspec/lib.schema";var s=G2("AgentStatus",["DRAFT","ACTIVE","PAUSED","ARCHIVED"]),q0=G2("ModelProvider",["OPENAI","ANTHROPIC","GOOGLE","MISTRAL","CUSTOM"]),P0=G2("ToolChoice",["auto","required","none"]);import{defineEvent as x0}from"@contractspec/lib.contracts-spec";import{defineSchemaModel as g0,ScalarTypeEnum as C}from"@contractspec/lib.schema";var T0=["@agent-console-team"],U4=g0({name:"AgentCreatedPayload",description:"Payload for agent created event",fields:{id:{type:C.String_unsecure(),isOptional:!1},organizationId:{type:C.String_unsecure(),isOptional:!1},name:{type:C.String_unsecure(),isOptional:!1},slug:{type:C.String_unsecure(),isOptional:!1},modelProvider:{type:C.String_unsecure(),isOptional:!1},modelName:{type:C.String_unsecure(),isOptional:!1},toolCount:{type:C.Int_unsecure(),isOptional:!1},createdById:{type:C.String_unsecure(),isOptional:!0},createdAt:{type:C.DateTime(),isOptional:!1}}}),F2=x0({meta:{key:"agent-console.agent.created",version:"1.0.0",description:"A new AI agent was configured.",stability:"stable",owners:[...T0],tags:["agent","created"]},payload:U4}),A4=g0({name:"AgentUpdatedPayload",description:"Payload for agent updated event",fields:{id:{type:C.String_unsecure(),isOptional:!1},organizationId:{type:C.String_unsecure(),isOptional:!1},name:{type:C.String_unsecure(),isOptional:!1},status:{type:C.String_unsecure(),isOptional:!1},updatedFields:{type:C.String_unsecure(),isArray:!0,isOptional:!1},updatedAt:{type:C.DateTime(),isOptional:!1}}}),V4=x0({meta:{key:"agent-console.agent.updated",version:"1.0.0",description:"An AI agent configuration was updated.",stability:"stable",owners:[...T0],tags:["agent","updated"]},payload:A4}),K4=g0({name:"AgentToolAssignedPayload",description:"Payload for agent tool assigned event",fields:{agentId:{type:C.String_unsecure(),isOptional:!1},toolId:{type:C.String_unsecure(),isOptional:!1},agentName:{type:C.String_unsecure(),isOptional:!1},toolName:{type:C.String_unsecure(),isOptional:!1},assignedAt:{type:C.DateTime(),isOptional:!1}}}),k4=x0({meta:{key:"agent-console.agent.toolAssigned",version:"1.0.0",description:"A tool was assigned to an agent.",stability:"stable",owners:[...T0],tags:["agent","tool","assigned"]},payload:K4}),P4=g0({name:"AgentToolRemovedPayload",description:"Payload for agent tool removed event",fields:{agentId:{type:C.String_unsecure(),isOptional:!1},toolId:{type:C.String_unsecure(),isOptional:!1},agentName:{type:C.String_unsecure(),isOptional:!1},toolName:{type:C.String_unsecure(),isOptional:!1},removedAt:{type:C.DateTime(),isOptional:!1}}}),I4=x0({meta:{key:"agent-console.agent.toolRemoved",version:"1.0.0",description:"A tool was removed from an agent.",stability:"stable",owners:[...T0],tags:["agent","tool","removed"]},payload:P4});var m=[{id:"agent-1",organizationId:"demo-org",name:"Customer Support Bot",slug:"customer-support-bot",description:"Handles tier-1 customer inquiries and routes complex issues.",status:"ACTIVE",modelProvider:"OPENAI",modelName:"gpt-4o-mini",modelConfig:{temperature:0.7},systemPrompt:"You are a helpful customer support assistant.",toolChoice:"auto",maxIterations:10,timeoutMs:120000,version:"1.0.0",tags:["support","tier-1"],createdAt:new Date("2024-01-15T10:00:00Z"),updatedAt:new Date("2024-03-20T14:30:00Z")},{id:"agent-2",organizationId:"demo-org",name:"Code Review Assistant",slug:"code-review-assistant",description:"Reviews pull requests and provides actionable feedback.",status:"ACTIVE",modelProvider:"ANTHROPIC",modelName:"claude-sonnet-4-20250514",modelConfig:{temperature:0.3},systemPrompt:"You are a code review expert.",toolChoice:"auto",maxIterations:15,timeoutMs:180000,version:"2.1.0",tags:["code","review","dev"],createdAt:new Date("2024-02-10T09:00:00Z"),updatedAt:new Date("2024-04-05T11:15:00Z")},{id:"agent-3",organizationId:"demo-org",name:"Data Analyst",slug:"data-analyst",description:"Queries databases and generates insights from data.",status:"PAUSED",modelProvider:"OPENAI",modelName:"gpt-4o",modelConfig:{temperature:0.5},systemPrompt:"You are a data analyst expert in SQL and analytics.",toolChoice:"required",maxIterations:20,timeoutMs:300000,version:"1.2.0",tags:["data","analytics","sql"],createdAt:new Date("2024-03-01T08:00:00Z"),updatedAt:new Date("2024-04-10T16:45:00Z")},{id:"agent-4",organizationId:"demo-org",name:"Meeting Scheduler",slug:"meeting-scheduler",description:"Schedules meetings and manages calendar conflicts.",status:"DRAFT",modelProvider:"GOOGLE",modelName:"gemini-2.0-flash",modelConfig:{temperature:0.2},systemPrompt:"You help schedule and organize meetings efficiently.",toolChoice:"auto",maxIterations:5,timeoutMs:60000,version:"0.1.0",tags:["calendar","scheduling"],createdAt:new Date("2024-04-01T12:00:00Z"),updatedAt:new Date("2024-04-01T12:00:00Z")}];var E=[{id:"tool-1",organizationId:"demo-org",name:"Web Search",slug:"web-search",description:"Search the web for real-time information using Brave API.",category:"RETRIEVAL",status:"ACTIVE",parametersSchema:{type:"object",properties:{query:{type:"string",description:"Search query"},numResults:{type:"number",default:10}},required:["query"]},outputSchema:{type:"array",items:{type:"object"}},implementationType:"http",implementationConfig:{url:"https://api.brave.com/search",method:"GET"},maxInvocationsPerMinute:60,timeoutMs:30000,version:"1.0.0",tags:["search","web"],createdAt:new Date("2024-01-01T00:00:00Z"),updatedAt:new Date("2024-02-15T10:00:00Z")},{id:"tool-2",organizationId:"demo-org",name:"SQL Query",slug:"sql-query",description:"Execute read-only SQL queries against the data warehouse.",category:"RETRIEVAL",status:"ACTIVE",parametersSchema:{type:"object",properties:{query:{type:"string",description:"SQL query"},maxRows:{type:"number",default:100}},required:["query"]},outputSchema:{type:"object"},implementationType:"function",implementationConfig:{handler:"executeSqlQuery"},maxInvocationsPerMinute:30,timeoutMs:60000,version:"1.1.0",tags:["sql","database"],createdAt:new Date("2024-01-05T00:00:00Z"),updatedAt:new Date("2024-03-10T14:00:00Z")},{id:"tool-3",organizationId:"demo-org",name:"Email Sender",slug:"email-sender",description:"Send emails via SMTP or API.",category:"COMMUNICATION",status:"ACTIVE",parametersSchema:{type:"object",properties:{to:{type:"string"},subject:{type:"string"},body:{type:"string"}},required:["to","subject","body"]},implementationType:"http",implementationConfig:{url:"/api/send-email",method:"POST"},maxInvocationsPerMinute:10,timeoutMs:30000,version:"1.0.0",tags:["email","communication"],createdAt:new Date("2024-02-01T00:00:00Z"),updatedAt:new Date("2024-02-01T00:00:00Z")},{id:"tool-4",organizationId:"demo-org",name:"GitHub Integration",slug:"github-integration",description:"Interact with GitHub repositories, PRs, and issues.",category:"INTEGRATION",status:"ACTIVE",parametersSchema:{type:"object",properties:{action:{type:"string",enum:["list_prs","get_pr","create_comment"]},repo:{type:"string"},params:{type:"object"}},required:["action","repo"]},implementationType:"http",implementationConfig:{url:"https://api.github.com",auth:"token"},maxInvocationsPerMinute:100,timeoutMs:15000,version:"2.0.0",tags:["github","integration","code"],createdAt:new Date("2024-02-20T00:00:00Z"),updatedAt:new Date("2024-04-01T09:00:00Z")},{id:"tool-5",organizationId:"demo-org",name:"Calculator",slug:"calculator",description:"Perform mathematical calculations.",category:"COMPUTATION",status:"ACTIVE",parametersSchema:{type:"object",properties:{expression:{type:"string",description:"Math expression to evaluate"}},required:["expression"]},outputSchema:{type:"object",properties:{result:{type:"number"}}},implementationType:"function",implementationConfig:{handler:"evaluateMath"},timeoutMs:5000,version:"1.0.0",tags:["math","utility"],createdAt:new Date("2024-01-10T00:00:00Z"),updatedAt:new Date("2024-01-10T00:00:00Z")}];import{defineSchemaModel as I0,ScalarTypeEnum as K}from"@contractspec/lib.schema";var B4=I0({name:"Agent",description:"AI agent configuration",fields:{id:{type:K.String_unsecure(),isOptional:!1},organizationId:{type:K.String_unsecure(),isOptional:!1},name:{type:K.NonEmptyString(),isOptional:!1},slug:{type:K.String_unsecure(),isOptional:!1},description:{type:K.String_unsecure(),isOptional:!0},status:{type:s,isOptional:!1},modelProvider:{type:q0,isOptional:!1},modelName:{type:K.NonEmptyString(),isOptional:!1},modelConfig:{type:K.JSONObject(),isOptional:!0},systemPrompt:{type:K.String_unsecure(),isOptional:!1},userPromptTemplate:{type:K.String_unsecure(),isOptional:!0},toolIds:{type:K.String_unsecure(),isArray:!0,isOptional:!0},toolChoice:{type:P0,isOptional:!1,defaultValue:"auto"},maxIterations:{type:K.Int_unsecure(),isOptional:!1,defaultValue:10},maxTokensPerRun:{type:K.Int_unsecure(),isOptional:!0},timeoutMs:{type:K.Int_unsecure(),isOptional:!1,defaultValue:120000},version:{type:K.NonEmptyString(),isOptional:!1},tags:{type:K.String_unsecure(),isArray:!0,isOptional:!0},createdAt:{type:K.DateTime(),isOptional:!1},updatedAt:{type:K.DateTime(),isOptional:!1}}}),B0=I0({name:"AgentSummary",description:"Summary of an agent for list views",fields:{id:{type:K.String_unsecure(),isOptional:!1},name:{type:K.NonEmptyString(),isOptional:!1},slug:{type:K.String_unsecure(),isOptional:!1},description:{type:K.String_unsecure(),isOptional:!0},status:{type:s,isOptional:!1},modelProvider:{type:q0,isOptional:!1},modelName:{type:K.NonEmptyString(),isOptional:!1},version:{type:K.NonEmptyString(),isOptional:!1},createdAt:{type:K.DateTime(),isOptional:!1}}}),F1=I0({name:"AgentToolRef",description:"Tool reference in agent context",fields:{id:{type:K.String_unsecure(),isOptional:!1},name:{type:K.NonEmptyString(),isOptional:!1},slug:{type:K.String_unsecure(),isOptional:!1},description:{type:K.String_unsecure(),isOptional:!1},category:{type:K.String_unsecure(),isOptional:!1}}}),U2=I0({name:"AgentWithTools",description:"Agent with associated tools",fields:{id:{type:K.String_unsecure(),isOptional:!1},organizationId:{type:K.String_unsecure(),isOptional:!1},name:{type:K.NonEmptyString(),isOptional:!1},slug:{type:K.String_unsecure(),isOptional:!1},description:{type:K.String_unsecure(),isOptional:!0},status:{type:s,isOptional:!1},modelProvider:{type:q0,isOptional:!1},modelName:{type:K.NonEmptyString(),isOptional:!1},modelConfig:{type:K.JSONObject(),isOptional:!0},systemPrompt:{type:K.String_unsecure(),isOptional:!1},userPromptTemplate:{type:K.String_unsecure(),isOptional:!0},toolIds:{type:K.String_unsecure(),isArray:!0,isOptional:!0},toolChoice:{type:P0,isOptional:!1},maxIterations:{type:K.Int_unsecure(),isOptional:!1},maxTokensPerRun:{type:K.Int_unsecure(),isOptional:!0},timeoutMs:{type:K.Int_unsecure(),isOptional:!1},version:{type:K.NonEmptyString(),isOptional:!1},tags:{type:K.String_unsecure(),isArray:!0,isOptional:!0},createdAt:{type:K.DateTime(),isOptional:!1},updatedAt:{type:K.DateTime(),isOptional:!1},tools:{type:F1,isArray:!0,isOptional:!0}}}),A2=I0({name:"CreateAgentInput",description:"Input for creating an agent",fields:{organizationId:{type:K.String_unsecure(),isOptional:!1},name:{type:K.NonEmptyString(),isOptional:!1},slug:{type:K.String_unsecure(),isOptional:!1},description:{type:K.String_unsecure(),isOptional:!0},modelProvider:{type:q0,isOptional:!1},modelName:{type:K.NonEmptyString(),isOptional:!1},modelConfig:{type:K.JSONObject(),isOptional:!0},systemPrompt:{type:K.String_unsecure(),isOptional:!1},userPromptTemplate:{type:K.String_unsecure(),isOptional:!0},toolIds:{type:K.String_unsecure(),isArray:!0,isOptional:!0},toolChoice:{type:P0,isOptional:!0},maxIterations:{type:K.Int_unsecure(),isOptional:!0},maxTokensPerRun:{type:K.Int_unsecure(),isOptional:!0},timeoutMs:{type:K.Int_unsecure(),isOptional:!0},tags:{type:K.String_unsecure(),isArray:!0,isOptional:!0}}}),V2=I0({name:"UpdateAgentInput",description:"Input for updating an agent",fields:{agentId:{type:K.String_unsecure(),isOptional:!1},name:{type:K.NonEmptyString(),isOptional:!0},description:{type:K.String_unsecure(),isOptional:!0},status:{type:s,isOptional:!0},modelConfig:{type:K.JSONObject(),isOptional:!0},systemPrompt:{type:K.String_unsecure(),isOptional:!0},userPromptTemplate:{type:K.String_unsecure(),isOptional:!0},toolIds:{type:K.String_unsecure(),isArray:!0,isOptional:!0},toolChoice:{type:P0,isOptional:!0},maxIterations:{type:K.Int_unsecure(),isOptional:!0},maxTokensPerRun:{type:K.Int_unsecure(),isOptional:!0},timeoutMs:{type:K.Int_unsecure(),isOptional:!0},tags:{type:K.String_unsecure(),isArray:!0,isOptional:!0}}});import{defineCommand as y0,defineQuery as U1}from"@contractspec/lib.contracts-spec/operations";import{defineSchemaModel as n,ScalarTypeEnum as h}from"@contractspec/lib.schema";var J0=["@agent-console-team"],K2=y0({meta:{key:"agent-console.agent.create",version:"1.0.0",stability:"stable",owners:[...J0],tags:["agent","create"],description:"Creates a new AI agent configuration.",goal:"Allow users to define new AI agents with specific models and tools.",context:"Called from the agent builder UI when creating a new agent."},io:{input:A2,output:n({name:"CreateAgentOutput",fields:{id:{type:h.String_unsecure(),isOptional:!1},name:{type:h.NonEmptyString(),isOptional:!1},slug:{type:h.String_unsecure(),isOptional:!1},status:{type:s,isOptional:!1}}}),errors:{SLUG_EXISTS:{description:"An agent with this slug already exists in the organization",http:409,gqlCode:"SLUG_EXISTS",when:"Slug is already taken"}}},policy:{auth:"user"},sideEffects:{emits:[{ref:F2.meta,when:"Agent is successfully created"}],audit:["agent-console.agent.created"]},acceptance:{scenarios:[{key:"create-agent-happy-path",given:["User is authenticated","Organization exists"],when:["User submits valid agent configuration"],then:["New agent is created with DRAFT status","AgentCreated event is emitted"]},{key:"create-agent-slug-conflict",given:["User is authenticated","Agent with same slug exists"],when:["User submits agent with duplicate slug"],then:["SLUG_EXISTS error is returned with 409 status"]}],examples:[{key:"basic-create",input:{name:"Support Assistant",slug:"support-assistant",modelProvider:"openai",modelId:"gpt-4"},output:{id:"agent-123",name:"Support Assistant",slug:"support-assistant",status:"draft"}}]}}),k2=y0({meta:{key:"agent-console.agent.update",version:"1.0.0",stability:"stable",owners:[...J0],tags:["agent","update"],description:"Updates an existing AI agent configuration.",goal:"Allow users to modify agent settings and configuration.",context:"Called from the agent settings UI."},io:{input:V2,output:n({name:"UpdateAgentOutput",fields:{id:{type:h.String_unsecure(),isOptional:!1},name:{type:h.NonEmptyString(),isOptional:!1},status:{type:s,isOptional:!1},updatedAt:{type:h.DateTime(),isOptional:!1}}}),errors:{AGENT_NOT_FOUND:{description:"The specified agent does not exist",http:404,gqlCode:"AGENT_NOT_FOUND",when:"Agent ID is invalid"}}},policy:{auth:"user"},sideEffects:{emits:[{key:"agent.updated",version:"1.0.0",stability:"stable",owners:[...J0],tags:["agent","updated"],when:"Agent is updated",payload:B0}],audit:["agent.updated"]},acceptance:{scenarios:[{key:"update-agent-happy-path",given:["Agent exists","User owns the agent"],when:["User submits updated configuration"],then:["Agent is updated","AgentUpdated event is emitted"]},{key:"update-agent-not-found",given:["Agent does not exist"],when:["User attempts to update"],then:["AGENT_NOT_FOUND error is returned"]}],examples:[{key:"update-name",input:{agentId:"agent-123",name:"Updated Assistant",systemPrompt:"You are a helpful assistant."},output:{id:"agent-123",name:"Updated Assistant",status:"draft",updatedAt:"2025-01-01T00:00:00Z"}}]}}),P2=U1({meta:{key:"agent-console.agent.get",version:"1.0.0",stability:"stable",owners:[...J0],tags:["agent","get"],description:"Retrieves an agent by its ID.",goal:"View detailed agent configuration.",context:"Called when viewing agent details or editing."},io:{input:n({name:"GetAgentInput",fields:{agentId:{type:h.String_unsecure(),isOptional:!1},includeTools:{type:h.Boolean(),isOptional:!0}}}),output:U2,errors:{AGENT_NOT_FOUND:{description:"The specified agent does not exist",http:404,gqlCode:"AGENT_NOT_FOUND",when:"Agent ID is invalid"}}},policy:{auth:"user"},acceptance:{scenarios:[{key:"get-agent-happy-path",given:["Agent exists"],when:["User requests agent by ID"],then:["Agent details are returned"]},{key:"get-agent-with-tools",given:["Agent exists with assigned tools"],when:["User requests agent with includeTools=true"],then:["Agent details with tools list are returned"]}],examples:[{key:"get-basic",input:{agentId:"agent-123",includeTools:!1},output:{id:"agent-123",name:"Support Assistant",status:"active",tools:[]}}]}}),I2=U1({meta:{key:"agent-console.agent.list",version:"1.0.0",stability:"stable",owners:[...J0],tags:["agent","list"],description:"Lists agents for an organization with optional filtering.",goal:"Browse and search available agents.",context:"Agent list/dashboard view."},io:{input:n({name:"ListAgentsInput",fields:{organizationId:{type:h.String_unsecure(),isOptional:!1},status:{type:s,isOptional:!0},modelProvider:{type:q0,isOptional:!0},search:{type:h.String_unsecure(),isOptional:!0},limit:{type:h.Int_unsecure(),isOptional:!0,defaultValue:20},offset:{type:h.Int_unsecure(),isOptional:!0,defaultValue:0}}}),output:n({name:"ListAgentsOutput",fields:{items:{type:B0,isArray:!0,isOptional:!1},total:{type:h.Int_unsecure(),isOptional:!1},hasMore:{type:h.Boolean(),isOptional:!1}}})},policy:{auth:"user"},acceptance:{scenarios:[{key:"list-agents-happy-path",given:["Organization has agents"],when:["User lists agents"],then:["Paginated list of agents is returned"]},{key:"list-agents-filter-by-status",given:["Organization has agents with mixed statuses"],when:["User filters by status=active"],then:["Only active agents are returned"]}],examples:[{key:"list-basic",input:{organizationId:"org-123",limit:10,offset:0},output:{items:[],total:0,hasMore:!1}}]}}),v4=y0({meta:{key:"agent-console.agent.assignTool",version:"1.0.0",stability:"stable",owners:[...J0],tags:["agent","tool","assign"],description:"Assigns a tool to an agent with optional configuration.",goal:"Enable agents to use specific tools.",context:"Agent configuration UI - tool selection."},io:{input:n({name:"AssignToolToAgentInput",fields:{agentId:{type:h.String_unsecure(),isOptional:!1},toolId:{type:h.String_unsecure(),isOptional:!1},config:{type:h.JSONObject(),isOptional:!0},order:{type:h.Int_unsecure(),isOptional:!0}}}),output:n({name:"AssignToolToAgentOutput",fields:{agentToolId:{type:h.String_unsecure(),isOptional:!1},agentId:{type:h.String_unsecure(),isOptional:!1},toolId:{type:h.String_unsecure(),isOptional:!1}}}),errors:{TOOL_ALREADY_ASSIGNED:{description:"This tool is already assigned to the agent",http:409,gqlCode:"TOOL_ALREADY_ASSIGNED",when:"Tool assignment already exists"}}},policy:{auth:"user"},sideEffects:{audit:["agent.tool.assigned"]},acceptance:{scenarios:[{key:"assign-tool-happy-path",given:["Agent exists","Tool exists and is not assigned"],when:["User assigns tool to agent"],then:["Tool is assigned","Assignment ID is returned"]},{key:"assign-tool-already-assigned",given:["Tool is already assigned to agent"],when:["User attempts to assign again"],then:["TOOL_ALREADY_ASSIGNED error is returned"]}],examples:[{key:"assign-basic",input:{agentId:"agent-123",toolId:"tool-456"},output:{agentToolId:"at-789",agentId:"agent-123",toolId:"tool-456"}}]}}),W4=y0({meta:{key:"agent-console.agent.removeTool",version:"1.0.0",stability:"stable",owners:[...J0],tags:["agent","tool","remove"],description:"Removes a tool assignment from an agent.",goal:"Disable specific tools for an agent.",context:"Agent configuration UI - tool management."},io:{input:n({name:"RemoveToolFromAgentInput",fields:{agentId:{type:h.String_unsecure(),isOptional:!1},toolId:{type:h.String_unsecure(),isOptional:!1}}}),output:n({name:"RemoveToolFromAgentOutput",fields:{success:{type:h.Boolean(),isOptional:!1}}})},policy:{auth:"user"},sideEffects:{audit:["agent.tool.removed"]},acceptance:{scenarios:[{key:"remove-tool-happy-path",given:["Agent exists","Tool is assigned to agent"],when:["User removes tool from agent"],then:["Tool is unassigned","Success is returned"]}],examples:[{key:"remove-basic",input:{agentId:"agent-123",toolId:"tool-456"},output:{success:!0}}]}});var _4=m.length+1;async function N4(Z){let{organizationId:q,status:D,modelProvider:Y,search:X,limit:A=20,offset:z=0}=Z,V=m.filter((H)=>H.organizationId===q);if(D)V=V.filter((H)=>H.status===D);if(Y)V=V.filter((H)=>H.modelProvider===Y);if(X){let H=X.toLowerCase();V=V.filter((Q)=>Q.name.toLowerCase().includes(H)||Q.description?.toLowerCase().includes(H)||Q.tags?.some((G)=>G.toLowerCase().includes(H)))}let J=V.length;return{items:V.slice(z,z+A).map((H)=>({id:H.id,name:H.name,slug:H.slug,description:H.description,status:H.status,modelProvider:H.modelProvider,modelName:H.modelName,version:H.version,createdAt:H.createdAt})),total:J,hasMore:z+A<J}}async function L4(Z){let q=m.find((Y)=>Y.id===Z.agentId);if(!q)throw Error("AGENT_NOT_FOUND");let D={...q,toolIds:["tool-1","tool-2"]};if(Z.includeTools)D.tools=E.slice(0,2).map((Y)=>({id:Y.id,name:Y.name,slug:Y.slug,description:Y.description,category:Y.category}));return D}async function R4(Z){if(m.some((D)=>D.organizationId===Z.organizationId&&D.slug===Z.slug))throw Error("SLUG_EXISTS");return{id:`agent-${_4++}`,name:Z.name,slug:Z.slug,status:"DRAFT"}}async function O4(Z){let q=m.find((D)=>D.id===Z.agentId);if(!q)throw Error("AGENT_NOT_FOUND");return{id:q.id,name:Z.name??q.name,status:Z.status??q.status,updatedAt:new Date}}import{definePresentation as B2,StabilityEnum as v2}from"@contractspec/lib.contracts-spec";var M4=B2({meta:{key:"agent-console.agent.viewList",version:"1.0.0",title:"Agent List",description:"List view of AI agents with status, model provider, and version info",goal:"Provide an overview of all agents in an organization.",context:"Main landing page for agent management.",domain:"agent-console",owners:["@agent-console-team"],tags:["agent","list","dashboard"],stability:v2.Experimental},source:{type:"component",framework:"react",componentKey:"AgentListView",props:B0},targets:["react","markdown","application/json"],policy:{flags:["agent-console.enabled"]}}),b4=B2({meta:{key:"agent-console.agent.detail",version:"1.0.0",title:"Agent Details",description:"Detailed view of an AI agent with configuration, tools, and recent runs",goal:"Allow users to inspect and configure a specific agent.",context:"Detailed view of an agent.",domain:"agent-console",owners:["@agent-console-team"],tags:["agent","detail"],stability:v2.Experimental},source:{type:"component",framework:"react",componentKey:"AgentDetailView"},targets:["react","markdown"],policy:{flags:["agent-console.enabled"]}}),w4=B2({meta:{key:"agent-console.dashboard",version:"1.0.0",title:"Agent Console Dashboard",description:"Dashboard overview of AI agents, runs, and tools",goal:"Provide a high-level overview of the AI platform health and usage.",context:"Root dashboard of the Agent Console.",domain:"agent-console",owners:["@agent-console-team"],tags:["dashboard","overview"],stability:v2.Experimental},source:{type:"component",framework:"react",componentKey:"AgentConsoleDashboard"},targets:["react","markdown"],policy:{flags:["agent-console.enabled"]}});import{registerDocBlocks as C4}from"@contractspec/lib.contracts-spec/docs";var h4=[{id:"docs.examples.agent-console.goal",title:"Agent Console — 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,7 +49,7 @@ import{defineVisualization as Y2,VisualizationRegistry as z4}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.`}];C4(h4);import{defineExample as f4}from"@contractspec/lib.contracts-spec";var j4=f4({meta:{key:"agent-console",version:"1.0.0",title:"Agent Console",description:"AI agent ops console: tools, agents, runs, logs, and metrics (spec-first, regenerable).",kind:"template",visibility:"public",stability:"beta",owners:["@platform.core"],tags:["ai","agents","tools","orchestration"]},docs:{rootDocId:"docs.examples.agent-console.reference",goalDocId:"docs.examples.agent-console.goal",usageDocId:"docs.examples.agent-console.usage",constraintsDocId:"docs.examples.agent-console.constraints"},entrypoints:{packageName:"@contractspec/example.agent-console",feature:"./agent.feature",presentations:"./presentations",handlers:"./handlers",docs:"./docs"},surfaces:{templates:!0,sandbox:{enabled:!0,modes:["playground","specs","builder","markdown","evolution"]},studio:{enabled:!0,installable:!0},mcp:{enabled:!0}}}),x4=j4;import{defineEnum as d0}from"@contractspec/lib.schema";var a=d0("RunStatus",["QUEUED","IN_PROGRESS","COMPLETED","FAILED","CANCELLED","EXPIRED"]),W2=d0("RunStepType",["MESSAGE_CREATION","TOOL_CALL","TOOL_RESULT","ERROR"]),R0=d0("LogLevel",["DEBUG","INFO","WARN","ERROR"]),_2=d0("Granularity",["hour","day","week","month"]);import{defineSchemaModel as $0,ScalarTypeEnum as I}from"@contractspec/lib.schema";var N2=$0({name:"RunInput",description:"Input data for agent execution",fields:{message:{type:I.NonEmptyString(),isOptional:!1},context:{type:I.JSONObject(),isOptional:!0}}}),m0=$0({name:"RunStep",description:"Individual step within a run",fields:{id:{type:I.String_unsecure(),isOptional:!1},stepNumber:{type:I.Int_unsecure(),isOptional:!1},type:{type:W2,isOptional:!1},toolId:{type:I.String_unsecure(),isOptional:!0},toolName:{type:I.String_unsecure(),isOptional:!0},input:{type:I.JSONObject(),isOptional:!0},output:{type:I.JSONObject(),isOptional:!0},status:{type:a,isOptional:!1},errorMessage:{type:I.String_unsecure(),isOptional:!0},tokensUsed:{type:I.Int_unsecure(),isOptional:!1,defaultValue:0},durationMs:{type:I.Int_unsecure(),isOptional:!0},startedAt:{type:I.DateTime(),isOptional:!1},completedAt:{type:I.DateTime(),isOptional:!0}}}),E0=$0({name:"RunLog",description:"Execution log entry",fields:{id:{type:I.String_unsecure(),isOptional:!1},stepId:{type:I.String_unsecure(),isOptional:!0},level:{type:R0,isOptional:!1},message:{type:I.String_unsecure(),isOptional:!1},data:{type:I.JSONObject(),isOptional:!0},source:{type:I.String_unsecure(),isOptional:!0},traceId:{type:I.String_unsecure(),isOptional:!0},spanId:{type:I.String_unsecure(),isOptional:!0},timestamp:{type:I.DateTime(),isOptional:!1}}}),A1=$0({name:"RunAgentRef",description:"Agent reference in a run",fields:{id:{type:I.String_unsecure(),isOptional:!1},name:{type:I.NonEmptyString(),isOptional:!1},modelProvider:{type:I.String_unsecure(),isOptional:!1},modelName:{type:I.String_unsecure(),isOptional:!1}}}),L2=$0({name:"Run",description:"Agent execution instance",fields:{id:{type:I.String_unsecure(),isOptional:!1},organizationId:{type:I.String_unsecure(),isOptional:!1},agentId:{type:I.String_unsecure(),isOptional:!1},userId:{type:I.String_unsecure(),isOptional:!0},sessionId:{type:I.String_unsecure(),isOptional:!0},input:{type:I.JSONObject(),isOptional:!1},output:{type:I.JSONObject(),isOptional:!0},status:{type:a,isOptional:!1},errorMessage:{type:I.String_unsecure(),isOptional:!0},errorCode:{type:I.String_unsecure(),isOptional:!0},totalTokens:{type:I.Int_unsecure(),isOptional:!1,defaultValue:0},promptTokens:{type:I.Int_unsecure(),isOptional:!1,defaultValue:0},completionTokens:{type:I.Int_unsecure(),isOptional:!1,defaultValue:0},totalIterations:{type:I.Int_unsecure(),isOptional:!1,defaultValue:0},durationMs:{type:I.Int_unsecure(),isOptional:!0},estimatedCostUsd:{type:I.Float_unsecure(),isOptional:!0},queuedAt:{type:I.DateTime(),isOptional:!1},startedAt:{type:I.DateTime(),isOptional:!0},completedAt:{type:I.DateTime(),isOptional:!0},metadata:{type:I.JSONObject(),isOptional:!0},steps:{type:m0,isArray:!0,isOptional:!0},logs:{type:E0,isArray:!0,isOptional:!0},agent:{type:A1,isOptional:!0}}}),X0=$0({name:"RunSummary",description:"Summary of a run for list views",fields:{id:{type:I.String_unsecure(),isOptional:!1},agentId:{type:I.String_unsecure(),isOptional:!1},agentName:{type:I.NonEmptyString(),isOptional:!1},status:{type:a,isOptional:!1},totalTokens:{type:I.Int_unsecure(),isOptional:!1},durationMs:{type:I.Int_unsecure(),isOptional:!0},estimatedCostUsd:{type:I.Float_unsecure(),isOptional:!0},queuedAt:{type:I.DateTime(),isOptional:!1},completedAt:{type:I.DateTime(),isOptional:!0}}}),R2=$0({name:"TimelineDataPoint",description:"Timeline data point for metrics",fields:{period:{type:I.String_unsecure(),isOptional:!1},runs:{type:I.Int_unsecure(),isOptional:!1},tokens:{type:I.Int_unsecure(),isOptional:!1},costUsd:{type:I.Float_unsecure(),isOptional:!1},avgDurationMs:{type:I.Float_unsecure(),isOptional:!1}}});import{defineCommand as V1,defineQuery as O0}from"@contractspec/lib.contracts-spec/operations";import{defineSchemaModel as S,ScalarTypeEnum as N}from"@contractspec/lib.schema";var e=["@agent-console-team"],O2=V1({meta:{key:"agent.run.execute",version:"1.0.0",stability:"stable",owners:[...e],tags:["run","execute"],description:"Starts a new agent run with the given input.",goal:"Execute an AI agent with user input.",context:"Called from chat interface or API."},io:{input:S({name:"ExecuteAgentInput",fields:{agentId:{type:N.String_unsecure(),isOptional:!1},input:{type:N2,isOptional:!1},sessionId:{type:N.String_unsecure(),isOptional:!0},metadata:{type:N.JSONObject(),isOptional:!0},stream:{type:N.Boolean(),isOptional:!0},maxIterations:{type:N.Int_unsecure(),isOptional:!0},timeoutMs:{type:N.Int_unsecure(),isOptional:!0}}}),output:S({name:"ExecuteAgentOutput",fields:{runId:{type:N.String_unsecure(),isOptional:!1},status:{type:a,isOptional:!1},estimatedWaitMs:{type:N.Int_unsecure(),isOptional:!0}}}),errors:{AGENT_NOT_FOUND:{description:"The specified agent does not exist",http:404,gqlCode:"AGENT_NOT_FOUND",when:"Agent ID is invalid"},AGENT_NOT_ACTIVE:{description:"The specified agent is not active",http:400,gqlCode:"AGENT_NOT_ACTIVE",when:"Agent is in draft/paused/archived state"}}},policy:{auth:"user"},sideEffects:{emits:[{key:"run.started",version:"1.0.0",stability:"stable",owners:[...e],tags:["run","started"],when:"Run is queued",payload:X0}],audit:["run.started"]},acceptance:{scenarios:[{key:"execute-agent-happy-path",given:["Agent exists","Agent is active"],when:["User submits execution request"],then:["Run is created","RunStarted event is emitted"]},{key:"execute-agent-not-active",given:["Agent exists but is not active"],when:["User attempts to execute"],then:["AGENT_NOT_ACTIVE error is returned"]}],examples:[{key:"basic-execute",input:{agentId:"agent-123",input:{message:"Hello"}},output:{runId:"run-456",status:"pending",estimatedWaitMs:5000}}]}}),K1=V1({meta:{key:"agent.run.cancel",version:"1.0.0",stability:"stable",owners:[...e],tags:["run","cancel"],description:"Cancels an in-progress agent run.",goal:"Stop a running agent execution.",context:"Called when user wants to abort a long-running task."},io:{input:S({name:"CancelRunInput",fields:{runId:{type:N.String_unsecure(),isOptional:!1},reason:{type:N.String_unsecure(),isOptional:!0}}}),output:S({name:"CancelRunOutput",fields:{success:{type:N.Boolean(),isOptional:!1},status:{type:a,isOptional:!1}}}),errors:{RUN_NOT_FOUND:{description:"The specified run does not exist",http:404,gqlCode:"RUN_NOT_FOUND",when:"Run ID is invalid"},RUN_NOT_CANCELLABLE:{description:"The run cannot be cancelled",http:400,gqlCode:"RUN_NOT_CANCELLABLE",when:"Run is already completed/failed/cancelled"}}},policy:{auth:"user"},sideEffects:{emits:[{key:"run.cancelled",version:"1.0.0",stability:"stable",owners:[...e],tags:["run","cancelled"],when:"Run is cancelled",payload:X0}],audit:["run.cancelled"]},acceptance:{scenarios:[{key:"cancel-run-happy-path",given:["Run exists","Run is in progress"],when:["User cancels run"],then:["Run is cancelled","RunCancelled event is emitted"]},{key:"cancel-run-already-completed",given:["Run exists but is already completed"],when:["User attempts to cancel"],then:["RUN_NOT_CANCELLABLE error is returned"]}],examples:[{key:"cancel-basic",input:{runId:"run-456",reason:"User requested"},output:{success:!0,status:"cancelled"}}]}}),k1=O0({meta:{key:"agent.run.get",version:"1.0.0",stability:"stable",owners:[...e],tags:["run","get"],description:"Retrieves a run by its ID with optional details.",goal:"View detailed run information.",context:"Run details page or monitoring."},io:{input:S({name:"GetRunInput",fields:{runId:{type:N.String_unsecure(),isOptional:!1},includeSteps:{type:N.Boolean(),isOptional:!0},includeLogs:{type:N.Boolean(),isOptional:!0}}}),output:L2,errors:{RUN_NOT_FOUND:{description:"The specified run does not exist",http:404,gqlCode:"RUN_NOT_FOUND",when:"Run ID is invalid"}}},policy:{auth:"user"},acceptance:{scenarios:[{key:"get-run-happy-path",given:["Run exists"],when:["User requests run by ID"],then:["Run details are returned"]}],examples:[{key:"get-with-steps",input:{runId:"run-456",includeSteps:!0,includeLogs:!1},output:{id:"run-456",status:"completed",steps:[]}}]}}),M2=O0({meta:{key:"agent.run.list",version:"1.0.0",stability:"stable",owners:[...e],tags:["run","list"],description:"Lists runs with optional filtering.",goal:"Browse and search run history.",context:"Run history/dashboard view."},io:{input:S({name:"ListRunsInput",fields:{organizationId:{type:N.String_unsecure(),isOptional:!0},agentId:{type:N.String_unsecure(),isOptional:!0},userId:{type:N.String_unsecure(),isOptional:!0},sessionId:{type:N.String_unsecure(),isOptional:!0},status:{type:a,isOptional:!0},startDate:{type:N.DateTime(),isOptional:!0},endDate:{type:N.DateTime(),isOptional:!0},limit:{type:N.Int_unsecure(),isOptional:!0,defaultValue:20},offset:{type:N.Int_unsecure(),isOptional:!0,defaultValue:0}}}),output:S({name:"ListRunsOutput",fields:{items:{type:X0,isArray:!0,isOptional:!1},total:{type:N.Int_unsecure(),isOptional:!1},hasMore:{type:N.Boolean(),isOptional:!1}}})},policy:{auth:"user"},acceptance:{scenarios:[{key:"list-runs-happy-path",given:["Organization has runs"],when:["User lists runs"],then:["Paginated list of runs is returned"]}],examples:[{key:"list-by-agent",input:{agentId:"agent-123",limit:20,offset:0},output:{items:[],total:0,hasMore:!1}}]}}),g4=O0({meta:{key:"agent.run.getSteps",version:"1.0.0",stability:"stable",owners:[...e],tags:["run","steps"],description:"Retrieves all steps for a specific run.",goal:"View step-by-step execution details.",context:"Run details page - steps tab."},io:{input:S({name:"GetRunStepsInput",fields:{runId:{type:N.String_unsecure(),isOptional:!1}}}),output:S({name:"GetRunStepsOutput",fields:{steps:{type:m0,isArray:!0,isOptional:!1}}})},policy:{auth:"user"},acceptance:{scenarios:[{key:"get-run-steps-happy-path",given:["Run exists with steps"],when:["User requests steps"],then:["Steps list is returned"]}],examples:[{key:"get-steps-basic",input:{runId:"run-456"},output:{steps:[]}}]}}),T4=O0({meta:{key:"agent.run.getLogs",version:"1.0.0",stability:"stable",owners:[...e],tags:["run","logs"],description:"Retrieves all logs for a specific run.",goal:"Debug and audit run execution.",context:"Run details page - logs tab."},io:{input:S({name:"GetRunLogsInput",fields:{runId:{type:N.String_unsecure(),isOptional:!1},level:{type:R0,isOptional:!0},stepId:{type:N.String_unsecure(),isOptional:!0},limit:{type:N.Int_unsecure(),isOptional:!0,defaultValue:100},offset:{type:N.Int_unsecure(),isOptional:!0,defaultValue:0}}}),output:S({name:"GetRunLogsOutput",fields:{items:{type:E0,isArray:!0,isOptional:!1},total:{type:N.Int_unsecure(),isOptional:!1},hasMore:{type:N.Boolean(),isOptional:!1}}})},policy:{auth:"user"},acceptance:{scenarios:[{key:"get-run-logs-happy-path",given:["Run exists with logs"],when:["User requests logs"],then:["Paginated logs list is returned"]}],examples:[{key:"get-logs-filtered",input:{runId:"run-456",level:"error",limit:50},output:{items:[],total:0,hasMore:!1}}]}}),P1=O0({meta:{key:"agent.run.getMetrics",version:"1.0.0",stability:"stable",owners:[...e],tags:["run","metrics"],description:"Retrieves aggregated metrics for runs within a time period.",goal:"Monitor and analyze agent usage.",context:"Analytics dashboard."},io:{input:S({name:"GetRunMetricsInput",fields:{organizationId:{type:N.String_unsecure(),isOptional:!1},agentId:{type:N.String_unsecure(),isOptional:!0},startDate:{type:N.DateTime(),isOptional:!1},endDate:{type:N.DateTime(),isOptional:!1},granularity:{type:_2,isOptional:!0,defaultValue:"day"}}}),output:S({name:"GetRunMetricsOutput",fields:{totalRuns:{type:N.Int_unsecure(),isOptional:!1},completedRuns:{type:N.Int_unsecure(),isOptional:!1},failedRuns:{type:N.Int_unsecure(),isOptional:!1},totalTokens:{type:N.Int_unsecure(),isOptional:!1},totalCostUsd:{type:N.Float_unsecure(),isOptional:!1},averageDurationMs:{type:N.Float_unsecure(),isOptional:!1},successRate:{type:N.Float_unsecure(),isOptional:!1},timeline:{type:R2,isArray:!0,isOptional:!1}}})},policy:{auth:"user"},acceptance:{scenarios:[{key:"get-run-metrics-happy-path",given:["Organization has run history"],when:["User requests metrics for date range"],then:["Aggregated metrics are returned"]}],examples:[{key:"get-daily-metrics",input:{organizationId:"org-123",startDate:"2025-01-01",endDate:"2025-01-31",granularity:"day"},output:{totalRuns:100,completedRuns:90,failedRuns:10,totalTokens:50000,totalCostUsd:5,averageDurationMs:2500,successRate:0.9,timeline:[]}}]}});import{defineEnum as b2}from"@contractspec/lib.schema";var z0=b2("ToolCategory",["RETRIEVAL","COMPUTATION","COMMUNICATION","INTEGRATION","UTILITY","CUSTOM"]),Z0=b2("ToolStatus",["DRAFT","ACTIVE","DEPRECATED","DISABLED"]),p0=b2("ImplementationType",["http","function","workflow"]);import{defineSchemaModel as o0,ScalarTypeEnum as O}from"@contractspec/lib.schema";var w2=o0({name:"Tool",description:"AI tool definition",fields:{id:{type:O.String_unsecure(),isOptional:!1},organizationId:{type:O.String_unsecure(),isOptional:!1},name:{type:O.NonEmptyString(),isOptional:!1},slug:{type:O.String_unsecure(),isOptional:!1},description:{type:O.String_unsecure(),isOptional:!1},category:{type:z0,isOptional:!1},status:{type:Z0,isOptional:!1},parametersSchema:{type:O.JSONObject(),isOptional:!1},outputSchema:{type:O.JSONObject(),isOptional:!0},implementationType:{type:p0,isOptional:!1},implementationConfig:{type:O.JSONObject(),isOptional:!1},maxInvocationsPerMinute:{type:O.Int_unsecure(),isOptional:!0},timeoutMs:{type:O.Int_unsecure(),isOptional:!1,defaultValue:30000},version:{type:O.NonEmptyString(),isOptional:!1},tags:{type:O.String_unsecure(),isArray:!0,isOptional:!0},createdAt:{type:O.DateTime(),isOptional:!1},updatedAt:{type:O.DateTime(),isOptional:!1}}}),Q0=o0({name:"ToolSummary",description:"Summary of a tool for list views",fields:{id:{type:O.String_unsecure(),isOptional:!1},name:{type:O.NonEmptyString(),isOptional:!1},slug:{type:O.String_unsecure(),isOptional:!1},description:{type:O.String_unsecure(),isOptional:!1},category:{type:z0,isOptional:!1},status:{type:Z0,isOptional:!1},version:{type:O.NonEmptyString(),isOptional:!1},createdAt:{type:O.DateTime(),isOptional:!1}}}),C2=o0({name:"CreateToolInput",description:"Input for creating a tool",fields:{organizationId:{type:O.String_unsecure(),isOptional:!1},name:{type:O.NonEmptyString(),isOptional:!1},slug:{type:O.String_unsecure(),isOptional:!1},description:{type:O.String_unsecure(),isOptional:!1},category:{type:z0,isOptional:!0},parametersSchema:{type:O.JSONObject(),isOptional:!1},outputSchema:{type:O.JSONObject(),isOptional:!0},implementationType:{type:p0,isOptional:!1},implementationConfig:{type:O.JSONObject(),isOptional:!1},maxInvocationsPerMinute:{type:O.Int_unsecure(),isOptional:!0},timeoutMs:{type:O.Int_unsecure(),isOptional:!0},tags:{type:O.String_unsecure(),isArray:!0,isOptional:!0}}}),h2=o0({name:"UpdateToolInput",description:"Input for updating a tool",fields:{toolId:{type:O.String_unsecure(),isOptional:!1},name:{type:O.NonEmptyString(),isOptional:!0},description:{type:O.String_unsecure(),isOptional:!0},status:{type:Z0,isOptional:!0},parametersSchema:{type:O.JSONObject(),isOptional:!0},outputSchema:{type:O.JSONObject(),isOptional:!0},implementationConfig:{type:O.JSONObject(),isOptional:!0},maxInvocationsPerMinute:{type:O.Int_unsecure(),isOptional:!0},timeoutMs:{type:O.Int_unsecure(),isOptional:!0},tags:{type:O.String_unsecure(),isArray:!0,isOptional:!0}}});import{defineCommand as f2,defineQuery as I1}from"@contractspec/lib.contracts-spec/operations";import{defineSchemaModel as G0,ScalarTypeEnum as x}from"@contractspec/lib.schema";var F0=["@agent-console-team"],B1=f2({meta:{key:"agent.tool.create",version:"1.0.0",stability:"stable",owners:[...F0],tags:["tool","create"],description:"Creates a new AI tool definition.",goal:"Allow users to define new tools that agents can use.",context:"Called from the tool builder UI when creating a new tool."},io:{input:C2,output:G0({name:"CreateToolOutput",fields:{id:{type:x.String_unsecure(),isOptional:!1},name:{type:x.NonEmptyString(),isOptional:!1},slug:{type:x.String_unsecure(),isOptional:!1},status:{type:Z0,isOptional:!1}}}),errors:{SLUG_EXISTS:{description:"A tool with this slug already exists in the organization",http:409,gqlCode:"SLUG_EXISTS",when:"Slug is already taken"}}},policy:{auth:"user"},sideEffects:{emits:[{key:"tool.created",version:"1.0.0",stability:"stable",owners:[...F0],tags:["tool","created"],when:"Tool is successfully created",payload:Q0}],audit:["tool.created"]},acceptance:{scenarios:[{key:"create-tool-happy-path",given:["User is authenticated","Organization exists"],when:["User submits valid tool configuration"],then:["New tool is created","ToolCreated event is emitted"]},{key:"create-tool-slug-conflict",given:["Tool with same slug exists"],when:["User submits tool with duplicate slug"],then:["SLUG_EXISTS error is returned"]}],examples:[{key:"create-api-tool",input:{name:"Weather API",slug:"weather-api",category:"api",description:"Fetches weather data"},output:{id:"tool-123",name:"Weather API",slug:"weather-api",status:"draft"}}]}}),v1=f2({meta:{key:"agent.tool.update",version:"1.0.0",stability:"stable",owners:[...F0],tags:["tool","update"],description:"Updates an existing AI tool definition.",goal:"Allow users to modify tool settings and configuration.",context:"Called from the tool settings UI."},io:{input:h2,output:G0({name:"UpdateToolOutput",fields:{id:{type:x.String_unsecure(),isOptional:!1},name:{type:x.NonEmptyString(),isOptional:!1},status:{type:Z0,isOptional:!1},updatedAt:{type:x.DateTime(),isOptional:!1}}}),errors:{TOOL_NOT_FOUND:{description:"The specified tool does not exist",http:404,gqlCode:"TOOL_NOT_FOUND",when:"Tool ID is invalid"}}},policy:{auth:"user"},sideEffects:{emits:[{key:"tool.updated",version:"1.0.0",stability:"stable",owners:[...F0],tags:["tool","updated"],when:"Tool is updated",payload:Q0}],audit:["tool.updated"]},acceptance:{scenarios:[{key:"update-tool-happy-path",given:["Tool exists","User owns the tool"],when:["User submits updated configuration"],then:["Tool is updated","ToolUpdated event is emitted"]}],examples:[{key:"update-description",input:{toolId:"tool-123",description:"Updated weather API tool"},output:{id:"tool-123",name:"Weather API",status:"draft",updatedAt:"2025-01-01T00:00:00Z"}}]}}),W1=I1({meta:{key:"agent.tool.get",version:"1.0.0",stability:"stable",owners:[...F0],tags:["tool","get"],description:"Retrieves a tool by its ID.",goal:"View detailed tool configuration.",context:"Called when viewing tool details or editing."},io:{input:G0({name:"GetToolInput",fields:{toolId:{type:x.String_unsecure(),isOptional:!1}}}),output:w2,errors:{TOOL_NOT_FOUND:{description:"The specified tool does not exist",http:404,gqlCode:"TOOL_NOT_FOUND",when:"Tool ID is invalid"}}},policy:{auth:"user"},acceptance:{scenarios:[{key:"get-tool-happy-path",given:["Tool exists"],when:["User requests tool by ID"],then:["Tool details are returned"]}],examples:[{key:"get-basic",input:{toolId:"tool-123"},output:{id:"tool-123",name:"Weather API",status:"active",category:"api"}}]}}),j2=I1({meta:{key:"agent.tool.list",version:"1.0.0",stability:"stable",owners:[...F0],tags:["tool","list"],description:"Lists tools for an organization with optional filtering.",goal:"Browse and search available tools.",context:"Tool list/dashboard view."},io:{input:G0({name:"ListToolsInput",fields:{organizationId:{type:x.String_unsecure(),isOptional:!1},category:{type:z0,isOptional:!0},status:{type:Z0,isOptional:!0},search:{type:x.String_unsecure(),isOptional:!0},limit:{type:x.Int_unsecure(),isOptional:!0,defaultValue:20},offset:{type:x.Int_unsecure(),isOptional:!0,defaultValue:0}}}),output:G0({name:"ListToolsOutput",fields:{items:{type:Q0,isArray:!0,isOptional:!1},total:{type:x.Int_unsecure(),isOptional:!1},hasMore:{type:x.Boolean(),isOptional:!1}}})},policy:{auth:"user"},acceptance:{scenarios:[{key:"list-tools-happy-path",given:["Organization has tools"],when:["User lists tools"],then:["Paginated list of tools is returned"]}],examples:[{key:"list-by-category",input:{organizationId:"org-123",category:"api",limit:10},output:{items:[],total:0,hasMore:!1}}]}}),_1=f2({meta:{key:"agent.tool.test",version:"1.0.0",stability:"stable",owners:[...F0],tags:["tool","test"],description:"Tests a tool with sample input to verify it works correctly.",goal:"Validate tool configuration before deployment.",context:"Tool builder UI - test panel."},io:{input:G0({name:"TestToolInput",fields:{toolId:{type:x.String_unsecure(),isOptional:!1},testInput:{type:x.JSONObject(),isOptional:!1}}}),output:G0({name:"TestToolOutput",fields:{success:{type:x.Boolean(),isOptional:!1},output:{type:x.JSONObject(),isOptional:!0},error:{type:x.String_unsecure(),isOptional:!0},durationMs:{type:x.Int_unsecure(),isOptional:!1}}}),errors:{TOOL_NOT_FOUND:{description:"The specified tool does not exist",http:404,gqlCode:"TOOL_NOT_FOUND",when:"Tool ID is invalid"},TOOL_EXECUTION_ERROR:{description:"Tool execution failed",http:500,gqlCode:"TOOL_EXECUTION_ERROR",when:"Tool returns an error"}}},policy:{auth:"user"},sideEffects:{audit:["tool.tested"]},acceptance:{scenarios:[{key:"test-tool-success",given:["Tool exists","Tool is configured correctly"],when:["User runs test with valid input"],then:["Tool executes successfully","Output is returned"]},{key:"test-tool-failure",given:["Tool exists","Tool has configuration error"],when:["User runs test"],then:["TOOL_EXECUTION_ERROR is returned"]}],examples:[{key:"test-weather-api",input:{toolId:"tool-123",testInput:{city:"Paris"}},output:{success:!0,output:{temperature:22},durationMs:150}}]}});import{web as y4}from"@contractspec/lib.runtime-sandbox";var{generateId:N1}=y4;var L1={queuedAt:"r.queuedAt",totalTokens:"r.totalTokens",durationMs:"r.durationMs",estimatedCostUsd:"r.estimatedCostUsd",status:"r.status",agentName:"a.name"};function S0(Z){return{id:Z.id,projectId:Z.projectId,organizationId:Z.organizationId,name:Z.name,description:Z.description??void 0,modelProvider:Z.modelProvider,modelName:Z.modelName,systemPrompt:Z.systemPrompt??void 0,temperature:Z.temperature,maxTokens:Z.maxTokens,status:Z.status,createdAt:new Date(Z.createdAt),updatedAt:new Date(Z.updatedAt)}}function d4(Z){return{id:Z.id,projectId:Z.projectId,organizationId:Z.organizationId,name:Z.name,description:Z.description??void 0,version:Z.version,category:Z.category,status:Z.status,inputSchema:Z.inputSchema??void 0,outputSchema:Z.outputSchema??void 0,endpoint:Z.endpoint??void 0,createdAt:new Date(Z.createdAt),updatedAt:new Date(Z.updatedAt)}}function R1(Z,q){return{id:Z.id,projectId:Z.projectId,agentId:Z.agentId,agentName:q,status:Z.status,input:Z.input??void 0,output:Z.output??void 0,totalTokens:Z.totalTokens,promptTokens:Z.promptTokens,completionTokens:Z.completionTokens,estimatedCostUsd:Z.estimatedCostUsd,durationMs:Z.durationMs??void 0,errorMessage:Z.errorMessage??void 0,queuedAt:new Date(Z.queuedAt),startedAt:Z.startedAt?new Date(Z.startedAt):void 0,completedAt:Z.completedAt?new Date(Z.completedAt):void 0}}function m4(Z){async function q($){let{projectId:H,organizationId:Q,status:G,search:F,limit:U=20,offset:L=0}=$,B="WHERE projectId = ?",W=[H];if(Q)B+=" AND organizationId = ?",W.push(Q);if(G&&G!=="all")B+=" AND status = ?",W.push(G);if(F)B+=" AND (name LIKE ? OR description LIKE ?)",W.push(`%${F}%`,`%${F}%`);let v=(await Z.query(`SELECT COUNT(*) as count FROM agent_definition ${B}`,W)).rows[0]?.count??0,b=(await Z.query(`SELECT * FROM agent_definition ${B} ORDER BY createdAt DESC LIMIT ? OFFSET ?`,[...W,U,L])).rows;return{items:b.map(S0),total:v,hasMore:L+b.length<v}}async function D($){let H=(await Z.query("SELECT * FROM agent_definition WHERE id = ?",[$])).rows;return H[0]?S0(H[0]):null}async function Y($,H){let Q=N1("agent"),G=new Date().toISOString();await Z.execute(`INSERT INTO agent_definition (id, projectId, organizationId, name, description, modelProvider, modelName, systemPrompt, temperature, maxTokens, status, createdAt, updatedAt)
|
|
52
|
+
- Use Feature Flags to gate risky tools; default safe/off.`}];C4(h4);import{defineExample as f4}from"@contractspec/lib.contracts-spec/examples";var j4=f4({meta:{key:"agent-console",version:"1.0.0",title:"Agent Console",description:"Agent Console example - AI agent orchestration with tools, runs, and logs",kind:"template",visibility:"public",stability:"experimental",owners:["@contractspec-core"],tags:["package","examples","agent-console","agents","autonomous"]},surfaces:{templates:!0,sandbox:{enabled:!0,modes:["playground","specs"]},studio:{enabled:!1,installable:!1},mcp:{enabled:!1}},entrypoints:{packageName:"@contractspec/example.agent-console"}}),x4=j4;import{defineEnum as d0}from"@contractspec/lib.schema";var a=d0("RunStatus",["QUEUED","IN_PROGRESS","COMPLETED","FAILED","CANCELLED","EXPIRED"]),W2=d0("RunStepType",["MESSAGE_CREATION","TOOL_CALL","TOOL_RESULT","ERROR"]),R0=d0("LogLevel",["DEBUG","INFO","WARN","ERROR"]),_2=d0("Granularity",["hour","day","week","month"]);import{defineSchemaModel as $0,ScalarTypeEnum as I}from"@contractspec/lib.schema";var N2=$0({name:"RunInput",description:"Input data for agent execution",fields:{message:{type:I.NonEmptyString(),isOptional:!1},context:{type:I.JSONObject(),isOptional:!0}}}),m0=$0({name:"RunStep",description:"Individual step within a run",fields:{id:{type:I.String_unsecure(),isOptional:!1},stepNumber:{type:I.Int_unsecure(),isOptional:!1},type:{type:W2,isOptional:!1},toolId:{type:I.String_unsecure(),isOptional:!0},toolName:{type:I.String_unsecure(),isOptional:!0},input:{type:I.JSONObject(),isOptional:!0},output:{type:I.JSONObject(),isOptional:!0},status:{type:a,isOptional:!1},errorMessage:{type:I.String_unsecure(),isOptional:!0},tokensUsed:{type:I.Int_unsecure(),isOptional:!1,defaultValue:0},durationMs:{type:I.Int_unsecure(),isOptional:!0},startedAt:{type:I.DateTime(),isOptional:!1},completedAt:{type:I.DateTime(),isOptional:!0}}}),E0=$0({name:"RunLog",description:"Execution log entry",fields:{id:{type:I.String_unsecure(),isOptional:!1},stepId:{type:I.String_unsecure(),isOptional:!0},level:{type:R0,isOptional:!1},message:{type:I.String_unsecure(),isOptional:!1},data:{type:I.JSONObject(),isOptional:!0},source:{type:I.String_unsecure(),isOptional:!0},traceId:{type:I.String_unsecure(),isOptional:!0},spanId:{type:I.String_unsecure(),isOptional:!0},timestamp:{type:I.DateTime(),isOptional:!1}}}),A1=$0({name:"RunAgentRef",description:"Agent reference in a run",fields:{id:{type:I.String_unsecure(),isOptional:!1},name:{type:I.NonEmptyString(),isOptional:!1},modelProvider:{type:I.String_unsecure(),isOptional:!1},modelName:{type:I.String_unsecure(),isOptional:!1}}}),L2=$0({name:"Run",description:"Agent execution instance",fields:{id:{type:I.String_unsecure(),isOptional:!1},organizationId:{type:I.String_unsecure(),isOptional:!1},agentId:{type:I.String_unsecure(),isOptional:!1},userId:{type:I.String_unsecure(),isOptional:!0},sessionId:{type:I.String_unsecure(),isOptional:!0},input:{type:I.JSONObject(),isOptional:!1},output:{type:I.JSONObject(),isOptional:!0},status:{type:a,isOptional:!1},errorMessage:{type:I.String_unsecure(),isOptional:!0},errorCode:{type:I.String_unsecure(),isOptional:!0},totalTokens:{type:I.Int_unsecure(),isOptional:!1,defaultValue:0},promptTokens:{type:I.Int_unsecure(),isOptional:!1,defaultValue:0},completionTokens:{type:I.Int_unsecure(),isOptional:!1,defaultValue:0},totalIterations:{type:I.Int_unsecure(),isOptional:!1,defaultValue:0},durationMs:{type:I.Int_unsecure(),isOptional:!0},estimatedCostUsd:{type:I.Float_unsecure(),isOptional:!0},queuedAt:{type:I.DateTime(),isOptional:!1},startedAt:{type:I.DateTime(),isOptional:!0},completedAt:{type:I.DateTime(),isOptional:!0},metadata:{type:I.JSONObject(),isOptional:!0},steps:{type:m0,isArray:!0,isOptional:!0},logs:{type:E0,isArray:!0,isOptional:!0},agent:{type:A1,isOptional:!0}}}),X0=$0({name:"RunSummary",description:"Summary of a run for list views",fields:{id:{type:I.String_unsecure(),isOptional:!1},agentId:{type:I.String_unsecure(),isOptional:!1},agentName:{type:I.NonEmptyString(),isOptional:!1},status:{type:a,isOptional:!1},totalTokens:{type:I.Int_unsecure(),isOptional:!1},durationMs:{type:I.Int_unsecure(),isOptional:!0},estimatedCostUsd:{type:I.Float_unsecure(),isOptional:!0},queuedAt:{type:I.DateTime(),isOptional:!1},completedAt:{type:I.DateTime(),isOptional:!0}}}),R2=$0({name:"TimelineDataPoint",description:"Timeline data point for metrics",fields:{period:{type:I.String_unsecure(),isOptional:!1},runs:{type:I.Int_unsecure(),isOptional:!1},tokens:{type:I.Int_unsecure(),isOptional:!1},costUsd:{type:I.Float_unsecure(),isOptional:!1},avgDurationMs:{type:I.Float_unsecure(),isOptional:!1}}});import{defineCommand as V1,defineQuery as O0}from"@contractspec/lib.contracts-spec/operations";import{defineSchemaModel as S,ScalarTypeEnum as N}from"@contractspec/lib.schema";var e=["@agent-console-team"],O2=V1({meta:{key:"agent.run.execute",version:"1.0.0",stability:"stable",owners:[...e],tags:["run","execute"],description:"Starts a new agent run with the given input.",goal:"Execute an AI agent with user input.",context:"Called from chat interface or API."},io:{input:S({name:"ExecuteAgentInput",fields:{agentId:{type:N.String_unsecure(),isOptional:!1},input:{type:N2,isOptional:!1},sessionId:{type:N.String_unsecure(),isOptional:!0},metadata:{type:N.JSONObject(),isOptional:!0},stream:{type:N.Boolean(),isOptional:!0},maxIterations:{type:N.Int_unsecure(),isOptional:!0},timeoutMs:{type:N.Int_unsecure(),isOptional:!0}}}),output:S({name:"ExecuteAgentOutput",fields:{runId:{type:N.String_unsecure(),isOptional:!1},status:{type:a,isOptional:!1},estimatedWaitMs:{type:N.Int_unsecure(),isOptional:!0}}}),errors:{AGENT_NOT_FOUND:{description:"The specified agent does not exist",http:404,gqlCode:"AGENT_NOT_FOUND",when:"Agent ID is invalid"},AGENT_NOT_ACTIVE:{description:"The specified agent is not active",http:400,gqlCode:"AGENT_NOT_ACTIVE",when:"Agent is in draft/paused/archived state"}}},policy:{auth:"user"},sideEffects:{emits:[{key:"run.started",version:"1.0.0",stability:"stable",owners:[...e],tags:["run","started"],when:"Run is queued",payload:X0}],audit:["run.started"]},acceptance:{scenarios:[{key:"execute-agent-happy-path",given:["Agent exists","Agent is active"],when:["User submits execution request"],then:["Run is created","RunStarted event is emitted"]},{key:"execute-agent-not-active",given:["Agent exists but is not active"],when:["User attempts to execute"],then:["AGENT_NOT_ACTIVE error is returned"]}],examples:[{key:"basic-execute",input:{agentId:"agent-123",input:{message:"Hello"}},output:{runId:"run-456",status:"pending",estimatedWaitMs:5000}}]}}),K1=V1({meta:{key:"agent.run.cancel",version:"1.0.0",stability:"stable",owners:[...e],tags:["run","cancel"],description:"Cancels an in-progress agent run.",goal:"Stop a running agent execution.",context:"Called when user wants to abort a long-running task."},io:{input:S({name:"CancelRunInput",fields:{runId:{type:N.String_unsecure(),isOptional:!1},reason:{type:N.String_unsecure(),isOptional:!0}}}),output:S({name:"CancelRunOutput",fields:{success:{type:N.Boolean(),isOptional:!1},status:{type:a,isOptional:!1}}}),errors:{RUN_NOT_FOUND:{description:"The specified run does not exist",http:404,gqlCode:"RUN_NOT_FOUND",when:"Run ID is invalid"},RUN_NOT_CANCELLABLE:{description:"The run cannot be cancelled",http:400,gqlCode:"RUN_NOT_CANCELLABLE",when:"Run is already completed/failed/cancelled"}}},policy:{auth:"user"},sideEffects:{emits:[{key:"run.cancelled",version:"1.0.0",stability:"stable",owners:[...e],tags:["run","cancelled"],when:"Run is cancelled",payload:X0}],audit:["run.cancelled"]},acceptance:{scenarios:[{key:"cancel-run-happy-path",given:["Run exists","Run is in progress"],when:["User cancels run"],then:["Run is cancelled","RunCancelled event is emitted"]},{key:"cancel-run-already-completed",given:["Run exists but is already completed"],when:["User attempts to cancel"],then:["RUN_NOT_CANCELLABLE error is returned"]}],examples:[{key:"cancel-basic",input:{runId:"run-456",reason:"User requested"},output:{success:!0,status:"cancelled"}}]}}),k1=O0({meta:{key:"agent.run.get",version:"1.0.0",stability:"stable",owners:[...e],tags:["run","get"],description:"Retrieves a run by its ID with optional details.",goal:"View detailed run information.",context:"Run details page or monitoring."},io:{input:S({name:"GetRunInput",fields:{runId:{type:N.String_unsecure(),isOptional:!1},includeSteps:{type:N.Boolean(),isOptional:!0},includeLogs:{type:N.Boolean(),isOptional:!0}}}),output:L2,errors:{RUN_NOT_FOUND:{description:"The specified run does not exist",http:404,gqlCode:"RUN_NOT_FOUND",when:"Run ID is invalid"}}},policy:{auth:"user"},acceptance:{scenarios:[{key:"get-run-happy-path",given:["Run exists"],when:["User requests run by ID"],then:["Run details are returned"]}],examples:[{key:"get-with-steps",input:{runId:"run-456",includeSteps:!0,includeLogs:!1},output:{id:"run-456",status:"completed",steps:[]}}]}}),M2=O0({meta:{key:"agent.run.list",version:"1.0.0",stability:"stable",owners:[...e],tags:["run","list"],description:"Lists runs with optional filtering.",goal:"Browse and search run history.",context:"Run history/dashboard view."},io:{input:S({name:"ListRunsInput",fields:{organizationId:{type:N.String_unsecure(),isOptional:!0},agentId:{type:N.String_unsecure(),isOptional:!0},userId:{type:N.String_unsecure(),isOptional:!0},sessionId:{type:N.String_unsecure(),isOptional:!0},status:{type:a,isOptional:!0},startDate:{type:N.DateTime(),isOptional:!0},endDate:{type:N.DateTime(),isOptional:!0},limit:{type:N.Int_unsecure(),isOptional:!0,defaultValue:20},offset:{type:N.Int_unsecure(),isOptional:!0,defaultValue:0}}}),output:S({name:"ListRunsOutput",fields:{items:{type:X0,isArray:!0,isOptional:!1},total:{type:N.Int_unsecure(),isOptional:!1},hasMore:{type:N.Boolean(),isOptional:!1}}})},policy:{auth:"user"},acceptance:{scenarios:[{key:"list-runs-happy-path",given:["Organization has runs"],when:["User lists runs"],then:["Paginated list of runs is returned"]}],examples:[{key:"list-by-agent",input:{agentId:"agent-123",limit:20,offset:0},output:{items:[],total:0,hasMore:!1}}]}}),g4=O0({meta:{key:"agent.run.getSteps",version:"1.0.0",stability:"stable",owners:[...e],tags:["run","steps"],description:"Retrieves all steps for a specific run.",goal:"View step-by-step execution details.",context:"Run details page - steps tab."},io:{input:S({name:"GetRunStepsInput",fields:{runId:{type:N.String_unsecure(),isOptional:!1}}}),output:S({name:"GetRunStepsOutput",fields:{steps:{type:m0,isArray:!0,isOptional:!1}}})},policy:{auth:"user"},acceptance:{scenarios:[{key:"get-run-steps-happy-path",given:["Run exists with steps"],when:["User requests steps"],then:["Steps list is returned"]}],examples:[{key:"get-steps-basic",input:{runId:"run-456"},output:{steps:[]}}]}}),T4=O0({meta:{key:"agent.run.getLogs",version:"1.0.0",stability:"stable",owners:[...e],tags:["run","logs"],description:"Retrieves all logs for a specific run.",goal:"Debug and audit run execution.",context:"Run details page - logs tab."},io:{input:S({name:"GetRunLogsInput",fields:{runId:{type:N.String_unsecure(),isOptional:!1},level:{type:R0,isOptional:!0},stepId:{type:N.String_unsecure(),isOptional:!0},limit:{type:N.Int_unsecure(),isOptional:!0,defaultValue:100},offset:{type:N.Int_unsecure(),isOptional:!0,defaultValue:0}}}),output:S({name:"GetRunLogsOutput",fields:{items:{type:E0,isArray:!0,isOptional:!1},total:{type:N.Int_unsecure(),isOptional:!1},hasMore:{type:N.Boolean(),isOptional:!1}}})},policy:{auth:"user"},acceptance:{scenarios:[{key:"get-run-logs-happy-path",given:["Run exists with logs"],when:["User requests logs"],then:["Paginated logs list is returned"]}],examples:[{key:"get-logs-filtered",input:{runId:"run-456",level:"error",limit:50},output:{items:[],total:0,hasMore:!1}}]}}),P1=O0({meta:{key:"agent.run.getMetrics",version:"1.0.0",stability:"stable",owners:[...e],tags:["run","metrics"],description:"Retrieves aggregated metrics for runs within a time period.",goal:"Monitor and analyze agent usage.",context:"Analytics dashboard."},io:{input:S({name:"GetRunMetricsInput",fields:{organizationId:{type:N.String_unsecure(),isOptional:!1},agentId:{type:N.String_unsecure(),isOptional:!0},startDate:{type:N.DateTime(),isOptional:!1},endDate:{type:N.DateTime(),isOptional:!1},granularity:{type:_2,isOptional:!0,defaultValue:"day"}}}),output:S({name:"GetRunMetricsOutput",fields:{totalRuns:{type:N.Int_unsecure(),isOptional:!1},completedRuns:{type:N.Int_unsecure(),isOptional:!1},failedRuns:{type:N.Int_unsecure(),isOptional:!1},totalTokens:{type:N.Int_unsecure(),isOptional:!1},totalCostUsd:{type:N.Float_unsecure(),isOptional:!1},averageDurationMs:{type:N.Float_unsecure(),isOptional:!1},successRate:{type:N.Float_unsecure(),isOptional:!1},timeline:{type:R2,isArray:!0,isOptional:!1}}})},policy:{auth:"user"},acceptance:{scenarios:[{key:"get-run-metrics-happy-path",given:["Organization has run history"],when:["User requests metrics for date range"],then:["Aggregated metrics are returned"]}],examples:[{key:"get-daily-metrics",input:{organizationId:"org-123",startDate:"2025-01-01",endDate:"2025-01-31",granularity:"day"},output:{totalRuns:100,completedRuns:90,failedRuns:10,totalTokens:50000,totalCostUsd:5,averageDurationMs:2500,successRate:0.9,timeline:[]}}]}});import{defineEnum as b2}from"@contractspec/lib.schema";var z0=b2("ToolCategory",["RETRIEVAL","COMPUTATION","COMMUNICATION","INTEGRATION","UTILITY","CUSTOM"]),Z0=b2("ToolStatus",["DRAFT","ACTIVE","DEPRECATED","DISABLED"]),p0=b2("ImplementationType",["http","function","workflow"]);import{defineSchemaModel as o0,ScalarTypeEnum as O}from"@contractspec/lib.schema";var w2=o0({name:"Tool",description:"AI tool definition",fields:{id:{type:O.String_unsecure(),isOptional:!1},organizationId:{type:O.String_unsecure(),isOptional:!1},name:{type:O.NonEmptyString(),isOptional:!1},slug:{type:O.String_unsecure(),isOptional:!1},description:{type:O.String_unsecure(),isOptional:!1},category:{type:z0,isOptional:!1},status:{type:Z0,isOptional:!1},parametersSchema:{type:O.JSONObject(),isOptional:!1},outputSchema:{type:O.JSONObject(),isOptional:!0},implementationType:{type:p0,isOptional:!1},implementationConfig:{type:O.JSONObject(),isOptional:!1},maxInvocationsPerMinute:{type:O.Int_unsecure(),isOptional:!0},timeoutMs:{type:O.Int_unsecure(),isOptional:!1,defaultValue:30000},version:{type:O.NonEmptyString(),isOptional:!1},tags:{type:O.String_unsecure(),isArray:!0,isOptional:!0},createdAt:{type:O.DateTime(),isOptional:!1},updatedAt:{type:O.DateTime(),isOptional:!1}}}),Q0=o0({name:"ToolSummary",description:"Summary of a tool for list views",fields:{id:{type:O.String_unsecure(),isOptional:!1},name:{type:O.NonEmptyString(),isOptional:!1},slug:{type:O.String_unsecure(),isOptional:!1},description:{type:O.String_unsecure(),isOptional:!1},category:{type:z0,isOptional:!1},status:{type:Z0,isOptional:!1},version:{type:O.NonEmptyString(),isOptional:!1},createdAt:{type:O.DateTime(),isOptional:!1}}}),C2=o0({name:"CreateToolInput",description:"Input for creating a tool",fields:{organizationId:{type:O.String_unsecure(),isOptional:!1},name:{type:O.NonEmptyString(),isOptional:!1},slug:{type:O.String_unsecure(),isOptional:!1},description:{type:O.String_unsecure(),isOptional:!1},category:{type:z0,isOptional:!0},parametersSchema:{type:O.JSONObject(),isOptional:!1},outputSchema:{type:O.JSONObject(),isOptional:!0},implementationType:{type:p0,isOptional:!1},implementationConfig:{type:O.JSONObject(),isOptional:!1},maxInvocationsPerMinute:{type:O.Int_unsecure(),isOptional:!0},timeoutMs:{type:O.Int_unsecure(),isOptional:!0},tags:{type:O.String_unsecure(),isArray:!0,isOptional:!0}}}),h2=o0({name:"UpdateToolInput",description:"Input for updating a tool",fields:{toolId:{type:O.String_unsecure(),isOptional:!1},name:{type:O.NonEmptyString(),isOptional:!0},description:{type:O.String_unsecure(),isOptional:!0},status:{type:Z0,isOptional:!0},parametersSchema:{type:O.JSONObject(),isOptional:!0},outputSchema:{type:O.JSONObject(),isOptional:!0},implementationConfig:{type:O.JSONObject(),isOptional:!0},maxInvocationsPerMinute:{type:O.Int_unsecure(),isOptional:!0},timeoutMs:{type:O.Int_unsecure(),isOptional:!0},tags:{type:O.String_unsecure(),isArray:!0,isOptional:!0}}});import{defineCommand as f2,defineQuery as I1}from"@contractspec/lib.contracts-spec/operations";import{defineSchemaModel as G0,ScalarTypeEnum as x}from"@contractspec/lib.schema";var F0=["@agent-console-team"],B1=f2({meta:{key:"agent.tool.create",version:"1.0.0",stability:"stable",owners:[...F0],tags:["tool","create"],description:"Creates a new AI tool definition.",goal:"Allow users to define new tools that agents can use.",context:"Called from the tool builder UI when creating a new tool."},io:{input:C2,output:G0({name:"CreateToolOutput",fields:{id:{type:x.String_unsecure(),isOptional:!1},name:{type:x.NonEmptyString(),isOptional:!1},slug:{type:x.String_unsecure(),isOptional:!1},status:{type:Z0,isOptional:!1}}}),errors:{SLUG_EXISTS:{description:"A tool with this slug already exists in the organization",http:409,gqlCode:"SLUG_EXISTS",when:"Slug is already taken"}}},policy:{auth:"user"},sideEffects:{emits:[{key:"tool.created",version:"1.0.0",stability:"stable",owners:[...F0],tags:["tool","created"],when:"Tool is successfully created",payload:Q0}],audit:["tool.created"]},acceptance:{scenarios:[{key:"create-tool-happy-path",given:["User is authenticated","Organization exists"],when:["User submits valid tool configuration"],then:["New tool is created","ToolCreated event is emitted"]},{key:"create-tool-slug-conflict",given:["Tool with same slug exists"],when:["User submits tool with duplicate slug"],then:["SLUG_EXISTS error is returned"]}],examples:[{key:"create-api-tool",input:{name:"Weather API",slug:"weather-api",category:"api",description:"Fetches weather data"},output:{id:"tool-123",name:"Weather API",slug:"weather-api",status:"draft"}}]}}),v1=f2({meta:{key:"agent.tool.update",version:"1.0.0",stability:"stable",owners:[...F0],tags:["tool","update"],description:"Updates an existing AI tool definition.",goal:"Allow users to modify tool settings and configuration.",context:"Called from the tool settings UI."},io:{input:h2,output:G0({name:"UpdateToolOutput",fields:{id:{type:x.String_unsecure(),isOptional:!1},name:{type:x.NonEmptyString(),isOptional:!1},status:{type:Z0,isOptional:!1},updatedAt:{type:x.DateTime(),isOptional:!1}}}),errors:{TOOL_NOT_FOUND:{description:"The specified tool does not exist",http:404,gqlCode:"TOOL_NOT_FOUND",when:"Tool ID is invalid"}}},policy:{auth:"user"},sideEffects:{emits:[{key:"tool.updated",version:"1.0.0",stability:"stable",owners:[...F0],tags:["tool","updated"],when:"Tool is updated",payload:Q0}],audit:["tool.updated"]},acceptance:{scenarios:[{key:"update-tool-happy-path",given:["Tool exists","User owns the tool"],when:["User submits updated configuration"],then:["Tool is updated","ToolUpdated event is emitted"]}],examples:[{key:"update-description",input:{toolId:"tool-123",description:"Updated weather API tool"},output:{id:"tool-123",name:"Weather API",status:"draft",updatedAt:"2025-01-01T00:00:00Z"}}]}}),W1=I1({meta:{key:"agent.tool.get",version:"1.0.0",stability:"stable",owners:[...F0],tags:["tool","get"],description:"Retrieves a tool by its ID.",goal:"View detailed tool configuration.",context:"Called when viewing tool details or editing."},io:{input:G0({name:"GetToolInput",fields:{toolId:{type:x.String_unsecure(),isOptional:!1}}}),output:w2,errors:{TOOL_NOT_FOUND:{description:"The specified tool does not exist",http:404,gqlCode:"TOOL_NOT_FOUND",when:"Tool ID is invalid"}}},policy:{auth:"user"},acceptance:{scenarios:[{key:"get-tool-happy-path",given:["Tool exists"],when:["User requests tool by ID"],then:["Tool details are returned"]}],examples:[{key:"get-basic",input:{toolId:"tool-123"},output:{id:"tool-123",name:"Weather API",status:"active",category:"api"}}]}}),j2=I1({meta:{key:"agent.tool.list",version:"1.0.0",stability:"stable",owners:[...F0],tags:["tool","list"],description:"Lists tools for an organization with optional filtering.",goal:"Browse and search available tools.",context:"Tool list/dashboard view."},io:{input:G0({name:"ListToolsInput",fields:{organizationId:{type:x.String_unsecure(),isOptional:!1},category:{type:z0,isOptional:!0},status:{type:Z0,isOptional:!0},search:{type:x.String_unsecure(),isOptional:!0},limit:{type:x.Int_unsecure(),isOptional:!0,defaultValue:20},offset:{type:x.Int_unsecure(),isOptional:!0,defaultValue:0}}}),output:G0({name:"ListToolsOutput",fields:{items:{type:Q0,isArray:!0,isOptional:!1},total:{type:x.Int_unsecure(),isOptional:!1},hasMore:{type:x.Boolean(),isOptional:!1}}})},policy:{auth:"user"},acceptance:{scenarios:[{key:"list-tools-happy-path",given:["Organization has tools"],when:["User lists tools"],then:["Paginated list of tools is returned"]}],examples:[{key:"list-by-category",input:{organizationId:"org-123",category:"api",limit:10},output:{items:[],total:0,hasMore:!1}}]}}),_1=f2({meta:{key:"agent.tool.test",version:"1.0.0",stability:"stable",owners:[...F0],tags:["tool","test"],description:"Tests a tool with sample input to verify it works correctly.",goal:"Validate tool configuration before deployment.",context:"Tool builder UI - test panel."},io:{input:G0({name:"TestToolInput",fields:{toolId:{type:x.String_unsecure(),isOptional:!1},testInput:{type:x.JSONObject(),isOptional:!1}}}),output:G0({name:"TestToolOutput",fields:{success:{type:x.Boolean(),isOptional:!1},output:{type:x.JSONObject(),isOptional:!0},error:{type:x.String_unsecure(),isOptional:!0},durationMs:{type:x.Int_unsecure(),isOptional:!1}}}),errors:{TOOL_NOT_FOUND:{description:"The specified tool does not exist",http:404,gqlCode:"TOOL_NOT_FOUND",when:"Tool ID is invalid"},TOOL_EXECUTION_ERROR:{description:"Tool execution failed",http:500,gqlCode:"TOOL_EXECUTION_ERROR",when:"Tool returns an error"}}},policy:{auth:"user"},sideEffects:{audit:["tool.tested"]},acceptance:{scenarios:[{key:"test-tool-success",given:["Tool exists","Tool is configured correctly"],when:["User runs test with valid input"],then:["Tool executes successfully","Output is returned"]},{key:"test-tool-failure",given:["Tool exists","Tool has configuration error"],when:["User runs test"],then:["TOOL_EXECUTION_ERROR is returned"]}],examples:[{key:"test-weather-api",input:{toolId:"tool-123",testInput:{city:"Paris"}},output:{success:!0,output:{temperature:22},durationMs:150}}]}});import{web as y4}from"@contractspec/lib.runtime-sandbox";var{generateId:N1}=y4;var L1={queuedAt:"r.queuedAt",totalTokens:"r.totalTokens",durationMs:"r.durationMs",estimatedCostUsd:"r.estimatedCostUsd",status:"r.status",agentName:"a.name"};function S0(Z){return{id:Z.id,projectId:Z.projectId,organizationId:Z.organizationId,name:Z.name,description:Z.description??void 0,modelProvider:Z.modelProvider,modelName:Z.modelName,systemPrompt:Z.systemPrompt??void 0,temperature:Z.temperature,maxTokens:Z.maxTokens,status:Z.status,createdAt:new Date(Z.createdAt),updatedAt:new Date(Z.updatedAt)}}function d4(Z){return{id:Z.id,projectId:Z.projectId,organizationId:Z.organizationId,name:Z.name,description:Z.description??void 0,version:Z.version,category:Z.category,status:Z.status,inputSchema:Z.inputSchema??void 0,outputSchema:Z.outputSchema??void 0,endpoint:Z.endpoint??void 0,createdAt:new Date(Z.createdAt),updatedAt:new Date(Z.updatedAt)}}function R1(Z,q){return{id:Z.id,projectId:Z.projectId,agentId:Z.agentId,agentName:q,status:Z.status,input:Z.input??void 0,output:Z.output??void 0,totalTokens:Z.totalTokens,promptTokens:Z.promptTokens,completionTokens:Z.completionTokens,estimatedCostUsd:Z.estimatedCostUsd,durationMs:Z.durationMs??void 0,errorMessage:Z.errorMessage??void 0,queuedAt:new Date(Z.queuedAt),startedAt:Z.startedAt?new Date(Z.startedAt):void 0,completedAt:Z.completedAt?new Date(Z.completedAt):void 0}}function m4(Z){async function q($){let{projectId:H,organizationId:Q,status:G,search:F,limit:U=20,offset:L=0}=$,B="WHERE projectId = ?",W=[H];if(Q)B+=" AND organizationId = ?",W.push(Q);if(G&&G!=="all")B+=" AND status = ?",W.push(G);if(F)B+=" AND (name LIKE ? OR description LIKE ?)",W.push(`%${F}%`,`%${F}%`);let v=(await Z.query(`SELECT COUNT(*) as count FROM agent_definition ${B}`,W)).rows[0]?.count??0,b=(await Z.query(`SELECT * FROM agent_definition ${B} ORDER BY createdAt DESC LIMIT ? OFFSET ?`,[...W,U,L])).rows;return{items:b.map(S0),total:v,hasMore:L+b.length<v}}async function D($){let H=(await Z.query("SELECT * FROM agent_definition WHERE id = ?",[$])).rows;return H[0]?S0(H[0]):null}async function Y($,H){let Q=N1("agent"),G=new Date().toISOString();await Z.execute(`INSERT INTO agent_definition (id, projectId, organizationId, name, description, modelProvider, modelName, systemPrompt, temperature, maxTokens, status, createdAt, updatedAt)
|
|
53
53
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[Q,H.projectId,H.organizationId,$.name,$.description??null,$.modelProvider??"openai",$.modelName??"gpt-4",$.systemPrompt??null,$.temperature??0.7,$.maxTokens??4096,"DRAFT",G,G]);let U=(await Z.query("SELECT * FROM agent_definition WHERE id = ?",[Q])).rows[0];if(!U)throw Error("Failed to retrieve created agent");return S0(U)}async function X($){let H=new Date().toISOString(),Q=["updatedAt = ?"],G=[H];if($.name!==void 0)Q.push("name = ?"),G.push($.name);if($.description!==void 0)Q.push("description = ?"),G.push($.description);if($.status!==void 0)Q.push("status = ?"),G.push($.status);G.push($.id),await Z.execute(`UPDATE agent_definition SET ${Q.join(", ")} WHERE id = ?`,G);let F=(await Z.query("SELECT * FROM agent_definition WHERE id = ?",[$.id])).rows;if(!F[0])throw Error("NOT_FOUND");return S0(F[0])}async function A($){let{projectId:H,organizationId:Q,category:G,status:F,search:U,limit:L=50,offset:B=0}=$,W="WHERE projectId = ?",P=[H];if(Q)W+=" AND organizationId = ?",P.push(Q);if(G&&G!=="all")W+=" AND category = ?",P.push(G);if(F&&F!=="all")W+=" AND status = ?",P.push(F);if(U)W+=" AND (name LIKE ? OR description LIKE ?)",P.push(`%${U}%`,`%${U}%`);let b=(await Z.query(`SELECT COUNT(*) as count FROM agent_tool ${W}`,P)).rows[0]?.count??0,o=(await Z.query(`SELECT * FROM agent_tool ${W} ORDER BY name ASC LIMIT ? OFFSET ?`,[...P,L,B])).rows;return{items:o.map(d4),total:b,hasMore:B+o.length<b}}async function z($){let{projectId:H,agentId:Q,status:G,sortBy:F,sortDirection:U="desc",limit:L=20,offset:B=0}=$,W="WHERE r.projectId = ?",P=[H];if(Q)W+=" AND r.agentId = ?",P.push(Q);if(G&&G!=="all")W+=" AND r.status = ?",P.push(G);let b=(await Z.query(`SELECT COUNT(*) as count FROM agent_run r ${W}`,P)).rows[0]?.count??0,o=F?L1[F]:L1.queuedAt,f0=U==="asc"?"ASC":"DESC",d=(await Z.query(`SELECT r.*, a.name as agentName
|
|
54
54
|
FROM agent_run r
|
|
55
55
|
LEFT JOIN agent_definition a ON r.agentId = a.id
|
|
@@ -65,4 +65,4 @@ import{defineVisualization as Y2,VisualizationRegistry as z4}from"@contractspec/
|
|
|
65
65
|
`)}}};import{Button as OZ,EmptyState as MZ,EntityCard as bZ,ErrorState as wZ,LoaderBlock as CZ,StatCard as q2,StatCardGroup as hZ,StatusChip as fZ}from"@contractspec/lib.design-system";import{jsx as c,jsxs as D2}from"react/jsx-runtime";function jZ(Z){switch(Z){case"ACTIVE":return"success";case"PAUSED":case"DRAFT":return"warning";case"ARCHIVED":return"neutral";default:return"neutral"}}function q1(){let{data:Z,loading:q,error:D,stats:Y,refetch:X}=v0();if(q&&!Z)return c(CZ,{label:"Loading agents..."});if(D)return c(wZ,{title:"Failed to load agents",description:D.message,onRetry:X,retryLabel:"Retry"});if(!Z?.items.length)return c(MZ,{title:"No agents yet",description:"Create your first AI agent to get started."});return D2("div",{className:"space-y-6",children:[Y&&D2(hZ,{children:[c(q2,{label:"Total Agents",value:Y.total}),c(q2,{label:"Active",value:Y.active}),c(q2,{label:"Paused",value:Y.paused}),c(q2,{label:"Draft",value:Y.draft})]}),D2("div",{className:"flex items-center justify-between",children:[c("h3",{className:"font-semibold text-lg",children:"Agents"}),c(OZ,{onPress:()=>alert("Create Agent clicked!"),children:"Create Agent"})]}),c("div",{className:"grid gap-4 sm:grid-cols-2 lg:grid-cols-3",children:Z.items.map((A)=>c(bZ,{cardTitle:A.name,cardSubtitle:A.modelName,meta:c("p",{className:"text-muted-foreground text-sm",children:A.description}),chips:c(fZ,{tone:jZ(A.status),label:A.status}),footer:D2("span",{className:"text-muted-foreground text-xs",children:["Created ",A.createdAt.toLocaleDateString()]}),onClick:()=>alert(`View agent: ${A.name}`)},A.id))})]})}import{jsx as gZ}from"react/jsx-runtime";var xZ={target:"react",render:async(Z)=>{if(Z.source.type!=="component")throw Error("AgentListRenderer: expected component source");if(Z.source.componentKey!=="AgentListView")throw Error(`AgentListRenderer: unknown component ${Z.source.componentKey}`);return gZ(q1,{})}};import{getFallbackAgentConsoleDashboardData as TZ}from"@contractspec/example.agent-console/shared";function yZ(Z){if(Z<1000)return`${Z}ms`;if(Z<60000)return`${(Z/1000).toFixed(1)}s`;return`${(Z/60000).toFixed(1)}m`}var dZ={target:"markdown",render:async(Z,q)=>{if(Z.source.type!=="component"||Z.source.componentKey!=="AgentConsoleDashboard")throw Error("agentDashboardMarkdownRenderer: not AgentConsoleDashboard");let D=q?.data??await TZ(),Y=D.agents.filter((G)=>G.status==="ACTIVE").length,X=D.runs.filter((G)=>G.status==="COMPLETED").length,A=D.runs.filter((G)=>G.status==="FAILED").length,z=D.runs.reduce((G,F)=>G+(F.totalTokens??0),0),V=D.runs.reduce((G,F)=>G+(F.estimatedCostUsd??0),0),J=D.tools.filter((G)=>G.status==="ACTIVE").length,$=j0(D.runs),H=["# Agent Console Dashboard","","> AI agent operations overview","","## Summary","","| Metric | Value |","|--------|-------|",`| Total Agents | ${D.summary.totalAgents} |`,`| Active Agents | ${Y} |`,`| Total Runs | ${D.summary.totalRuns} |`,`| Completed Runs | ${X} |`,`| Failed Runs | ${A} |`,`| Total Tokens | ${z.toLocaleString()} |`,`| Total Cost | $${V.toFixed(4)} |`,`| Total Tools | ${D.summary.totalTools} |`,`| Active Tools | ${J} |`,"","## Agents",""];if(D.agents.length===0)H.push("_No agents configured._");else{H.push("| Agent | Model | Status | Description |"),H.push("|-------|-------|--------|-------------|");for(let G of D.agents.slice(0,5))H.push(`| ${G.name} | ${G.modelProvider}/${G.modelName} | ${G.status} | ${G.description??"-"} |`);if(D.agents.length>5)H.push(`| ... | ... | ... | _${D.summary.totalAgents-5} more_ |`)}if(H.push(""),H.push("## Recent Runs"),H.push(""),D.runs.length===0)H.push("_No runs yet._");else{H.push("| Run ID | Agent | Status | Duration | Tokens | Cost |"),H.push("|--------|-------|--------|----------|--------|------|");for(let G of D.runs.slice(0,5))H.push(`| ${G.id.slice(-8)} | ${G.agentName} | ${G.status} | ${G.durationMs?yZ(G.durationMs):"-"} | ${G.totalTokens??0} | $${(G.estimatedCostUsd??0).toFixed(4)} |`);if(D.runs.length>5)H.push(`| ... | ... | ... | ... | ... | _${D.summary.totalRuns-5} more_ |`)}H.push(""),H.push("## Visualization Overview"),H.push("");for(let G of $)H.push(`- **${G.title}** via \`${G.spec.meta.key}\``);H.push(""),H.push("## Tools"),H.push("");let Q={};for(let G of D.tools){let F=G.category;if(!Q[F])Q[F]=[];Q[F].push(G)}if(Object.keys(Q).length===0)H.push("_No tools registered._");else{H.push("| Category | Tools | Active |"),H.push("|----------|-------|--------|");for(let[G,F]of Object.entries(Q).sort()){let U=F.filter((L)=>L.status==="ACTIVE").length;H.push(`| ${G} | ${F.length} | ${U} |`)}}return{mimeType:"text/markdown",body:H.join(`
|
|
66
66
|
`)}}};import{AGENT_CONSOLE_DEMO_PROJECT_ID as J4,createAgentConsoleDemoHandlers as mZ}from"@contractspec/example.agent-console/shared";function EZ(Z){if(Z<1000)return`${Z}ms`;if(Z<60000)return`${(Z/1000).toFixed(1)}s`;return`${(Z/60000).toFixed(1)}m`}var pZ={target:"markdown",render:async(Z,q)=>{if(Z.source.type!=="component"||Z.source.componentKey!=="RunListView")throw Error("runListMarkdownRenderer: not RunListView");let D=Array.isArray(q?.data)?{items:q.data,total:q.data.length,hasMore:!1}:await mZ({projectId:J4}).listRuns({projectId:J4,limit:20,offset:0}),Y=[`# ${Z.meta.description??"Agent Runs"}`,"",`> ${Z.meta.key} v${Z.meta.version}`,"",`**Total Runs:** ${D.total}`,"","## Recent Runs","","| ID | Agent | Status | Duration | Tokens | Cost |","| --- | --- | --- | --- | --- | --- |"];for(let X of D.items.slice(0,10))Y.push(`| ${X.id.slice(-8)} | ${X.agentName} | ${X.status} | ${X.durationMs?EZ(X.durationMs):"-"} | ${X.totalTokens} | $${X.estimatedCostUsd?.toFixed(4)??"-"} |`);return{mimeType:"text/markdown",body:Y.join(`
|
|
67
67
|
`)}}};import{AGENT_CONSOLE_DEMO_ORGANIZATION_ID as oZ,AGENT_CONSOLE_DEMO_PROJECT_ID as $4,createAgentConsoleDemoHandlers as SZ}from"@contractspec/example.agent-console/shared";var cZ={target:"markdown",render:async(Z,q)=>{if(Z.source.type!=="component"||Z.source.componentKey!=="ToolRegistryView")throw Error("toolRegistryMarkdownRenderer: not ToolRegistryView");let D=Array.isArray(q?.data)?{items:q.data,total:q.data.length,hasMore:!1}:await SZ({projectId:$4}).listTools({projectId:$4,organizationId:oZ,limit:50,offset:0}),Y=[`# ${Z.meta.description??"Tool Registry"}`,"",`> ${Z.meta.key} v${Z.meta.version}`,"",`**Total Tools:** ${D.total}`,""],X={};for(let A of D.items){let z=A.category;if(!X[z])X[z]=[];X[z].push(A)}for(let[A,z]of Object.entries(X).sort()){Y.push(`## ${A} (${z.length})`),Y.push("");for(let V of z){let J=V.status==="ACTIVE"?"✅":V.status==="DEPRECATED"?"⚠️":"❌";if(Y.push(`### ${J} ${V.name} v${V.version}`),Y.push(""),Y.push(`> \`${V.id}\``),Y.push(""),V.description)Y.push(V.description),Y.push("")}}return{mimeType:"text/markdown",body:Y.join(`
|
|
68
|
-
`)}}};import{defineHarnessScenario as rZ}from"@contractspec/lib.contracts-spec";var X4="Paris Meetup Demo Agent",iZ=i.filter((Z)=>Z.status==="COMPLETED").length,uZ=(iZ+1)/(i.length+1),D1=rZ({meta:{key:"agent-console.meetup.proof",version:"1.0.0",title:"Agent console meetup proof",description:"Verifies the deterministic autonomous-agent walkthrough end-to-end.",domain:"agent-console",owners:["@agent-console-team"],tags:["meetup","proof","autonomous-agents"],stability:"experimental"},target:{allowlistedDomains:["sandbox.contractspec.local"],isolation:"sandbox"},allowedModes:["code-execution"],steps:[{key:"open-dashboard",description:"Inspect seeded dashboard state",actionClass:"code-exec-read",intent:"Confirm the local demo starts with seeded agents, tools, and runs."},{key:"create-agent",description:"Create the meetup demo agent",actionClass:"code-exec-mutate",intent:"Add a new agent for the walkthrough.",mutatesState:!0},{key:"activate-agent",description:"Activate the meetup demo agent",actionClass:"code-exec-mutate",intent:"Move the new agent into an executable state.",mutatesState:!0},{key:"execute-agent",description:"Run the meetup demo agent",actionClass:"code-exec-mutate",intent:"Create a deterministic completed run.",mutatesState:!0},{key:"inspect-dashboard",description:"Confirm dashboard totals after execution",actionClass:"code-exec-read",intent:"Verify the new agent and run are visible in the demo state."}],assertions:[{key:"captured-step-summaries",type:"count",source:"step-summary",match:5},{key:"execution-completed",type:"step-status",source:"execute-agent",match:"completed"},{key:"final-summary-mentions-meetup-agent",type:"text-match",source:"inspect-dashboard",match:X4},{key:"final-dashboard-shape",type:"json-match",source:"inspect-dashboard",match:{agentCount:m.length+1,runCount:i.length+1,toolCount:E.length,latestAgentName:X4,latestRunId:"run-meetup-1",successRate:uZ}}]});import{defineHarnessSuite as sZ}from"@contractspec/lib.contracts-spec";var m9=sZ({meta:{key:"agent-console.meetup.proof-suite",version:"1.0.0",title:"Agent console meetup proof suite",description:"Bundles the deterministic meetup walkthrough into a reusable harness suite.",domain:"agent-console",owners:["@agent-console-team"],tags:["meetup","proof","harness-suite"],stability:"experimental"},summary:"Runs the canonical agent-console meetup scenario and validates the final dashboard evidence.",tags:["agent-console","meetup","proof"],scenarios:[{scenario:{key:D1.meta.key,version:D1.meta.version},required:!0,weight:1}]});export{Z1 as useToolList,C0 as useRunList,r2 as useAgentMutations,v0 as useAgentList,cZ as toolRegistryMarkdownRenderer,pZ as runListMarkdownRenderer,l4 as mockUpdateToolHandler,O4 as mockUpdateAgentHandler,t4 as mockTestToolHandler,i4 as mockListToolsHandler,p4 as mockListRunsHandler,N4 as mockListAgentsHandler,u4 as mockGetToolHandler,o4 as mockGetRunHandler,L4 as mockGetAgentHandler,S4 as mockExecuteAgentHandler,s4 as mockCreateToolHandler,R4 as mockCreateAgentHandler,c4 as mockCancelRunHandler,v5 as getFallbackAgentConsoleDashboardData,g1 as getAgentConsoleDashboardData,x4 as example,j0 as createAgentVisualizationItems,m4 as createAgentHandlers,y2 as createAgentConsoleDemoHandlers,xZ as agentListReactRenderer,RZ as agentListMarkdownRenderer,dZ as agentDashboardMarkdownRenderer,_Z as agentConsoleReadOnlyOverlay,iD as agentConsoleOverlays,WZ as agentConsoleDemoOverlay,h2 as UpdateToolInputModel,v1 as UpdateToolCommand,V2 as UpdateAgentInputModel,k2 as UpdateAgentCommand,O5 as ToolUpdatedEvent,Q0 as ToolSummaryModel,Z0 as ToolStatusEnum,y1 as ToolStatusEntityEnum,b5 as ToolStatusChangedEvent,H2 as ToolRegistryView,w2 as ToolModel,w5 as ToolListPresentation,G5 as ToolInvokedEvent,_5 as ToolEntity,C5 as ToolDetailPresentation,L5 as ToolCreatedEvent,U5 as ToolCompletedEvent,P0 as ToolChoiceEnum,z0 as ToolCategoryEnum,T1 as ToolCategoryEntityEnum,R2 as TimelineDataPointModel,_1 as TestToolCommand,X0 as RunSummaryModel,W2 as RunStepTypeEnum,M1 as RunStepTypeEntityEnum,m0 as RunStepModel,a4 as RunStepEntity,a as RunStatusEnum,O1 as RunStatusEntityEnum,q5 as RunStartedEvent,L2 as RunModel,E0 as RunLogModel,e4 as RunLogEntity,a0 as RunListView,k5 as RunListPresentation,N2 as RunInputModel,$5 as RunFailedEvent,n4 as RunEntity,P5 as RunDetailPresentation,Y5 as RunCompletedEvent,z5 as RunCancelledEvent,A1 as RunAgentRefModel,W4 as RemoveToolFromAgentCommand,q0 as ModelProviderEnum,G1 as ModelProviderEntityEnum,K5 as MessageGeneratedEvent,E as MOCK_TOOLS,i as MOCK_RUNS,m as MOCK_AGENTS,X4 as MEETUP_AGENT_NAME,R0 as LogLevelEnum,b1 as LogLevelEntityEnum,j2 as ListToolsQuery,M2 as ListRunsQuery,I2 as ListAgentsQuery,p0 as ImplementationTypeEnum,d1 as ImplementationTypeEntityEnum,_2 as GranularityEnum,W1 as GetToolQuery,g4 as GetRunStepsQuery,k1 as GetRunQuery,P1 as GetRunMetricsQuery,T4 as GetRunLogsQuery,P2 as GetAgentQuery,gD as ExecutionConsoleHost,O2 as ExecuteAgentCommand,C2 as CreateToolInputModel,B1 as CreateToolCommand,s2 as CreateAgentModal,A2 as CreateAgentInputModel,K2 as CreateAgentCommand,K1 as CancelRunCommand,v4 as AssignToolToAgentCommand,U2 as AgentWithToolsModel,Y1 as AgentVisualizationSpecs,tZ as AgentVisualizationRegistry,J1 as AgentVisualizationRefs,V4 as AgentUpdatedEvent,I4 as AgentToolRemovedEvent,H2 as AgentToolRegistry,F1 as AgentToolRefModel,F4 as AgentToolEntity,k4 as AgentToolAssignedEvent,B0 as AgentSummaryModel,s as AgentStatusEnum,Q1 as AgentStatusEntityEnum,X2 as AgentRunStatusVisualization,a0 as AgentRunList,Q2 as AgentRunEfficiencyVisualization,z2 as AgentRunActivityVisualization,B4 as AgentModel,q1 as AgentListView,M4 as AgentListPresentation,G4 as AgentEntity,b4 as AgentDetailPresentation,q4 as AgentDashboard,F2 as AgentCreatedEvent,m9 as AgentConsoleMeetupProofSuite,J3 as AgentConsoleFeature,w4 as AgentConsoleDashboardPresentation,i2 as AgentActionsModal,D1 as AGENT_CONSOLE_MEETUP_PROOF_SCENARIO,c0 as AGENT_CONSOLE_DEMO_PROJECT_ID,D0 as AGENT_CONSOLE_DEMO_ORGANIZATION_ID};
|
|
68
|
+
`)}}};import{defineHarnessScenario as rZ}from"@contractspec/lib.contracts-spec";var X4="Paris Meetup Demo Agent",iZ=i.filter((Z)=>Z.status==="COMPLETED").length,uZ=(iZ+1)/(i.length+1),D1=rZ({meta:{key:"agent-console.meetup.proof",version:"1.0.0",title:"Agent console meetup proof",description:"Verifies the deterministic autonomous-agent walkthrough end-to-end.",domain:"agent-console",owners:["@agent-console-team"],tags:["meetup","proof","autonomous-agents"],stability:"experimental"},target:{allowlistedDomains:["sandbox.contractspec.local"],isolation:"sandbox"},allowedModes:["code-execution"],steps:[{key:"open-dashboard",description:"Inspect seeded dashboard state",actionClass:"code-exec-read",intent:"Confirm the local demo starts with seeded agents, tools, and runs."},{key:"create-agent",description:"Create the meetup demo agent",actionClass:"code-exec-mutate",intent:"Add a new agent for the walkthrough.",mutatesState:!0},{key:"activate-agent",description:"Activate the meetup demo agent",actionClass:"code-exec-mutate",intent:"Move the new agent into an executable state.",mutatesState:!0},{key:"execute-agent",description:"Run the meetup demo agent",actionClass:"code-exec-mutate",intent:"Create a deterministic completed run.",mutatesState:!0},{key:"inspect-dashboard",description:"Confirm dashboard totals after execution",actionClass:"code-exec-read",intent:"Verify the new agent and run are visible in the demo state."}],assertions:[{key:"captured-step-summaries",type:"count",source:"step-summary",match:5},{key:"execution-completed",type:"step-status",source:"execute-agent",match:"completed"},{key:"final-summary-mentions-meetup-agent",type:"text-match",source:"inspect-dashboard",match:X4},{key:"final-dashboard-shape",type:"json-match",source:"inspect-dashboard",match:{agentCount:m.length+1,runCount:i.length+1,toolCount:E.length,latestAgentName:X4,latestRunId:"run-meetup-1",successRate:uZ}}]});import{defineHarnessSuite as sZ}from"@contractspec/lib.contracts-spec";var m9=sZ({meta:{key:"agent-console.meetup.proof-suite",version:"1.0.0",title:"Agent console meetup proof suite",description:"Bundles the deterministic meetup walkthrough into a reusable harness suite.",domain:"agent-console",owners:["@agent-console-team"],tags:["meetup","proof","harness-suite"],stability:"experimental"},summary:"Runs the canonical agent-console meetup scenario and validates the final dashboard evidence.",tags:["agent-console","meetup","proof"],scenarios:[{scenario:{key:D1.meta.key,version:D1.meta.version},required:!0,weight:1}]});export{Z1 as useToolList,C0 as useRunList,r2 as useAgentMutations,v0 as useAgentList,cZ as toolRegistryMarkdownRenderer,pZ as runListMarkdownRenderer,l4 as mockUpdateToolHandler,O4 as mockUpdateAgentHandler,t4 as mockTestToolHandler,i4 as mockListToolsHandler,p4 as mockListRunsHandler,N4 as mockListAgentsHandler,u4 as mockGetToolHandler,o4 as mockGetRunHandler,L4 as mockGetAgentHandler,S4 as mockExecuteAgentHandler,s4 as mockCreateToolHandler,R4 as mockCreateAgentHandler,c4 as mockCancelRunHandler,v5 as getFallbackAgentConsoleDashboardData,g1 as getAgentConsoleDashboardData,x4 as example,j0 as createAgentVisualizationItems,m4 as createAgentHandlers,y2 as createAgentConsoleDemoHandlers,xZ as agentListReactRenderer,RZ as agentListMarkdownRenderer,dZ as agentDashboardMarkdownRenderer,_Z as agentConsoleReadOnlyOverlay,iD as agentConsoleOverlays,WZ as agentConsoleDemoOverlay,h2 as UpdateToolInputModel,v1 as UpdateToolCommand,V2 as UpdateAgentInputModel,k2 as UpdateAgentCommand,O5 as ToolUpdatedEvent,Q0 as ToolSummaryModel,Z0 as ToolStatusEnum,y1 as ToolStatusEntityEnum,b5 as ToolStatusChangedEvent,H2 as ToolRegistryView,w2 as ToolModel,w5 as ToolListPresentation,G5 as ToolInvokedEvent,_5 as ToolEntity,C5 as ToolDetailPresentation,L5 as ToolCreatedEvent,U5 as ToolCompletedEvent,P0 as ToolChoiceEnum,z0 as ToolCategoryEnum,T1 as ToolCategoryEntityEnum,R2 as TimelineDataPointModel,_1 as TestToolCommand,X0 as RunSummaryModel,W2 as RunStepTypeEnum,M1 as RunStepTypeEntityEnum,m0 as RunStepModel,a4 as RunStepEntity,a as RunStatusEnum,O1 as RunStatusEntityEnum,q5 as RunStartedEvent,L2 as RunModel,E0 as RunLogModel,e4 as RunLogEntity,a0 as RunListView,k5 as RunListPresentation,N2 as RunInputModel,$5 as RunFailedEvent,n4 as RunEntity,P5 as RunDetailPresentation,Y5 as RunCompletedEvent,z5 as RunCancelledEvent,A1 as RunAgentRefModel,W4 as RemoveToolFromAgentCommand,q0 as ModelProviderEnum,G1 as ModelProviderEntityEnum,K5 as MessageGeneratedEvent,E as MOCK_TOOLS,i as MOCK_RUNS,m as MOCK_AGENTS,X4 as MEETUP_AGENT_NAME,R0 as LogLevelEnum,b1 as LogLevelEntityEnum,j2 as ListToolsQuery,M2 as ListRunsQuery,I2 as ListAgentsQuery,p0 as ImplementationTypeEnum,d1 as ImplementationTypeEntityEnum,_2 as GranularityEnum,W1 as GetToolQuery,g4 as GetRunStepsQuery,k1 as GetRunQuery,P1 as GetRunMetricsQuery,T4 as GetRunLogsQuery,P2 as GetAgentQuery,gD as ExecutionConsoleHost,O2 as ExecuteAgentCommand,j4 as ExamplesAgentConsoleExample,C2 as CreateToolInputModel,B1 as CreateToolCommand,s2 as CreateAgentModal,A2 as CreateAgentInputModel,K2 as CreateAgentCommand,K1 as CancelRunCommand,v4 as AssignToolToAgentCommand,U2 as AgentWithToolsModel,Y1 as AgentVisualizationSpecs,tZ as AgentVisualizationRegistry,J1 as AgentVisualizationRefs,V4 as AgentUpdatedEvent,I4 as AgentToolRemovedEvent,H2 as AgentToolRegistry,F1 as AgentToolRefModel,F4 as AgentToolEntity,k4 as AgentToolAssignedEvent,B0 as AgentSummaryModel,s as AgentStatusEnum,Q1 as AgentStatusEntityEnum,X2 as AgentRunStatusVisualization,a0 as AgentRunList,Q2 as AgentRunEfficiencyVisualization,z2 as AgentRunActivityVisualization,B4 as AgentModel,q1 as AgentListView,M4 as AgentListPresentation,G4 as AgentEntity,b4 as AgentDetailPresentation,q4 as AgentDashboard,F2 as AgentCreatedEvent,m9 as AgentConsoleMeetupProofSuite,J3 as AgentConsoleFeature,w4 as AgentConsoleDashboardPresentation,i2 as AgentActionsModal,D1 as AGENT_CONSOLE_MEETUP_PROOF_SCENARIO,c0 as AGENT_CONSOLE_DEMO_PROJECT_ID,D0 as AGENT_CONSOLE_DEMO_ORGANIZATION_ID};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@contractspec/example.agent-console",
|
|
3
|
-
"version": "3.8.
|
|
3
|
+
"version": "3.8.14",
|
|
4
4
|
"description": "Agent Console example - AI agent orchestration with tools, runs, and logs",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -543,19 +543,19 @@
|
|
|
543
543
|
},
|
|
544
544
|
"dependencies": {
|
|
545
545
|
"@contractspec/lib.schema": "3.7.14",
|
|
546
|
-
"@contractspec/lib.contracts-spec": "5.
|
|
547
|
-
"@contractspec/lib.example-shared-ui": "6.0.
|
|
548
|
-
"@contractspec/lib.design-system": "3.
|
|
549
|
-
"@contractspec/lib.runtime-sandbox": "2.7.
|
|
550
|
-
"@contractspec/lib.ui-kit-web": "3.10.
|
|
551
|
-
"@contractspec/module.execution-console": "0.1.
|
|
546
|
+
"@contractspec/lib.contracts-spec": "5.5.0",
|
|
547
|
+
"@contractspec/lib.example-shared-ui": "6.0.22",
|
|
548
|
+
"@contractspec/lib.design-system": "3.11.0",
|
|
549
|
+
"@contractspec/lib.runtime-sandbox": "2.7.15",
|
|
550
|
+
"@contractspec/lib.ui-kit-web": "3.10.3",
|
|
551
|
+
"@contractspec/module.execution-console": "0.1.5",
|
|
552
552
|
"react": "19.2.0",
|
|
553
553
|
"react-dom": "19.2.0",
|
|
554
|
-
"@contractspec/lib.presentation-runtime-core": "
|
|
554
|
+
"@contractspec/lib.presentation-runtime-core": "5.0.0"
|
|
555
555
|
},
|
|
556
556
|
"devDependencies": {
|
|
557
|
-
"@contractspec/lib.harness": "0.2.
|
|
558
|
-
"@contractspec/tool.bun": "3.7.
|
|
557
|
+
"@contractspec/lib.harness": "0.2.14",
|
|
558
|
+
"@contractspec/tool.bun": "3.7.15",
|
|
559
559
|
"@contractspec/tool.typescript": "3.7.13",
|
|
560
560
|
"@types/react": "^19.2.14",
|
|
561
561
|
"@types/react-dom": "^19.2.2",
|
package/src/agent.feature.ts
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Defines the feature module for agent orchestration capabilities.
|
|
5
5
|
*/
|
|
6
6
|
import type { FeatureModuleSpec } from '@contractspec/lib.contracts-spec';
|
|
7
|
-
import { defineFeature } from '@contractspec/lib.contracts-spec';
|
|
7
|
+
import { defineFeature } from '@contractspec/lib.contracts-spec/features';
|
|
8
8
|
import { AgentVisualizationRefs } from './visualizations';
|
|
9
9
|
|
|
10
10
|
/**
|
package/src/example.ts
CHANGED
|
@@ -1,40 +1,28 @@
|
|
|
1
|
-
import { defineExample } from '@contractspec/lib.contracts-spec';
|
|
1
|
+
import { defineExample } from '@contractspec/lib.contracts-spec/examples';
|
|
2
2
|
|
|
3
|
-
const
|
|
3
|
+
const ExamplesAgentConsoleExample = defineExample({
|
|
4
4
|
meta: {
|
|
5
5
|
key: 'agent-console',
|
|
6
6
|
version: '1.0.0',
|
|
7
7
|
title: 'Agent Console',
|
|
8
8
|
description:
|
|
9
|
-
'AI agent
|
|
9
|
+
'Agent Console example - AI agent orchestration with tools, runs, and logs',
|
|
10
10
|
kind: 'template',
|
|
11
11
|
visibility: 'public',
|
|
12
|
-
stability: '
|
|
13
|
-
owners: ['@
|
|
14
|
-
tags: ['
|
|
12
|
+
stability: 'experimental',
|
|
13
|
+
owners: ['@contractspec-core'],
|
|
14
|
+
tags: ['package', 'examples', 'agent-console', 'agents', 'autonomous'],
|
|
15
15
|
},
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
16
|
+
surfaces: {
|
|
17
|
+
templates: true,
|
|
18
|
+
sandbox: { enabled: true, modes: ['playground', 'specs'] },
|
|
19
|
+
studio: { enabled: false, installable: false },
|
|
20
|
+
mcp: { enabled: false },
|
|
21
21
|
},
|
|
22
22
|
entrypoints: {
|
|
23
23
|
packageName: '@contractspec/example.agent-console',
|
|
24
|
-
feature: './agent.feature',
|
|
25
|
-
presentations: './presentations',
|
|
26
|
-
handlers: './handlers',
|
|
27
|
-
docs: './docs',
|
|
28
|
-
},
|
|
29
|
-
surfaces: {
|
|
30
|
-
templates: true,
|
|
31
|
-
sandbox: {
|
|
32
|
-
enabled: true,
|
|
33
|
-
modes: ['playground', 'specs', 'builder', 'markdown', 'evolution'],
|
|
34
|
-
},
|
|
35
|
-
studio: { enabled: true, installable: true },
|
|
36
|
-
mcp: { enabled: true },
|
|
37
24
|
},
|
|
38
25
|
});
|
|
39
26
|
|
|
40
|
-
export default
|
|
27
|
+
export default ExamplesAgentConsoleExample;
|
|
28
|
+
export { ExamplesAgentConsoleExample };
|
package/src/index.ts
CHANGED
|
@@ -42,10 +42,19 @@ beforeAll(() => {
|
|
|
42
42
|
value: SyntaxError,
|
|
43
43
|
configurable: true,
|
|
44
44
|
});
|
|
45
|
+
const encodeURIComponentFromGlobal =
|
|
46
|
+
globalThis.encodeURIComponent.bind(globalThis);
|
|
47
|
+
const decodeURIComponentFromGlobal =
|
|
48
|
+
globalThis.decodeURIComponent.bind(globalThis);
|
|
49
|
+
Object.assign(windowInstance, {
|
|
50
|
+
encodeURIComponent: encodeURIComponentFromGlobal,
|
|
51
|
+
decodeURIComponent: decodeURIComponentFromGlobal,
|
|
52
|
+
});
|
|
45
53
|
Object.assign(globalThis, {
|
|
46
54
|
window: windowInstance,
|
|
47
55
|
document: windowInstance.document,
|
|
48
56
|
navigator: windowInstance.navigator,
|
|
57
|
+
location: windowInstance.location,
|
|
49
58
|
HTMLElement: windowInstance.HTMLElement,
|
|
50
59
|
HTMLButtonElement: windowInstance.HTMLButtonElement,
|
|
51
60
|
HTMLInputElement: windowInstance.HTMLInputElement,
|
|
@@ -55,6 +64,7 @@ beforeAll(() => {
|
|
|
55
64
|
MouseEvent: windowInstance.MouseEvent,
|
|
56
65
|
KeyboardEvent: windowInstance.KeyboardEvent,
|
|
57
66
|
MutationObserver: windowInstance.MutationObserver,
|
|
67
|
+
DocumentFragment: windowInstance.DocumentFragment,
|
|
58
68
|
getComputedStyle: windowInstance.getComputedStyle.bind(windowInstance),
|
|
59
69
|
requestAnimationFrame: (callback: FrameRequestCallback) =>
|
|
60
70
|
setTimeout(() => callback(Date.now()), 0),
|
|
@@ -40,10 +40,19 @@ beforeAll(() => {
|
|
|
40
40
|
value: SyntaxError,
|
|
41
41
|
configurable: true,
|
|
42
42
|
});
|
|
43
|
+
const encodeURIComponentFromGlobal =
|
|
44
|
+
globalThis.encodeURIComponent.bind(globalThis);
|
|
45
|
+
const decodeURIComponentFromGlobal =
|
|
46
|
+
globalThis.decodeURIComponent.bind(globalThis);
|
|
47
|
+
Object.assign(windowInstance, {
|
|
48
|
+
encodeURIComponent: encodeURIComponentFromGlobal,
|
|
49
|
+
decodeURIComponent: decodeURIComponentFromGlobal,
|
|
50
|
+
});
|
|
43
51
|
Object.assign(globalThis, {
|
|
44
52
|
window: windowInstance,
|
|
45
53
|
document: windowInstance.document,
|
|
46
54
|
navigator: windowInstance.navigator,
|
|
55
|
+
location: windowInstance.location,
|
|
47
56
|
HTMLElement: windowInstance.HTMLElement,
|
|
48
57
|
HTMLButtonElement: windowInstance.HTMLButtonElement,
|
|
49
58
|
HTMLInputElement: windowInstance.HTMLInputElement,
|
|
@@ -53,6 +62,7 @@ beforeAll(() => {
|
|
|
53
62
|
MouseEvent: windowInstance.MouseEvent,
|
|
54
63
|
KeyboardEvent: windowInstance.KeyboardEvent,
|
|
55
64
|
MutationObserver: windowInstance.MutationObserver,
|
|
65
|
+
DocumentFragment: windowInstance.DocumentFragment,
|
|
56
66
|
getComputedStyle: windowInstance.getComputedStyle.bind(windowInstance),
|
|
57
67
|
requestAnimationFrame: (callback: FrameRequestCallback) =>
|
|
58
68
|
setTimeout(() => callback(Date.now()), 0),
|