@contractspec/lib.ai-agent 0.0.0-canary-20260113162409
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/LICENSE +21 -0
- package/README.md +49 -0
- package/dist/_virtual/rolldown_runtime.js +8 -0
- package/dist/agent/agent-factory.d.ts +104 -0
- package/dist/agent/agent-factory.d.ts.map +1 -0
- package/dist/agent/agent-factory.js +103 -0
- package/dist/agent/agent-factory.js.map +1 -0
- package/dist/agent/contract-spec-agent.d.ts +75 -0
- package/dist/agent/contract-spec-agent.d.ts.map +1 -0
- package/dist/agent/contract-spec-agent.js +148 -0
- package/dist/agent/contract-spec-agent.js.map +1 -0
- package/dist/agent/index.d.ts +3 -0
- package/dist/agent/index.js +4 -0
- package/dist/agent/unified-agent.d.ts +131 -0
- package/dist/agent/unified-agent.d.ts.map +1 -0
- package/dist/agent/unified-agent.js +267 -0
- package/dist/agent/unified-agent.js.map +1 -0
- package/dist/approval/index.d.ts +2 -0
- package/dist/approval/index.js +3 -0
- package/dist/approval/workflow.d.ts +156 -0
- package/dist/approval/workflow.d.ts.map +1 -0
- package/dist/approval/workflow.js +160 -0
- package/dist/approval/workflow.js.map +1 -0
- package/dist/exporters/claude-agent-exporter.d.ts +64 -0
- package/dist/exporters/claude-agent-exporter.d.ts.map +1 -0
- package/dist/exporters/claude-agent-exporter.js +210 -0
- package/dist/exporters/claude-agent-exporter.js.map +1 -0
- package/dist/exporters/index.d.ts +4 -0
- package/dist/exporters/index.js +4 -0
- package/dist/exporters/opencode-exporter.d.ts +64 -0
- package/dist/exporters/opencode-exporter.d.ts.map +1 -0
- package/dist/exporters/opencode-exporter.js +200 -0
- package/dist/exporters/opencode-exporter.js.map +1 -0
- package/dist/exporters/types.d.ts +239 -0
- package/dist/exporters/types.d.ts.map +1 -0
- package/dist/exporters/types.js +0 -0
- package/dist/index.d.ts +37 -0
- package/dist/index.js +31 -0
- package/dist/interop/index.d.ts +4 -0
- package/dist/interop/index.js +4 -0
- package/dist/interop/spec-consumer.d.ts +81 -0
- package/dist/interop/spec-consumer.d.ts.map +1 -0
- package/dist/interop/spec-consumer.js +287 -0
- package/dist/interop/spec-consumer.js.map +1 -0
- package/dist/interop/tool-consumer.d.ts +68 -0
- package/dist/interop/tool-consumer.d.ts.map +1 -0
- package/dist/interop/tool-consumer.js +220 -0
- package/dist/interop/tool-consumer.js.map +1 -0
- package/dist/interop/types.d.ts +262 -0
- package/dist/interop/types.d.ts.map +1 -0
- package/dist/interop/types.js +0 -0
- package/dist/knowledge/index.d.ts +2 -0
- package/dist/knowledge/index.js +3 -0
- package/dist/knowledge/injector.d.ts +38 -0
- package/dist/knowledge/injector.d.ts.map +1 -0
- package/dist/knowledge/injector.js +58 -0
- package/dist/knowledge/injector.js.map +1 -0
- package/dist/memory/in-memory.d.ts +22 -0
- package/dist/memory/in-memory.d.ts.map +1 -0
- package/dist/memory/in-memory.js +48 -0
- package/dist/memory/in-memory.js.map +1 -0
- package/dist/memory/index.d.ts +3 -0
- package/dist/memory/index.js +4 -0
- package/dist/memory/manager.d.ts +42 -0
- package/dist/memory/manager.d.ts.map +1 -0
- package/dist/memory/manager.js +80 -0
- package/dist/memory/manager.js.map +1 -0
- package/dist/providers/claude-agent-sdk/adapter.d.ts +58 -0
- package/dist/providers/claude-agent-sdk/adapter.d.ts.map +1 -0
- package/dist/providers/claude-agent-sdk/adapter.js +306 -0
- package/dist/providers/claude-agent-sdk/adapter.js.map +1 -0
- package/dist/providers/claude-agent-sdk/index.d.ts +4 -0
- package/dist/providers/claude-agent-sdk/index.js +5 -0
- package/dist/providers/claude-agent-sdk/session-bridge.d.ts +101 -0
- package/dist/providers/claude-agent-sdk/session-bridge.d.ts.map +1 -0
- package/dist/providers/claude-agent-sdk/session-bridge.js +158 -0
- package/dist/providers/claude-agent-sdk/session-bridge.js.map +1 -0
- package/dist/providers/claude-agent-sdk/tool-bridge.d.ts +110 -0
- package/dist/providers/claude-agent-sdk/tool-bridge.d.ts.map +1 -0
- package/dist/providers/claude-agent-sdk/tool-bridge.js +122 -0
- package/dist/providers/claude-agent-sdk/tool-bridge.js.map +1 -0
- package/dist/providers/index.d.ts +7 -0
- package/dist/providers/index.js +8 -0
- package/dist/providers/opencode-sdk/adapter.d.ts +54 -0
- package/dist/providers/opencode-sdk/adapter.d.ts.map +1 -0
- package/dist/providers/opencode-sdk/adapter.js +276 -0
- package/dist/providers/opencode-sdk/adapter.js.map +1 -0
- package/dist/providers/opencode-sdk/agent-bridge.d.ts +94 -0
- package/dist/providers/opencode-sdk/agent-bridge.d.ts.map +1 -0
- package/dist/providers/opencode-sdk/agent-bridge.js +165 -0
- package/dist/providers/opencode-sdk/agent-bridge.js.map +1 -0
- package/dist/providers/opencode-sdk/index.d.ts +4 -0
- package/dist/providers/opencode-sdk/index.js +5 -0
- package/dist/providers/opencode-sdk/tool-bridge.d.ts +81 -0
- package/dist/providers/opencode-sdk/tool-bridge.d.ts.map +1 -0
- package/dist/providers/opencode-sdk/tool-bridge.js +127 -0
- package/dist/providers/opencode-sdk/tool-bridge.js.map +1 -0
- package/dist/providers/registry.d.ts +22 -0
- package/dist/providers/registry.d.ts.map +1 -0
- package/dist/providers/registry.js +52 -0
- package/dist/providers/registry.js.map +1 -0
- package/dist/providers/types.d.ts +243 -0
- package/dist/providers/types.d.ts.map +1 -0
- package/dist/providers/types.js +44 -0
- package/dist/providers/types.js.map +1 -0
- package/dist/schema/index.d.ts +3 -0
- package/dist/schema/index.js +4 -0
- package/dist/schema/json-schema-to-zod.d.ts +55 -0
- package/dist/schema/json-schema-to-zod.d.ts.map +1 -0
- package/dist/schema/json-schema-to-zod.js +124 -0
- package/dist/schema/json-schema-to-zod.js.map +1 -0
- package/dist/schema/schema-output.d.ts +77 -0
- package/dist/schema/schema-output.d.ts.map +1 -0
- package/dist/schema/schema-output.js +65 -0
- package/dist/schema/schema-output.js.map +1 -0
- package/dist/session/index.d.ts +2 -0
- package/dist/session/index.js +3 -0
- package/dist/session/store.d.ts +74 -0
- package/dist/session/store.d.ts.map +1 -0
- package/dist/session/store.js +79 -0
- package/dist/session/store.js.map +1 -0
- package/dist/spec/index.d.ts +3 -0
- package/dist/spec/index.js +4 -0
- package/dist/spec/registry.d.ts +47 -0
- package/dist/spec/registry.d.ts.map +1 -0
- package/dist/spec/registry.js +65 -0
- package/dist/spec/registry.js.map +1 -0
- package/dist/spec/spec.d.ts +127 -0
- package/dist/spec/spec.d.ts.map +1 -0
- package/dist/spec/spec.js +30 -0
- package/dist/spec/spec.js.map +1 -0
- package/dist/telemetry/adapter.d.ts +73 -0
- package/dist/telemetry/adapter.d.ts.map +1 -0
- package/dist/telemetry/adapter.js +103 -0
- package/dist/telemetry/adapter.js.map +1 -0
- package/dist/telemetry/index.d.ts +2 -0
- package/dist/telemetry/index.js +3 -0
- package/dist/tools/index.d.ts +5 -0
- package/dist/tools/index.js +6 -0
- package/dist/tools/knowledge-tool.d.ts +21 -0
- package/dist/tools/knowledge-tool.d.ts.map +1 -0
- package/dist/tools/knowledge-tool.js +54 -0
- package/dist/tools/knowledge-tool.js.map +1 -0
- package/dist/tools/mcp-client.d.ts +59 -0
- package/dist/tools/mcp-client.d.ts.map +1 -0
- package/dist/tools/mcp-client.js +58 -0
- package/dist/tools/mcp-client.js.map +1 -0
- package/dist/tools/mcp-server.d.ts +46 -0
- package/dist/tools/mcp-server.d.ts.map +1 -0
- package/dist/tools/mcp-server.js +69 -0
- package/dist/tools/mcp-server.js.map +1 -0
- package/dist/tools/tool-adapter.d.ts +50 -0
- package/dist/tools/tool-adapter.d.ts.map +1 -0
- package/dist/tools/tool-adapter.js +80 -0
- package/dist/tools/tool-adapter.js.map +1 -0
- package/dist/types.d.ts +146 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +0 -0
- package/package.json +155 -0
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { AgentSpec } from "../spec/spec.js";
|
|
2
|
+
import { ContractSpecAgent } from "../agent/contract-spec-agent.js";
|
|
3
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
4
|
+
|
|
5
|
+
//#region src/tools/mcp-server.d.ts
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Generate an MCP server that exposes a ContractSpec agent as a tool.
|
|
9
|
+
*
|
|
10
|
+
* This allows other AI agents (e.g., Claude Desktop, Cursor) to use
|
|
11
|
+
* your ContractSpec agents as tools, enabling agent-to-agent composition.
|
|
12
|
+
*
|
|
13
|
+
* @param agent - The ContractSpec agent to expose
|
|
14
|
+
* @param spec - The agent specification
|
|
15
|
+
* @returns MCP Server instance
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```typescript
|
|
19
|
+
* const server = agentToMcpServer(myAgent, myAgentSpec);
|
|
20
|
+
*
|
|
21
|
+
* // Run via stdio transport
|
|
22
|
+
* const transport = new StdioServerTransport();
|
|
23
|
+
* await server.connect(transport);
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
declare function agentToMcpServer(agent: ContractSpecAgent, spec: AgentSpec): McpServer;
|
|
27
|
+
/**
|
|
28
|
+
* Configuration for running an agent as an MCP server.
|
|
29
|
+
*/
|
|
30
|
+
interface AgentMcpServerConfig {
|
|
31
|
+
/** The agent to expose */
|
|
32
|
+
agent: ContractSpecAgent;
|
|
33
|
+
/** The agent specification */
|
|
34
|
+
spec: AgentSpec;
|
|
35
|
+
/** Optional server name override */
|
|
36
|
+
name?: string;
|
|
37
|
+
/** Optional version override */
|
|
38
|
+
version?: string;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Create an MCP server from configuration.
|
|
42
|
+
*/
|
|
43
|
+
declare function createAgentMcpServer(config: AgentMcpServerConfig): McpServer;
|
|
44
|
+
//#endregion
|
|
45
|
+
export { AgentMcpServerConfig, agentToMcpServer, createAgentMcpServer };
|
|
46
|
+
//# sourceMappingURL=mcp-server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-server.d.ts","names":[],"sources":["../../src/tools/mcp-server.ts"],"sourcesContent":[],"mappings":";;;;;;;;AAyBA;;;;;AA+EA;AAcA;;;;;;;;;;;iBA7FgB,gBAAA,QACP,yBACD,YACL;;;;UA4Ec,oBAAA;;SAER;;QAED;;;;;;;;;iBAUQ,oBAAA,SAA6B,uBAAuB"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { jsonSchemaToZodSafe } from "../schema/json-schema-to-zod.js";
|
|
2
|
+
import * as z$1 from "zod";
|
|
3
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
4
|
+
|
|
5
|
+
//#region src/tools/mcp-server.ts
|
|
6
|
+
/**
|
|
7
|
+
* Generate an MCP server that exposes a ContractSpec agent as a tool.
|
|
8
|
+
*
|
|
9
|
+
* This allows other AI agents (e.g., Claude Desktop, Cursor) to use
|
|
10
|
+
* your ContractSpec agents as tools, enabling agent-to-agent composition.
|
|
11
|
+
*
|
|
12
|
+
* @param agent - The ContractSpec agent to expose
|
|
13
|
+
* @param spec - The agent specification
|
|
14
|
+
* @returns MCP Server instance
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```typescript
|
|
18
|
+
* const server = agentToMcpServer(myAgent, myAgentSpec);
|
|
19
|
+
*
|
|
20
|
+
* // Run via stdio transport
|
|
21
|
+
* const transport = new StdioServerTransport();
|
|
22
|
+
* await server.connect(transport);
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
function agentToMcpServer(agent, spec) {
|
|
26
|
+
const server = new McpServer({
|
|
27
|
+
name: spec.meta.key,
|
|
28
|
+
version: `${spec.meta.version}`
|
|
29
|
+
});
|
|
30
|
+
server.registerTool(spec.meta.key, {
|
|
31
|
+
description: spec.description ?? `Interact with ${spec.meta.key} agent`,
|
|
32
|
+
inputSchema: z$1.object({
|
|
33
|
+
message: z$1.string().describe("The message or query to send to the agent"),
|
|
34
|
+
sessionId: z$1.string().optional().describe("Optional session ID to continue a conversation")
|
|
35
|
+
})
|
|
36
|
+
}, async (args) => {
|
|
37
|
+
const { message, sessionId } = args;
|
|
38
|
+
return { content: [{
|
|
39
|
+
type: "text",
|
|
40
|
+
text: (await agent.generate({
|
|
41
|
+
prompt: message,
|
|
42
|
+
options: { sessionId }
|
|
43
|
+
})).text
|
|
44
|
+
}] };
|
|
45
|
+
});
|
|
46
|
+
for (const toolConfig of spec.tools) {
|
|
47
|
+
const inputSchema = toolConfig.schema ? jsonSchemaToZodSafe(toolConfig.schema) : z$1.object({});
|
|
48
|
+
server.registerTool(`${spec.meta.key}.${toolConfig.name}`, {
|
|
49
|
+
description: toolConfig.description ?? `Execute ${toolConfig.name} tool`,
|
|
50
|
+
inputSchema
|
|
51
|
+
}, async (args) => {
|
|
52
|
+
return { content: [{
|
|
53
|
+
type: "text",
|
|
54
|
+
text: (await agent.generate({ prompt: `Execute the ${toolConfig.name} tool with the following arguments: ${JSON.stringify(args)}` })).text
|
|
55
|
+
}] };
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
return server;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Create an MCP server from configuration.
|
|
62
|
+
*/
|
|
63
|
+
function createAgentMcpServer(config) {
|
|
64
|
+
return agentToMcpServer(config.agent, config.spec);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
//#endregion
|
|
68
|
+
export { agentToMcpServer, createAgentMcpServer };
|
|
69
|
+
//# sourceMappingURL=mcp-server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-server.js","names":["z"],"sources":["../../src/tools/mcp-server.ts"],"sourcesContent":["import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport * as z from 'zod';\nimport type { AgentSpec } from '../spec/spec';\nimport type { ContractSpecAgent } from '../agent/contract-spec-agent';\nimport { jsonSchemaToZodSafe } from '../schema/json-schema-to-zod';\n\n/**\n * Generate an MCP server that exposes a ContractSpec agent as a tool.\n *\n * This allows other AI agents (e.g., Claude Desktop, Cursor) to use\n * your ContractSpec agents as tools, enabling agent-to-agent composition.\n *\n * @param agent - The ContractSpec agent to expose\n * @param spec - The agent specification\n * @returns MCP Server instance\n *\n * @example\n * ```typescript\n * const server = agentToMcpServer(myAgent, myAgentSpec);\n *\n * // Run via stdio transport\n * const transport = new StdioServerTransport();\n * await server.connect(transport);\n * ```\n */\nexport function agentToMcpServer(\n agent: ContractSpecAgent,\n spec: AgentSpec\n): McpServer {\n const server = new McpServer({\n name: spec.meta.key,\n version: `${spec.meta.version}`,\n });\n\n // Expose agent as a conversational tool using registerTool\n server.registerTool(\n spec.meta.key,\n {\n description: spec.description ?? `Interact with ${spec.meta.key} agent`,\n inputSchema: z.object({\n message: z\n .string()\n .describe('The message or query to send to the agent'),\n sessionId: z\n .string()\n .optional()\n .describe('Optional session ID to continue a conversation'),\n }),\n },\n async (args) => {\n const { message, sessionId } = args;\n\n const result = await agent.generate({\n prompt: message,\n options: { sessionId },\n });\n\n return {\n content: [\n {\n type: 'text',\n text: result.text,\n },\n ],\n };\n }\n );\n\n // Expose individual tools from the agent spec\n for (const toolConfig of spec.tools) {\n const inputSchema = toolConfig.schema\n ? jsonSchemaToZodSafe(toolConfig.schema)\n : z.object({});\n\n server.registerTool(\n `${spec.meta.key}.${toolConfig.name}`,\n {\n description:\n toolConfig.description ?? `Execute ${toolConfig.name} tool`,\n inputSchema,\n },\n async (args) => {\n const result = await agent.generate({\n prompt: `Execute the ${toolConfig.name} tool with the following arguments: ${JSON.stringify(args)}`,\n });\n\n return {\n content: [\n {\n type: 'text',\n text: result.text,\n },\n ],\n };\n }\n );\n }\n\n return server;\n}\n\n/**\n * Configuration for running an agent as an MCP server.\n */\nexport interface AgentMcpServerConfig {\n /** The agent to expose */\n agent: ContractSpecAgent;\n /** The agent specification */\n spec: AgentSpec;\n /** Optional server name override */\n name?: string;\n /** Optional version override */\n version?: string;\n}\n\n/**\n * Create an MCP server from configuration.\n */\nexport function createAgentMcpServer(config: AgentMcpServerConfig): McpServer {\n return agentToMcpServer(config.agent, config.spec);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAyBA,SAAgB,iBACd,OACA,MACW;CACX,MAAM,SAAS,IAAI,UAAU;EAC3B,MAAM,KAAK,KAAK;EAChB,SAAS,GAAG,KAAK,KAAK;EACvB,CAAC;AAGF,QAAO,aACL,KAAK,KAAK,KACV;EACE,aAAa,KAAK,eAAe,iBAAiB,KAAK,KAAK,IAAI;EAChE,aAAaA,IAAE,OAAO;GACpB,SAASA,IACN,QAAQ,CACR,SAAS,4CAA4C;GACxD,WAAWA,IACR,QAAQ,CACR,UAAU,CACV,SAAS,iDAAiD;GAC9D,CAAC;EACH,EACD,OAAO,SAAS;EACd,MAAM,EAAE,SAAS,cAAc;AAO/B,SAAO,EACL,SAAS,CACP;GACE,MAAM;GACN,OATS,MAAM,MAAM,SAAS;IAClC,QAAQ;IACR,SAAS,EAAE,WAAW;IACvB,CAAC,EAMiB;GACd,CACF,EACF;GAEJ;AAGD,MAAK,MAAM,cAAc,KAAK,OAAO;EACnC,MAAM,cAAc,WAAW,SAC3B,oBAAoB,WAAW,OAAO,GACtCA,IAAE,OAAO,EAAE,CAAC;AAEhB,SAAO,aACL,GAAG,KAAK,KAAK,IAAI,GAAG,WAAW,QAC/B;GACE,aACE,WAAW,eAAe,WAAW,WAAW,KAAK;GACvD;GACD,EACD,OAAO,SAAS;AAKd,UAAO,EACL,SAAS,CACP;IACE,MAAM;IACN,OARS,MAAM,MAAM,SAAS,EAClC,QAAQ,eAAe,WAAW,KAAK,sCAAsC,KAAK,UAAU,KAAK,IAClG,CAAC,EAMiB;IACd,CACF,EACF;IAEJ;;AAGH,QAAO;;;;;AAoBT,SAAgB,qBAAqB,QAAyC;AAC5E,QAAO,iBAAiB,OAAO,OAAO,OAAO,KAAK"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { AgentToolConfig } from "../spec/spec.js";
|
|
2
|
+
import { ToolExecutionContext, ToolHandler } from "../types.js";
|
|
3
|
+
import { Tool } from "ai";
|
|
4
|
+
|
|
5
|
+
//#region src/tools/tool-adapter.d.ts
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Convert ContractSpec AgentToolConfig to AI SDK CoreTool.
|
|
9
|
+
*
|
|
10
|
+
* @param specTool - The tool configuration from AgentSpec
|
|
11
|
+
* @param handler - The handler function for the tool
|
|
12
|
+
* @param context - Partial context to inject into handler calls
|
|
13
|
+
* @returns AI SDK CoreTool
|
|
14
|
+
*/
|
|
15
|
+
declare function specToolToAISDKTool(specTool: AgentToolConfig, handler: ToolHandler, context?: Partial<ToolExecutionContext>): Tool<any, any>;
|
|
16
|
+
/**
|
|
17
|
+
* Convert multiple ContractSpec tool configs to AI SDK tools.
|
|
18
|
+
*
|
|
19
|
+
* @param specTools - Array of tool configurations
|
|
20
|
+
* @param handlers - Map of tool name to handler function
|
|
21
|
+
* @param context - Partial context to inject into handler calls
|
|
22
|
+
* @returns Record of AI SDK tools keyed by name
|
|
23
|
+
*/
|
|
24
|
+
declare function specToolsToAISDKTools(specTools: AgentToolConfig[], handlers: Map<string, ToolHandler>, context?: Partial<ToolExecutionContext>): Record<string, Tool<any, any>>;
|
|
25
|
+
/**
|
|
26
|
+
* Type-safe tool handler builder.
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* ```typescript
|
|
30
|
+
* const handler = createToolHandler<{ query: string }>((input, ctx) => {
|
|
31
|
+
* return `Searched for: ${input.query}`;
|
|
32
|
+
* });
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
declare function createToolHandler<TInput = unknown, TOutput = string>(handler: (input: TInput, context: ToolExecutionContext) => Promise<TOutput> | TOutput): ToolHandler<TInput, TOutput>;
|
|
36
|
+
/**
|
|
37
|
+
* Build a tool handlers map from an object.
|
|
38
|
+
*
|
|
39
|
+
* @example
|
|
40
|
+
* ```typescript
|
|
41
|
+
* const handlers = buildToolHandlers({
|
|
42
|
+
* search: async (input: { query: string }) => `Found: ${input.query}`,
|
|
43
|
+
* calculate: async (input: { a: number, b: number }) => `${input.a + input.b}`,
|
|
44
|
+
* });
|
|
45
|
+
* ```
|
|
46
|
+
*/
|
|
47
|
+
declare function buildToolHandlers(handlersObj: Record<string, ToolHandler>): Map<string, ToolHandler>;
|
|
48
|
+
//#endregion
|
|
49
|
+
export { buildToolHandlers, createToolHandler, specToolToAISDKTool, specToolsToAISDKTools };
|
|
50
|
+
//# sourceMappingURL=tool-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-adapter.d.ts","names":[],"sources":["../../src/tools/tool-adapter.ts"],"sourcesContent":[],"mappings":";;;;;;;;AAcA;;;;;;AAIO,iBAJS,mBAAA,CAIT,QAAA,EAHK,eAGL,EAAA,OAAA,EAFI,WAEJ,EAAA,OAAA,CAAA,EADI,OACJ,CADY,oBACZ,CAAA,CAAA,EAAJ,IAAI,CAAA,GAAA,EAAA,GAAA,CAAA;AA6BP;;;;;;;;AAIS,iBAJO,qBAAA,CAIP,SAAA,EAHI,eAGJ,EAAA,EAAA,QAAA,EAFG,GAEH,CAAA,MAAA,EAFe,WAEf,CAAA,EAAA,OAAA,CAAA,EADE,OACF,CADU,oBACV,CAAA,CAAA,EAAN,MAAM,CAAA,MAAA,EAAS,IAAT,CAAA,GAAA,EAAA,GAAA,CAAA,CAAA;AAyBT;;;;;;;;;;AAsBgB,iBAtBA,iBAsBiB,CAAA,SAAA,OAAA,EAAA,UAAA,MAAA,CAAA,CAAA,OAAA,EAAA,CAAA,KAAA,EApBtB,MAoBsB,EAAA,OAAA,EAnBpB,oBAmBoB,EAAA,GAlB1B,OAkB0B,CAlBlB,OAkBkB,CAAA,GAlBP,OAkBO,CAAA,EAjB9B,WAiB8B,CAjBlB,MAiBkB,EAjBV,OAiBU,CAAA;;;;;;;;;;;;iBAAjB,iBAAA,cACD,eAAe,eAC3B,YAAY"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { jsonSchemaToZodSafe } from "../schema/json-schema-to-zod.js";
|
|
2
|
+
import { tool } from "ai";
|
|
3
|
+
|
|
4
|
+
//#region src/tools/tool-adapter.ts
|
|
5
|
+
/**
|
|
6
|
+
* Convert ContractSpec AgentToolConfig to AI SDK CoreTool.
|
|
7
|
+
*
|
|
8
|
+
* @param specTool - The tool configuration from AgentSpec
|
|
9
|
+
* @param handler - The handler function for the tool
|
|
10
|
+
* @param context - Partial context to inject into handler calls
|
|
11
|
+
* @returns AI SDK CoreTool
|
|
12
|
+
*/
|
|
13
|
+
function specToolToAISDKTool(specTool, handler, context = {}) {
|
|
14
|
+
return tool({
|
|
15
|
+
description: specTool.description ?? specTool.name,
|
|
16
|
+
inputSchema: jsonSchemaToZodSafe(specTool.schema),
|
|
17
|
+
needsApproval: specTool.requiresApproval ?? !specTool.automationSafe,
|
|
18
|
+
execute: async (input) => {
|
|
19
|
+
const result = await handler(input, {
|
|
20
|
+
agentId: context.agentId ?? "unknown",
|
|
21
|
+
sessionId: context.sessionId ?? "unknown",
|
|
22
|
+
tenantId: context.tenantId,
|
|
23
|
+
actorId: context.actorId,
|
|
24
|
+
metadata: context.metadata,
|
|
25
|
+
signal: context.signal
|
|
26
|
+
});
|
|
27
|
+
return typeof result === "string" ? result : JSON.stringify(result);
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Convert multiple ContractSpec tool configs to AI SDK tools.
|
|
33
|
+
*
|
|
34
|
+
* @param specTools - Array of tool configurations
|
|
35
|
+
* @param handlers - Map of tool name to handler function
|
|
36
|
+
* @param context - Partial context to inject into handler calls
|
|
37
|
+
* @returns Record of AI SDK tools keyed by name
|
|
38
|
+
*/
|
|
39
|
+
function specToolsToAISDKTools(specTools, handlers, context = {}) {
|
|
40
|
+
const tools = {};
|
|
41
|
+
for (const specTool of specTools) {
|
|
42
|
+
const handler = handlers.get(specTool.name);
|
|
43
|
+
if (!handler) throw new Error(`Missing handler for tool: ${specTool.name}`);
|
|
44
|
+
tools[specTool.name] = specToolToAISDKTool(specTool, handler, context);
|
|
45
|
+
}
|
|
46
|
+
return tools;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Type-safe tool handler builder.
|
|
50
|
+
*
|
|
51
|
+
* @example
|
|
52
|
+
* ```typescript
|
|
53
|
+
* const handler = createToolHandler<{ query: string }>((input, ctx) => {
|
|
54
|
+
* return `Searched for: ${input.query}`;
|
|
55
|
+
* });
|
|
56
|
+
* ```
|
|
57
|
+
*/
|
|
58
|
+
function createToolHandler(handler) {
|
|
59
|
+
return async (input, context) => {
|
|
60
|
+
return handler(input, context);
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Build a tool handlers map from an object.
|
|
65
|
+
*
|
|
66
|
+
* @example
|
|
67
|
+
* ```typescript
|
|
68
|
+
* const handlers = buildToolHandlers({
|
|
69
|
+
* search: async (input: { query: string }) => `Found: ${input.query}`,
|
|
70
|
+
* calculate: async (input: { a: number, b: number }) => `${input.a + input.b}`,
|
|
71
|
+
* });
|
|
72
|
+
* ```
|
|
73
|
+
*/
|
|
74
|
+
function buildToolHandlers(handlersObj) {
|
|
75
|
+
return new Map(Object.entries(handlersObj));
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
//#endregion
|
|
79
|
+
export { buildToolHandlers, createToolHandler, specToolToAISDKTool, specToolsToAISDKTools };
|
|
80
|
+
//# sourceMappingURL=tool-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-adapter.js","names":[],"sources":["../../src/tools/tool-adapter.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { tool, type Tool } from 'ai';\nimport type { AgentToolConfig } from '../spec/spec';\nimport type { ToolExecutionContext, ToolHandler } from '../types';\nimport { jsonSchemaToZodSafe } from '../schema/json-schema-to-zod';\n\n/**\n * Convert ContractSpec AgentToolConfig to AI SDK CoreTool.\n *\n * @param specTool - The tool configuration from AgentSpec\n * @param handler - The handler function for the tool\n * @param context - Partial context to inject into handler calls\n * @returns AI SDK CoreTool\n */\nexport function specToolToAISDKTool(\n specTool: AgentToolConfig,\n handler: ToolHandler,\n context: Partial<ToolExecutionContext> = {}\n): Tool<any, any> {\n return tool({\n description: specTool.description ?? specTool.name,\n // AI SDK v6 uses inputSchema instead of parameters\n inputSchema: jsonSchemaToZodSafe(specTool.schema),\n // AI SDK v6 native approval support\n needsApproval: specTool.requiresApproval ?? !specTool.automationSafe,\n execute: async (input) => {\n const result = await handler(input, {\n agentId: context.agentId ?? 'unknown',\n sessionId: context.sessionId ?? 'unknown',\n tenantId: context.tenantId,\n actorId: context.actorId,\n metadata: context.metadata,\n signal: context.signal,\n });\n return typeof result === 'string' ? result : JSON.stringify(result);\n },\n });\n}\n\n/**\n * Convert multiple ContractSpec tool configs to AI SDK tools.\n *\n * @param specTools - Array of tool configurations\n * @param handlers - Map of tool name to handler function\n * @param context - Partial context to inject into handler calls\n * @returns Record of AI SDK tools keyed by name\n */\nexport function specToolsToAISDKTools(\n specTools: AgentToolConfig[],\n handlers: Map<string, ToolHandler>,\n context: Partial<ToolExecutionContext> = {}\n): Record<string, Tool<any, any>> {\n const tools: Record<string, Tool<any, any>> = {};\n\n for (const specTool of specTools) {\n const handler = handlers.get(specTool.name);\n if (!handler) {\n throw new Error(`Missing handler for tool: ${specTool.name}`);\n }\n\n tools[specTool.name] = specToolToAISDKTool(specTool, handler, context);\n }\n\n return tools;\n}\n\n/**\n * Type-safe tool handler builder.\n *\n * @example\n * ```typescript\n * const handler = createToolHandler<{ query: string }>((input, ctx) => {\n * return `Searched for: ${input.query}`;\n * });\n * ```\n */\nexport function createToolHandler<TInput = unknown, TOutput = string>(\n handler: (\n input: TInput,\n context: ToolExecutionContext\n ) => Promise<TOutput> | TOutput\n): ToolHandler<TInput, TOutput> {\n return async (input, context) => {\n return handler(input as TInput, context);\n };\n}\n\n/**\n * Build a tool handlers map from an object.\n *\n * @example\n * ```typescript\n * const handlers = buildToolHandlers({\n * search: async (input: { query: string }) => `Found: ${input.query}`,\n * calculate: async (input: { a: number, b: number }) => `${input.a + input.b}`,\n * });\n * ```\n */\nexport function buildToolHandlers(\n handlersObj: Record<string, ToolHandler>\n): Map<string, ToolHandler> {\n return new Map(Object.entries(handlersObj));\n}\n"],"mappings":";;;;;;;;;;;;AAcA,SAAgB,oBACd,UACA,SACA,UAAyC,EAAE,EAC3B;AAChB,QAAO,KAAK;EACV,aAAa,SAAS,eAAe,SAAS;EAE9C,aAAa,oBAAoB,SAAS,OAAO;EAEjD,eAAe,SAAS,oBAAoB,CAAC,SAAS;EACtD,SAAS,OAAO,UAAU;GACxB,MAAM,SAAS,MAAM,QAAQ,OAAO;IAClC,SAAS,QAAQ,WAAW;IAC5B,WAAW,QAAQ,aAAa;IAChC,UAAU,QAAQ;IAClB,SAAS,QAAQ;IACjB,UAAU,QAAQ;IAClB,QAAQ,QAAQ;IACjB,CAAC;AACF,UAAO,OAAO,WAAW,WAAW,SAAS,KAAK,UAAU,OAAO;;EAEtE,CAAC;;;;;;;;;;AAWJ,SAAgB,sBACd,WACA,UACA,UAAyC,EAAE,EACX;CAChC,MAAM,QAAwC,EAAE;AAEhD,MAAK,MAAM,YAAY,WAAW;EAChC,MAAM,UAAU,SAAS,IAAI,SAAS,KAAK;AAC3C,MAAI,CAAC,QACH,OAAM,IAAI,MAAM,6BAA6B,SAAS,OAAO;AAG/D,QAAM,SAAS,QAAQ,oBAAoB,UAAU,SAAS,QAAQ;;AAGxE,QAAO;;;;;;;;;;;;AAaT,SAAgB,kBACd,SAI8B;AAC9B,QAAO,OAAO,OAAO,YAAY;AAC/B,SAAO,QAAQ,OAAiB,QAAQ;;;;;;;;;;;;;;AAe5C,SAAgB,kBACd,aAC0B;AAC1B,QAAO,IAAI,IAAI,OAAO,QAAQ,YAAY,CAAC"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import { LanguageModelUsage, ModelMessage, StepResult, ToolSet } from "ai";
|
|
2
|
+
|
|
3
|
+
//#region src/types.d.ts
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Simplified tool call type for ContractSpec usage.
|
|
7
|
+
* Compatible with AI SDK v6 TypedToolCall.
|
|
8
|
+
*/
|
|
9
|
+
interface ToolCallInfo {
|
|
10
|
+
type: 'tool-call';
|
|
11
|
+
toolCallId: string;
|
|
12
|
+
toolName: string;
|
|
13
|
+
args: unknown;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Simplified tool result type for ContractSpec usage.
|
|
17
|
+
* Compatible with AI SDK v6 TypedToolResult.
|
|
18
|
+
*/
|
|
19
|
+
interface ToolResultInfo {
|
|
20
|
+
type: 'tool-result';
|
|
21
|
+
toolCallId: string;
|
|
22
|
+
toolName: string;
|
|
23
|
+
output: unknown;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Extended message type that adds metadata support to ModelMessage.
|
|
27
|
+
* Used for session memory tracking.
|
|
28
|
+
*/
|
|
29
|
+
interface AgentMessage {
|
|
30
|
+
role: 'user' | 'assistant' | 'system' | 'tool';
|
|
31
|
+
content: string | {
|
|
32
|
+
type: string;
|
|
33
|
+
text?: string;
|
|
34
|
+
[key: string]: unknown;
|
|
35
|
+
}[];
|
|
36
|
+
metadata?: Record<string, string>;
|
|
37
|
+
}
|
|
38
|
+
type AgentStatus = 'idle' | 'running' | 'waiting' | 'completed' | 'failed' | 'escalated';
|
|
39
|
+
type AgentEventName = 'agent.session.created' | 'agent.session.updated' | 'agent.step.started' | 'agent.step.completed' | 'agent.tool.called' | 'agent.tool.completed' | 'agent.tool.failed' | 'agent.tool.approval_requested' | 'agent.escalated' | 'agent.completed' | 'agent.failed';
|
|
40
|
+
type AgentFinishReason = 'stop' | 'tool-calls' | 'length' | 'content-filter' | 'error' | 'other' | 'unknown';
|
|
41
|
+
interface AgentEventPayload {
|
|
42
|
+
sessionId: string;
|
|
43
|
+
agentId: string;
|
|
44
|
+
tenantId?: string;
|
|
45
|
+
stepIndex?: number;
|
|
46
|
+
toolName?: string;
|
|
47
|
+
metadata?: Record<string, unknown>;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Runtime context passed to agent calls via AI SDK v6 callOptionsSchema.
|
|
51
|
+
* Maps to ContractSpec's tenant/actor system.
|
|
52
|
+
*/
|
|
53
|
+
interface AgentCallOptions {
|
|
54
|
+
/** Tenant scoping for guardrails and data isolation */
|
|
55
|
+
tenantId?: string;
|
|
56
|
+
/** Unique end-user identifier (for personalization) */
|
|
57
|
+
actorId?: string;
|
|
58
|
+
/** Session to resume; new session created when omitted */
|
|
59
|
+
sessionId?: string;
|
|
60
|
+
/** Arbitrary metadata forwarded to events and tool handlers */
|
|
61
|
+
metadata?: Record<string, string>;
|
|
62
|
+
}
|
|
63
|
+
interface AgentSessionState {
|
|
64
|
+
sessionId: string;
|
|
65
|
+
agentId: string;
|
|
66
|
+
tenantId?: string;
|
|
67
|
+
actorId?: string;
|
|
68
|
+
status: AgentStatus;
|
|
69
|
+
messages: ModelMessage[];
|
|
70
|
+
steps: StepResult<ToolSet>[];
|
|
71
|
+
createdAt: Date;
|
|
72
|
+
updatedAt: Date;
|
|
73
|
+
metadata?: Record<string, string>;
|
|
74
|
+
}
|
|
75
|
+
interface AgentGenerateParams {
|
|
76
|
+
/** User prompt or message */
|
|
77
|
+
prompt: string;
|
|
78
|
+
/** System prompt override (appended to agent instructions) */
|
|
79
|
+
systemOverride?: string;
|
|
80
|
+
/** Runtime context options */
|
|
81
|
+
options?: AgentCallOptions;
|
|
82
|
+
/** Maximum number of steps/iterations */
|
|
83
|
+
maxSteps?: number;
|
|
84
|
+
/** Abort signal for cancellation */
|
|
85
|
+
signal?: AbortSignal;
|
|
86
|
+
}
|
|
87
|
+
interface AgentStreamParams extends AgentGenerateParams {
|
|
88
|
+
/** Called when a step completes */
|
|
89
|
+
onStepFinish?: (step: StepResult<ToolSet>) => void | Promise<void>;
|
|
90
|
+
}
|
|
91
|
+
interface AgentGenerateResult<TOutput = string> {
|
|
92
|
+
/** The final text response */
|
|
93
|
+
text: string;
|
|
94
|
+
/** Structured output if configured */
|
|
95
|
+
output?: TOutput;
|
|
96
|
+
/** All steps taken during generation */
|
|
97
|
+
steps: StepResult<ToolSet>[];
|
|
98
|
+
/** All tool calls made during generation */
|
|
99
|
+
toolCalls: ToolCallInfo[];
|
|
100
|
+
/** All tool results */
|
|
101
|
+
toolResults: ToolResultInfo[];
|
|
102
|
+
/** Reason generation finished */
|
|
103
|
+
finishReason: AgentFinishReason;
|
|
104
|
+
/** Token usage statistics */
|
|
105
|
+
usage?: LanguageModelUsage;
|
|
106
|
+
/** Updated session state */
|
|
107
|
+
session?: AgentSessionState;
|
|
108
|
+
/** Whether approval is pending for a tool call */
|
|
109
|
+
pendingApproval?: {
|
|
110
|
+
toolName: string;
|
|
111
|
+
toolCallId: string;
|
|
112
|
+
args: unknown;
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Context provided to tool handlers during execution.
|
|
117
|
+
*/
|
|
118
|
+
interface ToolExecutionContext {
|
|
119
|
+
agentId: string;
|
|
120
|
+
sessionId: string;
|
|
121
|
+
tenantId?: string;
|
|
122
|
+
actorId?: string;
|
|
123
|
+
metadata?: Record<string, string>;
|
|
124
|
+
signal?: AbortSignal;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Handler function for a tool.
|
|
128
|
+
*/
|
|
129
|
+
type ToolHandler<TInput = unknown, TOutput = string> = (input: TInput, context: ToolExecutionContext) => Promise<TOutput>;
|
|
130
|
+
interface AgentStepMetrics {
|
|
131
|
+
agentId: string;
|
|
132
|
+
stepIndex: number;
|
|
133
|
+
toolCalls: {
|
|
134
|
+
toolName: string;
|
|
135
|
+
durationMs?: number;
|
|
136
|
+
success: boolean;
|
|
137
|
+
error?: string;
|
|
138
|
+
}[];
|
|
139
|
+
finishReason: string;
|
|
140
|
+
usage?: LanguageModelUsage;
|
|
141
|
+
timestamp: Date;
|
|
142
|
+
}
|
|
143
|
+
type AgentEventEmitter = (event: AgentEventName, payload: AgentEventPayload) => void | Promise<void>;
|
|
144
|
+
//#endregion
|
|
145
|
+
export { AgentCallOptions, AgentEventEmitter, AgentEventName, AgentEventPayload, AgentFinishReason, AgentGenerateParams, AgentGenerateResult, AgentMessage, AgentSessionState, AgentStatus, AgentStepMetrics, AgentStreamParams, type LanguageModelUsage, ToolCallInfo, ToolExecutionContext, ToolHandler, ToolResultInfo };
|
|
146
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","names":[],"sources":["../src/types.ts"],"sourcesContent":[],"mappings":";;;;;AAWA;AAWA;AAeA;AAUY,UApCK,YAAA,CAoCM;EAQX,IAAA,EAAA,WAAc;EAad,UAAA,EAAA,MAAA;EASK,QAAA,EAAA,MAAA;EAiBA,IAAA,EAAA,OAAA;AAejB;;;;;AAQa,UA/FI,cAAA,CA+FJ;EACA,IAAA,EAAA,aAAA;EACA,UAAA,EAAA,MAAA;EAAM,QAAA,EAAA,MAAA;EAOF,MAAA,EAAA,OAAA;AAajB;;;;;AAA8D,UAtG7C,YAAA,CAsG6C;EAS7C,IAAA,EAAA,MAAA,GAAA,WAAmB,GAAA,QAAA,GAAA,MAAA;EAIzB,OAAA,EAAA,MAAA,GAAA;IAES,IAAA,EAAA,MAAA;IAAX,IAAA,CAAA,EAAA,MAAA;IAEI,CAAA,GAAA,EAAA,MAAA,CAAA,EAAA,OAAA;EAEE,CAAA,EAAA;EAEC,QAAA,CAAA,EAxHH,MAwHG,CAAA,MAAA,EAAA,MAAA,CAAA;;AAIJ,KArHA,WAAA,GAqHA,MAAA,GAAA,SAAA,GAAA,SAAA,GAAA,WAAA,GAAA,QAAA,GAAA,WAAA;AAAiB,KA7GjB,cAAA,GA6GiB,uBAAA,GAAA,uBAAA,GAAA,oBAAA,GAAA,sBAAA,GAAA,mBAAA,GAAA,sBAAA,GAAA,mBAAA,GAAA,+BAAA,GAAA,iBAAA,GAAA,iBAAA,GAAA,cAAA;AAgBZ,KAhHL,iBAAA,GAgHyB,MAAA,GAKxB,YACF,GAAA,QAAW,GAAA,gBAAA,GAAA,OAAA,GAAA,OAAA,GAAA,SAAA;AAMV,UAnHK,iBAAA,CAmHM;EACd,SAAA,EAAA,MAAA;EACE,OAAA,EAAA,MAAA;EACE,QAAA,CAAA,EAAA,MAAA;EAAR,SAAA,CAAA,EAAA,MAAA;EAAO,QAAA,CAAA,EAAA,MAAA;EAMK,QAAA,CAAA,EAtHJ,MAsHI,CAAA,MAAgB,EAAA,OAUvB,CAAA;AAQV;;;;;UA7HiB,gBAAA;;;;;;;;aAQJ;;UAOI,iBAAA;;;;;UAKP;YACE;SACH,WAAW;aACP;aACA;aACA;;UAOI,mBAAA;;;;;;YAML;;;;WAID;;UAGM,iBAAA,SAA0B;;wBAEnB,WAAW,oBAAoB;;UAOtC;;;;WAIN;;SAEF,WAAW;;aAEP;;eAEE;;gBAEC;;UAEN;;YAEE;;;;;;;;;;;UAgBK,oBAAA;;;;;aAKJ;WACF;;;;;KAMC,0DACH,iBACE,yBACN,QAAQ;UAMI,gBAAA;;;;;;;;;;UAUP;aACG;;KAOD,iBAAA,WACH,yBACE,6BACC"}
|
package/dist/types.js
ADDED
|
File without changes
|
package/package.json
ADDED
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@contractspec/lib.ai-agent",
|
|
3
|
+
"version": "0.0.0-canary-20260113162409",
|
|
4
|
+
"description": "AI agent orchestration with MCP and tool support",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"contractspec",
|
|
7
|
+
"ai",
|
|
8
|
+
"agents",
|
|
9
|
+
"llm",
|
|
10
|
+
"mcp",
|
|
11
|
+
"tools",
|
|
12
|
+
"typescript"
|
|
13
|
+
],
|
|
14
|
+
"type": "module",
|
|
15
|
+
"types": "./dist/index.d.ts",
|
|
16
|
+
"files": [
|
|
17
|
+
"dist",
|
|
18
|
+
"README.md"
|
|
19
|
+
],
|
|
20
|
+
"scripts": {
|
|
21
|
+
"publish:pkg": "bun publish --tolerate-republish --ignore-scripts --verbose",
|
|
22
|
+
"publish:pkg:canary": "bun publish:pkg --tag canary",
|
|
23
|
+
"build": "bun build:types && bun build:bundle",
|
|
24
|
+
"build:bundle": "tsdown",
|
|
25
|
+
"build:types": "tsc --noEmit",
|
|
26
|
+
"dev": "bun build:bundle --watch",
|
|
27
|
+
"clean": "rimraf dist .turbo",
|
|
28
|
+
"lint": "bun lint:fix",
|
|
29
|
+
"lint:fix": "eslint src --fix",
|
|
30
|
+
"lint:check": "eslint src",
|
|
31
|
+
"test": "bun test"
|
|
32
|
+
},
|
|
33
|
+
"dependencies": {
|
|
34
|
+
"ai": "6.0.29",
|
|
35
|
+
"@ai-sdk/mcp": "1.0.5",
|
|
36
|
+
"@ai-sdk/anthropic": "3.0.11",
|
|
37
|
+
"@ai-sdk/google": "3.0.6",
|
|
38
|
+
"@ai-sdk/mistral": "3.0.5",
|
|
39
|
+
"@ai-sdk/openai": "3.0.8",
|
|
40
|
+
"@modelcontextprotocol/sdk": "^1.25.2",
|
|
41
|
+
"@contractspec/lib.contracts": "0.0.0-canary-20260113162409",
|
|
42
|
+
"@contractspec/lib.knowledge": "0.0.0-canary-20260113162409",
|
|
43
|
+
"compare-versions": "^6.1.1",
|
|
44
|
+
"zod": "^4.3.5"
|
|
45
|
+
},
|
|
46
|
+
"peerDependencies": {
|
|
47
|
+
"@anthropic-ai/claude-agent-sdk": ">=0.1.0",
|
|
48
|
+
"@opencode-ai/sdk": ">=1.0.0"
|
|
49
|
+
},
|
|
50
|
+
"peerDependenciesMeta": {
|
|
51
|
+
"@anthropic-ai/claude-agent-sdk": {
|
|
52
|
+
"optional": true
|
|
53
|
+
},
|
|
54
|
+
"@opencode-ai/sdk": {
|
|
55
|
+
"optional": true
|
|
56
|
+
}
|
|
57
|
+
},
|
|
58
|
+
"devDependencies": {
|
|
59
|
+
"@contractspec/tool.tsdown": "0.0.0-canary-20260113162409",
|
|
60
|
+
"@contractspec/tool.typescript": "0.0.0-canary-20260113162409",
|
|
61
|
+
"tsdown": "^0.19.0",
|
|
62
|
+
"typescript": "^5.9.3"
|
|
63
|
+
},
|
|
64
|
+
"exports": {
|
|
65
|
+
".": "./dist/index.js",
|
|
66
|
+
"./agent": "./dist/agent/index.js",
|
|
67
|
+
"./agent/agent-factory": "./dist/agent/agent-factory.js",
|
|
68
|
+
"./agent/contract-spec-agent": "./dist/agent/contract-spec-agent.js",
|
|
69
|
+
"./agent/unified-agent": "./dist/agent/unified-agent.js",
|
|
70
|
+
"./approval": "./dist/approval/index.js",
|
|
71
|
+
"./approval/workflow": "./dist/approval/workflow.js",
|
|
72
|
+
"./exporters": "./dist/exporters/index.js",
|
|
73
|
+
"./exporters/claude-agent-exporter": "./dist/exporters/claude-agent-exporter.js",
|
|
74
|
+
"./exporters/opencode-exporter": "./dist/exporters/opencode-exporter.js",
|
|
75
|
+
"./exporters/types": "./dist/exporters/types.js",
|
|
76
|
+
"./interop": "./dist/interop/index.js",
|
|
77
|
+
"./interop/spec-consumer": "./dist/interop/spec-consumer.js",
|
|
78
|
+
"./interop/tool-consumer": "./dist/interop/tool-consumer.js",
|
|
79
|
+
"./interop/types": "./dist/interop/types.js",
|
|
80
|
+
"./knowledge": "./dist/knowledge/index.js",
|
|
81
|
+
"./knowledge/injector": "./dist/knowledge/injector.js",
|
|
82
|
+
"./memory": "./dist/memory/index.js",
|
|
83
|
+
"./memory/in-memory": "./dist/memory/in-memory.js",
|
|
84
|
+
"./memory/manager": "./dist/memory/manager.js",
|
|
85
|
+
"./providers": "./dist/providers/index.js",
|
|
86
|
+
"./providers/claude-agent-sdk": "./dist/providers/claude-agent-sdk/index.js",
|
|
87
|
+
"./providers/claude-agent-sdk/adapter": "./dist/providers/claude-agent-sdk/adapter.js",
|
|
88
|
+
"./providers/claude-agent-sdk/session-bridge": "./dist/providers/claude-agent-sdk/session-bridge.js",
|
|
89
|
+
"./providers/claude-agent-sdk/tool-bridge": "./dist/providers/claude-agent-sdk/tool-bridge.js",
|
|
90
|
+
"./providers/opencode-sdk": "./dist/providers/opencode-sdk/index.js",
|
|
91
|
+
"./providers/opencode-sdk/adapter": "./dist/providers/opencode-sdk/adapter.js",
|
|
92
|
+
"./providers/opencode-sdk/agent-bridge": "./dist/providers/opencode-sdk/agent-bridge.js",
|
|
93
|
+
"./providers/opencode-sdk/tool-bridge": "./dist/providers/opencode-sdk/tool-bridge.js",
|
|
94
|
+
"./providers/registry": "./dist/providers/registry.js",
|
|
95
|
+
"./providers/types": "./dist/providers/types.js",
|
|
96
|
+
"./schema": "./dist/schema/index.js",
|
|
97
|
+
"./schema/json-schema-to-zod": "./dist/schema/json-schema-to-zod.js",
|
|
98
|
+
"./schema/schema-output": "./dist/schema/schema-output.js",
|
|
99
|
+
"./session": "./dist/session/index.js",
|
|
100
|
+
"./session/store": "./dist/session/store.js",
|
|
101
|
+
"./spec": "./dist/spec/index.js",
|
|
102
|
+
"./spec/registry": "./dist/spec/registry.js",
|
|
103
|
+
"./spec/spec": "./dist/spec/spec.js",
|
|
104
|
+
"./telemetry": "./dist/telemetry/index.js",
|
|
105
|
+
"./telemetry/adapter": "./dist/telemetry/adapter.js",
|
|
106
|
+
"./tools": "./dist/tools/index.js",
|
|
107
|
+
"./tools/knowledge-tool": "./dist/tools/knowledge-tool.js",
|
|
108
|
+
"./tools/mcp-client": "./dist/tools/mcp-client.js",
|
|
109
|
+
"./tools/mcp-server": "./dist/tools/mcp-server.js",
|
|
110
|
+
"./tools/tool-adapter": "./dist/tools/tool-adapter.js",
|
|
111
|
+
"./types": "./dist/types.js",
|
|
112
|
+
"./*": "./*"
|
|
113
|
+
},
|
|
114
|
+
"publishConfig": {
|
|
115
|
+
"access": "public",
|
|
116
|
+
"exports": {
|
|
117
|
+
".": "./dist/index.js",
|
|
118
|
+
"./agent": "./dist/agent/index.js",
|
|
119
|
+
"./agent/agent-factory": "./dist/agent/agent-factory.js",
|
|
120
|
+
"./agent/contract-spec-agent": "./dist/agent/contract-spec-agent.js",
|
|
121
|
+
"./approval": "./dist/approval/index.js",
|
|
122
|
+
"./approval/workflow": "./dist/approval/workflow.js",
|
|
123
|
+
"./knowledge": "./dist/knowledge/index.js",
|
|
124
|
+
"./knowledge/injector": "./dist/knowledge/injector.js",
|
|
125
|
+
"./memory": "./dist/memory/index.js",
|
|
126
|
+
"./memory/in-memory": "./dist/memory/in-memory.js",
|
|
127
|
+
"./memory/manager": "./dist/memory/manager.js",
|
|
128
|
+
"./schema": "./dist/schema/index.js",
|
|
129
|
+
"./schema/json-schema-to-zod": "./dist/schema/json-schema-to-zod.js",
|
|
130
|
+
"./schema/schema-output": "./dist/schema/schema-output.js",
|
|
131
|
+
"./session": "./dist/session/index.js",
|
|
132
|
+
"./session/store": "./dist/session/store.js",
|
|
133
|
+
"./spec": "./dist/spec/index.js",
|
|
134
|
+
"./spec/registry": "./dist/spec/registry.js",
|
|
135
|
+
"./spec/spec": "./dist/spec/spec.js",
|
|
136
|
+
"./telemetry": "./dist/telemetry/index.js",
|
|
137
|
+
"./telemetry/adapter": "./dist/telemetry/adapter.js",
|
|
138
|
+
"./tools": "./dist/tools/index.js",
|
|
139
|
+
"./tools/knowledge-tool": "./dist/tools/knowledge-tool.js",
|
|
140
|
+
"./tools/mcp-client": "./dist/tools/mcp-client.js",
|
|
141
|
+
"./tools/mcp-server": "./dist/tools/mcp-server.js",
|
|
142
|
+
"./tools/tool-adapter": "./dist/tools/tool-adapter.js",
|
|
143
|
+
"./types": "./dist/types.js",
|
|
144
|
+
"./*": "./*"
|
|
145
|
+
},
|
|
146
|
+
"registry": "https://registry.npmjs.org/"
|
|
147
|
+
},
|
|
148
|
+
"license": "MIT",
|
|
149
|
+
"repository": {
|
|
150
|
+
"type": "git",
|
|
151
|
+
"url": "https://github.com/lssm-tech/contractspec.git",
|
|
152
|
+
"directory": "packages/libs/ai-agent"
|
|
153
|
+
},
|
|
154
|
+
"homepage": "https://contractspec.io"
|
|
155
|
+
}
|