@contractspec/example.agent-console 1.46.0 → 1.47.0
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$colon$bundle.log +275 -128
- package/.turbo/turbo-build.log +274 -127
- package/CHANGELOG.md +46 -0
- package/dist/agent/agent.entity.d.ts +36 -36
- package/dist/agent/agent.entity.d.ts.map +1 -1
- package/dist/agent/agent.enum.d.ts +4 -4
- package/dist/agent/agent.enum.d.ts.map +1 -1
- package/dist/agent/agent.event.d.ts +31 -31
- package/dist/agent/agent.event.d.ts.map +1 -1
- package/dist/agent/agent.event.js +5 -5
- package/dist/agent/agent.event.js.map +1 -1
- package/dist/agent/agent.handler.js.map +1 -1
- package/dist/agent/agent.operation.d.ts +117 -117
- package/dist/agent/agent.operation.d.ts.map +1 -1
- package/dist/agent/agent.presentation.d.ts +4 -5
- package/dist/agent/agent.presentation.d.ts.map +1 -1
- package/dist/agent/agent.presentation.js +7 -7
- package/dist/agent/agent.presentation.js.map +1 -1
- package/dist/agent/agent.schema.d.ts +95 -95
- package/dist/agent/agent.schema.d.ts.map +1 -1
- package/dist/agent/agent.test-spec.d.ts +8 -0
- package/dist/agent/agent.test-spec.d.ts.map +1 -0
- package/dist/agent/agent.test-spec.js +65 -0
- package/dist/agent/agent.test-spec.js.map +1 -0
- package/dist/agent.capability.d.ts +7 -0
- package/dist/agent.capability.d.ts.map +1 -0
- package/dist/agent.capability.js +20 -0
- package/dist/agent.capability.js.map +1 -0
- package/dist/agent.feature.d.ts.map +1 -1
- package/dist/agent.feature.js +4 -2
- package/dist/agent.feature.js.map +1 -1
- package/dist/example.d.ts +2 -2
- package/dist/example.d.ts.map +1 -1
- package/dist/example.js +4 -2
- package/dist/example.js.map +1 -1
- package/dist/handlers/agent.handlers.d.ts +135 -0
- package/dist/handlers/agent.handlers.d.ts.map +1 -0
- package/dist/handlers/agent.handlers.js +263 -0
- package/dist/handlers/agent.handlers.js.map +1 -0
- package/dist/handlers/index.d.ts +2 -1
- package/dist/handlers/index.js +2 -1
- package/dist/index.d.ts +19 -1
- package/dist/index.js +19 -1
- package/dist/run/run.entity.d.ts +56 -56
- package/dist/run/run.enum.d.ts +5 -5
- package/dist/run/run.event.d.ts +71 -71
- package/dist/run/run.event.d.ts.map +1 -1
- package/dist/run/run.event.js +8 -8
- package/dist/run/run.event.js.map +1 -1
- package/dist/run/run.operation.d.ts +175 -175
- package/dist/run/run.operation.d.ts.map +1 -1
- package/dist/run/run.presentation.d.ts +3 -4
- package/dist/run/run.presentation.d.ts.map +1 -1
- package/dist/run/run.presentation.js +5 -5
- package/dist/run/run.presentation.js.map +1 -1
- package/dist/run/run.schema.d.ts +99 -99
- package/dist/run/run.test-spec.d.ts +8 -0
- package/dist/run/run.test-spec.d.ts.map +1 -0
- package/dist/run/run.test-spec.js +65 -0
- package/dist/run/run.test-spec.js.map +1 -0
- package/dist/seeders/index.d.ts +10 -0
- package/dist/seeders/index.d.ts.map +1 -0
- package/dist/seeders/index.js +20 -0
- package/dist/seeders/index.js.map +1 -0
- package/dist/shared/overlay-types.d.ts +34 -0
- package/dist/shared/overlay-types.d.ts.map +1 -0
- package/dist/shared/overlay-types.js +0 -0
- package/dist/tool/tool.entity.d.ts +24 -24
- package/dist/tool/tool.enum.d.ts +4 -4
- package/dist/tool/tool.event.d.ts +25 -25
- package/dist/tool/tool.event.js +4 -4
- package/dist/tool/tool.event.js.map +1 -1
- package/dist/tool/tool.handler.d.ts.map +1 -1
- package/dist/tool/tool.operation.d.ts +101 -101
- package/dist/tool/tool.presentation.d.ts +3 -4
- package/dist/tool/tool.presentation.d.ts.map +1 -1
- package/dist/tool/tool.presentation.js +5 -5
- package/dist/tool/tool.presentation.js.map +1 -1
- package/dist/tool/tool.schema.d.ts +52 -52
- package/dist/tool/tool.schema.d.ts.map +1 -1
- package/dist/tool/tool.test-spec.d.ts +8 -0
- package/dist/tool/tool.test-spec.d.ts.map +1 -0
- package/dist/tool/tool.test-spec.js +65 -0
- package/dist/tool/tool.test-spec.js.map +1 -0
- package/dist/ui/AgentDashboard.d.ts +7 -0
- package/dist/ui/AgentDashboard.d.ts.map +1 -0
- package/dist/ui/AgentDashboard.js +420 -0
- package/dist/ui/AgentDashboard.js.map +1 -0
- package/dist/ui/AgentRunList.d.ts +2 -0
- package/dist/ui/AgentRunList.js +5 -0
- package/dist/ui/AgentToolRegistry.d.ts +2 -0
- package/dist/ui/AgentToolRegistry.js +5 -0
- package/dist/ui/hooks/index.d.ts +6 -0
- package/dist/ui/hooks/index.js +8 -0
- package/dist/ui/hooks/useAgentList.d.ts +28 -0
- package/dist/ui/hooks/useAgentList.d.ts.map +1 -0
- package/dist/ui/hooks/useAgentList.js +66 -0
- package/dist/ui/hooks/useAgentList.js.map +1 -0
- package/dist/ui/hooks/useAgentMutations.d.ts +29 -0
- package/dist/ui/hooks/useAgentMutations.d.ts.map +1 -0
- package/dist/ui/hooks/useAgentMutations.js +124 -0
- package/dist/ui/hooks/useAgentMutations.js.map +1 -0
- package/dist/ui/hooks/useRunList.d.ts +24 -0
- package/dist/ui/hooks/useRunList.d.ts.map +1 -0
- package/dist/ui/hooks/useRunList.js +66 -0
- package/dist/ui/hooks/useRunList.js.map +1 -0
- package/dist/ui/hooks/useToolList.d.ts +40 -0
- package/dist/ui/hooks/useToolList.d.ts.map +1 -0
- package/dist/ui/hooks/useToolList.js +96 -0
- package/dist/ui/hooks/useToolList.js.map +1 -0
- package/dist/ui/index.d.ts +24 -0
- package/dist/ui/index.js +24 -0
- package/dist/ui/modals/AgentActionsModal.d.ts +27 -0
- package/dist/ui/modals/AgentActionsModal.d.ts.map +1 -0
- package/dist/ui/modals/AgentActionsModal.js +262 -0
- package/dist/ui/modals/AgentActionsModal.js.map +1 -0
- package/dist/ui/modals/CreateAgentModal.d.ts +25 -0
- package/dist/ui/modals/CreateAgentModal.d.ts.map +1 -0
- package/dist/ui/modals/CreateAgentModal.js +214 -0
- package/dist/ui/modals/CreateAgentModal.js.map +1 -0
- package/dist/ui/modals/index.d.ts +3 -0
- package/dist/ui/modals/index.js +4 -0
- package/dist/ui/overlays/demo-overlays.d.ts +19 -0
- package/dist/ui/overlays/demo-overlays.d.ts.map +1 -0
- package/dist/ui/overlays/demo-overlays.js +73 -0
- package/dist/ui/overlays/demo-overlays.js.map +1 -0
- package/dist/ui/overlays/index.d.ts +2 -0
- package/dist/ui/overlays/index.js +3 -0
- package/dist/ui/renderers/agent-list.markdown.d.ts +15 -0
- package/dist/ui/renderers/agent-list.markdown.d.ts.map +1 -0
- package/dist/ui/renderers/agent-list.markdown.js +51 -0
- package/dist/ui/renderers/agent-list.markdown.js.map +1 -0
- package/dist/ui/renderers/agent-list.renderer.d.ts +11 -0
- package/dist/ui/renderers/agent-list.renderer.d.ts.map +1 -0
- package/dist/ui/renderers/agent-list.renderer.js +19 -0
- package/dist/ui/renderers/agent-list.renderer.js.map +1 -0
- package/dist/ui/renderers/dashboard.markdown.d.ts +15 -0
- package/dist/ui/renderers/dashboard.markdown.d.ts.map +1 -0
- package/dist/ui/renderers/dashboard.markdown.js +100 -0
- package/dist/ui/renderers/dashboard.markdown.js.map +1 -0
- package/dist/ui/renderers/index.d.ts +6 -0
- package/dist/ui/renderers/index.js +7 -0
- package/dist/ui/renderers/run-list.markdown.d.ts +15 -0
- package/dist/ui/renderers/run-list.markdown.d.ts.map +1 -0
- package/dist/ui/renderers/run-list.markdown.js +44 -0
- package/dist/ui/renderers/run-list.markdown.js.map +1 -0
- package/dist/ui/renderers/tool-registry.markdown.d.ts +15 -0
- package/dist/ui/renderers/tool-registry.markdown.d.ts.map +1 -0
- package/dist/ui/renderers/tool-registry.markdown.js +55 -0
- package/dist/ui/renderers/tool-registry.markdown.js.map +1 -0
- package/dist/ui/views/AgentListView.d.ts +7 -0
- package/dist/ui/views/AgentListView.d.ts.map +1 -0
- package/dist/ui/views/AgentListView.js +93 -0
- package/dist/ui/views/AgentListView.js.map +1 -0
- package/dist/ui/views/RunListView.d.ts +14 -0
- package/dist/ui/views/RunListView.d.ts.map +1 -0
- package/dist/ui/views/RunListView.js +165 -0
- package/dist/ui/views/RunListView.js.map +1 -0
- package/dist/ui/views/ToolRegistryView.d.ts +14 -0
- package/dist/ui/views/ToolRegistryView.d.ts.map +1 -0
- package/dist/ui/views/ToolRegistryView.js +97 -0
- package/dist/ui/views/ToolRegistryView.js.map +1 -0
- package/dist/ui/views/index.d.ts +4 -0
- package/dist/ui/views/index.js +5 -0
- package/package.json +46 -10
- package/src/agent/agent.presentation.ts +7 -8
- package/src/agent/agent.test-spec.ts +55 -0
- package/src/agent.capability.ts +13 -0
- package/src/agent.feature.ts +3 -2
- package/src/example.ts +3 -3
- package/src/handlers/agent.handlers.ts +572 -0
- package/src/handlers/index.ts +3 -0
- package/src/index.ts +5 -0
- package/src/run/run.presentation.ts +5 -6
- package/src/run/run.test-spec.ts +55 -0
- package/src/seeders/index.ts +29 -0
- package/src/shared/overlay-types.ts +39 -0
- package/src/tool/tool.presentation.ts +5 -6
- package/src/tool/tool.test-spec.ts +55 -0
- package/src/ui/AgentDashboard.tsx +416 -0
- package/src/ui/AgentRunList.tsx +8 -0
- package/src/ui/AgentToolRegistry.tsx +8 -0
- package/src/ui/hooks/index.ts +14 -0
- package/src/ui/hooks/useAgentList.ts +80 -0
- package/src/ui/hooks/useAgentMutations.ts +156 -0
- package/src/ui/hooks/useRunList.ts +81 -0
- package/src/ui/hooks/useToolList.ts +122 -0
- package/src/ui/index.ts +21 -0
- package/src/ui/modals/AgentActionsModal.tsx +306 -0
- package/src/ui/modals/CreateAgentModal.tsx +257 -0
- package/src/ui/modals/index.ts +2 -0
- package/src/ui/overlays/demo-overlays.ts +77 -0
- package/src/ui/overlays/index.ts +1 -0
- package/src/ui/renderers/agent-list.markdown.ts +84 -0
- package/src/ui/renderers/agent-list.renderer.tsx +27 -0
- package/src/ui/renderers/dashboard.markdown.ts +169 -0
- package/src/ui/renderers/index.ts +12 -0
- package/src/ui/renderers/run-list.markdown.ts +75 -0
- package/src/ui/renderers/tool-registry.markdown.ts +91 -0
- package/src/ui/views/AgentListView.tsx +113 -0
- package/src/ui/views/RunListView.tsx +173 -0
- package/src/ui/views/ToolRegistryView.tsx +140 -0
- package/src/ui/views/index.ts +6 -0
- package/tsconfig.tsbuildinfo +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"demo-overlays.js","names":[],"sources":["../../../src/ui/overlays/demo-overlays.ts"],"sourcesContent":["/**\n * Demo Overlay Definitions for Agent Console\n *\n * These overlays customize the presentation for different contexts\n * (e.g., demo users, different roles).\n */\nimport type { OverlayDefinition } from '../../shared/overlay-types';\n\n/**\n * Demo user overlay - hides advanced configuration options\n */\nexport const agentConsoleDemoOverlay: OverlayDefinition = {\n overlayId: 'agent-console.demo-user',\n version: '1.0.0',\n description: 'Simplifies agent console for demo users',\n appliesTo: {\n feature: 'agent-console',\n role: 'demo',\n },\n modifications: [\n {\n type: 'hideField',\n field: 'modelConfig',\n reason: 'Advanced config not relevant for demo',\n },\n {\n type: 'hideField',\n field: 'webhookConfig',\n reason: 'Integration not available in demo',\n },\n {\n type: 'renameLabel',\n field: 'systemPrompt',\n newLabel: 'Agent Instructions',\n },\n {\n type: 'addBadge',\n position: 'header',\n label: 'Demo Mode',\n variant: 'warning',\n },\n ],\n};\n\n/**\n * Read-only overlay - for viewing without edit permissions\n */\nexport const agentConsoleReadOnlyOverlay: OverlayDefinition = {\n overlayId: 'agent-console.read-only',\n version: '1.0.0',\n description: 'Read-only view for non-admin users',\n appliesTo: {\n feature: 'agent-console',\n role: 'viewer',\n },\n modifications: [\n {\n type: 'hideField',\n field: 'deleteButton',\n reason: 'No delete permission',\n },\n { type: 'hideField', field: 'editButton', reason: 'No edit permission' },\n {\n type: 'hideField',\n field: 'createButton',\n reason: 'No create permission',\n },\n ],\n};\n\n/**\n * All overlays for agent-console\n */\nexport const agentConsoleOverlays: OverlayDefinition[] = [\n agentConsoleDemoOverlay,\n agentConsoleReadOnlyOverlay,\n];\n"],"mappings":";;;;AAWA,MAAa,0BAA6C;CACxD,WAAW;CACX,SAAS;CACT,aAAa;CACb,WAAW;EACT,SAAS;EACT,MAAM;EACP;CACD,eAAe;EACb;GACE,MAAM;GACN,OAAO;GACP,QAAQ;GACT;EACD;GACE,MAAM;GACN,OAAO;GACP,QAAQ;GACT;EACD;GACE,MAAM;GACN,OAAO;GACP,UAAU;GACX;EACD;GACE,MAAM;GACN,UAAU;GACV,OAAO;GACP,SAAS;GACV;EACF;CACF;;;;AAKD,MAAa,8BAAiD;CAC5D,WAAW;CACX,SAAS;CACT,aAAa;CACb,WAAW;EACT,SAAS;EACT,MAAM;EACP;CACD,eAAe;EACb;GACE,MAAM;GACN,OAAO;GACP,QAAQ;GACT;EACD;GAAE,MAAM;GAAa,OAAO;GAAc,QAAQ;GAAsB;EACxE;GACE,MAAM;GACN,OAAO;GACP,QAAQ;GACT;EACF;CACF;;;;AAKD,MAAa,uBAA4C,CACvD,yBACA,4BACD"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { PresentationRenderer } from "@contractspec/lib.contracts";
|
|
2
|
+
|
|
3
|
+
//#region src/ui/renderers/agent-list.markdown.d.ts
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Markdown renderer for agent-console.agent.list presentation
|
|
7
|
+
* Only handles AgentListView component
|
|
8
|
+
*/
|
|
9
|
+
declare const agentListMarkdownRenderer: PresentationRenderer<{
|
|
10
|
+
mimeType: string;
|
|
11
|
+
body: string;
|
|
12
|
+
}>;
|
|
13
|
+
//#endregion
|
|
14
|
+
export { agentListMarkdownRenderer };
|
|
15
|
+
//# sourceMappingURL=agent-list.markdown.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-list.markdown.d.ts","names":[],"sources":["../../../src/ui/renderers/agent-list.markdown.ts"],"sourcesContent":[],"mappings":";;;;;;;;cAoBa,2BAA2B"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { mockListAgentsHandler } from "@contractspec/example.agent-console/handlers";
|
|
2
|
+
|
|
3
|
+
//#region src/ui/renderers/agent-list.markdown.ts
|
|
4
|
+
/**
|
|
5
|
+
* Markdown renderer for agent-console.agent.list presentation
|
|
6
|
+
* Only handles AgentListView component
|
|
7
|
+
*/
|
|
8
|
+
const agentListMarkdownRenderer = {
|
|
9
|
+
target: "markdown",
|
|
10
|
+
render: async (desc) => {
|
|
11
|
+
if (desc.source.type !== "component" || desc.source.componentKey !== "AgentListView") throw new Error("agentListMarkdownRenderer: not AgentListView");
|
|
12
|
+
const data = await mockListAgentsHandler({
|
|
13
|
+
organizationId: "demo-org",
|
|
14
|
+
limit: 50,
|
|
15
|
+
offset: 0
|
|
16
|
+
});
|
|
17
|
+
const lines = [
|
|
18
|
+
`# ${desc.meta.description ?? "Agent List"}`,
|
|
19
|
+
"",
|
|
20
|
+
`> ${desc.meta.key} v${desc.meta.version}`,
|
|
21
|
+
"",
|
|
22
|
+
`**Total Agents:** ${data.total}`,
|
|
23
|
+
"",
|
|
24
|
+
"## Agents",
|
|
25
|
+
""
|
|
26
|
+
];
|
|
27
|
+
const byStatus = {};
|
|
28
|
+
for (const agent of data.items) {
|
|
29
|
+
const status = agent.status;
|
|
30
|
+
if (byStatus[status]) byStatus[status].push(agent);
|
|
31
|
+
else byStatus[status] = [agent];
|
|
32
|
+
}
|
|
33
|
+
for (const [status, agents] of Object.entries(byStatus)) {
|
|
34
|
+
lines.push(`### ${status} (${agents.length})`);
|
|
35
|
+
lines.push("");
|
|
36
|
+
for (const agent of agents) {
|
|
37
|
+
lines.push(`- **${agent.name}** (${agent.modelProvider}/${agent.modelName})`);
|
|
38
|
+
if (agent.description) lines.push(` > ${agent.description}`);
|
|
39
|
+
}
|
|
40
|
+
lines.push("");
|
|
41
|
+
}
|
|
42
|
+
return {
|
|
43
|
+
mimeType: "text/markdown",
|
|
44
|
+
body: lines.join("\n")
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
//#endregion
|
|
50
|
+
export { agentListMarkdownRenderer };
|
|
51
|
+
//# sourceMappingURL=agent-list.markdown.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-list.markdown.js","names":[],"sources":["../../../src/ui/renderers/agent-list.markdown.ts"],"sourcesContent":["/**\n * Markdown Renderer for Agent List Presentation\n *\n * Uses handlers from the agent-console example package.\n */\nimport type {\n PresentationRenderer,\n PresentationSpec,\n} from '@contractspec/lib.contracts';\nimport {\n type AgentSummary,\n mockListAgentsHandler,\n} from '@contractspec/example.agent-console/handlers';\n\ntype Agent = AgentSummary;\n\n/**\n * Markdown renderer for agent-console.agent.list presentation\n * Only handles AgentListView component\n */\nexport const agentListMarkdownRenderer: PresentationRenderer<{\n mimeType: string;\n body: string;\n}> = {\n target: 'markdown',\n render: async (desc: PresentationSpec) => {\n // Only handle AgentListView\n if (\n desc.source.type !== 'component' ||\n desc.source.componentKey !== 'AgentListView'\n ) {\n throw new Error('agentListMarkdownRenderer: not AgentListView');\n }\n\n // Fetch data using mock handler\n const data = await mockListAgentsHandler({\n organizationId: 'demo-org',\n limit: 50,\n offset: 0,\n });\n\n // Generate markdown\n const lines: string[] = [\n `# ${desc.meta.description ?? 'Agent List'}`,\n '',\n `> ${desc.meta.key} v${desc.meta.version}`,\n '',\n `**Total Agents:** ${data.total}`,\n '',\n '## Agents',\n '',\n ];\n\n // Group by status\n const byStatus: Record<string, Agent[]> = {};\n for (const agent of data.items) {\n const status = agent.status;\n if (byStatus[status]) {\n byStatus[status].push(agent);\n } else {\n byStatus[status] = [agent];\n }\n }\n\n for (const [status, agents] of Object.entries(byStatus)) {\n lines.push(`### ${status} (${agents.length})`);\n lines.push('');\n for (const agent of agents) {\n lines.push(\n `- **${agent.name}** (${agent.modelProvider}/${agent.modelName})`\n );\n if (agent.description) {\n lines.push(` > ${agent.description}`);\n }\n }\n lines.push('');\n }\n\n return {\n mimeType: 'text/markdown',\n body: lines.join('\\n'),\n };\n },\n};\n"],"mappings":";;;;;;;AAoBA,MAAa,4BAGR;CACH,QAAQ;CACR,QAAQ,OAAO,SAA2B;AAExC,MACE,KAAK,OAAO,SAAS,eACrB,KAAK,OAAO,iBAAiB,gBAE7B,OAAM,IAAI,MAAM,+CAA+C;EAIjE,MAAM,OAAO,MAAM,sBAAsB;GACvC,gBAAgB;GAChB,OAAO;GACP,QAAQ;GACT,CAAC;EAGF,MAAM,QAAkB;GACtB,KAAK,KAAK,KAAK,eAAe;GAC9B;GACA,KAAK,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK;GACjC;GACA,qBAAqB,KAAK;GAC1B;GACA;GACA;GACD;EAGD,MAAM,WAAoC,EAAE;AAC5C,OAAK,MAAM,SAAS,KAAK,OAAO;GAC9B,MAAM,SAAS,MAAM;AACrB,OAAI,SAAS,QACX,UAAS,QAAQ,KAAK,MAAM;OAE5B,UAAS,UAAU,CAAC,MAAM;;AAI9B,OAAK,MAAM,CAAC,QAAQ,WAAW,OAAO,QAAQ,SAAS,EAAE;AACvD,SAAM,KAAK,OAAO,OAAO,IAAI,OAAO,OAAO,GAAG;AAC9C,SAAM,KAAK,GAAG;AACd,QAAK,MAAM,SAAS,QAAQ;AAC1B,UAAM,KACJ,OAAO,MAAM,KAAK,MAAM,MAAM,cAAc,GAAG,MAAM,UAAU,GAChE;AACD,QAAI,MAAM,YACR,OAAM,KAAK,OAAO,MAAM,cAAc;;AAG1C,SAAM,KAAK,GAAG;;AAGhB,SAAO;GACL,UAAU;GACV,MAAM,MAAM,KAAK,KAAK;GACvB;;CAEJ"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { PresentationRenderer } from "@contractspec/lib.contracts";
|
|
2
|
+
|
|
3
|
+
//#region src/ui/renderers/agent-list.renderer.d.ts
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* React renderer for agent-console.agent.list presentation
|
|
7
|
+
*/
|
|
8
|
+
declare const agentListReactRenderer: PresentationRenderer<React.ReactElement>;
|
|
9
|
+
//#endregion
|
|
10
|
+
export { agentListReactRenderer };
|
|
11
|
+
//# sourceMappingURL=agent-list.renderer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-list.renderer.d.ts","names":[],"sources":["../../../src/ui/renderers/agent-list.renderer.tsx"],"sourcesContent":[],"mappings":";;;;;;;cAYa,wBAAwB,qBAAqB,KAAA,CAAM"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { AgentListView } from "../views/AgentListView.js";
|
|
2
|
+
import { jsx } from "react/jsx-runtime";
|
|
3
|
+
|
|
4
|
+
//#region src/ui/renderers/agent-list.renderer.tsx
|
|
5
|
+
/**
|
|
6
|
+
* React renderer for agent-console.agent.list presentation
|
|
7
|
+
*/
|
|
8
|
+
const agentListReactRenderer = {
|
|
9
|
+
target: "react",
|
|
10
|
+
render: async (desc) => {
|
|
11
|
+
if (desc.source.type !== "component") throw new Error("AgentListRenderer: expected component source");
|
|
12
|
+
if (desc.source.componentKey !== "AgentListView") throw new Error(`AgentListRenderer: unknown component ${desc.source.componentKey}`);
|
|
13
|
+
return /* @__PURE__ */ jsx(AgentListView, {});
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
//#endregion
|
|
18
|
+
export { agentListReactRenderer };
|
|
19
|
+
//# sourceMappingURL=agent-list.renderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-list.renderer.js","names":[],"sources":["../../../src/ui/renderers/agent-list.renderer.tsx"],"sourcesContent":["/**\n * React Renderer for Agent List Presentation\n */\nimport type {\n PresentationRenderer,\n PresentationSpec,\n} from '@contractspec/lib.contracts';\nimport { AgentListView } from '../views/AgentListView';\n\n/**\n * React renderer for agent-console.agent.list presentation\n */\nexport const agentListReactRenderer: PresentationRenderer<React.ReactElement> =\n {\n target: 'react',\n render: async (desc: PresentationSpec) => {\n if (desc.source.type !== 'component') {\n throw new Error('AgentListRenderer: expected component source');\n }\n if (desc.source.componentKey !== 'AgentListView') {\n throw new Error(\n `AgentListRenderer: unknown component ${desc.source.componentKey}`\n );\n }\n return <AgentListView />;\n },\n };\n"],"mappings":";;;;;;;AAYA,MAAa,yBACX;CACE,QAAQ;CACR,QAAQ,OAAO,SAA2B;AACxC,MAAI,KAAK,OAAO,SAAS,YACvB,OAAM,IAAI,MAAM,+CAA+C;AAEjE,MAAI,KAAK,OAAO,iBAAiB,gBAC/B,OAAM,IAAI,MACR,wCAAwC,KAAK,OAAO,eACrD;AAEH,SAAO,oBAAC,kBAAgB;;CAE3B"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { PresentationRenderer } from "@contractspec/lib.contracts";
|
|
2
|
+
|
|
3
|
+
//#region src/ui/renderers/dashboard.markdown.d.ts
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Markdown renderer for agent-console.dashboard presentation
|
|
7
|
+
* Only handles AgentConsoleDashboard component
|
|
8
|
+
*/
|
|
9
|
+
declare const agentDashboardMarkdownRenderer: PresentationRenderer<{
|
|
10
|
+
mimeType: string;
|
|
11
|
+
body: string;
|
|
12
|
+
}>;
|
|
13
|
+
//#endregion
|
|
14
|
+
export { agentDashboardMarkdownRenderer };
|
|
15
|
+
//# sourceMappingURL=dashboard.markdown.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dashboard.markdown.d.ts","names":[],"sources":["../../../src/ui/renderers/dashboard.markdown.ts"],"sourcesContent":[],"mappings":";;;;;;;;cAyBa,gCAAgC"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { mockListAgentsHandler, mockListRunsHandler, mockListToolsHandler } from "@contractspec/example.agent-console/handlers";
|
|
2
|
+
|
|
3
|
+
//#region src/ui/renderers/dashboard.markdown.ts
|
|
4
|
+
function formatDuration(ms) {
|
|
5
|
+
if (ms < 1e3) return `${ms}ms`;
|
|
6
|
+
if (ms < 6e4) return `${(ms / 1e3).toFixed(1)}s`;
|
|
7
|
+
return `${(ms / 6e4).toFixed(1)}m`;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Markdown renderer for agent-console.dashboard presentation
|
|
11
|
+
* Only handles AgentConsoleDashboard component
|
|
12
|
+
*/
|
|
13
|
+
const agentDashboardMarkdownRenderer = {
|
|
14
|
+
target: "markdown",
|
|
15
|
+
render: async (desc) => {
|
|
16
|
+
if (desc.source.type !== "component" || desc.source.componentKey !== "AgentConsoleDashboard") throw new Error("agentDashboardMarkdownRenderer: not AgentConsoleDashboard");
|
|
17
|
+
const [agentsData, runsData, toolsData] = await Promise.all([
|
|
18
|
+
mockListAgentsHandler({
|
|
19
|
+
organizationId: "demo-org",
|
|
20
|
+
limit: 100
|
|
21
|
+
}),
|
|
22
|
+
mockListRunsHandler({ limit: 100 }),
|
|
23
|
+
mockListToolsHandler({
|
|
24
|
+
organizationId: "demo-org",
|
|
25
|
+
limit: 100
|
|
26
|
+
})
|
|
27
|
+
]);
|
|
28
|
+
const activeAgents = agentsData.items.filter((a) => a.status === "ACTIVE").length;
|
|
29
|
+
const completedRuns = runsData.items.filter((r) => r.status === "COMPLETED").length;
|
|
30
|
+
const failedRuns = runsData.items.filter((r) => r.status === "FAILED").length;
|
|
31
|
+
const totalTokens = runsData.items.reduce((sum, r) => sum + (r.totalTokens ?? 0), 0);
|
|
32
|
+
const totalCost = runsData.items.reduce((sum, r) => sum + (r.estimatedCostUsd ?? 0), 0);
|
|
33
|
+
const activeTools = toolsData.items.filter((t) => t.status === "ACTIVE").length;
|
|
34
|
+
const lines = [
|
|
35
|
+
"# Agent Console Dashboard",
|
|
36
|
+
"",
|
|
37
|
+
"> AI agent operations overview",
|
|
38
|
+
"",
|
|
39
|
+
"## Summary",
|
|
40
|
+
"",
|
|
41
|
+
"| Metric | Value |",
|
|
42
|
+
"|--------|-------|",
|
|
43
|
+
`| Total Agents | ${agentsData.total} |`,
|
|
44
|
+
`| Active Agents | ${activeAgents} |`,
|
|
45
|
+
`| Total Runs | ${runsData.total} |`,
|
|
46
|
+
`| Completed Runs | ${completedRuns} |`,
|
|
47
|
+
`| Failed Runs | ${failedRuns} |`,
|
|
48
|
+
`| Total Tokens | ${totalTokens.toLocaleString()} |`,
|
|
49
|
+
`| Total Cost | $${totalCost.toFixed(4)} |`,
|
|
50
|
+
`| Total Tools | ${toolsData.total} |`,
|
|
51
|
+
`| Active Tools | ${activeTools} |`,
|
|
52
|
+
"",
|
|
53
|
+
"## Agents",
|
|
54
|
+
""
|
|
55
|
+
];
|
|
56
|
+
if (agentsData.items.length === 0) lines.push("_No agents configured._");
|
|
57
|
+
else {
|
|
58
|
+
lines.push("| Agent | Model | Status | Description |");
|
|
59
|
+
lines.push("|-------|-------|--------|-------------|");
|
|
60
|
+
for (const agent of agentsData.items.slice(0, 5)) lines.push(`| ${agent.name} | ${agent.modelProvider}/${agent.modelName} | ${agent.status} | ${agent.description ?? "-"} |`);
|
|
61
|
+
if (agentsData.items.length > 5) lines.push(`| ... | ... | ... | _${agentsData.total - 5} more_ |`);
|
|
62
|
+
}
|
|
63
|
+
lines.push("");
|
|
64
|
+
lines.push("## Recent Runs");
|
|
65
|
+
lines.push("");
|
|
66
|
+
if (runsData.items.length === 0) lines.push("_No runs yet._");
|
|
67
|
+
else {
|
|
68
|
+
lines.push("| Run ID | Agent | Status | Duration | Tokens | Cost |");
|
|
69
|
+
lines.push("|--------|-------|--------|----------|--------|------|");
|
|
70
|
+
for (const run of runsData.items.slice(0, 5)) lines.push(`| ${run.id.slice(-8)} | ${run.agentName} | ${run.status} | ${run.durationMs ? formatDuration(run.durationMs) : "-"} | ${run.totalTokens ?? 0} | $${(run.estimatedCostUsd ?? 0).toFixed(4)} |`);
|
|
71
|
+
if (runsData.items.length > 5) lines.push(`| ... | ... | ... | ... | ... | _${runsData.total - 5} more_ |`);
|
|
72
|
+
}
|
|
73
|
+
lines.push("");
|
|
74
|
+
lines.push("## Tools");
|
|
75
|
+
lines.push("");
|
|
76
|
+
const toolsByCategory = {};
|
|
77
|
+
for (const tool of toolsData.items) {
|
|
78
|
+
const cat = tool.category;
|
|
79
|
+
if (!toolsByCategory[cat]) toolsByCategory[cat] = [];
|
|
80
|
+
toolsByCategory[cat].push(tool);
|
|
81
|
+
}
|
|
82
|
+
if (Object.keys(toolsByCategory).length === 0) lines.push("_No tools registered._");
|
|
83
|
+
else {
|
|
84
|
+
lines.push("| Category | Tools | Active |");
|
|
85
|
+
lines.push("|----------|-------|--------|");
|
|
86
|
+
for (const [category, tools] of Object.entries(toolsByCategory).sort()) {
|
|
87
|
+
const active = tools.filter((t) => t.status === "ACTIVE").length;
|
|
88
|
+
lines.push(`| ${category} | ${tools.length} | ${active} |`);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return {
|
|
92
|
+
mimeType: "text/markdown",
|
|
93
|
+
body: lines.join("\n")
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
//#endregion
|
|
99
|
+
export { agentDashboardMarkdownRenderer };
|
|
100
|
+
//# sourceMappingURL=dashboard.markdown.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dashboard.markdown.js","names":[],"sources":["../../../src/ui/renderers/dashboard.markdown.ts"],"sourcesContent":["/**\n * Markdown Renderer for Agent Console Dashboard\n *\n * Provides a comprehensive overview of agents, runs, and tools.\n */\nimport type {\n PresentationSpec,\n PresentationRenderer,\n} from '@contractspec/lib.contracts';\nimport {\n mockListAgentsHandler,\n mockListRunsHandler,\n mockListToolsHandler,\n} from '@contractspec/example.agent-console/handlers';\n\nfunction formatDuration(ms: number): string {\n if (ms < 1000) return `${ms}ms`;\n if (ms < 60000) return `${(ms / 1000).toFixed(1)}s`;\n return `${(ms / 60000).toFixed(1)}m`;\n}\n\n/**\n * Markdown renderer for agent-console.dashboard presentation\n * Only handles AgentConsoleDashboard component\n */\nexport const agentDashboardMarkdownRenderer: PresentationRenderer<{\n mimeType: string;\n body: string;\n}> = {\n target: 'markdown',\n render: async (desc: PresentationSpec) => {\n // Only handle AgentConsoleDashboard\n if (\n desc.source.type !== 'component' ||\n desc.source.componentKey !== 'AgentConsoleDashboard'\n ) {\n throw new Error(\n 'agentDashboardMarkdownRenderer: not AgentConsoleDashboard'\n );\n }\n\n // Fetch all data in parallel\n const [agentsData, runsData, toolsData] = await Promise.all([\n mockListAgentsHandler({\n organizationId: 'demo-org',\n limit: 100,\n }),\n mockListRunsHandler({\n limit: 100,\n }),\n mockListToolsHandler({\n organizationId: 'demo-org',\n limit: 100,\n }),\n ]);\n\n // Calculate stats\n const activeAgents = agentsData.items.filter(\n (a) => a.status === 'ACTIVE'\n ).length;\n const completedRuns = runsData.items.filter(\n (r) => r.status === 'COMPLETED'\n ).length;\n const failedRuns = runsData.items.filter(\n (r) => r.status === 'FAILED'\n ).length;\n const totalTokens = runsData.items.reduce(\n (sum, r) => sum + (r.totalTokens ?? 0),\n 0\n );\n const totalCost = runsData.items.reduce(\n (sum, r) => sum + (r.estimatedCostUsd ?? 0),\n 0\n );\n const activeTools = toolsData.items.filter(\n (t) => t.status === 'ACTIVE'\n ).length;\n\n // Build dashboard markdown\n const lines: string[] = [\n '# Agent Console Dashboard',\n '',\n '> AI agent operations overview',\n '',\n '## Summary',\n '',\n '| Metric | Value |',\n '|--------|-------|',\n `| Total Agents | ${agentsData.total} |`,\n `| Active Agents | ${activeAgents} |`,\n `| Total Runs | ${runsData.total} |`,\n `| Completed Runs | ${completedRuns} |`,\n `| Failed Runs | ${failedRuns} |`,\n `| Total Tokens | ${totalTokens.toLocaleString()} |`,\n `| Total Cost | $${totalCost.toFixed(4)} |`,\n `| Total Tools | ${toolsData.total} |`,\n `| Active Tools | ${activeTools} |`,\n '',\n '## Agents',\n '',\n ];\n\n // Agent list\n if (agentsData.items.length === 0) {\n lines.push('_No agents configured._');\n } else {\n lines.push('| Agent | Model | Status | Description |');\n lines.push('|-------|-------|--------|-------------|');\n for (const agent of agentsData.items.slice(0, 5)) {\n lines.push(\n `| ${agent.name} | ${agent.modelProvider}/${agent.modelName} | ${agent.status} | ${agent.description ?? '-'} |`\n );\n }\n if (agentsData.items.length > 5) {\n lines.push(`| ... | ... | ... | _${agentsData.total - 5} more_ |`);\n }\n }\n\n lines.push('');\n lines.push('## Recent Runs');\n lines.push('');\n\n // Recent runs\n if (runsData.items.length === 0) {\n lines.push('_No runs yet._');\n } else {\n lines.push('| Run ID | Agent | Status | Duration | Tokens | Cost |');\n lines.push('|--------|-------|--------|----------|--------|------|');\n for (const run of runsData.items.slice(0, 5)) {\n lines.push(\n `| ${run.id.slice(-8)} | ${run.agentName} | ${run.status} | ${run.durationMs ? formatDuration(run.durationMs) : '-'} | ${run.totalTokens ?? 0} | $${(run.estimatedCostUsd ?? 0).toFixed(4)} |`\n );\n }\n if (runsData.items.length > 5) {\n lines.push(\n `| ... | ... | ... | ... | ... | _${runsData.total - 5} more_ |`\n );\n }\n }\n\n lines.push('');\n lines.push('## Tools');\n lines.push('');\n\n // Tool categories\n const toolsByCategory: Record<string, typeof toolsData.items> = {};\n for (const tool of toolsData.items) {\n const cat = tool.category;\n if (!toolsByCategory[cat]) toolsByCategory[cat] = [];\n toolsByCategory[cat].push(tool);\n }\n\n if (Object.keys(toolsByCategory).length === 0) {\n lines.push('_No tools registered._');\n } else {\n lines.push('| Category | Tools | Active |');\n lines.push('|----------|-------|--------|');\n for (const [category, tools] of Object.entries(toolsByCategory).sort()) {\n const active = tools.filter((t) => t.status === 'ACTIVE').length;\n lines.push(`| ${category} | ${tools.length} | ${active} |`);\n }\n }\n\n return {\n mimeType: 'text/markdown',\n body: lines.join('\\n'),\n };\n },\n};\n"],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { agentListReactRenderer } from "./agent-list.renderer.js";
|
|
2
|
+
import { agentListMarkdownRenderer } from "./agent-list.markdown.js";
|
|
3
|
+
import { runListMarkdownRenderer } from "./run-list.markdown.js";
|
|
4
|
+
import { toolRegistryMarkdownRenderer } from "./tool-registry.markdown.js";
|
|
5
|
+
import { agentDashboardMarkdownRenderer } from "./dashboard.markdown.js";
|
|
6
|
+
export { agentDashboardMarkdownRenderer, agentListMarkdownRenderer, agentListReactRenderer, runListMarkdownRenderer, toolRegistryMarkdownRenderer };
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { agentListReactRenderer } from "./agent-list.renderer.js";
|
|
2
|
+
import { agentListMarkdownRenderer } from "./agent-list.markdown.js";
|
|
3
|
+
import { runListMarkdownRenderer } from "./run-list.markdown.js";
|
|
4
|
+
import { toolRegistryMarkdownRenderer } from "./tool-registry.markdown.js";
|
|
5
|
+
import { agentDashboardMarkdownRenderer } from "./dashboard.markdown.js";
|
|
6
|
+
|
|
7
|
+
export { agentDashboardMarkdownRenderer, agentListMarkdownRenderer, agentListReactRenderer, runListMarkdownRenderer, toolRegistryMarkdownRenderer };
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { PresentationRenderer } from "@contractspec/lib.contracts";
|
|
2
|
+
|
|
3
|
+
//#region src/ui/renderers/run-list.markdown.d.ts
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Markdown renderer for agent-console.run.list presentation
|
|
7
|
+
* Only handles RunListView component
|
|
8
|
+
*/
|
|
9
|
+
declare const runListMarkdownRenderer: PresentationRenderer<{
|
|
10
|
+
mimeType: string;
|
|
11
|
+
body: string;
|
|
12
|
+
}>;
|
|
13
|
+
//#endregion
|
|
14
|
+
export { runListMarkdownRenderer };
|
|
15
|
+
//# sourceMappingURL=run-list.markdown.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-list.markdown.d.ts","names":[],"sources":["../../../src/ui/renderers/run-list.markdown.ts"],"sourcesContent":[],"mappings":";;;;;;;;cA4Ba,yBAAyB"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { mockListRunsHandler } from "@contractspec/example.agent-console/handlers";
|
|
2
|
+
|
|
3
|
+
//#region src/ui/renderers/run-list.markdown.ts
|
|
4
|
+
function formatDuration(ms) {
|
|
5
|
+
if (ms < 1e3) return `${ms}ms`;
|
|
6
|
+
if (ms < 6e4) return `${(ms / 1e3).toFixed(1)}s`;
|
|
7
|
+
return `${(ms / 6e4).toFixed(1)}m`;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Markdown renderer for agent-console.run.list presentation
|
|
11
|
+
* Only handles RunListView component
|
|
12
|
+
*/
|
|
13
|
+
const runListMarkdownRenderer = {
|
|
14
|
+
target: "markdown",
|
|
15
|
+
render: async (desc) => {
|
|
16
|
+
if (desc.source.type !== "component" || desc.source.componentKey !== "RunListView") throw new Error("runListMarkdownRenderer: not RunListView");
|
|
17
|
+
const data = await mockListRunsHandler({
|
|
18
|
+
organizationId: "demo-org",
|
|
19
|
+
limit: 20,
|
|
20
|
+
offset: 0
|
|
21
|
+
});
|
|
22
|
+
const lines = [
|
|
23
|
+
`# ${desc.meta.description ?? "Agent Runs"}`,
|
|
24
|
+
"",
|
|
25
|
+
`> ${desc.meta.key} v${desc.meta.version}`,
|
|
26
|
+
"",
|
|
27
|
+
`**Total Runs:** ${data.total}`,
|
|
28
|
+
"",
|
|
29
|
+
"## Recent Runs",
|
|
30
|
+
"",
|
|
31
|
+
"| ID | Agent | Status | Duration | Tokens | Cost |",
|
|
32
|
+
"| --- | --- | --- | --- | --- | --- |"
|
|
33
|
+
];
|
|
34
|
+
for (const run of data.items.slice(0, 10)) lines.push(`| ${run.id.slice(-8)} | ${run.agentName} | ${run.status} | ${run.durationMs ? formatDuration(run.durationMs) : "-"} | ${run.totalTokens} | $${run.estimatedCostUsd?.toFixed(4) ?? "-"} |`);
|
|
35
|
+
return {
|
|
36
|
+
mimeType: "text/markdown",
|
|
37
|
+
body: lines.join("\n")
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
//#endregion
|
|
43
|
+
export { runListMarkdownRenderer };
|
|
44
|
+
//# sourceMappingURL=run-list.markdown.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-list.markdown.js","names":[],"sources":["../../../src/ui/renderers/run-list.markdown.ts"],"sourcesContent":["/**\n * Markdown Renderer for Run List Presentation\n *\n * Uses dynamic import for handlers to ensure correct build order.\n */\nimport type {\n PresentationRenderer,\n PresentationSpec,\n} from '@contractspec/lib.contracts';\nimport type { Run } from '../hooks/useRunList';\nimport { mockListRunsHandler } from '@contractspec/example.agent-console/handlers';\n\ninterface RunListOutput {\n items: Run[];\n total: number;\n hasMore: boolean;\n}\n\nfunction formatDuration(ms: number): string {\n if (ms < 1000) return `${ms}ms`;\n if (ms < 60000) return `${(ms / 1000).toFixed(1)}s`;\n return `${(ms / 60000).toFixed(1)}m`;\n}\n\n/**\n * Markdown renderer for agent-console.run.list presentation\n * Only handles RunListView component\n */\nexport const runListMarkdownRenderer: PresentationRenderer<{\n mimeType: string;\n body: string;\n}> = {\n target: 'markdown',\n render: async (desc: PresentationSpec) => {\n // Only handle RunListView\n if (\n desc.source.type !== 'component' ||\n desc.source.componentKey !== 'RunListView'\n ) {\n throw new Error('runListMarkdownRenderer: not RunListView');\n }\n\n // Fetch data using mock handler\n const data = (await mockListRunsHandler({\n organizationId: 'demo-org',\n limit: 20,\n offset: 0,\n })) as RunListOutput;\n\n // Generate markdown\n const lines: string[] = [\n `# ${desc.meta.description ?? 'Agent Runs'}`,\n '',\n `> ${desc.meta.key} v${desc.meta.version}`,\n '',\n `**Total Runs:** ${data.total}`,\n '',\n '## Recent Runs',\n '',\n '| ID | Agent | Status | Duration | Tokens | Cost |',\n '| --- | --- | --- | --- | --- | --- |',\n ];\n\n for (const run of data.items.slice(0, 10)) {\n lines.push(\n `| ${run.id.slice(-8)} | ${run.agentName} | ${run.status} | ${run.durationMs ? formatDuration(run.durationMs) : '-'} | ${run.totalTokens} | $${run.estimatedCostUsd?.toFixed(4) ?? '-'} |`\n );\n }\n\n return {\n mimeType: 'text/markdown',\n body: lines.join('\\n'),\n };\n },\n};\n"],"mappings":";;;AAkBA,SAAS,eAAe,IAAoB;AAC1C,KAAI,KAAK,IAAM,QAAO,GAAG,GAAG;AAC5B,KAAI,KAAK,IAAO,QAAO,IAAI,KAAK,KAAM,QAAQ,EAAE,CAAC;AACjD,QAAO,IAAI,KAAK,KAAO,QAAQ,EAAE,CAAC;;;;;;AAOpC,MAAa,0BAGR;CACH,QAAQ;CACR,QAAQ,OAAO,SAA2B;AAExC,MACE,KAAK,OAAO,SAAS,eACrB,KAAK,OAAO,iBAAiB,cAE7B,OAAM,IAAI,MAAM,2CAA2C;EAI7D,MAAM,OAAQ,MAAM,oBAAoB;GACtC,gBAAgB;GAChB,OAAO;GACP,QAAQ;GACT,CAAC;EAGF,MAAM,QAAkB;GACtB,KAAK,KAAK,KAAK,eAAe;GAC9B;GACA,KAAK,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK;GACjC;GACA,mBAAmB,KAAK;GACxB;GACA;GACA;GACA;GACA;GACD;AAED,OAAK,MAAM,OAAO,KAAK,MAAM,MAAM,GAAG,GAAG,CACvC,OAAM,KACJ,KAAK,IAAI,GAAG,MAAM,GAAG,CAAC,KAAK,IAAI,UAAU,KAAK,IAAI,OAAO,KAAK,IAAI,aAAa,eAAe,IAAI,WAAW,GAAG,IAAI,KAAK,IAAI,YAAY,MAAM,IAAI,kBAAkB,QAAQ,EAAE,IAAI,IAAI,IACxL;AAGH,SAAO;GACL,UAAU;GACV,MAAM,MAAM,KAAK,KAAK;GACvB;;CAEJ"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { PresentationRenderer } from "@contractspec/lib.contracts";
|
|
2
|
+
|
|
3
|
+
//#region src/ui/renderers/tool-registry.markdown.d.ts
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Markdown renderer for agent-console.tool.registry presentation
|
|
7
|
+
* Only handles ToolRegistryView component
|
|
8
|
+
*/
|
|
9
|
+
declare const toolRegistryMarkdownRenderer: PresentationRenderer<{
|
|
10
|
+
mimeType: string;
|
|
11
|
+
body: string;
|
|
12
|
+
}>;
|
|
13
|
+
//#endregion
|
|
14
|
+
export { toolRegistryMarkdownRenderer };
|
|
15
|
+
//# sourceMappingURL=tool-registry.markdown.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-registry.markdown.d.ts","names":[],"sources":["../../../src/ui/renderers/tool-registry.markdown.ts"],"sourcesContent":[],"mappings":";;;;;;;;cAwBa,8BAA8B"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { mockListToolsHandler } from "@contractspec/example.agent-console/handlers";
|
|
2
|
+
|
|
3
|
+
//#region src/ui/renderers/tool-registry.markdown.ts
|
|
4
|
+
/**
|
|
5
|
+
* Markdown renderer for agent-console.tool.registry presentation
|
|
6
|
+
* Only handles ToolRegistryView component
|
|
7
|
+
*/
|
|
8
|
+
const toolRegistryMarkdownRenderer = {
|
|
9
|
+
target: "markdown",
|
|
10
|
+
render: async (desc) => {
|
|
11
|
+
if (desc.source.type !== "component" || desc.source.componentKey !== "ToolRegistryView") throw new Error("toolRegistryMarkdownRenderer: not ToolRegistryView");
|
|
12
|
+
const data = await mockListToolsHandler({
|
|
13
|
+
organizationId: "demo-org",
|
|
14
|
+
limit: 50,
|
|
15
|
+
offset: 0
|
|
16
|
+
});
|
|
17
|
+
const lines = [
|
|
18
|
+
`# ${desc.meta.description ?? "Tool Registry"}`,
|
|
19
|
+
"",
|
|
20
|
+
`> ${desc.meta.key} v${desc.meta.version}`,
|
|
21
|
+
"",
|
|
22
|
+
`**Total Tools:** ${data.total}`,
|
|
23
|
+
""
|
|
24
|
+
];
|
|
25
|
+
const byCategory = {};
|
|
26
|
+
for (const tool of data.items) {
|
|
27
|
+
const cat = tool.category;
|
|
28
|
+
if (!byCategory[cat]) byCategory[cat] = [];
|
|
29
|
+
byCategory[cat].push(tool);
|
|
30
|
+
}
|
|
31
|
+
for (const [category, tools] of Object.entries(byCategory).sort()) {
|
|
32
|
+
lines.push(`## ${category} (${tools.length})`);
|
|
33
|
+
lines.push("");
|
|
34
|
+
for (const tool of tools) {
|
|
35
|
+
const statusIcon = tool.status === "ACTIVE" ? "✅" : tool.status === "DEPRECATED" ? "⚠️" : "❌";
|
|
36
|
+
lines.push(`### ${statusIcon} ${tool.name} v${tool.version}`);
|
|
37
|
+
lines.push("");
|
|
38
|
+
lines.push(`> \`${tool.id}\``);
|
|
39
|
+
lines.push("");
|
|
40
|
+
if (tool.description) {
|
|
41
|
+
lines.push(tool.description);
|
|
42
|
+
lines.push("");
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return {
|
|
47
|
+
mimeType: "text/markdown",
|
|
48
|
+
body: lines.join("\n")
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
//#endregion
|
|
54
|
+
export { toolRegistryMarkdownRenderer };
|
|
55
|
+
//# sourceMappingURL=tool-registry.markdown.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-registry.markdown.js","names":[],"sources":["../../../src/ui/renderers/tool-registry.markdown.ts"],"sourcesContent":["/**\n * Markdown Renderer for Tool Registry Presentation\n *\n * Uses dynamic import for handlers to ensure correct build order.\n */\nimport type {\n PresentationRenderer,\n PresentationSpec,\n} from '@contractspec/lib.contracts';\nimport { mockListToolsHandler } from '@contractspec/example.agent-console/handlers';\n\ninterface ToolItem {\n id: string;\n name: string;\n description?: string;\n version: string;\n category: string;\n status: string;\n}\n\n/**\n * Markdown renderer for agent-console.tool.registry presentation\n * Only handles ToolRegistryView component\n */\nexport const toolRegistryMarkdownRenderer: PresentationRenderer<{\n mimeType: string;\n body: string;\n}> = {\n target: 'markdown',\n render: async (desc: PresentationSpec) => {\n // Only handle ToolRegistryView\n if (\n desc.source.type !== 'component' ||\n desc.source.componentKey !== 'ToolRegistryView'\n ) {\n throw new Error('toolRegistryMarkdownRenderer: not ToolRegistryView');\n }\n\n // Fetch data using mock handler\n const data = await mockListToolsHandler({\n organizationId: 'demo-org',\n limit: 50,\n offset: 0,\n });\n\n // Generate markdown\n const lines: string[] = [\n `# ${desc.meta.description ?? 'Tool Registry'}`,\n '',\n `> ${desc.meta.key} v${desc.meta.version}`,\n '',\n `**Total Tools:** ${data.total}`,\n '',\n ];\n\n // Group by category\n const byCategory: Record<string, ToolItem[]> = {};\n for (const tool of data.items as ToolItem[]) {\n const cat = tool.category;\n if (!byCategory[cat]) byCategory[cat] = [];\n byCategory[cat].push(tool);\n }\n\n for (const [category, tools] of Object.entries(byCategory).sort()) {\n lines.push(`## ${category} (${tools.length})`);\n lines.push('');\n\n for (const tool of tools) {\n const statusIcon =\n tool.status === 'ACTIVE'\n ? '✅'\n : tool.status === 'DEPRECATED'\n ? '⚠️'\n : '❌';\n lines.push(`### ${statusIcon} ${tool.name} v${tool.version}`);\n lines.push('');\n lines.push(`> \\`${tool.id}\\``);\n lines.push('');\n if (tool.description) {\n lines.push(tool.description);\n lines.push('');\n }\n }\n }\n\n return {\n mimeType: 'text/markdown',\n body: lines.join('\\n'),\n };\n },\n};\n"],"mappings":";;;;;;;AAwBA,MAAa,+BAGR;CACH,QAAQ;CACR,QAAQ,OAAO,SAA2B;AAExC,MACE,KAAK,OAAO,SAAS,eACrB,KAAK,OAAO,iBAAiB,mBAE7B,OAAM,IAAI,MAAM,qDAAqD;EAIvE,MAAM,OAAO,MAAM,qBAAqB;GACtC,gBAAgB;GAChB,OAAO;GACP,QAAQ;GACT,CAAC;EAGF,MAAM,QAAkB;GACtB,KAAK,KAAK,KAAK,eAAe;GAC9B;GACA,KAAK,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK;GACjC;GACA,oBAAoB,KAAK;GACzB;GACD;EAGD,MAAM,aAAyC,EAAE;AACjD,OAAK,MAAM,QAAQ,KAAK,OAAqB;GAC3C,MAAM,MAAM,KAAK;AACjB,OAAI,CAAC,WAAW,KAAM,YAAW,OAAO,EAAE;AAC1C,cAAW,KAAK,KAAK,KAAK;;AAG5B,OAAK,MAAM,CAAC,UAAU,UAAU,OAAO,QAAQ,WAAW,CAAC,MAAM,EAAE;AACjE,SAAM,KAAK,MAAM,SAAS,IAAI,MAAM,OAAO,GAAG;AAC9C,SAAM,KAAK,GAAG;AAEd,QAAK,MAAM,QAAQ,OAAO;IACxB,MAAM,aACJ,KAAK,WAAW,WACZ,MACA,KAAK,WAAW,eACd,OACA;AACR,UAAM,KAAK,OAAO,WAAW,GAAG,KAAK,KAAK,IAAI,KAAK,UAAU;AAC7D,UAAM,KAAK,GAAG;AACd,UAAM,KAAK,OAAO,KAAK,GAAG,IAAI;AAC9B,UAAM,KAAK,GAAG;AACd,QAAI,KAAK,aAAa;AACpB,WAAM,KAAK,KAAK,YAAY;AAC5B,WAAM,KAAK,GAAG;;;;AAKpB,SAAO;GACL,UAAU;GACV,MAAM,MAAM,KAAK,KAAK;GACvB;;CAEJ"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AgentListView.d.ts","names":[],"sources":["../../../src/ui/views/AgentListView.tsx"],"sourcesContent":[],"mappings":";;;iBAoCgB,aAAA,CAAA,GAAa,kBAAA,CAAA,GAAA,CAAA"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { useAgentList } from "../hooks/useAgentList.js";
|
|
4
|
+
import { Button, EmptyState, EntityCard, ErrorState, LoaderBlock, StatCard, StatCardGroup, StatusChip } from "@contractspec/lib.design-system";
|
|
5
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
6
|
+
|
|
7
|
+
//#region src/ui/views/AgentListView.tsx
|
|
8
|
+
/**
|
|
9
|
+
* Agent List View
|
|
10
|
+
*
|
|
11
|
+
* Displays a list of AI agents with their status and basic info.
|
|
12
|
+
* Uses design-system components with correct props.
|
|
13
|
+
*/
|
|
14
|
+
function getStatusTone(status) {
|
|
15
|
+
switch (status) {
|
|
16
|
+
case "ACTIVE": return "success";
|
|
17
|
+
case "PAUSED":
|
|
18
|
+
case "DRAFT": return "warning";
|
|
19
|
+
case "ARCHIVED": return "neutral";
|
|
20
|
+
default: return "neutral";
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
function AgentListView() {
|
|
24
|
+
const { data, loading, error, stats, refetch } = useAgentList();
|
|
25
|
+
if (loading && !data) return /* @__PURE__ */ jsx(LoaderBlock, { label: "Loading agents..." });
|
|
26
|
+
if (error) return /* @__PURE__ */ jsx(ErrorState, {
|
|
27
|
+
title: "Failed to load agents",
|
|
28
|
+
description: error.message,
|
|
29
|
+
onRetry: refetch,
|
|
30
|
+
retryLabel: "Retry"
|
|
31
|
+
});
|
|
32
|
+
if (!data?.items.length) return /* @__PURE__ */ jsx(EmptyState, {
|
|
33
|
+
title: "No agents yet",
|
|
34
|
+
description: "Create your first AI agent to get started."
|
|
35
|
+
});
|
|
36
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
37
|
+
className: "space-y-6",
|
|
38
|
+
children: [
|
|
39
|
+
stats && /* @__PURE__ */ jsxs(StatCardGroup, { children: [
|
|
40
|
+
/* @__PURE__ */ jsx(StatCard, {
|
|
41
|
+
label: "Total Agents",
|
|
42
|
+
value: stats.total
|
|
43
|
+
}),
|
|
44
|
+
/* @__PURE__ */ jsx(StatCard, {
|
|
45
|
+
label: "Active",
|
|
46
|
+
value: stats.active
|
|
47
|
+
}),
|
|
48
|
+
/* @__PURE__ */ jsx(StatCard, {
|
|
49
|
+
label: "Paused",
|
|
50
|
+
value: stats.paused
|
|
51
|
+
}),
|
|
52
|
+
/* @__PURE__ */ jsx(StatCard, {
|
|
53
|
+
label: "Draft",
|
|
54
|
+
value: stats.draft
|
|
55
|
+
})
|
|
56
|
+
] }),
|
|
57
|
+
/* @__PURE__ */ jsxs("div", {
|
|
58
|
+
className: "flex items-center justify-between",
|
|
59
|
+
children: [/* @__PURE__ */ jsx("h3", {
|
|
60
|
+
className: "text-lg font-semibold",
|
|
61
|
+
children: "Agents"
|
|
62
|
+
}), /* @__PURE__ */ jsx(Button, {
|
|
63
|
+
onPress: () => alert("Create Agent clicked!"),
|
|
64
|
+
children: "Create Agent"
|
|
65
|
+
})]
|
|
66
|
+
}),
|
|
67
|
+
/* @__PURE__ */ jsx("div", {
|
|
68
|
+
className: "grid gap-4 sm:grid-cols-2 lg:grid-cols-3",
|
|
69
|
+
children: data.items.map((agent) => /* @__PURE__ */ jsx(EntityCard, {
|
|
70
|
+
cardTitle: agent.name,
|
|
71
|
+
cardSubtitle: agent.modelName,
|
|
72
|
+
meta: /* @__PURE__ */ jsx("p", {
|
|
73
|
+
className: "text-muted-foreground text-sm",
|
|
74
|
+
children: agent.description
|
|
75
|
+
}),
|
|
76
|
+
chips: /* @__PURE__ */ jsx(StatusChip, {
|
|
77
|
+
tone: getStatusTone(agent.status),
|
|
78
|
+
label: agent.status
|
|
79
|
+
}),
|
|
80
|
+
footer: /* @__PURE__ */ jsxs("span", {
|
|
81
|
+
className: "text-muted-foreground text-xs",
|
|
82
|
+
children: ["Created ", agent.createdAt.toLocaleDateString()]
|
|
83
|
+
}),
|
|
84
|
+
onClick: () => alert(`View agent: ${agent.name}`)
|
|
85
|
+
}, agent.id))
|
|
86
|
+
})
|
|
87
|
+
]
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
//#endregion
|
|
92
|
+
export { AgentListView };
|
|
93
|
+
//# sourceMappingURL=AgentListView.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AgentListView.js","names":[],"sources":["../../../src/ui/views/AgentListView.tsx"],"sourcesContent":["'use client';\n\n/**\n * Agent List View\n *\n * Displays a list of AI agents with their status and basic info.\n * Uses design-system components with correct props.\n */\nimport {\n Button,\n StatCard,\n StatCardGroup,\n EntityCard,\n StatusChip,\n LoaderBlock,\n ErrorState,\n EmptyState,\n} from '@contractspec/lib.design-system';\nimport { useAgentList, type Agent } from '../hooks/useAgentList';\n\nfunction getStatusTone(\n status: Agent['status']\n): 'success' | 'warning' | 'neutral' {\n switch (status) {\n case 'ACTIVE':\n return 'success';\n case 'PAUSED':\n case 'DRAFT':\n return 'warning';\n case 'ARCHIVED':\n return 'neutral';\n default:\n return 'neutral';\n }\n}\n\nexport function AgentListView() {\n const { data, loading, error, stats, refetch } = useAgentList();\n\n if (loading && !data) {\n return <LoaderBlock label=\"Loading agents...\" />;\n }\n\n if (error) {\n return (\n <ErrorState\n title=\"Failed to load agents\"\n description={error.message}\n onRetry={refetch}\n retryLabel=\"Retry\"\n />\n );\n }\n\n if (!data?.items.length) {\n return (\n <EmptyState\n title=\"No agents yet\"\n description=\"Create your first AI agent to get started.\"\n />\n );\n }\n\n return (\n <div className=\"space-y-6\">\n {/* Stats */}\n {stats && (\n <StatCardGroup>\n <StatCard label=\"Total Agents\" value={stats.total} />\n <StatCard label=\"Active\" value={stats.active} />\n <StatCard label=\"Paused\" value={stats.paused} />\n <StatCard label=\"Draft\" value={stats.draft} />\n </StatCardGroup>\n )}\n\n {/* Actions */}\n <div className=\"flex items-center justify-between\">\n <h3 className=\"text-lg font-semibold\">Agents</h3>\n <Button onPress={() => alert('Create Agent clicked!')}>\n Create Agent\n </Button>\n </div>\n\n {/* Agent List */}\n <div className=\"grid gap-4 sm:grid-cols-2 lg:grid-cols-3\">\n {data.items.map((agent) => (\n <EntityCard\n key={agent.id}\n cardTitle={agent.name}\n cardSubtitle={agent.modelName}\n meta={\n <p className=\"text-muted-foreground text-sm\">\n {agent.description}\n </p>\n }\n chips={\n <StatusChip\n tone={getStatusTone(agent.status)}\n label={agent.status}\n />\n }\n footer={\n <span className=\"text-muted-foreground text-xs\">\n Created {agent.createdAt.toLocaleDateString()}\n </span>\n }\n onClick={() => alert(`View agent: ${agent.name}`)}\n />\n ))}\n </div>\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;;AAoBA,SAAS,cACP,QACmC;AACnC,SAAQ,QAAR;EACE,KAAK,SACH,QAAO;EACT,KAAK;EACL,KAAK,QACH,QAAO;EACT,KAAK,WACH,QAAO;EACT,QACE,QAAO;;;AAIb,SAAgB,gBAAgB;CAC9B,MAAM,EAAE,MAAM,SAAS,OAAO,OAAO,YAAY,cAAc;AAE/D,KAAI,WAAW,CAAC,KACd,QAAO,oBAAC,eAAY,OAAM,sBAAsB;AAGlD,KAAI,MACF,QACE,oBAAC;EACC,OAAM;EACN,aAAa,MAAM;EACnB,SAAS;EACT,YAAW;GACX;AAIN,KAAI,CAAC,MAAM,MAAM,OACf,QACE,oBAAC;EACC,OAAM;EACN,aAAY;GACZ;AAIN,QACE,qBAAC;EAAI,WAAU;;GAEZ,SACC,qBAAC;IACC,oBAAC;KAAS,OAAM;KAAe,OAAO,MAAM;MAAS;IACrD,oBAAC;KAAS,OAAM;KAAS,OAAO,MAAM;MAAU;IAChD,oBAAC;KAAS,OAAM;KAAS,OAAO,MAAM;MAAU;IAChD,oBAAC;KAAS,OAAM;KAAQ,OAAO,MAAM;MAAS;OAChC;GAIlB,qBAAC;IAAI,WAAU;eACb,oBAAC;KAAG,WAAU;eAAwB;MAAW,EACjD,oBAAC;KAAO,eAAe,MAAM,wBAAwB;eAAE;MAE9C;KACL;GAGN,oBAAC;IAAI,WAAU;cACZ,KAAK,MAAM,KAAK,UACf,oBAAC;KAEC,WAAW,MAAM;KACjB,cAAc,MAAM;KACpB,MACE,oBAAC;MAAE,WAAU;gBACV,MAAM;OACL;KAEN,OACE,oBAAC;MACC,MAAM,cAAc,MAAM,OAAO;MACjC,OAAO,MAAM;OACb;KAEJ,QACE,qBAAC;MAAK,WAAU;iBAAgC,YACrC,MAAM,UAAU,oBAAoB;OACxC;KAET,eAAe,MAAM,eAAe,MAAM,OAAO;OAnB5C,MAAM,GAoBX,CACF;KACE;;GACF"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import * as react_jsx_runtime0 from "react/jsx-runtime";
|
|
2
|
+
|
|
3
|
+
//#region src/ui/views/RunListView.d.ts
|
|
4
|
+
interface RunListViewProps {
|
|
5
|
+
agentId?: string;
|
|
6
|
+
onRunClick?: (runId: string) => void;
|
|
7
|
+
}
|
|
8
|
+
declare function RunListView({
|
|
9
|
+
agentId,
|
|
10
|
+
onRunClick
|
|
11
|
+
}: RunListViewProps): react_jsx_runtime0.JSX.Element;
|
|
12
|
+
//#endregion
|
|
13
|
+
export { RunListView };
|
|
14
|
+
//# sourceMappingURL=RunListView.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RunListView.d.ts","names":[],"sources":["../../../src/ui/views/RunListView.tsx"],"sourcesContent":[],"mappings":";;;UAeU,gBAAA;;;AAyC2D;AAArD,iBAAA,WAAA,CAAW;EAAA,OAAA;EAAA;AAAA,CAAA,EAA0B,gBAA1B,CAAA,EAA0C,kBAAA,CAAA,GAAA,CAAA,OAA1C"}
|