@contractspec/lib.ai-agent 1.56.0 → 1.57.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/dist/_virtual/{rolldown_runtime.js → _rolldown/runtime.js} +2 -2
- package/dist/agent/agent-factory.d.ts +0 -1
- package/dist/agent/agent-factory.d.ts.map +1 -1
- package/dist/agent/contract-spec-agent.d.ts +3 -5
- package/dist/agent/contract-spec-agent.d.ts.map +1 -1
- package/dist/agent/contract-spec-agent.js.map +1 -1
- package/dist/agent/index.d.ts +2 -1
- package/dist/agent/index.js +2 -1
- package/dist/agent/json-runner.d.ts +22 -0
- package/dist/agent/json-runner.d.ts.map +1 -0
- package/dist/agent/json-runner.js +69 -0
- package/dist/agent/json-runner.js.map +1 -0
- package/dist/agent/unified-agent.d.ts +11 -1
- package/dist/agent/unified-agent.d.ts.map +1 -1
- package/dist/agent/unified-agent.js +38 -4
- package/dist/agent/unified-agent.js.map +1 -1
- package/dist/approval/workflow.d.ts.map +1 -1
- package/dist/exporters/claude-agent-exporter.d.ts +0 -1
- package/dist/exporters/claude-agent-exporter.d.ts.map +1 -1
- package/dist/exporters/opencode-exporter.d.ts +0 -1
- package/dist/exporters/opencode-exporter.d.ts.map +1 -1
- package/dist/exporters/types.d.ts +0 -1
- package/dist/exporters/types.d.ts.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.js +2 -1
- package/dist/interop/spec-consumer.d.ts +0 -1
- package/dist/interop/spec-consumer.d.ts.map +1 -1
- package/dist/interop/tool-consumer.d.ts +0 -1
- package/dist/interop/tool-consumer.d.ts.map +1 -1
- package/dist/interop/types.d.ts +0 -1
- package/dist/interop/types.d.ts.map +1 -1
- package/dist/knowledge/injector.d.ts +0 -1
- package/dist/knowledge/injector.d.ts.map +1 -1
- package/dist/memory/in-memory.d.ts.map +1 -1
- package/dist/memory/manager.d.ts.map +1 -1
- package/dist/memory/manager.js +0 -1
- package/dist/memory/manager.js.map +1 -1
- package/dist/providers/claude-agent-sdk/adapter.d.ts +0 -1
- package/dist/providers/claude-agent-sdk/adapter.d.ts.map +1 -1
- package/dist/providers/claude-agent-sdk/adapter.js +1 -1
- package/dist/providers/claude-agent-sdk/session-bridge.d.ts +0 -1
- package/dist/providers/claude-agent-sdk/session-bridge.d.ts.map +1 -1
- package/dist/providers/claude-agent-sdk/tool-bridge.d.ts +0 -1
- package/dist/providers/claude-agent-sdk/tool-bridge.d.ts.map +1 -1
- package/dist/providers/opencode-sdk/adapter.d.ts +0 -1
- package/dist/providers/opencode-sdk/adapter.d.ts.map +1 -1
- package/dist/providers/opencode-sdk/adapter.js +1 -1
- package/dist/providers/opencode-sdk/agent-bridge.d.ts +0 -1
- package/dist/providers/opencode-sdk/agent-bridge.d.ts.map +1 -1
- package/dist/providers/opencode-sdk/tool-bridge.d.ts +0 -1
- package/dist/providers/opencode-sdk/tool-bridge.d.ts.map +1 -1
- package/dist/providers/registry.d.ts +0 -1
- package/dist/providers/registry.d.ts.map +1 -1
- package/dist/providers/types.d.ts +0 -1
- package/dist/providers/types.d.ts.map +1 -1
- package/dist/schema/json-schema-to-zod.d.ts +0 -1
- package/dist/schema/json-schema-to-zod.d.ts.map +1 -1
- package/dist/schema/schema-output.d.ts +0 -1
- package/dist/schema/schema-output.d.ts.map +1 -1
- package/dist/session/store.d.ts +0 -1
- package/dist/session/store.d.ts.map +1 -1
- package/dist/spec/registry.d.ts +0 -1
- package/dist/spec/registry.d.ts.map +1 -1
- package/dist/spec/spec.d.ts +0 -1
- package/dist/spec/spec.d.ts.map +1 -1
- package/dist/telemetry/adapter.d.ts +0 -1
- package/dist/telemetry/adapter.d.ts.map +1 -1
- package/dist/tools/knowledge-tool.d.ts +0 -1
- package/dist/tools/knowledge-tool.d.ts.map +1 -1
- package/dist/tools/mcp-client.d.ts +0 -1
- package/dist/tools/mcp-client.d.ts.map +1 -1
- package/dist/tools/mcp-server.d.ts +0 -1
- package/dist/tools/mcp-server.d.ts.map +1 -1
- package/dist/tools/tool-adapter.d.ts +0 -1
- package/dist/tools/tool-adapter.d.ts.map +1 -1
- package/dist/types.d.ts +0 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +12 -10
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
//#region
|
|
1
|
+
//#region \0rolldown/runtime.js
|
|
2
2
|
var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, { get: (a, b) => (typeof require !== "undefined" ? require : a)[b] }) : x)(function(x) {
|
|
3
3
|
if (typeof require !== "undefined") return require.apply(this, arguments);
|
|
4
|
-
throw Error("Calling `require` for \"" + x + "\" in an environment that doesn't expose the `require` function.");
|
|
4
|
+
throw Error("Calling `require` for \"" + x + "\" in an environment that doesn't expose the `require` function. See https://rolldown.rs/in-depth/bundling-cjs#require-external-modules for more details.");
|
|
5
5
|
});
|
|
6
6
|
|
|
7
7
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-factory.d.ts","names":[],"sources":["../../src/agent/agent-factory.ts"],"
|
|
1
|
+
{"version":3,"file":"agent-factory.d.ts","names":[],"sources":["../../src/agent/agent-factory.ts"],"mappings":";;;;;;;;;;;;AAYA;UAAiB,kBAAA;;EAEf,YAAA,EAAc,aAAA;EAEJ;EAAV,QAAA,EAAU,aAAA;EAEI;EAAd,YAAA,EAAc,GAAA,SAAY,WAAA;EAIX;EAFf,kBAAA,GAAqB,kBAAA;EAMY;EAJjC,YAAA,GAAe,iBAAA;EAIS;EAFxB,kBAAA,GAAqB,kBAAA;EAVrB;EAYA,eAAA,GAAkB,MAAA,SAAe,IAAA;AAAA;;;;UAMlB,kBAAA;EAZf;EAcA,KAAA,GAAQ,aAAA;EAZR;EAcA,YAAA,GAAe,GAAA,SAAY,WAAA;EAZ3B;EAcA,eAAA,GAAkB,MAAA,SAAe,IAAA;AAAA;;;;;AANnC;;;;;;;;;;;;;;;cA4Ba,YAAA;EAAA,iBACM,MAAA;EAAA,iBACA,KAAA;cAEL,MAAA,EAAQ,kBAAA;EA1BiB;AAsBvC;;;;;;EAeQ,MAAA,CACJ,IAAA,UACA,OAAA,WACA,OAAA,GAAU,kBAAA,GACT,OAAA,CAAQ,iBAAA;EAYH;;;;;;EADF,cAAA,CACJ,IAAA,EAAM,SAAA,EACN,OAAA,GAAU,kBAAA,GACT,OAAA,CAAQ,iBAAA;EAuCD;;;;;;;;EAHJ,WAAA,CACJ,IAAA,UACA,OAAA,YACC,OAAA,CAAQ,iBAAA;EAtDC;;;EAsEZ,UAAA,CAAA;EA1DM;;;EAiEN,aAAA,CAAA;AAAA;;;;iBAQc,kBAAA,CAAmB,MAAA,EAAQ,kBAAA,GAAqB,YAAA"}
|
|
@@ -2,17 +2,15 @@ import { AgentSpec } from "../spec/spec.js";
|
|
|
2
2
|
import { AgentGenerateParams, AgentGenerateResult, AgentStreamParams, ToolHandler } from "../types.js";
|
|
3
3
|
import { AgentSessionStore } from "../session/store.js";
|
|
4
4
|
import { TelemetryCollector } from "../telemetry/adapter.js";
|
|
5
|
-
import * as
|
|
5
|
+
import * as ai from "ai";
|
|
6
6
|
import { LanguageModel, Tool, ToolSet } from "ai";
|
|
7
7
|
import { KnowledgeRetriever } from "@contractspec/lib.knowledge/retriever";
|
|
8
8
|
|
|
9
9
|
//#region src/agent/contract-spec-agent.d.ts
|
|
10
|
-
|
|
11
10
|
/**
|
|
12
11
|
* Type for tool with execute function (compatible with AI SDK Tool)
|
|
13
|
-
* Using `any` for broad compatibility with AI SDK tool types
|
|
14
12
|
*/
|
|
15
|
-
type ExecutableTool = Tool
|
|
13
|
+
type ExecutableTool = Tool;
|
|
16
14
|
/**
|
|
17
15
|
* Configuration for creating a ContractSpecAgent.
|
|
18
16
|
*/
|
|
@@ -64,7 +62,7 @@ declare class ContractSpecAgent {
|
|
|
64
62
|
/**
|
|
65
63
|
* Stream a response with real-time updates.
|
|
66
64
|
*/
|
|
67
|
-
stream(params: AgentStreamParams): Promise<
|
|
65
|
+
stream(params: AgentStreamParams): Promise<ai.StreamTextResult<ToolSet, never>>;
|
|
68
66
|
/**
|
|
69
67
|
* Handle step completion for persistence and telemetry.
|
|
70
68
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contract-spec-agent.d.ts","names":[],"sources":["../../src/agent/contract-spec-agent.ts"],"
|
|
1
|
+
{"version":3,"file":"contract-spec-agent.d.ts","names":[],"sources":["../../src/agent/contract-spec-agent.ts"],"mappings":";;;;;;;;;;;;KAwCK,cAAA,GAAiB,IAAA;;;;UAKL,uBAAA;EAAA;EAEf,IAAA,EAAM,SAAA;;EAEN,KAAA,EAAO,aAAA;EAAA;EAEP,YAAA,EAAc,GAAA,SAAY,WAAA;EAAZ;EAEd,kBAAA,GAAqB,kBAAA;EAEN;EAAf,YAAA,GAAe,iBAAA;EAIkB;EAFjC,kBAAA,GAAqB,kBAAA;EAEG;EAAxB,eAAA,GAAkB,MAAA,SAAe,cAAA;AAAA;;;;;;;;;;;;cActB,iBAAA;EAAA,SACF,OAAA;EAAA,SACA,EAAA;EAAA,SACA,IAAA,EAAM,SAAA;EAAA,SACN,KAAA,EAAO,MAAA,SAAe,cAAA;EAAA,iBAEd,KAAA;EAAA,iBAKA,MAAA;EAAA,QACT,YAAA;EAAA,QAED,WAAA,CAAA;EAXQ;;;;EAAA,OA0CF,MAAA,CACX,MAAA,EAAQ,uBAAA,GACP,OAAA,CAAQ,iBAAA;EAAR;;;EAoCG,QAAA,CAAS,MAAA,EAAQ,mBAAA,GAAsB,OAAA,CAAQ,mBAAA;EAoEhC;;;EAAf,MAAA,CAAO,MAAA,EAAQ,iBAAA,GAAiB,OAAA,CAAA,EAAA,CAAA,gBAAA,CAAA,OAAA;EAAA;;;EAAA,QAwBxB,gBAAA;AAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contract-spec-agent.js","names":["z","ToolLoopAgent"],"sources":["../../src/agent/contract-spec-agent.ts"],"sourcesContent":["import {\n Experimental_Agent as ToolLoopAgent,\n type LanguageModel,\n stepCountIs,\n type StepResult,\n type Tool,\n type ToolSet,\n} from 'ai';\nimport * as z from 'zod';\nimport type { KnowledgeRetriever } from '@contractspec/lib.knowledge/retriever';\nimport type { AgentSpec } from '../spec/spec';\nimport { agentKey } from '../spec/spec';\nimport type {\n AgentCallOptions,\n AgentGenerateParams,\n AgentGenerateResult,\n AgentStreamParams,\n ToolHandler,\n} from '../types';\nimport { specToolsToAISDKTools } from '../tools/tool-adapter';\nimport { createKnowledgeQueryTool } from '../tools/knowledge-tool';\nimport { injectStaticKnowledge } from '../knowledge/injector';\nimport { type AgentSessionStore, generateSessionId } from '../session/store';\nimport { type TelemetryCollector, trackAgentStep } from '../telemetry/adapter';\n\n/**\n * Call options schema for AI SDK v6.\n * Maps ContractSpec's tenant/actor system to AI SDK callOptionsSchema.\n */\nconst ContractSpecCallOptionsSchema = z.object({\n tenantId: z.string().optional(),\n actorId: z.string().optional(),\n sessionId: z.string().optional(),\n // Zod v4: z.record() requires both key and value schemas\n metadata: z.record(z.string(), z.unknown()).optional(),\n});\n\n/**\n * Type for tool with execute function (compatible with AI SDK Tool)\n * Using `any` for broad compatibility with AI SDK tool types\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype ExecutableTool = Tool<any, any>;\n\n/**\n * Configuration for creating a ContractSpecAgent.\n */\nexport interface ContractSpecAgentConfig {\n /** The agent specification */\n spec: AgentSpec;\n /** AI SDK language model */\n model: LanguageModel;\n /** Map of tool name to handler function */\n toolHandlers: Map<string, ToolHandler>;\n /** Optional knowledge retriever for RAG */\n knowledgeRetriever?: KnowledgeRetriever;\n /** Optional session store for persistence */\n sessionStore?: AgentSessionStore;\n /** Optional telemetry collector for evolution */\n telemetryCollector?: TelemetryCollector;\n /** Additional AI SDK tools (e.g., from MCP servers) */\n additionalTools?: Record<string, ExecutableTool>;\n}\n\n/**\n * ContractSpec Agent implementation using AI SDK v6.\n *\n * Integrates ContractSpec's spec-first governance with AI SDK's\n * ToolLoopAgent, providing:\n * - Spec-defined tools with type-safe handlers\n * - Hybrid knowledge injection (static + dynamic RAG)\n * - Session persistence\n * - Telemetry for evolution\n * - MCP interoperability\n */\nexport class ContractSpecAgent {\n readonly version = 'agent-v1';\n readonly id: string;\n readonly spec: AgentSpec;\n readonly tools: Record<string, ExecutableTool>;\n\n private readonly inner: ToolLoopAgent<\n z.infer<typeof ContractSpecCallOptionsSchema>,\n ToolSet,\n never\n >;\n private readonly config: ContractSpecAgentConfig;\n private instructions: string;\n\n private constructor(\n config: ContractSpecAgentConfig,\n instructions: string,\n tools: Record<string, ExecutableTool>\n ) {\n this.config = config;\n this.spec = config.spec;\n this.id = agentKey(config.spec.meta);\n this.tools = tools;\n this.instructions = instructions;\n\n // Create the inner ToolLoopAgent with AI SDK v6 settings\n this.inner = new ToolLoopAgent({\n model: config.model,\n instructions,\n tools: tools as ToolSet,\n // Use stopWhen instead of maxSteps (AI SDK v6 API)\n stopWhen: stepCountIs(config.spec.maxSteps ?? 10),\n // Schema for call options (tenant/actor context)\n callOptionsSchema: ContractSpecCallOptionsSchema,\n // Step-level telemetry callback\n onStepFinish: async (step: StepResult<ToolSet>) => {\n await this.handleStepFinish(step);\n },\n });\n }\n\n /**\n * Create a ContractSpecAgent instance.\n * This is async because knowledge injection may need to fetch static content.\n */\n static async create(\n config: ContractSpecAgentConfig\n ): Promise<ContractSpecAgent> {\n // 1. Inject static knowledge into instructions\n const instructions = await injectStaticKnowledge(\n config.spec.instructions,\n config.spec.knowledge ?? [],\n config.knowledgeRetriever\n );\n\n // 2. Build tools from spec\n const specTools = specToolsToAISDKTools(\n config.spec.tools,\n config.toolHandlers,\n { agentId: agentKey(config.spec.meta) }\n );\n\n // 3. Add dynamic knowledge query tool\n const knowledgeTool = config.knowledgeRetriever\n ? createKnowledgeQueryTool(\n config.knowledgeRetriever,\n config.spec.knowledge ?? []\n )\n : null;\n\n // 4. Combine all tools\n const tools: Record<string, ExecutableTool> = {\n ...specTools,\n ...(knowledgeTool ? { query_knowledge: knowledgeTool } : {}),\n ...(config.additionalTools ?? {}),\n };\n\n return new ContractSpecAgent(config, instructions, tools);\n }\n\n /**\n * Generate a response (non-streaming).\n */\n async generate(params: AgentGenerateParams): Promise<AgentGenerateResult> {\n const sessionId = params.options?.sessionId ?? generateSessionId();\n\n // Ensure session exists\n if (this.config.sessionStore) {\n const existing = await this.config.sessionStore.get(sessionId);\n if (!existing) {\n await this.config.sessionStore.create({\n sessionId,\n agentId: this.id,\n tenantId: params.options?.tenantId,\n actorId: params.options?.actorId,\n status: 'running',\n messages: [],\n steps: [],\n metadata: params.options?.metadata,\n });\n }\n }\n\n // Build prompt with optional system override\n const prompt = params.systemOverride\n ? `${this.instructions}\\n\\n${params.systemOverride}\\n\\n${params.prompt}`\n : params.prompt;\n\n // AI SDK v6: maxSteps is controlled via stopWhen in agent settings\n const result = await this.inner.generate({\n prompt,\n abortSignal: params.signal,\n options: {\n tenantId: params.options?.tenantId,\n actorId: params.options?.actorId,\n sessionId,\n metadata: params.options?.metadata,\n },\n });\n\n // Update session status\n if (this.config.sessionStore) {\n await this.config.sessionStore.update(sessionId, {\n status: 'completed',\n });\n }\n\n return {\n text: result.text,\n steps: result.steps,\n // Map AI SDK types to our simplified types\n toolCalls: result.toolCalls.map((tc) => ({\n type: 'tool-call' as const,\n toolCallId: tc.toolCallId,\n toolName: tc.toolName,\n args: 'args' in tc ? tc.args : 'input' in tc ? tc.input : undefined,\n })),\n toolResults: result.toolResults.map((tr) => ({\n type: 'tool-result' as const,\n toolCallId: tr.toolCallId,\n toolName: tr.toolName,\n output: tr.output,\n })),\n finishReason: result.finishReason,\n usage: result.usage,\n };\n }\n\n /**\n * Stream a response with real-time updates.\n */\n async stream(params: AgentStreamParams) {\n const sessionId = params.options?.sessionId ?? generateSessionId();\n\n const prompt = params.systemOverride\n ? `${this.instructions}\\n\\n${params.systemOverride}\\n\\n${params.prompt}`\n : params.prompt;\n\n // AI SDK v6: maxSteps is controlled via stopWhen in agent settings\n // onStepFinish callback is already set in agent construction\n return this.inner.stream({\n prompt,\n abortSignal: params.signal,\n options: {\n tenantId: params.options?.tenantId,\n actorId: params.options?.actorId,\n sessionId,\n metadata: params.options?.metadata,\n },\n });\n }\n\n /**\n * Handle step completion for persistence and telemetry.\n */\n private async handleStepFinish(step: StepResult<ToolSet>): Promise<void> {\n // 1. Persist to session store\n const sessionId = (step as { options?: AgentCallOptions }).options\n ?.sessionId;\n if (sessionId && this.config.sessionStore) {\n await this.config.sessionStore.appendStep(sessionId, step);\n }\n\n // 2. Feed telemetry to evolution engine\n if (this.config.telemetryCollector) {\n await trackAgentStep(this.config.telemetryCollector, this.id, step);\n }\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"contract-spec-agent.js","names":["z","ToolLoopAgent"],"sources":["../../src/agent/contract-spec-agent.ts"],"sourcesContent":["import {\n Experimental_Agent as ToolLoopAgent,\n type LanguageModel,\n stepCountIs,\n type StepResult,\n type Tool,\n type ToolSet,\n} from 'ai';\nimport * as z from 'zod';\nimport type { KnowledgeRetriever } from '@contractspec/lib.knowledge/retriever';\nimport type { AgentSpec } from '../spec/spec';\nimport { agentKey } from '../spec/spec';\nimport type {\n AgentCallOptions,\n AgentGenerateParams,\n AgentGenerateResult,\n AgentStreamParams,\n ToolHandler,\n} from '../types';\nimport { specToolsToAISDKTools } from '../tools/tool-adapter';\nimport { createKnowledgeQueryTool } from '../tools/knowledge-tool';\nimport { injectStaticKnowledge } from '../knowledge/injector';\nimport { type AgentSessionStore, generateSessionId } from '../session/store';\nimport { type TelemetryCollector, trackAgentStep } from '../telemetry/adapter';\n\n/**\n * Call options schema for AI SDK v6.\n * Maps ContractSpec's tenant/actor system to AI SDK callOptionsSchema.\n */\nconst ContractSpecCallOptionsSchema = z.object({\n tenantId: z.string().optional(),\n actorId: z.string().optional(),\n sessionId: z.string().optional(),\n // Zod v4: z.record() requires both key and value schemas\n metadata: z.record(z.string(), z.unknown()).optional(),\n});\n\n/**\n * Type for tool with execute function (compatible with AI SDK Tool)\n */\ntype ExecutableTool = Tool;\n\n/**\n * Configuration for creating a ContractSpecAgent.\n */\nexport interface ContractSpecAgentConfig {\n /** The agent specification */\n spec: AgentSpec;\n /** AI SDK language model */\n model: LanguageModel;\n /** Map of tool name to handler function */\n toolHandlers: Map<string, ToolHandler>;\n /** Optional knowledge retriever for RAG */\n knowledgeRetriever?: KnowledgeRetriever;\n /** Optional session store for persistence */\n sessionStore?: AgentSessionStore;\n /** Optional telemetry collector for evolution */\n telemetryCollector?: TelemetryCollector;\n /** Additional AI SDK tools (e.g., from MCP servers) */\n additionalTools?: Record<string, ExecutableTool>;\n}\n\n/**\n * ContractSpec Agent implementation using AI SDK v6.\n *\n * Integrates ContractSpec's spec-first governance with AI SDK's\n * ToolLoopAgent, providing:\n * - Spec-defined tools with type-safe handlers\n * - Hybrid knowledge injection (static + dynamic RAG)\n * - Session persistence\n * - Telemetry for evolution\n * - MCP interoperability\n */\nexport class ContractSpecAgent {\n readonly version = 'agent-v1';\n readonly id: string;\n readonly spec: AgentSpec;\n readonly tools: Record<string, ExecutableTool>;\n\n private readonly inner: ToolLoopAgent<\n z.infer<typeof ContractSpecCallOptionsSchema>,\n ToolSet,\n never\n >;\n private readonly config: ContractSpecAgentConfig;\n private instructions: string;\n\n private constructor(\n config: ContractSpecAgentConfig,\n instructions: string,\n tools: Record<string, ExecutableTool>\n ) {\n this.config = config;\n this.spec = config.spec;\n this.id = agentKey(config.spec.meta);\n this.tools = tools;\n this.instructions = instructions;\n\n // Create the inner ToolLoopAgent with AI SDK v6 settings\n this.inner = new ToolLoopAgent({\n model: config.model,\n instructions,\n tools: tools as ToolSet,\n // Use stopWhen instead of maxSteps (AI SDK v6 API)\n stopWhen: stepCountIs(config.spec.maxSteps ?? 10),\n // Schema for call options (tenant/actor context)\n callOptionsSchema: ContractSpecCallOptionsSchema,\n // Step-level telemetry callback\n onStepFinish: async (step: StepResult<ToolSet>) => {\n await this.handleStepFinish(step);\n },\n });\n }\n\n /**\n * Create a ContractSpecAgent instance.\n * This is async because knowledge injection may need to fetch static content.\n */\n static async create(\n config: ContractSpecAgentConfig\n ): Promise<ContractSpecAgent> {\n // 1. Inject static knowledge into instructions\n const instructions = await injectStaticKnowledge(\n config.spec.instructions,\n config.spec.knowledge ?? [],\n config.knowledgeRetriever\n );\n\n // 2. Build tools from spec\n const specTools = specToolsToAISDKTools(\n config.spec.tools,\n config.toolHandlers,\n { agentId: agentKey(config.spec.meta) }\n );\n\n // 3. Add dynamic knowledge query tool\n const knowledgeTool = config.knowledgeRetriever\n ? createKnowledgeQueryTool(\n config.knowledgeRetriever,\n config.spec.knowledge ?? []\n )\n : null;\n\n // 4. Combine all tools\n const tools: Record<string, ExecutableTool> = {\n ...specTools,\n ...(knowledgeTool ? { query_knowledge: knowledgeTool } : {}),\n ...(config.additionalTools ?? {}),\n };\n\n return new ContractSpecAgent(config, instructions, tools);\n }\n\n /**\n * Generate a response (non-streaming).\n */\n async generate(params: AgentGenerateParams): Promise<AgentGenerateResult> {\n const sessionId = params.options?.sessionId ?? generateSessionId();\n\n // Ensure session exists\n if (this.config.sessionStore) {\n const existing = await this.config.sessionStore.get(sessionId);\n if (!existing) {\n await this.config.sessionStore.create({\n sessionId,\n agentId: this.id,\n tenantId: params.options?.tenantId,\n actorId: params.options?.actorId,\n status: 'running',\n messages: [],\n steps: [],\n metadata: params.options?.metadata,\n });\n }\n }\n\n // Build prompt with optional system override\n const prompt = params.systemOverride\n ? `${this.instructions}\\n\\n${params.systemOverride}\\n\\n${params.prompt}`\n : params.prompt;\n\n // AI SDK v6: maxSteps is controlled via stopWhen in agent settings\n const result = await this.inner.generate({\n prompt,\n abortSignal: params.signal,\n options: {\n tenantId: params.options?.tenantId,\n actorId: params.options?.actorId,\n sessionId,\n metadata: params.options?.metadata,\n },\n });\n\n // Update session status\n if (this.config.sessionStore) {\n await this.config.sessionStore.update(sessionId, {\n status: 'completed',\n });\n }\n\n return {\n text: result.text,\n steps: result.steps,\n // Map AI SDK types to our simplified types\n toolCalls: result.toolCalls.map((tc) => ({\n type: 'tool-call' as const,\n toolCallId: tc.toolCallId,\n toolName: tc.toolName,\n args: 'args' in tc ? tc.args : 'input' in tc ? tc.input : undefined,\n })),\n toolResults: result.toolResults.map((tr) => ({\n type: 'tool-result' as const,\n toolCallId: tr.toolCallId,\n toolName: tr.toolName,\n output: tr.output,\n })),\n finishReason: result.finishReason,\n usage: result.usage,\n };\n }\n\n /**\n * Stream a response with real-time updates.\n */\n async stream(params: AgentStreamParams) {\n const sessionId = params.options?.sessionId ?? generateSessionId();\n\n const prompt = params.systemOverride\n ? `${this.instructions}\\n\\n${params.systemOverride}\\n\\n${params.prompt}`\n : params.prompt;\n\n // AI SDK v6: maxSteps is controlled via stopWhen in agent settings\n // onStepFinish callback is already set in agent construction\n return this.inner.stream({\n prompt,\n abortSignal: params.signal,\n options: {\n tenantId: params.options?.tenantId,\n actorId: params.options?.actorId,\n sessionId,\n metadata: params.options?.metadata,\n },\n });\n }\n\n /**\n * Handle step completion for persistence and telemetry.\n */\n private async handleStepFinish(step: StepResult<ToolSet>): Promise<void> {\n // 1. Persist to session store\n const sessionId = (step as { options?: AgentCallOptions }).options\n ?.sessionId;\n if (sessionId && this.config.sessionStore) {\n await this.config.sessionStore.appendStep(sessionId, step);\n }\n\n // 2. Feed telemetry to evolution engine\n if (this.config.telemetryCollector) {\n await trackAgentStep(this.config.telemetryCollector, this.id, step);\n }\n }\n}\n"],"mappings":"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"}
|
package/dist/agent/index.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
import { ContractSpecAgent, ContractSpecAgentConfig } from "./contract-spec-agent.js";
|
|
2
|
+
import { AgentJsonRunner, AgentJsonRunnerOptions, createAgentJsonRunner } from "./json-runner.js";
|
|
2
3
|
import { UnifiedAgent, UnifiedAgentBackend, UnifiedAgentBackendConfig, UnifiedAgentConfig, UnifiedAgentRunOptions, UnifiedAgentState, createAISDKAgent, createClaudeAgentSDKAgent, createOpenCodeSDKAgent, createUnifiedAgent, getAvailableBackends } from "./unified-agent.js";
|
|
3
|
-
export { ContractSpecAgent, ContractSpecAgentConfig, UnifiedAgent, UnifiedAgentBackend, UnifiedAgentBackendConfig, UnifiedAgentConfig, UnifiedAgentRunOptions, UnifiedAgentState, createAISDKAgent, createClaudeAgentSDKAgent, createOpenCodeSDKAgent, createUnifiedAgent, getAvailableBackends };
|
|
4
|
+
export { AgentJsonRunner, AgentJsonRunnerOptions, ContractSpecAgent, ContractSpecAgentConfig, UnifiedAgent, UnifiedAgentBackend, UnifiedAgentBackendConfig, UnifiedAgentConfig, UnifiedAgentRunOptions, UnifiedAgentState, createAISDKAgent, createAgentJsonRunner, createClaudeAgentSDKAgent, createOpenCodeSDKAgent, createUnifiedAgent, getAvailableBackends };
|
package/dist/agent/index.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { ContractSpecAgent } from "./contract-spec-agent.js";
|
|
2
|
+
import { createAgentJsonRunner } from "./json-runner.js";
|
|
2
3
|
import { UnifiedAgent, createAISDKAgent, createClaudeAgentSDKAgent, createOpenCodeSDKAgent, createUnifiedAgent, getAvailableBackends } from "./unified-agent.js";
|
|
3
4
|
|
|
4
|
-
export { ContractSpecAgent, UnifiedAgent, createAISDKAgent, createClaudeAgentSDKAgent, createOpenCodeSDKAgent, createUnifiedAgent, getAvailableBackends };
|
|
5
|
+
export { ContractSpecAgent, UnifiedAgent, createAISDKAgent, createAgentJsonRunner, createClaudeAgentSDKAgent, createOpenCodeSDKAgent, createUnifiedAgent, getAvailableBackends };
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { AgentSpec } from "../spec/spec.js";
|
|
2
|
+
import { ToolHandler } from "../types.js";
|
|
3
|
+
import { LanguageModel } from "ai";
|
|
4
|
+
import { ProviderConfig } from "@contractspec/lib.ai-providers/types";
|
|
5
|
+
|
|
6
|
+
//#region src/agent/json-runner.d.ts
|
|
7
|
+
interface AgentJsonRunnerOptions {
|
|
8
|
+
spec?: AgentSpec;
|
|
9
|
+
model?: LanguageModel;
|
|
10
|
+
provider?: ProviderConfig;
|
|
11
|
+
system?: string;
|
|
12
|
+
toolHandlers?: Map<string, ToolHandler>;
|
|
13
|
+
maxSteps?: number;
|
|
14
|
+
temperature?: number;
|
|
15
|
+
}
|
|
16
|
+
interface AgentJsonRunner {
|
|
17
|
+
generateJson: (prompt: string) => Promise<string>;
|
|
18
|
+
}
|
|
19
|
+
declare function createAgentJsonRunner(options: AgentJsonRunnerOptions): Promise<AgentJsonRunner>;
|
|
20
|
+
//#endregion
|
|
21
|
+
export { AgentJsonRunner, AgentJsonRunnerOptions, createAgentJsonRunner };
|
|
22
|
+
//# sourceMappingURL=json-runner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-runner.d.ts","names":[],"sources":["../../src/agent/json-runner.ts"],"mappings":";;;;;;UA6BiB,sBAAA;EACf,IAAA,GAAO,SAAA;EACP,KAAA,GAAQ,aAAA;EACR,QAAA,GAAW,cAAA;EACX,MAAA;EACA,YAAA,GAAe,GAAA,SAAY,WAAA;EAC3B,QAAA;EACA,WAAA;AAAA;AAAA,UAGe,eAAA;EACf,YAAA,GAAe,MAAA,aAAmB,OAAA;AAAA;AAAA,iBAyCd,qBAAA,CACpB,OAAA,EAAS,sBAAA,GACR,OAAA,CAAQ,eAAA"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { ContractSpecAgent } from "./contract-spec-agent.js";
|
|
2
|
+
import { createProvider } from "@contractspec/lib.ai-providers/factory";
|
|
3
|
+
import { StabilityEnum } from "@contractspec/lib.contracts/ownership";
|
|
4
|
+
|
|
5
|
+
//#region src/agent/json-runner.ts
|
|
6
|
+
const JSON_ONLY_RULES = [
|
|
7
|
+
"You MUST output valid JSON ONLY.",
|
|
8
|
+
"Do not wrap the output in markdown fences.",
|
|
9
|
+
"Do not include commentary or explanation.",
|
|
10
|
+
"Use double quotes for all keys and string values.",
|
|
11
|
+
"Do not include trailing commas."
|
|
12
|
+
].join("\n");
|
|
13
|
+
const DEFAULT_SPEC = {
|
|
14
|
+
meta: {
|
|
15
|
+
key: "agent.json-runner",
|
|
16
|
+
version: "1.0.0",
|
|
17
|
+
description: "JSON-only agent runner for deterministic pipelines.",
|
|
18
|
+
stability: StabilityEnum.Experimental,
|
|
19
|
+
owners: ["platform.core"],
|
|
20
|
+
tags: ["json", "agent"]
|
|
21
|
+
},
|
|
22
|
+
instructions: "You are a precise JSON generator.",
|
|
23
|
+
tools: []
|
|
24
|
+
};
|
|
25
|
+
function resolveModel(options) {
|
|
26
|
+
if (options.model) return options.model;
|
|
27
|
+
if (options.provider) return createProvider(options.provider).getModel();
|
|
28
|
+
throw new Error("createAgentJsonRunner requires a model or provider config");
|
|
29
|
+
}
|
|
30
|
+
function applyModelSettings(model, settings) {
|
|
31
|
+
const { temperature } = settings;
|
|
32
|
+
if (temperature === void 0) return model;
|
|
33
|
+
const withSettings = model;
|
|
34
|
+
if (typeof withSettings.withSettings === "function") return withSettings.withSettings({ temperature });
|
|
35
|
+
return model;
|
|
36
|
+
}
|
|
37
|
+
function buildInstructions(base, system) {
|
|
38
|
+
return [
|
|
39
|
+
base,
|
|
40
|
+
JSON_ONLY_RULES,
|
|
41
|
+
system
|
|
42
|
+
].filter(Boolean).join("\n\n");
|
|
43
|
+
}
|
|
44
|
+
function ensureToolHandlers(spec, handlers) {
|
|
45
|
+
for (const tool of spec.tools) if (!handlers.has(tool.name)) throw new Error(`Missing handler for tool: ${tool.name}`);
|
|
46
|
+
}
|
|
47
|
+
async function createAgentJsonRunner(options) {
|
|
48
|
+
const model = applyModelSettings(resolveModel(options), { temperature: options.temperature ?? 0 });
|
|
49
|
+
const baseSpec = options.spec ?? DEFAULT_SPEC;
|
|
50
|
+
const spec = {
|
|
51
|
+
...baseSpec,
|
|
52
|
+
instructions: buildInstructions(baseSpec.instructions, options.system),
|
|
53
|
+
maxSteps: options.maxSteps ?? baseSpec.maxSteps
|
|
54
|
+
};
|
|
55
|
+
const toolHandlers = options.toolHandlers ?? /* @__PURE__ */ new Map();
|
|
56
|
+
ensureToolHandlers(spec, toolHandlers);
|
|
57
|
+
const agent = await ContractSpecAgent.create({
|
|
58
|
+
spec,
|
|
59
|
+
model,
|
|
60
|
+
toolHandlers
|
|
61
|
+
});
|
|
62
|
+
return { async generateJson(prompt) {
|
|
63
|
+
return (await agent.generate({ prompt })).text;
|
|
64
|
+
} };
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
//#endregion
|
|
68
|
+
export { createAgentJsonRunner };
|
|
69
|
+
//# sourceMappingURL=json-runner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-runner.js","names":[],"sources":["../../src/agent/json-runner.ts"],"sourcesContent":["import type { LanguageModel } from 'ai';\nimport { createProvider } from '@contractspec/lib.ai-providers/factory';\nimport type { ProviderConfig } from '@contractspec/lib.ai-providers/types';\nimport { StabilityEnum } from '@contractspec/lib.contracts/ownership';\nimport type { AgentSpec } from '../spec/spec';\nimport type { ToolHandler } from '../types';\nimport { ContractSpecAgent } from './contract-spec-agent';\n\nconst JSON_ONLY_RULES = [\n 'You MUST output valid JSON ONLY.',\n 'Do not wrap the output in markdown fences.',\n 'Do not include commentary or explanation.',\n 'Use double quotes for all keys and string values.',\n 'Do not include trailing commas.',\n].join('\\n');\n\nconst DEFAULT_SPEC: AgentSpec = {\n meta: {\n key: 'agent.json-runner',\n version: '1.0.0',\n description: 'JSON-only agent runner for deterministic pipelines.',\n stability: StabilityEnum.Experimental,\n owners: ['platform.core'],\n tags: ['json', 'agent'],\n },\n instructions: 'You are a precise JSON generator.',\n tools: [],\n};\n\nexport interface AgentJsonRunnerOptions {\n spec?: AgentSpec;\n model?: LanguageModel;\n provider?: ProviderConfig;\n system?: string;\n toolHandlers?: Map<string, ToolHandler>;\n maxSteps?: number;\n temperature?: number;\n}\n\nexport interface AgentJsonRunner {\n generateJson: (prompt: string) => Promise<string>;\n}\n\nfunction resolveModel(options: AgentJsonRunnerOptions): LanguageModel {\n if (options.model) return options.model;\n if (options.provider) {\n return createProvider(options.provider).getModel();\n }\n throw new Error('createAgentJsonRunner requires a model or provider config');\n}\n\nfunction applyModelSettings(\n model: LanguageModel,\n settings: { temperature?: number }\n): LanguageModel {\n const { temperature } = settings;\n if (temperature === undefined) return model;\n const withSettings = model as LanguageModel & {\n withSettings?: (settings: Record<string, unknown>) => LanguageModel;\n };\n if (typeof withSettings.withSettings === 'function') {\n return withSettings.withSettings({ temperature });\n }\n return model;\n}\n\nfunction buildInstructions(base: string, system?: string): string {\n return [base, JSON_ONLY_RULES, system].filter(Boolean).join('\\n\\n');\n}\n\nfunction ensureToolHandlers(\n spec: AgentSpec,\n handlers: Map<string, ToolHandler>\n): void {\n for (const tool of spec.tools) {\n if (!handlers.has(tool.name)) {\n throw new Error(`Missing handler for tool: ${tool.name}`);\n }\n }\n}\n\nexport async function createAgentJsonRunner(\n options: AgentJsonRunnerOptions\n): Promise<AgentJsonRunner> {\n const model = applyModelSettings(resolveModel(options), {\n temperature: options.temperature ?? 0,\n });\n const baseSpec = options.spec ?? DEFAULT_SPEC;\n const spec: AgentSpec = {\n ...baseSpec,\n instructions: buildInstructions(baseSpec.instructions, options.system),\n maxSteps: options.maxSteps ?? baseSpec.maxSteps,\n };\n\n const toolHandlers = options.toolHandlers ?? new Map<string, ToolHandler>();\n ensureToolHandlers(spec, toolHandlers);\n\n const agent = await ContractSpecAgent.create({\n spec,\n model,\n toolHandlers,\n });\n\n return {\n async generateJson(prompt: string) {\n const result = await agent.generate({ prompt });\n return result.text;\n },\n };\n}\n"],"mappings":";;;;;AAQA,MAAM,kBAAkB;CACtB;CACA;CACA;CACA;CACA;CACD,CAAC,KAAK,KAAK;AAEZ,MAAM,eAA0B;CAC9B,MAAM;EACJ,KAAK;EACL,SAAS;EACT,aAAa;EACb,WAAW,cAAc;EACzB,QAAQ,CAAC,gBAAgB;EACzB,MAAM,CAAC,QAAQ,QAAQ;EACxB;CACD,cAAc;CACd,OAAO,EAAE;CACV;AAgBD,SAAS,aAAa,SAAgD;AACpE,KAAI,QAAQ,MAAO,QAAO,QAAQ;AAClC,KAAI,QAAQ,SACV,QAAO,eAAe,QAAQ,SAAS,CAAC,UAAU;AAEpD,OAAM,IAAI,MAAM,4DAA4D;;AAG9E,SAAS,mBACP,OACA,UACe;CACf,MAAM,EAAE,gBAAgB;AACxB,KAAI,gBAAgB,OAAW,QAAO;CACtC,MAAM,eAAe;AAGrB,KAAI,OAAO,aAAa,iBAAiB,WACvC,QAAO,aAAa,aAAa,EAAE,aAAa,CAAC;AAEnD,QAAO;;AAGT,SAAS,kBAAkB,MAAc,QAAyB;AAChE,QAAO;EAAC;EAAM;EAAiB;EAAO,CAAC,OAAO,QAAQ,CAAC,KAAK,OAAO;;AAGrE,SAAS,mBACP,MACA,UACM;AACN,MAAK,MAAM,QAAQ,KAAK,MACtB,KAAI,CAAC,SAAS,IAAI,KAAK,KAAK,CAC1B,OAAM,IAAI,MAAM,6BAA6B,KAAK,OAAO;;AAK/D,eAAsB,sBACpB,SAC0B;CAC1B,MAAM,QAAQ,mBAAmB,aAAa,QAAQ,EAAE,EACtD,aAAa,QAAQ,eAAe,GACrC,CAAC;CACF,MAAM,WAAW,QAAQ,QAAQ;CACjC,MAAM,OAAkB;EACtB,GAAG;EACH,cAAc,kBAAkB,SAAS,cAAc,QAAQ,OAAO;EACtE,UAAU,QAAQ,YAAY,SAAS;EACxC;CAED,MAAM,eAAe,QAAQ,gCAAgB,IAAI,KAA0B;AAC3E,oBAAmB,MAAM,aAAa;CAEtC,MAAM,QAAQ,MAAM,kBAAkB,OAAO;EAC3C;EACA;EACA;EACD,CAAC;AAEF,QAAO,EACL,MAAM,aAAa,QAAgB;AAEjC,UADe,MAAM,MAAM,SAAS,EAAE,QAAQ,CAAC,EACjC;IAEjB"}
|
|
@@ -1,15 +1,18 @@
|
|
|
1
1
|
import { AgentSpec } from "../spec/spec.js";
|
|
2
2
|
import { AgentCallOptions, AgentGenerateResult, ToolHandler } from "../types.js";
|
|
3
3
|
import { ClaudeAgentSDKConfig, OpenCodeSDKConfig } from "../providers/types.js";
|
|
4
|
+
import { LanguageModel } from "ai";
|
|
5
|
+
import { ProviderConfig } from "@contractspec/lib.ai-providers/types";
|
|
4
6
|
|
|
5
7
|
//#region src/agent/unified-agent.d.ts
|
|
6
|
-
|
|
7
8
|
/** Supported backend types */
|
|
8
9
|
type UnifiedAgentBackend = 'ai-sdk' | 'claude-agent-sdk' | 'opencode-sdk';
|
|
9
10
|
/** Backend-specific configuration */
|
|
10
11
|
interface UnifiedAgentBackendConfig {
|
|
11
12
|
'ai-sdk'?: {
|
|
12
13
|
model?: string;
|
|
14
|
+
modelInstance?: LanguageModel;
|
|
15
|
+
provider?: ProviderConfig;
|
|
13
16
|
temperature?: number;
|
|
14
17
|
maxTokens?: number;
|
|
15
18
|
};
|
|
@@ -66,6 +69,9 @@ declare class UnifiedAgent {
|
|
|
66
69
|
private runWithAISDK;
|
|
67
70
|
private runWithExternalProvider;
|
|
68
71
|
private convertExternalResult;
|
|
72
|
+
private getAISDKConfig;
|
|
73
|
+
private resolveAISDKModel;
|
|
74
|
+
private applyModelSettings;
|
|
69
75
|
/**
|
|
70
76
|
* Get agent state.
|
|
71
77
|
*/
|
|
@@ -109,6 +115,10 @@ declare function createUnifiedAgent(spec: AgentSpec, config: UnifiedAgentConfig)
|
|
|
109
115
|
declare function createAISDKAgent(spec: AgentSpec, options?: {
|
|
110
116
|
tools?: Map<string, ToolHandler>;
|
|
111
117
|
model?: string;
|
|
118
|
+
modelInstance?: LanguageModel;
|
|
119
|
+
provider?: ProviderConfig;
|
|
120
|
+
temperature?: number;
|
|
121
|
+
maxTokens?: number;
|
|
112
122
|
}): UnifiedAgent;
|
|
113
123
|
/**
|
|
114
124
|
* Create a unified agent with Claude Agent SDK backend.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unified-agent.d.ts","names":[],"sources":["../../src/agent/unified-agent.ts"],"
|
|
1
|
+
{"version":3,"file":"unified-agent.d.ts","names":[],"sources":["../../src/agent/unified-agent.ts"],"mappings":";;;;;;;;KAiDY,mBAAA;;UAMK,yBAAA;EACf,QAAA;IACE,KAAA;IACA,aAAA,GAAgB,aAAA;IAChB,QAAA,GAAW,cAAA;IACX,WAAA;IACA,SAAA;EAAA;EAEF,kBAAA,GAAqB,oBAAA;EACrB,cAAA,GAAiB,iBAAA;AAAA;;UAIF,kBAAA;EAIf;EAFA,OAAA,EAAS,mBAAA;EAE0B;EAAnC,MAAA,GAAS,yBAAA,CAA0B,mBAAA;EAE3B;EAAR,KAAA,GAAQ,GAAA,SAAY,WAAA;EAEpB;EAAA,eAAA,GAAkB,mBAAA;EAElB;EAAA,OAAA;AAAA;AAIF;AAAA,UAAiB,sBAAA,SAA+B,gBAAA;;EAE9C,OAAA,GAAU,mBAAA;AAAA;;UAIK,iBAAA;EACf,OAAA,EAAS,mBAAA;EACT,OAAA;EACA,SAAA;EACA,YAAA;EACA,SAAA,GAAY,KAAA;AAAA;;;;cAUD,YAAA;EAAA,iBACM,IAAA;EAAA,iBACA,MAAA;EAAA,iBACA,KAAA;EAAA,QACT,QAAA;EAAA,QACA,OAAA;EAAA,QACA,KAAA;cAEI,IAAA,EAAM,SAAA,EAAW,MAAA,EAAQ,kBAAA;;;;EAc/B,UAAA,CAAA,GAAc,OAAA;EAAA,QAyCN,wBAAA;EAAA,QA0BA,qBAAA;EA6BX;;;EAHG,GAAA,CACJ,OAAA,UACA,OAAA,GAAU,sBAAA,GACT,OAAA,CAAQ,mBAAA;EAAA,QA2BG,YAAA;EAAA,QAmBA,uBAAA;EAAA,QAmBN,qBAAA;EAAA,QA+BA,cAAA;EAAA,QAKM,iBAAA;EAAA,QAmBN,kBAAA;EA4GkC;;;EAhF1C,QAAA,CAAA,GAAY,iBAAA;EAtQJ;;;EA6QR,OAAA,CAAA,GAAW,SAAA;EAzQO;;;EAgRlB,UAAA,CAAA,GAAc,mBAAA;EAlQR;;;EAyQA,kBAAA,CAAmB,OAAA,EAAS,mBAAA,GAAsB,OAAA;EA5KlD;;;EA6MA,aAAA,CAAc,OAAA,EAAS,mBAAA,GAAsB,OAAA;EA1MhD;;;EA0NH,KAAA,CAAA;EAzJQ;;;EAmKR,OAAA,CAAQ,IAAA,UAAc,OAAA,EAAS,WAAA;EAhF/B;;;EAuFA,UAAA,CAAW,IAAA;AAAA;;;;iBAYG,kBAAA,CACd,IAAA,EAAM,SAAA,EACN,MAAA,EAAQ,kBAAA,GACP,YAAA;;;;iBAOa,gBAAA,CACd,IAAA,EAAM,SAAA,EACN,OAAA;EACE,KAAA,GAAQ,GAAA,SAAY,WAAA;EACpB,KAAA;EACA,aAAA,GAAgB,aAAA;EAChB,QAAA,GAAW,cAAA;EACX,WAAA;EACA,SAAA;AAAA,IAED,YAAA;;;;iBAiBa,yBAAA,CACd,IAAA,EAAM,SAAA,EACN,MAAA,GAAS,oBAAA;EACP,KAAA,GAAQ,GAAA,SAAY,WAAA;AAAA,IAErB,YAAA;;;;iBAYa,sBAAA,CACd,IAAA,EAAM,SAAA,EACN,MAAA,GAAS,iBAAA;EACP,KAAA,GAAQ,GAAA,SAAY,WAAA;AAAA,IAErB,YAAA;;;;iBAYmB,oBAAA,CAAA,GAAwB,OAAA,CAAQ,mBAAA"}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { createProvider } from "@contractspec/lib.ai-providers/factory";
|
|
2
|
+
|
|
1
3
|
//#region src/agent/unified-agent.ts
|
|
2
4
|
/**
|
|
3
5
|
* Unified agent that works across multiple backends.
|
|
@@ -93,11 +95,10 @@ var UnifiedAgent = class {
|
|
|
93
95
|
}
|
|
94
96
|
async runWithAISDK(message, options) {
|
|
95
97
|
const { ContractSpecAgent } = await import("./contract-spec-agent.js");
|
|
96
|
-
const
|
|
97
|
-
const backendConfig = this.config.backend === "ai-sdk" ? this.config.config : {};
|
|
98
|
+
const model = await this.resolveAISDKModel();
|
|
98
99
|
return await (await ContractSpecAgent.create({
|
|
99
100
|
spec: this.spec,
|
|
100
|
-
model
|
|
101
|
+
model,
|
|
101
102
|
toolHandlers: this.tools
|
|
102
103
|
})).generate({
|
|
103
104
|
prompt: message,
|
|
@@ -136,6 +137,33 @@ var UnifiedAgent = class {
|
|
|
136
137
|
} : void 0
|
|
137
138
|
};
|
|
138
139
|
}
|
|
140
|
+
getAISDKConfig() {
|
|
141
|
+
if (this.config.backend !== "ai-sdk") return void 0;
|
|
142
|
+
return this.config.config;
|
|
143
|
+
}
|
|
144
|
+
async resolveAISDKModel() {
|
|
145
|
+
const backendConfig = this.getAISDKConfig();
|
|
146
|
+
let model;
|
|
147
|
+
if (backendConfig?.modelInstance) model = backendConfig.modelInstance;
|
|
148
|
+
else if (backendConfig?.provider) model = createProvider(backendConfig.provider).getModel();
|
|
149
|
+
else {
|
|
150
|
+
const { anthropic } = await import("@ai-sdk/anthropic");
|
|
151
|
+
model = anthropic(backendConfig?.model ?? "claude-3-5-sonnet-20240620");
|
|
152
|
+
}
|
|
153
|
+
return this.applyModelSettings(model, {
|
|
154
|
+
temperature: backendConfig?.temperature,
|
|
155
|
+
maxTokens: backendConfig?.maxTokens
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
applyModelSettings(model, settings) {
|
|
159
|
+
if (settings.temperature === void 0 && settings.maxTokens === void 0) return model;
|
|
160
|
+
const withSettings = model;
|
|
161
|
+
if (typeof withSettings.withSettings === "function") return withSettings.withSettings({
|
|
162
|
+
temperature: settings.temperature,
|
|
163
|
+
maxTokens: settings.maxTokens
|
|
164
|
+
});
|
|
165
|
+
return model;
|
|
166
|
+
}
|
|
139
167
|
/**
|
|
140
168
|
* Get agent state.
|
|
141
169
|
*/
|
|
@@ -221,7 +249,13 @@ function createAISDKAgent(spec, options) {
|
|
|
221
249
|
return new UnifiedAgent(spec, {
|
|
222
250
|
backend: "ai-sdk",
|
|
223
251
|
tools: options?.tools,
|
|
224
|
-
config: {
|
|
252
|
+
config: {
|
|
253
|
+
model: options?.model,
|
|
254
|
+
modelInstance: options?.modelInstance,
|
|
255
|
+
provider: options?.provider,
|
|
256
|
+
temperature: options?.temperature,
|
|
257
|
+
maxTokens: options?.maxTokens
|
|
258
|
+
}
|
|
225
259
|
});
|
|
226
260
|
}
|
|
227
261
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unified-agent.js","names":[],"sources":["../../src/agent/unified-agent.ts"],"sourcesContent":["/**\n * Unified Agent Wrapper\n *\n * Provides a single API surface for running agents regardless of backend:\n * - AI SDK v6 (existing ContractSpec implementation)\n * - Claude Agent SDK (@anthropic-ai/claude-agent-sdk)\n * - OpenCode SDK (@opencode-ai/sdk)\n *\n * @example\n * ```typescript\n * import { UnifiedAgent, createUnifiedAgent } from '@contractspec/lib.ai-agent';\n *\n * // Create agent with AI SDK backend (default)\n * const agent = createUnifiedAgent(mySpec, {\n * backend: 'ai-sdk',\n * });\n *\n * // Create agent with Claude Agent SDK backend\n * const claudeAgent = createUnifiedAgent(mySpec, {\n * backend: 'claude-agent-sdk',\n * config: { extendedThinking: true },\n * });\n *\n * // All agents use the same API\n * const response = await agent.run('Hello');\n * ```\n */\nimport type { AgentSpec } from '../spec/spec';\nimport type {\n AgentCallOptions,\n AgentGenerateResult,\n ToolHandler,\n LanguageModelUsage,\n} from '../types';\nimport type {\n ExternalAgentProvider,\n ClaudeAgentSDKConfig,\n OpenCodeSDKConfig,\n ExternalExecuteResult,\n} from '../providers/types';\n\n// =============================================================================\n// Types\n// =============================================================================\n\n/** Supported backend types */\nexport type UnifiedAgentBackend =\n | 'ai-sdk'\n | 'claude-agent-sdk'\n | 'opencode-sdk';\n\n/** Backend-specific configuration */\nexport interface UnifiedAgentBackendConfig {\n 'ai-sdk'?: {\n model?: string;\n temperature?: number;\n maxTokens?: number;\n };\n 'claude-agent-sdk'?: ClaudeAgentSDKConfig;\n 'opencode-sdk'?: OpenCodeSDKConfig;\n}\n\n/** Unified agent configuration */\nexport interface UnifiedAgentConfig {\n /** Backend to use */\n backend: UnifiedAgentBackend;\n /** Backend-specific configuration */\n config?: UnifiedAgentBackendConfig[UnifiedAgentBackend];\n /** Tool handlers for the agent */\n tools?: Map<string, ToolHandler>;\n /** Fallback backend if primary fails */\n fallbackBackend?: UnifiedAgentBackend;\n /** Enable verbose logging */\n verbose?: boolean;\n}\n\n/** Unified agent run options */\nexport interface UnifiedAgentRunOptions extends AgentCallOptions {\n /** Override backend for this call */\n backend?: UnifiedAgentBackend;\n}\n\n/** Unified agent state */\nexport interface UnifiedAgentState {\n backend: UnifiedAgentBackend;\n isReady: boolean;\n sessionId?: string;\n messageCount: number;\n lastError?: Error;\n}\n\n// =============================================================================\n// Unified Agent Implementation\n// =============================================================================\n\n/**\n * Unified agent that works across multiple backends.\n */\nexport class UnifiedAgent {\n private readonly spec: AgentSpec;\n private readonly config: UnifiedAgentConfig;\n private readonly tools: Map<string, ToolHandler>;\n private provider?: ExternalAgentProvider;\n private context?: unknown;\n private state: UnifiedAgentState;\n\n constructor(spec: AgentSpec, config: UnifiedAgentConfig) {\n this.spec = spec;\n this.config = config;\n this.tools = config.tools ?? new Map();\n this.state = {\n backend: config.backend,\n isReady: false,\n messageCount: 0,\n };\n }\n\n /**\n * Initialize the agent with its backend.\n */\n async initialize(): Promise<void> {\n const backend = this.config.backend;\n\n try {\n switch (backend) {\n case 'ai-sdk':\n // AI SDK is always available\n this.state.isReady = true;\n break;\n\n case 'claude-agent-sdk':\n await this.initializeClaudeAgentSDK();\n break;\n\n case 'opencode-sdk':\n await this.initializeOpenCodeSDK();\n break;\n\n default:\n throw new Error(`Unknown backend: ${backend}`);\n }\n } catch (error) {\n this.state.lastError =\n error instanceof Error ? error : new Error(String(error));\n\n // Try fallback if configured\n if (\n this.config.fallbackBackend &&\n this.config.fallbackBackend !== backend\n ) {\n console.warn(\n `[UnifiedAgent] ${backend} failed, falling back to ${this.config.fallbackBackend}`\n );\n this.state.backend = this.config.fallbackBackend;\n await this.initialize();\n } else {\n throw error;\n }\n }\n }\n\n private async initializeClaudeAgentSDK(): Promise<void> {\n // Dynamic import to avoid requiring the dependency\n try {\n const { ClaudeAgentSDKProvider } =\n await import('../providers/claude-agent-sdk');\n const config = this.config.config as ClaudeAgentSDKConfig | undefined;\n this.provider = new ClaudeAgentSDKProvider(config ?? {});\n\n if (!this.provider.isAvailable()) {\n throw new Error(\n 'Claude Agent SDK not available. Install @anthropic-ai/claude-agent-sdk'\n );\n }\n\n this.context = await this.provider.createContext(this.spec);\n this.state.isReady = true;\n } catch (error) {\n if ((error as { code?: string }).code === 'MODULE_NOT_FOUND') {\n throw new Error(\n 'Claude Agent SDK not installed. Run: npm install @anthropic-ai/claude-agent-sdk'\n );\n }\n throw error;\n }\n }\n\n private async initializeOpenCodeSDK(): Promise<void> {\n // Dynamic import to avoid requiring the dependency\n try {\n const { OpenCodeSDKProvider } = await import('../providers/opencode-sdk');\n const config = this.config.config as OpenCodeSDKConfig | undefined;\n this.provider = new OpenCodeSDKProvider(config ?? {});\n\n if (!this.provider.isAvailable()) {\n throw new Error('OpenCode SDK not available. Install @opencode-ai/sdk');\n }\n\n this.context = await this.provider.createContext(this.spec);\n this.state.isReady = true;\n } catch (error) {\n if ((error as { code?: string }).code === 'MODULE_NOT_FOUND') {\n throw new Error(\n 'OpenCode SDK not installed. Run: npm install @opencode-ai/sdk'\n );\n }\n throw error;\n }\n }\n\n /**\n * Run the agent with a message.\n */\n async run(\n message: string,\n options?: UnifiedAgentRunOptions\n ): Promise<AgentGenerateResult> {\n if (!this.state.isReady) {\n await this.initialize();\n }\n\n const backend = options?.backend ?? this.state.backend;\n this.state.messageCount++;\n\n try {\n switch (backend) {\n case 'ai-sdk':\n return await this.runWithAISDK(message, options);\n\n case 'claude-agent-sdk':\n case 'opencode-sdk':\n return await this.runWithExternalProvider(message, options);\n\n default:\n throw new Error(`Unknown backend: ${backend}`);\n }\n } catch (error) {\n this.state.lastError =\n error instanceof Error ? error : new Error(String(error));\n throw error;\n }\n }\n\n private async runWithAISDK(\n message: string,\n options?: UnifiedAgentRunOptions\n ): Promise<AgentGenerateResult> {\n // Import the existing ContractSpec agent factory\n const { ContractSpecAgent } = await import('./contract-spec-agent');\n const { anthropic } = await import('@ai-sdk/anthropic');\n\n // Use factory method create() instead of new\n const backendConfig =\n this.config.backend === 'ai-sdk'\n ? (this.config.config as Record<string, unknown>)\n : {};\n\n const agent = await ContractSpecAgent.create({\n spec: this.spec,\n model: anthropic(\n (backendConfig?.model as string) ?? 'claude-3-5-sonnet-20240620'\n ),\n toolHandlers: this.tools,\n });\n\n return await agent.generate({\n prompt: message,\n options,\n });\n }\n\n private async runWithExternalProvider(\n message: string,\n options?: UnifiedAgentRunOptions\n ): Promise<AgentGenerateResult> {\n if (!this.provider || !this.context) {\n throw new Error('Provider not initialized');\n }\n\n const result: ExternalExecuteResult = await this.provider.execute(\n this.context as Parameters<ExternalAgentProvider['execute']>[0],\n {\n prompt: message,\n options,\n }\n );\n\n return this.convertExternalResult(result);\n }\n\n private convertExternalResult(\n result: ExternalExecuteResult\n ): AgentGenerateResult {\n return {\n text: result.text,\n steps: [],\n toolCalls: result.toolCalls.map((tc) => ({\n type: 'tool-call' as const,\n toolCallId: tc.toolCallId,\n toolName: tc.toolName,\n args: tc.args,\n })),\n toolResults: result.toolResults.map((tr) => ({\n type: 'tool-result' as const,\n toolCallId: tr.toolCallId,\n toolName: tr.toolName,\n output: tr.output,\n })),\n finishReason: result.finishReason,\n usage: result.usage\n ? ({\n promptTokens: result.usage.inputTokens,\n completionTokens: result.usage.outputTokens,\n totalTokens:\n result.usage.totalTokens ??\n result.usage.inputTokens + result.usage.outputTokens,\n } as unknown as LanguageModelUsage)\n : undefined,\n };\n }\n\n /**\n * Get agent state.\n */\n getState(): UnifiedAgentState {\n return { ...this.state };\n }\n\n /**\n * Get the agent spec.\n */\n getSpec(): AgentSpec {\n return this.spec;\n }\n\n /**\n * Get the current backend.\n */\n getBackend(): UnifiedAgentBackend {\n return this.state.backend;\n }\n\n /**\n * Check if a specific backend is available.\n */\n async isBackendAvailable(backend: UnifiedAgentBackend): Promise<boolean> {\n switch (backend) {\n case 'ai-sdk':\n return true;\n\n case 'claude-agent-sdk':\n try {\n const { ClaudeAgentSDKProvider } =\n await import('../providers/claude-agent-sdk');\n const provider = new ClaudeAgentSDKProvider({});\n return provider.isAvailable();\n } catch {\n return false;\n }\n\n case 'opencode-sdk':\n try {\n const { OpenCodeSDKProvider } =\n await import('../providers/opencode-sdk');\n const provider = new OpenCodeSDKProvider({});\n return provider.isAvailable();\n } catch {\n return false;\n }\n\n default:\n return false;\n }\n }\n\n /**\n * Switch to a different backend.\n */\n async switchBackend(backend: UnifiedAgentBackend): Promise<void> {\n if (backend === this.state.backend) {\n return;\n }\n\n this.state.backend = backend;\n this.state.isReady = false;\n this.provider = undefined;\n this.context = undefined;\n\n await this.initialize();\n }\n\n /**\n * Reset the agent state.\n */\n reset(): void {\n this.state.messageCount = 0;\n this.state.sessionId = undefined;\n this.state.lastError = undefined;\n this.context = undefined;\n }\n\n /**\n * Add a tool handler.\n */\n addTool(name: string, handler: ToolHandler): void {\n this.tools.set(name, handler);\n }\n\n /**\n * Remove a tool handler.\n */\n removeTool(name: string): boolean {\n return this.tools.delete(name);\n }\n}\n\n// =============================================================================\n// Factory Functions\n// =============================================================================\n\n/**\n * Create a unified agent.\n */\nexport function createUnifiedAgent(\n spec: AgentSpec,\n config: UnifiedAgentConfig\n): UnifiedAgent {\n return new UnifiedAgent(spec, config);\n}\n\n/**\n * Create a unified agent with AI SDK backend (default).\n */\nexport function createAISDKAgent(\n spec: AgentSpec,\n options?: {\n tools?: Map<string, ToolHandler>;\n model?: string;\n }\n): UnifiedAgent {\n return new UnifiedAgent(spec, {\n backend: 'ai-sdk',\n tools: options?.tools,\n config: { model: options?.model },\n });\n}\n\n/**\n * Create a unified agent with Claude Agent SDK backend.\n */\nexport function createClaudeAgentSDKAgent(\n spec: AgentSpec,\n config?: ClaudeAgentSDKConfig & {\n tools?: Map<string, ToolHandler>;\n }\n): UnifiedAgent {\n const { tools, ...sdkConfig } = config ?? {};\n return new UnifiedAgent(spec, {\n backend: 'claude-agent-sdk',\n tools,\n config: sdkConfig,\n });\n}\n\n/**\n * Create a unified agent with OpenCode SDK backend.\n */\nexport function createOpenCodeSDKAgent(\n spec: AgentSpec,\n config?: OpenCodeSDKConfig & {\n tools?: Map<string, ToolHandler>;\n }\n): UnifiedAgent {\n const { tools, ...sdkConfig } = config ?? {};\n return new UnifiedAgent(spec, {\n backend: 'opencode-sdk',\n tools,\n config: sdkConfig,\n });\n}\n\n/**\n * Get available backends.\n */\nexport async function getAvailableBackends(): Promise<UnifiedAgentBackend[]> {\n const backends: UnifiedAgentBackend[] = ['ai-sdk'];\n\n try {\n const { ClaudeAgentSDKProvider } =\n await import('../providers/claude-agent-sdk');\n const provider = new ClaudeAgentSDKProvider({});\n if (provider.isAvailable()) {\n backends.push('claude-agent-sdk');\n }\n } catch {\n // Not available\n }\n\n try {\n const { OpenCodeSDKProvider } = await import('../providers/opencode-sdk');\n const provider = new OpenCodeSDKProvider({});\n if (provider.isAvailable()) {\n backends.push('opencode-sdk');\n }\n } catch {\n // Not available\n }\n\n return backends;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"unified-agent.js","names":[],"sources":["../../src/agent/unified-agent.ts"],"sourcesContent":["/**\n * Unified Agent Wrapper\n *\n * Provides a single API surface for running agents regardless of backend:\n * - AI SDK v6 (existing ContractSpec implementation)\n * - Claude Agent SDK (@anthropic-ai/claude-agent-sdk)\n * - OpenCode SDK (@opencode-ai/sdk)\n *\n * @example\n * ```typescript\n * import { UnifiedAgent, createUnifiedAgent } from '@contractspec/lib.ai-agent';\n *\n * // Create agent with AI SDK backend (default)\n * const agent = createUnifiedAgent(mySpec, {\n * backend: 'ai-sdk',\n * });\n *\n * // Create agent with Claude Agent SDK backend\n * const claudeAgent = createUnifiedAgent(mySpec, {\n * backend: 'claude-agent-sdk',\n * config: { extendedThinking: true },\n * });\n *\n * // All agents use the same API\n * const response = await agent.run('Hello');\n * ```\n */\nimport type { LanguageModel } from 'ai';\nimport type { ProviderConfig } from '@contractspec/lib.ai-providers/types';\nimport { createProvider } from '@contractspec/lib.ai-providers/factory';\nimport type { AgentSpec } from '../spec/spec';\nimport type {\n AgentCallOptions,\n AgentGenerateResult,\n ToolHandler,\n LanguageModelUsage,\n} from '../types';\nimport type {\n ExternalAgentProvider,\n ClaudeAgentSDKConfig,\n OpenCodeSDKConfig,\n ExternalExecuteResult,\n} from '../providers/types';\n\n// =============================================================================\n// Types\n// =============================================================================\n\n/** Supported backend types */\nexport type UnifiedAgentBackend =\n | 'ai-sdk'\n | 'claude-agent-sdk'\n | 'opencode-sdk';\n\n/** Backend-specific configuration */\nexport interface UnifiedAgentBackendConfig {\n 'ai-sdk'?: {\n model?: string;\n modelInstance?: LanguageModel;\n provider?: ProviderConfig;\n temperature?: number;\n maxTokens?: number;\n };\n 'claude-agent-sdk'?: ClaudeAgentSDKConfig;\n 'opencode-sdk'?: OpenCodeSDKConfig;\n}\n\n/** Unified agent configuration */\nexport interface UnifiedAgentConfig {\n /** Backend to use */\n backend: UnifiedAgentBackend;\n /** Backend-specific configuration */\n config?: UnifiedAgentBackendConfig[UnifiedAgentBackend];\n /** Tool handlers for the agent */\n tools?: Map<string, ToolHandler>;\n /** Fallback backend if primary fails */\n fallbackBackend?: UnifiedAgentBackend;\n /** Enable verbose logging */\n verbose?: boolean;\n}\n\n/** Unified agent run options */\nexport interface UnifiedAgentRunOptions extends AgentCallOptions {\n /** Override backend for this call */\n backend?: UnifiedAgentBackend;\n}\n\n/** Unified agent state */\nexport interface UnifiedAgentState {\n backend: UnifiedAgentBackend;\n isReady: boolean;\n sessionId?: string;\n messageCount: number;\n lastError?: Error;\n}\n\n// =============================================================================\n// Unified Agent Implementation\n// =============================================================================\n\n/**\n * Unified agent that works across multiple backends.\n */\nexport class UnifiedAgent {\n private readonly spec: AgentSpec;\n private readonly config: UnifiedAgentConfig;\n private readonly tools: Map<string, ToolHandler>;\n private provider?: ExternalAgentProvider;\n private context?: unknown;\n private state: UnifiedAgentState;\n\n constructor(spec: AgentSpec, config: UnifiedAgentConfig) {\n this.spec = spec;\n this.config = config;\n this.tools = config.tools ?? new Map();\n this.state = {\n backend: config.backend,\n isReady: false,\n messageCount: 0,\n };\n }\n\n /**\n * Initialize the agent with its backend.\n */\n async initialize(): Promise<void> {\n const backend = this.config.backend;\n\n try {\n switch (backend) {\n case 'ai-sdk':\n // AI SDK is always available\n this.state.isReady = true;\n break;\n\n case 'claude-agent-sdk':\n await this.initializeClaudeAgentSDK();\n break;\n\n case 'opencode-sdk':\n await this.initializeOpenCodeSDK();\n break;\n\n default:\n throw new Error(`Unknown backend: ${backend}`);\n }\n } catch (error) {\n this.state.lastError =\n error instanceof Error ? error : new Error(String(error));\n\n // Try fallback if configured\n if (\n this.config.fallbackBackend &&\n this.config.fallbackBackend !== backend\n ) {\n console.warn(\n `[UnifiedAgent] ${backend} failed, falling back to ${this.config.fallbackBackend}`\n );\n this.state.backend = this.config.fallbackBackend;\n await this.initialize();\n } else {\n throw error;\n }\n }\n }\n\n private async initializeClaudeAgentSDK(): Promise<void> {\n // Dynamic import to avoid requiring the dependency\n try {\n const { ClaudeAgentSDKProvider } =\n await import('../providers/claude-agent-sdk');\n const config = this.config.config as ClaudeAgentSDKConfig | undefined;\n this.provider = new ClaudeAgentSDKProvider(config ?? {});\n\n if (!this.provider.isAvailable()) {\n throw new Error(\n 'Claude Agent SDK not available. Install @anthropic-ai/claude-agent-sdk'\n );\n }\n\n this.context = await this.provider.createContext(this.spec);\n this.state.isReady = true;\n } catch (error) {\n if ((error as { code?: string }).code === 'MODULE_NOT_FOUND') {\n throw new Error(\n 'Claude Agent SDK not installed. Run: npm install @anthropic-ai/claude-agent-sdk'\n );\n }\n throw error;\n }\n }\n\n private async initializeOpenCodeSDK(): Promise<void> {\n // Dynamic import to avoid requiring the dependency\n try {\n const { OpenCodeSDKProvider } = await import('../providers/opencode-sdk');\n const config = this.config.config as OpenCodeSDKConfig | undefined;\n this.provider = new OpenCodeSDKProvider(config ?? {});\n\n if (!this.provider.isAvailable()) {\n throw new Error('OpenCode SDK not available. Install @opencode-ai/sdk');\n }\n\n this.context = await this.provider.createContext(this.spec);\n this.state.isReady = true;\n } catch (error) {\n if ((error as { code?: string }).code === 'MODULE_NOT_FOUND') {\n throw new Error(\n 'OpenCode SDK not installed. Run: npm install @opencode-ai/sdk'\n );\n }\n throw error;\n }\n }\n\n /**\n * Run the agent with a message.\n */\n async run(\n message: string,\n options?: UnifiedAgentRunOptions\n ): Promise<AgentGenerateResult> {\n if (!this.state.isReady) {\n await this.initialize();\n }\n\n const backend = options?.backend ?? this.state.backend;\n this.state.messageCount++;\n\n try {\n switch (backend) {\n case 'ai-sdk':\n return await this.runWithAISDK(message, options);\n\n case 'claude-agent-sdk':\n case 'opencode-sdk':\n return await this.runWithExternalProvider(message, options);\n\n default:\n throw new Error(`Unknown backend: ${backend}`);\n }\n } catch (error) {\n this.state.lastError =\n error instanceof Error ? error : new Error(String(error));\n throw error;\n }\n }\n\n private async runWithAISDK(\n message: string,\n options?: UnifiedAgentRunOptions\n ): Promise<AgentGenerateResult> {\n // Import the existing ContractSpec agent factory\n const { ContractSpecAgent } = await import('./contract-spec-agent');\n const model = await this.resolveAISDKModel();\n const agent = await ContractSpecAgent.create({\n spec: this.spec,\n model,\n toolHandlers: this.tools,\n });\n\n return await agent.generate({\n prompt: message,\n options,\n });\n }\n\n private async runWithExternalProvider(\n message: string,\n options?: UnifiedAgentRunOptions\n ): Promise<AgentGenerateResult> {\n if (!this.provider || !this.context) {\n throw new Error('Provider not initialized');\n }\n\n const result: ExternalExecuteResult = await this.provider.execute(\n this.context as Parameters<ExternalAgentProvider['execute']>[0],\n {\n prompt: message,\n options,\n }\n );\n\n return this.convertExternalResult(result);\n }\n\n private convertExternalResult(\n result: ExternalExecuteResult\n ): AgentGenerateResult {\n return {\n text: result.text,\n steps: [],\n toolCalls: result.toolCalls.map((tc) => ({\n type: 'tool-call' as const,\n toolCallId: tc.toolCallId,\n toolName: tc.toolName,\n args: tc.args,\n })),\n toolResults: result.toolResults.map((tr) => ({\n type: 'tool-result' as const,\n toolCallId: tr.toolCallId,\n toolName: tr.toolName,\n output: tr.output,\n })),\n finishReason: result.finishReason,\n usage: result.usage\n ? ({\n promptTokens: result.usage.inputTokens,\n completionTokens: result.usage.outputTokens,\n totalTokens:\n result.usage.totalTokens ??\n result.usage.inputTokens + result.usage.outputTokens,\n } as unknown as LanguageModelUsage)\n : undefined,\n };\n }\n\n private getAISDKConfig(): UnifiedAgentBackendConfig['ai-sdk'] | undefined {\n if (this.config.backend !== 'ai-sdk') return undefined;\n return this.config.config as UnifiedAgentBackendConfig['ai-sdk'];\n }\n\n private async resolveAISDKModel(): Promise<LanguageModel> {\n const backendConfig = this.getAISDKConfig();\n let model: LanguageModel;\n\n if (backendConfig?.modelInstance) {\n model = backendConfig.modelInstance;\n } else if (backendConfig?.provider) {\n model = createProvider(backendConfig.provider).getModel();\n } else {\n const { anthropic } = await import('@ai-sdk/anthropic');\n model = anthropic(backendConfig?.model ?? 'claude-3-5-sonnet-20240620');\n }\n\n return this.applyModelSettings(model, {\n temperature: backendConfig?.temperature,\n maxTokens: backendConfig?.maxTokens,\n });\n }\n\n private applyModelSettings(\n model: LanguageModel,\n settings: { temperature?: number; maxTokens?: number }\n ): LanguageModel {\n if (\n settings.temperature === undefined &&\n settings.maxTokens === undefined\n ) {\n return model;\n }\n\n const withSettings = model as LanguageModel & {\n withSettings?: (settings: Record<string, unknown>) => LanguageModel;\n };\n\n if (typeof withSettings.withSettings === 'function') {\n return withSettings.withSettings({\n temperature: settings.temperature,\n maxTokens: settings.maxTokens,\n });\n }\n\n return model;\n }\n\n /**\n * Get agent state.\n */\n getState(): UnifiedAgentState {\n return { ...this.state };\n }\n\n /**\n * Get the agent spec.\n */\n getSpec(): AgentSpec {\n return this.spec;\n }\n\n /**\n * Get the current backend.\n */\n getBackend(): UnifiedAgentBackend {\n return this.state.backend;\n }\n\n /**\n * Check if a specific backend is available.\n */\n async isBackendAvailable(backend: UnifiedAgentBackend): Promise<boolean> {\n switch (backend) {\n case 'ai-sdk':\n return true;\n\n case 'claude-agent-sdk':\n try {\n const { ClaudeAgentSDKProvider } =\n await import('../providers/claude-agent-sdk');\n const provider = new ClaudeAgentSDKProvider({});\n return provider.isAvailable();\n } catch {\n return false;\n }\n\n case 'opencode-sdk':\n try {\n const { OpenCodeSDKProvider } =\n await import('../providers/opencode-sdk');\n const provider = new OpenCodeSDKProvider({});\n return provider.isAvailable();\n } catch {\n return false;\n }\n\n default:\n return false;\n }\n }\n\n /**\n * Switch to a different backend.\n */\n async switchBackend(backend: UnifiedAgentBackend): Promise<void> {\n if (backend === this.state.backend) {\n return;\n }\n\n this.state.backend = backend;\n this.state.isReady = false;\n this.provider = undefined;\n this.context = undefined;\n\n await this.initialize();\n }\n\n /**\n * Reset the agent state.\n */\n reset(): void {\n this.state.messageCount = 0;\n this.state.sessionId = undefined;\n this.state.lastError = undefined;\n this.context = undefined;\n }\n\n /**\n * Add a tool handler.\n */\n addTool(name: string, handler: ToolHandler): void {\n this.tools.set(name, handler);\n }\n\n /**\n * Remove a tool handler.\n */\n removeTool(name: string): boolean {\n return this.tools.delete(name);\n }\n}\n\n// =============================================================================\n// Factory Functions\n// =============================================================================\n\n/**\n * Create a unified agent.\n */\nexport function createUnifiedAgent(\n spec: AgentSpec,\n config: UnifiedAgentConfig\n): UnifiedAgent {\n return new UnifiedAgent(spec, config);\n}\n\n/**\n * Create a unified agent with AI SDK backend (default).\n */\nexport function createAISDKAgent(\n spec: AgentSpec,\n options?: {\n tools?: Map<string, ToolHandler>;\n model?: string;\n modelInstance?: LanguageModel;\n provider?: ProviderConfig;\n temperature?: number;\n maxTokens?: number;\n }\n): UnifiedAgent {\n return new UnifiedAgent(spec, {\n backend: 'ai-sdk',\n tools: options?.tools,\n config: {\n model: options?.model,\n modelInstance: options?.modelInstance,\n provider: options?.provider,\n temperature: options?.temperature,\n maxTokens: options?.maxTokens,\n },\n });\n}\n\n/**\n * Create a unified agent with Claude Agent SDK backend.\n */\nexport function createClaudeAgentSDKAgent(\n spec: AgentSpec,\n config?: ClaudeAgentSDKConfig & {\n tools?: Map<string, ToolHandler>;\n }\n): UnifiedAgent {\n const { tools, ...sdkConfig } = config ?? {};\n return new UnifiedAgent(spec, {\n backend: 'claude-agent-sdk',\n tools,\n config: sdkConfig,\n });\n}\n\n/**\n * Create a unified agent with OpenCode SDK backend.\n */\nexport function createOpenCodeSDKAgent(\n spec: AgentSpec,\n config?: OpenCodeSDKConfig & {\n tools?: Map<string, ToolHandler>;\n }\n): UnifiedAgent {\n const { tools, ...sdkConfig } = config ?? {};\n return new UnifiedAgent(spec, {\n backend: 'opencode-sdk',\n tools,\n config: sdkConfig,\n });\n}\n\n/**\n * Get available backends.\n */\nexport async function getAvailableBackends(): Promise<UnifiedAgentBackend[]> {\n const backends: UnifiedAgentBackend[] = ['ai-sdk'];\n\n try {\n const { ClaudeAgentSDKProvider } =\n await import('../providers/claude-agent-sdk');\n const provider = new ClaudeAgentSDKProvider({});\n if (provider.isAvailable()) {\n backends.push('claude-agent-sdk');\n }\n } catch {\n // Not available\n }\n\n try {\n const { OpenCodeSDKProvider } = await import('../providers/opencode-sdk');\n const provider = new OpenCodeSDKProvider({});\n if (provider.isAvailable()) {\n backends.push('opencode-sdk');\n }\n } catch {\n // Not available\n }\n\n return backends;\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow.d.ts","names":[],"sources":["../../src/approval/workflow.ts"],"
|
|
1
|
+
{"version":3,"file":"workflow.d.ts","names":[],"sources":["../../src/approval/workflow.ts"],"mappings":";;;KAGY,cAAA;;AAAZ;;;;;UAQiB,eAAA;EAAe;EAE9B,EAAA;EAgBa;EAdb,SAAA;EAkBU;EAhBV,OAAA;EAoBiB;EAlBjB,QAAA;EANA;EAQA,QAAA;EAJA;EAMA,UAAA;EAFA;EAIA,QAAA;EAAA;EAEA,MAAA;EAEA;EAAA,WAAA,EAAa,IAAA;EAEb;EAAA,MAAA,EAAQ,cAAA;EAER;EAAA,OAAA,GAAU,MAAA;EAEV;EAAA,QAAA;EAEa;EAAb,UAAA,GAAa,IAAA;EAER;EAAL,KAAA;AAAA;;;;UAMe,aAAA;EACf,MAAA,CAAO,OAAA,EAAS,eAAA,GAAkB,OAAA;EAClC,GAAA,CAAI,EAAA,WAAa,OAAA,CAAQ,eAAA;EACzB,eAAA,CAAgB,UAAA,WAAqB,OAAA,CAAQ,eAAA;EAC7C,MAAA,CACE,EAAA,UACA,OAAA,EAAS,OAAA,CAAQ,IAAA,CAAK,eAAA,yBACrB,OAAA;EACH,IAAA,CAAK,OAAA;IACH,MAAA,GAAS,cAAA;IACT,OAAA;IACA,QAAA;EAAA,IACE,OAAA,CAAQ,eAAA;AAAA;;;;cAMD,qBAAA,YAAiC,aAAA;EAAA,iBAC3B,KAAA;EAEX,MAAA,CAAO,OAAA,EAAS,eAAA,GAAkB,OAAA;EAIlC,GAAA,CAAI,EAAA,WAAa,OAAA,CAAQ,eAAA;EAIzB,eAAA,CAAgB,UAAA,WAAqB,OAAA,CAAQ,eAAA;EAS7C,MAAA,CACJ,EAAA,UACA,OAAA,EAAS,OAAA,CAAQ,IAAA,CAAK,eAAA,yBACrB,OAAA;EAOG,IAAA,CAAK,OAAA;IACT,MAAA,GAAS,cAAA;IACT,OAAA;IACA,QAAA;EAAA,IACE,OAAA,CAAQ,eAAA;EAkBZ,KAAA,CAAA;AAAA;;;;;;;;;;;;;;;;;AApDF;;;;;;;;;;cAmFa,gBAAA;EAAA,iBAEQ,KAAA;cAAA,KAAA,GAAO,aAAA;EAtDf;;;EA4DL,eAAA,CAAgB,MAAA;IACpB,SAAA;IACA,OAAA;IACA,QAAA;IACA,QAAA;IACA,UAAA;IACA,QAAA;IACA,MAAA;IACA,OAAA,GAAU,MAAA;EAAA,IACR,OAAA,CAAQ,eAAA;EA7FF;;;EAmHJ,2BAAA,CACJ,QAAA,EAAU,YAAA,EACV,OAAA;IACE,SAAA;IACA,OAAA;IACA,QAAA;IACA,MAAA;EAAA,IAED,OAAA,CAAQ,eAAA;EA5GA;;;EA2HL,OAAA,CAAQ,EAAA,UAAY,QAAA,UAAkB,KAAA,YAAiB,OAAA;EA1H1D;;;EAsIG,MAAA,CAAO,EAAA,UAAY,QAAA,UAAkB,KAAA,YAAiB,OAAA;EA7H1D;;;EAyII,SAAA,CAAU,UAAA,WAAqB,OAAA,CAAQ,cAAA;EAvIjC;;;EA+IN,UAAA,CAAW,UAAA,WAAqB,OAAA;EA9F3B;;;EAsGL,WAAA,CAAY,OAAA;IAChB,OAAA;IACA,QAAA;EAAA,IACE,OAAA,CAAQ,eAAA;EAjEA;;;EAwEN,GAAA,CAAI,EAAA,WAAa,OAAA,CAAQ,eAAA;AAAA;;;;iBAQjB,sBAAA,CACd,KAAA,GAAQ,aAAA,GACP,gBAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-agent-exporter.d.ts","names":[],"sources":["../../src/exporters/claude-agent-exporter.ts"],"
|
|
1
|
+
{"version":3,"file":"claude-agent-exporter.d.ts","names":[],"sources":["../../src/exporters/claude-agent-exporter.ts"],"mappings":";;;;;;;cAwBa,mBAAA,YAA+B,QAAA,CAC1C,wBAAA,EACA,uBAAA;EAAA,SAES,MAAA;EA6BE;;;EAxBX,MAAA,CACE,IAAA,EAAM,SAAA,EACN,OAAA,GAAS,wBAAA,GACR,uBAAA;EAZ+C;;;EA+BlD,UAAA,CACE,KAAA,EAAO,SAAA,IACP,OAAA,GAAS,wBAAA,GACR,uBAAA;EAhCH;;;EAuCA,QAAA,CAAS,IAAA,EAAM,SAAA;IAAc,KAAA;IAAgB,MAAA;EAAA;EA7B1C;;;EAAA,QA+DK,WAAA;EA1CG;;;EAAA,QAwEH,iBAAA;EAhEO;;;EAAA,QA+GP,WAAA;EA7EA;;;EAAA,QAyFA,eAAA;EA0BA;;;EAAA,QAAA,gBAAA;AAAA;;;;iBA2HM,mBAAA,CACd,IAAA,EAAM,SAAA,EACN,OAAA,GAAU,wBAAA,GACT,uBAAA;;;;iBAQa,gBAAA,CACd,IAAA,EAAM,SAAA,EACN,OAAA,GAAU,IAAA,CAAK,wBAAA;;;;iBAUD,sBAAA,CAAuB,IAAA,EAAM,SAAA;EAC3C,KAAA;EACA,MAAA;AAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"opencode-exporter.d.ts","names":[],"sources":["../../src/exporters/opencode-exporter.ts"],"
|
|
1
|
+
{"version":3,"file":"opencode-exporter.d.ts","names":[],"sources":["../../src/exporters/opencode-exporter.ts"],"mappings":";;;;;;;cA0Ba,gBAAA,YAA4B,QAAA,CACvC,qBAAA,EACA,oBAAA;EAAA,SAES,MAAA;EAyBE;;;EApBX,MAAA,CACE,IAAA,EAAM,SAAA,EACN,OAAA,GAAS,qBAAA,GACR,oBAAA;EAZ4C;;;EA2B/C,UAAA,CACE,KAAA,EAAO,SAAA,IACP,OAAA,GAAS,qBAAA,GACR,oBAAA;EA5BH;;;EAmCA,QAAA,CAAS,IAAA,EAAM,SAAA;IAAc,KAAA;IAAgB,MAAA;EAAA;EAzB1C;;;EAAA,QA2DK,eAAA;EA1CG;;;EAAA,QAmEH,WAAA;EA3DO;;;EAAA,QAuEP,gBAAA;EArCA;;;EAAA,QAuLA,uBAAA;AAAA;;AAuBV;;iBAAgB,gBAAA,CACd,IAAA,EAAM,SAAA,EACN,OAAA,GAAU,qBAAA,GACT,oBAAA;;;;iBAQa,wBAAA,CACd,IAAA,EAAM,SAAA,EACN,OAAA,GAAU,qBAAA;;;;iBAUI,oBAAA,CACd,IAAA,EAAM,SAAA,EACN,OAAA,GAAU,qBAAA,GACT,iBAAA;;;;iBASa,mBAAA,CAAoB,IAAA,EAAM,SAAA;EACxC,KAAA;EACA,MAAA;AAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","names":[],"sources":["../../src/exporters/types.ts"],"
|
|
1
|
+
{"version":3,"file":"types.d.ts","names":[],"sources":["../../src/exporters/types.ts"],"mappings":";;;;;;;UAiBiB,aAAA;EAME;EAJjB,eAAA;EAUU;EARV,WAAA;;EAEA,QAAA,GAAW,MAAA;AAAA;AAeb;;;AAAA,KATY,YAAA;;;;UASK,wBAAA,SAAiC,aAAA;EAQhD;EANA,KAAA;EAQe;EANf,gBAAA;EAM8C;EAJ9C,WAAA;EAIkD;EAFlD,gBAAA;EAQsC;EANtC,UAAA;IAAe,IAAA;IAAc,OAAA;IAAiB,IAAA;EAAA;AAAA;;;;UAM/B,uBAAA;EAMR;EAJP,MAAA,EAAQ,iBAAA;EAMI;EAJZ,QAAA;EAMU;EAJV,KAAA,EAAO,oBAAA;EAUQ;EARf,UAAA,EAAY,IAAA;;EAEZ,UAAA;AAAA;;;;UAMe,iBAAA;EACf,KAAA;EACA,MAAA;EACA,KAAA,EAAO,oBAAA;EACP,SAAA;EACA,YAAA;EACA,iBAAA;EACA,WAAA;IAAgB,IAAA;IAAc,OAAA;IAAiB,IAAA;EAAA;AAAA;;;;UAMhC,oBAAA;EACf,IAAA;EACA,WAAA;EACA,YAAA;IACE,IAAA;IACA,UAAA,GAAa,MAAA;IACb,QAAA;EAAA;EAEF,qBAAA;AAAA;;;;UAUe,qBAAA,SAA8B,aAAA;EAI7C;EAFA,SAAA,GAAY,iBAAA;EAMZ;EAJA,KAAA;EAQA;EANA,WAAA;EAMU;EAJV,QAAA;EAUmC;EARnC,MAAA;EAcgB;EAZhB,UAAA;AAAA;;;;UAMe,oBAAA;EAQL;EANV,UAAA,EAAY,iBAAA;EAYG;EAVf,cAAA;;EAEA,UAAA,EAAY,IAAA;EASZ;EAPA,UAAA;AAAA;;;;UAMe,iBAAA;EACf,IAAA;EACA,OAAA;EACA,WAAA;EACA,IAAA,EAAM,iBAAA;EACN,YAAA;EACA,KAAA,EAAO,gBAAA;EACP,MAAA;IACE,SAAA;IACA,WAAA;IACA,KAAA;EAAA;AAAA;;;;UAOa,gBAAA;EACf,IAAA;EACA,WAAA;EACA,MAAA,EAAQ,MAAA;EACR,iBAAA;AAAA;;;;UAUe,gBAAA,SAAyB,aAAA;EAMxC;EAJA,UAAA;EAMc;EAJd,aAAA;EAUe;EARf,gBAAA;;EAEA,cAAA;AAAA;;;;UAMe,eAAA;EAUC;EARhB,MAAA,EAAQ,mBAAA;EAAA;EAER,KAAA,EAAO,iBAAA;EAAA;EAEP,SAAA,GAAY,qBAAA;EAAA;EAEZ,OAAA,GAAU,mBAAA;EAAA;EAEV,UAAA,EAAY,IAAA;EAAA;EAEZ,UAAA;AAAA;;AAMF;;UAAiB,mBAAA;EACf,IAAA;EACA,OAAA;EACA,WAAA;EACA,YAAA;IACE,KAAA;IACA,SAAA;IACA,OAAA;EAAA;AAAA;;AAOJ;;UAAiB,iBAAA;EACf,IAAA;EACA,WAAA;EACA,WAAA;IACE,IAAA;IACA,UAAA,GAAa,MAAA;IACb,QAAA;EAAA;AAAA;;;AAOJ;UAAiB,qBAAA;EACf,GAAA;EACA,IAAA;EACA,WAAA;EACA,QAAA;AAAA;;;;UAMe,mBAAA;EACf,IAAA;EACA,WAAA;EACA,SAAA;IACE,IAAA;IACA,WAAA;IACA,QAAA;EAAA;AAAA;;;;UAWa,QAAA,kBAA0B,aAAA;EAAlB;EAAA,SAEd,MAAA,EAAQ,YAAA;EAFwB;;;EAOzC,MAAA,CAAO,IAAA,EAAM,SAAA,EAAW,OAAA,GAAU,QAAA,GAAW,OAAA;EAAA;;;EAK7C,UAAA,CAAW,KAAA,EAAO,SAAA,IAAa,OAAA,GAAU,QAAA,GAAW,OAAA;EAKrC;;;EAAf,QAAA,CAAS,IAAA,EAAM,SAAA;IAAc,KAAA;IAAgB,MAAA;EAAA;AAAA"}
|
package/dist/index.d.ts
CHANGED
|
@@ -4,6 +4,7 @@ import { AgentCallOptions, AgentEventEmitter, AgentEventName, AgentEventPayload,
|
|
|
4
4
|
import { AgentSessionStore, InMemorySessionStore, createInMemorySessionStore, generateSessionId } from "./session/store.js";
|
|
5
5
|
import { InMemoryTelemetryCollector, OperationMetricSample, TelemetryCollector, createInMemoryTelemetryCollector, noopTelemetryCollector, trackAgentStep } from "./telemetry/adapter.js";
|
|
6
6
|
import { ContractSpecAgent, ContractSpecAgentConfig } from "./agent/contract-spec-agent.js";
|
|
7
|
+
import { AgentJsonRunner, AgentJsonRunnerOptions, createAgentJsonRunner } from "./agent/json-runner.js";
|
|
7
8
|
import { McpClientConfig, McpClientResult, createMcpToolsets, mcpServerToTools } from "./tools/mcp-client.js";
|
|
8
9
|
import { ClaudeAgentContextMetadata, ClaudeAgentSDKConfig, ContextCreationError, ExternalAgentContext, ExternalAgentProvider, ExternalExecuteParams, ExternalExecuteResult, ExternalProviderError, ExternalProviderFactory, ExternalStreamChunk, ExternalToolDefinition, ExternalToolSet, ExternalUsage, OpenCodeAgentType, OpenCodeContextMetadata, OpenCodeSDKConfig, ProviderExecutionError, ProviderNotAvailableError, ProviderRegistry } from "./providers/types.js";
|
|
9
10
|
import { UnifiedAgent, UnifiedAgentBackend, UnifiedAgentBackendConfig, UnifiedAgentConfig, UnifiedAgentRunOptions, UnifiedAgentState, createAISDKAgent, createClaudeAgentSDKAgent, createOpenCodeSDKAgent, createUnifiedAgent, getAvailableBackends } from "./agent/unified-agent.js";
|
|
@@ -23,6 +24,7 @@ import { jsonSchemaToZod, jsonSchemaToZodSafe } from "./schema/json-schema-to-zo
|
|
|
23
24
|
import { SchemaOutput, enumToChoiceOutput, jsonSchemaToArrayOutput, jsonSchemaToOutput, textOutput, zodToOutput } from "./schema/schema-output.js";
|
|
24
25
|
import "./schema/index.js";
|
|
25
26
|
import { createKnowledgeInjector, injectStaticKnowledge } from "./knowledge/injector.js";
|
|
27
|
+
import "./knowledge/index.js";
|
|
26
28
|
import "./session/index.js";
|
|
27
29
|
import "./telemetry/index.js";
|
|
28
30
|
import { ClaudeAgentSDKProvider } from "./providers/claude-agent-sdk/adapter.js";
|
|
@@ -34,4 +36,4 @@ import { ContractSpecConsumer, createSingleSpecConsumer, createSpecConsumer } fr
|
|
|
34
36
|
import { ContractSpecToolConsumer, createToolConsumer, createToolServer, exportToolsForExternalSDK } from "./interop/tool-consumer.js";
|
|
35
37
|
import "./interop/index.js";
|
|
36
38
|
import { Experimental_Agent as ToolLoopAgent, LanguageModel, LanguageModelUsage, ModelMessage, StepResult, Tool, ToolSet, generateText } from "ai";
|
|
37
|
-
export { AgentCallOptions, AgentConfidencePolicy, AgentEscalationPolicy, AgentEventEmitter, AgentEventName, AgentEventPayload, AgentFinishReason, AgentGenerateParams, AgentGenerateResult, AgentKnowledgeRef, AgentMcpServerConfig, AgentMemoryConfig, AgentMessage, AgentMeta, AgentPolicy, AgentRegistry, AgentSessionState, AgentSessionStore, AgentSpec, AgentStatus, AgentStepMetrics, AgentStreamParams, AgentToolConfig, ApprovalRequest, ApprovalStatus, ApprovalStore, ApprovalWorkflow, ClaudeAgentConfig, ClaudeAgentContextMetadata, ClaudeAgentExportOptions, ClaudeAgentExportResult, ClaudeAgentExporter, ClaudeAgentSDKConfig, ClaudeAgentSDKProvider, ClaudeToolDefinition, ContextCreationError, ContractSpecAgent, ContractSpecAgentConfig, ContractSpecConsumer, ContractSpecToolConsumer, ExecutionMode, ExportFormat, ExportOptions, Exporter, ExternalAgentContext, ExternalAgentProvider, ExternalExecuteParams, ExternalExecuteResult, ExternalProviderError, ExternalProviderFactory, ExternalStreamChunk, ExternalToolConfig, ExternalToolDefinition, ExternalToolSet, ExternalUsage, ImplementationPromptOptions, ImplementationTaskType, InMemoryApprovalStore, InMemorySessionStore, InMemoryTelemetryCollector, type LanguageModel, type LanguageModelUsage, MCPExportOptions, MCPExportResult, MCPPromptDefinition, MCPResourceDefinition, MCPServerDefinition, MCPToolDefinition, McpClientConfig, McpClientResult, McpServerConfig, McpToolDefinition, type ModelMessage, OpenCodeAgentJSON, OpenCodeAgentType, OpenCodeContextMetadata, OpenCodeExportOptions, OpenCodeExportResult, OpenCodeExporter, OpenCodeSDKConfig, OpenCodeSDKProvider, OpenCodeToolJSON, OperationMetricSample, ProviderExecutionError, ProviderNotAvailableError, ProviderRegistry, SchemaOutput, SpecConsumer, SpecConsumerConfig, SpecExportFormat, SpecListEntry, SpecListOptions, SpecListResult, SpecMarkdownOptions, SpecPromptOptions, SpecQueryResult, type StepResult, TelemetryCollector, type Tool, ToolCallInfo, ToolConsumer, ToolConsumerConfig, ToolExecutionContext, ToolExportFormat, ToolExportTarget, ToolHandler, ToolLoopAgent, ToolResultInfo, ToolServer, ToolServerConfig, type ToolSet, ToolWithHandler, UnifiedAgent, UnifiedAgentBackend, UnifiedAgentBackendConfig, UnifiedAgentConfig, UnifiedAgentProvider, UnifiedAgentRunOptions, UnifiedAgentState, UnifiedAgentStatus, agentKey, agentToMcpServer, buildToolHandlers, createAISDKAgent, createAgentMcpServer, createAgentRegistry, createApprovalWorkflow, createClaudeAgentSDKAgent, createInMemorySessionStore, createInMemoryTelemetryCollector, createKnowledgeInjector, createKnowledgeQueryTool, createMcpToolsets, createOpenCodeSDKAgent, createProviderRegistry, createSingleSpecConsumer, createSpecConsumer, createToolConsumer, createToolHandler, createToolServer, createUnifiedAgent, defaultProviderRegistry, defineAgent, enumToChoiceOutput, exportToClaudeAgent, exportToOpenCode, exportToolsForExternalSDK, generateClaudeMd, generateOpenCodeJSON, generateOpenCodeMarkdown, generateSessionId, type generateText, getAvailableBackends, injectStaticKnowledge, jsonSchemaToArrayOutput, jsonSchemaToOutput, jsonSchemaToZod, jsonSchemaToZodSafe, mcpServerToTools, noopTelemetryCollector, specToolToAISDKTool, specToolsToAISDKTools, textOutput, trackAgentStep, validateForClaudeAgent, validateForOpenCode, zodToOutput };
|
|
39
|
+
export { AgentCallOptions, AgentConfidencePolicy, AgentEscalationPolicy, AgentEventEmitter, AgentEventName, AgentEventPayload, AgentFinishReason, AgentGenerateParams, AgentGenerateResult, AgentJsonRunner, AgentJsonRunnerOptions, AgentKnowledgeRef, AgentMcpServerConfig, AgentMemoryConfig, AgentMessage, AgentMeta, AgentPolicy, AgentRegistry, AgentSessionState, AgentSessionStore, AgentSpec, AgentStatus, AgentStepMetrics, AgentStreamParams, AgentToolConfig, ApprovalRequest, ApprovalStatus, ApprovalStore, ApprovalWorkflow, ClaudeAgentConfig, ClaudeAgentContextMetadata, ClaudeAgentExportOptions, ClaudeAgentExportResult, ClaudeAgentExporter, ClaudeAgentSDKConfig, ClaudeAgentSDKProvider, ClaudeToolDefinition, ContextCreationError, ContractSpecAgent, ContractSpecAgentConfig, ContractSpecConsumer, ContractSpecToolConsumer, ExecutionMode, ExportFormat, ExportOptions, Exporter, ExternalAgentContext, ExternalAgentProvider, ExternalExecuteParams, ExternalExecuteResult, ExternalProviderError, ExternalProviderFactory, ExternalStreamChunk, ExternalToolConfig, ExternalToolDefinition, ExternalToolSet, ExternalUsage, ImplementationPromptOptions, ImplementationTaskType, InMemoryApprovalStore, InMemorySessionStore, InMemoryTelemetryCollector, type LanguageModel, type LanguageModelUsage, MCPExportOptions, MCPExportResult, MCPPromptDefinition, MCPResourceDefinition, MCPServerDefinition, MCPToolDefinition, McpClientConfig, McpClientResult, McpServerConfig, McpToolDefinition, type ModelMessage, OpenCodeAgentJSON, OpenCodeAgentType, OpenCodeContextMetadata, OpenCodeExportOptions, OpenCodeExportResult, OpenCodeExporter, OpenCodeSDKConfig, OpenCodeSDKProvider, OpenCodeToolJSON, OperationMetricSample, ProviderExecutionError, ProviderNotAvailableError, ProviderRegistry, SchemaOutput, SpecConsumer, SpecConsumerConfig, SpecExportFormat, SpecListEntry, SpecListOptions, SpecListResult, SpecMarkdownOptions, SpecPromptOptions, SpecQueryResult, type StepResult, TelemetryCollector, type Tool, ToolCallInfo, ToolConsumer, ToolConsumerConfig, ToolExecutionContext, ToolExportFormat, ToolExportTarget, ToolHandler, ToolLoopAgent, ToolResultInfo, ToolServer, ToolServerConfig, type ToolSet, ToolWithHandler, UnifiedAgent, UnifiedAgentBackend, UnifiedAgentBackendConfig, UnifiedAgentConfig, UnifiedAgentProvider, UnifiedAgentRunOptions, UnifiedAgentState, UnifiedAgentStatus, agentKey, agentToMcpServer, buildToolHandlers, createAISDKAgent, createAgentJsonRunner, createAgentMcpServer, createAgentRegistry, createApprovalWorkflow, createClaudeAgentSDKAgent, createInMemorySessionStore, createInMemoryTelemetryCollector, createKnowledgeInjector, createKnowledgeQueryTool, createMcpToolsets, createOpenCodeSDKAgent, createProviderRegistry, createSingleSpecConsumer, createSpecConsumer, createToolConsumer, createToolHandler, createToolServer, createUnifiedAgent, defaultProviderRegistry, defineAgent, enumToChoiceOutput, exportToClaudeAgent, exportToOpenCode, exportToolsForExternalSDK, generateClaudeMd, generateOpenCodeJSON, generateOpenCodeMarkdown, generateSessionId, type generateText, getAvailableBackends, injectStaticKnowledge, jsonSchemaToArrayOutput, jsonSchemaToOutput, jsonSchemaToZod, jsonSchemaToZodSafe, mcpServerToTools, noopTelemetryCollector, specToolToAISDKTool, specToolsToAISDKTools, textOutput, trackAgentStep, validateForClaudeAgent, validateForOpenCode, zodToOutput };
|